<?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>189614</bug_id>
          
          <creation_ts>2018-09-14 00:33:46 -0700</creation_ts>
          <short_desc>Remove unused code in WebKitLegacy</short_desc>
          <delta_ts>2019-03-01 13:59:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1459681</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-09-14 00:33:46 -0700</bug_when>
    <thetext>Remove unused code in WebKitLegacy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459682</commentid>
    <comment_count>1</comment_count>
      <attachid>349744</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-09-14 00:34:50 -0700</bug_when>
    <thetext>Created attachment 349744
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459683</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-09-14 00:35:14 -0700</bug_when>
    <thetext>Ccing some folks to tell me why we can&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459684</commentid>
    <comment_count>3</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-09-14 00:35:45 -0700</bug_when>
    <thetext>It&apos;s also somewhat possible we have to keep stub headers around, will try to see if that&apos;s the case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459706</commentid>
    <comment_count>4</comment_count>
      <attachid>349744</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-09-14 02:10:12 -0700</bug_when>
    <thetext>Comment on attachment 349744
Patch

Actually, I know why. Will return to this in the not too distant future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511236</commentid>
    <comment_count>5</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2019-02-28 18:05:26 -0800</bug_when>
    <thetext>😮</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511330</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-03-01 00:14:04 -0800</bug_when>
    <thetext>A cursory glance at the internet suggests that there are many people who do import these two public headers directly, so perhaps we do need to leave them behind (and empty)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511564</commentid>
    <comment_count>7</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2019-03-01 13:14:01 -0800</bug_when>
    <thetext>(In reply to Tim Horton from comment #6)
&gt; A cursory glance at the internet suggests that there are many people who do
&gt; import these two public headers directly, so perhaps we do need to leave
&gt; them behind (and empty)?

I think (and Dan agrees) that you can go ahead and remove them. It&apos;s not unusual for people to have to fix their project builds when moving to a newer SDK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511568</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-03-01 13:27:22 -0800</bug_when>
    <thetext>Perfect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511571</commentid>
    <comment_count>9</comment_count>
      <attachid>363366</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-03-01 13:29:35 -0800</bug_when>
    <thetext>Created attachment 363366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511600</commentid>
    <comment_count>10</comment_count>
      <attachid>363366</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-01 13:58:52 -0800</bug_when>
    <thetext>Comment on attachment 363366
Patch

Clearing flags on attachment: 363366

Committed r242287: &lt;https://trac.webkit.org/changeset/242287&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511601</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-01 13:58:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511602</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-01 13:59:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/48521996&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>349744</attachid>
            <date>2018-09-14 00:34:50 -0700</date>
            <delta_ts>2019-03-01 13:29:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189614-20180914003449.patch</filename>
            <type>text/plain</type>
            <size>166765</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDA2YjE2MjEwMzY4ZGNhMWJi
MGE4MmY1YjU3YTkzZmFiMmRjYTgyMWQuLjk4ZTAyYWE1MzZkYTUyMzUzMjNlNzY2NDg4MWViYmEx
ZjY4ZjI0YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTgtMDktMTQgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHVudXNlZCBj
b2RlIGluIFdlYktpdExlZ2FjeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg5NjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBtYWMvTWlncmF0ZUhlYWRlcnNGcm9tV2ViS2l0TGVnYWN5Lm1ha2U6CisK
IDIwMTgtMDktMTMgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIzNTk1NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5k
ZXggZDVkZjZiYmI2OTZkY2Y3MmRlNTZhMGFiM2FkZGNhYjAzMzc3NjgzOS4uOWUzYTI0NTY3NDNh
MTI0ODIwZTU4ZjZjZmVmMzljYTg2ZDlmNTYwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAxOC0wOS0xNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW1vdmUgdW51c2VkIGNvZGUgaW4gV2ViS2l0TGVnYWN5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk2MTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdExlZ2Fj
eS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE4LTA5LTA1ICBEYXZpZCBLaWx6ZXIg
IDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjIzNTU4NSk6IFdl
YkRvd25sb2FkSW50ZXJuYWwuaCBpcyBtaXNzaW5nIGZyb20gV2ViS2l0TGVnYWN5IFhjb2RlIHBy
b2plY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBjZDJjMWIyMjczMTdkNDJiOTNm
ZTBkZDVmMTUxZDQ1OWE2YzcwMzI5Li44MDE5OTMwZDM5ZjYyYTgxYzg2YTNmN2UxZGUwNmY4NmM4
ZDAwMmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIw
MTgtMDktMTQgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIHVudXNlZCBjb2RlIGluIFdlYktpdExlZ2FjeQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg5NjE0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDYXJib24vQ2FyYm9uVXRpbHMuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBDYXJib24vQ2FyYm9uVXRpbHMubTogUmVtb3ZlZC4KKyAgICAgICAg
KiBDYXJib24vQ2FyYm9uV2luZG93QWRhcHRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIENhcmJv
bi9DYXJib25XaW5kb3dBZGFwdGVyLm1tOiBSZW1vdmVkLgorICAgICAgICAqIENhcmJvbi9DYXJi
b25XaW5kb3dDb250ZW50Vmlldy5oOiBSZW1vdmVkLgorICAgICAgICAqIENhcmJvbi9DYXJib25X
aW5kb3dDb250ZW50Vmlldy5tOiBSZW1vdmVkLgorICAgICAgICAqIENhcmJvbi9DYXJib25XaW5k
b3dGcmFtZS5oOiBSZW1vdmVkLgorICAgICAgICAqIENhcmJvbi9DYXJib25XaW5kb3dGcmFtZS5t
OiBSZW1vdmVkLgorICAgICAgICAqIENhcmJvbi9ISVZpZXdBZGFwdGVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogQ2FyYm9uL0hJVmlld0FkYXB0ZXIubTogUmVtb3ZlZC4KKyAgICAgICAgKiBDYXJi
b24vSElXZWJWaWV3Lmg6IFJlbW92ZWQuCisgICAgICAgICogQ2FyYm9uL0hJV2ViVmlldy5tbTog
UmVtb3ZlZC4KKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XZWJLaXRMZWdhY3kueGNjb25maWc6
CisgICAgICAgICogV2ViS2l0Lm1hYy5leHA6CisKIDIwMTgtMDktMTIgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggYW4gaW50ZXJuYWwg
YnVpbGQgYWZ0ZXIgcjIzNTkzNQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlncmF0
ZUhlYWRlcnNGcm9tV2ViS2l0TGVnYWN5Lm1ha2UgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaWdyYXRl
SGVhZGVyc0Zyb21XZWJLaXRMZWdhY3kubWFrZQppbmRleCA1ZmVkMzZlYWMzY2Y0ZDQzNmQwNzNl
MTkyNTc2MjIwMGI4NTk2NmNlLi40M2NiOTMzYjFlNGNjODI0NGViMDVlNTA2ZTg5YjQ4MGRmZGU3
NjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaWdyYXRlSGVhZGVyc0Zyb21XZWJL
aXRMZWdhY3kubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaWdyYXRlSGVhZGVyc0Zyb21X
ZWJLaXRMZWdhY3kubWFrZQpAQCAtMzMsNyArMzMsNiBAQCBQVUJMSUNfSEVBREVSU19ESVIgPSAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvJChQVUJMSUNfSEVBREVSU19GT0xERVJfUEFUSCkKIGlmZXEg
KCQoV0tfUExBVEZPUk1fTkFNRSksIG1hY29zeCkKIAogV0VCS0lUX1BVQkxJQ19IRUFERVJTID0g
XAotICAgIENhcmJvblV0aWxzLmggXAogICAgIERPTS5oIFwKICAgICBET01BYnN0cmFjdFZpZXcu
aCBcCiAgICAgRE9NQXR0ci5oIFwKQEAgLTE2NCw3ICsxNjMsNiBAQCBXRUJLSVRfUFVCTElDX0hF
QURFUlMgPSBcCiAgICAgRE9NWFBhdGhFeHByZXNzaW9uLmggXAogICAgIERPTVhQYXRoTlNSZXNv
bHZlci5oIFwKICAgICBET01YUGF0aFJlc3VsdC5oIFwKLSAgICBISVdlYlZpZXcuaCBcCiAgICAg
V2ViQXJjaGl2ZS5oIFwKICAgICBXZWJCYWNrRm9yd2FyZExpc3QuaCBcCiAgICAgV2ViRE9NT3Bl
cmF0aW9ucy5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dlYktpdExl
Z2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGI2MGIzZDI1YmVkMDdmMmNmMTk2
NGZiNTUyOTczZmZiYTA5MTU5ODYuLmIxZDEwZjJmMTY2MjcwODg2NDYyZDUzYmMzNWUxZjQxOTYw
NmJmYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvV2ViS2l0TGVnYWN5Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdh
Y3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjM0LDEyICsyMzQsNiBAQAogCQk5Mzk4
MTA2MDA4MjRCRjAxMDA4REYwMzggLyogV2ViUmVzb3VyY2VMb2FkRGVsZWdhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxM0Q0MjJFMDM0Q0Y1NUEw
MENBMkFDRCAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzOTgxMDYzMDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJIaXN0b3J5SXRlbUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTZGMjk2RjAzQTZDNDVBMDBDQTJEM0EgLyogV2ViSGlzdG9yeUl0
ZW1JbnRlcm5hbC5oICovOyB9OwogCQk5Mzk4MTA2NDA4MjRCRjAxMDA4REYwMzggLyogV2ViRm9y
bURlbGVnYXRlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkQzNkZENUUwM0Y3OEY5RTAwQTgwMTY2IC8qIFdlYkZvcm1EZWxlZ2F0ZVByaXZh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5
Mzk4MTA2NTA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93QWRhcHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjdFQkVFOTAwM0Y5REJBMTAz
Q0EwREU2IC8qIENhcmJvbldpbmRvd0FkYXB0ZXIuaCAqLzsgfTsKLQkJOTM5ODEwNjYwODI0QkYw
MTAwOERGMDM4IC8qIENhcmJvbldpbmRvd0NvbnRlbnRWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGN0VCRUU5MjAzRjlEQkExMDNDQTBERTYgLyog
Q2FyYm9uV2luZG93Q29udGVudFZpZXcuaCAqLzsgfTsKLQkJOTM5ODEwNjcwODI0QkYwMTAwOERG
MDM4IC8qIENhcmJvbldpbmRvd0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGN0VCRUU5NDAzRjlEQkExMDNDQTBERTYgLyogQ2FyYm9uV2luZG93
RnJhbWUuaCAqLzsgfTsKLQkJOTM5ODEwNjgwODI0QkYwMTAwOERGMDM4IC8qIEhJVmlld0FkYXB0
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3RUJF
RTlBMDNGOURCQTEwM0NBMERFNiAvKiBISVZpZXdBZGFwdGVyLmggKi87IH07Ci0JCTkzOTgxMDY5
MDgyNEJGMDEwMDhERjAzOCAvKiBISVdlYlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3RUJFRUFBMDNGOURCQTEwM0NBMERFNiAvKiBISVdlYlZp
ZXcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5
Mzk4MTA2QTA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uVXRpbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3OUI5NzQ4MDQwMTk5MzQwMzY5MDlEMiAv
KiBDYXJib25VdGlscy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTkzOTgxMDZEMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXRFcnJvcnNQcml2YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NENBNUY3
RTA0MjY4NUU4MDBDQTJBQ0EgLyogV2ViS2l0RXJyb3JzUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzOTgxMDZFMDgyNEJGMDEwMDhE
RjAzOCAvKiBXZWJGcmFtZVZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxQThCNTJFMDQyODJCNTkwMENBMkQzQSAvKiBXZWJGcmFtZVZpZXcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5Mzk4MTA2
RjA4MjRCRjAxMDA4REYwMzggLyogV2ViRnJhbWVWaWV3SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQThCNTMyMDQyODJCRDIwMENBMkQz
QSAvKiBXZWJGcmFtZVZpZXdJbnRlcm5hbC5oICovOyB9OwpAQCAtMzEyLDExICszMDYsNiBAQAog
CQk5Mzk4MTBGNDA4MjRCRjAxMDA4REYwMzggLyogV2ViSFRNTFZpZXcubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNTA4MUQ5NTAyQjZENEQ4MEFDQTJB
Q0EgLyogV2ViSFRNTFZpZXcubW0gKi87IH07CiAJCTkzOTgxMEY4MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJQcmVmZXJlbmNlcy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEY1QUVCQjNEMDI0QTUyNzYwMUMxQTUyNiAvKiBXZWJQcmVmZXJlbmNlcy5tbSAq
LzsgfTsKIAkJOTM5ODEwRkMwODI0QkYwMTAwOERGMDM4IC8qIFdlYkZvcm1EZWxlZ2F0ZS5tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ4MURBQjMwM0VC
MEIyRDAwQTgwMTY2IC8qIFdlYkZvcm1EZWxlZ2F0ZS5tICovOyB9OwotCQk5Mzk4MTBGRDA4MjRC
RjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93QWRhcHRlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3RUJFRTkxMDNGOURCQTEwM0NBMERFNiAvKiBD
YXJib25XaW5kb3dBZGFwdGVyLm1tICovOyB9OwotCQk5Mzk4MTBGRTA4MjRCRjAxMDA4REYwMzgg
LyogQ2FyYm9uV2luZG93Q29udGVudFZpZXcubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEY3RUJFRTkzMDNGOURCQTEwM0NBMERFNiAvKiBDYXJib25XaW5k
b3dDb250ZW50Vmlldy5tICovOyB9OwotCQk5Mzk4MTBGRjA4MjRCRjAxMDA4REYwMzggLyogQ2Fy
Ym9uV2luZG93RnJhbWUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY3RUJFRTk1MDNGOURCQTEwM0NBMERFNiAvKiBDYXJib25XaW5kb3dGcmFtZS5tICov
OyB9OwotCQk5Mzk4MTEwMDA4MjRCRjAxMDA4REYwMzggLyogSElWaWV3QWRhcHRlci5tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjdFQkVFOUIwM0Y5REJB
MTAzQ0EwREU2IC8qIEhJVmlld0FkYXB0ZXIubSAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxB
R1MgPSAiLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyI7IH07IH07Ci0JCTkzOTgxMTAxMDgy
NEJGMDEwMDhERjAzOCAvKiBDYXJib25VdGlscy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRjc5Qjk3NDkwNDAxOTkzNDAzNjkwOUQyIC8qIENhcmJvblV0
aWxzLm0gKi87IH07CiAJCTkzOTgxMTAzMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJLaXRFcnJvcnMu
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNzMwRjk4
MDNGQjFFNjYwMDA0NzM2RSAvKiBXZWJLaXRFcnJvcnMubSAqLzsgfTsKIAkJOTM5ODExMDYwODI0
QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lVmlldy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQThCNTJGMDQyODJCNTkwMENBMkQzQSAvKiBXZWJGcmFt
ZVZpZXcubW0gKi87IH07CiAJCTkzOTgxMTA3MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJWaWV3Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOEI1N0Ew
NDI4MzRGNzAwQ0EyRDNBIC8qIFdlYlZpZXcubW0gKi87IH07CkBAIC02NzUsNyArNjY0LDYgQEAK
IAkJOTNFMkExQTQxMjNCMEIzQzAwOUZFMTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMkExQTIxMjNCMEIz
QzAwOUZFMTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRTJBMUE1MTIzQjBCM0MwMDlGRTEyQSAvKiBX
ZWJEYXNoYm9hcmRSZWdpb24ubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5M0UyQTFBMzEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9u
Lm1tICovOyB9OwogCQk5M0ZERTkzMzBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0ZE
RTkzMjBENzlDQUYzMDA3NEYwMjkgLyogV2ViSGlzdG9yeUludGVybmFsLmggKi87IH07Ci0JCUEx
MDI2NTgzMUY1NjU0MDMwMEI0Qzg0NCAvKiBISVdlYlZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTAyNjU4MjFGNTY1NDAzMDBCNEM4NDQgLyog
SElXZWJWaWV3Lm1tICovOyB9OwogCQlBMTBDMUQxODE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVm
YXVsdEZvcm1EZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTEwQzFEMTAxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGb3JtRGVsZWdh
dGUuaCAqLzsgfTsKIAkJQTEwQzFEMTkxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGb3Jt
RGVsZWdhdGUubSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEExMEMxRDExMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0Rm9ybURlbGVnYXRlLm0gKi87
IH07CiAJCUExMEMxRDFBMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0RnJhbWVMb2FkRGVs
ZWdhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEx
MEMxRDEyMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0RnJhbWVMb2FkRGVsZWdhdGUuaCAq
LzsgfTsKQEAgLTE0MTUsNyArMTQwMyw2IEBACiAJCTkzRkRFOTMyMEQ3OUNBRjMwMDc0RjAyOSAv
KiBXZWJIaXN0b3J5SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViSGlzdG9yeUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlDQUU5
RDA3MDI1MkE0MTMwRUNBMTZFQSAvKiBXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJQcmVmZXJlbmNlc1By
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTlDRjBFMjQ5MDIxMzYxQjAwRUNBMTZFQSAvKiBXZWJGcmFtZVByaXZhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJGcmFt
ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07Ci0JCUExMDI2NTgyMUY1NjU0MDMwMEI0Qzg0NCAvKiBISVdlYlZpZXcubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBISVdlYlZpZXcubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExMEMxRDEwMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJE
ZWZhdWx0Rm9ybURlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YkRlZmF1bHRGb3JtRGVsZWdhdGUuaDsgcGF0aCA9IGlvcy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRl
ZmF1bHRGb3JtRGVsZWdhdGUuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQlBMTBD
MUQxMTE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLm9iamM7IG5hbWUgPSBXZWJEZWZhdWx0Rm9ybURlbGVnYXRlLm07IHBh
dGggPSBpb3MvRGVmYXVsdERlbGVnYXRlcy9XZWJEZWZhdWx0Rm9ybURlbGVnYXRlLm07IHNvdXJj
ZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJQTEwQzFEMTIxODIwMkY5QzAwMzY4ODNBIC8qIFdl
YkRlZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXZWJEZWZhdWx0RnJhbWVMb2FkRGVsZWdhdGUuaDsgcGF0aCA9IGlvcy9EZWZhdWx0RGVs
ZWdhdGVzL1dlYkRlZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CkBAIC0xNTg3LDE3ICsxNTc0LDYgQEAKIAkJRjVGNzMyRDIwMkZGNEQ0RjAxQTgw
MTgwIC8qIFdlYktpdC5leHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5leHBvcnRzOyBuYW1lID0g
V2ViS2l0LmV4cDsgcGF0aCA9IG1hYy9XZWJLaXQuZXhwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDQ7IHVzZXNUYWJzID0gMDsgfTsKIAkJRjczOEM5RTkwM0ZBRDNERjAzMjFG
QkUwIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBwYXRoID0gSmF2YVNj
cmlwdENvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9Owog
CQlGNzM4QzlFQTAzRkFEM0RGMDMyMUZCRTAgLyogV2ViQ29yZS5mcmFtZXdvcmsgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgcGF0aCA9IFdlYkNvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwotCQlGNzlCOTc0ODA0MDE5OTM0MDM2OTA5RDIgLyogQ2FyYm9uVXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FyYm9uVXRp
bHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7
IH07Ci0JCUY3OUI5NzQ5MDQwMTk5MzQwMzY5MDlEMiAvKiBDYXJib25VdGlscy5tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gQ2FyYm9uVXRpbHMubTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdXNlc1RhYnMgPSAwOyB9OwotCQlGN0VCRUU5MDAzRjlEQkExMDNDQTBERTYg
LyogQ2FyYm9uV2luZG93QWRhcHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYXJib25XaW5kb3dBZGFwdGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwotCQlGN0VCRUU5MTAzRjlE
QkExMDNDQTBERTYgLyogQ2FyYm9uV2luZG93QWRhcHRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhcmJvbldpbmRvd0FkYXB0
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwotCQlGN0VCRUU5MjAzRjlEQkExMDNDQTBERTYgLyogQ2FyYm9uV2luZG93Q29udGVudFZp
ZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FyYm9uV2luZG93Q29udGVudFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY3RUJFRTkzMDNGOURCQTEwM0NBMERFNiAvKiBD
YXJib25XaW5kb3dDb250ZW50Vmlldy5tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLm9iamM7IHBhdGggPSBDYXJib25XaW5kb3dDb250ZW50Vmlldy5tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjdFQkVF
OTQwM0Y5REJBMTAzQ0EwREU2IC8qIENhcmJvbldpbmRvd0ZyYW1lLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhcmJvbldpbmRvd0ZyYW1lLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owot
CQlGN0VCRUU5NTAzRjlEQkExMDNDQTBERTYgLyogQ2FyYm9uV2luZG93RnJhbWUubSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBwYXRoID0gQ2FyYm9uV2lu
ZG93RnJhbWUubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07Ci0JCUY3RUJFRTlBMDNGOURCQTEwM0NBMERFNiAvKiBISVZpZXdBZGFwdGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhJVmll
d0FkYXB0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07Ci0JCUY3RUJFRTlCMDNGOURCQTEwM0NBMERFNiAvKiBISVZpZXdBZGFwdGVyLm0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IEhJ
Vmlld0FkYXB0ZXIubTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07Ci0JCUY3RUJFRUFBMDNGOURCQTEwM0NBMERFNiAvKiBISVdlYlZpZXcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSElXZWJW
aWV3Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwogCQlGODM0QUFENTBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4dEl0ZXJhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlRleHRJdGVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlGODM0QUFENjBFNjRCMUM3MDBFMjczN0MgLyogV2ViVGV4
dEl0ZXJhdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
VGV4dEl0ZXJhdG9yLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGOENBMTVCNTAy
OUEzOUQ5MDEwMDAxMjIgLyogV2ViQXV0aGVudGljYXRpb25QYW5lbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJBdXRoZW50aWNhdGlvblBh
bmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAw
OyB9OwpAQCAtMTY1MCw3ICsxNjI2LDYgQEAKIAkJCQlGNUIzNkI0MDAyODFERTg3MDE4NjM1Q0Ig
LyogV2ViQ29yZVN1cHBvcnQgKi8sCiAJCQkJOUM3Q0FCQkIwMTkwQTM3QzBFQ0ExNkVBIC8qIFdl
YlZpZXcgKi8sCiAJCQkJMUM2OEY2M0YwOTVCNUY5QzAwQzI5ODRFIC8qIFdlYkluc3BlY3RvciAq
LywKLQkJCQlGN0VCRUU1OTAzRjlEQjIyMDNDQTBERTYgLyogQ2FyYm9uICovLAogCQkJCTA4OUMx
NjY1RkU4NDExNThDMDJBQUMwNyAvKiBSZXNvdXJjZXMgKi8sCiAJCQkJMDg2N0Q2OUFGRTg0MDI4
RkMwMkFBQzA3IC8qIEZyYW1ld29ya3MgYW5kIExpYnJhcmllcyAqLywKIAkJCQkwMzQ3NjhERkZG
MzhBNTA0MTFEQjlDOEIgLyogUHJvZHVjdHMgKi8sCkBAIC0yNjQyLDUyICsyNjE3LDYgQEAKIAkJ
CXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKLQkJRjdFQkVFNTkwM0Y5REIy
MjAzQ0EwREU2IC8qIENhcmJvbiAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJRjdFQkVFQ0YwM0Y5REJCRDAzQ0EwREU2IC8qIEFwcEtpdCBPdmVycmlkZXMg
Ki8sCi0JCQkJRjdFQkVFRDEwM0Y5REJFQjAzQ0EwREU2IC8qIEMgQVBJICovLAotCQkJCUY3RUJF
RUQyMDNGOURCRkUwM0NBMERFNiAvKiBHbHVlICovLAotCQkJKTsKLQkJCW5hbWUgPSBDYXJib247
Ci0JCQlwYXRoID0gbWFjL0NhcmJvbjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCQl0
YWJXaWR0aCA9IDQ7Ci0JCQl1c2VzVGFicyA9IDA7Ci0JCX07Ci0JCUY3RUJFRUNGMDNGOURCQkQw
M0NBMERFNiAvKiBBcHBLaXQgT3ZlcnJpZGVzICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0J
CQljaGlsZHJlbiA9ICgKLQkJCQlGN0VCRUU5MDAzRjlEQkExMDNDQTBERTYgLyogQ2FyYm9uV2lu
ZG93QWRhcHRlci5oICovLAotCQkJCUY3RUJFRTkxMDNGOURCQTEwM0NBMERFNiAvKiBDYXJib25X
aW5kb3dBZGFwdGVyLm1tICovLAotCQkJCUY3RUJFRTkyMDNGOURCQTEwM0NBMERFNiAvKiBDYXJi
b25XaW5kb3dDb250ZW50Vmlldy5oICovLAotCQkJCUY3RUJFRTkzMDNGOURCQTEwM0NBMERFNiAv
KiBDYXJib25XaW5kb3dDb250ZW50Vmlldy5tICovLAotCQkJCUY3RUJFRTk0MDNGOURCQTEwM0NB
MERFNiAvKiBDYXJib25XaW5kb3dGcmFtZS5oICovLAotCQkJCUY3RUJFRTk1MDNGOURCQTEwM0NB
MERFNiAvKiBDYXJib25XaW5kb3dGcmFtZS5tICovLAotCQkJCUY3RUJFRTlBMDNGOURCQTEwM0NB
MERFNiAvKiBISVZpZXdBZGFwdGVyLmggKi8sCi0JCQkJRjdFQkVFOUIwM0Y5REJBMTAzQ0EwREU2
IC8qIEhJVmlld0FkYXB0ZXIubSAqLywKLQkJCSk7Ci0JCQluYW1lID0gIkFwcEtpdCBPdmVycmlk
ZXMiOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJRjdFQkVFRDEwM0Y5REJF
QjAzQ0EwREU2IC8qIEMgQVBJICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJl
biA9ICgKLQkJCQlGN0VCRUVBQTAzRjlEQkExMDNDQTBERTYgLyogSElXZWJWaWV3LmggKi8sCi0J
CQkJQTEwMjY1ODIxRjU2NTQwMzAwQjRDODQ0IC8qIEhJV2ViVmlldy5tbSAqLywKLQkJCSk7Ci0J
CQluYW1lID0gIkMgQVBJIjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUY3
RUJFRUQyMDNGOURCRkUwM0NBMERFNiAvKiBHbHVlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7
Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQlGNzlCOTc0ODA0MDE5OTM0MDM2OTA5RDIgLyogQ2FyYm9u
VXRpbHMuaCAqLywKLQkJCQlGNzlCOTc0OTA0MDE5OTM0MDM2OTA5RDIgLyogQ2FyYm9uVXRpbHMu
bSAqLywKLQkJCSk7Ci0JCQluYW1lID0gR2x1ZTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
Ci0JCX07CiAJCUY4Q0ExNUI0MDI5QTM5OTQwMTAwMDEyMiAvKiBQYW5lbHMgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjcxMiwxMCArMjY0MSw2IEBACiAJ
CQlmaWxlcyA9ICgKIAkJCQkxQTkxMTlGNzFEQjA0NzBBMDA4N0QxRkQgLyogQmFja0ZvcndhcmRM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTYwNTE5MjE3NTAyQTVEMDBCQzYyRjUgLyogQmlu
YXJ5UHJvcGVydHlMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk5Mzk4MTA2QTA4MjRCRjAxMDA4
REYwMzggLyogQ2FyYm9uVXRpbHMuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzOTgxMDY1MDgyNEJG
MDEwMDhERjAzOCAvKiBDYXJib25XaW5kb3dBZGFwdGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk5
Mzk4MTA2NjA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93Q29udGVudFZpZXcuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTkzOTgxMDY3MDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25XaW5kb3dG
cmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjgyOTU4RDMxMzI3MDdEMDAwMEQwRTc5IC8qIENv
cnJlY3Rpb25QYW5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENDM2NEQxRDU3QUJFRTAwQUI4
NUVBIC8qIERPTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNENDM2NEYxRDU3QUJFRTAwQUI4NUVB
IC8qIERPTUFic3RyYWN0Vmlldy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTI1LDggKzI4NTAsNiBA
QAogCQkJCTkzRDQzNzk4MUQ1N0FCRUYwMEFCODVFQSAvKiBET01YUGF0aFJlc3VsdEludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q0Mzc5OTFENTdBQkVGMDBBQjg1RUEgLyogRXhjZXB0
aW9uSGFuZGxlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjA1MTk0MTc1MDJBNUQwMEJDNjJG
NSAvKiBIaXN0b3J5UHJvcGVydHlMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk5Mzk4MTA2ODA4
MjRCRjAxMDA4REYwMzggLyogSElWaWV3QWRhcHRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTM5
ODEwNjkwODI0QkYwMTAwOERGMDM4IC8qIEhJV2ViVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUE4REVENTAwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBlUGx1Z2luU3RyZWFtLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBMTBDMUQzMjE4MjAyRkM1MDAzNjg4M0EgLyogTWVtb3J5TWVh
c3VyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBRjVDRUEwRURERTFGRTAwOEQ4ODNEIC8qIE5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzM3NywxMCArMzMw
MCw2IEBACiAJCQlmaWxlcyA9ICgKIAkJCQkxQTkxMTlGNjFEQjA0NzBBMDA4N0QxRkQgLyogQmFj
a0ZvcndhcmRMaXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE2MDUxOTExNzUwMkE1RDAwQkM2
MkY1IC8qIEJpbmFyeVByb3BlcnR5TGlzdC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5Mzk4MTEw
MTA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uVXRpbHMubSBpbiBTb3VyY2VzICovLAotCQkJCTkz
OTgxMEZEMDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25XaW5kb3dBZGFwdGVyLm1tIGluIFNvdXJj
ZXMgKi8sCi0JCQkJOTM5ODEwRkUwODI0QkYwMTAwOERGMDM4IC8qIENhcmJvbldpbmRvd0NvbnRl
bnRWaWV3Lm0gaW4gU291cmNlcyAqLywKLQkJCQk5Mzk4MTBGRjA4MjRCRjAxMDA4REYwMzggLyog
Q2FyYm9uV2luZG93RnJhbWUubSBpbiBTb3VyY2VzICovLAogCQkJCUI4Mjk1OEQ0MTMyNzA3RDAw
MDBEMEU3OSAvKiBDb3JyZWN0aW9uUGFuZWwubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0Q0MzY0
RTFENTdBQkVFMDBBQjg1RUEgLyogRE9NLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNENDM2NTAx
RDU3QUJFRTAwQUI4NUVBIC8qIERPTUFic3RyYWN0Vmlldy5tbSBpbiBTb3VyY2VzICovLApAQCAt
MzUxMSw4ICszNDMwLDYgQEAKIAkJCQk5M0Q0Mzc5NzFENTdBQkVGMDBBQjg1RUEgLyogRE9NWFBh
dGhSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5M0Q0Mzc5QTFENTdBQkVGMDBBQjg1RUEg
LyogRXhjZXB0aW9uSGFuZGxlcnMubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTYwNTE5MzE3NTAy
QTVEMDBCQzYyRjUgLyogSGlzdG9yeVByb3BlcnR5TGlzdC5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTkzOTgxMTAwMDgyNEJGMDEwMDhERjAzOCAvKiBISVZpZXdBZGFwdGVyLm0gaW4gU291cmNlcyAq
LywKLQkJCQlBMTAyNjU4MzFGNTY1NDAzMDBCNEM4NDQgLyogSElXZWJWaWV3Lm1tIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUE4REVENTEwRUU4OEI4QTAwRjI1MDIyIC8qIEhvc3RlZE5ldHNjYXBlUGx1
Z2luU3RyZWFtLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTEwQzFEMzMxODIwMkZDNTAwMzY4ODNB
IC8qIE1lbW9yeU1lYXN1cmUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUFGNUNFQjBFRERFMUZF
MDA4RDg4M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBpbiBTb3VyY2VzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvblV0aWxzLmgg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uVXRpbHMuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTAwNTUzMjJiM2FkN2JkYmZmMTY1NDEwYjVlMGQxMmRhYzVj
ZGQ2OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uVXRpbHMuaAorKysgL2Rldi9udWxsCkBA
IC0xLDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgX19ISVdFQkNBUkJPTlVUSUxTX18KLSNkZWZpbmUgX19I
SVdFQkNBUkJPTlVUSUxTX18KLQotI2lmbmRlZiBfX0xQNjRfXwotCi0vLyBUaGVzZSBmdW5jdGlv
bnMgYXJlIG9ubHkgYXZhaWxhYmxlIGZvciAzMi1iaXQuCi0KLSNpbmNsdWRlIDxXZWJLaXRMZWdh
Y3kvV2ViS2l0QXZhaWxhYmlsaXR5Lmg+Ci0KLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIE5TSW1h
Z2U7Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgot
Ci1leHRlcm4gdm9pZAotV2ViSW5pdEZvckNhcmJvbih2b2lkKSBDRl9ERVBSRUNBVEVEX01BQygx
MF8zLCAxMF82KTsKLQotI2lmZGVmIF9fT0JKQ19fCi0KLWV4dGVybiBDR0ltYWdlUmVmCi1XZWJD
b252ZXJ0TlNJbWFnZVRvQ0dJbWFnZVJlZihOU0ltYWdlICogaW5JbWFnZSkgQ0ZfREVQUkVDQVRF
RF9NQUMoMTBfMywgMTBfNik7Ci0KLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNl
bmRpZgotCi0jZW5kaWYKLSNlbmRpZiAvLyBfX0hJV0VCQ0FSQk9OVVRJTFNfXwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvblV0aWxzLm0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uVXRpbHMubQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggOGM0ZmE1MjRlOTgzNDFmOTYzYWI5YzBmNGJlZDExNjRiNDM2Y2E5ZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uVXRpbHMubQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBfX0xQNjRfXwotCi0jaW5jbHVkZSAiQ2FyYm9uVXRpbHMuaCIKLSNpbXBv
cnQgPHd0Zi9zcGkvY29jb2Evb2JqY1NQSS5oPgotCi1leHRlcm4gQ0dJbWFnZVJlZiBfTlNDcmVh
dGVJbWFnZVJlZiggdW5zaWduZWQgY2hhciAqY29uc3QgYml0bWFwRGF0YVs1XSwgaW50IHBpeGVs
c1dpZGUsIGludCBwaXhlbHNIaWdoLCBpbnQgYml0c1BlclNhbXBsZSwgaW50IHNhbXBsZXNQZXJQ
aXhlbCwgaW50IGJpdHNQZXJQaXhlbCwgaW50IGJ5dGVzUGVyUm93LCBCT09MIGlzUGxhbmFyLCBC
T09MIGhhc0FscGhhLCBOU1N0cmluZyAqY29sb3JTcGFjZU5hbWUsIENHQ29sb3JTcGFjZVJlZiBj
dXN0b21Db2xvclNwYWNlLCBpZCBzb3VyY2VPYmopOwotCi1zdGF0aWMgdm9pZAkJCQlQb29sQ2xl
YW5lciggRXZlbnRMb29wVGltZXJSZWYgaW5UaW1lciwgRXZlbnRMb29wSWRsZVRpbWVyTWVzc2Fn
ZSBpblN0YXRlLCB2b2lkICppblVzZXJEYXRhICk7Ci0KLXN0YXRpYyB2b2lkKiBzUG9vbDsKLXN0
YXRpYyB1bnNpZ25lZCBudW1Qb29sczsKLXN0YXRpYyBFdmVudExvb3BSZWYgcG9vbExvb3A7Ci0K
LXZvaWQgICAgICAgICAgICAgICAgICAgIEhJV2ViVmlld1JlZ2lzdGVyQ2xhc3MoIHZvaWQgKTsK
LQotc3RhdGljIHVuc2lnbmVkIGdldE5TQXV0b3JlbGVhc2VQb29sQ291bnQodm9pZCkKLXsKLSAg
ICB2b2lkKiB2ID0gb2JqY19hdXRvcmVsZWFzZVBvb2xQdXNoKCk7Ci0gICAgdWludHB0cl90IG51
bVBvb2xzID0gKHVpbnRwdHJfdCl2OwotICAgIG9iamNfYXV0b3JlbGVhc2VQb29sUG9wKHYpOwot
ICAgIHJldHVybiBudW1Qb29sczsKLX0KLQotdm9pZAotV2ViSW5pdEZvckNhcmJvbigpCi17Ci0g
ICAgc3RhdGljIGJvb2wJCQlzQXBwS2l0TG9hZGVkOwotCi0gICAgaWYgKCAhc0FwcEtpdExvYWRl
ZCApCi0gICAgewotICAgICAgICBQcm9jZXNzU2VyaWFsTnVtYmVyICAgIHByb2Nlc3M7Ci0KLSAg
ICAgICAgLy8gRm9yY2UgdXMgdG8gcmVnaXN0ZXIgd2l0aCBwcm9jZXNzIHNlcnZlciwgdGhpcyBl
bnN1cmUgdGhhdCB0aGUgcHJvY2VzcwotICAgICAgICAvLyAiZmxhdm91ciIgaXMgY29ycmVjdGx5
IGVzdGFibGlzaGVkLgotICAgICAgICBHZXRDdXJyZW50UHJvY2VzcyggJnByb2Nlc3MgKTsgCi0g
ICAgICAgIE5TQXBwbGljYXRpb25Mb2FkKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIHNQ
b29sID0gb2JqY19hdXRvcmVsZWFzZVBvb2xQdXNoKCk7Ci0gICAgICAgIG51bVBvb2xzID0gZ2V0
TlNBdXRvcmVsZWFzZVBvb2xDb3VudCgpOwotICAgICAgICAKLSAgICAgICAgcG9vbExvb3AgPSBH
ZXRDdXJyZW50RXZlbnRMb29wICgpOwotCi0gICAgICAgIEluc3RhbGxFdmVudExvb3BJZGxlVGlt
ZXIoIEdldE1haW5FdmVudExvb3AoKSwgMS4wLCAwLCBQb29sQ2xlYW5lciwgMCwgTlVMTCApOwot
ICAgICAgICAKLSAgICAgICAgc0FwcEtpdExvYWRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgIEhJV2ViVmlld1JlZ2lzdGVyQ2xhc3MoKTsKLSAgICB9Ci19Ci0KLS8qCi0gICAg
VGhlIHBvb2wgY2xlYW5lciBpcyByZXF1aXJlZCBiZWNhdXNlIENhcmJvbiBhcHBsaWNhdGlvbnMg
ZG8gbm90IGhhdmUKLSAgICBhbiBhdXRvcmVsZWFzZSBwb29sIHByb3ZpZGVkIGJ5IHRoZWlyIGV2
ZW50IGxvb3BzLiAgSW1wb3J0YW50bHksCi0gICAgY2FyYm9uIGFwcGxpY2F0aW9ucyB0aGF0IG5l
c3QgZXZlbnQgbG9vcHMsIHVzaW5nIGFueSBvZiB0aGUgdmFyaW91cwotICAgIHRlY2huaXF1ZXMg
YXZhaWxhYmxlIHRvIENhcmJvbiBhcHBzLCBNVVNUIGNyZWF0ZSB0aGVpciBvdXIgcG9vbHMgYXJv
dW5kCi0gICAgdGhlaXIgbmVzdGVkIGV2ZW50IGxvb3BzLgotKi8KLXN0YXRpYyB2b2lkCi1Qb29s
Q2xlYW5lciggRXZlbnRMb29wVGltZXJSZWYgaW5UaW1lciwgRXZlbnRMb29wSWRsZVRpbWVyTWVz
c2FnZSBpblN0YXRlLCB2b2lkICppblVzZXJEYXRhICkKLXsKLSAgICBpZiAoIGluU3RhdGUgPT0g
a0V2ZW50TG9vcElkbGVUaW1lclN0YXJ0ZWQgKSB7Ci0gICAgICAgIElHTk9SRV9XQVJOSU5HU19C
RUdJTigiY2FzdC1xdWFsIikKLSAgICAgICAgQ0ZTdHJpbmdSZWYgbW9kZSA9IENGUnVuTG9vcENv
cHlDdXJyZW50TW9kZSggKENGUnVuTG9vcFJlZilHZXRDRlJ1bkxvb3BGcm9tRXZlbnRMb29wKCBH
ZXRDdXJyZW50RXZlbnRMb29wKCkgKSk7Ci0gICAgICAgIElHTk9SRV9XQVJOSU5HU19FTkQKLSAg
ICAgICAgRXZlbnRMb29wUmVmIHRoaXNMb29wID0gR2V0Q3VycmVudEV2ZW50TG9vcCAoKTsKLSAg
ICAgICAgaWYgKCBDRkVxdWFsKCBtb2RlLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUgKSAmJiB0aGlz
TG9vcCA9PSBwb29sTG9vcCkgewotICAgICAgICAgICAgdW5zaWduZWQgY3VycmVudE51bVBvb2xz
ID0gZ2V0TlNBdXRvcmVsZWFzZVBvb2xDb3VudCgpLTE7ICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAoY3VycmVudE51bVBvb2xzID09IG51bVBvb2xzKXsKLSAgICAgICAgICAgICAgICBvYmpj
X2F1dG9yZWxlYXNlUG9vbFBvcChzUG9vbCk7Ci0gICAgICAgICAgICAgICAgc1Bvb2wgPSBvYmpj
X2F1dG9yZWxlYXNlUG9vbFB1c2goKTsKLSAgICAgICAgICAgICAgICBudW1Qb29scyA9IGdldE5T
QXV0b3JlbGVhc2VQb29sQ291bnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBDRlJlbGVhc2UoIG1vZGUgKTsKLSAgICB9Ci19Ci0KLUNHSW1hZ2VSZWYKLVdlYkNvbnZlcnRO
U0ltYWdlVG9DR0ltYWdlUmVmKAotCU5TSW1hZ2UqICAgICAgICAgaW5JbWFnZSApCi17Ci0JTlNB
cnJheSoJCQkJcmVwcyA9IFtpbkltYWdlIHJlcHJlc2VudGF0aW9uc107Ci0JTlNCaXRtYXBJbWFn
ZVJlcCoJCXJlcCA9IE5VTEw7Ci0JQ0dJbWFnZVJlZgkJCQlpbWFnZSA9IE5VTEw7Ci0JdW5zaWdu
ZWQJCQkJaTsKLQotCWZvciAoIGk9MDsgaSA8IFtyZXBzIGNvdW50XTsgaSsrICkKLQl7Ci0gICAg
ICAgIGlmICggW1tyZXBzIG9iamVjdEF0SW5kZXg6aV0gaXNLaW5kT2ZDbGFzczpbTlNCaXRtYXBJ
bWFnZVJlcCBjbGFzc11dICkKLSAgICAgICAgewotICAgICAgICAgICAgcmVwID0gW3JlcHMgb2Jq
ZWN0QXRJbmRleDppXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0JfQotICAgIAot
CWlmICggcmVwICkKLQl7Ci0gICAgICAgIC8vQ0dDb2xvclNwYWNlUmVmIGNzeW5jID0gKENHQ29s
b3JTcGFjZVJlZilbcmVwIHZhbHVlRm9yUHJvcGVydHk6TlNJbWFnZUNvbG9yU3luY1Byb2ZpbGVE
YXRhXTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBsYW5lc1s1XTsKLQotICAg
ICAgICBbcmVwIGdldEJpdG1hcERhdGFQbGFuZXM6cGxhbmVzXTsKLQotICAgICAgICBpbWFnZSA9
IF9OU0NyZWF0ZUltYWdlUmVmKCBwbGFuZXMsIFtyZXAgcGl4ZWxzV2lkZV0sIFtyZXAgcGl4ZWxz
SGlnaF0sCi0gICAgICAgICAgICAgICAgICAgIFtyZXAgYml0c1BlclNhbXBsZV0sIFtyZXAgc2Ft
cGxlc1BlclBpeGVsXSwgW3JlcCBiaXRzUGVyUGl4ZWxdLAotICAgICAgICAgICAgICAgICAgICBb
cmVwIGJ5dGVzUGVyUm93XSwgW3JlcCBpc1BsYW5hcl0sIFtyZXAgaGFzQWxwaGFdLCBbcmVwIGNv
bG9yU3BhY2VOYW1lXSwKLSAgICAgICAgICAgICAgICAgICAgTlVMTCwgcmVwKTsKLQl9Ci0gICAg
Ci0JcmV0dXJuIGltYWdlOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dBZGFwdGVyLmggYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93QWRhcHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0MDdlZTY3NTU2NDA4Yjk2MTc0NTg1MmI1M2RmNTc1YTBlMDg5OTAwLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dBZGFwdGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW1wb3J0IDxGb3VuZGF0aW9uL0ZvdW5kYXRpb24uaD4KLSNpbXBvcnQgPEFwcEtp
dC9BcHBLaXQuaD4KLSNpbXBvcnQgPEhJVG9vbGJveC9DYXJib25FdmVudHMuaD4KLSNpbXBvcnQg
PEhJVG9vbGJveC9NYWNXaW5kb3dzLmg+Ci0KLUBpbnRlcmZhY2UgQ2FyYm9uV2luZG93QWRhcHRl
ciA6IE5TV2luZG93IAotewotQHByaXZhdGUKLQotICAgIC8vIFRoZSBDYXJib24gd2luZG93IHRo
YXQncyBiZWluZyBlbmNhcHN1bGF0ZWQsIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGlzIG9iamVjdCBv
d25zIChoYXMgcmVzcG9uc2liaWxpdHkgZm9yIGRpc3Bvc2luZykgaXQuCi0gICAgV2luZG93UmVm
IF93aW5kb3dSZWY7Ci0gICAgQk9PTCBfd2luZG93UmVmSXNPd25lZDsKLSAgICBCT09MIF9jYXJi
b247Ci0KLSAgICAvLyBUaGUgVVBQIGZvciB0aGUgZXZlbnQgaGFuZGxlciB0aGF0IHdlIHVzZSB0
byBkZWFsIHdpdGggdmFyaW91cyBDYXJib24gZXZlbnRzLCBhbmQgdGhlIGV2ZW50IGhhbmRsZXIg
aXRzZWxmLgotICAgIEV2ZW50SGFuZGxlclVQUCBfaGFuZGxlRXZlbnRVUFA7Ci0gICAgRXZlbnRI
YW5kbGVyUmVmIF9ldmVudEhhbmRsZXI7Ci0gICAgCi0gICAgLy8gWWVzIGlmIHRoaXMgb2JqZWN0
IHNob3VsZCBsZXQgQ2FyYm9uIGhhbmRsZSBrRXZlbnRXaW5kb3dBY3RpdmF0ZWQgYW5kIGtFdmVu
dFdpbmRvd0RlYWN0aXZhdGVkIGV2ZW50cy4gIE5vIG90aGVyd2lzZS4KLSAgICBCT09MIF9wYXNz
aW5nQ2FyYm9uV2luZG93QWN0aXZhdGlvbkV2ZW50czsKLX0KLQotLy8gSW5pdGlhbGl6ZXJzLgot
LSAoaWQpaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6KFdpbmRvd1JlZilpbldpbmRvd1JlZiB0YWtp
bmdPd25lcnNoaXA6KEJPT0wpaW5XaW5kb3dSZWZJc093bmVkOwotLSAoaWQpaW5pdFdpdGhDYXJi
b25XaW5kb3dSZWY6KFdpbmRvd1JlZilpbldpbmRvd1JlZiB0YWtpbmdPd25lcnNoaXA6KEJPT0wp
aW5XaW5kb3dSZWZJc093bmVkIGRpc2FibGVPcmRlcmluZzooQk9PTClpbkRpc2FibGVPcmRlcmlu
ZyBjYXJib246KEJPT0wpaW5DYXJib247Ci0KLS8vIEFjY2Vzc29ycy4KLS0gKFdpbmRvd1JlZil3
aW5kb3dSZWY7Ci0KLS8vIFVwZGF0ZSB0aGlzIHdpbmRvdydzIGZyYW1lIGFuZCBjb250ZW50IHJl
Y3RhbmdsZXMgdG8gbWF0Y2ggdGhlIENhcmJvbiB3aW5kb3cncyBzdHJ1Y3R1cmUgYW5kIGNvbnRl
bnQgYm91bmRzIHJlY3RhbmdsZXMuICBSZXR1cm4geWVzIGlmIHRoZSB1cGRhdGUgd2FzIHJlYWxs
eSBuZWNlc3NhcnksIG5vIG90aGVyd2lzZS4KLS0gKEJPT0wpcmVjb25jaWxlVG9DYXJib25XaW5k
b3dCb3VuZHM7Ci0KLS8vIEhhbmRsZSBhbiBldmVudCBqdXN0IGxpa2UgYW4gTlNXaW5kb3cgd291
bGQuCi0tICh2b2lkKXNlbmRTdXBlckV2ZW50OihOU0V2ZW50ICopaW5FdmVudDsKLQotLSAodm9p
ZClyZWxpbnF1aXNoRm9jdXM7Ci0KLUBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dBZGFwdGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0FkYXB0ZXIubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGIwOWUwNmMyNDlmYmQwOGVlZTdkNmU5MzQ3NjU5MzE3OTVjZjM1NjQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0FkYXB0ZXIubW0KKysrIC9kZXYvbnVsbApAQCAt
MSwxMDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vLyBJIGRvbid0IHRoaW5rIHRoaXMgY2xhc3MgYmVsb25ncyBpbiBXZWJL
aXQuIExldHMgbW92ZSBpdCBvdXQuCi0KLS8vIFRoaW5ncyB0aGF0IEkndmUgbmV2ZXIgYm90aGVy
ZWQgd29ya2luZyBvdXQ6Ci0vLyBGb3Igbm9uLXNoZWV0IHdpbmRvd3MsIGhhbmRsZSBDYXJib24g
V2luZG93TW92ZSBldmVudHMgc28gYXMgdG8gZG8gdGhlIHNhbWUgdGhpbmdzIGFzIC1bTlNXaW5k
b3cgX3dpbmRvd01vdmVkXS4KLS8vIENoZWNrIHRvIHNlZSBob3cgdGhpcyBzdHVmZiBkZWFscyB3
aXRoIHZhcmlvdXMgc2NyZWVuIHNpemUgY2hhbmdlIHNjZW5hcmlvdXMuCi0vLyBNLlAuIFdhcm5p
bmcgLSA5LzE3LzAxCi0KLS8vIFRoZXJlIGFyZSBzb21lIGludmFyaWFudHMgSSdtIG1haW50YWlu
aW5nIGZvciBvYmplY3RzIG9mIHRoaXMgY2xhc3Mgd2hpY2ggaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxs
eSBpbml0aWFsaXplZCBidXQgbm90IGRlYWxsb2NhdGVkLiAgVGhlc2UgYWxsIG1ha2UgaXQgZWFz
aWVyIHRvIG5vdCBvdmVycmlkZSBldmVyeSBzaW5nbGUgbWV0aG9kIG9mIE5TV2luZG93LgotLy8g
X2F1eGlsaWFyeVN0b3JhZ2UtPmF1eFdGbGFncy5oYXNTaGFkb3cgd2lsbCBhbHdheXMgYmUgZmFs
c2UgaWYgdGhlIENhcmJvbiB3aW5kb3cgaGFzIGEga1dpbmRvd05vU2hhZG93QXR0cmlidXRlLCBh
bmQgdmljZSB2ZXJzYS4KLS8vIF9hdXhpbGlhcnlTdG9yYWdlLT5fYXV4V0ZsYWdzLm1pbmltaXpl
ZCB3aWxsIGFsd2F5cyByZWZsZWN0IHRoZSB3aW5kb3cncyBDYXJib24gY29sbGFwc2VkIHN0YXRl
LgotLy8gX2JvcmRlclZpZXcgd2lsbCBhbHdheXMgcG9pbnQgdG8gYW4gTlNDYXJib25XaW5kb3dG
cmFtZS4KLS8vIF9jb250ZW50VmlldyB3aWxsIGFsd2F5cyBwb2ludCB0byBhbiBOU0NhcmJvbldp
bmRvd0NvbnRlbnRWaWV3OwotLy8gX2ZyYW1lIHdpbGwgYWx3YXlzIHJlZmxlY3QgdGhlIHdpbmRv
dydzIENhcmJvbiBrV2luZG93U3RydWN0dXJlUmduIGJvdW5kcy4KLS8vIF9zdHlsZU1hc2sgd2ls
bCBhbHdheXMgaGF2ZSBfTlNDYXJib25XaW5kb3dNYXNrIHNldCwgYW5kIHdpbGwgaGF2ZSBOU0Ns
b3NhYmxlV2luZG93TWFzaywgTlNNaW5pYXR1cml6YWJsZVdpbmRvd01hc2ssIE5TUmVzaXphYmxl
V2luZG93TWFzaywgYW5kL29yIE5TVGl0bGVkV2luZG93TWFzayBzZXQgYXMgYXBwcm9wcmlhdGUu
Ci0vLyBfd2ZsYWdzLm9uZVNob3QgYW5kIF93ZmxhZ3MuZGVsYXllZE9uZVNob3Qgd2lsbCBhbHdh
eXMgYmUgZmFsc2UuCi0vLyBfd0ZsYWdzLnZpc2libGUgd2lsbCBhbHdheXMgcmVmbGVjdCB0aGUg
d2luZG93J3MgQ2FyYm9uIHZpc2liaWxpdHkuCi0vLyBfd2luZG93TnVtIHdpbGwgYWx3YXlzIGJl
IGdyZWF0ZXIgdGhhbiB6ZXJvLCBhbmQgdmFsaWQuCi0vLyBUaGUgaW5zdGFuY2UgdmFyaWFibGVz
IGludm9sdmVkIGFyZSBvbmVzIHRoYXQgY2FtZSB0byBteSBhdHRlbnRpb24gZHVyaW5nIHRoZSBp
bml0aWFsIHdyaXRpbmcgb2YgdGhpcyBjbGFzczsgSSBoYXZlbid0IG1ldGhvZGljYWxseSBnb25l
IHRocm91Z2ggTlNXaW5kb3cncyBpdmFyIGxpc3Qgb3IgYW55dGhpbmcgbGlrZSB0aGF0LiAgTS5Q
LiBOb3RpY2UgLSAxMC8xMC8wMAotCi0vLyBUaGluZ3MgdGhhdCBoYXZlIHRvIGJlIHdvcmtlZCBv
biBpZiBOU0NhcmJvbldpbmRvd3MgYXJlIGV2ZXIgdXNlZCBmb3Igc29tZXRoaW5nIG90aGVyIHRo
YW4gZGlhbG9ncyBhbmQgc2hlZXRzOgotLy8gQ2xpY2tpbmcgb24gYW4gTlNDYXJib25XaW5kb3cg
d2hpbGUgYSBDb2NvYSBhcHAtbW9kYWwgZGlhbG9nIGlzIHNob3duIGRvZXMgbm90IGJlZXAsIGFz
IGl0IHNob3VsZCBbb2xkIGJ1ZywgbWF5YmUgZml4ZWQgbm93XS4KLS8vIEhhbmRsaW5nIG9mIG1v
dXNlIGNsaWNrcyBvciBrZXkgcHJlc3NlcyBmb3IgYW55IHdpbmRvdyBjb250cm9sIChjbG9zZSwg
bWluaWF0dXJpemUsIHpvb20pIG1pZ2h0IG5vdCBiZSBhbGwgdGhlcmUuCi0vLyBIYW5kbGluZyBv
ZiBtaW5pYXR1cml6YXRpb24gb2YgQ2FyYm9uIHdpbmRvd3MgdmlhIHRpdGxlIGJhciBkb3VibGUt
Y2xpY2sgbWlnaHQgbm90IGJlIGFsbCB0aGVyZS4KLS8vIFRoZSBiYWNrZ3JvdW5kIG9uIE5TQ2Fy
Ym9uV2luZG93VGVzdGVyJ3Mgc2FtcGxlIHdpbmRvdyAobm90IHNhbXBsZSBkaWFsb2cgb3Igc2Ft
cGxlIHNoZWV0KSBtaWdodCBiZSB3cm9uZy4KLS8vIFRoZSBjb250cm9scyBvbiBOU0NhcmJvbldp
bmRvd1Rlc3RlcidzIHNhbXBsZSB3aW5kb3cgbG9vayBpbmFjdGl2ZSB3aGVuIHRoZSB3aW5kb3cg
aXMgaW5hY3RpdmUsIGJ1dCBoYXZlIGZpcnN0LWNsaWNrIGJlaGF2aW9yLgotLy8gTS5QLiBXYXJu
aW5nIC0gMTIvMTQvMDAKLQotLy8gU29tZSB0aGluZ3Mgd291bGQgaGF2ZSB0byBiZSBtYWRlIHB1
YmxpYyBpZiBzb21lb25lIHdhbnRlZCB0byBzdWJjbGFzcyB0aGlzIHNvIGFzIHRvIHN1cHBvcnQg
bW9yZSBtZW51IGl0ZW0gY29tbWFuZHMuICBNLlAuIFdhcm5pbmcgLSA5LzE5LzAwCi0KLSNpZm5k
ZWYgX19MUDY0X18KLQotI2ltcG9ydCAiQ2FyYm9uV2luZG93QWRhcHRlci5oIgotCi0jaW1wb3J0
ICJDYXJib25XaW5kb3dGcmFtZS5oIgotI2ltcG9ydCAiQ2FyYm9uV2luZG93Q29udGVudFZpZXcu
aCIKLSNpbXBvcnQgIkhJVmlld0FkYXB0ZXIuaCIKLQotI2ltcG9ydCA8QXBwS2l0L0FwcEtpdC5o
PgotLy8jaW1wb3J0IDxDb3JlR3JhcGhpY3MvQ0dTV2luZG93Lmg+Ci0jaW1wb3J0IDxISVRvb2xi
b3gvQ2FyYm9uRXZlbnRzLmg+Ci0jaW1wb3J0IDxISVRvb2xib3gvQ29udHJvbHMuaD4KLSNpbXBv
cnQgPEhJVG9vbGJveC9ISVZpZXcuaD4KLSNpbXBvcnQgPGFzc2VydC5oPgotCi0jaW1wb3J0IDxK
YXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1dl
YkNvcmVPYmpDRXh0cmFzLmg+Ci0jaW1wb3J0IDxwYWwvc3BpL21hYy9ISVRvb2xib3hTUEkuaD4K
LSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TV2luZG93U1BJLmg+Ci0jaW1wb3J0IDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2ltcG9ydCA8d3RmL01haW5UaHJlYWQuaD4KLSNpbXBvcnQgPHd0Zi9SdW5Mb29w
Lmg+Ci0KLSNpbXBvcnQgIldlYktpdExvZ2dpbmcuaCIKLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0
cmFzLmgiCi0jaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCi0KLWV4dGVybiBjb25zdCBPU1R5
cGUgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0b3I7Ci1leHRlcm4gY29uc3QgT1NUeXBlIE5TQ2FyYm9u
V2luZG93UHJvcGVydHlUYWc7Ci0KLUBpbnRlcmZhY2UgTlNXaW5kb3coSElXZWJGcmFtZVZpZXcp
Ci0tIChpZClfaW5pdENvbnRlbnQ6KGNvbnN0IE5TUmVjdCAqKWNvbnRlbnRSZWN0IHN0eWxlTWFz
azoodW5zaWduZWQgaW50KWFTdHlsZSBiYWNraW5nOihOU0JhY2tpbmdTdG9yZVR5cGUpYnVmZmVy
aW5nVHlwZSBkZWZlcjooQk9PTClmbGFnIGNvbnRlbnRWaWV3OmFWaWV3OwotLSAodm9pZClfb2xk
UGxhY2VXaW5kb3c6KE5TUmVjdClmcmFtZVJlY3Q7Ci0tICh2b2lkKV93aW5kb3dNb3ZlZFRvUmVj
dDooTlNSZWN0KWFjdHVhbEZyYW1lOwotLSAodm9pZClfc2V0V2luZG93TnVtYmVyOihOU0ludGVn
ZXIpbmF0aXZlV2luZG93OwotLSAoTlNHcmFwaGljc0NvbnRleHQgKilfdGhyZWFkQ29udGV4dDsK
LS0gKHZvaWQpX3NldEZyYW1lOihOU1JlY3QpbmV3V2luZG93RnJhbWVSZWN0OwotLSAodm9pZClf
c2V0VmlzaWJsZTooQk9PTClmbGFnOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TQXBwbGljYXRpb24o
SElXZWJGcmFtZVZpZXcpCi0tICh2b2lkKXNldElzQWN0aXZlOihCT09MKWFGbGFnOwotLSAoaWQp
X3NldE1vdXNlQWN0aXZhdGlvbkluUHJvZ3Jlc3M6KEJPT0wpZmxhZzsKLS0gKEJPT0wpX2hhbmRs
ZUtleUVxdWl2YWxlbnQ6KE5TRXZlbnQqKXRoZUV2ZW50OwotQGVuZAotCi1AaW50ZXJmYWNlIE5T
SW5wdXRDb250ZXh0Ci0tIChCT09MKXByb2Nlc3NJbnB1dEtleUJpbmRpbmdzOihOU0V2ZW50ICop
ZXZlbnQ7Ci1AZW5kCi0KLS8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgotc3RhdGljIE9TU3RhdHVz
IE5TQ2FyYm9uV2luZG93SGFuZGxlRXZlbnQoRXZlbnRIYW5kbGVyQ2FsbFJlZiBpbkV2ZW50SGFu
ZGxlckNhbGxSZWYsIEV2ZW50UmVmIGluRXZlbnRSZWYsIHZvaWQgKmluVXNlckRhdGEpOwotCi1A
aW1wbGVtZW50YXRpb24gQ2FyYm9uV2luZG93QWRhcHRlcgotCi0KLS8vIFJldHVybiBhbiBhcHBy
b3ByaWF0ZSB3aW5kb3cgZnJhbWUgY2xhc3MuCi0rIChDbGFzcylmcmFtZVZpZXdDbGFzc0ZvclN0
eWxlTWFzazoodW5zaWduZWQpc3R5bGUKLXsKLQotICAgIC8vIFRoZXJlJ3Mgb25seSBvbmUgYXBw
cm9wcmlhdGUgd2luZG93IHN0eWxlLCBhbmQgb25seSBvbmUgYXBwcm9wcmlhdGUgd2luZG93IGZy
YW1lIGNsYXNzLgotICAgIGFzc2VydChzdHlsZSAmIF9OU0NhcmJvbldpbmRvd01hc2spOwotICAg
IHJldHVybiBbQ2FyYm9uV2luZG93RnJhbWUgY2xhc3NdOwotCi19Ci0KLQotLy8gT3ZlcnJpZGlu
ZyBvZiB0aGUgcGFyZW50IGNsYXNzJyBkZXNpZ25hdGVkIGluaXRpYWxpemVyLCBqdXN0IGZvciBz
YWZldHkncyBzYWtlLgotLSAoaWQpaW5pdFdpdGhDb250ZW50UmVjdDooTlNSZWN0KWNvbnRlbnRS
ZWN0IHN0eWxlTWFzazoodW5zaWduZWQpc3R5bGUgYmFja2luZzooTlNCYWNraW5nU3RvcmVUeXBl
KWJ1ZmZlcmluZ1R5cGUgZGVmZXI6KEJPT0wpZmxhZwotewotCi0gICAgLy8gRG8gdGhlIHN0YW5k
YXJkIENvY29hIHRoaW5nLgotICAgIHNlbGYgPSBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDpj
b250ZW50UmVjdCBzdHlsZU1hc2s6c3R5bGUgYmFja2luZzpidWZmZXJpbmdUeXBlIGRlZmVyOmZs
YWddOwotICAgIGlmIChzZWxmID09IG5pbCkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIC8v
IFNpbXBsZS4KLSAgICBfd2luZG93UmVmID0gbnVsbHB0cjsKLSAgICBfd2luZG93UmVmSXNPd25l
ZCA9IE5POwotICAgIF9ldmVudEhhbmRsZXIgPSBudWxscHRyOwotICAgIAotICAgIC8vIERvbmUu
Ci0gICAgcmV0dXJuIHNlbGY7Ci0KLX0KLQotLy8gR2l2ZW4gYSByZWZlcmVuY2UgdG8gYSBDYXJi
b24gd2luZG93IHRoYXQgaXMgdG8gYmUgZW5jYXBzdWxhdGVkLCBhbiBpbmRpY2F0b3Igb2Ygd2hl
dGhlciBvciBub3QgdGhpcyBvYmplY3Qgc2hvdWxkIHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIGRp
c3Bvc2luZyBvZiB0aGUgQ2FyYm9uIHdpbmRvdywgYW5kIGFuIGluZGljYXRvciBvZiB3aGV0aGVy
IHRvIGRpc2FibGUgQ2FyYm9uIHdpbmRvdyBvcmRlcmluZywgaW5pdGlhbGl6ZS4gIFRoaXMgaXMg
dGhlIGNsYXNzJyBkZXNpZ25hdGVkIGluaXRpYWxpemVyLgotLSAoaWQpaW5pdFdpdGhDYXJib25X
aW5kb3dSZWY6KFdpbmRvd1JlZilpbldpbmRvd1JlZiB0YWtpbmdPd25lcnNoaXA6KEJPT0wpaW5X
aW5kb3dSZWZJc093bmVkIGRpc2FibGVPcmRlcmluZzooQk9PTClpbkRpc2FibGVPcmRlcmluZyBj
YXJib246KEJPT0wpaW5DYXJib24KLXsKLQotICAgIE5TQmFja2luZ1N0b3JlVHlwZSBiYWNraW5n
U3RvcmVUeXBlOwotICAgIENhcmJvbldpbmRvd0NvbnRlbnRWaWV3ICpjYXJib25XaW5kb3dDb250
ZW50VmlldzsKLSAgICBOU1dpbmRvdyAqd2luZG93QXNQcm9wZXJ0eTsKLSAgICBPU1N0YXR1cyBv
c1N0YXR1czsKLSAgICBVSW50MzIgd2luZG93RmVhdHVyZXM7Ci0gICAgV2luZG93QXR0cmlidXRl
cyB3aW5kb3dBdHRyaWJ1dGVzOwotICAgIHVuc2lnbmVkIGludCBzdHlsZU1hc2s7Ci0gICAgdm9p
ZCAqbmF0aXZlV2luZG93OwotICAgIFdpbmRvd01vZGFsaXR5IHdpbmRvd01vZGFsaXR5OwotICAg
IENvbnRyb2xSZWYgY29udGVudFZpZXc7Ci0KLSAgICAvLyBTaW1wbGUuCi0gICAgLy8gSXQncyB2
ZXJ5IHdlYWsgdG8gaGF2ZSB0byBwdXQgdGhpcyBiZWZvcmUgdGhlIGludm9jYXRpb24gb2YgW3N1
cGVyIGluaXRXaXRoQ29udGVudFJlY3Q6Li4uXSwgYnV0IC1zZXRDb250ZW50VmlldzogaXMgaW52
b2tlZCBmcm9tIHdpdGhpbiB0aGF0IGluaXRpYWxpemVyLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhl
IGNvbW1vbiBhZG1vbml0aW9uIGFib3V0IG5vdCBjYWxsaW5nIHZpcnR1YWwgZnVuY3Rpb25zIGZy
b20gd2l0aGluIEMrKyBjb25zdHJ1Y3RvcnMgbWFrZXMgc2Vuc2UgaW4gT2JqZWN0aXZlLUMgdG9v
LiAgTS5QLiBOb3RpY2UgLSAxMC8xMC8wMAotICAgIF93aW5kb3dSZWYgPSBpbldpbmRvd1JlZjsK
LSAgICAvL19hdXhpbGlhcnlTdG9yYWdlLT5fd2luZG93UmVmID0gaW5XaW5kb3dSZWY7Ci0gICAg
X3dpbmRvd1JlZklzT3duZWQgPSBpbldpbmRvd1JlZklzT3duZWQ7Ci0gICAgX2NhcmJvbiA9IGlu
Q2FyYm9uOwotCi0gICAgLy8gRmluZCBvdXQgdGhlIHdpbmRvdydzIENvcmVHcmFwaGljcyB3aW5k
b3cgcmVmZXJlbmNlLgotICAgIG5hdGl2ZVdpbmRvdyA9ICh2b2lkKilHZXROYXRpdmVXaW5kb3dG
cm9tV2luZG93UmVmKGluV2luZG93UmVmKTsKLQotICAgIC8vIEZpbmQgb3V0IHRoZSB3aW5kb3cn
cyBDYXJib24gd2luZG93IGF0dHJpYnV0ZXMuCi0gICAgR2V0V2luZG93QXR0cmlidXRlcyhpbldp
bmRvd1JlZiwgJndpbmRvd0F0dHJpYnV0ZXMpOwotCi0gICAgLy8gRmluZCBvdXQgdGhlIHdpbmRv
dydzIENhcmJvbiB3aW5kb3cgZmVhdHVyZXMuCi0gICAgR2V0V2luZG93RmVhdHVyZXMoaW5XaW5k
b3dSZWYsICZ3aW5kb3dGZWF0dXJlcyk7Ci0KLSAgICAvLyBGaWd1cmUgb3V0IHRoZSB3aW5kb3cn
cyBiYWNraW5nIHN0b3JlIHR5cGUuCi0gICAgLy8gQXQgb25lIHRpbWUsIHRoaXMgaGFkIGNvZGUg
c3RvbGVuIGZyb20gQ3JlYXRlUGxhdGZvcm1XaW5kb3cgaW4gSElUb29sYm94L1dpbmRvd3MvUGxh
dGZvcm0vQ0dTUGxhdGZvcm0uYwotICAgIC8vIEJ1dCBub3cgdGhlIG5vbi1yZXRhaW5lZCB3aW5k
b3cgY2xhc3MgaXMgYSBDYXJib24gc2VjcmV0IHRoYXQncyBub3QgZXZlbiBpbgotICAgIC8vIFdp
bmRvd3NQcml2Lmg7IG1heWJlIHdlJ2xsIGhhdmUgdG8gcmV2aXNpdCB0aGlzIGlmIHNvbWVvbmUg
bmVlZHMgdG8gdXNlIFdlYktpdAotICAgIC8vIGluIGEgbm9uLXJldGFpbmVkIHdpbmRvdy4KLSAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIGJhY2tpbmdTdG9yZVR5
cGUgPSBOU0JhY2tpbmdTdG9yZVJldGFpbmVkOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAotCi0gICAgLy8gRmlndXJlIG91dCB0aGUgd2luZG93J3Mgc3R5bGUgbWFzay4K
LSAgICBzdHlsZU1hc2sgPSBfTlNDYXJib25XaW5kb3dNYXNrOwotICAgIGlmICh3aW5kb3dBdHRy
aWJ1dGVzICYga1dpbmRvd0Nsb3NlQm94QXR0cmlidXRlKQotICAgICAgICBzdHlsZU1hc2sgfD0g
TlNXaW5kb3dTdHlsZU1hc2tDbG9zYWJsZTsKLSAgICBpZiAod2luZG93QXR0cmlidXRlcyAmIGtX
aW5kb3dSZXNpemFibGVBdHRyaWJ1dGUpCi0gICAgICAgIHN0eWxlTWFzayB8PSBOU1dpbmRvd1N0
eWxlTWFza1Jlc2l6YWJsZTsKLSAgICBpZiAod2luZG93RmVhdHVyZXMgJiBrV2luZG93Q2FuQ29s
bGFwc2UpCi0gICAgICAgIHN0eWxlTWFzayB8PSBOU1dpbmRvd1N0eWxlTWFza01pbmlhdHVyaXph
YmxlOwotICAgIGlmICh3aW5kb3dGZWF0dXJlcyAmIGtXaW5kb3dIYXNUaXRsZUJhcikKLSAgICAg
ICAgc3R5bGVNYXNrIHw9IE5TV2luZG93U3R5bGVNYXNrVGl0bGVkOwotCi0gICAgb3NTdGF0dXMg
PSBHZXRXaW5kb3dNb2RhbGl0eShfd2luZG93UmVmLCAmd2luZG93TW9kYWxpdHksIG51bGxwdHIp
OwotICAgIGlmIChvc1N0YXR1cyAhPSBub0VycikgewotICAgICAgICBOU0xvZyhAIkNvdWxkbid0
IGdldCB3aW5kb3cgbW9kYWxpdHk6IGVycm9yPSVsZCIsIG9zU3RhdHVzKTsKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICB9Ci0gICAgCi0gICAgLy8gQ3JlYXRlIG9uZSBvZiBvdXIgc3BlY2lhbCBj
b250ZW50IHZpZXdzLgotICAgIGNhcmJvbldpbmRvd0NvbnRlbnRWaWV3ID0gW1tbQ2FyYm9uV2lu
ZG93Q29udGVudFZpZXcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLQotICAgIC8vIERvIHNv
bWUgc3RhbmRhcmQgQ29jb2EgaW5pdGlhbGl6YXRpb24uICBUaGUgZGVmZXIgYXJndW1lbnQncyB2
YWx1ZSBpcyBZRVMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IC1bTlNXaW5kb3cgX2NvbW1vbkF3YWtl
XSB0byBnZXQgY2FsbGVkLiAgSXQgZG9lc24ndCBhcHBlYXIgdGhhdCBhbnkgcmVsZXZhbnQgTlNX
aW5kb3cgY29kZSBjaGVja3MgX3dGbGFncy5kZWZlcnJlZCwgc28gd2Ugc2hvdWxkIGJlIGFibGUg
dG8gZ2V0IGF3YXkgd2l0aCB0aGUgbGllLgotICAgIHNlbGYgPSAoQ2FyYm9uV2luZG93QWRhcHRl
ciopW3N1cGVyIF9pbml0Q29udGVudDpudWxscHRyIHN0eWxlTWFzazpzdHlsZU1hc2sgYmFja2lu
ZzpiYWNraW5nU3RvcmVUeXBlIGRlZmVyOllFUyBjb250ZW50VmlldzpjYXJib25XaW5kb3dDb250
ZW50Vmlld107Ci0gICAgaWYgKCFzZWxmKSByZXR1cm4gbmlsOwotICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgYXNzZXJ0KF9jb250ZW50Vmlldyk7Ci0gICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICAvLyBSZWNvcmQgYWNjdXJhdGVs
eSB3aGV0aGVyIG9yIG5vdCB0aGlzIHdpbmRvdyBoYXMgYSBzaGFkb3csIGluIGNhc2Ugc29tZW9u
ZSBhc2tzLgotIC8vICAgX2F1eGlsaWFyeVN0b3JhZ2UtPl9hdXhXRmxhZ3MuaGFzU2hhZG93ID0g
KHdpbmRvd0F0dHJpYnV0ZXMgJiBrV2luZG93Tm9TaGFkb3dBdHRyaWJ1dGUpID8gTk8gOiBZRVM7
Ci0KLSAgICAvLyBSZWNvcmQgdGhlIHdpbmRvdyBudW1iZXIuCi0gICAgW3NlbGYgX3NldFdpbmRv
d051bWJlcjooTlNJbnRlZ2VyKW5hdGl2ZVdpbmRvd107Ci0KLSAgICAvLyBTZXQgdXAgZnJvbSB0
aGUgZnJhbWUgcmVjdGFuZ2xlLgotICAgIC8vIFdlIGRpZG4ndCBldmVuIHJlYWxseSB0cnkgdG8g
Z2V0IGl0IHJpZ2h0IGF0IF9pbml0Q29udGVudDouLi4gdGltZSwgYmVjYXVzZSBpdCdzIG1vcmUg
dHJvdWJsZSB0aGF0IGl0J3Mgd29ydGggdG8gd3JpdGUgYSByZWFsICtbTlNDYXJib25XaW5kb3cg
ZnJhbWVSZWN0Rm9yQ29udGVudFJlY3Q6c3R5bGVNYXNrOl0uICBNLlAuIE5vdGljZSAtIDEwLzEw
LzAwCi0gICAgW3NlbGYgcmVjb25jaWxlVG9DYXJib25XaW5kb3dCb3VuZHNdOwotCi0gICAgLy8g
SW5zdGFsbCBhbiBldmVudCBoYW5kbGVyIGZvciB0aGUgQ2FyYm9uIHdpbmRvdyBldmVudHMgaW4g
d2hpY2ggd2UncmUgaW50ZXJlc3RlZC4KLSAgICBjb25zdCBFdmVudFR5cGVTcGVjIGtFdmVudHNb
XSA9IHsKLSAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93QWN0aXZhdGVk
IH0sCi0gICAgICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0RlYWN0aXZhdGVk
IH0sCi0gICAgICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0JvdW5kc0NoYW5n
ZWQgfSwKLSAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93U2hvd24gfSwK
LSAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93SGlkZGVuIH0KLSAgICB9
OwotICAgIAotICAgIGNvbnN0IEV2ZW50VHlwZVNwZWMga0NvbnRyb2xCb3VuZHNDaGFuZ2VkRXZl
bnQgPSB7IGtFdmVudENsYXNzQ29udHJvbCwga0V2ZW50Q29udHJvbEJvdW5kc0NoYW5nZWQgfTsK
LSAgICAKLSAgICBvc1N0YXR1cyA9IEluc3RhbGxFdmVudEhhbmRsZXIoIEdldFdpbmRvd0V2ZW50
VGFyZ2V0KF93aW5kb3dSZWYpLCBOU0NhcmJvbldpbmRvd0hhbmRsZUV2ZW50LCBHZXRFdmVudFR5
cGVDb3VudCgga0V2ZW50cyApLCBrRXZlbnRzLCAodm9pZCopc2VsZiwgJl9ldmVudEhhbmRsZXIp
OwotICAgIGlmIChvc1N0YXR1cyE9bm9FcnIpIHsKLSAgICAgICAgICAgIFtzZWxmIHJlbGVhc2Vd
OwotICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBvc1N0YXR1cyA9IEluc3Rh
bGxFdmVudEhhbmRsZXIoIEdldENvbnRyb2xFdmVudFRhcmdldCggSElWaWV3R2V0Um9vdCggX3dp
bmRvd1JlZiApICksIE5TQ2FyYm9uV2luZG93SGFuZGxlRXZlbnQsIDEsICZrQ29udHJvbEJvdW5k
c0NoYW5nZWRFdmVudCwgKHZvaWQqKXNlbGYsICZfZXZlbnRIYW5kbGVyKTsKLSAgICBpZiAob3NT
dGF0dXMhPW5vRXJyKSB7Ci0gICAgICAgICAgICBbc2VsZiByZWxlYXNlXTsKLSAgICAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAgSElWaWV3RmluZEJ5SUQoIEhJVmlld0dldFJvb3Qo
IF93aW5kb3dSZWYgKSwga0hJVmlld1dpbmRvd0NvbnRlbnRJRCwgJmNvbnRlbnRWaWV3ICk7Ci0g
ICAgb3NTdGF0dXMgPSBJbnN0YWxsRXZlbnRIYW5kbGVyKCBHZXRDb250cm9sRXZlbnRUYXJnZXQo
IGNvbnRlbnRWaWV3ICksIE5TQ2FyYm9uV2luZG93SGFuZGxlRXZlbnQsIDEsICZrQ29udHJvbEJv
dW5kc0NoYW5nZWRFdmVudCwgKHZvaWQqKXNlbGYsICZfZXZlbnRIYW5kbGVyKTsKLSAgICBpZiAo
b3NTdGF0dXMhPW5vRXJyKSB7Ci0gICAgICAgICAgICBbc2VsZiByZWxlYXNlXTsKLSAgICAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgfQotCi0gICAgLy8gUHV0IGEgcG9pbnRlciB0byB0aGlzIENv
Y29hIE5TV2luZG93IGluIGEgQ2FyYm9uIHdpbmRvdyBwcm9wZXJ0eSB0YWcuCi0gICAgLy8gUmln
aHQgbm93LCB0aGlzIGlzIGp1c3QgdXNlZCBieSBOU1ZpZXdDYXJib25Db250cm9sLiAgTS5QLiBO
b3RpY2UgLSAxMC85LzAwCi0gICAgd2luZG93QXNQcm9wZXJ0eSA9IHNlbGY7Ci0gICAgb3NTdGF0
dXMgPSBTZXRXaW5kb3dQcm9wZXJ0eShfd2luZG93UmVmLCBOU0FwcEtpdFByb3BlcnR5Q3JlYXRv
ciwgTlNDYXJib25XaW5kb3dQcm9wZXJ0eVRhZywgc2l6ZW9mKE5TV2luZG93ICopLCAmd2luZG93
QXNQcm9wZXJ0eSk7Ci0gICAgaWYgKG9zU3RhdHVzIT1ub0VycikgewotICAgICAgICBbc2VsZiBy
ZWxlYXNlXTsKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICAvLyBJZ25vcmUgdGhl
IENhcmJvbiB3aW5kb3cgYWN0aXZhdGlvbi9kZWFjdGl2YXRpb24gZXZlbnRzIHRoYXQgQ2FyYm9u
IHNlbmRzIHRvIGl0cyB3aW5kb3dzIGF0IGFwcCBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbi4gIFdl
J2xsIHNlbmQgc3VjaCBldmVudHMgd2hlbiB3ZSB0aGluayBpdCdzIGFwcHJvcHJpYXRlLgotICAg
IF9wYXNzaW5nQ2FyYm9uV2luZG93QWN0aXZhdGlvbkV2ZW50cyA9IE5POwotCi0gICAgLy8gQmUg
c3VyZSB0byBzeW5jIHVwIHZpc2liaWxpdHkKLSAgICBbc2VsZiBfc2V0VmlzaWJsZTooQk9PTClJ
c1dpbmRvd1Zpc2libGUoIF93aW5kb3dSZWYgKV07Ci0KLSAgICAvLyBEb25lLgotICAgIHJldHVy
biBzZWxmOwotCi19Ci0KLS0gKHZvaWQpc2V0Vmlld3NOZWVkRGlzcGxheTooQk9PTCl3ZWxsRG9U
aGV5Ci17Ci0gICAgLy8gTWFrZSBzdXJlIHdlIGNhbiBmbHVzaCBhbnl0aGluZyB0aGF0IG5lZWRz
IGl0LgotCi0gICAgLy8gV2UgbmVlZCB0byBzeW5jIHRoZSBjb250ZXh0IGhlcmUuIEkgd2FzIGhv
cGluZyBJIGRpZG4ndCBuZWVkIHRvIGRvIHRoaXMsCi0gICAgLy8gYnV0IGFwcGFyZW50bHkgd2hl
biBzY3JvbGxpbmcsIHRoZSBBcHBLaXQgdmlldyBzeXN0ZW0gZHJhd3MgZGlyZWN0bHkuCi0gICAg
Ly8gV2hlbiB0aGlzIG9jY3VycywgSSBjYW5ub3QgaW50ZXJjZXB0IGl0IHRvIG1ha2UgaXQgZHJh
dyBpbiBteSBISVZpZXcKLSAgICAvLyBjb250ZXh0LiBXaGF0IGVuZHMgdXAgaGFwcGVuaW5nIGlz
IHRoYXQgaXQgZHJhd3MsIGJ1dCBub3RoaW5nIGV2ZXIKLSAgICAvLyBmbHVzaGVzIGl0LgotCi0g
ICAgaWYgKFtzZWxmIHdpbmRvd051bWJlcl0gIT0gLTEpIHsKLSAgICAgICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IChDR0NvbnRleHRSZWYpW1tzZWxmIF90aHJlYWRDb250ZXh0XSBncmFwaGljc1BvcnRdOwotICAg
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICAgICAgQ0dDb250ZXh0
U3luY2hyb25pemUoY2dDb250ZXh0KTsKLSAgICB9Ci19Ci0KLSsgKHZvaWQpaW5pdGlhbGl6ZQot
ewotICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgIFdURjo6aW5pdGlhbGl6ZU1h
aW5UaHJlYWRUb1Byb2Nlc3NNYWluVGhyZWFkKCk7Ci0gICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1h
aW5SdW5Mb29wKCk7Ci19Ci0KLS8vIEdpdmVuIGEgcmVmZXJlbmNlIHRvIGEgQ2FyYm9uIHdpbmRv
dyB0aGF0IGlzIHRvIGJlIGVuY2Fwc3VsYXRlZCwgYW5kIGFuIGluZGljYXRvciBvZiB3aGV0aGVy
IG9yIG5vdCB0aGlzIG9iamVjdCBzaG91bGQgdGFrZSByZXNwb25zaWJpbGl0eSBmb3IgZGlzcG9z
aW5nIG9mIHRoZSBDYXJib24gd2luZG93LCBpbml0aWFsaXplLgotLSAoaWQpaW5pdFdpdGhDYXJi
b25XaW5kb3dSZWY6KFdpbmRvd1JlZilpbldpbmRvd1JlZiB0YWtpbmdPd25lcnNoaXA6KEJPT0wp
aW5XaW5kb3dSZWZJc093bmVkCi17Ci0gICAgLy8gZm9yIG5vdywgc2V0IGRpc2FibGVPcmRlcmlu
ZyB0byBZRVMgYmVjYXVzZSB0aGF0IGlzIHdoYXQgd2UndmUgYmVlbiBkb2luZyBhbmQgaXMgdGhl
cmVmb3JlIGxvd2VyIHJpc2suIEhvd2V2ZXIsIEkgdGhpbmsgaXQgd291bGQgYmUgY29ycmVjdCB0
byBzZXQgaXQgdG8gTk8uCi0gICAgcmV0dXJuIFtzZWxmIGluaXRXaXRoQ2FyYm9uV2luZG93UmVm
OmluV2luZG93UmVmIHRha2luZ093bmVyc2hpcDppbldpbmRvd1JlZklzT3duZWQgZGlzYWJsZU9y
ZGVyaW5nOllFUyBjYXJib246Tk9dOwotfQotCi0KLS8vIENsZWFuIHVwLgotLSAodm9pZClkZWFs
bG9jCi17Ci0gICAgaWYgKFdlYkNvcmVPYmpDU2NoZWR1bGVEZWFsbG9jYXRlT25NYWluVGhyZWFk
KFtDYXJib25XaW5kb3dBZGFwdGVyIGNsYXNzXSwgc2VsZikpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIENsZWFuIHVwLCBpZiBuZWNlc3NhcnkuCi0gICAgLy8gaWYgd2UgZGlkbid0IHJlbW92
ZSB0aGUgZXZlbnQgaGFuZGxlciBhdCBkZWFsbG9jIHRpbWUsIHdlIHdvdWxkIHJpc2sgZ2V0dGlu
ZyBzZW50IGV2ZW50cyBhZnRlciB0aGUgd2luZG93IGhhcyBiZWVuIGRlYWxsb2NhdGVkLiAgU2Vl
IDI3MDIxNzkuICBNLlAuIE5vdGljZSAtIDYvMS8wMQotICAgIGlmIChfZXZlbnRIYW5kbGVyKSBS
ZW1vdmVFdmVudEhhbmRsZXIoX2V2ZW50SGFuZGxlcik7Ci0KLSAgICAvLyBEbyB0aGUgc3RhbmRh
cmQgQ29jb2EgdGhpbmcuCi0gICAgW3N1cGVyIGRlYWxsb2NdOwotfQotCi0tIChXaW5kb3dSZWYp
d2luZG93UmVmCi17Ci0KLSAgICAvLyBTaW1wbGUuCi0gICAgcmV0dXJuIF93aW5kb3dSZWY7Ci0K
LX0KLQotLy8gc2hvdWxkIGFsd2F5cyBiZSBZRVMsIGJ1dCBjaGVjayBpbiBvcmRlciB0byBhdm9p
ZCBpbml0aWFsaXphdGlvbiBvciBkZWFsbG9jYXRpb24gc3VycHJpc2VzCi0tIChCT09MKV9oYXNX
aW5kb3dSZWYKLXsKLSAgICByZXR1cm4gKF93aW5kb3dSZWYgIT0gbnVsbHB0cik7Ci19Ci0KLS8v
IGFuIE5TQ2FyYm9uV2luZG93IGRvZXMgbm90IG1hbmFnZSB0aGUgd2luZG93UmVmLiAgVGhlIHdp
bmRvd1JlZiBtYW5hZ2VzIHRoZSBOU0NhcmJvbldpbmRvdwotLSAoQk9PTClfbWFuYWdlc1dpbmRv
d1JlZgotewotICAgIHJldHVybiBOTzsKLX0KLQotLSAodm9pZClfcmVtb3ZlV2luZG93UmVmCi17
Ci0gICAgX3dpbmRvd1JlZiA9IG51bGxwdHI7Ci0KLSAgICBpZiAoX2V2ZW50SGFuZGxlcikgUmVt
b3ZlRXZlbnRIYW5kbGVyKF9ldmVudEhhbmRsZXIpOwotCi0gICAgX2V2ZW50SGFuZGxlciA9IG51
bGxwdHI7Ci19Ci0KLS0gKFdpbmRvd0NsYXNzKV9jYXJib25XaW5kb3dDbGFzcwotewotICAgIFdp
bmRvd0NsYXNzIHdpbmRvd0NsYXNzID0ga0RvY3VtZW50V2luZG93Q2xhc3M7Ci0gICAgT1NTdGF0
dXMgb3NTdGF0dXM7Ci0KLSAgICBpZiAoW3NlbGYgX2hhc1dpbmRvd1JlZl0pIHsKLSAgICAgICAg
b3NTdGF0dXMgPSBHZXRXaW5kb3dDbGFzcyhbc2VsZiB3aW5kb3dSZWZdLCAmd2luZG93Q2xhc3Mp
OwotICAgICAgICBpZiAob3NTdGF0dXMgIT0gbm9FcnIpIHsKLSAgICAgICAgICAgIE5TTG9nKEAi
Q291bGRuJ3QgZ2V0IHdpbmRvdyBjbGFzczogZXJyb3I9JWxkIiwgb3NTdGF0dXMpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiB3aW5kb3dDbGFzczsgCi19Ci0KLS8vIFVwZGF0ZSB0aGlz
IHdpbmRvdydzIGZyYW1lIGFuZCBjb250ZW50IGZyYW1lIHJlY3RhbmdsZXMgdG8gbWF0Y2ggdGhl
IENhcmJvbiB3aW5kb3cncyBzdHJ1Y3R1cmUgYm91bmRzIGFuZCBjb250ZW50IGJvdW5kcyByZWN0
YW5nbGVzLiAgUmV0dXJuIHllcyBpZiB0aGUgdXBkYXRlIHdhcyByZWFsbHkgbmVjZXNzYXJ5LCBu
byBvdGhlcndpc2UuCi0tIChCT09MKXJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzCi17Ci0g
ICAgT1NTdGF0dXMgb3NTdGF0dXM7Ci0gICAgTlNSZWN0IG5ld0NvbnRlbnRGcmFtZVJlY3Q7Ci0g
ICAgTlNSZWN0IG5ld1dpbmRvd0ZyYW1lUmVjdDsKLSAgICBOU1JlY3Qgb2xkQ29udGVudEZyYW1l
UmVjdDsKLSAgICBSZWN0IHdpbmRvd0NvbnRlbnRCb3VuZHNSZWN0OwotICAgIFJlY3Qgd2luZG93
U3RydWN0dXJlQm91bmRzUmVjdDsKLQotICAgIC8vIEluaXRpYWxpemUgZm9yIHNhZmUgcmV0dXJu
aW5nLgotICAgIEJPT0wgcmVjb25jaWxpYXRpb25XYXNOZWNlc3NhcnkgPSBOTzsKLQotICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgLy8gUHJlY29uZGl0aW9uIGNo
ZWNrLgotICAgIGFzc2VydChfY29udGVudFZpZXcpOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAotCi0gICAgLy8gR2V0IHRoZSBDYXJib24gd2luZG93J3MgYm91bmRzLCB3
aGljaCBhcmUgZXhwcmVzc2VkIGluIGdsb2JhbCBzY3JlZW4gY29vcmRpbmF0ZXMsIHdpdGggKDAs
MCkgYXQgdGhlIHRvcC1sZWZ0IG9mIHRoZSBtYWluIHNjcmVlbi4KLSAgICBvc1N0YXR1cyA9IEdl
dFdpbmRvd0JvdW5kcyhfd2luZG93UmVmLCBrV2luZG93U3RydWN0dXJlUmduLCAmd2luZG93U3Ry
dWN0dXJlQm91bmRzUmVjdCk7Ci0gICAgaWYgKG9zU3RhdHVzICE9IG5vRXJyKQotICAgICAgICBO
U0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIHN0cnVjdHVyZSBib3VuZHMgY291bGRuJ3QgYmUgZ290
dGVuLiIpOwotICAgIG9zU3RhdHVzID0gR2V0V2luZG93Qm91bmRzKF93aW5kb3dSZWYsIGtXaW5k
b3dDb250ZW50UmduLCAmd2luZG93Q29udGVudEJvdW5kc1JlY3QpOwotICAgIGlmIChvc1N0YXR1
cyAhPSBub0VycikKLSAgICAgICAgTlNMb2coQCJBIENhcmJvbiB3aW5kb3cncyBjb250ZW50IGJv
dW5kcyBjb3VsZG4ndCBiZSBnb3R0ZW4uIik7Ci0KLSAgICAvLyBTZXQgdGhlIGZyYW1lIHJlY3Rh
bmdsZSBvZiB0aGUgYm9yZGVyIHZpZXcgYW5kIHRoaXMgd2luZG93IGZyb20gdGhlIENhcmJvbiB3
aW5kb3cncyBzdHJ1Y3R1cmUgcmVnaW9uIGJvdW5kcy4KLSAgICBuZXdXaW5kb3dGcmFtZVJlY3Qu
b3JpZ2luLnggPSB3aW5kb3dTdHJ1Y3R1cmVCb3VuZHNSZWN0LmxlZnQ7Ci0gICAgbmV3V2luZG93
RnJhbWVSZWN0Lm9yaWdpbi55ID0gTlNNYXhZKFsoTlNTY3JlZW4gKilbW05TU2NyZWVuIHNjcmVl
bnNdIG9iamVjdEF0SW5kZXg6MF0gZnJhbWVdKSAtIHdpbmRvd1N0cnVjdHVyZUJvdW5kc1JlY3Qu
Ym90dG9tOwotICAgIG5ld1dpbmRvd0ZyYW1lUmVjdC5zaXplLndpZHRoID0gd2luZG93U3RydWN0
dXJlQm91bmRzUmVjdC5yaWdodCAtIHdpbmRvd1N0cnVjdHVyZUJvdW5kc1JlY3QubGVmdDsKLSAg
ICBuZXdXaW5kb3dGcmFtZVJlY3Quc2l6ZS5oZWlnaHQgPSB3aW5kb3dTdHJ1Y3R1cmVCb3VuZHNS
ZWN0LmJvdHRvbSAtIHdpbmRvd1N0cnVjdHVyZUJvdW5kc1JlY3QudG9wOwotICAgIEFMTE9XX0RF
UFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWYgKCFOU0VxdWFsUmVjdHMobmV3V2lu
ZG93RnJhbWVSZWN0LCBfZnJhbWUpKSB7Ci0gICAgICAgIFtzZWxmIF9zZXRGcmFtZTpuZXdXaW5k
b3dGcmFtZVJlY3RdOwotICAgICAgICBbX2JvcmRlclZpZXcgc2V0RnJhbWVTaXplOm5ld1dpbmRv
d0ZyYW1lUmVjdC5zaXplXTsKLSAgICAgICAgcmVjb25jaWxpYXRpb25XYXNOZWNlc3NhcnkgPSBZ
RVM7Ci0gICAgfQotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotCi0gICAg
Ly8gU2V0IHRoZSBjb250ZW50IHZpZXcncyBmcmFtZSByZWN0IGZyb20gdGhlIENhcmJvbiB3aW5k
b3cncyBjb250ZW50IHJlZ2lvbiBib3VuZHMuCi0gICAgbmV3Q29udGVudEZyYW1lUmVjdC5vcmln
aW4ueCA9IHdpbmRvd0NvbnRlbnRCb3VuZHNSZWN0LmxlZnQgLSB3aW5kb3dTdHJ1Y3R1cmVCb3Vu
ZHNSZWN0LmxlZnQ7Ci0gICAgbmV3Q29udGVudEZyYW1lUmVjdC5vcmlnaW4ueSA9IHdpbmRvd1N0
cnVjdHVyZUJvdW5kc1JlY3QuYm90dG9tIC0gd2luZG93Q29udGVudEJvdW5kc1JlY3QuYm90dG9t
OwotICAgIG5ld0NvbnRlbnRGcmFtZVJlY3Quc2l6ZS53aWR0aCA9IHdpbmRvd0NvbnRlbnRCb3Vu
ZHNSZWN0LnJpZ2h0IC0gd2luZG93Q29udGVudEJvdW5kc1JlY3QubGVmdDsKLSAgICBuZXdDb250
ZW50RnJhbWVSZWN0LnNpemUuaGVpZ2h0ID0gd2luZG93Q29udGVudEJvdW5kc1JlY3QuYm90dG9t
IC0gd2luZG93Q29udGVudEJvdW5kc1JlY3QudG9wOwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0JFR0lOCi0gICAgb2xkQ29udGVudEZyYW1lUmVjdCA9IFsoTlNWaWV3ICopX2Nv
bnRlbnRWaWV3IGZyYW1lXTsKLSAgICBpZiAoIU5TRXF1YWxSZWN0cyhuZXdDb250ZW50RnJhbWVS
ZWN0LCBvbGRDb250ZW50RnJhbWVSZWN0KSkgewotICAgICAgICBbKE5TVmlldyAqKV9jb250ZW50
VmlldyBzZXRGcmFtZTpuZXdDb250ZW50RnJhbWVSZWN0XTsKLSAgICAgICAgcmVjb25jaWxpYXRp
b25XYXNOZWNlc3NhcnkgPSBZRVM7Ci0gICAgfQotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAotCi0gICAgLy8gRG9uZS4KLSAgICByZXR1cm4gcmVjb25jaWxpYXRpb25XYXNO
ZWNlc3Nhcnk7Ci0KLX0KLQotCi0vLyBIYW5kbGUgYW4gZXZlbnQganVzdCBsaWtlIGFuIE5TV2lu
ZG93IHdvdWxkLgotLSAodm9pZClzZW5kU3VwZXJFdmVudDooTlNFdmVudCAqKWluRXZlbnQKLXsK
LQotICAgIC8vIEZpbHRlciBvdXQgYSBmZXcgZXZlbnRzIHRoYXQganVzdCByZXN1bHQgaW4gY29t
cGxhaW50cyBpbiB0aGUgbG9nLgotICAgIC8vIElnbm9yZSBzb21lIHVua25vd24gZXZlbnQgdGhh
dCBnZXRzIHNlbnQgd2hlbiBOU1RleHRWaWV3cyBpbiBwcmludGluZyBhY2Nlc3Nvcnkgdmlld3Mg
YXJlIGZvY3VzZWQuICBNLlAuIE5vdGljZSAtIDEyLzcvMDAKLSAgICBCT09MIGlnbm9yZUV2ZW50
ID0gTk87Ci0gICAgTlNFdmVudFR5cGUgZXZlbnRUeXBlID0gW2luRXZlbnQgdHlwZV07Ci0gICAg
aWYgKGV2ZW50VHlwZSA9PSBOU0V2ZW50VHlwZVN5c3RlbURlZmluZWQpIHsKLSAgICAgICAgc2hv
cnQgZXZlbnRTdWJ0eXBlID0gW2luRXZlbnQgc3VidHlwZV07Ci0gICAgICAgIGlmIChldmVudFN1
YnR5cGUgPT0gNykgewotICAgICAgICAgICAgaWdub3JlRXZlbnQgPSBZRVM7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBOU0V2ZW50VHlwZUtleURvd24pIHsKLSAgICAg
ICAgLy8gSGFuZGxlIGNvbW1hbmQtc3BhY2UgYXMgW05TQXBwIHNlbmRFdmVudDpdIGRvZXMuCi0g
ICAgICAgIGlmIChbTlNJbnB1dENvbnRleHQgcHJvY2Vzc0lucHV0S2V5QmluZGluZ3M6aW5FdmVu
dF0pIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAv
LyBTaW1wbGUuCi0gICAgaWYgKCFpZ25vcmVFdmVudCkgW3N1cGVyIHNlbmRFdmVudDppbkV2ZW50
XTsKLX0KLQotLSAodm9pZClyZWxpbnF1aXNoRm9jdXMKLXsKLSAgICBOU1Jlc3BvbmRlciogIGZp
cnN0UmVzcG9uZGVyOwotCi0gICAgLy8gQ2FyYm9uIHRoaW5rcyB0aGF0IGEgY29udHJvbCBoYXMg
dGhlIGtleWJvYXJkIGZvY3VzLAotICAgIC8vIG9yIHdlIHdvdWxkbid0IGJlIGJlaW5nIGFza2Vk
IHRvIHJlbGlucXVpc2ggZm9jdXMuCi0KLSAgICBmaXJzdFJlc3BvbmRlciA9IFtzZWxmIGZpcnN0
UmVzcG9uZGVyXTsKLSAgICBpZiAoW2ZpcnN0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmll
dyBjbGFzc11dKSB7Ci0gICAgICAgIC8vIE1ha2UgdGhlIHdpbmRvdyB0aGUgZmlyc3QgcmVzcG9u
ZGVyLCBzbyB0aGF0IG5vIHZpZXcgaXMgdGhlIGtleSB2aWV3LgotICAgICAgICBbc2VsZiBtYWtl
Rmlyc3RSZXNwb25kZXI6c2VsZl07Ci0gICAgfQotfQotCi0tIChCT09MKW1ha2VGaXJzdFJlc3Bv
bmRlcjooTlNSZXNwb25kZXIgKilhUmVzcG9uZGVyCi17Ci0gICAgLy8gTGV0IE5TV2luZG93IGZv
Y3VzIHRoZSBhcHByb3ByaWF0ZSBOU1ZpZXcuCi0gICAgaWYgKCFbc3VwZXIgbWFrZUZpcnN0UmVz
cG9uZGVyOmFSZXNwb25kZXJdKQotICAgICAgICByZXR1cm4gTk87Ci0KLSAgICAvLyBOb3csIGlm
IHRoZSB2aWV3IHdlJ3JlIGZvY3VzaW5nIGlzIGluIGEgSElXZWJWaWV3LCBmaW5kIHRoZQotICAg
IC8vIGNvcnJlc3BvbmRpbmcgSElXZWJWaWV3IGZvciB0aGUgTlNWaWV3LCBhbmQgdGVsbCBjYXJi
b24gdG8KLSAgICAvLyBjbGVhciBhbnkgZm9jdXNlZCBjb250cm9sLgotICAgIEhJVmlld1JlZiB2
aWV3UmVmID0gMDsKLSAgICBOU1Jlc3BvbmRlciAqZmlyc3RSZXNwb25kZXIgPSBbc2VsZiBmaXJz
dFJlc3BvbmRlcl07ICAgIAotICAgIGlmIChbZmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpb
TlNWaWV3IGNsYXNzXV0pIHsKLSAgICAgICAgTlNWaWV3ICp2aWV3ID0gKE5TVmlldyAqKWZpcnN0
UmVzcG9uZGVyOwotICAgICAgICB3aGlsZSAodmlldykgewotICAgICAgICAgICAgdmlld1JlZiA9
IFtISVZpZXdBZGFwdGVyIGdldEhJVmlld0Zvck5TVmlldzp2aWV3XTsKLSAgICAgICAgICAgIGlm
ICh2aWV3UmVmKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgdmlldyA9IFt2
aWV3IHN1cGVydmlld107Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBISVZpZXdSZWYgZm9jdXM7
Ci0gICAgR2V0S2V5Ym9hcmRGb2N1cyAoX3dpbmRvd1JlZiwgJmZvY3VzKTsKLSAgICBpZiAoZm9j
dXMgIT0gdmlld1JlZikgewotICAgICAgICBTZXRLZXlib2FyZEZvY3VzIChfd2luZG93UmVmLCB2
aWV3UmVmLCBrQ29udHJvbEluZGljYXRvclBhcnQgKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gWUVT
OwotfQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIF9hZGRDdXJzb3JSZWN0OmN1cnNvcjpm
b3JWaWV3OiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3
aW5kb3dOdW1iZXJdLCBiZWNhdXNlIENhcmJvbiB3aW5kb3dzIHdvbid0IGhhdmUgc3Vidmlld3Ms
IGFuZCB0aGVyZWZvcmUgd29uJ3QgaGF2ZSBjdXJzb3IgcmVjdHMuCi0KLQotLy8gVGhlcmUncyBu
byBvdmVycmlkZSBvZiBfYXV0b1Jlc2l6ZVN0YXRlLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNX
aW5kb3cncyBvcGVyYXRlcyBvbiBfd2luZG93TnVtLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQg
bWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4KLQotCi0vLyBEbyB0aGUgcmlnaHQg
dGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKHZvaWQpX2NhbmNlbEtleTooaWQpc2VuZGVy
Ci17Ci0gICAgLy8gTW9zdCBvZiB0aGUgdGltZSB0aGUgaGFuZGxpbmcgb2YgdGhlIGNhbmNlbCBr
ZXkgd2lsbCBiZSBkb25lIGJ5IENhcmJvbiwgYnV0IHRoaXMgbWV0aG9kIHdpbGwgYmUgaW52b2tl
ZCBpZiBhbiBOU0NhcmJvbldpbmRvdyBpcyB3cmFwcGluZyBhIENhcmJvbiB3aW5kb3cgdGhhdCBj
b250YWlucyBhbiBOU1ZpZXdDYXJib25Db250cm9sLCBhbmQgdGhlIGVzY2FwZSBrZXkgb3Igd2hh
dGV2ZXIgaXMgcHJlc3NlZCB3aXRoIGFuIE5TVGV4dFZpZXcgZm9jdXNlZC4gIEp1c3QgZG8gd2hh
dCBDYXJib24gd291bGQgZG8uCi0gICAgQ29udHJvbFJlZiBjYW5jZWxCdXR0b247Ci0gICAgR2V0
V2luZG93Q2FuY2VsQnV0dG9uKF93aW5kb3dSZWYsICZjYW5jZWxCdXR0b24pOwotICAgIGlmIChj
YW5jZWxCdXR0b24pIHsKLSAgICAgICAgaWYgKElzQ29udHJvbEFjdGl2ZShjYW5jZWxCdXR0b24p
KSB7Ci0gICAgICAgICAgICBISVZpZXdTaW11bGF0ZUNsaWNrKGNhbmNlbEJ1dHRvbiwga0NvbnRy
b2xCdXR0b25QYXJ0LCAwLCBudWxscHRyKTsKLSAgICAgICAgfQotICAgIH0KLQotfQotCi0KLQot
Ly8gRG8gdGhlIHJpZ2h0IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tICh2b2lkKV9jb21t
b25Bd2FrZQotewotICAgIC8vIENvbXBsYWluLCBiZWNhdXNlIHRoaXMgc2hvdWxkIG5ldmVyIGJl
IGNhbGxlZC4gIFdlIGluc2lzdCB0aGF0IC1bTlNDYXJib25XaW5kb3cgaW5pdFdpdGhDYXJib25X
aW5kb3dSZWZdIGlzIHRoZSBvbmx5IHZhbGlkIGluaXRpYWxpemVyIGZvciBpbnN0YW5jZXMgb2Yg
dGhpcyBjbGFzcywgYW5kIHRoYXQgdGhlcmUncyBubyBzdWNoIHRoaW5nIGFzIGEgb25lLXNob3Qg
TlNDYXJib25XaW5kb3cuCi0gICAgTlNMb2coQCItW05TQ2FyYm9uV2luZG93IF9jb21tb25Bd2Fr
ZV0gaXMgbm90IGltcGxlbWVudGVkLiIpOwotCi19Ci0KLQotLy8gVGhlcmUncyBubyBvdmVycmlk
ZSBvZiBfY29tbW9uSW5pdEZyYW1lOnN0eWxlTWFzazpiYWNraW5nOmRlZmVyOiwgZGVzcGl0ZSB0
aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgbW9kaWZpZXMgcXVpdGUgYSBmZXcgaW5zdGFuY2UgdmFy
aWFibGVzLCBiZWNhdXNlIGl0IGdldHMgY2FsbGVkIGluIGEgaGFybWxlc3Mgd2F5IGlmIHRoZSBj
bGFzcyBpbnN0YW5jZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIC1bTlNDYXJib25XaW5k
b3cgaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6dGFraW5nT3duZXJzaGlwOl0uCi0KLQotLy8gRG8g
dGhlIHJpZ2h0IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tIChpZClfZGVzdHJveVJlYWxX
aW5kb3c6KEJPT0wpb3JkZXJpbmdPdXQKLXsKLSAgICAvLyBDb21wbGFpbiwgYmVjYXVzZSB0aGlz
IHNob3VsZCBuZXZlciBiZSBjYWxsZWQuICBXZSBkb24ndCBzdXBwb3J0IG9uZS1zaG90IE5TQ2Fy
Ym9uV2luZG93cy4KLSAgICBOU0xvZyhAIi1bTlNDYXJib25XaW5kb3cgX2Rlc3Ryb3lSZWFsV2lu
ZG93Ol0gaXMgbm90IGltcGxlbWVudGVkLiIpOwotICAgIHJldHVybiBzZWxmOwotfQotCi0KLS8v
IFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX2Rpc2NhcmRDdXJzb3JSZWN0c0ZvclZpZXcsIGRlc3Bp
dGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwg
YmVjYXVzZSBDYXJib24gd2luZG93cyB3b24ndCBoYXZlIHN1YnZpZXdzLCBhbmQgdGhlcmVmb3Jl
IHdvbid0IGhhdmUgY3Vyc29yIHJlY3RzLgotCi0KLS8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2Yg
X2ZvcmNlRmx1c2hXaW5kb3dUb1NjcmVlbiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93
J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQg
bWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4KLQotCi0vLyBUaGVyZSdzIG5vIG92
ZXJyaWRlIG9mIF9nZXRQb3NpdGlvbkZyb21TZXJ2ZXIsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBO
U1dpbmRvdydzIG9wZXJhdGVzIG9uIF93aW5kb3dOdW0sIGJlY2F1c2UgaXQncyBvbmx5IGNhbGxl
ZCBmcm9tIC1bTlNBcHBsaWNhdGlvbiBfYWN0aXZhdGVXaW5kb3dzXSwgd2hpY2ggaXMgaG9wZWZ1
bGx5IGFib3V0IHRvIGJlY29tZSBvYnNvbGV0ZSBhbnkgc2Vjb25kIG5vdy4KLQotCi0vLyBUaGVy
ZSdzIG5vIG92ZXJyaWRlIG9mIF9nbG9iYWxXaW5kb3dOdW0sIGRlc3BpdGUgdGhlIGZhY3QgdGhh
dCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBsb29r
cyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9uIHdpbmRvd3MgYXMgaXMuCi0KLQotLy8gVGhl
cmUncyBubyBvdmVycmlkZSBvZiBfaW5pdENvbnRlbnQ6c3R5bGVNYXNrOmJhY2tpbmc6ZGVmZXI6
Y29udGVudFZpZXc6LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBtb2RpZmllcyBf
YXV4aWxpYXJ5U3RvcmFnZS0+X2F1eFdGbGFncy5oYXNTaGFkb3csIGJlY2F1c2UgaXQgd2lsbCBu
ZXZlciBnZXQgY2FsbGVkIGlmIHRoZSBjbGFzcyBpbnN0YW5jZSBpcyBwcm9wZXJseSBpbml0aWFs
aXplZCB3aXRoIC1bTlNDYXJib25XaW5kb3cgaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6dGFraW5n
T3duZXJzaGlwOl0uCi0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBfaW5pdENvbnRlbnQ6
c3R5bGVNYXNrOmJhY2tpbmc6ZGVmZXI6Y291bnRlcnBhcnQ6LCBkZXNwaXRlIHRoZSBmYWN0IHRo
YXQgTlNXaW5kb3cncyBtb2RpZmllcyBfYXV4aWxpYXJ5U3RvcmFnZS0+X2F1eFdGbGFncy5oYXNT
aGFkb3csIGJlY2F1c2UgaXQgd2lsbCBuZXZlciBnZXQgY2FsbGVkIGlmIHRoZSBjbGFzcyBpbnN0
YW5jZSBpcyBwcm9wZXJseSBpbml0aWFsaXplZCB3aXRoIC1bTlNDYXJib25XaW5kb3cgaW5pdFdp
dGhDYXJib25XaW5kb3dSZWY6dGFraW5nT3duZXJzaGlwOl0uCi0KLQotLy8gRG8gd2hhdCBOU1dp
bmRvdyB3b3VsZCBkbywgYnV0IHRoZW4gc3ljaHJvbml6ZSB0aGUgQ2FyYm9uIHdpbmRvdyBzdHJ1
Y3R1cmVzLgotLSAodm9pZClfb2xkUGxhY2VXaW5kb3c6KE5TUmVjdClmcmFtZVJlY3QKLXsKLSAg
ICBPU1N0YXR1cyBvc1N0YXR1czsKLQotICAgIC8vIERvIHRoZSBzdGFuZGFyZCBDb2NvYSB0aGlu
Zy4KLSAgICBbc3VwZXIgX29sZFBsYWNlV2luZG93OmZyYW1lUmVjdF07Ci0KLSAgICAvLyBUZWxs
IENhcmJvbiB0byB1cGRhdGUgaXRzIHZhcmlvdXMgcmVnaW9ucy4KLSAgICAvLyBEZXNwaXRlIGl0
cyBuYW1lLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgZWFybHkgYW5kIG9mdGVuLCBl
dmVuIGlmIHRoZSB3aW5kb3cgaXNuJ3QgdmlzaWJsZSB5ZXQuICAyNzAyNjQ4LiAgTS5QLiBOb3Rp
Y2UgLSA3LzI0LzAxCi0gICAgb3NTdGF0dXMgPSBfU3luY1dpbmRvd1dpdGhDR0FmdGVyTW92ZShf
d2luZG93UmVmKTsKLSAgICBpZiAob3NTdGF0dXMgIT0gbm9FcnIpCi0gICAgICAgIE5TTG9nKEAi
QSBDYXJib24gd2luZG93J3MgYm91bmRzIGNvdWxkbid0IGJlIHN5bmNocm9uaXplZCAoJWkpLiIs
IChpbnQpb3NTdGF0dXMpOwotfQotCi0KLS8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX29yZGVy
T3V0QW5kQ2FsY0tleVdpdGhDb3VudGVyOiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93
J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQg
bWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4KLQotCi0vLyBUaGVyZSdzIG5vIG92
ZXJyaWRlIG9mIF9yZWFsSGVhcnRCZWF0VGhyZWFkQ29udGV4dCwgZGVzcGl0ZSB0aGUgZmFjdCB0
aGF0IE5TV2luZG93cydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBs
b29rcyBsaWtlIGl0IG1pZ2h0IG5vdCBkbyBhbnl0aGluZyB0aGF0IHdpbGwgZWZmZWN0IGEgQ2Fy
Ym9uIHdpbmRvdy4KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIF9yZWdpc3RlcldpdGhE
b2NrSWZOZWVkZWQsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3Nl
bGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24g
Q2FyYm9uIHdpbmRvd3MgYXMgaXMuCi0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBfcmVt
b3ZlQ3Vyc29yUmVjdDpjdXJzb3I6Zm9yVmlldzosIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBOU1dp
bmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBDYXJib24gd2luZG93
cyB3b24ndCBoYXZlIHN1YnZpZXdzLCBhbmQgdGhlcmVmb3JlIHdvbid0IGhhdmUgY3Vyc29yIHJl
Y3RzLgotCi0KLS8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX3NldEF2b2lkc0FjdGl2YXRpb246
LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBpbnZva2VzIFtzZWxmIHdpbmRvd051
bWJlcl0sIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdCBtaWdodCB3b3JrIG9uIENhcmJvbiB3aW5k
b3dzIGFzIGlzLgotCi0KLS8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX3NldEZyYW1lOiwgZGVz
cGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgbW9kaWZpZXMgX2ZyYW1lLCBiZWNhdXNlIGl0
IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4gIFRoZSBz
eW5jaHJvbml6YXRpb24gb2YgdGhlIENhcmJvbiB3aW5kb3cgYm91bmRzIHJlY3QgdG8gdGhlIENv
Y29hIGZyYW1lIHJlY3QgaXMgZG9uZSBpbiB0aGUgb3ZlcnJpZGVzIG9mIF9vbGRQbGFjZVdpbmRv
dzogYW5kIF93aW5kb3dNb3ZlZFRvUmVjdDouCi0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBv
ZiBfc2V0RnJhbWVDb21tb246ZGlzcGxheTpzdGFzaFNpemU6LCBkZXNwaXRlIHRoZSBmYWN0IHRo
YXQgTlNXaW5kb3cncyBpbnZva2VzIFtzZWxmIHdpbmRvd051bWJlcl0sIGJlY2F1c2UgaXQgbG9v
a3MgbGlrZSBpdCBtaWdodCB3b3JrIG9uIENhcmJvbiB3aW5kb3dzIGFzIGlzLgotCi0KLS8vIFRo
ZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX3NldFdpbmRvd051bWJlcjosIGRlc3BpdGUgdGhlIGZhY3Qg
dGhhdCBOU1dpbmRvdydzIG1vZGlmaWVzIF93aW5kb3dOdW0gYW5kIGludm9rZXMgW3NlbGYgd2lu
ZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9u
IHdpbmRvd3MgYXMgaXMuCi0KLQotLy8gRG8gd2hhdCBOU1dpbmRvdyB3b3VsZCBkbywgYnV0IGZv
ciBhIENhcmJvbiB3aW5kb3cuCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIG1vc3RseSBjdXQtYW5kLXBh
c3RlZCBmcm9tIC1bTlNXaW5kb3cgX3Rlcm1XaW5kb3dJZk93bmVyXS4gIE0uUC4gTm90aWNlIC0g
OC83LzAwCi0tICh2b2lkKV90ZXJtV2luZG93SWZPd25lcgotewotICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgW3NlbGYgX3NldFdpbmRvd051bWJlcjotMV07Ci0g
ICAgX3dGbGFncy5pc1Rlcm1pbmF0aW5nID0gWUVTOwotICAgIGlmIChfd2luZG93UmVmICYmIF93
aW5kb3dSZWZJc093bmVkKQotICAgICAgICBEaXNwb3NlV2luZG93KF93aW5kb3dSZWYpOwotICAg
IC8vIEtXIC0gbmVlZCB0byBjbGVhciB3aW5kb3cgc2hhZG93IHN0YXRlIHNvIGl0IGdldHMgcmVz
ZXQgY29ycmVjdGx5IHdoZW4gbmV3IHdpbmRvdyBjcmVhdGVkCi0vLyAgICBpZiAoW19ib3JkZXJW
aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0U2hhZG93U3RhdGU6KV0pIHsKLS8v
ICAgICAgICBbX2JvcmRlclZpZXcgc2V0U2hhZG93U3RhdGU6a0ZyYW1lU2hhZG93Tm9uZV07Ci0v
LyAgICB9Ci0gICAgX3dGbGFncy5pc1Rlcm1pbmF0aW5nID0gTk87Ci0gICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBf
dGhyZWFkQ29udGV4dCwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBb
c2VsZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgbm90IGRv
IGFueXRoaW5nIHRoYXQgd2lsbCBlZmZlY3QgYSBDYXJib24gd2luZG93LgotCi0KLS8vIFRoZXJl
J3Mgbm8gb3ZlcnJpZGUgb2YgX3dpbmRvd01vdmVkOiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5T
V2luZG93J3Mgb3BlcmF0ZXMgb24gX3dpbmRvd051bSwgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0
IG1pZ2h0IHdvcmsgb24gQ2FyYm9uIHdpbmRvd3MgYXMgaXMuCi0KLQotLy8gRG8gd2hhdCBOU1dp
bmRvdyB3b3VsZCBkbywgYnV0IHRoZW4gc3ljaHJvbml6ZSB0aGUgQ2FyYm9uIHdpbmRvdyBzdHJ1
Y3R1cmVzLgotLSAodm9pZClfd2luZG93TW92ZWRUb1JlY3Q6KE5TUmVjdClhY3R1YWxGcmFtZQot
ewotCi0gICAgT1NTdGF0dXMgb3NTdGF0dXM7Ci0KLSAgICAvLyBEbyB0aGUgc3RhbmRhcmQgQ29j
b2EgdGhpbmcuCi0gICAgW3N1cGVyIF93aW5kb3dNb3ZlZFRvUmVjdDphY3R1YWxGcmFtZV07Ci0K
LSAgICAvLyBMZXQgQ2FyYm9uIGtub3cgdGhhdCB0aGUgd2luZG93IGhhcyBiZWVuIG1vdmVkLCB1
bmxlc3MgdGhpcyBtZXRob2QgaXMgYmVpbmcgY2FsbGVkICJlYXJseS4iCi0gICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBpZiAoX3dGbGFncy52aXNpYmxlKSB7Ci0g
ICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgICAgICBvc1N0YXR1
cyA9IF9TeW5jV2luZG93V2l0aENHQWZ0ZXJNb3ZlKF93aW5kb3dSZWYpOwotICAgICAgICBpZiAo
b3NTdGF0dXMhPW5vRXJyKSBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIGJvdW5kcyBjb3VsZG4n
dCBiZSBzeW5jaHJvbml6ZWQgKCVpKS4iLCAoaW50KW9zU3RhdHVzKTsKLSAgICB9Ci0KLX0KLQot
LSAoTlNSZWN0KWNvbnN0cmFpbkZyYW1lUmVjdDooTlNSZWN0KWFjdHVhbEZyYW1lIHRvU2NyZWVu
OihOU1NjcmVlbiAqKXNjcmVlbgotewotICAgIC8vIGxldCBDYXJib24gZGVjaWRlIHdpbmRvdyBz
aXplIGFuZCBwb3NpdGlvbgotICAgIHJldHVybiBhY3R1YWxGcmFtZTsKLX0KLQotLSAodm9pZClz
ZWxlY3RLZXlWaWV3Rm9sbG93aW5nVmlldzooTlNWaWV3ICopYVZpZXcKLXsKLSAgICBISVZpZXdS
ZWYgdmlldyA9IG51bGxwdHI7Ci0gICAgdmlldyA9IFtISVZpZXdBZGFwdGVyIGdldEhJVmlld0Zv
ck5TVmlldzphVmlld107Ci0KLSAgICBpZiAodmlldykgewotICAgICAgICBISVZpZXdSZWYgY29u
dGVudFZpZXc7Ci0gICAgICAgIAotICAgICAgICBHZXRSb290Q29udHJvbChHZXRDb250cm9sT3du
ZXIodmlldyksICZjb250ZW50Vmlldyk7Ci0gICAgICAgIEhJVmlld0FkdmFuY2VGb2N1cyhjb250
ZW50VmlldywgMCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFtzdXBlciBzZWxlY3RLZXlWaWV3Rm9s
bG93aW5nVmlldzphVmlld107Ci19Ci0KLS0gKHZvaWQpc2VsZWN0S2V5Vmlld1ByZWNlZGluZ1Zp
ZXc6KE5TVmlldyAqKWFWaWV3Ci17Ci0gICAgSElWaWV3UmVmIHZpZXcgPSBudWxscHRyOwotICAg
IHZpZXcgPSBbSElWaWV3QWRhcHRlciBnZXRISVZpZXdGb3JOU1ZpZXc6YVZpZXddOwotCi0gICAg
aWYgKHZpZXcpIHsKLSAgICAgICAgSElWaWV3UmVmIGNvbnRlbnRWaWV3OwotICAgICAgICAKLSAg
ICAgICAgR2V0Um9vdENvbnRyb2woR2V0Q29udHJvbE93bmVyKHZpZXcpLCAmY29udGVudFZpZXcp
OwotICAgICAgICBISVZpZXdBZHZhbmNlRm9jdXMoY29udGVudFZpZXcsIHNoaWZ0S2V5KTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgW3N1cGVyIHNlbGVjdEtleVZpZXdQcmVjZWRpbmdWaWV3OmFWaWV3
XTsKLX0KLQotLSAodm9pZCltYWtlS2V5V2luZG93Ci17Ci0gICAgW05TQXBwIF9zZXRNb3VzZUFj
dGl2YXRpb25JblByb2dyZXNzOk5PXTsKLSAgICBbTlNBcHAgc2V0SXNBY3RpdmU6WUVTXTsKLSAg
ICBbc3VwZXIgbWFrZUtleVdpbmRvd107Ci19Ci0KLS8vIERvIHRoZSByaWdodCB0aGluZyBmb3Ig
YSBDYXJib24gd2luZG93LgotLSAoQk9PTCljYW5CZWNvbWVLZXlXaW5kb3cKLXsKLQotICAgIHJl
dHVybiBZRVM7Ci19Ci0KLS8vIERvIHRoZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93
LgotLSAoQk9PTCljYW5CZWNvbWVNYWluV2luZG93Ci17Ci0gICAgT1NTdGF0dXMgb3NTdGF0dXM7
Ci0gICAgV2luZG93Q2xhc3Mgd2luZG93Q2xhc3M7Ci0gICAgLy8gQnkgZGVmYXVsdCwgQ2FyYm9u
IHdpbmRvd3MgY2Fubm90IGJlY29tZSB0aGUgbWFpbiB3aW5kb3cuCi0gICAgLy8gV2hhdCBhYm91
dCB3aGVuIHRoZSBkZWZhdWx0IGlzbid0IHJpZ2h0PyAgUmVxdWlyaW5nIHN1YmNsYXNzaW5nIHNl
ZW1zIGhhcnNoLiAgTS5QLiBXYXJuaW5nIC0gOS8xNy8wMQotICAgIC8vIEtXIC0gIG1vZGlmeSB0
aGlzIHRvIGFsbG93IGRvY3VtZW50IHdpbmRvd3MgdG8gYmVjb21lIG1haW4KLSAgICAvLyBUaGlz
IGlzIHByaW1hcmlseSB0byBnZXQgdGhlIHJpZ2h0IGxvb2ssIHNvIHRoYXQgeW91IGRvbid0IGhh
dmUgdHdvIHdpbmRvd3MgdGhhdCBib3RoIGxvb2sgYWN0aXZlIC0gb25lIENvY29hIGRvY3VtZW50
IGFuZCBvbmUgQ2FyYm9uIGRvY3VtZW50Ci0gICAgb3NTdGF0dXMgPSBHZXRXaW5kb3dDbGFzcyhf
d2luZG93UmVmLCAmd2luZG93Q2xhc3MpOwotICAgIHJldHVybiAob3NTdGF0dXMgPT0gbm9FcnIg
JiYgd2luZG93Q2xhc3MgPT0ga0RvY3VtZW50V2luZG93Q2xhc3MpOwotICAgIAotfQotCi0KLS8v
IFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgZGVtaW5pYXR1cml6ZTosIGRlc3BpdGUgdGhlIGZhY3Qg
dGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBs
b29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9uIHdpbmRvd3MgYXMgaXMuCi0KLQotLy8g
VGhlcmUncyBubyBvdmVycmlkZSBvZiBkaXNhYmxlQ3Vyc29yUmVjdHMsIGRlc3BpdGUgdGhlIGZh
Y3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBD
YXJib24gd2luZG93cyB3b24ndCBoYXZlIHN1YnZpZXdzLCBhbmQgdGhlcmVmb3JlIHdvbid0IGhh
dmUgY3Vyc29yIHJlY3RzLgotCi0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBlbmFibGVD
dXJzb3JSZWN0cywgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2Vs
ZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNlIENhcmJvbiB3aW5kb3dzIHdvbid0IGhhdmUgc3Vidmll
d3MsIGFuZCB0aGVyZWZvcmUgd29uJ3QgaGF2ZSBjdXJzb3IgcmVjdHMuCi0KLQotLy8gRG8gdGhl
IHJpZ2h0IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tICh2b2lkKWVuY29kZVdpdGhDb2Rl
cjooTlNDb2RlciAqKWNvZGVyCi17Ci0KLSAgICAvLyBBY3R1YWxseSwgdGhpcyB3aWxsIHByb2Jh
Ymx5IG5ldmVyIGJlIGltcGxlbWVudGVkLiAgTS5QLiBOb3RpY2UgLSA4LzIvMDAKLSAgICBOU0xv
ZyhAIi1bTlNDYXJib25XaW5kb3cgZW5jb2RlV2l0aENvZGVyOl0gaXMgbm90IGltcGxlbWVudGVk
LiIpOwotCi19Ci0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBmcmFtZSwgZGVzcGl0ZSB0
aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgcmV0dXJucyBfZnJhbWUsIGJlY2F1c2UgX2ZyYW1lIGlz
IG9uZSBvZiB0aGUgaW5zdGFuY2UgdmFyaWFibGVzIHdob3NlIHZhbHVlIHdlJ3JlIGtlZXBpbmcg
c3luY2hyb25pemVkIHdpdGggdGhlIENhcmJvbiB3aW5kb3cuCi0KLQotLy8gRG8gdGhlIHJpZ2h0
IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tIChpZClpbml0V2l0aENvZGVyOihOU0NvZGVy
ICopY29kZXIKLXsKLQotICAgIC8vIEFjdHVhbGx5LCB0aGlzIHdpbGwgcHJvYmFibHkgbmV2ZXIg
YmUgaW1wbGVtZW50ZWQuICBNLlAuIE5vdGljZSAtIDgvMi8wMAotICAgIE5TTG9nKEAiLVtOU0Nh
cmJvbldpbmRvdyBpbml0V2l0aENvZGVyOl0gaXMgbm90IGltcGxlbWVudGVkLiIpOwotICAgIFtz
ZWxmIHJlbGVhc2VdOwotICAgIHJldHVybiBuaWw7Ci0KLX0KLQotCi0vLyBUaGVyZSdzIG5vIG92
ZXJyaWRlIG9mIGxldmVsLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyByZXR1cm5z
IF9sZXZlbCwgYmVjYXVzZSBfbGV2ZWwgaXMgb25lIG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMg
d2hvc2UgdmFsdWUgd2UncmUga2VlcGluZyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgQ2FyYm9uIHdp
bmRvdy4KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIG1pbmlhdHVyaXplOiwgZGVzcGl0
ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJdLCBi
ZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBp
cy4KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIHJlc2l6ZVRvU2NyZWVuV2l0aEV2ZW50
OiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3Mgb3BlcmF0ZXMgb24gX3dpbmRvd051
bS4KLS8vIEl0IGxvb2tzIGxpa2UgaXQncyBvbmx5IGNhbGxlZCB3aGVuIGFuIF9OU0ZvcmNlUmVz
aXplRXZlbnRUeXBlIGV2ZW50IGlzIHBhc3NlZCBpbnRvIC1bTlNXaW5kb3cgc2VuZEV2ZW50Ol0s
IGFuZCBJIGNhbid0IGZpbmQgYW55IGluc3RhbmNlcyBvZiB0aGF0IGhhcHBlbmluZy4KLQotLy8g
VGhlcmUncyBubyBvdmVycmlkZSBvZiBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czosIGRlc3Bp
dGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwg
YmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9uIHdpbmRvd3MgYXMg
aXMuCi0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBzZXRCYWNraW5nVHlwZTosIGRlc3Bp
dGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwg
YmVjYXVzZSBpdCdzIGFwcGFyZW50bHkgbm90IGV4cGVjdGVkIHRvIGRvIGFueXRoaW5nIGFueXdh
eSwganVkZ2luZyBmcm9tIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIFBTc2V0d2luZG93
dHlwZSgpLgotCi0KLS8vIERvIHdoYXQgTlNXaW5kb3cgd291bGQgZG8sIGJ1dCBmb3IgYSBDYXJi
b24gd2luZG93LgotLSAodm9pZClzZXRDb250ZW50VmlldzooTlNWaWV3ICopYVZpZXcKLXsKLQot
ICAgIE5TUmVjdCBjb250ZW50RnJhbWVSZWN0OwotICAgIE9TU3RhdHVzIG9zU3RhdHVzOwotICAg
IFJlY3Qgd2luZG93Q29udGVudEJvdW5kc1JlY3Q7Ci0KLSAgICAvLyBQcmVjb25kaXRpb24gY2hl
Y2suCi0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBhc3NlcnQo
X2JvcmRlclZpZXcpOwotICAgIGFzc2VydChbX2JvcmRlclZpZXcgaXNLaW5kT2ZDbGFzczpbQ2Fy
Ym9uV2luZG93RnJhbWUgY2xhc3NdXSk7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECi0gICAgYXNzZXJ0KF93aW5kb3dSZWYpOwotCi0gICAgLy8gUGFyYW1ldGVyIGNoZWNr
LgotICAgIGFzc2VydChhVmlldyk7Ci0gICAgYXNzZXJ0KFthVmlldyBpc0tpbmRPZkNsYXNzOltD
YXJib25XaW5kb3dDb250ZW50VmlldyBjbGFzc11dKTsKLQotICAgIC8vIEZpbmQgb3V0IHRoZSB3
aW5kb3cncyBDYXJib24gd2luZG93IHN0cnVjdHVyZSByZWdpb24gKGNvbnRlbnQpIGJvdW5kcy4K
LSAgICBvc1N0YXR1cyA9IEdldFdpbmRvd0JvdW5kcyhfd2luZG93UmVmLCBrV2luZG93Q29udGVu
dFJnbiwgJndpbmRvd0NvbnRlbnRCb3VuZHNSZWN0KTsKLSAgICBpZiAob3NTdGF0dXMhPW5vRXJy
KSBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIGNvbnRlbnQgYm91bmRzIGNvdWxkbid0IGJlIGdv
dHRlbi4iKTsKLSAgICBjb250ZW50RnJhbWVSZWN0Lm9yaWdpbiA9IE5TWmVyb1BvaW50OwotICAg
IGNvbnRlbnRGcmFtZVJlY3Quc2l6ZS53aWR0aCA9IHdpbmRvd0NvbnRlbnRCb3VuZHNSZWN0LnJp
Z2h0IC0gd2luZG93Q29udGVudEJvdW5kc1JlY3QubGVmdDsKLSAgICBjb250ZW50RnJhbWVSZWN0
LnNpemUuaGVpZ2h0ID0gd2luZG93Q29udGVudEJvdW5kc1JlY3QuYm90dG9tIC0gd2luZG93Q29u
dGVudEJvdW5kc1JlY3QudG9wOwotCi0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
QkVHSU4KLSAgICAvLyBJZiB0aGUgY29udGVudCB2aWV3IGlzIHN0aWxsIGluIHNvbWUgb3RoZXIg
dmlldyBoaWVyYXJjaHksIHByeSBpdCBmcmVlLgotICAgIFtfY29udGVudFZpZXcgcmVtb3ZlRnJv
bVN1cGVydmlld107Ci0gICAgYXNzZXJ0KCFbX2NvbnRlbnRWaWV3IHN1cGVydmlld10pOwotCi0g
ICAgLy8gUmVjb3JkIHRoZSBjb250ZW50IHZpZXcsIGFuZCBzaXplIGl0IHRvIHRoaXMgd2luZG93
J3MgY29udGVudCBmcmFtZS4KLSAgICBfY29udGVudFZpZXcgPSBhVmlldzsKLSAgICBbKE5TVmll
dyAqKV9jb250ZW50VmlldyBzZXRGcmFtZTpjb250ZW50RnJhbWVSZWN0XTsKLQotICAgIC8vIE1h
a2UgdGhlIGNvbnRlbnQgdmlldyBhIHN1YnZpZXcgb2YgdGhlIGJvcmRlciB2aWV3LgotICAgIFtf
Ym9yZGVyVmlldyBhZGRTdWJ2aWV3Ol9jb250ZW50Vmlld107Ci0KLSAgICAvLyBUZWxsIHRoZSBj
b250ZW50IHZpZXcgaXQncyBuZXcgcGxhY2UgaW4gdGhlIHJlc3BvbmRlciBjaGFpbi4KLSAgICBb
X2NvbnRlbnRWaWV3IHNldE5leHRSZXNwb25kZXI6c2VsZl07Ci0gICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBzZXRE
ZXB0aExpbWl0OiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2Vs
ZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBD
YXJib24gd2luZG93cyBhcyBpcy4KLQotCi0tIChCT09MKXdvcmtzV2hlbk1vZGFsCi17Ci0gICAg
V2luZG93Q2xhc3Mgd2luZG93Q2xhc3MgPSBbc2VsZiBfY2FyYm9uV2luZG93Q2xhc3NdOwotICAg
IHJldHVybiAod2luZG93Q2xhc3MgPT0ga0Zsb2F0aW5nV2luZG93Q2xhc3MgfHwgd2luZG93Q2xh
c3MgPT0ga1V0aWxpdHlXaW5kb3dDbGFzcyk7Ci19Ci0KLS0gKHZvaWQpX3NldE1vZGFsV2luZG93
TGV2ZWwKLXsKLSAgICByZXR1cm47Ci19Ci0KLS0gKGlkKV9jbGVhck1vZGFsV2luZG93TGV2ZWwK
LXsKLSAgICByZXR1cm4gbmlsOwotfQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIHNldExl
dmVsOiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3aW5k
b3dOdW1iZXJdLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24g
d2luZG93cyBhcyBpcy4KLS8vIEkgdGhvdWdodCBhdCBmaXJzdCB0aGF0IHRoZXJlIHNob3VsZCBi
ZSBhIG1hcHBpbmcgYmV0d2VlbiBDb2NvYSBsZXZlbCBhbmQgQ2FyYm9uIHdpbmRvdyBjbGFzcywg
YnV0IGV4cGVyaW1lbnRzIGNvbnZpbmNlIG1lIHRoYXQgc3VjaCBpcyBub3QgdGhlIGNhc2UuICBN
LlAuIE5vdGljZSAtIDkvMTgvMDAKLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIHdpbmRv
d051bWJlciwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgcmV0dXJucyBfd2luZG93
TnVtLCBiZWNhdXNlIF93aW5kb3dOdW0gaXMgb25lIG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMg
d2hvc2UgdmFsdWUgd2UncmUga2VlcGluZyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgQ2FyYm9uIHdp
bmRvdy4KLQotCi0tIChVSW50MzIpY2FyYm9uSElDb21tYW5kSURGcm9tQWN0aW9uU2VsZWN0b3I6
KFNFTClpbkFjdGlvblNlbGVjdG9yCi17Ci0KLSAgICAvLyBJbml0aWFsaXplIHdpdGggdGhlIGRl
ZmF1bHQgcmV0dXJuIHZhbHVlLgotICAgIFVJbnQzMiBoaUNvbW1hbmRJRCA9IDA7Ci0KLSAgICAv
LyBQcmV0dHkgc2ltcGxlLCBpZiB0ZWRpb3VzLgotICAgIGlmIChpbkFjdGlvblNlbGVjdG9yID09
IEBzZWxlY3RvcihjbGVhcjopKQotICAgICAgICBoaUNvbW1hbmRJRCA9IGtISUNvbW1hbmRDbGVh
cjsKLSAgICBlbHNlIGlmIChpbkFjdGlvblNlbGVjdG9yID09IEBzZWxlY3Rvcihjb3B5OikpCi0g
ICAgICAgIGhpQ29tbWFuZElEID0ga0hJQ29tbWFuZENvcHk7Ci0gICAgZWxzZSBpZiAoaW5BY3Rp
b25TZWxlY3RvciAgPT0gQHNlbGVjdG9yKGN1dDopKQotICAgICAgICBoaUNvbW1hbmRJRCA9IGtI
SUNvbW1hbmRDdXQ7Ci0gICAgZWxzZSBpZiAoaW5BY3Rpb25TZWxlY3RvciA9PSBAc2VsZWN0b3Io
cGFzdGU6KSkKLSAgICAgICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kUGFzdGU7Ci0gICAgZWxz
ZSBpZiAoaW5BY3Rpb25TZWxlY3RvciA9PSBAc2VsZWN0b3IocmVkbzopKQotICAgICAgICBoaUNv
bW1hbmRJRCA9IGtISUNvbW1hbmRSZWRvOwotICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3Ig
PT0gQHNlbGVjdG9yKHNlbGVjdEFsbDopKQotICAgICAgICBoaUNvbW1hbmRJRCA9IGtISUNvbW1h
bmRTZWxlY3RBbGw7Ci0gICAgZWxzZSBpZiAoaW5BY3Rpb25TZWxlY3RvciA9PSBAc2VsZWN0b3Io
dW5kbzopKQotICAgICAgICBoaUNvbW1hbmRJRCA9IGtISUNvbW1hbmRVbmRvOwotCi0gICAgLy8g
RG9uZS4KLSAgICByZXR1cm4gaGlDb21tYW5kSUQ7Ci0KLX0KLQotCi0tICh2b2lkKXNlbmRDYXJi
b25Qcm9jZXNzSElDb21tYW5kRXZlbnQ6KFVJbnQzMilpbkhJQ29tbWFuZElECi17Ci0KLSAgICBF
dmVudFRhcmdldFJlZiBldmVudFRhcmdldFJlZjsKLSAgICBISUNvbW1hbmQgaGlDb21tYW5kOwot
ICAgIE9TU3RhdHVzIG9zU3RhdHVzOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBmb3Igc2FmZSBlcnJv
ciBoYW5kbGluZy4KLSAgICBFdmVudFJlZiBldmVudFJlZiA9IG51bGxwdHI7Ci0KLSAgICAvLyBD
cmVhdGUgYSBQcm9jZXNzIENvbW1hbmQgZXZlbnQuICBEb24ndCBtZW50aW9uIGFueXRoaW5nIGFi
b3V0IHRoZSBtZW51IGl0ZW0sIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgQ2FyYm9uIEV2ZW50
IGhhbmRsZXIgZmlkZGxpbmcgd2l0aCBpdC4KLSAgICBoaUNvbW1hbmQuYXR0cmlidXRlcyA9IDA7
Ci0gICAgaGlDb21tYW5kLmNvbW1hbmRJRCA9IGluSElDb21tYW5kSUQ7Ci0gICAgaGlDb21tYW5k
Lm1lbnUubWVudVJlZiA9IDA7Ci0gICAgaGlDb21tYW5kLm1lbnUubWVudUl0ZW1JbmRleCA9IDA7
Ci0gICAgb3NTdGF0dXMgPSBDcmVhdGVFdmVudChudWxscHRyLCBrRXZlbnRDbGFzc0NvbW1hbmQs
IGtFdmVudENvbW1hbmRQcm9jZXNzLCBHZXRDdXJyZW50RXZlbnRUaW1lKCksIGtFdmVudEF0dHJp
YnV0ZU5vbmUsICZldmVudFJlZik7Ci0gICAgaWYgKG9zU3RhdHVzIT1ub0VycikgewotICAgICAg
ICBOU0xvZyhAIkNyZWF0ZUV2ZW50KCkgcmV0dXJuZWQgJWkuIiwgKGludClvc1N0YXR1cyk7Ci0g
ICAgICAgIGdvdG8gQ2xlYW5VcDsgIAotICAgIH0KLSAgICBvc1N0YXR1cyA9IFNldEV2ZW50UGFy
YW1ldGVyKGV2ZW50UmVmLCBrRXZlbnRQYXJhbURpcmVjdE9iamVjdCwgdHlwZUhJQ29tbWFuZCwg
c2l6ZW9mKEhJQ29tbWFuZCksICZoaUNvbW1hbmQpOwotICAgIGlmIChvc1N0YXR1cyE9bm9FcnIp
IHsKLSAgICAgICAgTlNMb2coQCJTZXRFdmVudFBhcmFtZXRlcigpIHJldHVybmVkICVpLiIsIChp
bnQpb3NTdGF0dXMpOwotICAgICAgICBnb3RvIENsZWFuVXA7Ci0gICAgfQotCi0gICAgLy8gU2Vu
ZCBhIENhcmJvbiBldmVudCB0byB3aGF0ZXZlciBoYXMgdGhlIENhcmJvbiB1c2VyIGZvY3VzLgot
ICAgIGV2ZW50VGFyZ2V0UmVmID0gR2V0VXNlckZvY3VzRXZlbnRUYXJnZXQoKTsKLSAgICBvc1N0
YXR1cyA9IFNlbmRFdmVudFRvRXZlbnRUYXJnZXQoZXZlbnRSZWYsIGV2ZW50VGFyZ2V0UmVmKTsK
LSAgICBpZiAob3NTdGF0dXMhPW5vRXJyKSB7Ci0gICAgICAgIE5TTG9nKEAiU2VuZEV2ZW50VG9F
dmVudFRhcmdldCgpIHJldHVybmVkICVpLiIsIChpbnQpb3NTdGF0dXMpOwotICAgICAgICBnb3Rv
IENsZWFuVXA7Ci0gICAgfQotCi1DbGVhblVwOgotCi0gICAgLy8gQ2xlYW4gdXAuCi0gICAgaWYg
KGV2ZW50UmVmKQotICAgICAgICBSZWxlYXNlRXZlbnQoZXZlbnRSZWYpOwotfQotCi0KLS0gKEJv
b2xlYW4pc2VuZENhcmJvblVwZGF0ZUhJQ29tbWFuZFN0YXR1c0V2ZW50OihVSW50MzIpaW5ISUNv
bW1hbmRJRCB3aXRoTWVudVJlZjooTWVudVJlZilpbk1lbnVSZWYgYW5kTWVudUl0ZW1JbmRleDoo
VUludDE2KWluTWVudUl0ZW1JbmRleAotewotCi0gICAgRXZlbnRUYXJnZXRSZWYgZXZlbnRUYXJn
ZXRSZWY7Ci0gICAgSElDb21tYW5kIGhpQ29tbWFuZDsKLSAgICBPU1N0YXR1cyBvc1N0YXR1czsK
LQotICAgIC8vIEluaXRpYWxpemUgZm9yIHNhZmUgZXJyb3IgaGFuZGxpbmcgYW5kIGZsYWcgcmV0
dXJuaW5nLgotICAgIEJvb2xlYW4gZXZlbnRXYXNIYW5kbGVkID0gRkFMU0U7Ci0gICAgRXZlbnRS
ZWYgZXZlbnRSZWYgPSBudWxscHRyOwotCi0gICAgLy8gQ3JlYXRlIGEgUHJvY2VzcyBDb21tYW5k
IGV2ZW50LiAgRG9uJ3QgbWVudGlvbiBhbnl0aGluZyBhYm91dCB0aGUgbWVudSBpdGVtLCBiZWNh
dXNlIHdlIGRvbid0IHdhbnQgdGhlIENhcmJvbiBFdmVudCBoYW5kbGVyIGZpZGRsaW5nIHdpdGgg
aXQuCi0gICAgaGlDb21tYW5kLmF0dHJpYnV0ZXMgPSBrSElDb21tYW5kRnJvbU1lbnU7Ci0gICAg
aGlDb21tYW5kLmNvbW1hbmRJRCA9IGluSElDb21tYW5kSUQ7Ci0gICAgaGlDb21tYW5kLm1lbnUu
bWVudVJlZiA9IGluTWVudVJlZjsKLSAgICBoaUNvbW1hbmQubWVudS5tZW51SXRlbUluZGV4ID0g
aW5NZW51SXRlbUluZGV4OwotICAgIG9zU3RhdHVzID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwga0V2
ZW50Q2xhc3NDb21tYW5kLCBrRXZlbnRDb21tYW5kVXBkYXRlU3RhdHVzLCBHZXRDdXJyZW50RXZl
bnRUaW1lKCksIGtFdmVudEF0dHJpYnV0ZU5vbmUsICZldmVudFJlZik7Ci0gICAgaWYgKG9zU3Rh
dHVzIT1ub0VycikgewotICAgICAgICBOU0xvZyhAIkNyZWF0ZUV2ZW50KCkgcmV0dXJuZWQgJWku
IiwgKGludClvc1N0YXR1cyk7Ci0gICAgICAgIGdvdG8gQ2xlYW5VcDsKLSAgICB9Ci0gICAgb3NT
dGF0dXMgPSBTZXRFdmVudFBhcmFtZXRlcihldmVudFJlZiwga0V2ZW50UGFyYW1EaXJlY3RPYmpl
Y3QsIHR5cGVISUNvbW1hbmQsIHNpemVvZihISUNvbW1hbmQpLCAmaGlDb21tYW5kKTsKLSAgICBp
ZiAob3NTdGF0dXMhPW5vRXJyKSB7Ci0gICAgICAgIE5TTG9nKEAiU2V0RXZlbnRQYXJhbWV0ZXIo
KSByZXR1cm5lZCAlaS4iLCAoaW50KW9zU3RhdHVzKTsKLSAgICAgICAgZ290byBDbGVhblVwOwot
ICAgIH0KLQotICAgIC8vIFNlbmQgYSBDYXJib24gZXZlbnQgdG8gd2hhdGV2ZXIgaGFzIHRoZSBD
YXJib24gdXNlciBmb2N1cy4KLSAgICBldmVudFRhcmdldFJlZiA9IEdldFVzZXJGb2N1c0V2ZW50
VGFyZ2V0KCk7Ci0gICAgb3NTdGF0dXMgPSBTZW5kRXZlbnRUb0V2ZW50VGFyZ2V0KGV2ZW50UmVm
LCBldmVudFRhcmdldFJlZik7Ci0gICAgaWYgKG9zU3RhdHVzID09IG5vRXJyKSB7Ci0gICAgICAg
IGV2ZW50V2FzSGFuZGxlZCA9IFRSVUU7Ci0gICAgfSBlbHNlIGlmIChvc1N0YXR1cyE9ZXZlbnRO
b3RIYW5kbGVkRXJyKSB7Ci0gICAgICAgIE5TTG9nKEAiU2VuZEV2ZW50VG9FdmVudFRhcmdldCgp
IHJldHVybmVkICVpLiIsIChpbnQpb3NTdGF0dXMpOwotICAgICAgICBnb3RvIENsZWFuVXA7Ci0g
ICAgfQotCi1DbGVhblVwOgotCi0gICAgLy8gQ2xlYW4gdXAuCi0gICAgaWYgKGV2ZW50UmVmKQot
ICAgICAgICBSZWxlYXNlRXZlbnQoZXZlbnRSZWYpOwotCi0gICAgLy8gRG9uZS4KLSAgICByZXR1
cm4gZXZlbnRXYXNIYW5kbGVkOwotfQotCi0tICh2b2lkKV9oYW5kbGVSb290Qm91bmRzQ2hhbmdl
ZAotewotICAgIEhJVmlld1JlZiByb290ID0gSElWaWV3R2V0Um9vdChfd2luZG93UmVmKTsgCi0g
ICAgSElSZWN0IGZyYW1lOwotCi0gICAgSElWaWV3R2V0RnJhbWUocm9vdCwgJmZyYW1lKTsKLSAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIFtfYm9yZGVyVmlldyBz
ZXRGcmFtZVNpemU6KihOU1NpemUqKSZmcmFtZS5zaXplXTsKLSAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotLSAodm9pZClfaGFuZGxlQ29udGVudEJvdW5kc0NoYW5n
ZWQKLXsKLSAgICBISVZpZXdSZWYgcm9vdCwgY29udGVudFZpZXc7IAotICAgIEhJUmVjdCByb290
Qm91bmRzLCBjb250ZW50RnJhbWU7Ci0gICAgTlNSZWN0IG9sZENvbnRlbnRGcmFtZVJlY3Q7Ci0K
LSAgICByb290ID0gSElWaWV3R2V0Um9vdChfd2luZG93UmVmKTsKLSAgICBISVZpZXdGaW5kQnlJ
RChyb290LCBrSElWaWV3V2luZG93Q29udGVudElELCAmY29udGVudFZpZXcpOwotICAgIEhJVmll
d0dldEZyYW1lKGNvbnRlbnRWaWV3LCAmY29udGVudEZyYW1lKTsKLSAgICBISVZpZXdHZXRCb3Vu
ZHMocm9vdCwgJnJvb3RCb3VuZHMpOwotCi0gICAgLy8gU2V0IHRoZSBjb250ZW50IHZpZXcncyBm
cmFtZSByZWN0IGZyb20gdGhlIENhcmJvbiB3aW5kb3cncyBjb250ZW50IHJlZ2lvbiBib3VuZHMu
Ci0gICAgY29udGVudEZyYW1lLm9yaWdpbi55ID0gcm9vdEJvdW5kcy5zaXplLmhlaWdodCAtIENH
UmVjdEdldE1heFkoY29udGVudEZyYW1lKTsKLQotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0JFR0lOCi0gICAgb2xkQ29udGVudEZyYW1lUmVjdCA9IFsoTlNWaWV3ICopX2NvbnRl
bnRWaWV3IGZyYW1lXTsKLSAgICBpZiAoIU5TRXF1YWxSZWN0cygqKE5TUmVjdCopJmNvbnRlbnRG
cmFtZSwgb2xkQ29udGVudEZyYW1lUmVjdCkpIHsKLSAgICAgICAgWyhOU1ZpZXcgKilfY29udGVu
dFZpZXcgc2V0RnJhbWU6KihOU1JlY3QqKSZjb250ZW50RnJhbWVdOwotICAgIH0KLSAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLX0KLQotLSAoT1NTdGF0dXMpX2hhbmRsZUNh
cmJvbkV2ZW50OihFdmVudFJlZilpbkV2ZW50IGNhbGxSZWY6KEV2ZW50SGFuZGxlckNhbGxSZWYp
aW5DYWxsUmVmCi17Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOwot
Ci0gICAgc3dpdGNoIChHZXRFdmVudENsYXNzKGluRXZlbnQpKSB7Ci0gICAgY2FzZSBrRXZlbnRD
bGFzc0NvbnRyb2w6Ci0gICAgICAgIENvbnRyb2xSZWYgY29udHJvbDsKLQotICAgICAgICBBU1NF
UlQoR2V0RXZlbnRLaW5kKGluRXZlbnQpID09IGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkKTsK
LQotICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbURpcmVjdE9i
amVjdCwgdHlwZUNvbnRyb2xSZWYsIG51bGxwdHIsIHNpemVvZihDb250cm9sUmVmKSwgbnVsbHB0
ciwgJmNvbnRyb2wpOwotCi0gICAgICAgIGlmIChjb250cm9sID09IEhJVmlld0dldFJvb3QoX3dp
bmRvd1JlZikpCi0gICAgICAgICAgICBbc2VsZiBfaGFuZGxlUm9vdEJvdW5kc0NoYW5nZWRdOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBbc2VsZiBfaGFuZGxlQ29udGVudEJvdW5kc0NoYW5n
ZWRdOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Uga0V2ZW50Q2xhc3NXaW5kb3c6Ci0gICAg
ICAgIHN3aXRjaCAoR2V0RXZlbnRLaW5kKGluRXZlbnQpKSB7Ci0gICAgICAgIGNhc2Uga0V2ZW50
V2luZG93U2hvd246Ci0gICAgICAgICAgICBbc2VsZiBfc2V0VmlzaWJsZTpZRVNdOwotICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrRXZlbnRXaW5kb3dIaWRkZW46Ci0gICAgICAg
ICAgICBbc2VsZiBfc2V0VmlzaWJsZTpOT107Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIGtFdmVudFdpbmRvd0FjdGl2YXRlZDoKLSAgICAgICAgICAgIFtzZWxmIG1ha2VLZXlX
aW5kb3ddOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrRXZlbnRXaW5kb3dE
ZWFjdGl2YXRlZDoKLSAgICAgICAgICAgIFtzZWxmIHJlc2lnbktleVdpbmRvd107Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGtFdmVudFdpbmRvd0JvdW5kc0NoYW5nZWQ6Ci0g
ICAgICAgICAgICBbc2VsZiByZWNvbmNpbGVUb0NhcmJvbldpbmRvd0JvdW5kc107Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi0vLyBIYW5kbGUgdmFyaW91cyBldmVudHMgdGhhdCBDYXJib24gaXMg
c2VuZGluZyB0byBvdXIgd2luZG93Lgotc3RhdGljIE9TU3RhdHVzIE5TQ2FyYm9uV2luZG93SGFu
ZGxlRXZlbnQoRXZlbnRIYW5kbGVyQ2FsbFJlZiBpbkV2ZW50SGFuZGxlckNhbGxSZWYsIEV2ZW50
UmVmIGluRXZlbnRSZWYsIHZvaWQgKmluVXNlckRhdGEpCi17Ci0gICAgLy8gZGVmYXVsdCBhY3Rp
b24gaXMgdG8gc2VuZCBldmVudCB0byBuZXh0IGhhbmRsZXIuICBXZSBtb2RpZnkgb3NTdGF0dXMg
YXMgbmVjZXNzYXJ5IHdoZXJlIHdlIGRvbid0IHdhbnQgdGhpcyBiZWhhdmlvcgotICAgIE9TU3Rh
dHVzIG9zU3RhdHVzID0gZXZlbnROb3RIYW5kbGVkRXJyOwotCi0gICAgLy8gV2UgZG8gZGlmZmVy
ZW50IHRoaW5ncyBmb3IgZGlmZmVyZW50IGV2ZW50IHR5cGVzLgotICAgIENhcmJvbldpbmRvd0Fk
YXB0ZXIgKmNhcmJvbldpbmRvdyA9IChDYXJib25XaW5kb3dBZGFwdGVyICopaW5Vc2VyRGF0YTsK
LQotICAgIG9zU3RhdHVzID0gW2NhcmJvbldpbmRvdyBfaGFuZGxlQ2FyYm9uRXZlbnQ6IGluRXZl
bnRSZWYgY2FsbFJlZjogaW5FdmVudEhhbmRsZXJDYWxsUmVmXTsKLQotICAgIC8vIERvbmUuICBJ
ZiB3ZSB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQsIHdlIHJldHVybiBldmVudE5vdEhhbmRs
ZWRFcnIgdG8gc2VuZCBpdCB0byB0aGUgbmV4dCBoYW5kbGVyCi0gICAgcmV0dXJuIG9zU3RhdHVz
OwotfQotCi0vLyBbMzM2NDExN10gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzIG5vdCBm
YWxsIHRocm91Z2ggdG8gdGhlIEFwcEtpdCBpbXBsZW1lbnRhdGlvbiEgYmFkIHRoaW5ncyBoYXBw
ZW4uCi0tICh2b2lkKV9yZWFsbHlEb09yZGVyV2luZG93OihOU1dpbmRvd09yZGVyaW5nTW9kZSlw
bGFjZSByZWxhdGl2ZVRvOihpbnQpb3RoZXJXaW4gZmluZEtleTooQk9PTClkb0tleUNhbGMgZm9y
Q291bnRlcjooQk9PTClpc0FDb3VudGVyIGZvcmNlOihCT09MKWRvRm9yY2UgaXNNb2RhbDooQk9P
TClpc01vZGFsCi17Ci19Ci0KLS0gKE5TUmVjdCkgX2dyb3dCb3hSZWN0Ci17Ci0gICAgV2luZG93
QXR0cmlidXRlcyBhdHRyczsKLSAgICBOU1JlY3QgcmV0UmVjdCA9IE5TWmVyb1JlY3Q7Ci0KLSAg
ICBHZXRXaW5kb3dBdHRyaWJ1dGVzKF93aW5kb3dSZWYsICZhdHRycyk7Ci0KLSAgICBpZiAoYXR0
cnMgJiBrV2luZG93UmVzaXphYmxlQXR0cmlidXRlKSB7Ci0gICAgICAgIEhJUmVjdCBib3VuZHMs
IHJlY3Q7Ci0gICAgICAgIEhJVmlld1JlZiB2aWV3OwotCi0gICAgICAgIEhJVmlld0dldEJvdW5k
cyhISVZpZXdHZXRSb290KF93aW5kb3dSZWYpLCAmYm91bmRzKTsKLSAgICAgICAgSElWaWV3Rmlu
ZEJ5SUQoSElWaWV3R2V0Um9vdChfd2luZG93UmVmKSwga0hJVmlld1dpbmRvd0dyb3dCb3hJRCwg
JnZpZXcpOwotICAgICAgICBISVZpZXdHZXRGcmFtZSh2aWV3LCAmcmVjdCk7Ci0KLSAgICAgICAg
cmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIENHUmVjdEdldE1heFkocmVjdCkg
LSAxOwotICAgICAgICByZWN0Lm9yaWdpbi54Kys7Ci0KLSAgICAgICAgcmV0UmVjdCA9ICooTlNS
ZWN0KikmcmVjdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0UmVjdDsKLX0KLQotQGVuZCAvLyBp
bXBsZW1lbnRhdGlvbiBDYXJib25XaW5kb3dBZGFwdGVyCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0NvbnRlbnRWaWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93Q29udGVudFZpZXcu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MWJhMGViMDViN2IyMWMwOTFlN2M3
ZTU4NTA4NTRlMGRjOGQzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93Q29udGVu
dFZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPEFwcEtpdC9OU1ZpZXcu
aD4KLQotQGludGVyZmFjZSBDYXJib25XaW5kb3dDb250ZW50VmlldyA6IE5TVmlldyB7IH0KLQot
QGVuZCAvLyBpbnRlcmZhY2UgQ2FyYm9uV2luZG93Q29udGVudFZpZXcKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dDb250ZW50Vmlldy5tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0NvbnRlbnRWaWV3Lm0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZGExODNlZGRjMGVhOGQ2YjQwMGEwNDAz
YWRmMjM2ZDRiYjQ4MjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0NvbnRlbnRW
aWV3Lm0KKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9fTFA2NF9fCi0KLSNpbXBv
cnQgIkNhcmJvbldpbmRvd0NvbnRlbnRWaWV3LmgiCi0KLUBpbXBsZW1lbnRhdGlvbiBDYXJib25X
aW5kb3dDb250ZW50VmlldwotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0ZyYW1lLmggYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93RnJhbWUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWJiZGJlYmE5NzVmNGRmOTRlODU2MDg1MjNkOTRiNTU3YTFlODg5YS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93RnJhbWUuaAorKysgL2Rldi9udWxsCkBAIC0x
LDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLQotQGludGVyZmFjZSBDYXJib25XaW5k
b3dGcmFtZSA6IE5TVmlldwotCi0vLyBJbnN0YW5jZSB2YXJpYWJsZXMuCi17Ci0KLSAgICBAcHJp
dmF0ZQotICAgIAotICAgIC8vIFNvbWV0aGluZyB3ZSBrZWVwIGFyb3VuZCBqdXN0IHRvIHJldHVy
biB3aGVuIGl0J3MgYXNrZWQgZm9yLgotICAgIHVuc2lnbmVkIGludCBfc3R5bGVNYXNrOwotCi19
Ci0KLUBlbmQgLy8gaW50ZXJmYWNlIE5TQ2FyYm9uV2luZG93RnJhbWUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dGcmFtZS5tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0ZyYW1lLm0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGE3Y2JmMzM4NDg4NWQ1MGIyZTRkYTI5ZDkyN2ZkNWQxMmRlODJi
MWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0ZyYW1lLm0KKysrIC9kZXYvbnVs
bApAQCAtMSwyODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfX0xQNjRfXwotCi0jaW1wb3J0ICJDYXJib25XaW5kb3dG
cmFtZS5oIgotI2ltcG9ydCAiQ2FyYm9uV2luZG93QWRhcHRlci5oIgotI2ltcG9ydCAiQ2FyYm9u
V2luZG93Q29udGVudFZpZXcuaCIKLSNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgot
I2ltcG9ydCA8Rm91bmRhdGlvbi9OU1N0cmluZy5oPgotI2ltcG9ydCA8SElUb29sYm94L01hY1dp
bmRvd3MuaD4KLQotI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgotCi1AaW50ZXJmYWNlIE5T
VmlldyhTZWNyZXQpCi0tICh2b2lkKV9zZXRXaW5kb3c6KE5TV2luZG93ICopd2luZG93OwotQGVu
ZAotCi1AY2xhc3MgTlNCdXR0b247Ci0vKgotCi1AaW50ZXJmYWNlIE5TVGhlbWVGcmFtZShOU0hp
amFja2VkQ2xhc3NNZXRob2RzKQotCi0rIChmbG9hdClfdGl0bGViYXJIZWlnaHQ6KHVuc2lnbmVk
IGludClzdHlsZTsKLQotQGVuZAotKi8KLQotQGltcGxlbWVudGF0aW9uIENhcmJvbldpbmRvd0Zy
YW1lCi0KLQotLSAoTlNSZWN0KXRpdGxlYmFyUmVjdAotewotICAgIE5TUmVjdCAgICAgIHRpdGxl
YmFyUmVjdDsKLSAgICBOU1JlY3QgICAgICBib3VuZHNSZWN0OwotCi0gICAgYm91bmRzUmVjdCA9
IFtzZWxmIGJvdW5kc107Ci0KLSAgICBDYXJib25XaW5kb3dBZGFwdGVyICpjYXJib25XaW5kb3c7
Ci0gICAgY2FyYm9uV2luZG93ID0gKENhcmJvbldpbmRvd0FkYXB0ZXIgKilbc2VsZiB3aW5kb3dd
OwotICAgIFdpbmRvd1JlZiB3aW5kb3dSZWYgPSBbY2FyYm9uV2luZG93IHdpbmRvd1JlZl07Ci0g
ICAgUmVjdCBnbG9iYWxCb3VuZHM7Ci0gICAgR2V0V2luZG93Qm91bmRzICh3aW5kb3dSZWYsIGtX
aW5kb3dUaXRsZUJhclJnbiwgJmdsb2JhbEJvdW5kcyk7Ci0gICAgCi0gICAgdGl0bGViYXJSZWN0
Lm9yaWdpbi54ICAgID0gYm91bmRzUmVjdC5vcmlnaW4ueDsKLSAgICB0aXRsZWJhclJlY3Quc2l6
ZS53aWR0aCAgPSBib3VuZHNSZWN0LnNpemUud2lkdGg7Ci0gICAgdGl0bGViYXJSZWN0LnNpemUu
aGVpZ2h0ID0gZ2xvYmFsQm91bmRzLmJvdHRvbSAtIGdsb2JhbEJvdW5kcy50b3A7Ci0gICAgdGl0
bGViYXJSZWN0Lm9yaWdpbi55ICAgID0gTlNNYXhZKGJvdW5kc1JlY3QpIC0gdGl0bGViYXJSZWN0
LnNpemUuaGVpZ2h0OwotCi0gICAgcmV0dXJuIHRpdGxlYmFyUmVjdDsKLX0KLQotLy8gR2l2ZW4g
YSBjb250ZW50IHJlY3RhbmdsZSBhbmQgc3R5bGUgbWFzaywgcmV0dXJuIGEgY29ycmVzcG9uZGlu
ZyBmcmFtZSByZWN0YW5nbGUuCi0rIChOU1JlY3QpZnJhbWVSZWN0Rm9yQ29udGVudFJlY3Q6KE5T
UmVjdCljb250ZW50UmVjdCBzdHlsZU1hc2s6KE5TVUludGVnZXIpc3R5bGUgewotCi0gICAgLy8g
V2UgZG9uJ3QgYm90aGVyIGZpZ3VyaW5nIG91dCBhIGdvb2QgdmFsdWUsIGJlY2F1c2UgY29udGVu
dCByZWN0cyB3ZXJlbid0IHNvIG1lYW5pbmdmdWwgZm9yIE5TQ2FyYm9uV2luZG93cyBpbiB0aGUg
cGFzdCwgYnV0IHRoaXMgbWlnaHQgbm90IGJlIGEgZ29vZCBhc3N1bXB0aW9uIGFueW1vcmUuICBN
LlAuIFdhcm5pbmcgLSAxMi81LzAwCi0gICAgcmV0dXJuIGNvbnRlbnRSZWN0OwotCi19Ci0KLSsg
KE5TUmVjdCljb250ZW50UmVjdEZvckZyYW1lUmVjdDooTlNSZWN0KWZyYW1lUmVjdCBzdHlsZU1h
c2s6KE5TVUludGVnZXIpc3R5bGUgewotCi0gICAgLy8gV2UgZG9uJ3QgYm90aGVyIGZpZ3VyaW5n
IG91dCBhIGdvb2QgdmFsdWUsIGJlY2F1c2UgY29udGVudCByZWN0cyB3ZXJlbid0IHNvIG1lYW5p
bmdmdWwgZm9yIE5TQ2FyYm9uV2luZG93cyBpbiB0aGUgcGFzdCwgYnV0IHRoaXMgbWlnaHQgbm90
IGJlIGEgZ29vZCBhc3N1bXB0aW9uIGFueW1vcmUuICBLVyAtIGNvcGllZCBmcm9tICtmcmFtZVJl
Y3RGb3JDb250ZW50UmVjdDpzdHlsZU1hc2sKLSAgICByZXR1cm4gZnJhbWVSZWN0OwotCi19Ci0K
LSsgKE5TU2l6ZSltaW5GcmFtZVNpemVGb3JNaW5Db250ZW50U2l6ZTooTlNTaXplKWNTaXplIHN0
eWxlTWFzazooTlNVSW50ZWdlcilzdHlsZSB7Ci0gICAgLy8gU2VlIGNvbW1lbnRzIGFib3ZlLiAg
V2UgZG9uJ3QgbWFrZSBhbnkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3
ZWVuIGNvbnRlbnQgcmVjdHMgYW5kIGZyYW1lIHJlY3RzCi0gICAgcmV0dXJuIGNTaXplOwotfQot
Ci0tIChOU1JlY3QpZnJhbWVSZWN0Rm9yQ29udGVudFJlY3Q6KE5TUmVjdCljUmVjdCBzdHlsZU1h
c2s6KE5TVUludGVnZXIpc3R5bGUgewotICAgIHJldHVybiBbW3NlbGYgY2xhc3NdIGZyYW1lUmVj
dEZvckNvbnRlbnRSZWN0OiBjUmVjdCBzdHlsZU1hc2s6c3R5bGVdOwotfQotLSAoTlNSZWN0KWNv
bnRlbnRSZWN0Rm9yRnJhbWVSZWN0OihOU1JlY3QpZlJlY3Qgc3R5bGVNYXNrOihOU1VJbnRlZ2Vy
KXN0eWxlIHsKLSAgICByZXR1cm4gW1tzZWxmIGNsYXNzXSBjb250ZW50UmVjdEZvckZyYW1lUmVj
dDogZlJlY3Qgc3R5bGVNYXNrOnN0eWxlXTsKLX0KLS0gKE5TU2l6ZSltaW5GcmFtZVNpemVGb3JN
aW5Db250ZW50U2l6ZTooTlNTaXplKWNTaXplIHN0eWxlTWFzazooTlNVSW50ZWdlcilzdHlsZSB7
Ci0gICAgcmV0dXJuIFtbc2VsZiBjbGFzc10gbWluRnJhbWVTaXplRm9yTWluQ29udGVudFNpemU6
Y1NpemUgc3R5bGVNYXNrOiBzdHlsZV07Ci19Ci0KLS8vIEluaXRpYWxpemUuCi0tIChpZClpbml0
V2l0aEZyYW1lOihOU1JlY3QpaW5GcmFtZVJlY3Qgc3R5bGVNYXNrOih1bnNpZ25lZCBpbnQpaW5T
dHlsZU1hc2sgb3duZXI6KE5TV2luZG93ICopaW5Pd25pbmdXaW5kb3cgewotCi0gICAgLy8gUGFy
YW1ldGVyIGNoZWNrLgotICAgIGlmICghW2luT3duaW5nV2luZG93IGlzS2luZE9mQ2xhc3M6W0Nh
cmJvbldpbmRvd0FkYXB0ZXIgY2xhc3NdXSkgTlNMb2coQCJDYXJib25XaW5kb3dGcmFtZXMgY2Fu
IG9ubHkgYmUgb3duZWQgYnkgQ2FyYm9uV2luZG93QWRhcHRlcnMuIik7Ci0KLSAgICAvLyBEbyB0
aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcuCi0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aEZyYW1l
OmluRnJhbWVSZWN0XTsKLSAgICBpZiAoIXNlbGYpIHJldHVybiBuaWw7Ci0KLSAgICAvLyBSZWNv
cmQgd2hhdCB3ZSdsbCBuZWVkIGxhdGVyLgotICAgIF9zdHlsZU1hc2sgPSBpblN0eWxlTWFzazsK
LQotICAgIC8vIERvIHdoYXQgTlNGcmFtZVZpZXcncyBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZSBk
b2VzLgotICAgIFtzZWxmIF9zZXRXaW5kb3c6aW5Pd25pbmdXaW5kb3ddOwotICAgIFtzZWxmIHNl
dE5leHRSZXNwb25kZXI6aW5Pd25pbmdXaW5kb3ddOwotCi0gICAgLy8gRG9uZS4KLSAgICByZXR1
cm4gc2VsZjsKLQotfQotCi0KLS8vIFNpbmsgYSBtZXRob2QgaW52b2NhdGlvbi4KLS0gKHZvaWQp
X3NldEZyYW1lTmVlZHNEaXNwbGF5OihCT09MKW5lZWRzRGlzcGxheSB7Ci0gICAgCi19Ci0KLQot
Ly8gU2luayBhIG1ldGhvZCBpbnZvY2F0aW9uLgotLSAodm9pZClfc2V0U2hlZXQ6KEJPT0wpc2hl
ZXRGbGFnIHsKLQotfQotCi0KLS8vIFNpbmsgYSBtZXRob2QgaW52b2NhdGlvbi4KLS0gKHZvaWQp
X3VwZGF0ZUJ1dHRvblN0YXRlIHsKLQotfQotCi0jaWYgMAotLy8gU2luayBhIG1ldGhvZCBpbnZv
Y2F0aW9uLgotLSAodm9pZClfd2luZG93Q2hhbmdlZEtleVN0YXRlIHsKLX0KLSNlbmRpZgotCi0v
LyBUb29sYmFyIG1ldGhvZHMgdGhhdCBOU1dpbmRvdyBleHBlY3RzIHRvIGJlIHRoZXJlLgotLSAo
Qk9PTClfY2FuSGF2ZVRvb2xiYXIgeyByZXR1cm4gTk87IH0KLS0gKEJPT0wpX3Rvb2xiYXJJc0lu
VHJhbnNpdGlvbiB7IHJldHVybiBOTzsgfQotLSAoQk9PTClfdG9vbGJhcklzU2hvd24geyByZXR1
cm4gTk87IH0KLS0gKEJPT0wpX3Rvb2xiYXJJc0hpZGRlbiB7IHJldHVybiBOTzsgfQotLSAodm9p
ZClfc2hvd1Rvb2xiYXJXaXRoQW5pbWF0aW9uOihCT09MKWFuaW1hdGUge30KLS0gKHZvaWQpX2hp
ZGVUb29sYmFyV2l0aEFuaW1hdGlvbjooQk9PTClhbmltYXRlIHt9Ci0tIChmbG9hdClfZGlzdGFu
Y2VGcm9tVG9vbGJhckJhc2VUb1RpdGxlYmFyIHsgcmV0dXJuIDA7IH0KLQotCi0vLyBSZWZ1c2Ug
dG8gYWRtaXQgdGhlcmUncyBhIGNsb3NlIGJ1dHRvbiBvbiB0aGUgd2luZG93LgotLSAoTlNCdXR0
b24gKiljbG9zZUJ1dHRvbiB7Ci0KLSAgICAvLyBTaW1wbGUuCi0gICAgcmV0dXJuIG5pbDsKLX0K
LQotCi0vLyBSZXR1cm4gd2hhdCdzIGFza2VkIGZvci4KLS0gKHVuc2lnbmVkIGludClzdHlsZU1h
c2sgewotCi0gICAgLy8gU2ltcGxlLgotICAgIHJldHVybiBfc3R5bGVNYXNrOwotCi19Ci0KLQot
Ly8gUmV0dXJuIHdoYXQncyBhc2tlZCBmb3IuCi0tIChOU1JlY3QpZHJhZ1JlY3RGb3JGcmFtZVJl
Y3Q6KE5TUmVjdClmcmFtZVJlY3QgewotCi0gICAgLy8gRG8gd2hhdCBOU1RoZW1lRnJhbWUgd291
bGQgZG8uCi0gICAgLy8gSWYgd2UganVzdCByZXR1cm4gTlNaZXJvUmVjdCBoZXJlLCBfTlhNYWtl
V2luZG93VmlzaWJsZSgpIGdldHMgYWxsIGJlZnVkZGxlZCBpbiB0aGUgc2hlZXQtc2hvd2luZyBj
YXNlLCBhIHdpbmRvdy1tb3ZpbmcgbG9vcCBpcyBlbnRlcmVkLCBhbmQgdGhlIHNoZWV0IGdldHMg
bW92ZWQgcmlnaHQgb2ZmIG9mIHRoZSBzY3JlZW4uICBNLlAuIFdhcm5pbmcgLSAzLzIzLzAxCi0g
ICAgTlNSZWN0IGRyYWdSZWN0OwotICAgIGRyYWdSZWN0LnNpemUuaGVpZ2h0ID0gMjc7Ly9bTlNU
aGVtZUZyYW1lIF90aXRsZWJhckhlaWdodDpbc2VsZiBzdHlsZU1hc2tdXTsKLSAgICBkcmFnUmVj
dC5vcmlnaW4ueSA9IE5TTWF4WShmcmFtZVJlY3QpIC0gZHJhZ1JlY3Quc2l6ZS5oZWlnaHQ7Ci0g
ICAgZHJhZ1JlY3Quc2l6ZS53aWR0aCA9IGZyYW1lUmVjdC5zaXplLndpZHRoOwotICAgIGRyYWdS
ZWN0Lm9yaWdpbi54ID0gZnJhbWVSZWN0Lm9yaWdpbi54OwotICAgIHJldHVybiBkcmFnUmVjdDsK
LSAgICAKLX0KLQotCi0vLyBSZXR1cm4gd2hhdCdzIGFza2VkIGZvci4KLS0gKEJPT0wpaXNPcGFx
dWUgewotCi0gICAgLy8gUmV0dXJuIGEgdmFsdWUgdGhhdCB3aWxsIG1ha2UgLVtOU1dpbmRvdyBk
aXNwbGF5SWZOZWVkZWRdIG9uIG91ciBDYXJib24gd2luZG93IGFjdHVhbGx5IHdvcmsuCi0gICAg
cmV0dXJuIFlFUzsKLQotfQotCi0KLS8vIFJlZnVzZSB0byBhZG1pdCB0aGVyZSdzIGEgbWluaW1p
emUgYnV0dG9uIG9uIHRoZSB3aW5kb3cuCi0tIChOU0J1dHRvbiAqKW1pbmltaXplQnV0dG9uIHsK
LQotICAgIC8vIFNpbXBsZS4KLSAgICByZXR1cm4gbmlsOwotCi19Ci0KLQotLy8gRG8gdGhlIHJp
Z2h0IHRoaW5nIGZvciBhIENhcmJvbiB3aW5kb3cuCi0tICh2b2lkKXNldFRpdGxlOihOU1N0cmlu
ZyAqKXRpdGxlIHsKLQotICAgIENhcmJvbldpbmRvd0FkYXB0ZXIgKmNhcmJvbldpbmRvdzsKLSAg
ICBPU1N0YXR1cyBvc1N0YXR1czsKLSAgICBXaW5kb3dSZWYgd2luZG93UmVmOwotCi0gICAgLy8g
U2V0IHRoZSBDYXJib24gd2luZG93J3MgdGl0bGUuCi0gICAgY2FyYm9uV2luZG93ID0gKENhcmJv
bldpbmRvd0FkYXB0ZXIgKilbc2VsZiB3aW5kb3ddOwotICAgIHdpbmRvd1JlZiA9IFtjYXJib25X
aW5kb3cgd2luZG93UmVmXTsKLSAgICBvc1N0YXR1cyA9IFNldFdpbmRvd1RpdGxlV2l0aENGU3Ry
aW5nKHdpbmRvd1JlZiwgKENGU3RyaW5nUmVmKXRpdGxlKTsKLSAgICBpZiAob3NTdGF0dXMhPW5v
RXJyKSBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIHRpdGxlIGNvdWxkbid0IGJlIHNldC4iKTsK
LQotfQotCi0KLS8vIFJldHVybiB3aGF0J3MgYXNrZWQgZm9yLgotLSAoTlNTdHJpbmcgKil0aXRs
ZSB7Ci0KLSAgICBDRlN0cmluZ1JlZiB3aW5kb3dUaXRsZTsKLSAgICBDYXJib25XaW5kb3dBZGFw
dGVyICpjYXJib25XaW5kb3c7Ci0gICAgTlNTdHJpbmcgKndpbmRvd1RpdGxlQXNOU1N0cmluZzsK
LSAgICBPU1N0YXR1cyBvc1N0YXR1czsKLSAgICBXaW5kb3dSZWYgd2luZG93UmVmOwotCi0gICAg
Ly8gUmV0dXJuIHRoZSBDYXJib24gd2luZG93J3MgdGl0bGUuCi0gICAgY2FyYm9uV2luZG93ID0g
KENhcmJvbldpbmRvd0FkYXB0ZXIgKilbc2VsZiB3aW5kb3ddOwotICAgIHdpbmRvd1JlZiA9IFtj
YXJib25XaW5kb3cgd2luZG93UmVmXTsKLSAgICBvc1N0YXR1cyA9IENvcHlXaW5kb3dUaXRsZUFz
Q0ZTdHJpbmcod2luZG93UmVmLCAmd2luZG93VGl0bGUpOwotICAgIGlmIChvc1N0YXR1cz09bm9F
cnIpIHsKLSAgICAgICAgSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJjYXN0LXF1YWwiKQotICAgICAg
ICB3aW5kb3dUaXRsZUFzTlNTdHJpbmcgPSAoTlNTdHJpbmcgKil3aW5kb3dUaXRsZTsKLSAgICAg
ICAgSUdOT1JFX1dBUk5JTkdTX0VORAotICAgIH0gZWxzZSB7Ci0gICAgICAgIE5TTG9nKEAiQSBD
YXJib24gd2luZG93J3MgdGl0bGUgY291bGRuJ3QgYmUgZ290dGVuLiIpOwotICAgICAgICB3aW5k
b3dUaXRsZUFzTlNTdHJpbmcgPSBAIiI7Ci0gICAgfQotICAgIHJldHVybiBbd2luZG93VGl0bGVB
c05TU3RyaW5nIGF1dG9yZWxlYXNlXTsKLQotfQotCi0KLS8vIFJldHVybiB3aGF0J3MgYXNrZWQg
Zm9yLgotLSAoZmxvYXQpX3NoZWV0SGVpZ2h0QWRqdXN0bWVudCB7Ci0KLSAgICAvLyBEbyB3aGF0
IE5TVGhlbWVGcmFtZSB3b3VsZCBkby4KLSAgICByZXR1cm4gMjI7Ly9bTlNUaGVtZUZyYW1lIF90
aXRsZWJhckhlaWdodDooW3NlbGYgc3R5bGVNYXNrXSAmIH5OU0RvY01vZGFsV2luZG93TWFzayld
OwotICAgIAotfQotCi0vLyBSZXR1cm4gd2hhdCdzIGFza2VkIGZvci4KLS0gKGZsb2F0KV9tYXhU
aXRsZWJhclRpdGxlUmVjdCB7Ci0KLSAgICAvLyBEbyB3aGF0IE5TVGhlbWVGcmFtZSB3b3VsZCBk
by4KLSAgICByZXR1cm4gMjI7Ly9bTlNUaGVtZUZyYW1lIF90aXRsZWJhckhlaWdodDooW3NlbGYg
c3R5bGVNYXNrXSAmIH5OU0RvY01vZGFsV2luZG93TWFzayldOwotICAgIAotfQotCi0tICh2b2lk
KV9jbGVhckRyYWdNYXJnaW5zIHsKLX0KLQotLSAodm9pZClfcmVzZXREcmFnTWFyZ2lucyB7Ci19
Ci0KLS0gKE5TQ29sb3IgKiljb250ZW50RmlsbAotewotICAgIHJldHVybiBbTlNDb2xvciBjbGVh
ckNvbG9yXTsKLX0KLQotQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBOU0NhcmJvbldpbmRvd0ZyYW1l
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJ
Vmlld0FkYXB0ZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9ISVZpZXdBZGFw
dGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNjc3ZmM2MDMxYTA3ZjliNzVh
NjFkNzA2Zjc1NzNiYmMyNmEyNDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJVmlld0FkYXB0ZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPFdlYktpdExlZ2FjeS9XZWJLaXQu
aD4KLSNpbmNsdWRlIDxISVRvb2xib3gvSElWaWV3Lmg+Ci0KLUBpbnRlcmZhY2UgSElWaWV3QWRh
cHRlciA6IE5TT2JqZWN0Ci0KLSsgKHZvaWQpYmluZEhJVmlld1RvTlNWaWV3OihISVZpZXdSZWYp
aGlWaWV3IG5zVmlldzooTlNWaWV3Kiluc1ZpZXc7Ci0rICh2b2lkKXVuYmluZE5TVmlldzooTlNW
aWV3Kiluc1ZpZXc7Ci0rIChISVZpZXdSZWYpZ2V0SElWaWV3Rm9yTlNWaWV3OihOU1ZpZXcqKWlu
VmlldzsKLQotQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9u
L0hJVmlld0FkYXB0ZXIubSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9ISVZpZXdB
ZGFwdGVyLm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxN2NiYzY3Nzk2NmYyMzJk
Y2IwZjIxNGU1YjA2Njc3MjNmMTJhNmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJVmlld0FkYXB0
ZXIubQorKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gICAgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfX0xQNjRfXwot
Ci0jaW1wb3J0ICJISVZpZXdBZGFwdGVyLmgiCi0KLSNpbXBvcnQgIldlYk5TT2JqZWN0RXh0cmFz
LmgiCi0jaW1wb3J0IDxwYWwvc3BpL21hYy9RdWlja0RyYXdTUEkuaD4KLSNpbXBvcnQgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0KLXN0YXRpYyB2b2lkIFNldFZpZXdOZWVkc0Rpc3BsYXkoSElWaWV3UmVm
IGluVmlldywgUmduSGFuZGxlIGluUmVnaW9uLCBCb29sZWFuIGluTmVlZHNEaXNwbGF5KTsKLQot
I2RlZmluZSBXQVRDSF9JTlZBTElEQVRJT04gMAotCi1AaW50ZXJmYWNlIE5TVmlldyhTaGhoaERv
bnRUZWxsKQotLSAoTlNSZWN0KV9kaXJ0eVJlY3Q7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBI
SVZpZXdBZGFwdGVyCi0KLXN0YXRpYyBDRk11dGFibGVEaWN0aW9uYXJ5UmVmIHNWaWV3TWFwOwot
Ci0KLXR5cGVkZWYgdm9pZCAoKlNldE5lZWRzRGlzcGxheU1ldGhvZCkoaWQsIFNFTCwgQk9PTCk7
Ci10eXBlZGVmIHZvaWQgKCpTZXROZWVkc0Rpc3BsYXlJblJlY3RNZXRob2QpKGlkLCBTRUwsIE5T
UmVjdCk7Ci10eXBlZGVmIE5TVmlldyAqKCpOZXh0VmFsaWRLZXlWaWV3TWV0aG9kKShpZCwgU0VM
KTsKLQotc3RhdGljIFNldE5lZWRzRGlzcGxheU1ldGhvZCBvbGROU1ZpZXdTZXROZWVkc0Rpc3Bs
YXlJTVA7Ci1zdGF0aWMgU2V0TmVlZHNEaXNwbGF5SW5SZWN0TWV0aG9kIG9sZE5TVmlld1NldE5l
ZWRzRGlzcGxheUluUmVjdElNUDsKLXN0YXRpYyBOZXh0VmFsaWRLZXlWaWV3TWV0aG9kIG9sZE5T
Vmlld05leHRWYWxpZEtleVZpZXdJTVA7Ci0KLXN0YXRpYyB2b2lkIF93ZWJraXRfTlNWaWV3X3Nl
dE5lZWRzRGlzcGxheShpZCBzZWxmLCBTRUwgX2NtZCwgQk9PTCBmbGFnKTsKLXN0YXRpYyB2b2lk
IF93ZWJraXRfTlNWaWV3X3NldE5lZWRzRGlzcGxheUluUmVjdChpZCBzZWxmLCBTRUwgX2NtZCwg
TlNSZWN0IGludmFsaWRSZWN0KTsKLXN0YXRpYyBOU1ZpZXcgKl93ZWJraXRfTlNWaWV3X25leHRW
YWxpZEtleVZpZXcoaWQgc2VsZiwgU0VMIF9jbWQpOwotCi0rICh2b2lkKWJpbmRISVZpZXdUb05T
VmlldzooSElWaWV3UmVmKWhpVmlldyBuc1ZpZXc6KE5TVmlldyopbnNWaWV3Ci17Ci0gICAgaWYg
KHNWaWV3TWFwID09IE5VTEwpIHsKLSAgICAgICAgc1ZpZXdNYXAgPSBDRkRpY3Rpb25hcnlDcmVh
dGVNdXRhYmxlKE5VTEwsIDAsIE5VTEwsIE5VTEwpOwotCi0gICAgICAgIC8vIE92ZXJyaWRlIC1b
TlNWaWV3IHNldE5lZWRzRGlzcGxheTpdCi0gICAgICAgIE1ldGhvZCBzZXROZWVkc0Rpc3BsYXlN
ZXRob2QgPSBjbGFzc19nZXRJbnN0YW5jZU1ldGhvZChvYmpjX2dldENsYXNzKCJOU1ZpZXciKSwg
QHNlbGVjdG9yKHNldE5lZWRzRGlzcGxheTopKTsKLSAgICAgICAgQVNTRVJUKHNldE5lZWRzRGlz
cGxheU1ldGhvZCk7Ci0gICAgICAgIEFTU0VSVCghb2xkTlNWaWV3U2V0TmVlZHNEaXNwbGF5SU1Q
KTsKLSAgICAgICAgb2xkTlNWaWV3U2V0TmVlZHNEaXNwbGF5SU1QID0gKFNldE5lZWRzRGlzcGxh
eU1ldGhvZCltZXRob2Rfc2V0SW1wbGVtZW50YXRpb24oc2V0TmVlZHNEaXNwbGF5TWV0aG9kLCAo
SU1QKV93ZWJraXRfTlNWaWV3X3NldE5lZWRzRGlzcGxheSk7Ci0KLSAgICAgICAgLy8gT3ZlcnJp
ZGUgLVtOU1ZpZXcgc2V0TmVlZHNEaXNwbGF5SW5SZWN0Ol0KLSAgICAgICAgTWV0aG9kIHNldE5l
ZWRzRGlzcGxheUluUmVjdE1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKG9iamNfZ2V0
Q2xhc3MoIk5TVmlldyIpLCBAc2VsZWN0b3Ioc2V0TmVlZHNEaXNwbGF5SW5SZWN0OikpOwotICAg
ICAgICBBU1NFUlQoc2V0TmVlZHNEaXNwbGF5SW5SZWN0TWV0aG9kKTsKLSAgICAgICAgQVNTRVJU
KCFvbGROU1ZpZXdTZXROZWVkc0Rpc3BsYXlJblJlY3RJTVApOwotICAgICAgICBvbGROU1ZpZXdT
ZXROZWVkc0Rpc3BsYXlJblJlY3RJTVAgPSAoU2V0TmVlZHNEaXNwbGF5SW5SZWN0TWV0aG9kKW1l
dGhvZF9zZXRJbXBsZW1lbnRhdGlvbihzZXROZWVkc0Rpc3BsYXlJblJlY3RNZXRob2QsIChJTVAp
X3dlYmtpdF9OU1ZpZXdfc2V0TmVlZHNEaXNwbGF5SW5SZWN0KTsKLQotICAgICAgICAvLyBPdmVy
cmlkZSAtW05TVmlldyBuZXh0VmFsaWRLZXlWaWV3XQotICAgICAgICBNZXRob2QgbmV4dFZhbGlk
S2V5Vmlld01ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKG9iamNfZ2V0Q2xhc3MoIk5T
VmlldyIpLCBAc2VsZWN0b3IobmV4dFZhbGlkS2V5VmlldykpOwotICAgICAgICBBU1NFUlQobmV4
dFZhbGlkS2V5Vmlld01ldGhvZCk7Ci0gICAgICAgIEFTU0VSVCghb2xkTlNWaWV3TmV4dFZhbGlk
S2V5Vmlld0lNUCk7Ci0gICAgICAgIG9sZE5TVmlld05leHRWYWxpZEtleVZpZXdJTVAgPSAoTmV4
dFZhbGlkS2V5Vmlld01ldGhvZCltZXRob2Rfc2V0SW1wbGVtZW50YXRpb24obmV4dFZhbGlkS2V5
Vmlld01ldGhvZCwgKElNUClfd2Via2l0X05TVmlld19uZXh0VmFsaWRLZXlWaWV3KTsKLSAgICB9
Ci0KLSAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShzVmlld01hcCwgbnNWaWV3LCBoaVZpZXcpOwot
fQotCi0rIChISVZpZXdSZWYpZ2V0SElWaWV3Rm9yTlNWaWV3OihOU1ZpZXcqKWluVmlldwotewot
ICAgIElHTk9SRV9XQVJOSU5HU19CRUdJTigiY2FzdC1xdWFsIikKLSAgICByZXR1cm4gc1ZpZXdN
YXAgPyAoSElWaWV3UmVmKUNGRGljdGlvbmFyeUdldFZhbHVlKHNWaWV3TWFwLCBpblZpZXcpIDog
TlVMTDsKLSAgICBJR05PUkVfV0FSTklOR1NfRU5ECi19Ci0KLSsgKHZvaWQpdW5iaW5kTlNWaWV3
OihOU1ZpZXcqKWluVmlldwotewotICAgIENGRGljdGlvbmFyeVJlbW92ZVZhbHVlKHNWaWV3TWFw
LCBpblZpZXcpOwotfQotCi1zdGF0aWMgdm9pZCBfd2Via2l0X05TVmlld19zZXROZWVkc0Rpc3Bs
YXkoaWQgc2VsZiwgU0VMIF9jbWQsIEJPT0wgZmxhZykKLXsKLSAgICBvbGROU1ZpZXdTZXROZWVk
c0Rpc3BsYXlJTVAoc2VsZiwgX2NtZCwgZmxhZyk7Ci0KLSAgICBpZiAoIWZsYWcpIHsKLSAgICAg
ICAgSElWaWV3UmVmIGhpVmlldyA9IE5VTEw7Ci0gICAgICAgIE5TUmVjdCB0YXJnZXRCb3VuZHMg
PSBbc2VsZiB2aXNpYmxlUmVjdF07Ci0gICAgICAgIE5TUmVjdCB2YWxpZFJlY3QgPSB0YXJnZXRC
b3VuZHM7Ci0gICAgICAgIE5TVmlldyAqdmlldyA9IHNlbGY7Ci0gICAgICAgIAotICAgICAgICB3
aGlsZSAodmlldykgewotICAgICAgICAgICAgdGFyZ2V0Qm91bmRzID0gW3ZpZXcgdmlzaWJsZVJl
Y3RdOwotICAgICAgICAgICAgaWYgKChoaVZpZXcgPSBbSElWaWV3QWRhcHRlciBnZXRISVZpZXdG
b3JOU1ZpZXc6dmlld10pICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB2YWxpZFJlY3QgPSBbdmlldyBjb252ZXJ0UmVjdDp2YWxpZFJlY3QgdG9WaWV3Olt2aWV3
IHN1cGVydmlld11dOwotICAgICAgICAgICAgdmlldyA9IFt2aWV3IHN1cGVydmlld107Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChoaVZpZXcpIHsgICAgICAgICAgICAKLSAgICAg
ICAgICAgIC8vIEZsaXAgcmVjdCBoZXJlIGFuZCBjb252ZXJ0IHRvIHJlZ2lvbgotICAgICAgICAg
ICAgSElSZWN0IHJlY3Q7Ci0gICAgICAgICAgICByZWN0Lm9yaWdpbi54ID0gdmFsaWRSZWN0Lm9y
aWdpbi54OwotICAgICAgICAgICAgcmVjdC5vcmlnaW4ueSA9IHRhcmdldEJvdW5kcy5zaXplLmhl
aWdodCAtIE5TTWF4WSh2YWxpZFJlY3QpOwotICAgICAgICAgICAgcmVjdC5zaXplLmhlaWdodCA9
IHZhbGlkUmVjdC5zaXplLmhlaWdodDsKLSAgICAgICAgICAgIHJlY3Quc2l6ZS53aWR0aCA9IHZh
bGlkUmVjdC5zaXplLndpZHRoOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3Igbm93
LCBjYWxsIHRoZSByZWdpb24tYmFzZWQgQVBJLgotICAgICAgICAgICAgUmduSGFuZGxlIHJnbiA9
IE5ld1JnbigpOwotICAgICAgICAgICAgaWYgKHJnbikgewotICAgICAgICAgICAgICAgIFJlY3Qg
cWRSZWN0OwotICAgICAgICAgICAgICAgIHFkUmVjdC50b3AgPSAoU0ludDE2KXJlY3Qub3JpZ2lu
Lnk7Ci0gICAgICAgICAgICAgICAgcWRSZWN0LmxlZnQgPSAoU0ludDE2KXJlY3Qub3JpZ2luLng7
Ci0gICAgICAgICAgICAgICAgcWRSZWN0LmJvdHRvbSA9IENHUmVjdEdldE1heFkocmVjdCk7Ci0g
ICAgICAgICAgICAgICAgcWRSZWN0LnJpZ2h0ID0gQ0dSZWN0R2V0TWF4WChyZWN0KTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBSZWN0UmduKHJnbiwgJnFkUmVjdCk7Ci0gICAg
ICAgICAgICAgICAgU2V0Vmlld05lZWRzRGlzcGxheShoaVZpZXcsIHJnbiwgZmFsc2UpOwotICAg
ICAgICAgICAgICAgIERpc3Bvc2VSZ24ocmduKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX3dlYmtpdF9OU1ZpZXdfc2V0TmVlZHNEaXNwbGF5SW5S
ZWN0KGlkIHNlbGYsIFNFTCBfY21kLCBOU1JlY3QgaW52YWxpZFJlY3QpCi17Ci0gICAgaW52YWxp
ZFJlY3QgPSBOU1VuaW9uUmVjdChpbnZhbGlkUmVjdCwgW3NlbGYgX2RpcnR5UmVjdF0pOwotICAg
IG9sZE5TVmlld1NldE5lZWRzRGlzcGxheUluUmVjdElNUChzZWxmLCBfY21kLCBpbnZhbGlkUmVj
dCk7Ci0gICAgCi0gICAgaWYgKCFOU0lzRW1wdHlSZWN0KGludmFsaWRSZWN0KSkgewotICAgICAg
ICBISVZpZXdSZWYgaGlWaWV3ID0gTlVMTDsKLSAgICAgICAgTlNSZWN0IHRhcmdldEJvdW5kcyA9
IFsoTlNWaWV3ICopc2VsZiBib3VuZHNdOwotICAgICAgICBOU1ZpZXcgKnZpZXcgPSBzZWxmOwot
ICAgICAgICAKLSAgICAgICAgd2hpbGUgKHZpZXcpIHsKLSAgICAgICAgICAgIHRhcmdldEJvdW5k
cyA9IFt2aWV3IGJvdW5kc107Ci0gICAgICAgICAgICBpZiAoKGhpVmlldyA9IFtISVZpZXdBZGFw
dGVyIGdldEhJVmlld0Zvck5TVmlldzp2aWV3XSkgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGludmFsaWRSZWN0ID0gW3ZpZXcgY29udmVydFJlY3Q6aW52YWxp
ZFJlY3QgdG9WaWV3Olt2aWV3IHN1cGVydmlld11dOwotICAgICAgICAgICAgdmlldyA9IFt2aWV3
IHN1cGVydmlld107Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChoaVZpZXcpIHsK
LSAgICAgICAgICAgIGlmIChOU1dpZHRoKGludmFsaWRSZWN0KSA+IDAgJiYgTlNIZWlnaHQoaW52
YWxpZFJlY3QpKSB7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEZsaXAgcmVj
dCBoZXJlIGFuZCBjb252ZXJ0IHRvIHJlZ2lvbgotICAgICAgICAgICAgICAgIEhJUmVjdCByZWN0
OwotICAgICAgICAgICAgICAgIHJlY3Qub3JpZ2luLnggPSBpbnZhbGlkUmVjdC5vcmlnaW4ueDsK
LSAgICAgICAgICAgICAgICByZWN0Lm9yaWdpbi55ID0gdGFyZ2V0Qm91bmRzLnNpemUuaGVpZ2h0
IC0gTlNNYXhZKGludmFsaWRSZWN0KTsKLSAgICAgICAgICAgICAgICByZWN0LnNpemUuaGVpZ2h0
ID0gaW52YWxpZFJlY3Quc2l6ZS5oZWlnaHQ7Ci0gICAgICAgICAgICAgICAgcmVjdC5zaXplLndp
ZHRoID0gaW52YWxpZFJlY3Quc2l6ZS53aWR0aDsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAvLyBGb3Igbm93LCBjYWxsIHRoZSByZWdpb24tYmFzZWQgQVBJLgotICAgICAgICAg
ICAgICAgIFJnbkhhbmRsZSByZ24gPSBOZXdSZ24oKTsKLSAgICAgICAgICAgICAgICBpZiAocmdu
KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJlY3QgcWRSZWN0OwotICAgICAgICAgICAgICAgICAg
ICBxZFJlY3QudG9wID0gKFNJbnQxNilyZWN0Lm9yaWdpbi55OwotICAgICAgICAgICAgICAgICAg
ICBxZFJlY3QubGVmdCA9IChTSW50MTYpcmVjdC5vcmlnaW4ueDsKLSAgICAgICAgICAgICAgICAg
ICAgcWRSZWN0LmJvdHRvbSA9IENHUmVjdEdldE1heFkocmVjdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHFkUmVjdC5yaWdodCA9IENHUmVjdEdldE1heFgocmVjdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICBSZWN0UmduKHJnbiwgJnFkUmVjdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIFNldFZpZXdOZWVkc0Rpc3BsYXkoaGlWaWV3LCByZ24sIHRydWUpOwotICAg
ICAgICAgICAgICAgICAgICBEaXNwb3NlUmduKHJnbik7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIFtbc2VsZiB3aW5kb3ddIHNl
dFZpZXdzTmVlZERpc3BsYXk6WUVTXTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBOU1ZpZXcgKl93ZWJr
aXRfTlNWaWV3X25leHRWYWxpZEtleVZpZXcoaWQgc2VsZiwgU0VMIF9jbWQpCi17Ci0gICAgaWYg
KFtISVZpZXdBZGFwdGVyIGdldEhJVmlld0Zvck5TVmlldzpzZWxmXSkKLSAgICAgICAgcmV0dXJu
IFtbc2VsZiB3aW5kb3ddIGNvbnRlbnRWaWV3XTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBv
bGROU1ZpZXdOZXh0VmFsaWRLZXlWaWV3SU1QKHNlbGYsIF9jbWQpOwotfQotCi1AZW5kCi0KLXN0
YXRpYyB2b2lkIFNldFZpZXdOZWVkc0Rpc3BsYXkoSElWaWV3UmVmIGluSElWaWV3LCBSZ25IYW5k
bGUgaW5SZWdpb24sIEJvb2xlYW4gaW5OZWVkc0Rpc3BsYXkpCi17Ci0gICAgV2luZG93QXR0cmli
dXRlcyBhdHRyczsKLSAgICAKLSAgICBHZXRXaW5kb3dBdHRyaWJ1dGVzKEdldENvbnRyb2xPd25l
cihpbkhJVmlldyksICZhdHRycyk7Ci0gICAgCi0gICAgaWYgKGF0dHJzICYga1dpbmRvd0NvbXBv
c2l0aW5nQXR0cmlidXRlKSB7Ci0jaWYgV0FUQ0hfSU5WQUxJREFUSU9OCi0gICAgICAgIFJlY3Qg
Ym91bmRzOwotICAgICAgICBHZXRSZWdpb25Cb3VuZHMoaW5SZWdpb24sICZib3VuZHMpOwotICAg
ICAgICBwcmludGYoIiVzOiByZWN0IG9uIGlucHV0ICVkICVkICVkICVkXG4iLCBpbk5lZWRzRGlz
cGxheSA/ICJJTlZBTElEQVRFIiA6ICJWQUxJREFURSIsCi0gICAgICAgICAgICAgICAgYm91bmRz
LnRvcCwgYm91bmRzLmxlZnQsIGJvdW5kcy5ib3R0b20sIGJvdW5kcy5yaWdodCk7Ci0jZW5kaWYK
LSAgICAgICAgSElWaWV3U2V0TmVlZHNEaXNwbGF5SW5SZWdpb24oaW5ISVZpZXcsIGluUmVnaW9u
LCBpbk5lZWRzRGlzcGxheSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVjdCBib3VuZHMsIGNu
dGxCb3VuZHM7Ci0gICAgICAgIEdyYWZQdHIgcG9ydCwgc2F2ZVBvcnQ7Ci0gICAgICAgIFJlY3Qg
cG9ydEJvdW5kczsKLSAgICAgICAgCi0jaWYgV0FUQ0hfSU5WQUxJREFUSU9OCi0gICAgICAgIHBy
aW50ZigiJXM6IHJlY3Qgb24gaW5wdXQgJWQgJWQgJWQgJWRcbiIsIGluTmVlZHNEaXNwbGF5ID8g
IklOVkFMSURBVEUiIDogIlZBTElEQVRFIiwKLSAgICAgICAgICAgICAgICBib3VuZHMudG9wLCBi
b3VuZHMubGVmdCwgYm91bmRzLmJvdHRvbSwgYm91bmRzLnJpZ2h0KTsKLSNlbmRpZgotICAgICAg
ICBHZXRDb250cm9sQm91bmRzKGluSElWaWV3LCAmY250bEJvdW5kcyk7Ci0gICAgICAgIAotI2lm
IFdBVENIX0lOVkFMSURBVElPTgotICAgICAgICBwcmludGYoIiVzOiBjb250cm9sIGJvdW5kcyBh
cmUgJWQgJWQgJWQgJWRcbiIsIGluTmVlZHNEaXNwbGF5ID8gIklOVkFMSURBVEUiIDogIlZBTElE
QVRFIiwKLSAgICAgICAgICAgICAgICBjbnRsQm91bmRzLnRvcCwgY250bEJvdW5kcy5sZWZ0LCBj
bnRsQm91bmRzLmJvdHRvbSwgY250bEJvdW5kcy5yaWdodCk7Ci0jZW5kaWYKLSAgICAgICAgCi0g
ICAgICAgIHBvcnQgPSBHZXRXaW5kb3dQb3J0KEdldENvbnRyb2xPd25lcihpbkhJVmlldykpOwot
ICAgICAgICAKLSAgICAgICAgR2V0UG9ydCgmc2F2ZVBvcnQpOwotICAgICAgICBTZXRQb3J0KHBv
cnQpOwotICAgICAgICBHZXRQb3J0Qm91bmRzKHBvcnQsICZwb3J0Qm91bmRzKTsKLSAgICAgICAg
U2V0T3JpZ2luKDAsIDApOwotICAgICAgICAKLSAgICAgICAgT2Zmc2V0UmduKGluUmVnaW9uLCBj
bnRsQm91bmRzLmxlZnQsIGNudGxCb3VuZHMudG9wKTsKLSAgICAgICAgCi0gICAgICAgIEdldFJl
Z2lvbkJvdW5kcyhpblJlZ2lvbiwgJmJvdW5kcyk7Ci0gICAgICAgIAotI2lmIFdBVENIX0lOVkFM
SURBVElPTgotICAgICAgICBwcmludGYoIiVzOiByZWN0IGluIHBvcnQgY29vcmRzICVkICVkICVk
ICVkXG4iLCBpbk5lZWRzRGlzcGxheSA/ICJJTlZBTElEQVRFIiA6ICJWQUxJREFURSIsCi0gICAg
ICAgICAgICAgICAgYm91bmRzLnRvcCwgYm91bmRzLmxlZnQsIGJvdW5kcy5ib3R0b20sIGJvdW5k
cy5yaWdodCk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIGlmIChpbk5lZWRzRGlzcGxheSkK
LSAgICAgICAgICAgIEludmFsV2luZG93UmduKEdldENvbnRyb2xPd25lcihpbkhJVmlldyksIGlu
UmVnaW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgVmFsaWRXaW5kb3dSZ24oR2V0Q29u
dHJvbE93bmVyKGluSElWaWV3KSwgaW5SZWdpb24pOwotICAgICAgICAKLSAgICAgICAgU2V0T3Jp
Z2luKHBvcnRCb3VuZHMubGVmdCwgcG9ydEJvdW5kcy50b3ApOwotICAgICAgICBTZXRQb3J0KHNh
dmVQb3J0KTsKLSAgICB9Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2FyYm9uL0hJV2ViVmlldy5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2Fy
Ym9uL0hJV2ViVmlldy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjE2Y2UzZGM2
NDc0YWM5N2E5ZDFiMmM1MTA5MzU4Yjg0NDRmYTkzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9ISVdl
YlZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9fSElXZWJW
aWV3X18KLSNkZWZpbmUgX19ISVdlYlZpZXdfXwotCi0jaWZuZGVmIF9fTFA2NF9fCi0KLSNpbmNs
dWRlIDxDYXJib24vQ2FyYm9uLmg+Ci0KLSNpbmNsdWRlIDxXZWJLaXRMZWdhY3kvV2ViS2l0QXZh
aWxhYmlsaXR5Lmg+Ci0KLSNpZiBQUkFHTUFfT05DRQotI3ByYWdtYSBvbmNlCi0jZW5kaWYKLQot
I2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0jaWZkZWYgX19PQkpD
X18KLUBjbGFzcyBXZWJWaWV3OwotI2VuZGlmCi0KLS8qCi0gKiAgSElXZWJWaWV3Q3JlYXRlKCkK
LSAqICAKLSAqICBTdW1tYXJ5OgotICogICAgQ3JlYXRlcyBhIG5ldyB3ZWIgdmlldy4KLSAqICAK
LSAqICBQYXJhbWV0ZXJzOgotICogICAgCi0gKiAgICBvdXRDb250cm9sOgotICogICAgICBUaGUg
bmV3IHdlYiB2aWV3LgotICogIAotICogIFJlc3VsdDoKLSAqICAgIEFuIG9wZXJhdGluZyBzeXN0
ZW0gc3RhdHVzIGNvZGUuCi0gKiAgCi0gKiAgQXZhaWxhYmlsaXR5OgotICogICAgTWFjIE9TIFg6
ICAgICAgICAgaW4gdmVyc2lvbiAxMC4yLjcgYW5kIGxhdGVyIFszMi1iaXQgb25seV0KLSAqICAg
IENhcmJvbkxpYjogICAgICAgIG5vdCBhdmFpbGFibGUKLSAqICAgIE5vbi1DYXJib24gQ0ZNOiAg
IG5vdCBhdmFpbGFibGUKLSAqLwotZXh0ZXJuIE9TU3RhdHVzIAotSElXZWJWaWV3Q3JlYXRlKEhJ
Vmlld1JlZiAqIG91dENvbnRyb2wpIENGX0RFUFJFQ0FURURfTUFDKDEwXzMsIDEwXzYpOwotCi0j
aWZkZWYgX19PQkpDX18KLQotLyoKLSAqICBISVdlYlZpZXdHZXRXZWJWaWV3KCkKLSAqICAKLSAq
ICBTdW1tYXJ5OgotICogICAgUmV0dXJucyB0aGUgV2ViS2l0IFdlYlZpZXcgZm9yIGEgZ2l2ZW4g
SElXZWJWaWV3LgotICogIAotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAKLSAqICAgIGluVmlldzoK
LSAqICAgICAgVGhlIHZpZXcgdG8gaW5zcGVjdC4KLSAqICAKLSAqICBSZXN1bHQ6Ci0gKiAgICBB
IHBvaW50ZXIgdG8gYSB3ZWIgdmlldyBvYmplY3QsIG9yIE5VTEwuCi0gKiAgCi0gKiAgQXZhaWxh
YmlsaXR5OgotICogICAgTWFjIE9TIFg6ICAgICAgICAgaW4gdmVyc2lvbiAxMC4yLjcgYW5kIGxh
dGVyIFszMi1iaXQgb25seV0KLSAqICAgIENhcmJvbkxpYjogICAgICAgIG5vdCBhdmFpbGFibGUK
LSAqICAgIE5vbi1DYXJib24gQ0ZNOiAgIG5vdCBhdmFpbGFibGUKLSAqLwotZXh0ZXJuIFdlYlZp
ZXcgKgotSElXZWJWaWV3R2V0V2ViVmlldyhISVZpZXdSZWYgaW5WaWV3KSBDRl9ERVBSRUNBVEVE
X01BQygxMF8zLCAxMF82KTsKLQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2Vu
ZGlmCi0KLSNlbmRpZgotI2VuZGlmIC8qIF9fSElXZWJWaWV3X18gKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9ISVdlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DYXJib24vSElXZWJWaWV3Lm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwN2FmZjljYjZlMTA2Y2U2Njg0ODE3NTM2ZDEyMWY3MWMxYmM5YmZkLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0NhcmJvbi9ISVdlYlZpZXcubW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNTQwICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIF9fTFA2NF9fCi0KLSNpbXBvcnQgIkhJV2ViVmlldy5oIgotCi0jaW1wb3J0ICJDYXJi
b25XaW5kb3dBZGFwdGVyLmgiCi0jaW1wb3J0ICJISVZpZXdBZGFwdGVyLmgiCi0jaW1wb3J0ICJX
ZWJIVE1MVmlld0ludGVybmFsLmgiCi0jaW1wb3J0ICJXZWJLaXQuaCIKLSNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TRXZlbnRTUEkuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL05TR3JhcGhpY3NTUEku
aD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL1F1aWNrRHJhd1NQSS5oPgotI2ltcG9ydCA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbXBvcnQgPHd0Zi9PYmpjUnVudGltZUV4dHJhcy5oPgotI2ltcG9ydCA8
d3RmL2NmL1R5cGVDYXN0c0NGLmg+Ci0KLVdURl9ERUNMQVJFX0NGX1RZUEVfVFJBSVQoQ0ZSdW5M
b29wKTsKLQotQGludGVyZmFjZSBOU1dpbmRvdyAoQXBwS2l0U2VjcmV0c0hJV2ViVmlld0tub3dz
KQotLSAodm9pZClfcmVtb3ZlV2luZG93UmVmOwotQGVuZAotCi1AaW50ZXJmYWNlIE5TVmlldyAo
QXBwS2l0U2VjcmV0c0hJV2ViVmlld0tub3dzKQotLSAodm9pZClfY2xlYXJEaXJ0eVJlY3RzRm9y
VHJlZTsKLUBlbmQKLQotZXh0ZXJuICJDIiB2b2lkIEhJV2ViVmlld1JlZ2lzdGVyQ2xhc3MoKTsK
LQotQGludGVyZmFjZSBNZW51SXRlbVByb3h5IDogTlNPYmplY3QgPE5TVmFsaWRhdGVkVXNlcklu
dGVyZmFjZUl0ZW0+Ci17Ci0gICAgaW50ICAgICBfdGFnOwotICAgIFNFTCBfYWN0aW9uOwotfQot
Ci0tIChpZClpbml0V2l0aEFjdGlvbjooU0VMKWFjdGlvbjsKLS0gKFNFTClhY3Rpb247Ci0tIChp
bnQpdGFnOwotCi1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBNZW51SXRlbVByb3h5Ci0KLS0gKGlk
KWluaXRXaXRoQWN0aW9uOihTRUwpYWN0aW9uCi17Ci0gICAgW3N1cGVyIGluaXRdOwotICAgIGlm
IChzZWxmID09IG5pbCkgcmV0dXJuIG5pbDsKLQotICAgIF9hY3Rpb24gPSBhY3Rpb247Ci0KLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotLSAoU0VMKWFjdGlvbgotewotICAgICAgIHJldHVybiBfYWN0
aW9uOwotfQotCi0tIChpbnQpdGFnIAotewotICAgIHJldHVybiAwOwotfQotCi1AZW5kCi0KLUBp
bnRlcmZhY2UgTlNXaW5kb3dHcmFwaGljc0NvbnRleHQgKEhJV2ViVmlldykKLS0gKHZvaWQpX3dl
Yl9zZXRHcmFwaGljc1BvcnQ6KENHQ29udGV4dFJlZiljb250ZXh0OwotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gTlNXaW5kb3dHcmFwaGljc0NvbnRleHQgKEhJV2ViVmlldykKLQotLSAodm9pZClf
d2ViX3NldEdyYXBoaWNzUG9ydDooQ0dDb250ZXh0UmVmKWNvbnRleHQKLXsKLSAgICBDR0NvbnRl
eHRSZXRhaW4oY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVsZWFzZShfY2dzQ29udGV4dCk7Ci0g
ICAgX2Nnc0NvbnRleHQgPSBjb250ZXh0OwotfQotCi1AZW5kCi0KLXN0cnVjdCBISVdlYlZpZXcK
LXsKLSAgICBISVZpZXdSZWYgZlZpZXdSZWY7Ci0KLSAgICBXZWJWaWV3KiBmV2ViVmlldzsKLSAg
ICBOU1ZpZXcqIGZGaXJzdFJlc3BvbmRlcjsKLSAgICBDYXJib25XaW5kb3dBZGFwdGVyKiBmS2l0
V2luZG93OwotICAgIGJvb2wgZklzQ29tcG9zaXRlZDsKLSAgICBDRlJ1bkxvb3BPYnNlcnZlclJl
ZiBmVXBkYXRlT2JzZXJ2ZXI7Ci19OwotdHlwZWRlZiBzdHJ1Y3QgSElXZWJWaWV3IEhJV2ViVmll
dzsKLQotc3RhdGljIGNvbnN0IE9TVHlwZSBOU0FwcEtpdFByb3BlcnR5Q3JlYXRvciA9ICdha2l0
JzsKLS8qCi1UaGVzZSBjb25zdGFudHMgYXJlIG5vdCB1c2VkLiBDb21tZW50ZWQgb3V0IHRvIG1h
a2UgdGhlIGNvbXBpbGVyIGhhcHB5Lgotc3RhdGljIGNvbnN0IE9TVHlwZSBOU1ZpZXdDYXJib25D
b250cm9sVmlld1Byb3BlcnR5VGFnID0gJ3ZpZXcnOwotc3RhdGljIGNvbnN0IE9TVHlwZSBOU1Zp
ZXdDYXJib25Db250cm9sQXV0b2Rpc3BsYXlQcm9wZXJ0eVRhZyA9ICdhdXRkJzsKLXN0YXRpYyBj
b25zdCBPU1R5cGUgTlNWaWV3Q2FyYm9uQ29udHJvbEZpcnN0UmVzcG9uZGVyVmlld1Byb3BlcnR5
VGFnID0gJ2ZydncnOwotKi8KLXN0YXRpYyBjb25zdCBPU1R5cGUgTlNDYXJib25XaW5kb3dQcm9w
ZXJ0eVRhZyA9ICd3aW4gJzsKLQotCi1zdGF0aWMgU0VMIF9OU1NlbGVjdG9yRm9ySElDb21tYW5k
KGNvbnN0IEhJQ29tbWFuZCopOwotCi1zdGF0aWMgY29uc3QgRXZlbnRUeXBlU3BlYyBrRXZlbnRz
W10gPSB7IAotICAgIHsga0V2ZW50Q2xhc3NISU9iamVjdCwga0V2ZW50SElPYmplY3RDb25zdHJ1
Y3QgfSwKLSAgICB7IGtFdmVudENsYXNzSElPYmplY3QsIGtFdmVudEhJT2JqZWN0RGVzdHJ1Y3Qg
fSwKLSAgICAKLSAgICB7IGtFdmVudENsYXNzTW91c2UsIGtFdmVudE1vdXNlVXAgfSwKLSAgICB7
IGtFdmVudENsYXNzTW91c2UsIGtFdmVudE1vdXNlTW92ZWQgfSwKLSAgICB7IGtFdmVudENsYXNz
TW91c2UsIGtFdmVudE1vdXNlRHJhZ2dlZCB9LAotICAgIHsga0V2ZW50Q2xhc3NNb3VzZSwga0V2
ZW50TW91c2VXaGVlbE1vdmVkIH0sCi0KLSAgICB7IGtFdmVudENsYXNzS2V5Ym9hcmQsIGtFdmVu
dFJhd0tleURvd24gfSwKLSAgICB7IGtFdmVudENsYXNzS2V5Ym9hcmQsIGtFdmVudFJhd0tleVJl
cGVhdCB9LAotCi0gICAgeyBrRXZlbnRDbGFzc0NvbW1hbmQsIGtFdmVudENvbW1hbmRQcm9jZXNz
IH0sCi0gICAgeyBrRXZlbnRDbGFzc0NvbW1hbmQsIGtFdmVudENvbW1hbmRVcGRhdGVTdGF0dXMg
fSwKLQotICAgIHsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sSW5pdGlhbGl6ZSB9
LAotICAgIHsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sRHJhdyB9LAotICAgIHsg
a0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sSGl0VGVzdCB9LAotICAgIHsga0V2ZW50
Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sR2V0UGFydFJlZ2lvbiB9LAotICAgIHsga0V2ZW50
Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sR2V0RGF0YSB9LAotICAgIHsga0V2ZW50Q2xhc3ND
b250cm9sLCBrRXZlbnRDb250cm9sQm91bmRzQ2hhbmdlZCB9LAotICAgIHsga0V2ZW50Q2xhc3ND
b250cm9sLCBrRXZlbnRDb250cm9sQWN0aXZhdGUgfSwKLSAgICB7IGtFdmVudENsYXNzQ29udHJv
bCwga0V2ZW50Q29udHJvbERlYWN0aXZhdGUgfSwKLSAgICB7IGtFdmVudENsYXNzQ29udHJvbCwg
a0V2ZW50Q29udHJvbE93bmluZ1dpbmRvd0NoYW5nZWQgfSwKLSAgICB7IGtFdmVudENsYXNzQ29u
dHJvbCwga0V2ZW50Q29udHJvbENsaWNrIH0sCi0gICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtF
dmVudENvbnRyb2xDb250ZXh0dWFsTWVudUNsaWNrIH0sCi0gICAgeyBrRXZlbnRDbGFzc0NvbnRy
b2wsIGtFdmVudENvbnRyb2xTZXRGb2N1c1BhcnQgfQotfTsKLQotI2RlZmluZSBrSElWaWV3QmFz
ZUNsYXNzSUQgQ0ZTVFIoImNvbS5hcHBsZS5oaXZpZXciKQotI2RlZmluZSBrSElXZWJWaWV3Q2xh
c3NJRCBDRlNUUigiY29tLmFwcGxlLkhJV2ViVmlldyIpCi0KLXN0YXRpYyBISVdlYlZpZXcqIEhJ
V2ViVmlld0NvbnN0cnVjdG9yKEhJVmlld1JlZiBpblZpZXcpOwotc3RhdGljIHZvaWQgSElXZWJW
aWV3RGVzdHJ1Y3RvcihISVdlYlZpZXcqKTsKLQotc3RhdGljIE9TU3RhdHVzIEhJV2ViVmlld0V2
ZW50SGFuZGxlcihFdmVudEhhbmRsZXJDYWxsUmVmIGluQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVu
dCwgdm9pZCAqaW5Vc2VyRGF0YSk7Ci0KLXN0YXRpYyBVSW50MzIgR2V0QmVoYXZpb3JzKCk7Ci1z
dGF0aWMgQ29udHJvbEtpbmQgR2V0S2luZCgpOwotc3RhdGljIHZvaWQgRHJhdyhISVdlYlZpZXcq
IGluVmlldywgUmduSGFuZGxlIGxpbWl0UmduLCBDR0NvbnRleHRSZWYgaW5Db250ZXh0KTsKLXN0
YXRpYyBDb250cm9sUGFydENvZGUgSGl0VGVzdChISVdlYlZpZXcqLCBjb25zdCBISVBvaW50KiB3
aGVyZSk7Ci1zdGF0aWMgT1NTdGF0dXMgR2V0UmVnaW9uKEhJV2ViVmlldyosIENvbnRyb2xQYXJ0
Q29kZSBpblBhcnQsIFJnbkhhbmRsZSBvdXRSZ24pOwotc3RhdGljIHZvaWQgQm91bmRzQ2hhbmdl
ZChISVdlYlZpZXcqIGluVmlldywgVUludDMyIGluT3B0aW9ucywgY29uc3QgSElSZWN0KiBpbk9y
aWdpbmFsQm91bmRzLCBjb25zdCBISVJlY3QqIGluQ3VycmVudEJvdW5kcyk7Ci1zdGF0aWMgdm9p
ZCBPd25pbmdXaW5kb3dDaGFuZ2VkKEhJV2ViVmlldyosIFdpbmRvd1JlZiBvbGRXaW5kb3csIFdp
bmRvd1JlZiBuZXdXaW5kb3cpOwotc3RhdGljIHZvaWQgQWN0aXZlU3RhdGVDaGFuZ2VkKEhJV2Vi
VmlldyopOwotCi1zdGF0aWMgT1NTdGF0dXMgQ2xpY2soSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50
UmVmIGluRXZlbnQpOwotc3RhdGljIE9TU3RhdHVzIENvbnRleHRNZW51Q2xpY2soSElXZWJWaWV3
KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQpOwotc3RhdGljIE9TU3RhdHVzIE1vdXNlVXAoSElX
ZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQpOwotc3RhdGljIE9TU3RhdHVzIE1vdXNl
TW92ZWQoSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQpOwotc3RhdGljIE9TU3Rh
dHVzIE1vdXNlRHJhZ2dlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7Ci1z
dGF0aWMgT1NTdGF0dXMgTW91c2VXaGVlbE1vdmVkKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJl
ZiBpbkV2ZW50KTsKLQotc3RhdGljIE9TU3RhdHVzIFByb2Nlc3NDb21tYW5kKEhJV2ViVmlldyog
aW5WaWV3LCBjb25zdCBISUNvbW1hbmQqIGluQ29tbWFuZCk7Ci1zdGF0aWMgT1NTdGF0dXMgVXBk
YXRlQ29tbWFuZFN0YXR1cyhISVdlYlZpZXcqIGluVmlldywgY29uc3QgSElDb21tYW5kKiBpbkNv
bW1hbmQpOwotCi1zdGF0aWMgT1NTdGF0dXMgU2V0Rm9jdXNQYXJ0KEhJV2ViVmlldyosIENvbnRy
b2xQYXJ0Q29kZSBkZXNpcmVkRm9jdXMsIFJnbkhhbmRsZSBpbnZhbGlkUmduLCBCb29sZWFuIGZv
Y3VzRXZlcnl0aGluZywgQ29udHJvbFBhcnRDb2RlKiBhY3R1YWxGb2N1cyk7Ci1zdGF0aWMgTlNW
aWV3KiBBZHZhbmNlRm9jdXMoSElXZWJWaWV3KiwgYm9vbCBmb3J3YXJkKTsKLXN0YXRpYyB2b2lk
IFJlbGlucXVpc2hGb2N1cyhISVdlYlZpZXcqLCBib29sIGluQXV0b2Rpc3BsYXkpOwotCi1zdGF0
aWMgV2luZG93UmVmIEdldFdpbmRvd1JlZihISVdlYlZpZXcqIGluVmlldyk7Ci1zdGF0aWMgdm9p
ZCBTeW5jRnJhbWUoSElXZWJWaWV3KiBpblZpZXcpOwotCi1zdGF0aWMgT1NTdGF0dXMgV2luZG93
SGFuZGxlcihFdmVudEhhbmRsZXJDYWxsUmVmIGluQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVudCwg
dm9pZCogaW5Vc2VyRGF0YSk7Ci0KLXN0YXRpYyB2b2lkIFN0YXJ0VXBkYXRlT2JzZXJ2ZXIoSElX
ZWJWaWV3Kik7Ci1zdGF0aWMgdm9pZCBTdG9wVXBkYXRlT2JzZXJ2ZXIoSElXZWJWaWV3Kik7Ci0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSElXZWJWaWV3Q3JlYXRlCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1PU1N0YXR1cyBISVdlYlZpZXdDcmVhdGUoSElWaWV3
UmVmKiBvdXRDb250cm9sKQotewotICAgIEhJV2ViVmlld1JlZ2lzdGVyQ2xhc3MoKTsKLSAgICBy
ZXR1cm4gSElPYmplY3RDcmVhdGUoa0hJV2ViVmlld0NsYXNzSUQsIG51bGxwdHIsIChISU9iamVj
dFJlZiopb3V0Q29udHJvbCk7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
SElXZWJWaWV3R2V0V2ViVmlldwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotV2Vi
VmlldyogSElXZWJWaWV3R2V0V2ViVmlldyhISVZpZXdSZWYgaW5WaWV3KQotewotICAgIEhJV2Vi
VmlldyogdmlldyA9IChISVdlYlZpZXcqKUhJT2JqZWN0RHluYW1pY0Nhc3QoKEhJT2JqZWN0UmVm
KWluVmlldywga0hJV2ViVmlld0NsYXNzSUQpOwotICAgIFdlYlZpZXcqIHJlc3VsdCA9IG51bGxw
dHI7Ci0KLSAgICBpZiAodmlldykKLSAgICAgICAgcmVzdWx0ID0gdmlldy0+ZldlYlZpZXc7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IEhJV2ViVmlld0NvbnN0cnVjdG9yCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi0K
LXN0YXRpYyBISVdlYlZpZXcqIEhJV2ViVmlld0NvbnN0cnVjdG9yKEhJVmlld1JlZiBpblZpZXcp
Ci17Ci0gICAgSElXZWJWaWV3KiB2aWV3ID0gKEhJV2ViVmlldyopbWFsbG9jKHNpemVvZihISVdl
YlZpZXcpKTsKLQotICAgIGlmICh2aWV3KSB7Ci0gICAgICAgIE5TUmVjdCBmcmFtZSA9IHsgeyAw
LCAwIH0sIHsgNDAwLCA0MDAgIH0gfTsKLQotICAgICAgICB2aWV3LT5mVmlld1JlZiA9IGluVmll
dzsKLQotICAgICAgICBXZWJWaWV3ICp3ZWJWaWV3ID0gW1tXZWJWaWV3IGFsbG9jXSBpbml0V2l0
aEZyYW1lOiBmcmFtZV07Ci0gICAgICAgIENGUmV0YWluKHdlYlZpZXcpOwotICAgICAgICBbd2Vi
VmlldyByZWxlYXNlXTsKLSAgICAgICAgdmlldy0+ZldlYlZpZXcgPSB3ZWJWaWV3OwotICAgICAg
ICBbSElWaWV3QWRhcHRlciBiaW5kSElWaWV3VG9OU1ZpZXc6aW5WaWV3IG5zVmlldzp2aWV3LT5m
V2ViVmlld107Ci0KLSAgICAgICAgdmlldy0+ZkZpcnN0UmVzcG9uZGVyID0gbnVsbHB0cjsKLSAg
ICAgICAgdmlldy0+ZktpdFdpbmRvdyA9IG51bGxwdHI7Ci0gICAgICAgIHZpZXctPmZJc0NvbXBv
c2l0ZWQgPSBmYWxzZTsKLSAgICAgICAgdmlldy0+ZlVwZGF0ZU9ic2VydmVyID0gbnVsbHB0cjsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdmlldzsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBISVdlYlZpZXdEZXN0cnVjdG9yCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vCi1zdGF0aWMgdm9pZCBISVdlYlZpZXdEZXN0cnVjdG9yKEhJV2ViVmlldyogaW5WaWV3KQot
ewotICAgIFtISVZpZXdBZGFwdGVyIHVuYmluZE5TVmlldzppblZpZXctPmZXZWJWaWV3XTsKLSAg
ICBDRlJlbGVhc2UoaW5WaWV3LT5mV2ViVmlldyk7Ci0KLSAgICBmcmVlKGluVmlldyk7Ci19Ci0K
LS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gSElXZWJWaWV3UmVnaXN0ZXJDbGFzcwot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotdm9pZCBISVdlYlZpZXdSZWdpc3RlckNs
YXNzKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBzUmVnaXN0ZXJlZDsKLQotICAgIGlmICghc1JlZ2lz
dGVyZWQpIHsKLSAgICAgICAgSElPYmplY3RSZWdpc3RlclN1YmNsYXNzKGtISVdlYlZpZXdDbGFz
c0lELCBrSElWaWV3QmFzZUNsYXNzSUQsIDAsIEhJV2ViVmlld0V2ZW50SGFuZGxlciwKLSAgICAg
ICAgICAgIEdldEV2ZW50VHlwZUNvdW50KGtFdmVudHMpLCBrRXZlbnRzLCAwLCBudWxscHRyKTsK
LSAgICAgICAgc1JlZ2lzdGVyZWQgPSB0cnVlOwotICAgIH0KLX0KLQotLy8tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0vLyBHZXRCZWhhdmlvcnMKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8KLXN0YXRpYyBVSW50MzIgR2V0QmVoYXZpb3JzKCkKLXsKLSAgICByZXR1cm4ga0NvbnRy
b2xTdXBwb3J0c0RhdGFBY2Nlc3MgfCBrQ29udHJvbFN1cHBvcnRzR2V0UmVnaW9uIHwga0NvbnRy
b2xHZXRzRm9jdXNPbkNsaWNrOwotfQotCi1zdGF0aWMgQ0dDb250ZXh0UmVmIG92ZXJyaWRlQ0dD
b250ZXh0KE5TV2luZG93ICp3aW5kb3csIENHQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgTlNXaW5kb3dHcmFwaGljc0Nv
bnRleHQgKmdyYXBoaWNzQ29udGV4dCA9IChOU1dpbmRvd0dyYXBoaWNzQ29udGV4dCAqKXdpbmRv
dy5ncmFwaGljc0NvbnRleHQ7Ci0gICAgQ0dDb250ZXh0UmVmIHNhdmVkQ29udGV4dCA9IChDR0Nv
bnRleHRSZWYpZ3JhcGhpY3NDb250ZXh0LmdyYXBoaWNzUG9ydDsKLSAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICBDR0NvbnRleHRSZXRhaW4oc2F2ZWRDb250ZXh0KTsK
LSAgICBbZ3JhcGhpY3NDb250ZXh0IF93ZWJfc2V0R3JhcGhpY3NQb3J0OmNvbnRleHRdOwotICAg
IHJldHVybiBzYXZlZENvbnRleHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc3RvcmVDR0NvbnRleHQo
TlNXaW5kb3cgKndpbmRvdywgQ0dDb250ZXh0UmVmIHNhdmVkQ29udGV4dCkKLXsKLSAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIE5TV2luZG93R3JhcGhpY3NDb250
ZXh0ICpncmFwaGljc0NvbnRleHQgPSAoTlNXaW5kb3dHcmFwaGljc0NvbnRleHQgKil3aW5kb3cu
Z3JhcGhpY3NDb250ZXh0OwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAot
ICAgIFtncmFwaGljc0NvbnRleHQgX3dlYl9zZXRHcmFwaGljc1BvcnQ6c2F2ZWRDb250ZXh0XTsK
LSAgICBDR0NvbnRleHRSZWxlYXNlKHNhdmVkQ29udGV4dCk7Ci19Ci0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gRHJhdwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwot
c3RhdGljIHZvaWQgRHJhdyhISVdlYlZpZXcqIGluVmlldywgUmduSGFuZGxlIGxpbWl0UmduLCBD
R0NvbnRleHRSZWYgaW5Db250ZXh0KQotewotICAgIEhJUmVjdCBib3VuZHM7Ci0gICAgUmVjdCBk
cmF3UmVjdDsKLSAgICBISVJlY3QgaGlSZWN0OwotICAgIGJvb2wgY3JlYXRlZENvbnRleHQgPSBm
YWxzZTsKLQotICAgIGlmICghaW5WaWV3LT5mSXNDb21wb3NpdGVkKSB7Ci0gICAgICAgIEdyYWZQ
dHIgcG9ydDsKLSAgICAgICAgUmVjdCBwb3J0UmVjdDsKLQotICAgICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICBHZXRQb3J0KCZwb3J0KTsKLSAgICAgICAg
R2V0UG9ydEJvdW5kcyhwb3J0LCAmcG9ydFJlY3QpOwotICAgICAgICBDcmVhdGVDR0NvbnRleHRG
b3JQb3J0KHBvcnQsICZpbkNvbnRleHQpOwotICAgICAgICBTeW5jQ0dDb250ZXh0T3JpZ2luV2l0
aFBvcnQoaW5Db250ZXh0LCBwb3J0KTsKLSAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGlu
Q29udGV4dCwgMCwgKHBvcnRSZWN0LmJvdHRvbSAtIHBvcnRSZWN0LnRvcCkpOwotICAgICAgICBD
R0NvbnRleHRTY2FsZUNUTShpbkNvbnRleHQsIDEsIC0xKTsKLSAgICAgICAgY3JlYXRlZENvbnRl
eHQgPSB0cnVlOwotICAgIH0KLQotICAgIEhJVmlld0dldEJvdW5kcyhpblZpZXctPmZWaWV3UmVm
LCAmYm91bmRzKTsKLQotICAgIENHQ29udGV4dFJlZiBzYXZlZENvbnRleHQgPSBvdmVycmlkZUNH
Q29udGV4dChpblZpZXctPmZLaXRXaW5kb3csIGluQ29udGV4dCk7Ci0gICAgW05TR3JhcGhpY3ND
b250ZXh0IHNldEN1cnJlbnRDb250ZXh0OltpblZpZXctPmZLaXRXaW5kb3cgZ3JhcGhpY3NDb250
ZXh0XV07Ci0KLSAgICBHZXRSZWdpb25Cb3VuZHMobGltaXRSZ24sICZkcmF3UmVjdCk7Ci0KLSAg
ICBpZiAoIWluVmlldy0+ZklzQ29tcG9zaXRlZCkKLSAgICAgICAgT2Zmc2V0UmVjdCgmZHJhd1Jl
Y3QsIChTSW50MTYpLWJvdW5kcy5vcmlnaW4ueCwgKFNJbnQxNiktYm91bmRzLm9yaWdpbi55KTsK
LSAgICAKLSAgICBoaVJlY3Qub3JpZ2luLnggPSBkcmF3UmVjdC5sZWZ0OwotICAgIGhpUmVjdC5v
cmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIGRyYXdSZWN0LmJvdHRvbTsgLy8gZmxpcCB5
Ci0gICAgaGlSZWN0LnNpemUud2lkdGggPSBkcmF3UmVjdC5yaWdodCAtIGRyYXdSZWN0LmxlZnQ7
Ci0gICAgaGlSZWN0LnNpemUuaGVpZ2h0ID0gZHJhd1JlY3QuYm90dG9tIC0gZHJhd1JlY3QudG9w
OwotCi0vLyAgICBwcmludGYoIkRyYXdpbmc6IGRyYXdSZWN0IGlzICglZyAlZykgKCVnICVnKVxu
IiwgaGlSZWN0Lm9yaWdpbi54LCBoaVJlY3Qub3JpZ2luLnksCi0vLyAgICAgICAgICAgIGhpUmVj
dC5zaXplLndpZHRoLCBoaVJlY3Quc2l6ZS5oZWlnaHQpOwotCi0gICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gZG8gbGF5b3V0IGJlZm9yZSBDYXJib24gaGFzIGRlY2lkZWQgd2hhdCByZWdpb24gbmVl
ZHMgZHJhd24uCi0gICAgLy8gSW4gQ29jb2Egd2UgbWFrZSBzdXJlIHRvIGRvIGxheW91dCBhbmQg
aW52YWxpZGF0ZSBhbnkgbmV3IHJlZ2lvbnMgYmVmb3JlIGRyYXcsIHNvIGV2ZXJ5dGhpbmcKLSAg
ICAvLyBjYW4gYmUgZHJhd24gaW4gb25lIHBhc3MuIERvaW5nIGEgbGF5b3V0IGhlcmUgd2lsbCBj
YXVzZSBuZXcgcmVnaW9ucyB0byBiZSBpbnZhbGlkYXRlZCwgYnV0IHRoZXkKLSAgICAvLyB3aWxs
IG5vdCBhbGwgYmUgZHJhd24gaW4gdGhpcyBwYXNzIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSBhIGZp
eGVkIHJlY3Qgd2UgYXJlIGdvaW5nIHRvIGRpc3BsYXkuCi0KLSAgICBOU1ZpZXcgPFdlYkRvY3Vt
ZW50Vmlldz4gKmRvY3VtZW50VmlldyA9IFtbW2luVmlldy0+ZldlYlZpZXcgbWFpbkZyYW1lXSBm
cmFtZVZpZXddIGRvY3VtZW50Vmlld107Ci0gICAgaWYgKFtkb2N1bWVudFZpZXcgaXNLaW5kT2ZD
bGFzczpbV2ViSFRNTFZpZXcgY2xhc3NdXSkKLSAgICAgICAgWyhXZWJIVE1MVmlldyAqKWRvY3Vt
ZW50VmlldyBfd2ViX3VwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmVdOwotCi0g
ICAgaWYgKGluVmlldy0+ZklzQ29tcG9zaXRlZCkKLSAgICAgICAgW2luVmlldy0+ZldlYlZpZXcg
ZGlzcGxheUlmTmVlZGVkSW5SZWN0OiAqKE5TUmVjdCopJmhpUmVjdF07Ci0gICAgZWxzZQotICAg
ICAgICBbaW5WaWV3LT5mV2ViVmlldyBkaXNwbGF5UmVjdDoqKE5TUmVjdCopJmhpUmVjdF07Ci0K
LSAgICByZXN0b3JlQ0dDb250ZXh0KGluVmlldy0+ZktpdFdpbmRvdywgc2F2ZWRDb250ZXh0KTsK
LQotICAgIGlmICghaW5WaWV3LT5mSXNDb21wb3NpdGVkKQotICAgIHsKLSAgICAgICAgSElWaWV3
UmVmICAgICAgdmlldzsKLSAgICAgICAgSElWaWV3RmluZEJ5SUQoSElWaWV3R2V0Um9vdChHZXRD
b250cm9sT3duZXIoaW5WaWV3LT5mVmlld1JlZikpLCBrSElWaWV3V2luZG93R3Jvd0JveElELCAm
dmlldyk7Ci0gICAgICAgIGlmICh2aWV3KQotICAgICAgICB7Ci0gICAgICAgICAgICBISVJlY3Qg
ZnJhbWU7Ci0KLSAgICAgICAgICAgIEhJVmlld0dldEJvdW5kcyh2aWV3LCAmZnJhbWUpOwotICAg
ICAgICAgICAgSElWaWV3Q29udmVydFJlY3QoJmZyYW1lLCB2aWV3LCBudWxscHRyKTsKLQotICAg
ICAgICAgICAgaGlSZWN0Lm9yaWdpbi54ID0gZHJhd1JlY3QubGVmdDsKLSAgICAgICAgICAgIGhp
UmVjdC5vcmlnaW4ueSA9IGRyYXdSZWN0LnRvcDsKLSAgICAgICAgICAgIGhpUmVjdC5zaXplLndp
ZHRoID0gZHJhd1JlY3QucmlnaHQgLSBkcmF3UmVjdC5sZWZ0OwotICAgICAgICAgICAgaGlSZWN0
LnNpemUuaGVpZ2h0ID0gZHJhd1JlY3QuYm90dG9tIC0gZHJhd1JlY3QudG9wOwotCi0gICAgICAg
ICAgICBISVZpZXdDb252ZXJ0UmVjdCgmaGlSZWN0LCBpblZpZXctPmZWaWV3UmVmLCBudWxscHRy
KTsKLQotICAgICAgICAgICAgaWYgKENHUmVjdEludGVyc2VjdHNSZWN0KGZyYW1lLCBoaVJlY3Qp
KQotICAgICAgICAgICAgICAgIEhJVmlld1NldE5lZWRzRGlzcGxheSh2aWV3LCB0cnVlKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChjcmVhdGVkQ29udGV4dCkKLSAgICB7Ci0gICAgICAg
IENHQ29udGV4dFN5bmNocm9uaXplKGluQ29udGV4dCk7Ci0gICAgICAgIENHQ29udGV4dFJlbGVh
c2UoaW5Db250ZXh0KTsKLSAgICB9Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gSGl0VGVzdAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotc3RhdGljIENvbnRy
b2xQYXJ0Q29kZSBIaXRUZXN0KEhJV2ViVmlldyogdmlldywgY29uc3QgSElQb2ludCogd2hlcmUp
Ci17Ci0gICAgSElSZWN0IGJvdW5kczsKLQotICAgIEhJVmlld0dldEJvdW5kcyh2aWV3LT5mVmll
d1JlZiwgJmJvdW5kcyk7Ci0KLSAgICBpZiAoQ0dSZWN0Q29udGFpbnNQb2ludChib3VuZHMsICp3
aGVyZSkpCi0gICAgICAgIHJldHVybiAxOwotICAgIHJldHVybiBrQ29udHJvbE5vUGFydDsKLX0K
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBHZXRSZWdpb24KLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0YXRpYyBPU1N0YXR1cyBHZXRSZWdpb24oSElXZWJWaWV3
KiBpblZpZXcsIENvbnRyb2xQYXJ0Q29kZSBpblBhcnQsIFJnbkhhbmRsZSBvdXRSZ24pCi17Ci0g
ICAgT1NTdGF0dXMgZXJyID0gZXZlbnROb3RIYW5kbGVkRXJyOwotCi0gICAgaWYgKGluUGFydCA9
PSAtMyAmJiBbaW5WaWV3LT5mV2ViVmlldyBpc09wYXF1ZV0pIHsKLSAgICAgICAgLy8ga0NvbnRy
b2xPcGFxdWVNZXRhUGFydDoKLSAgICAgICAgSElSZWN0IGJvdW5kczsKLSAgICAgICAgUmVjdCB0
ZW1wOwotCi0gICAgICAgIEhJVmlld0dldEJvdW5kcyhpblZpZXctPmZWaWV3UmVmLCAmYm91bmRz
KTsKLQotICAgICAgICB0ZW1wLnRvcCA9IChTSW50MTYpYm91bmRzLm9yaWdpbi55OwotICAgICAg
ICB0ZW1wLmxlZnQgPSAoU0ludDE2KWJvdW5kcy5vcmlnaW4ueDsKLSAgICAgICAgdGVtcC5ib3R0
b20gPSAoU0ludDE2KUNHUmVjdEdldE1heFkoYm91bmRzKTsKLSAgICAgICAgdGVtcC5yaWdodCA9
IChTSW50MTYpQ0dSZWN0R2V0TWF4WChib3VuZHMpOwotCi0gICAgICAgIFJlY3RSZ24ob3V0Umdu
LCAmdGVtcCk7Ci0gICAgICAgIGVyciA9IG5vRXJyOwotICAgIH0KLQotICAgIHJldHVybiBlcnI7
Ci19Ci0KLXN0YXRpYyBXaW5kb3dSZWYgR2V0V2luZG93UmVmKEhJV2ViVmlldyogaW5WaWV3KQot
ewotICAgIHJldHVybiBHZXRDb250cm9sT3duZXIoaW5WaWV3LT5mVmlld1JlZik7Ci19Ci0KLXN0
YXRpYyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50QWRvcHRpbmdDR0V2ZW50KENHRXZlbnRSZWYgY2dF
dmVudCwgRXZlbnRSZWYgZXZlbnRSZWYpCi17Ci0gICAgTlNFdmVudCAqcmVzdWx0ID0gW1tOU0V2
ZW50IGFsbG9jXSBfaW5pdFdpdGhDR0V2ZW50OmNnRXZlbnQgZXZlbnRSZWY6ZXZlbnRSZWZdOwot
ICAgIENGUmVsZWFzZShjZ0V2ZW50KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMg
Qm9vbGVhbgotQ29weUV2ZW50Q0dFdmVudChFdmVudFJlZiBldmVudCwgQ0dFdmVudFJlZiogY2dF
dmVudCkKLXsKLSAgICBpZiAoKCpjZ0V2ZW50ID0gQ29weUV2ZW50Q0dFdmVudChldmVudCkpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIFRoaXMgZXZlbnQgbWlnaHQgbm90IGhhdmUg
YmVlbiBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBDR1MgZXZlbnQsIGFuZCBtaWdodCBub3QKLSAg
ICAvLyBoYXZlIGEgQ0dFdmVudFJlZiBhc3NvY2lhdGVkIHdpdGggaXQuIEluIHRoYXQgY2FzZSwg
dHJ5IHVzaW5nIHRoZSBldmVudCBtb3N0Ci0gICAgLy8gcmVjZW50bHkgZGlzcGF0Y2hlZCBieSB0
aGUgZXZlbnQgZGlzcGF0Y2hlciwgd2hpY2ggaXMgbGlrZWx5IHRvIGJlIHRoZSBvcmlnaW5hbAot
ICAgIC8vIHVzZXItaW5wdXQgZXZlbnQgY29udGFpbmluZyBhIENHRXZlbnRSZWYuCi0gICAgZXZl
bnQgPSBHZXRDdXJyZW50RXZlbnQoKTsKLSAgICBpZiAoZXZlbnQgJiYgKCpjZ0V2ZW50ID0gQ29w
eUV2ZW50Q0dFdmVudChldmVudCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXN0YXRpYyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkNsaWNr
RXZlbnQoRXZlbnRSZWYgaW5FdmVudCwgV2luZG93UmVmIHdpbmRvd1JlZikKLXsKLSAgICBFdmVu
dFJlZiBuZXdFdmVudDsKLSAgICBQb2ludCB3aGVyZTsKLSAgICBPU1N0YXR1cyBlcnI7Ci0gICAg
VUludDMyIG1vZGlmaWVyczsKLSAgICBSZWN0IHdpbmRSZWN0OwotCi0gICAgQ0dFdmVudFJlZiBj
Z0V2ZW50ID0gbnVsbHB0cjsKLSAgICBpZiAoIUNvcHlFdmVudENHRXZlbnQoaW5FdmVudCwgJmNn
RXZlbnQpKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgLy8gV2UgbmVlZCB0byBtYWtlIHRo
ZSBldmVudCBiZSBhIGtFdmVudE1vdXNlRG93biBldmVudCwgb3IgdGhlIHdlYmtpdCBtaWdodCB0
cmlwIHVwIHdoZW4KLSAgICAvLyB3ZSBjbGljayBvbiBhIE5ldHNjYXBlIHBsdWdpbi4gSXQgY2Fs
bHMgQ29udmVydEV2ZW50UmVmVG9FdmVudFJlY29yZCwgYXNzdW1pbmcKLSAgICAvLyB0aGF0IG1v
dXNlRG93biB3YXMgcGFzc2VkIGFuIGV2ZW50IHdpdGggYSByZWFsIG1vdXNlIGRvd24gZXZlbnRS
ZWYuIFdlIGp1c3QgbmVlZCBhCi0gICAgLy8gbWluaW1hbCBvbmUgaGVyZS4KLQotICAgIGVyciA9
IENyZWF0ZUV2ZW50KG51bGxwdHIsIGtFdmVudENsYXNzTW91c2UsIGtFdmVudE1vdXNlRG93biwg
R2V0RXZlbnRUaW1lKGluRXZlbnQpLCAwLCAmbmV3RXZlbnQpOwotICAgIGlmIChlcnIgIT0gbm9F
cnIpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50
LCBrRXZlbnRQYXJhbVdpbmRvd01vdXNlTG9jYXRpb24sIHR5cGVRRFBvaW50LCBudWxscHRyLCBz
aXplb2YoUG9pbnQpLCBudWxscHRyLCAmd2hlcmUpOwotICAgIEdldFdpbmRvd0JvdW5kcyh3aW5k
b3dSZWYsIGtXaW5kb3dTdHJ1Y3R1cmVSZ24sICZ3aW5kUmVjdCk7Ci0gICAgd2hlcmUuaCArPSB3
aW5kUmVjdC5sZWZ0OwotICAgIHdoZXJlLnYgKz0gd2luZFJlY3QudG9wOwotCi0gICAgR2V0RXZl
bnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1LZXlNb2RpZmllcnMsIHR5cGVVSW50MzIs
IG51bGxwdHIsIHNpemVvZihVSW50MzIpLCBudWxscHRyLCAmbW9kaWZpZXJzKTsKLSAgICBTZXRF
dmVudFBhcmFtZXRlcihuZXdFdmVudCwga0V2ZW50UGFyYW1Nb3VzZUxvY2F0aW9uLCB0eXBlUURQ
b2ludCwgc2l6ZW9mKFBvaW50KSwgJndoZXJlKTsKLSAgICBTZXRFdmVudFBhcmFtZXRlcihuZXdF
dmVudCwga0V2ZW50UGFyYW1LZXlNb2RpZmllcnMsIHR5cGVVSW50MzIsIHNpemVvZihVSW50MzIp
LCAmbW9kaWZpZXJzKTsKLQotICAgIHJldHVybiBDcmVhdGVOU0V2ZW50QWRvcHRpbmdDR0V2ZW50
KGNnRXZlbnQsIG5ld0V2ZW50KTsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBDbGljawotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotc3RhdGljIE9TU3RhdHVz
IENsaWNrKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50KQotewotICAgIE5TRXZl
bnQgKmtpdEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25DbGlja0V2ZW50KGluRXZlbnQs
IEdldFdpbmRvd1JlZihpblZpZXcpKTsKLQotICAgIGlmICghaW5WaWV3LT5mSXNDb21wb3NpdGVk
KQotICAgICAgICBTdGFydFVwZGF0ZU9ic2VydmVyKGluVmlldyk7Ci0KLSAgICBbaW5WaWV3LT5m
S2l0V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07Ci0KLSAgICBpZiAoIWluVmlldy0+ZklzQ29t
cG9zaXRlZCkKLSAgICAgICAgU3RvcFVwZGF0ZU9ic2VydmVyKGluVmlldyk7Ci0KLSAgICBba2l0
RXZlbnQgcmVsZWFzZV07Ci0KLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLXN0YXRpYyBOU0V2ZW50
ICpDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50KEV2ZW50UmVmIGluRXZlbnQpCi17Ci0gICAg
TlNFdmVudCAqZXZlbnQgPSBbTlNFdmVudCBldmVudFdpdGhFdmVudFJlZjppbkV2ZW50XTsKLSAg
ICBpZiAoIWV2ZW50KQotICAgICAgICBldmVudCA9IFtOU0V2ZW50IGV2ZW50V2l0aEV2ZW50UmVm
OkdldEN1cnJlbnRFdmVudCgpXTsKLQotICAgIHJldHVybiBbZXZlbnQgcmV0YWluXTsKLX0KLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNb3VzZVVwCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgT1NTdGF0dXMgTW91c2VVcChISVdlYlZpZXcqIGluVmll
dywgRXZlbnRSZWYgaW5FdmVudCkKLXsKLSAgICBOU0V2ZW50KiBraXRFdmVudCA9IENyZWF0ZU5T
RXZlbnRXaXRoQ2FyYm9uRXZlbnQoaW5FdmVudCk7Ci0KLSAgICBbaW5WaWV3LT5mS2l0V2luZG93
IHNlbmRFdmVudDpraXRFdmVudF07Ci0KLSAgICBba2l0RXZlbnQgcmVsZWFzZV07Ci0KLSAgICBy
ZXR1cm4gbm9FcnI7Ci19Ci0KLXN0YXRpYyBOU0V2ZW50ICpDcmVhdGVOU0V2ZW50V2l0aENhcmJv
bk1vdXNlTW92ZUV2ZW50KEV2ZW50UmVmIGluRXZlbnQsIE5TV2luZG93ICp3aW5kb3cpCi17Ci0g
ICAgTlNFdmVudCoga2l0RXZlbnQgPSBbTlNFdmVudCBldmVudFdpdGhFdmVudFJlZjppbkV2ZW50
XTsKLQotICAgIC8vIEZJWE1FOiBXb3JrcyBhcm91bmQgYnVnIDM1ODU2NDQuIENhbiByZW1vdmUg
aXQgb25jZSB0aGF0IGJ1ZyBpcyBmaXhlZC4KLSAgICAvLyBXZSBwcmVmbGlnaHQgaGVyZSBhbmQg
ZG9uJ3QgZG8gYW55IHdvcmsgd2hlbiB0aGUgd2luZG93IGlzIGFscmVhZHkgY29ycmVjdAotICAg
IC8vIGJlY2F1c2UgX2V2ZW50UmVsYXRpdmVUb1dpbmRvdyB3aWxsIG1hbGZ1bmN0aW9uIGlmIHRo
ZSBldmVudCdzIHdpbmRvdyBtZXRob2QKLSAgICAvLyBoYXMgYmVlbiBoaWphY2tlZCBieSB0aGUg
YnVnIHdvcmthcm91bmQgdXNlZCBieSBDb250cmlidXRlLiBJdCdzIGZpbmUgdG8ganVzdAotICAg
IC8vIGxlYXZlIHRoZSBldmVudCBhbG9uZSBpZiB0aGUgd2luZG93IGlzIGFscmVhZHkgY29ycmVj
dC4KLQotICAgIGlmIChba2l0RXZlbnQgd2luZG93XSAhPSB3aW5kb3cpCi0gICAgICAgIGtpdEV2
ZW50ID0gW2tpdEV2ZW50IF9ldmVudFJlbGF0aXZlVG9XaW5kb3c6d2luZG93XTsKLQotICAgIHJl
dHVybiBba2l0RXZlbnQgcmV0YWluXTsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0vLyBNb3VzZU1vdmVkCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMg
T1NTdGF0dXMgTW91c2VNb3ZlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCkK
LXsKLSAgICBOU0V2ZW50ICpraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uTW91c2VN
b3ZlRXZlbnQoaW5FdmVudCwgaW5WaWV3LT5mS2l0V2luZG93KTsKLSAgICBbaW5WaWV3LT5mS2l0
V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07Ci0gICAgW2tpdEV2ZW50IHJlbGVhc2VdOwotCi0g
ICAgcmV0dXJuIG5vRXJyOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1v
dXNlRHJhZ2dlZAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotc3RhdGljIE9TU3Rh
dHVzIE1vdXNlRHJhZ2dlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCkKLXsK
LSAgICBOU0V2ZW50KiBraXRFdmVudCA9IENyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uRXZlbnQoaW5F
dmVudCk7Ci0KLSAgICBbaW5WaWV3LT5mS2l0V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07Ci0K
LSAgICBba2l0RXZlbnQgcmVsZWFzZV07Ci0KLSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gTW91c2VEcmFnZ2VkCi0vLy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgT1NTdGF0dXMgTW91c2VXaGVlbE1vdmVkKEhJV2ViVmll
dyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50KQotewotICAgIE5TRXZlbnQqIGtpdEV2ZW50ID0g
Q3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKLQotICAgIFtpblZpZXctPmZL
aXRXaW5kb3cgc2VuZEV2ZW50OmtpdEV2ZW50XTsKLQotICAgIFtraXRFdmVudCByZWxlYXNlXTsK
LQotICAgIHJldHVybiBub0VycjsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBDb250ZXh0TWVudUNsaWNrCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0
aWMgT1NTdGF0dXMgQ29udGV4dE1lbnVDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYg
aW5FdmVudCkKLXsKLSAgICBOU1ZpZXcgKndlYlZpZXcgPSBpblZpZXctPmZXZWJWaWV3OwotICAg
IE5TV2luZG93ICp3aW5kb3cgPSBbd2ViVmlldyB3aW5kb3ddOwotCi0gICAgLy8gR2V0IHRoZSBw
b2ludCBvdXQgb2YgdGhlIGV2ZW50LgotICAgIEhJUG9pbnQgcG9pbnQ7Ci0gICAgR2V0RXZlbnRQ
YXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Nb3VzZUxvY2F0aW9uLCB0eXBlSElQb2ludCwg
bnVsbHB0ciwgc2l6ZW9mKHBvaW50KSwgbnVsbHB0ciwgJnBvaW50KTsKLSAgICBISVZpZXdDb252
ZXJ0UG9pbnQoJnBvaW50LCBpblZpZXctPmZWaWV3UmVmLCBudWxscHRyKTsKLSAgICAKLSAgICAv
LyBGbGlwIHRoZSBZIGNvb3JkaW5hdGUsIHNpbmNlIENhcmJvbiBpcyBmbGlwcGVkIHJlbGF0aXZl
IHRvIHRoZSBBcHBLaXQuCi0gICAgTlNQb2ludCBsb2NhdGlvbiA9IE5TTWFrZVBvaW50KHBvaW50
LngsIFt3aW5kb3cgZnJhbWVdLnNpemUuaGVpZ2h0IC0gcG9pbnQueSk7Ci0gICAgCi0gICAgLy8g
TWFrZSB1cCBhbiBldmVudCB3aXRoIHRoZSBwb2ludCBhbmQgc2VuZCBpdCB0byB0aGUgd2luZG93
LgotICAgIE5TRXZlbnQgKmtpdEV2ZW50ID0gW05TRXZlbnQgbW91c2VFdmVudFdpdGhUeXBlOk5T
RXZlbnRUeXBlUmlnaHRNb3VzZURvd24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbjpsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtb2RpZmllckZsYWdzOjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVzdGFtcDpHZXRFdmVudFRpbWUoaW5FdmVudCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd051bWJlcjpbd2luZG93IHdpbmRvd051
bWJlcl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dDowCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROdW1iZXI6
MAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja0NvdW50OjEK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzc3VyZTowXTsK
LSAgICBbaW5WaWV3LT5mS2l0V2luZG93IHNlbmRFdmVudDpraXRFdmVudF07Ci0gICAgcmV0dXJu
IG5vRXJyOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEdldEtpbmQKLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0YXRpYyBDb250cm9sS2luZCBHZXRLaW5k
KCkKLXsKLSAgICBjb25zdCBDb250cm9sS2luZCBrTXlLaW5kID0geyAnYXBwbCcsICd3YnZ3JyB9
OwotICAgIAotICAgIHJldHVybiBrTXlLaW5kOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIEJvdW5kc0NoYW5nZWQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8K
LXN0YXRpYyB2b2lkIEJvdW5kc0NoYW5nZWQoSElXZWJWaWV3KiBpblZpZXcsIFVJbnQzMiBpbk9w
dGlvbnMsIGNvbnN0IEhJUmVjdCogaW5PcmlnaW5hbEJvdW5kcywgY29uc3QgSElSZWN0KiBpbkN1
cnJlbnRCb3VuZHMpCi17Ci0gICAgaWYgKGluVmlldy0+ZldlYlZpZXcpCi0gICAgICAgIFN5bmNG
cmFtZShpblZpZXcpOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE93bmlu
Z1dpbmRvd0NoYW5nZWQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0YXRpYyB2
b2lkCi1Pd25pbmdXaW5kb3dDaGFuZ2VkKEhJV2ViVmlldyogdmlldywgV2luZG93UmVmIG9sZFdp
bmRvdywgV2luZG93UmVmIG5ld1dpbmRvdykKLXsKLSAgICBpZiAobmV3V2luZG93KSB7Ci0gICAg
ICAgIFdpbmRvd0F0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgICAgIAotICAgICAgICBPU1N0YXR1cyBl
cnIgPSBHZXRXaW5kb3dQcm9wZXJ0eShuZXdXaW5kb3csIE5TQXBwS2l0UHJvcGVydHlDcmVhdG9y
LCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiksIG51bGxwdHIs
ICZ2aWV3LT5mS2l0V2luZG93KTsKLSAgICAgICAgaWYgKGVyciAhPSBub0VycikgewotICAgICAg
ICAgICAgY29uc3QgRXZlbnRUeXBlU3BlYyBrV2luZG93RXZlbnRzW10gPSB7Ci0gICAgICAgICAg
ICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dDbG9zZWQgfSwKLSAgICAgICAgICAg
IHsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VNb3ZlZCB9LAotICAgICAgICAgICAgeyBr
RXZlbnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZVVwIH0sCi0gICAgICAgICAgICB7IGtFdmVudENs
YXNzTW91c2UsIGtFdmVudE1vdXNlRHJhZ2dlZCB9LAotICAgICAgICAgICAgeyBrRXZlbnRDbGFz
c01vdXNlLCBrRXZlbnRNb3VzZVdoZWVsTW92ZWQgfSwKLSAgICAgICAgICAgIHsga0V2ZW50Q2xh
c3NLZXlib2FyZCwga0V2ZW50UmF3S2V5RG93biB9LAotICAgICAgICAgICAgeyBrRXZlbnRDbGFz
c0tleWJvYXJkLCBrRXZlbnRSYXdLZXlSZXBlYXQgfSwKLSAgICAgICAgICAgIHsga0V2ZW50Q2xh
c3NLZXlib2FyZCwga0V2ZW50UmF3S2V5VXAgfSwKLSAgICAgICAgICAgIHsga0V2ZW50Q2xhc3ND
b250cm9sLCBrRXZlbnRDb250cm9sQ2xpY2sgfSwKLSAgICAgICAgICAgIH07Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHZpZXctPmZLaXRXaW5kb3cgPSBbW0NhcmJvbldpbmRvd0FkYXB0ZXIg
YWxsb2NdIGluaXRXaXRoQ2FyYm9uV2luZG93UmVmOiBuZXdXaW5kb3cgdGFraW5nT3duZXJzaGlw
OiBOTyBkaXNhYmxlT3JkZXJpbmc6Tk8gY2FyYm9uOllFU107Ci0gICAgICAgICAgICBTZXRXaW5k
b3dQcm9wZXJ0eShuZXdXaW5kb3csIE5TQXBwS2l0UHJvcGVydHlDcmVhdG9yLCBOU0NhcmJvbldp
bmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiksICZ2aWV3LT5mS2l0V2luZG93KTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgSW5zdGFsbFdpbmRvd0V2ZW50SGFuZGxlcihuZXdX
aW5kb3csIFdpbmRvd0hhbmRsZXIsIEdldEV2ZW50VHlwZUNvdW50KGtXaW5kb3dFdmVudHMpLCBr
V2luZG93RXZlbnRzLCBuZXdXaW5kb3csIG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBbW3ZpZXctPmZLaXRXaW5kb3cgY29udGVudFZpZXddIGFkZFN1YnZpZXc6dmlldy0+
ZldlYlZpZXddOwotICAgICAgICAKLSAgICAgICAgR2V0V2luZG93QXR0cmlidXRlcyhuZXdXaW5k
b3csICZhdHRycyk7Ci0gICAgICAgIHZpZXctPmZJc0NvbXBvc2l0ZWQgPSBhdHRycyAmIGtXaW5k
b3dDb21wb3NpdGluZ0F0dHJpYnV0ZTsKLSAgICAgICAgCi0gICAgICAgIFN5bmNGcmFtZSh2aWV3
KTsgICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIEJlIHN1cmUgdG8gZGV0YWNoIHRo
ZSBjb2NvYSB2aWV3LCB0b28uCi0gICAgICAgIGlmICh2aWV3LT5mV2ViVmlldykKLSAgICAgICAg
ICAgIFt2aWV3LT5mV2ViVmlldyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKLSAgICAgICAgCi0gICAg
ICAgIHZpZXctPmZLaXRXaW5kb3cgPSBudWxscHRyOyAvLyBicmVhayB0aGUgdGllcyB0aGF0IGJp
bmQKLSAgICB9Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gICAgV2lu
ZG93SGFuZGxlcgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgICBSZWRpcmVj
dCBtb3VzZSBldmVudHMgdG8gdGhlIHZpZXdzIGJlbmVhdGggdGhlbS4gVGhpcyBpcyByZXF1aXJl
ZCBmb3IgV2ViS2l0IHRvIHdvcmsKLS8vICAgIHByb3Blcmx5LiBXZSBpbnN0YWxsIGl0IG9uY2Ug
cGVyIHdpbmRvdy4gV2UgYWxzbyB0YXAgaW50byB3aW5kb3cgY2xvc2UgdG8gcmVsZWFzZQotLy8g
ICAgdGhlIE5TV2luZG93IHRoYXQgc2hhZG93cyBvdXIgQ2FyYm9uIHdpbmRvdy4KLS8vCi1zdGF0
aWMgT1NTdGF0dXMgV2luZG93SGFuZGxlcihFdmVudEhhbmRsZXJDYWxsUmVmIGluQ2FsbFJlZiwg
RXZlbnRSZWYgaW5FdmVudCwgdm9pZCogaW5Vc2VyRGF0YSkKLXsKLSAgICBXaW5kb3dSZWYgd2lu
ZG93ID0gKFdpbmRvd1JlZilpblVzZXJEYXRhOwotICAgIE9TU3RhdHVzIHJlc3VsdCA9IGV2ZW50
Tm90SGFuZGxlZEVycjsKLQotICAgIE5TV2luZG93KiBraXRXaW5kb3c7Ci0gICAgT1NTdGF0dXMg
ZXJyID0gbm9FcnI7Ci0gICAgTlNFdmVudCoga2l0RXZlbnQ7Ci0KLSAgICBzd2l0Y2ggKEdldEV2
ZW50Q2xhc3MoaW5FdmVudCkpIHsKLSAgICBjYXNlIGtFdmVudENsYXNzQ29udHJvbDoKLSAgICAg
ICAgc3dpdGNoIChHZXRFdmVudEtpbmQoaW5FdmVudCkpIHsKLSAgICAgICAgY2FzZSBrRXZlbnRD
b250cm9sQ2xpY2s6Ci0gICAgICAgICAgICBDYXJib25XaW5kb3dBZGFwdGVyICpraXRXaW5kb3c7
Ci0KLSAgICAgICAgICAgIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KHdpbmRvdywgTlNBcHBLaXRQ
cm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNpemVvZihOU1dpbmRv
dyAqKSwgbnVsbHB0ciwgJmtpdFdpbmRvdyk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBXZSBtdXN0IGJlIG91dHNpZGUgdGhlIEhJV2ViVmlldywgcmVsaW5xdWlzaCBmb2N1cy4K
LSAgICAgICAgICAgIFtraXRXaW5kb3cgcmVsaW5xdWlzaEZvY3VzXTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgY2FzZSBr
RXZlbnRDbGFzc0tleWJvYXJkOgotICAgICAgICAvLyBpZiB0aGUgZmlyc3QgcmVzcG9uZGVyIGlu
IHRoZSBraXQgd2luZG93IGlzIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZQotICAgICAgICAvLyB3
aW5kb3csIHdlIGFzc3VtZSBhIHN1YnZpZXcgb2YgdGhlIHdlYnZpZXcgaXMgZm9jdXNlZC4gd2Ug
bXVzdCBzZW5kCi0gICAgICAgIC8vIHRoZSBldmVudCB0byB0aGUgd2luZG93IHNvIHRoYXQgaXQg
Z29lcyB0aHJvdWdoIHRoZSBraXQncyBub3JtYWwgVFNNCi0gICAgICAgIC8vIGxvZ2ljLCBhbmQg
LS0gbW9yZSBpbXBvcnRhbnRseSAtLSBhbGxvd3MgYW55IGRlbGVnYXRlcyBhc3NvY2lhdGVkCi0g
ICAgICAgIC8vIHdpdGggdGhlIGZpcnN0IHJlc3BvbmRlciB0byBoYXZlIGEgY2hhbmNlIGF0IHRo
ZSBldmVudC4KLQotICAgICAgICBlcnIgPSBHZXRXaW5kb3dQcm9wZXJ0eSh3aW5kb3csIE5TQXBw
S2l0UHJvcGVydHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNX
aW5kb3cgKiksIG51bGxwdHIsICZraXRXaW5kb3cpOwotICAgICAgICBpZiAoZXJyID09IG5vRXJy
KSB7Ci0gICAgICAgICAgICBOU1Jlc3BvbmRlciogcmVzcG9uZGVyID0gW2tpdFdpbmRvdyBmaXJz
dFJlc3BvbmRlcl07Ci0gICAgICAgICAgICBpZiAocmVzcG9uZGVyICE9IGtpdFdpbmRvdykgewot
ICAgICAgICAgICAgICAgIGtpdEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChp
bkV2ZW50KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBba2l0V2luZG93IHNl
bmRFdmVudDpraXRFdmVudF07Ci0gICAgICAgICAgICAgICAgW2tpdEV2ZW50IHJlbGVhc2VdOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBrRXZlbnRDbGFz
c1dpbmRvdzoKLSAgICAgICAgCi0KLSAgICAgICAgZXJyID0gR2V0V2luZG93UHJvcGVydHkod2lu
ZG93LCBOU0FwcEtpdFByb3BlcnR5Q3JlYXRvciwgTlNDYXJib25XaW5kb3dQcm9wZXJ0eVRhZywg
c2l6ZW9mKE5TV2luZG93ICopLCBudWxscHRyLCAma2l0V2luZG93KTsKLSAgICAgICAgaWYgKGVy
ciA9PSBub0VycikgewotICAgICAgICAgICAgW2tpdFdpbmRvdyBfcmVtb3ZlV2luZG93UmVmXTsK
LSAgICAgICAgICAgIFtraXRXaW5kb3cgY2xvc2VdOwotICAgICAgICB9Ci0gICAgICAgIHJlc3Vs
dCA9IG5vRXJyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Uga0V2ZW50Q2xhc3NNb3VzZToK
LSAgICAgICAgc3dpdGNoIChHZXRFdmVudEtpbmQoaW5FdmVudCkpIHsKLSAgICAgICAgY2FzZSBr
RXZlbnRNb3VzZU1vdmVkOgotICAgICAgICAgICAgUG9pbnQgd2hlcmU7Ci0gICAgICAgICAgICBH
ZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVR
RFBvaW50LCBudWxscHRyLCBzaXplb2YoUG9pbnQpLCBudWxscHRyLCAmd2hlcmUpOwotCi0gICAg
ICAgICAgICBXaW5kb3dSZWYgdGVtcDsKLSAgICAgICAgICAgIEZpbmRXaW5kb3cod2hlcmUsICZ0
ZW1wKTsKLSAgICAgICAgICAgIGlmICh0ZW1wID09IHdpbmRvdykgewotICAgICAgICAgICAgICAg
IFJlY3QgYm91bmRzOwotICAgICAgICAgICAgICAgIEdldFdpbmRvd0JvdW5kcyh3aW5kb3csIGtX
aW5kb3dTdHJ1Y3R1cmVSZ24sICZib3VuZHMpOwotICAgICAgICAgICAgICAgIHdoZXJlLmggLT0g
Ym91bmRzLmxlZnQ7Ci0gICAgICAgICAgICAgICAgd2hlcmUudiAtPSBib3VuZHMudG9wOwotICAg
ICAgICAgICAgICAgIFNldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtV2luZG93
UmVmLCB0eXBlV2luZG93UmVmLCBzaXplb2YoV2luZG93UmVmKSwgJndpbmRvdyk7Ci0gICAgICAg
ICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1XaW5kb3dNb3Vz
ZUxvY2F0aW9uLCB0eXBlUURQb2ludCwgc2l6ZW9mKFBvaW50KSwgJndoZXJlKTsKLQotICAgICAg
ICAgICAgICAgIEhJVmlld1JlZiB2aWV3ID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgICAgIGVy
ciA9IEhJVmlld0dldFZpZXdGb3JNb3VzZUV2ZW50KEhJVmlld0dldFJvb3Qod2luZG93KSwgaW5F
dmVudCwgJnZpZXcpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gbm9FcnIgJiYgdmlldyAm
JiBISU9iamVjdElzT2ZDbGFzcygoSElPYmplY3RSZWYpdmlldywga0hJV2ViVmlld0NsYXNzSUQp
KQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBTZW5kRXZlbnRUb0V2ZW50VGFyZ2V0V2l0
aE9wdGlvbnMoaW5FdmVudCwgSElPYmplY3RHZXRFdmVudFRhcmdldCgoSElPYmplY3RSZWYpdmll
dyksIGtFdmVudFRhcmdldERvbnRQcm9wYWdhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2Uga0V2ZW50TW91c2VVcDoK
LSAgICAgICAgY2FzZSBrRXZlbnRNb3VzZURyYWdnZWQ6Ci0gICAgICAgIGNhc2Uga0V2ZW50TW91
c2VXaGVlbE1vdmVkOgotICAgICAgICAgICAgSElWaWV3UmVmIHZpZXcgPSBudWxscHRyOwotCi0g
ICAgICAgICAgICBlcnIgPSBISVZpZXdHZXRWaWV3Rm9yTW91c2VFdmVudChISVZpZXdHZXRSb290
KHdpbmRvdyksIGluRXZlbnQsICZ2aWV3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gbm9FcnIg
JiYgdmlldyAmJiBISU9iamVjdElzT2ZDbGFzcygoSElPYmplY3RSZWYpdmlldywga0hJV2ViVmll
d0NsYXNzSUQpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNlbmRFdmVudFRvRXZlbnRUYXJn
ZXRXaXRoT3B0aW9ucyhpbkV2ZW50LCBISU9iamVjdEdldEV2ZW50VGFyZ2V0KChISU9iamVjdFJl
Zil2aWV3KSwga0V2ZW50VGFyZ2V0RG9udFByb3BhZ2F0ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gU3luY0ZyYW1lCi0vLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgdm9pZCBTeW5jRnJhbWUoSElXZWJWaWV3
KiBpblZpZXcpCi17Ci0gICAgSElWaWV3UmVmIHBhcmVudCA9IEhJVmlld0dldFN1cGVydmlldyhp
blZpZXctPmZWaWV3UmVmKTsKLSAgICAKLSAgICBpZiAocGFyZW50KSB7Ci0gICAgICAgIGlmIChp
blZpZXctPmZJc0NvbXBvc2l0ZWQpIHsKLSAgICAgICAgICAgIEhJUmVjdCBmcmFtZTsKLSAgICAg
ICAgICAgIEhJUmVjdCBwYXJlbnRCb3VuZHM7Ci0gICAgICAgICAgICBOU1BvaW50IG9yaWdpbjsK
LQotICAgICAgICAgICAgSElWaWV3R2V0RnJhbWUoaW5WaWV3LT5mVmlld1JlZiwgJmZyYW1lKTsK
LSAgICAgICAgICAgIEhJVmlld0dldEJvdW5kcyhwYXJlbnQsICZwYXJlbnRCb3VuZHMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBvcmlnaW4ueCA9IGZyYW1lLm9yaWdpbi54OwotICAgICAg
ICAgICAgb3JpZ2luLnkgPSBwYXJlbnRCb3VuZHMuc2l6ZS5oZWlnaHQgLSBDR1JlY3RHZXRNYXhZ
KGZyYW1lKTsKLS8vICAgIHByaW50Zigic3luY2luZyB0byAoJWcgJWcpICglZyAlZylcbiIsIG9y
aWdpbi54LCBvcmlnaW4ueSwKLS8vICAgICAgICAgICAgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUu
c2l6ZS5oZWlnaHQpOwotICAgICAgICAgICAgW2luVmlldy0+ZldlYlZpZXcgc2V0RnJhbWVPcmln
aW46IG9yaWdpbl07Ci0gICAgICAgICAgICBbaW5WaWV3LT5mV2ViVmlldyBzZXRGcmFtZVNpemU6
ICooTlNTaXplKikmZnJhbWUuc2l6ZV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBH
cmFmUHRyIHBvcnQgPSBHZXRXaW5kb3dQb3J0KEdldENvbnRyb2xPd25lcihpblZpZXctPmZWaWV3
UmVmKSk7Ci0gICAgICAgICAgICBQaXhNYXBIYW5kbGUgcG9ydFBpeCA9IEdldFBvcnRQaXhNYXAo
cG9ydCk7Ci0gICAgICAgICAgICBSZWN0IGJvdW5kczsKLSAgICAgICAgICAgIEhJUmVjdCByb290
RnJhbWU7Ci0gICAgICAgICAgICBISVJlY3QgZnJhbWU7Ci0KLSAgICAgICAgICAgIEdldENvbnRy
b2xCb3VuZHMoaW5WaWV3LT5mVmlld1JlZiwgJmJvdW5kcyk7Ci0gICAgICAgICAgICBPZmZzZXRS
ZWN0KCZib3VuZHMsIC0oKipwb3J0UGl4KS5ib3VuZHMubGVmdCwgLSgqKnBvcnRQaXgpLmJvdW5k
cy50b3ApOwotCi0vLyAgICAgICAgICAgIHByaW50ZigiY29udHJvbCBsaXZlcyBhdCAlZCAlZCAl
ZCAlZCBpbiB3aW5kb3ctY29vcmRzXG4iLCBib3VuZHMudG9wLCBib3VuZHMubGVmdCwKLS8vICAg
ICAgICAgICAgICAgIGJvdW5kcy5ib3R0b20sIGJvdW5kcy5yaWdodCk7Ci0gIAotICAgICAgICAg
ICAgSElWaWV3R2V0RnJhbWUoSElWaWV3R2V0Um9vdChHZXRDb250cm9sT3duZXIoaW5WaWV3LT5m
Vmlld1JlZikpLCAmcm9vdEZyYW1lKTsKLQotICAgICAgICAgICAgZnJhbWUub3JpZ2luLnggPSBi
b3VuZHMubGVmdDsKLSAgICAgICAgICAgIGZyYW1lLm9yaWdpbi55ID0gcm9vdEZyYW1lLnNpemUu
aGVpZ2h0IC0gYm91bmRzLmJvdHRvbTsKLSAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGggPSBi
b3VuZHMucmlnaHQgLSBib3VuZHMubGVmdDsKLSAgICAgICAgICAgIGZyYW1lLnNpemUuaGVpZ2h0
ID0gYm91bmRzLmJvdHRvbSAtIGJvdW5kcy50b3A7Ci0KLS8vICAgICAgICAgICAgcHJpbnRmKCIg
ICBiZWZvcmUgZnJhbWUgY29udmVydCAoJWcgJWcpICglZyAlZylcbiIsIGZyYW1lLm9yaWdpbi54
LCBmcmFtZS5vcmlnaW4ueSwKLS8vICAgICAgICAgICAgICAgIGZyYW1lLnNpemUud2lkdGgsIGZy
YW1lLnNpemUuaGVpZ2h0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgW2luVmlldy0+Zldl
YlZpZXcgY29udmVydFJlY3Q6KihOU1JlY3QqKSZmcmFtZSBmcm9tVmlldzpuaWxdOwotCi0vLyAg
ICAgICAgICAgIHByaW50ZigiICAgbW92aW5nIHdlYiB2aWV3IHRvICglZyAlZykgKCVnICVnKVxu
IiwgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LAotLy8gICAgICAgICAgICAgICAgZnJh
bWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpOwotCi0gICAgICAgICAgICBbaW5WaWV3
LT5mV2ViVmlldyBzZXRGcmFtZU9yaWdpbjogKihOU1BvaW50KikmZnJhbWUub3JpZ2luXTsKLSAg
ICAgICAgICAgIFtpblZpZXctPmZXZWJWaWV3IHNldEZyYW1lU2l6ZTogKihOU1NpemUqKSZmcmFt
ZS5zaXplXTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyBTZXRGb2N1c1BhcnQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0
YXRpYyBPU1N0YXR1cyBTZXRGb2N1c1BhcnQoSElXZWJWaWV3KiB2aWV3LCBDb250cm9sUGFydENv
ZGUgZGVzaXJlZEZvY3VzLCBSZ25IYW5kbGUgaW52YWxpZFJnbiwgQm9vbGVhbiBmb2N1c0V2ZXJ5
dGhpbmcsIENvbnRyb2xQYXJ0Q29kZSogYWN0dWFsRm9jdXMpCi17Ci0gICAgTlNWaWV3ICpmcmVz
aGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldzsKLSAgICBTSW50MzIgcGFydENvZGVUb1JldHVybjsK
LQotICAgIC8vIERvIHdoYXQgQ2FyYm9uIGlzIHRlbGxpbmcgdXMgdG8gZG8uCi0gICAgaWYgKGRl
c2lyZWRGb2N1cyA9PSBrQ29udHJvbEZvY3VzTm9QYXJ0KSB7Ci0gICAgICAgIC8vIFJlbGlucXVp
c2ggdGhlIGtleWJvYXJkIGZvY3VzLgotICAgICAgICBSZWxpbnF1aXNoRm9jdXModmlldywgdHJ1
ZSk7IC8vIChhdXRvZGlzcGxheSA/IFlFUyA6IE5PKSk7Ci0gICAgICAgIGZyZXNobHlNYWRlRmly
c3RSZXNwb25kZXJWaWV3ID0gbmlsOwotICAgICAgICBwYXJ0Q29kZVRvUmV0dXJuID0ga0NvbnRy
b2xGb2N1c05vUGFydDsKLSAgICAgICAgLy8gTlNMb2coQCJSZWxpbnF1aXNoZWQgdGhlIGtleSBm
b2N1cyBiZWNhdXNlIHdlIGhhdmUgbm8gY2hvaWNlLiIpOwotICAgIH0gZWxzZSBpZiAoZGVzaXJl
ZEZvY3VzID09IGtDb250cm9sRm9jdXNOZXh0UGFydCB8fCBkZXNpcmVkRm9jdXMgPT0ga0NvbnRy
b2xGb2N1c1ByZXZQYXJ0KSB7Ci0gICAgICAgIEJPT0wgZ29Gb3J3YXJkID0gKGRlc2lyZWRGb2N1
cyA9PSBrQ29udHJvbEZvY3VzTmV4dFBhcnQpOwotCi0gICAgICAgIC8vIEFkdmFuY2UgdGhlIGtl
eWJvYXJkIGZvY3VzLCBtYXliZSByaWdodCBvZmYgb2YgdGhpcyB2aWV3LiAgTWF5YmUgYSBzdWJ2
aWV3IG9mIHRoaXMgb25lIGFscmVhZHkgaGFzIHRoZSBrZXlib2FyZCBmb2N1cywgbWF5YmUgbm90
LgotICAgICAgICBmcmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldyA9IEFkdmFuY2VGb2N1cyh2
aWV3LCBnb0ZvcndhcmQpOwotICAgICAgICBpZiAoZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZp
ZXcpCi0gICAgICAgICAgICBwYXJ0Q29kZVRvUmV0dXJuID0gZGVzaXJlZEZvY3VzOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBwYXJ0Q29kZVRvUmV0dXJuID0ga0NvbnRyb2xGb2N1c05vUGFy
dDsKLSAgICAgICAgLy8gTlNMb2coZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcgPyBAIkFk
dmFuY2VkIHRoZSBrZXkgZm9jdXMuIiA6IEAiUmVsaW5xdWlzaGVkIHRoZSBrZXkgZm9jdXMuIik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2hhdCdzIHRoaXM/Ci0gICAgICAgIGlmIChkZXNp
cmVkRm9jdXMgIT0ga0NvbnRyb2xJbmRpY2F0b3JQYXJ0KQotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGZyZXNobHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3ID0gbmls
OwotICAgICAgICBwYXJ0Q29kZVRvUmV0dXJuID0gZGVzaXJlZEZvY3VzOwotICAgIH0KLQotICAg
IHZpZXctPmZGaXJzdFJlc3BvbmRlciA9IGZyZXNobHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3Owot
Ci0gICAgKmFjdHVhbEZvY3VzID0gcGFydENvZGVUb1JldHVybjsKLQotICAgIC8vIERvbmUuCi0g
ICAgcmV0dXJuIG5vRXJyOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEFk
dmFuY2VGb2N1cwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotc3RhdGljIE5TVmll
dyogQWR2YW5jZUZvY3VzKEhJV2ViVmlldyogdmlldywgYm9vbCBmb3J3YXJkKQotewotICAgIE5T
UmVzcG9uZGVyKiBvbGRGaXJzdFJlc3BvbmRlcjsKLSAgICBOU1ZpZXcqIGN1cnJlbnRLZXlWaWV3
OwotICAgIE5TVmlldyogdmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyOwotICAgIAotICAgIC8vIEZv
Y3VzIG9uIHNvbWUgcGFydCAoc3Vidmlldykgb2YgdGhpcyBjb250cm9sICh2aWV3KS4KLSAgICAv
LyBNYXliZSBhIHN1YnZpZXcgb2YgdGhpcyBvbmUgYWxyZWFkeSBoYXMgdGhlIGtleWJvYXJkIGZv
Y3VzLCBtYXliZSBub3QuCi0gICAgCi0gICAgb2xkRmlyc3RSZXNwb25kZXIgPSBbdmlldy0+Zktp
dFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07Ci0KLSAgICAvLyBJZiB3ZSB0YWIgb3V0IG9mIG91ciBO
U1ZpZXcsIGl0IHdpbGwgbm8gbG9uZ2VyIGJlIHRoZSByZXNwb25kZXIKLSAgICAvLyB3aGVuIHdl
IGdldCBoZXJlLiBXZSdsbCB0cnkgdGhpcyB0cmljayBmb3Igbm93LiBXZSBtaWdodCBuZWVkIHRv
Ci0gICAgLy8gdGFnIHRoZSB2aWV3IGFwcHJvcHJpYXRlbHkuCi0KLSAgICBpZiAodmlldy0+ZkZp
cnN0UmVzcG9uZGVyICYmICgoTlNSZXNwb25kZXIqKXZpZXctPmZGaXJzdFJlc3BvbmRlciAhPSBv
bGRGaXJzdFJlc3BvbmRlcikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlm
IChbb2xkRmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0pIHsKLSAg
ICAgICAgTlNWaWV3KiB0ZW50YXRpdmVOZXdLZXlWaWV3OwotCi0gICAgICAgIC8vIFNvbWUgdmll
dyBpbiB0aGlzIHdpbmRvdyBhbHJlYWR5IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMuICBJdCBiZXR0
ZXIgYXQgbGVhc3QgYmUgYSBzdWJ2aWV3IG9mIHRoaXMgb25lLgotICAgICAgICBOU1ZpZXcqIG9s
ZEZpcnN0UmVzcG9uZGVyVmlldyA9IChOU1ZpZXcgKilvbGRGaXJzdFJlc3BvbmRlcjsKLSAgICAg
ICAgQVNTRVJUKFtvbGRGaXJzdFJlc3BvbmRlclZpZXcgaXNEZXNjZW5kYW50T2Y6dmlldy0+Zldl
YlZpZXddKTsKLQotICAgICAgICBpZiAob2xkRmlyc3RSZXNwb25kZXJWaWV3ICE9IHZpZXctPmZG
aXJzdFJlc3BvbmRlciAmJiAhW29sZEZpcnN0UmVzcG9uZGVyVmlldyBpc0Rlc2NlbmRhbnRPZjp2
aWV3LT5mRmlyc3RSZXNwb25kZXJdKSB7Ci0gICAgICAgICAgICAvLyBEZXNwaXRlIG91ciBlZmZv
cnRzIHRvIHJlY29yZCB3aGF0IHZpZXcgd2UgbWFkZSB0aGUgZmlyc3QgcmVzcG9uZGVyCi0gICAg
ICAgICAgICAvLyAoZm9yIHVzZSBpbiB0aGUgbmV4dCBwYXJhZ3JhcGgpIHdlIGNvdWxkbid0IGtl
ZXAgdXAgYmVjYXVzZSB0aGUgdXNlcgotICAgICAgICAgICAgLy8gaGFzIGNsaWNrZWQgaW4gYSB0
ZXh0IGZpZWxkIHRvIG1ha2UgaXQgdGhlIGtleSBmb2N1cywgaW5zdGVhZCBvZiB1c2luZwotICAg
ICAgICAgICAgLy8gdGhlIHRhYiBrZXkuIEZpbmQgYSBjb250cm9sIG9uIHdoaWNoIGl0J3MgcmVh
c29uYWJsZSB0byBpbnZva2UKLSAgICAgICAgICAgIC8vIC1bTlNWaWV3IG5leHRWYWxpZEtleVZp
ZXddLCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBmYWN0IHRoYXQKLSAgICAgICAgICAgIC8vIE5T
VGV4dEZpZWxkcyBhbHdheXMgcGFzcyBvbiBmaXJzdC1yZXNwb25kZXJzaGlwIHRvIGEgdGVtcG9y
YXJpbHktCi0gICAgICAgICAgICAvLyBjb250YWluZWQgTlNUZXh0Vmlldy4KLQotICAgICAgICAg
ICAgTlNWaWV3ICp2aWV3QmVpbmdUZXN0ZWQ7Ci0gICAgICAgICAgICBjdXJyZW50S2V5VmlldyA9
IG9sZEZpcnN0UmVzcG9uZGVyVmlldzsKLSAgICAgICAgICAgIHZpZXdCZWluZ1Rlc3RlZCA9IGN1
cnJlbnRLZXlWaWV3OwotICAgICAgICAgICAgd2hpbGUgKHZpZXdCZWluZ1Rlc3RlZCAhPSB2aWV3
LT5mV2ViVmlldykgewotICAgICAgICAgICAgICAgIGlmIChbdmlld0JlaW5nVGVzdGVkIGlzS2lu
ZE9mQ2xhc3M6W05TVGV4dEZpZWxkIGNsYXNzXV0pIHsKLSAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudEtleVZpZXcgPSB2aWV3QmVpbmdUZXN0ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2aWV3QmVpbmdUZXN0ZWQgPSBb
dmlld0JlaW5nVGVzdGVkIHN1cGVydmlld107Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAvLyBXZSByZWNvcmRlZCB3aGljaCB2aWV3IHdlIG1hZGUgaW50byB0
aGUgZmlyc3QgcmVzcG9uZGVyIHRoZQotICAgICAgICAgICAgLy8gbGFzdCB0aW1lIHRoZSB1c2Vy
IGhpdCB0aGUgdGFiIGtleSwgYW5kIG5vdGhpbmcgaGFzIGludmFsaWRhdGVkCi0gICAgICAgICAg
ICAvLyBvdXIgcmVjb3JkZWQgdmFsdWUgc2luY2UuCi0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGN1cnJlbnRLZXlWaWV3ID0gdmlldy0+ZkZpcnN0UmVzcG9uZGVyOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gVHJ5IHRvIG1vdmUgb24gdG8gdGhlIG5leHQgb3IgcHJldmlvdXMga2V5IHZpZXcu
ICBXZSB1c2UgdGhlIGxhYm9yaW91c2x5Ci0gICAgICAgIC8vIHJlY29yZGVkL2ZpZ3VyZWQgY3Vy
cmVudEtleVZpZXcgaW5zdGVhZCBvZiBqdXN0IG9sZEZpcnN0UmVzcG9uZGVyIGFzIHRoZQotICAg
ICAgICAvLyBqdW1waW5nLW9mZi1wb2ludCB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIG5leHQgdmFs
aWQga2V5IHZpZXcuIFRoaXMgaXMgc28KLSAgICAgICAgLy8gd2UgZG9uJ3QgZ2V0IGZvb2xlZCBp
ZiB3ZSByZWNlbnRseSBtYWRlIHNvbWUgdmlldyB0aGUgZmlyc3QgcmVzcG9uZGVyLCBidXQKLSAg
ICAgICAgLy8gaXQgcGFzc2VkIG9uIGZpcnN0LXJlc3BvbmRlci1uZXNzIHRvIHNvbWUgdGVtcG9y
YXJ5IHN1YnZpZXcuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFlvdSBjYW4ndCBwdXQgbm9ybWFs
IHZpZXdzIGluIGEgd2luZG93IHdpdGggQ2FyYm9uLWNvbnRyb2wtd3JhcHBlZCB2aWV3cy4KLSAg
ICAgICAgLy8gU3R1ZmYgbGlrZSB0aGlzIHdvdWxkIGJyZWFrLiBNLlAuIE5vdGljZSAtIDEyLzIv
MDAKLQotICAgICAgICB0ZW50YXRpdmVOZXdLZXlWaWV3ID0gZm9yd2FyZCA/IFtjdXJyZW50S2V5
VmlldyBuZXh0VmFsaWRLZXlWaWV3XSA6IFtjdXJyZW50S2V5VmlldyBwcmV2aW91c1ZhbGlkS2V5
Vmlld107Ci0gICAgICAgIGlmICh0ZW50YXRpdmVOZXdLZXlWaWV3ICYmIFt0ZW50YXRpdmVOZXdL
ZXlWaWV3IGlzRGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSkgewotICAgICAgICAgICAgLy8g
VGhlIHVzZXIgaGFzIHRhYmJlZCB0byBhbm90aGVyIHN1YnZpZXcgb2YgdGhpcyBjb250cm9sIHZp
ZXcuICBDaGFuZ2UgdGhlIGtleWJvYXJkIGZvY3VzLgotICAgICAgICAgICAgLy9OU0xvZyhAIlRh
YmJlZCB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBrZXkgdmlldy4iKTsKLQotICAgICAgICAgICAg
W3ZpZXctPmZLaXRXaW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnRlbnRhdGl2ZU5ld0tleVZpZXdd
OwotICAgICAgICAgICAgdmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyID0gdGVudGF0aXZlTmV3S2V5
VmlldzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoZSB1c2VyIGhhcyB0YWJi
ZWQgcGFzdCB0aGUgc3Vidmlld3Mgb2YgdGhpcyBjb250cm9sIHZpZXcuICBUaGUgd2luZG93IGlz
IHRoZSBmaXJzdCByZXNwb25kZXIgbm93LgotICAgICAgICAgICAgLy9OU0xvZyhAIlRhYmJlZCBw
YXN0IHRoZSBmaXJzdCBvciBsYXN0IGtleSB2aWV3LiIpOwotICAgICAgICAgICAgW3ZpZXctPmZL
aXRXaW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnZpZXctPmZLaXRXaW5kb3ddOwotICAgICAgICAg
ICAgdmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyID0gbmlsOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gTm8gdmlldyBpbiB0aGlzIHdpbmRvdyBoYXMgdGhlIGtleWJvYXJkIGZv
Y3VzLiAgVGhpcyB2aWV3IHNob3VsZAotICAgICAgICAvLyB0cnkgdG8gc2VsZWN0IG9uZSBvZiBp
dHMga2V5IHN1YnZpZXdzLiBXZSdyZSBub3QgaW50ZXJlc3RlZCBpbgotICAgICAgICAvLyB0aGUg
c3Vidmlld3Mgb2Ygc2libGluZyB2aWV3cyBoZXJlLgotCi0gICAgICAgIC8vIE5TTG9nKEAiTm8g
a2V5Ym9hcmQgZm9jdXMgaW4gd2luZG93LiBBdHRlbXB0aW5nIHRvIHNldC4uLiIpOwotCi0gICAg
ICAgIE5TVmlldyAqdGVudGF0aXZlTmV3S2V5VmlldzsKLSAgICAgICAgQVNTRVJUKG9sZEZpcnN0
UmVzcG9uZGVyID09IHZpZXctPmZLaXRXaW5kb3cpOwotICAgICAgICBpZiAoW3ZpZXctPmZXZWJW
aWV3IGFjY2VwdHNGaXJzdFJlc3BvbmRlcl0pCi0gICAgICAgICAgICB0ZW50YXRpdmVOZXdLZXlW
aWV3ID0gdmlldy0+ZldlYlZpZXc7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRlbnRhdGl2
ZU5ld0tleVZpZXcgPSBbdmlldy0+ZldlYlZpZXcgbmV4dFZhbGlkS2V5Vmlld107Ci0gICAgICAg
IGlmICh0ZW50YXRpdmVOZXdLZXlWaWV3ICYmIFt0ZW50YXRpdmVOZXdLZXlWaWV3IGlzRGVzY2Vu
ZGFudE9mOnZpZXctPmZXZWJWaWV3XSkgewotICAgICAgICAgICAgLy8gVGhpcyBjb250cm9sIHZp
ZXcgaGFzIGF0IGxlYXN0IG9uZSBzdWJ2aWV3IHRoYXQgY2FuIHRha2UgdGhlIGtleWJvYXJkIGZv
Y3VzLgotICAgICAgICAgICAgaWYgKCFmb3J3YXJkKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhl
IHVzZXIgaGFzIHRhYmJlZCBpbnRvIHRoaXMgY29udHJvbCB2aWV3IGJhY2t3YXJkcy4gRmluZAot
ICAgICAgICAgICAgICAgIC8vIGFuZCBzZWxlY3QgdGhlIGxhc3Qgc3VidmlldyBvZiB0aGlzIG9u
ZSB0aGF0IGNhbiB0YWtlIHRoZQotICAgICAgICAgICAgICAgIC8vIGtleWJvYXJkIGZvY3VzLiBX
YXRjaCBvdXQgZm9yIGxvb3BzIG9mIHZhbGlkIGtleSB2aWV3cy4KLQotICAgICAgICAgICAgICAg
IE5TVmlldyAqZmlyc3RUZW50YXRpdmVOZXdLZXlWaWV3ID0gdGVudGF0aXZlTmV3S2V5VmlldzsK
LSAgICAgICAgICAgICAgICBOU1ZpZXcgKm5leHRUZW50YXRpdmVOZXdLZXlWaWV3ID0gW3RlbnRh
dGl2ZU5ld0tleVZpZXcgbmV4dFZhbGlkS2V5Vmlld107Ci0gICAgICAgICAgICAgICAgd2hpbGUg
KG5leHRUZW50YXRpdmVOZXdLZXlWaWV3ICYmIFtuZXh0VGVudGF0aXZlTmV3S2V5VmlldyBpc0Rl
c2NlbmRhbnRPZjp2aWV3LT5mV2ViVmlld10gJiYgbmV4dFRlbnRhdGl2ZU5ld0tleVZpZXcgIT0g
Zmlyc3RUZW50YXRpdmVOZXdLZXlWaWV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRlbnRhdGl2
ZU5ld0tleVZpZXcgPSBuZXh0VGVudGF0aXZlTmV3S2V5VmlldzsKLSAgICAgICAgICAgICAgICAg
ICAgbmV4dFRlbnRhdGl2ZU5ld0tleVZpZXcgPSBbdGVudGF0aXZlTmV3S2V5VmlldyBuZXh0VmFs
aWRLZXlWaWV3XTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gU2V0IHRoZSBrZXlib2FyZCBmb2N1cy4KLSAgICAgICAgICAgIC8vTlNMb2coQCJU
YWJiZWQgaW50byB0aGUgZmlyc3Qgb3IgbGFzdCBrZXkgdmlldy4iKTsKLSAgICAgICAgICAgIFt2
aWV3LT5mS2l0V2luZG93IG1ha2VGaXJzdFJlc3BvbmRlcjp0ZW50YXRpdmVOZXdLZXlWaWV3XTsK
LSAgICAgICAgICAgIHZpZXdXZU1hZGVGaXJzdFJlc3BvbmRlciA9IHRlbnRhdGl2ZU5ld0tleVZp
ZXc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNvbnRyb2wgdmlldyBo
YXMgbm8gc3Vidmlld3MgdGhhdCBjYW4gdGFrZSB0aGUga2V5Ym9hcmQgZm9jdXMuCi0gICAgICAg
ICAgICAvL05TTG9nKEAiQ2FuJ3QgdGFiIGludG8gdGhpcyB2aWV3LiIpOwotICAgICAgICAgICAg
dmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyID0gbmlsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gRG9uZS4KLSAgICByZXR1cm4gdmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyOwotfQotCi0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUmVsaW5xdWlzaEZvY3VzCi0vLy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgdm9pZCBSZWxpbnF1aXNoRm9jdXMoSElXZWJW
aWV3KiB2aWV3LCBib29sIGluQXV0b2Rpc3BsYXkpCi17Ci0gICAgTlNSZXNwb25kZXIqIGZpcnN0
UmVzcG9uZGVyOwotCi0gICAgLy8gQXBwYXJlbnRseSBDYXJib24gdGhpbmtzIHRoYXQgc29tZSBz
dWJ2aWV3IG9mIHRoaXMgY29udHJvbCB2aWV3IGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMsCi0gICAg
Ly8gb3Igd2Ugd291bGRuJ3QgYmUgYmVpbmcgYXNrZWQgdG8gcmVsaW5xdWlzaCBmb2N1cy4KLQot
ICAgIGZpcnN0UmVzcG9uZGVyID0gW3ZpZXctPmZLaXRXaW5kb3cgZmlyc3RSZXNwb25kZXJdOwot
ICAgIGlmIChbZmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFzczpbTlNWaWV3IGNsYXNzXV0pIHsK
LSAgICAgICAgLy8gU29tZSBzdWJ2aWV3IG9mIHRoaXMgY29udHJvbCB2aWV3IHJlYWxseSBpcyB0
aGUgZmlyc3QgcmVzcG9uZGVyIHJpZ2h0IG5vdy4KLSAgICAgICAgQVNTRVJUKFsoTlNWaWV3ICop
Zmlyc3RSZXNwb25kZXIgaXNEZXNjZW5kYW50T2Y6dmlldy0+ZldlYlZpZXddKTsKLQotICAgICAg
ICAvLyBNYWtlIHRoZSB3aW5kb3cgdGhlIGZpcnN0IHJlc3BvbmRlciwgc28gdGhhdCBubyB2aWV3
IGlzIHRoZSBrZXkgdmlldy4KLSAgICAgICAgW3ZpZXctPmZLaXRXaW5kb3cgbWFrZUZpcnN0UmVz
cG9uZGVyOnZpZXctPmZLaXRXaW5kb3ddOwotCi0gICAgICAgIC8vIElmIHRoaXMgY29udHJvbCBp
cyBub3QgYWxsb3dlZCB0byBkbyBhdXRvZGlzcGxheSwgZG9uJ3QgbGV0Ci0gICAgICAgIC8vIGl0
IGF1dG9kaXNwbGF5IGFueSBqdXN0LWNoYW5nZWQgZm9jdXMgcmluZ3Mgb3IgdGV4dCBvbiB0aGUK
LSAgICAgICAgLy8gbmV4dCBnbyBhcm91bmQgdGhlIGV2ZW50IGxvb3AuIEknbSBwcm9iYWJseSBj
bGVhcmluZyBtb3JlCi0gICAgICAgIC8vIGRpcnR5IHJlY3RzIHRoYW4gSSBoYXZlIHRvLCBidXQg
aXQgZG9lc24ndCBzZWVtIHRvIGh1cnQgaW4KLSAgICAgICAgLy8gdGhlIHByaW50IHBhbmVsIGFj
Y2Vzc29yeSB2aWV3IGNhc2UsIGFuZCBJIGRvbid0IGhhdmUgdGltZQotICAgICAgICAvLyB0byBm
aWd1cmUgb3V0IGV4YWN0bHkgd2hhdCAtW05TQ2VsbCBfc2V0S2V5Ym9hcmRGb2N1c1JpbmdOZWVk
c0Rpc3BsYXldCi0gICAgICAgIC8vIGlzIGRvaW5nIHdoZW4gaW52b2tlZCBpbmRpcmVjdGx5IGZy
b20gLW1ha2VGaXJzdFJlc3BvbmRlciB1cCBhYm92ZS4gTS5QLiBOb3RpY2UgLSAxMi80LzAwCi0K
LSAgICAgICAgaWYgKCFpbkF1dG9kaXNwbGF5KQotICAgICAgICAgICAgW1t2aWV3LT5mV2ViVmll
dyBvcGFxdWVBbmNlc3Rvcl0gX2NsZWFyRGlydHlSZWN0c0ZvclRyZWVdOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIFRoZSBDb2NvYSBmaXJzdCByZXNwb25kZXIgZG9lcyBub3QgY29ycmVzcG9u
ZCB0byB0aGUgQ2FyYm9uCi0gICAgICAgIC8vIGNvbnRyb2wgdGhhdCBoYXMgdGhlIGtleWJvYXJk
IGZvY3VzLiBUaGlzIGNhbiBoYXBwZW4gd2hlbgotICAgICAgICAvLyB5b3UndmUgY2xvc2VkIGEg
ZGlhbG9nIGJ5IGhpdHRpbmcgcmV0dXJuIGluIGFuIE5TVGV4dFZpZXcKLSAgICAgICAgLy8gdGhh
dCdzIGEgc3VidmlldyBvZiB0aGlzIG9uZTsgQ29jb2EgY2xvc2VkIHRoZSB3aW5kb3csIGFuZAot
ICAgICAgICAvLyBub3cgQ2FyYm9uIGlzIHRlbGxpbmcgdGhpcyBjb250cm9sIHRvIHJlbGlucXVp
c2ggdGhlIGZvY3VzCi0gICAgICAgIC8vIGFzIGl0J3MgYmVpbmcgZGlzcG9zZWQuIFRoZXJlJ3Mg
bm90aGluZyB0byBkby4KLQotICAgICAgICBBU1NFUlQoZmlyc3RSZXNwb25kZXIgPT0gdmlldy0+
ZktpdFdpbmRvdyk7Ci0gICAgfQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
IEFjdGl2ZVN0YXRlQ2hhbmdlZAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotc3Rh
dGljIHZvaWQgQWN0aXZlU3RhdGVDaGFuZ2VkKEhJV2ViVmlldyogdmlldykKLXsKLSAgICBpZiAo
W3ZpZXctPmZXZWJWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0RW5hYmxlZCld
KSB7Ci0gICAgICAgIFsoTlNDb250cm9sKil2aWV3LT5mV2ViVmlldyBzZXRFbmFibGVkOiBJc0Nv
bnRyb2xFbmFibGVkKHZpZXctPmZWaWV3UmVmKV07Ci0gICAgICAgIEhJVmlld1NldE5lZWRzRGlz
cGxheSh2aWV3LT5mVmlld1JlZiwgdHJ1ZSk7Ci0gICAgfQotfQotCi0KLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8gUHJvY2Vzc0NvbW1hbmQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotLy8KLXN0YXRpYyBPU1N0YXR1cyBQcm9jZXNzQ29tbWFuZChISVdlYlZpZXcqIGluVmll
dywgY29uc3QgSElDb21tYW5kKiBpbkNvbW1hbmQpCi17Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0g
ZXZlbnROb3RIYW5kbGVkRXJyOwotICAgIE5TUmVzcG9uZGVyKiByZXNwOwotICAgIAotICAgIHJl
c3AgPSBbaW5WaWV3LT5mS2l0V2luZG93IGZpcnN0UmVzcG9uZGVyXTsKLQotICAgIGlmIChbcmVz
cCBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgewotICAgICAgICBOU1ZpZXcqIHJlc3BW
aWV3ID0gKE5TVmlldyopcmVzcDsKLQotICAgICAgICBpZiAocmVzcFZpZXcgPT0gaW5WaWV3LT5m
V2ViVmlldyB8fCBbcmVzcFZpZXcgaXNEZXNjZW5kYW50T2Y6IGluVmlldy0+ZldlYlZpZXddKSB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGluQ29tbWFuZC0+Y29tbWFuZElEKSB7Ci0gICAgICAgICAg
ICBjYXNlIGtISUNvbW1hbmRDdXQ6Ci0gICAgICAgICAgICBjYXNlIGtISUNvbW1hbmRDb3B5Ogot
ICAgICAgICAgICAgY2FzZSBrSElDb21tYW5kUGFzdGU6Ci0gICAgICAgICAgICBjYXNlIGtISUNv
bW1hbmRDbGVhcjoKLSAgICAgICAgICAgIGNhc2Uga0hJQ29tbWFuZFNlbGVjdEFsbDogewotICAg
ICAgICAgICAgICAgIFNFTCBzZWxlY3RvciA9IF9OU1NlbGVjdG9yRm9ySElDb21tYW5kKGluQ29t
bWFuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKFtyZXNwVmlldyByZXNwb25kc1RvU2VsZWN0b3I6
c2VsZWN0b3JdKSB7Ci0gICAgICAgICAgICAgICAgICAgIFtyZXNwVmlldyBwZXJmb3JtU2VsZWN0
b3I6c2VsZWN0b3Igd2l0aE9iamVjdDpuaWxdOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBub0VycjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBVcGRhdGVD
b21tYW5kU3RhdHVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgT1NT
dGF0dXMKLVVwZGF0ZUNvbW1hbmRTdGF0dXMoSElXZWJWaWV3KiBpblZpZXcsIGNvbnN0IEhJQ29t
bWFuZCogaW5Db21tYW5kKQotewotICAgIE9TU3RhdHVzIHJlc3VsdCA9IGV2ZW50Tm90SGFuZGxl
ZEVycjsKLSAgICBNZW51SXRlbVByb3h5KiBwcm94eSA9IG51bGxwdHI7Ci0gICAgTlNSZXNwb25k
ZXIqIHJlc3A7Ci0gICAgCi0gICAgcmVzcCA9IFtpblZpZXctPmZLaXRXaW5kb3cgZmlyc3RSZXNw
b25kZXJdOwotICAgIAotICAgIGlmIChbcmVzcCBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3Nd
XSkgewotICAgICAgICBOU1ZpZXcqIHJlc3BWaWV3ID0gKE5TVmlldyopcmVzcDsKLQotICAgICAg
ICBpZiAoKHJlc3BWaWV3ID09IGluVmlldy0+ZldlYlZpZXcgfHwgW3Jlc3BWaWV3IGlzRGVzY2Vu
ZGFudE9mOiBpblZpZXctPmZXZWJWaWV3XSkgJiYgaW5Db21tYW5kLT5hdHRyaWJ1dGVzICYga0hJ
Q29tbWFuZEZyb21NZW51KSB7Ci0gICAgICAgICAgICBTRUwgc2VsZWN0b3IgPSBfTlNTZWxlY3Rv
ckZvckhJQ29tbWFuZChpbkNvbW1hbmQpOwotICAgIAotICAgICAgICAgICAgaWYgKHNlbGVjdG9y
ICYmIFtyZXNwIHJlc3BvbmRzVG9TZWxlY3Rvcjogc2VsZWN0b3JdKSB7Ci0gICAgICAgICAgICAg
ICAgcHJveHkgPSBbW01lbnVJdGVtUHJveHkgYWxsb2NdIGluaXRXaXRoQWN0aW9uOiBzZWxlY3Rv
cl07Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIENhbid0IHVzZSAt
cGVyZm9ybVNlbGVjdG9yOndpdGhPYmplY3Q6IGhlcmUgYmVjYXVzZSB0aGUgbWV0aG9kIHdlJ3Jl
IGNhbGxpbmcgcmV0dXJucyBCT09MLCB3aGlsZQotICAgICAgICAgICAgICAgIC8vIC1wZXJmb3Jt
U2VsZWN0b3I6d2l0aE9iamVjdDoncyByZXR1cm4gdmFsdWUgaXMgYXNzdW1lZCB0byBiZSBhbiBp
ZC4KLSAgICAgICAgICAgICAgICBpZiAod3RmT2JqY01zZ1NlbmQ8Qk9PTD4ocmVzcCwgQHNlbGVj
dG9yKHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KSwgcHJveHkpKQotICAgICAgICAgICAgICAg
ICAgICBFbmFibGVNZW51SXRlbShpbkNvbW1hbmQtPm1lbnUubWVudVJlZiwgaW5Db21tYW5kLT5t
ZW51Lm1lbnVJdGVtSW5kZXgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgRGlzYWJsZU1lbnVJdGVtKGluQ29tbWFuZC0+bWVudS5tZW51UmVmLCBpbkNvbW1hbmQt
Pm1lbnUubWVudUl0ZW1JbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG5vRXJyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIGlmIChwcm94eSkKLSAgICAgICAgW3Byb3h5IHJlbGVhc2VdOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotLy8gQmxhdGFudGx5IHN0b2xlbiBmcm9tIEFwcEtpdCBhbmQgY3JvcHBl
ZCBhIGJpdAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIF9OU1NlbGVjdG9yRm9y
SElDb21tYW5kCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgU0VMIF9O
U1NlbGVjdG9yRm9ySElDb21tYW5kKGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5kKQotewotICAg
IHN3aXRjaCAoaW5Db21tYW5kLT5jb21tYW5kSUQpIHsKLSAgICBjYXNlIGtISUNvbW1hbmRVbmRv
OgotICAgICAgICByZXR1cm4gQHNlbGVjdG9yKHVuZG86KTsKLSAgICBjYXNlIGtISUNvbW1hbmRS
ZWRvOgotICAgICAgICByZXR1cm4gQHNlbGVjdG9yKHJlZG86KTsKLSAgICBjYXNlIGtISUNvbW1h
bmRDdXQ6Ci0gICAgICAgIHJldHVybiBAc2VsZWN0b3IoY3V0Oik7Ci0gICAgY2FzZSBrSElDb21t
YW5kQ29weToKLSAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihjb3B5Oik7Ci0gICAgY2FzZSBrSElD
b21tYW5kUGFzdGU6Ci0gICAgICAgIHJldHVybiBAc2VsZWN0b3IocGFzdGU6KTsKLSAgICBjYXNl
IGtISUNvbW1hbmRDbGVhcjoKLSAgICAgICAgcmV0dXJuIEBzZWxlY3RvcihkZWxldGU6KTsKLSAg
ICBjYXNlIGtISUNvbW1hbmRTZWxlY3RBbGw6Ci0gICAgICAgIHJldHVybiBAc2VsZWN0b3Ioc2Vs
ZWN0QWxsOik7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8gICAgSElXZWJWaWV3RXZlbnRIYW5kbGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLyAgICBPdXIgb2JqZWN0J3MgdmlydHVhbCBldmVudCBoYW5kbGVyIG1ldGhvZC4gSSdt
IG5vdCBzdXJlIGlmIHdlIG5lZWQgdGhpcyB0aGVzZSBkYXlzLgotLy8gICAgV2UgdXNlZCB0byBk
byB2YXJpb3VzIHRoaW5ncyB3aXRoIGl0LCBidXQgdGhvc2UgZGF5cyBhcmUgbG9uZyBnb25lLi4u
Ci0vLwotc3RhdGljIE9TU3RhdHVzCi1ISVdlYlZpZXdFdmVudEhhbmRsZXIoRXZlbnRIYW5kbGVy
Q2FsbFJlZiBpbkNhbGxSZWYsIEV2ZW50UmVmIGluRXZlbnQsIHZvaWQgKmluVXNlckRhdGEpCi17
Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOwotICAgIEhJUG9pbnQg
d2hlcmU7Ci0gICAgT1NUeXBlIHRhZzsKLSAgICB2b2lkICpwdHI7Ci0gICAgU2l6ZSBzaXplOwot
ICAgIFVJbnQzMiBmZWF0dXJlczsKLSAgICBSZ25IYW5kbGUgcmVnaW9uID0gbnVsbHB0cjsKLSAg
ICBDb250cm9sUGFydENvZGUgcGFydDsKLSAgICBISVdlYlZpZXcqIHZpZXcgPSAoSElXZWJWaWV3
KilpblVzZXJEYXRhOwotCi0gICAgLy8gW05TQXBwIHNldFdpbmRvd3NOZWVkVXBkYXRlOllFU10g
bXVzdCBiZSBjYWxsZWQgYmVmb3JlIGV2ZW50cyBzbyB0aGF0IEFjdGl2YXRlVFNNRG9jdW1lbnQg
aXMgY2FsbGVkIHRvIHNldCBhbiBhY3RpdmUgZG9jdW1lbnQuIAotICAgIC8vIFdpdGhvdXQgYW4g
YWN0aXZlIGRvY3VtZW50LCBUU00gd2lsbCB1c2UgYSBkZWZhdWx0IGRvY3VtZW50IHdoaWNoIHVz
ZXMgYSBib3R0b20tbGluZSBpbnB1dCB3aW5kb3cgd2hpY2ggd2UgZG9uJ3Qgd2FudC4KLSAgICBb
TlNBcHAgc2V0V2luZG93c05lZWRVcGRhdGU6WUVTXTsKLSAgICAgICAgCi0gICAgc3dpdGNoIChH
ZXRFdmVudENsYXNzKGluRXZlbnQpKSB7Ci0gICAgY2FzZSBrRXZlbnRDbGFzc0hJT2JqZWN0Ogot
ICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgewotICAgICAgICBjYXNlIGtF
dmVudEhJT2JqZWN0Q29uc3RydWN0OgotICAgICAgICAgICAgSElPYmplY3RSZWYgb2JqZWN0Owot
Ci0gICAgICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQ
YXJhbUhJT2JqZWN0SW5zdGFuY2UsCi0gICAgICAgICAgICB0eXBlSElPYmplY3RSZWYsIG51bGxw
dHIsIHNpemVvZihISU9iamVjdFJlZiksIG51bGxwdHIsICZvYmplY3QpOwotICAgICAgICAgICAg
QVNTRVJUKCFyZXN1bHQpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICAvLyBvbiBlbnRyeSBmb3Igb3VyIGNvbnN0
cnVjdCBldmVudCwgd2UncmUgcGFzc2VkIHRoZQotICAgICAgICAgICAgLy8gY3JlYXRpb24gcHJv
YyB3ZSByZWdpc3RlcmVkIHdpdGggZm9yIHRoaXMgY2xhc3MuCi0gICAgICAgICAgICAvLyB3ZSB1
c2UgaXQgbm93IHRvIGNyZWF0ZSB0aGUgaW5zdGFuY2UsIGFuZCB0aGVuIHdlCi0gICAgICAgICAg
ICAvLyByZXBsYWNlIHRoZSBpbnN0YW5jZSBwYXJhbWV0ZXIgZGF0YSB3aXRoIHNhaWQgaW5zdGFu
Y2UKLSAgICAgICAgICAgIC8vIGFzIHR5cGUgdm9pZC4KLQotICAgICAgICAgICAgdmlldyA9IEhJ
V2ViVmlld0NvbnN0cnVjdG9yKChISVZpZXdSZWYpb2JqZWN0KTsKLQotICAgICAgICAgICAgaWYg
KHZpZXcpCi0gICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50
UGFyYW1ISU9iamVjdEluc3RhbmNlLCB0eXBlVm9pZFB0ciwgc2l6ZW9mKHZvaWQgKiksICZ2aWV3
KTsgCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBr
RXZlbnRISU9iamVjdERlc3RydWN0OgotICAgICAgICAgICAgSElXZWJWaWV3RGVzdHJ1Y3Rvcih2
aWV3KTsKLSAgICAgICAgICAgIC8vIHJlc3VsdCBpcyB1bmltcG9ydGFudAotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGtFdmVudENsYXNz
S2V5Ym9hcmQ6IHsKLSAgICAgICAgTlNFdmVudCoga2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0
aENhcmJvbkV2ZW50KGluRXZlbnQpOwotICAgICAgICBbdmlldy0+ZktpdFdpbmRvdyBzZW5kU3Vw
ZXJFdmVudDpraXRFdmVudF07Ci0gICAgICAgIFtraXRFdmVudCByZWxlYXNlXTsKLSAgICAgICAg
cmVzdWx0ID0gbm9FcnI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Uga0V2ZW50
Q2xhc3NNb3VzZToKLSAgICAgICAgc3dpdGNoIChHZXRFdmVudEtpbmQoaW5FdmVudCkpIHsKLSAg
ICAgICAgY2FzZSBrRXZlbnRNb3VzZVVwOgotICAgICAgICAgICAgcmVzdWx0ID0gTW91c2VVcCh2
aWV3LCBpbkV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgY2Fz
ZSBrRXZlbnRNb3VzZVdoZWVsTW92ZWQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBNb3VzZVdoZWVs
TW92ZWQodmlldywgaW5FdmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IGtFdmVudE1vdXNlTW92ZWQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBNb3VzZU1vdmVkKHZpZXcs
IGluRXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrRXZlbnRNb3Vz
ZURyYWdnZWQ6Ci0gICAgICAgICAgICByZXN1bHQgPSBNb3VzZURyYWdnZWQodmlldywgaW5FdmVu
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAg
IGNhc2Uga0V2ZW50Q2xhc3NDb21tYW5kOgotICAgICAgICBISUNvbW1hbmQgY29tbWFuZDsKLSAg
ICAgICAgCi0gICAgICAgIHJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVu
dFBhcmFtRGlyZWN0T2JqZWN0LCB0eXBlSElDb21tYW5kLCBudWxscHRyLCBzaXplb2YoSElDb21t
YW5kKSwgbnVsbHB0ciwgJmNvbW1hbmQpOwotICAgICAgICBBU1NFUlQoIXJlc3VsdCk7Ci0gICAg
ICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHN3
aXRjaCAoR2V0RXZlbnRLaW5kKGluRXZlbnQpKSB7Ci0gICAgICAgIGNhc2Uga0V2ZW50Q29tbWFu
ZFByb2Nlc3M6Ci0gICAgICAgICAgICByZXN1bHQgPSBQcm9jZXNzQ29tbWFuZCh2aWV3LCAmY29t
bWFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAKLSAgICAgICAgY2FzZSBrRXZlbnRDb21t
YW5kVXBkYXRlU3RhdHVzOgotICAgICAgICAgICAgcmVzdWx0ID0gVXBkYXRlQ29tbWFuZFN0YXR1
cyh2aWV3LCAmY29tbWFuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLQotICAgIGNhc2Uga0V2ZW50Q2xhc3NDb250cm9sOgotICAgICAgICBzd2l0Y2gg
KEdldEV2ZW50S2luZChpbkV2ZW50KSkgewotICAgICAgICBjYXNlIGtFdmVudENvbnRyb2xJbml0
aWFsaXplOgotICAgICAgICAgICAgZmVhdHVyZXMgPSBHZXRCZWhhdmlvcnMoKTsKLSAgICAgICAg
ICAgIFNldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbEZlYXR1cmVz
LCB0eXBlVUludDMyLCBzaXplb2YoVUludDMyKSwgJmZlYXR1cmVzKTsKLSAgICAgICAgICAgIHJl
c3VsdCA9IG5vRXJyOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrRXZlbnRD
b250cm9sRHJhdzogewotICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBudWxscHRy
OwotCi0gICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbVJn
bkhhbmRsZSwgdHlwZVFEUmduSGFuZGxlLCBudWxscHRyLCBzaXplb2YoUmduSGFuZGxlKSwgbnVs
bHB0ciwgJnJlZ2lvbik7Ci0gICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBr
RXZlbnRQYXJhbUNHQ29udGV4dFJlZiwgdHlwZUNHQ29udGV4dFJlZiwgbnVsbHB0ciwgc2l6ZW9m
KENHQ29udGV4dFJlZiksIG51bGxwdHIsICZjb250ZXh0KTsKLQotICAgICAgICAgICAgRHJhdyh2
aWV3LCByZWdpb24sIGNvbnRleHQpOwotICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbEhp
dFRlc3Q6Ci0gICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJh
bU1vdXNlTG9jYXRpb24sIHR5cGVISVBvaW50LCBudWxscHRyLCBzaXplb2YoSElQb2ludCksIG51
bGxwdHIsICZ3aGVyZSk7Ci0gICAgICAgICAgICBwYXJ0ID0gSGl0VGVzdCh2aWV3LCAmd2hlcmUp
OwotICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250
cm9sUGFydCwgdHlwZUNvbnRyb2xQYXJ0Q29kZSwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksICZw
YXJ0KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOwotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sR2V0UGFydFJlZ2lvbjoKLSAgICAgICAgICAgIEdl
dEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFBhcnQsIHR5cGVDb250
cm9sUGFydENvZGUsIG51bGxwdHIsIHNpemVvZihDb250cm9sUGFydENvZGUpLCBudWxscHRyLCAm
cGFydCk7Ci0gICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJh
bUNvbnRyb2xSZWdpb24sIHR5cGVRRFJnbkhhbmRsZSwgbnVsbHB0ciwgc2l6ZW9mKFJnbkhhbmRs
ZSksIG51bGxwdHIsICZyZWdpb24pOwotICAgICAgICAgICAgcmVzdWx0ID0gR2V0UmVnaW9uKHZp
ZXcsIHBhcnQsIHJlZ2lvbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBrRXZlbnRDb250cm9sR2V0RGF0YTogewotICAgICAgICAgICAgR2V0RXZl
bnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwgdHlwZUNvbnRyb2xQ
YXJ0Q29kZSwgbnVsbHB0ciwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksIG51bGxwdHIsICZwYXJ0
KTsKLSAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29u
dHJvbERhdGFUYWcsIHR5cGVFbnVtZXJhdGlvbiwgbnVsbHB0ciwgc2l6ZW9mKE9TVHlwZSksIG51
bGxwdHIsICZ0YWcpOwotICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2
ZW50UGFyYW1Db250cm9sRGF0YUJ1ZmZlciwgdHlwZVB0ciwgbnVsbHB0ciwgc2l6ZW9mKFB0ciks
IG51bGxwdHIsICZwdHIpOwotICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwg
a0V2ZW50UGFyYW1Db250cm9sRGF0YUJ1ZmZlclNpemUsIHR5cGVCeXRlQ291bnQsIG51bGxwdHIs
IHNpemVvZihTaXplKSwgbnVsbHB0ciwgJnNpemUpOwotCi0gICAgICAgICAgICBpZiAodGFnID09
IGtDb250cm9sS2luZFRhZykgewotICAgICAgICAgICAgICAgIFNpemUgb3V0U2l6ZTsKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBub0VycjsKLQotICAgICAgICAgICAgICAgIGlmIChwdHIpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgIT0gc2l6ZW9mKENvbnRyb2xLaW5kKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVyckRhdGFTaXplTWlzbWF0Y2g7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICgqKENvbnRyb2xL
aW5kICopcHRyKSA9IEdldEtpbmQoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBvdXRTaXplID0gc2l6ZW9mKENvbnRyb2xLaW5kKTsKLSAgICAgICAgICAgICAgICBTZXRF
dmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xEYXRhQnVmZmVyU2l6ZSwg
dHlwZUJ5dGVDb3VudCwgc2l6ZW9mKFNpemUpLCAmb3V0U2l6ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Uga0V2ZW50Q29udHJv
bEJvdW5kc0NoYW5nZWQ6IHsKLSAgICAgICAgICAgIEhJUmVjdCBwcmV2UmVjdCwgY3VyclJlY3Q7
Ci0gICAgICAgICAgICBVSW50MzIgYXR0cnM7Ci0gICAgICAgIAotICAgICAgICAgICAgR2V0RXZl
bnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1BdHRyaWJ1dGVzLCB0eXBlVUludDMyLCBu
dWxscHRyLCBzaXplb2YoVUludDMyKSwgbnVsbHB0ciwgJmF0dHJzKTsKLSAgICAgICAgICAgIEdl
dEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtT3JpZ2luYWxCb3VuZHMsIHR5cGVI
SVJlY3QsIG51bGxwdHIsIHNpemVvZihISVJlY3QpLCBudWxscHRyLCAmcHJldlJlY3QpOwotICAg
ICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1DdXJyZW50Qm91
bmRzLCB0eXBlSElSZWN0LCBudWxscHRyLCBzaXplb2YoSElSZWN0KSwgbnVsbHB0ciwgJmN1cnJS
ZWN0KTsKLQotICAgICAgICAgICAgQm91bmRzQ2hhbmdlZCh2aWV3LCBhdHRycywgJnByZXZSZWN0
LCAmY3VyclJlY3QpOwotICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbEFjdGl2YXRlOgot
ICAgICAgICAgICAgQWN0aXZlU3RhdGVDaGFuZ2VkKHZpZXcpOwotICAgICAgICAgICAgcmVzdWx0
ID0gbm9FcnI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIGtFdmVudENvbnRy
b2xEZWFjdGl2YXRlOgotICAgICAgICAgICAgQWN0aXZlU3RhdGVDaGFuZ2VkKHZpZXcpOwotICAg
ICAgICAgICAgcmVzdWx0ID0gbm9FcnI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgCi0g
ICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbE93bmluZ1dpbmRvd0NoYW5nZWQ6IHsKLSAgICAgICAg
ICAgIFdpbmRvd1JlZiBmcm9tV2luZG93LCB0b1dpbmRvdzsKLQotICAgICAgICAgICAgcmVzdWx0
ID0gR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sT3JpZ2luYWxP
d25pbmdXaW5kb3csIHR5cGVXaW5kb3dSZWYsIG51bGxwdHIsIHNpemVvZihXaW5kb3dSZWYpLCBu
dWxscHRyLCAmZnJvbVdpbmRvdyk7Ci0gICAgICAgICAgICBBU1NFUlQoIXJlc3VsdCk7Ci0gICAg
ICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAg
ICAgICAgICAgIHJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFt
Q29udHJvbEN1cnJlbnRPd25pbmdXaW5kb3csIHR5cGVXaW5kb3dSZWYsIG51bGxwdHIsIHNpemVv
ZihXaW5kb3dSZWYpLCBudWxscHRyLCAmdG9XaW5kb3cpOwotICAgICAgICAgICAgQVNTRVJUKCFy
ZXN1bHQpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotCi0gICAgICAgICAgICBPd25pbmdXaW5kb3dDaGFuZ2VkKHZpZXcsIGZyb21XaW5k
b3csIHRvV2luZG93KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIGtFdmVudENvbnRyb2xDbGljazoKLSAg
ICAgICAgICAgIHJlc3VsdCA9IENsaWNrKHZpZXcsIGluRXZlbnQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBr
RXZlbnRDb250cm9sQ29udGV4dHVhbE1lbnVDbGljazoKLSAgICAgICAgICAgIHJlc3VsdCA9IENv
bnRleHRNZW51Q2xpY2sodmlldywgaW5FdmVudCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIGtFdmVudENvbnRy
b2xTZXRGb2N1c1BhcnQ6IHsKLSAgICAgICAgICAgIENvbnRyb2xQYXJ0Q29kZSBkZXNpcmVkRm9j
dXM7Ci0gICAgICAgICAgICBSZ25IYW5kbGUgaW52YWxpZFJnbjsKLSAgICAgICAgICAgIEJvb2xl
YW4gZm9jdXNFdmVyeXRoaW5nOwotICAgICAgICAgICAgQ29udHJvbFBhcnRDb2RlIGFjdHVhbEZv
Y3VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRl
cihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xQYXJ0LCB0eXBlQ29udHJvbFBhcnRDb2RlLCBu
dWxscHRyLCBzaXplb2YoQ29udHJvbFBhcnRDb2RlKSwgbnVsbHB0ciwgJmRlc2lyZWRGb2N1cyk7
IAotICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHQpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICBHZXRFdmVudFBh
cmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xJbnZhbFJnbiwgdHlwZVFEUmduSGFu
ZGxlLCBudWxscHRyLCBzaXplb2YoUmduSGFuZGxlKSwgbnVsbHB0ciwgJmludmFsaWRSZ24pOwot
ICAgICAgICAgICAgZm9jdXNFdmVyeXRoaW5nID0gZmFsc2U7IC8vIGEgZ29vZCBkZWZhdWx0IGlu
IGNhc2UgdGhlIHBhcmFtZXRlciBkb2Vzbid0IGV4aXN0Ci0gICAgICAgICAgICBHZXRFdmVudFBh
cmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xGb2N1c0V2ZXJ5dGhpbmcsIHR5cGVC
b29sZWFuLCBudWxscHRyLCBzaXplb2YoQm9vbGVhbiksIG51bGxwdHIsICZmb2N1c0V2ZXJ5dGhp
bmcpOwotCi0gICAgICAgICAgICByZXN1bHQgPSBTZXRGb2N1c1BhcnQodmlldywgZGVzaXJlZEZv
Y3VzLCBpbnZhbGlkUmduLCBmb2N1c0V2ZXJ5dGhpbmcsICZhY3R1YWxGb2N1cyk7Ci0gICAgICAg
ICAgICBpZiAocmVzdWx0ID09IG5vRXJyKQotICAgICAgICAgICAgICAgIEFTU0VSVCghU2V0RXZl
bnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwgdHlwZUNvbnRyb2xQ
YXJ0Q29kZSwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksICZhY3R1YWxGb2N1cykpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBzb21lIG90aGVyIGtpbmQgb2Yg
Q29udHJvbCBldmVudAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICAvLyBzb21lIG90aGVyIGV2ZW50IGNsYXNzCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLQotc3RhdGljIHZvaWQgVXBkYXRlT2JzZXJ2ZXIoQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2Jz
ZXJ2ZXIsIENGUnVuTG9vcEFjdGl2aXR5IGFjdGl2aXR5LCB2b2lkICppbmZvKTsKLQotc3RhdGlj
IHZvaWQgU3RhcnRVcGRhdGVPYnNlcnZlcihISVdlYlZpZXcqIHZpZXcpCi17Ci0gICAgQ0ZSdW5M
b29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQ7Ci0gICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYgb2Jz
ZXJ2ZXI7Ci0gICAgQ0ZSdW5Mb29wUmVmIG1haW5SdW5Mb29wOwotICAgIAotICAgIEFTU0VSVCgh
dmlldy0+ZklzQ29tcG9zaXRlZCk7Ci0gICAgQVNTRVJUKCF2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIp
OwotCi0gICAgY29udGV4dC52ZXJzaW9uID0gMDsKLSAgICBjb250ZXh0LmluZm8gPSB2aWV3Owot
ICAgIGNvbnRleHQucmV0YWluID0gbnVsbHB0cjsKLSAgICBjb250ZXh0LnJlbGVhc2UgPSBudWxs
cHRyOwotICAgIGNvbnRleHQuY29weURlc2NyaXB0aW9uID0gbnVsbHB0cjsKLQotICAgIG1haW5S
dW5Mb29wID0gY2hlY2tlZF9jZl9jYXN0PENGUnVuTG9vcFJlZj4oR2V0Q0ZSdW5Mb29wRnJvbUV2
ZW50TG9vcChHZXRNYWluRXZlbnRMb29wKCkpKTsKLSAgICBvYnNlcnZlciA9IENGUnVuTG9vcE9i
c2VydmVyQ3JlYXRlKG51bGxwdHIsIGtDRlJ1bkxvb3BFbnRyeSB8IGtDRlJ1bkxvb3BCZWZvcmVX
YWl0aW5nLCB0cnVlLCAwLCBVcGRhdGVPYnNlcnZlciwgJmNvbnRleHQpOwotICAgIENGUnVuTG9v
cEFkZE9ic2VydmVyKG1haW5SdW5Mb29wLCBvYnNlcnZlciwga0NGUnVuTG9vcENvbW1vbk1vZGVz
KTsgCi0KLSAgICB2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgPSBvYnNlcnZlcjsKLSAgICAKLSAgICAv
LyBwcmludGYoIlVwZGF0ZSBvYnNlcnZlciBzdGFydGVkXG4iKTsKLX0KLQotc3RhdGljIHZvaWQg
U3RvcFVwZGF0ZU9ic2VydmVyKEhJV2ViVmlldyogdmlldykKLXsKLSAgICBBU1NFUlQoIXZpZXct
PmZJc0NvbXBvc2l0ZWQpOwotICAgIEFTU0VSVCh2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIpOwotCi0g
ICAgQ0ZSdW5Mb29wT2JzZXJ2ZXJJbnZhbGlkYXRlKHZpZXctPmZVcGRhdGVPYnNlcnZlcik7Ci0g
ICAgQ0ZSZWxlYXNlKHZpZXctPmZVcGRhdGVPYnNlcnZlcik7Ci0gICAgdmlldy0+ZlVwZGF0ZU9i
c2VydmVyID0gbnVsbHB0cjsKLQotICAgIC8vIHByaW50ZigiVXBkYXRlIG9ic2VydmVyIHJlbW92
ZWRcbiIpOwotfQotCi1zdGF0aWMgdm9pZCAKLVVwZGF0ZU9ic2VydmVyKENGUnVuTG9vcE9ic2Vy
dmVyUmVmIG9ic2VydmVyLCBDRlJ1bkxvb3BBY3Rpdml0eSBhY3Rpdml0eSwgdm9pZCAqaW5mbykK
LXsKLSAgICBISVdlYlZpZXcqIHZpZXcgPSAoSElXZWJWaWV3KilpbmZvOwotICAgIFJnbkhhbmRs
ZSByZWdpb24gPSBOZXdSZ24oKTsKLQotICAgIC8vIHByaW50ZigiVXBkYXRlIG9ic2VydmVyIGNh
bGxlZFxuIik7Ci0KLSAgICBpZiAocmVnaW9uKSB7Ci0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgIEdldFdpbmRvd1JlZ2lvbihHZXRDb250cm9sT3du
ZXIodmlldy0+ZlZpZXdSZWYpLCBrV2luZG93VXBkYXRlUmduLCByZWdpb24pOwotICAgICAgICBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLSAgICAgICAgCi0gICAgICAgIGlmICgh
RW1wdHlSZ24ocmVnaW9uKSkgewotICAgICAgICAgICAgUmduSGFuZGxlIG91clJnbiA9IE5ld1Jn
bigpOwotICAgICAgICAgICAgUmVjdCByZWN0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBH
ZXRXaW5kb3dCb3VuZHMoR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSwga1dpbmRvd1N0
cnVjdHVyZVJnbiwgJnJlY3QpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBwcmludGYo
IlVwZGF0ZSByZWdpb24gaXMgbm9uLWVtcHR5XG4iKTsKLSAgICAgICAgICAgIGlmIChvdXJSZ24p
IHsKLSAgICAgICAgICAgICAgICBSZWN0IHJlY3Q7Ci0gICAgICAgICAgICAgICAgR3JhZlB0ciBz
YXZlUG9ydCwgcG9ydDsKLSAgICAgICAgICAgICAgICBQb2ludCBvZmZzZXQgPSB7IDAsIDAgfTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwb3J0ID0gR2V0V2luZG93UG9ydChH
ZXRDb250cm9sT3duZXIodmlldy0+ZlZpZXdSZWYpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBHZXRQb3J0KCZzYXZlUG9ydCk7Ci0gICAgICAgICAgICAgICAgU2V0UG9ydChw
b3J0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHbG9iYWxUb0xvY2FsKCZv
ZmZzZXQpOwotICAgICAgICAgICAgICAgIE9mZnNldFJnbihyZWdpb24sIG9mZnNldC5oLCBvZmZz
ZXQudik7Ci0KLSAgICAgICAgICAgICAgICBHZXRDb250cm9sQm91bmRzKHZpZXctPmZWaWV3UmVm
LCAmcmVjdCk7Ci0gICAgICAgICAgICAgICAgUmVjdFJnbihvdXJSZ24sICZyZWN0KTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBwcmludGYoIm91ciBjb250cm9sIGlzIGF0
ICVkICVkICVkICVkXG4iLCByZWN0LnRvcCwgcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSwgcmVjdC5y
aWdodCk7Ci0gICAgICAgICAgICAgICAgR2V0UmVnaW9uQm91bmRzKHJlZ2lvbiwgJnJlY3QpOwot
ICAgICAgICAgICAgICAgIC8vIHByaW50ZigicmVnaW9uIGlzIGF0ICVkICVkICVkICVkXG4iLCBy
ZWN0LnRvcCwgcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSwgcmVjdC5yaWdodCk7Ci0KLSAgICAgICAg
ICAgICAgICBTZWN0UmduKG91clJnbiwgcmVnaW9uLCBvdXJSZ24pOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEdldFJlZ2lvbkJvdW5kcyhvdXJSZ24sICZyZWN0KTsKLSAgICAg
ICAgICAgICAgICAvLyBwcmludGYoImludGVyc2VjdGlvbiBpcyAgJWQgJWQgJWQgJWRcbiIsIHJl
Y3QudG9wLCByZWN0LmxlZnQsIHJlY3QuYm90dG9tLCByZWN0LnJpZ2h0KTsKLSAgICAgICAgICAg
ICAgICBpZiAoIUVtcHR5UmduKG91clJnbikpIHsKLSAgICAgICAgICAgICAgICAgICAgUmduSGFu
ZGxlIHNhdmVWaXMgPSBOZXdSZ24oKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIC8vIHByaW50ZigibG9va3MgbGlrZSB3ZSBzaG91bGQgZHJhd1xuIik7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChzYXZlVmlzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBSR0JDb2xvciBrUmVkQ29sb3IgPSB7IDB4ZmZmZiwgMCwgMCB9OwotICAgICAgICAgICAgICAg
ICAgICAgICAgR2V0UG9ydFZpc2libGVSZWdpb24oR2V0V2luZG93UG9ydChHZXRDb250cm9sT3du
ZXIodmlldy0+ZlZpZXdSZWYpKSwgc2F2ZVZpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBT
ZXRQb3J0VmlzaWJsZVJlZ2lvbihHZXRXaW5kb3dQb3J0KEdldENvbnRyb2xPd25lcih2aWV3LT5m
Vmlld1JlZikpLCBvdXJSZ24pOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBSR0JGb3JlQ29sb3IoJmtSZWRDb2xvcik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBQYWludFJnbihvdXJSZ24pOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gUURGbHVzaFBvcnRCdWZmZXIocG9ydCwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEZWxheSgxNSwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEcmF3
MUNvbnRyb2wodmlldy0+ZlZpZXdSZWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRX
aW5kb3dSZ24oR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSwgb3VyUmduKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgU2V0UG9ydFZpc2li
bGVSZWdpb24oR2V0V2luZG93UG9ydChHZXRDb250cm9sT3duZXIodmlldy0+ZlZpZXdSZWYpKSwg
c2F2ZVZpcyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEaXNwb3NlUmduKHNhdmVWaXMpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgU2V0UG9ydChzYXZlUG9ydCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
RGlzcG9zZVJnbihvdXJSZ24pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBEaXNwb3NlUmduKHJlZ2lvbik7Ci0gICAgfQotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NvbmZpZ3VyYXRpb25zL1dlYktpdExlZ2FjeS54
Y2NvbmZpZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NvbmZpZ3VyYXRpb25zL1dlYktpdExl
Z2FjeS54Y2NvbmZpZwppbmRleCA5OTNmYWM1NDRkMjBhNTEwZmE0MGZjMmRjMzZjYjBjYmJjZTNm
NTg0Li42NTYzZTY2YWU5MzU5OTY2OGViNjUyZGIzY2ZhZjMzODYzOWJmMGZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9Db25maWd1cmF0aW9ucy9XZWJLaXRMZWdhY3kueGNj
b25maWcKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ29uZmlndXJhdGlvbnMvV2ViS2l0
TGVnYWN5LnhjY29uZmlnCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiVmVyc2lvbi54Y2Nv
bmZpZyIKIAogRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVMgPSAkKEVYQ0xVREVEX1NPVVJDRV9G
SUxFX05BTUVTXyQoV0tfQ09DT0FfVE9VQ0gpKTsKLUVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVT
X2NvY29hdG91Y2ggPSAqLmRlZnMgKi5uaWIgKi5wZGYgKi50aWZmIENhcmJvblV0aWxzLiogQ2Fy
Ym9uV2luZG93QWRhcHRlci4qIENhcmJvbldpbmRvd0NvbnRlbnRWaWV3LiogQ2FyYm9uV2luZG93
RnJhbWUuKiBISVZpZXdBZGFwdGVyLiogSElXZWJWaWV3LiogT3V0bG9va1F1aXJrc1VzZXJTY3Jp
cHQuanMgUG9wdXBNZW51TWFjLiogU2VhcmNoUG9wdXBNZW51TWFjLiogV2ViQ2xpcFZpZXcuKiBX
ZWJEYXNoYm9hcmRSZWdpb24uKiBXZWJEeW5hbWljU2Nyb2xsQmFyc1ZpZXcuKiBXZWJJY29uRGF0
YWJhc2UuKiBXZWJJbnNwZWN0b3JDbGllbnQuKiBXZWJKYXZhU2NyaXB0VGV4dElucHV0UGFuZWwu
KiBXZWJOU0V2ZW50RXh0cmFzLiogV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLiogV2ViTlNXaW5kb3dF
eHRyYXMuKiBXZWJQYW5lbEF1dGhlbnRpY2F0aW9uSGFuZGxlci4qIFdlYlBsdWdpbnNQcml2YXRl
LiogV2ViU3RyaW5nVHJ1bmNhdG9yLiogV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLio7CitF
WENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU19jb2NvYXRvdWNoID0gKi5kZWZzICoubmliICoucGRm
ICoudGlmZiBPdXRsb29rUXVpcmtzVXNlclNjcmlwdC5qcyBQb3B1cE1lbnVNYWMuKiBTZWFyY2hQ
b3B1cE1lbnVNYWMuKiBXZWJDbGlwVmlldy4qIFdlYkRhc2hib2FyZFJlZ2lvbi4qIFdlYkR5bmFt
aWNTY3JvbGxCYXJzVmlldy4qIFdlYkljb25EYXRhYmFzZS4qIFdlYkluc3BlY3RvckNsaWVudC4q
IFdlYkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbC4qIFdlYk5TRXZlbnRFeHRyYXMuKiBXZWJOU1Bh
c3RlYm9hcmRFeHRyYXMuKiBXZWJOU1dpbmRvd0V4dHJhcy4qIFdlYlBhbmVsQXV0aGVudGljYXRp
b25IYW5kbGVyLiogV2ViUGx1Z2luc1ByaXZhdGUuKiBXZWJTdHJpbmdUcnVuY2F0b3IuKiBXZWJU
ZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIuKjsKIEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyA9
ICpJT1MubW0gTWVtb3J5TWVhc3VyZS5oIFdlYkNhcmV0Q2hhbmdlTGlzdGVuZXIuaCBXZWJGaXhl
ZFBvc2l0aW9uQ29udGVudC5oIFdlYkZyYW1lSU9TLmggV2ViRnJhbWVJUGhvbmUuaCBXZWJHZW9s
b2NhdGlvbkNvcmVMb2NhdGlvblByb3ZpZGVyLmggV2ViR2VvbG9jYXRpb25Qcml2YXRlLmggV2Vi
R2VvbG9jYXRpb25Qcm92aWRlcklPUy5oIFdlYk1JTUVUeXBlUmVnaXN0cnkuaCBXZWJOU1N0cmlu
Z0V4dHJhc0lPUy5oIFdlYk5TU3RyaW5nRXh0cmFzSVBob25lLmggV2ViUERGVmlld0lPUy5oIFdl
YlBERlZpZXdJUGhvbmUuaCBXZWJQREZWaWV3UGxhY2Vob2xkZXIuaCBXZWJTZWxlY3Rpb25SZWN0
LmggV2ViVUlLaXREZWxlZ2F0ZS5oIFdlYlVJS2l0U3VwcG9ydC5oIFdlYlZpc2libGVQb3NpdGlv
bi5oIERPTUhUTUxUZXh0QXJlYUVsZW1lbnRQcml2YXRlLmggRE9NVUlLaXRFeHRlbnNpb25zLmg7
CiAKIEVYUE9SVEVEX1NZTUJPTFNfRklMRSA9ICQoRVhQT1JURURfU1lNQk9MU19GSUxFXyQoV0tf
Q09DT0FfVE9VQ0gpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYktp
dC5tYWMuZXhwIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViS2l0Lm1hYy5leHAKaW5kZXgg
OThmNDQ5NGMyNmJiZWY2NGYxMjlkMTkzOWU1MTY1ZmNlYTgwZDcyZi4uODExMzNkZGZhNTk2Yzk1
NDg1YjZjNTg4OWVmZjM5MGZmN2I4YTQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViS2l0Lm1hYy5leHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViS2l0
Lm1hYy5leHAKQEAgLTUsOSArNSw2IEBACiAub2JqY19jbGFzc19uYW1lX1dlYlBhbmVsQXV0aGVu
dGljYXRpb25IYW5kbGVyCiAub2JqY19jbGFzc19uYW1lX1dlYlN0cmluZ1RydW5jYXRvcgogLm9i
amNfY2xhc3NfbmFtZV9XZWJVUkxzV2l0aFRpdGxlcwotX0hJV2ViVmlld0NyZWF0ZQotX0hJV2Vi
Vmlld0dldFdlYlZpZXcKLV9XZWJDb252ZXJ0TlNJbWFnZVRvQ0dJbWFnZVJlZgogX1dlYkljb25E
YXRhYmFzZURpZEFkZEljb25Ob3RpZmljYXRpb24KIF9XZWJJY29uRGF0YWJhc2VEaWRSZW1vdmVB
bGxJY29uc05vdGlmaWNhdGlvbgogX1dlYkljb25EYXRhYmFzZURpcmVjdG9yeURlZmF1bHRzS2V5
CkBAIC0xNSw3ICsxMiw2IEBAIF9XZWJJY29uTGFyZ2VTaXplCiBfV2ViSWNvbk1lZGl1bVNpemUK
IF9XZWJJY29uTm90aWZpY2F0aW9uVXNlckluZm9VUkxLZXkKIF9XZWJJY29uU21hbGxTaXplCi1f
V2ViSW5pdEZvckNhcmJvbgogX1dlYlVSTE5hbWVQYm9hcmRUeXBlCiBfV2ViVVJMUGJvYXJkVHlw
ZQogX1dlYlZpZXdQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363366</attachid>
            <date>2019-03-01 13:29:35 -0800</date>
            <delta_ts>2019-03-01 13:58:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189614-20190301132934.patch</filename>
            <type>text/plain</type>
            <size>164230</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyMjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM1YjMyMTdmMDM5MmVmYjU5
N2UzODZjOTljMjM1M2NkMWQwNWJiZDEuLmRhZDcwNWM0OTg1OTc4NmNiYzI2OWVkY2M1ZWYzZjEy
MDMxNGM2MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMDMtMDEgIFRpbSBIb3J0
b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHVudXNlZCBj
b2RlIGluIFdlYktpdExlZ2FjeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTg5NjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgor
CisgICAgICAgICogbWFjL01pZ3JhdGVIZWFkZXJzRnJvbVdlYktpdExlZ2FjeS5tYWtlOgorCiAy
MDE5LTAzLTAxICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBT
ZXJpYWxpemUgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1vZGUgYXMgYW4gZW51bQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L0NoYW5nZUxvZwppbmRleCBkNzg0MDQxZWM2MzVmYTJjM2M1OTc3MTBhNWY1M2ExZGJk
NTg3OGM1Li4xNjc0YjZlNTNhMjMzN2JiZGUxMWU5MjlhYzU1YjYxNGJhNGUyMDk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE5LTAzLTAxICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSB1bnVzZWQgY29kZSBp
biBXZWJLaXRMZWdhY3kKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4OTYxNAorCisgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4KKworICAg
ICAgICAqIFdlYktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAy
LTIwICBBbmR5IEVzdGVzICA8YWVzdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbWGNvZGVdIEFk
ZCBTREtWYXJpYW50LnhjY29uZmlnIHRvIHZhcmlvdXMgWGNvZGUgcHJvamVjdHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZwppbmRleCAyZDU0YmFiNzc5NzMyYThkYzhiODYxZGYwNjhhN2YzNDZj
ODg3OGEzLi44MTYxODkyMTRjYjI5NDk3Mzg5NDg1N2VhNGQ4MjEwOGVmNzFmMjFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTktMDMtMDEgIFRpbSBI
b3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHVudXNl
ZCBjb2RlIGluIFdlYktpdExlZ2FjeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg5NjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2Vy
LgorCisgICAgICAgICogQ2FyYm9uL0NhcmJvblV0aWxzLmg6IFJlbW92ZWQuCisgICAgICAgICog
Q2FyYm9uL0NhcmJvblV0aWxzLm06IFJlbW92ZWQuCisgICAgICAgICogQ2FyYm9uL0NhcmJvbldp
bmRvd0FkYXB0ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBDYXJib24vQ2FyYm9uV2luZG93QWRh
cHRlci5tbTogUmVtb3ZlZC4KKyAgICAgICAgKiBDYXJib24vQ2FyYm9uV2luZG93Q29udGVudFZp
ZXcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBDYXJib24vQ2FyYm9uV2luZG93Q29udGVudFZpZXcu
bTogUmVtb3ZlZC4KKyAgICAgICAgKiBDYXJib24vQ2FyYm9uV2luZG93RnJhbWUuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBDYXJib24vQ2FyYm9uV2luZG93RnJhbWUubTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBDYXJib24vSElWaWV3QWRhcHRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIENhcmJvbi9I
SVZpZXdBZGFwdGVyLm06IFJlbW92ZWQuCisgICAgICAgICogQ2FyYm9uL0hJV2ViVmlldy5oOiBS
ZW1vdmVkLgorICAgICAgICAqIENhcmJvbi9ISVdlYlZpZXcubW06IFJlbW92ZWQuCisgICAgICAg
ICogQ29uZmlndXJhdGlvbnMvV2ViS2l0TGVnYWN5LnhjY29uZmlnOgorICAgICAgICAqIFdlYktp
dC5tYWMuZXhwOgorCiAyMDE5LTAzLTAxICBKdXN0aW4gRmFuICA8anVzdGluX2ZhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dlYiBHUFVdIDMyLWJpdCBidWlsZHMgYnJva2VuIGJ5IGF0dGVtcHQg
dG8gZGlzYWJsZSBXZWJHUFUgb24gMzItYml0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9NaWdyYXRlSGVhZGVyc0Zyb21XZWJLaXRMZWdhY3kubWFrZSBiL1NvdXJjZS9XZWJLaXQvbWFj
L01pZ3JhdGVIZWFkZXJzRnJvbVdlYktpdExlZ2FjeS5tYWtlCmluZGV4IDVmZWQzNmVhYzNjZjRk
NDM2ZDA3M2UxOTI1NzYyMjAwYjg1OTY2Y2UuLjQzY2I5MzNiMWU0Y2M4MjQ0ZWIwNWU1MDZlODli
NDgwZGZkZTc2M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pZ3JhdGVIZWFkZXJz
RnJvbVdlYktpdExlZ2FjeS5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pZ3JhdGVIZWFk
ZXJzRnJvbVdlYktpdExlZ2FjeS5tYWtlCkBAIC0zMyw3ICszMyw2IEBAIFBVQkxJQ19IRUFERVJT
X0RJUiA9ICQoQlVJTFRfUFJPRFVDVFNfRElSKS8kKFBVQkxJQ19IRUFERVJTX0ZPTERFUl9QQVRI
KQogaWZlcSAoJChXS19QTEFURk9STV9OQU1FKSwgbWFjb3N4KQogCiBXRUJLSVRfUFVCTElDX0hF
QURFUlMgPSBcCi0gICAgQ2FyYm9uVXRpbHMuaCBcCiAgICAgRE9NLmggXAogICAgIERPTUFic3Ry
YWN0Vmlldy5oIFwKICAgICBET01BdHRyLmggXApAQCAtMTY0LDcgKzE2Myw2IEBAIFdFQktJVF9Q
VUJMSUNfSEVBREVSUyA9IFwKICAgICBET01YUGF0aEV4cHJlc3Npb24uaCBcCiAgICAgRE9NWFBh
dGhOU1Jlc29sdmVyLmggXAogICAgIERPTVhQYXRoUmVzdWx0LmggXAotICAgIEhJV2ViVmlldy5o
IFwKICAgICBXZWJBcmNoaXZlLmggXAogICAgIFdlYkJhY2tGb3J3YXJkTGlzdC5oIFwKICAgICBX
ZWJET01PcGVyYXRpb25zLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9XZWJL
aXRMZWdhY3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
V2ViS2l0TGVnYWN5Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTJhM2ExNzY5YTg4
Njk2MDlmNmFhNzgyYmFmN2M3MjQyNzY0MzU5MC4uYTY4NzZiYTMzN2I1YTQwNGRlYzBiOThkMDIz
ZDllNjRhOWZkYjZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9XZWJLaXRMZWdh
Y3kueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1dl
YktpdExlZ2FjeS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMzcsMTIgKzIzNyw2IEBA
CiAJCTkzOTgxMDYwMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJSZXNvdXJjZUxvYWREZWxlZ2F0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEzRDQyMkUw
MzRDRjU1QTAwQ0EyQUNEIC8qIFdlYlJlc291cmNlTG9hZERlbGVnYXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM5ODEwNjMwODI0QkYwMTAw
OERGMDM4IC8qIFdlYkhpc3RvcnlJdGVtSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkYyOTZGMDNBNkM0NUEwMENBMkQzQSAvKiBXZWJI
aXN0b3J5SXRlbUludGVybmFsLmggKi87IH07CiAJCTkzOTgxMDY0MDgyNEJGMDEwMDhERjAzOCAv
KiBXZWJGb3JtRGVsZWdhdGVQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyRDM2RkQ1RTAzRjc4RjlFMDBBODAxNjYgLyogV2ViRm9ybURlbGVn
YXRlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTkzOTgxMDY1MDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25XaW5kb3dBZGFwdGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGN0VCRUU5MDAz
RjlEQkExMDNDQTBERTYgLyogQ2FyYm9uV2luZG93QWRhcHRlci5oICovOyB9OwotCQk5Mzk4MTA2
NjA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93Q29udGVudFZpZXcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3RUJFRTkyMDNGOURCQTEwM0NB
MERFNiAvKiBDYXJib25XaW5kb3dDb250ZW50Vmlldy5oICovOyB9OwotCQk5Mzk4MTA2NzA4MjRC
RjAxMDA4REYwMzggLyogQ2FyYm9uV2luZG93RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3RUJFRTk0MDNGOURCQTEwM0NBMERFNiAvKiBDYXJi
b25XaW5kb3dGcmFtZS5oICovOyB9OwotCQk5Mzk4MTA2ODA4MjRCRjAxMDA4REYwMzggLyogSElW
aWV3QWRhcHRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRjdFQkVFOUEwM0Y5REJBMTAzQ0EwREU2IC8qIEhJVmlld0FkYXB0ZXIuaCAqLzsgfTsKLQkJ
OTM5ODEwNjkwODI0QkYwMTAwOERGMDM4IC8qIEhJV2ViVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjdFQkVFQUEwM0Y5REJBMTAzQ0EwREU2IC8q
IEhJV2ViVmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTkzOTgxMDZBMDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25VdGlscy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjc5Qjk3NDgwNDAxOTkzNDAz
NjkwOUQyIC8qIENhcmJvblV0aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOTM5ODEwNkQwODI0QkYwMTAwOERGMDM4IC8qIFdlYktpdEVycm9y
c1ByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDg0Q0E1RjdFMDQyNjg1RTgwMENBMkFDQSAvKiBXZWJLaXRFcnJvcnNQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTM5ODEwNkUwODI0
QkYwMTAwOERGMDM4IC8qIFdlYkZyYW1lVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOEI1MkUwNDI4MkI1OTAwQ0EyRDNBIC8qIFdlYkZyYW1l
Vmlldy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTkzOTgxMDZGMDgyNEJGMDEwMDhERjAzOCAvKiBXZWJGcmFtZVZpZXdJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOEI1MzIwNDI4MkJE
MjAwQ0EyRDNBIC8qIFdlYkZyYW1lVmlld0ludGVybmFsLmggKi87IH07CkBAIC0zMTUsMTEgKzMw
OSw2IEBACiAJCTkzOTgxMEY0MDgyNEJGMDEwMDhERjAzOCAvKiBXZWJIVE1MVmlldy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM1MDgxRDk1MDJCNkQ0
RDgwQUNBMkFDQSAvKiBXZWJIVE1MVmlldy5tbSAqLzsgfTsKIAkJOTM5ODEwRjgwODI0QkYwMTAw
OERGMDM4IC8qIFdlYlByZWZlcmVuY2VzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRjVBRUJCM0QwMjRBNTI3NjAxQzFBNTI2IC8qIFdlYlByZWZlcmVu
Y2VzLm1tICovOyB9OwogCQk5Mzk4MTBGQzA4MjRCRjAxMDA4REYwMzggLyogV2ViRm9ybURlbGVn
YXRlLm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDgx
REFCMzAzRUIwQjJEMDBBODAxNjYgLyogV2ViRm9ybURlbGVnYXRlLm0gKi87IH07Ci0JCTkzOTgx
MEZEMDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25XaW5kb3dBZGFwdGVyLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjdFQkVFOTEwM0Y5REJBMTAzQ0Ew
REU2IC8qIENhcmJvbldpbmRvd0FkYXB0ZXIubW0gKi87IH07Ci0JCTkzOTgxMEZFMDgyNEJGMDEw
MDhERjAzOCAvKiBDYXJib25XaW5kb3dDb250ZW50Vmlldy5tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjdFQkVFOTMwM0Y5REJBMTAzQ0EwREU2IC8qIENh
cmJvbldpbmRvd0NvbnRlbnRWaWV3Lm0gKi87IH07Ci0JCTkzOTgxMEZGMDgyNEJGMDEwMDhERjAz
OCAvKiBDYXJib25XaW5kb3dGcmFtZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRjdFQkVFOTUwM0Y5REJBMTAzQ0EwREU2IC8qIENhcmJvbldpbmRvd0Zy
YW1lLm0gKi87IH07Ci0JCTkzOTgxMTAwMDgyNEJGMDEwMDhERjAzOCAvKiBISVZpZXdBZGFwdGVy
Lm0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGN0VCRUU5
QjAzRjlEQkExMDNDQTBERTYgLyogSElWaWV3QWRhcHRlci5tICovOyBzZXR0aW5ncyA9IHtDT01Q
SUxFUl9GTEFHUyA9ICItV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIjsgfTsgfTsKLQkJOTM5
ODExMDEwODI0QkYwMTAwOERGMDM4IC8qIENhcmJvblV0aWxzLm0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzlCOTc0OTA0MDE5OTM0MDM2OTA5RDIgLyog
Q2FyYm9uVXRpbHMubSAqLzsgfTsKIAkJOTM5ODExMDMwODI0QkYwMTAwOERGMDM4IC8qIFdlYktp
dEVycm9ycy5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODM3MzBGOTgwM0ZCMUU2NjAwMDQ3MzZFIC8qIFdlYktpdEVycm9ycy5tICovOyB9OwogCQk5Mzk4
MTEwNjA4MjRCRjAxMDA4REYwMzggLyogV2ViRnJhbWVWaWV3Lm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOEI1MkYwNDI4MkI1OTAwQ0EyRDNBIC8q
IFdlYkZyYW1lVmlldy5tbSAqLzsgfTsKIAkJOTM5ODExMDcwODI0QkYwMTAwOERGMDM4IC8qIFdl
YlZpZXcubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUE4QjU3QTA0MjgzNEY3MDBDQTJEM0EgLyogV2ViVmlldy5tbSAqLzsgfTsKQEAgLTY3OCw3ICs2
NjcsNiBAQAogCQk5M0UyQTFBNDEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyQTFB
MjEyM0IwQjNDMDA5RkUxMkEgLyogV2ViRGFzaGJvYXJkUmVnaW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNFMkExQTUxMjNCMEIzQzAwOUZF
MTJBIC8qIFdlYkRhc2hib2FyZFJlZ2lvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzRTJBMUEzMTIzQjBCM0MwMDlGRTEyQSAvKiBXZWJEYXNoYm9h
cmRSZWdpb24ubW0gKi87IH07CiAJCTkzRkRFOTMzMEQ3OUNBRjMwMDc0RjAyOSAvKiBXZWJIaXN0
b3J5SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkzRkRFOTMyMEQ3OUNBRjMwMDc0RjAyOSAvKiBXZWJIaXN0b3J5SW50ZXJuYWwuaCAqLzsg
fTsKLQkJQTEwMjY1ODMxRjU2NTQwMzAwQjRDODQ0IC8qIEhJV2ViVmlldy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExMDI2NTgyMUY1NjU0MDMwMEI0
Qzg0NCAvKiBISVdlYlZpZXcubW0gKi87IH07CiAJCUExMEMxRDE4MTgyMDJGOUMwMDM2ODgzQSAv
KiBXZWJEZWZhdWx0Rm9ybURlbGVnYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBMTBDMUQxMDE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVmYXVsdEZv
cm1EZWxlZ2F0ZS5oICovOyB9OwogCQlBMTBDMUQxOTE4MjAyRjlDMDAzNjg4M0EgLyogV2ViRGVm
YXVsdEZvcm1EZWxlZ2F0ZS5tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTEwQzFEMTExODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGb3JtRGVsZWdh
dGUubSAqLzsgfTsKIAkJQTEwQzFEMUExODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGcmFt
ZUxvYWREZWxlZ2F0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTEwQzFEMTIxODIwMkY5QzAwMzY4ODNBIC8qIFdlYkRlZmF1bHRGcmFtZUxvYWREZWxl
Z2F0ZS5oICovOyB9OwpAQCAtMTQyNCw3ICsxNDEyLDYgQEAKIAkJOTNGREU5MzIwRDc5Q0FGMzAw
NzRGMDI5IC8qIFdlYkhpc3RvcnlJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJIaXN0b3J5SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJOUNBRTlEMDcwMjUyQTQxMzBFQ0ExNkVBIC8qIFdlYlByZWZlcmVuY2VzUHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRo
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlByZWZl
cmVuY2VzUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVz
ZXNUYWJzID0gMDsgfTsKIAkJOUNGMEUyNDkwMjEzNjFCMDBFQ0ExNkVBIC8qIFdlYkZyYW1lUHJp
dmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGlu
ZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkZyYW1lUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKLQkJQTEwMjY1ODIxRjU2NTQwMzAwQjRDODQ0IC8qIEhJV2ViVmll
dy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhJV2ViVmlldy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTEwQzFEMTAxODIwMkY5QzAwMzY4ODNB
IC8qIFdlYkRlZmF1bHRGb3JtRGVsZWdhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5oOyBwYXRoID0gaW9zL0RlZmF1bHREZWxlZ2F0
ZXMvV2ViRGVmYXVsdEZvcm1EZWxlZ2F0ZS5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
CiAJCUExMEMxRDExMTgyMDJGOUMwMDM2ODgzQSAvKiBXZWJEZWZhdWx0Rm9ybURlbGVnYXRlLm0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgbmFtZSA9IFdlYkRlZmF1bHRGb3JtRGVsZWdh
dGUubTsgcGF0aCA9IGlvcy9EZWZhdWx0RGVsZWdhdGVzL1dlYkRlZmF1bHRGb3JtRGVsZWdhdGUu
bTsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQlBMTBDMUQxMjE4MjAyRjlDMDAzNjg4
M0EgLyogV2ViRGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYkRlZmF1bHRGcmFtZUxvYWREZWxlZ2F0ZS5oOyBwYXRoID0gaW9zL0Rl
ZmF1bHREZWxlZ2F0ZXMvV2ViRGVmYXVsdEZyYW1lTG9hZERlbGVnYXRlLmg7IHNvdXJjZVRyZWUg
PSBTT1VSQ0VfUk9PVDsgfTsKQEAgLTE2MDAsMTcgKzE1ODcsNiBAQAogCQlGNUY3MzJEMjAyRkY0
RDRGMDFBODAxODAgLyogV2ViS2l0LmV4cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmV4cG9ydHM7
IG5hbWUgPSBXZWJLaXQuZXhwOyBwYXRoID0gbWFjL1dlYktpdC5leHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gNDsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNzM4QzlFOTAzRkFE
M0RGMDMyMUZCRTAgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IHBhdGgg
PSBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCUY3MzhDOUVBMDNGQUQzREYwMzIxRkJFMCAvKiBXZWJDb3JlLmZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIu
ZnJhbWV3b3JrOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07Ci0JCUY3OUI5NzQ4MDQwMTk5MzQwMzY5MDlEMiAvKiBDYXJib25VdGls
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YXJib25VdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKLQkJRjc5Qjk3NDkwNDAxOTkzNDAzNjkwOUQyIC8qIENhcmJvblV0aWxzLm0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBDYXJib25VdGlscy5tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB1c2VzVGFicyA9IDA7IH07Ci0JCUY3RUJFRTkwMDNGOURCQTEw
M0NBMERFNiAvKiBDYXJib25XaW5kb3dBZGFwdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhcmJvbldpbmRvd0FkYXB0ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY3RUJF
RTkxMDNGOURCQTEwM0NBMERFNiAvKiBDYXJib25XaW5kb3dBZGFwdGVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2FyYm9uV2lu
ZG93QWRhcHRlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07Ci0JCUY3RUJFRTkyMDNGOURCQTEwM0NBMERFNiAvKiBDYXJib25XaW5kb3dD
b250ZW50Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDYXJib25XaW5kb3dDb250ZW50Vmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjdFQkVFOTMwM0Y5REJBMTAzQ0Ew
REU2IC8qIENhcmJvbldpbmRvd0NvbnRlbnRWaWV3Lm0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMub2JqYzsgcGF0aCA9IENhcmJvbldpbmRvd0NvbnRlbnRWaWV3Lm07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owot
CQlGN0VCRUU5NDAzRjlEQkExMDNDQTBERTYgLyogQ2FyYm9uV2luZG93RnJhbWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FyYm9uV2luZG93
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07Ci0JCUY3RUJFRTk1MDNGOURCQTEwM0NBMERFNiAvKiBDYXJib25XaW5kb3dGcmFtZS5t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLm9iamM7IHBhdGggPSBD
YXJib25XaW5kb3dGcmFtZS5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKLQkJRjdFQkVFOUEwM0Y5REJBMTAzQ0EwREU2IC8qIEhJVmlld0Fk
YXB0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSElWaWV3QWRhcHRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKLQkJRjdFQkVFOUIwM0Y5REJBMTAzQ0EwREU2IC8qIEhJVmlld0Fk
YXB0ZXIubSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5vYmpjOyBw
YXRoID0gSElWaWV3QWRhcHRlci5tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJRjdFQkVFQUEwM0Y5REJBMTAzQ0EwREU2IC8qIEhJV2Vi
Vmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBISVdlYlZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CiAJCUY4MzRBQUQ1MEU2NEIxQzcwMEUyNzM3QyAvKiBXZWJUZXh0SXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViVGV4dEl0ZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY4MzRBQUQ2MEU2NEIxQzcwMEUyNzM3QyAv
KiBXZWJUZXh0SXRlcmF0b3IubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJUZXh0SXRlcmF0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY4
Q0ExNUI1MDI5QTM5RDkwMTAwMDEyMiAvKiBXZWJBdXRoZW50aWNhdGlvblBhbmVsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkF1dGhlbnRp
Y2F0aW9uUGFuZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2Vz
VGFicyA9IDA7IH07CkBAIC0xNjYzLDcgKzE2MzksNiBAQAogCQkJCUY1QjM2QjQwMDI4MURFODcw
MTg2MzVDQiAvKiBXZWJDb3JlU3VwcG9ydCAqLywKIAkJCQk5QzdDQUJCQjAxOTBBMzdDMEVDQTE2
RUEgLyogV2ViVmlldyAqLywKIAkJCQkxQzY4RjYzRjA5NUI1RjlDMDBDMjk4NEUgLyogV2ViSW5z
cGVjdG9yICovLAotCQkJCUY3RUJFRTU5MDNGOURCMjIwM0NBMERFNiAvKiBDYXJib24gKi8sCiAJ
CQkJMDg5QzE2NjVGRTg0MTE1OEMwMkFBQzA3IC8qIFJlc291cmNlcyAqLywKIAkJCQkwODY3RDY5
QUZFODQwMjhGQzAyQUFDMDcgLyogRnJhbWV3b3JrcyBhbmQgTGlicmFyaWVzICovLAogCQkJCTAz
NDc2OERGRkYzOEE1MDQxMURCOUM4QiAvKiBQcm9kdWN0cyAqLywKQEAgLTI2NjIsNTIgKzI2Mzcs
NiBAQAogCQkJdGFiV2lkdGggPSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OwotCQlGN0VCRUU1
OTAzRjlEQjIyMDNDQTBERTYgLyogQ2FyYm9uICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0J
CQljaGlsZHJlbiA9ICgKLQkJCQlGN0VCRUVDRjAzRjlEQkJEMDNDQTBERTYgLyogQXBwS2l0IE92
ZXJyaWRlcyAqLywKLQkJCQlGN0VCRUVEMTAzRjlEQkVCMDNDQTBERTYgLyogQyBBUEkgKi8sCi0J
CQkJRjdFQkVFRDIwM0Y5REJGRTAzQ0EwREU2IC8qIEdsdWUgKi8sCi0JCQkpOwotCQkJbmFtZSA9
IENhcmJvbjsKLQkJCXBhdGggPSBtYWMvQ2FyYm9uOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKLQkJCXRhYldpZHRoID0gNDsKLQkJCXVzZXNUYWJzID0gMDsKLQkJfTsKLQkJRjdFQkVFQ0Yw
M0Y5REJCRDAzQ0EwREU2IC8qIEFwcEtpdCBPdmVycmlkZXMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUY3RUJFRTkwMDNGOURCQTEwM0NBMERFNiAvKiBD
YXJib25XaW5kb3dBZGFwdGVyLmggKi8sCi0JCQkJRjdFQkVFOTEwM0Y5REJBMTAzQ0EwREU2IC8q
IENhcmJvbldpbmRvd0FkYXB0ZXIubW0gKi8sCi0JCQkJRjdFQkVFOTIwM0Y5REJBMTAzQ0EwREU2
IC8qIENhcmJvbldpbmRvd0NvbnRlbnRWaWV3LmggKi8sCi0JCQkJRjdFQkVFOTMwM0Y5REJBMTAz
Q0EwREU2IC8qIENhcmJvbldpbmRvd0NvbnRlbnRWaWV3Lm0gKi8sCi0JCQkJRjdFQkVFOTQwM0Y5
REJBMTAzQ0EwREU2IC8qIENhcmJvbldpbmRvd0ZyYW1lLmggKi8sCi0JCQkJRjdFQkVFOTUwM0Y5
REJBMTAzQ0EwREU2IC8qIENhcmJvbldpbmRvd0ZyYW1lLm0gKi8sCi0JCQkJRjdFQkVFOUEwM0Y5
REJBMTAzQ0EwREU2IC8qIEhJVmlld0FkYXB0ZXIuaCAqLywKLQkJCQlGN0VCRUU5QjAzRjlEQkEx
MDNDQTBERTYgLyogSElWaWV3QWRhcHRlci5tICovLAotCQkJKTsKLQkJCW5hbWUgPSAiQXBwS2l0
IE92ZXJyaWRlcyI7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlGN0VCRUVE
MTAzRjlEQkVCMDNDQTBERTYgLyogQyBBUEkgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJ
CWNoaWxkcmVuID0gKAotCQkJCUY3RUJFRUFBMDNGOURCQTEwM0NBMERFNiAvKiBISVdlYlZpZXcu
aCAqLywKLQkJCQlBMTAyNjU4MjFGNTY1NDAzMDBCNEM4NDQgLyogSElXZWJWaWV3Lm1tICovLAot
CQkJKTsKLQkJCW5hbWUgPSAiQyBBUEkiOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJ
fTsKLQkJRjdFQkVFRDIwM0Y5REJGRTAzQ0EwREU2IC8qIEdsdWUgKi8gPSB7Ci0JCQlpc2EgPSBQ
QlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUY3OUI5NzQ4MDQwMTk5MzQwMzY5MDlEMiAv
KiBDYXJib25VdGlscy5oICovLAotCQkJCUY3OUI5NzQ5MDQwMTk5MzQwMzY5MDlEMiAvKiBDYXJi
b25VdGlscy5tICovLAotCQkJKTsKLQkJCW5hbWUgPSBHbHVlOwotCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKLQkJfTsKIAkJRjhDQTE1QjQwMjlBMzk5NDAxMDAwMTIyIC8qIFBhbmVscyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yNzMyLDEwICsyNjYx
LDYgQEAKIAkJCWZpbGVzID0gKAogCQkJCTFBOTExOUY3MURCMDQ3MEEwMDg3RDFGRCAvKiBCYWNr
Rm9yd2FyZExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjA1MTkyMTc1MDJBNUQwMEJDNjJG
NSAvKiBCaW5hcnlQcm9wZXJ0eUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTkzOTgxMDZBMDgy
NEJGMDEwMDhERjAzOCAvKiBDYXJib25VdGlscy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTM5ODEw
NjUwODI0QkYwMTAwOERGMDM4IC8qIENhcmJvbldpbmRvd0FkYXB0ZXIuaCBpbiBIZWFkZXJzICov
LAotCQkJCTkzOTgxMDY2MDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25XaW5kb3dDb250ZW50Vmll
dy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTM5ODEwNjcwODI0QkYwMTAwOERGMDM4IC8qIENhcmJv
bldpbmRvd0ZyYW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCODI5NThEMzEzMjcwN0QwMDAwRDBF
NzkgLyogQ29ycmVjdGlvblBhbmVsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q0MzY0RDFENTdB
QkVFMDBBQjg1RUEgLyogRE9NLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0Q0MzY0RjFENTdBQkVF
MDBBQjg1RUEgLyogRE9NQWJzdHJhY3RWaWV3LmggaW4gSGVhZGVycyAqLywKQEAgLTI5NDUsOCAr
Mjg3MCw2IEBACiAJCQkJOTNENDM3OTgxRDU3QUJFRjAwQUI4NUVBIC8qIERPTVhQYXRoUmVzdWx0
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRDQzNzk5MUQ1N0FCRUYwMEFCODVFQSAv
KiBFeGNlcHRpb25IYW5kbGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2MDUxOTQxNzUwMkE1
RDAwQkM2MkY1IC8qIEhpc3RvcnlQcm9wZXJ0eUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCTkz
OTgxMDY4MDgyNEJGMDEwMDhERjAzOCAvKiBISVZpZXdBZGFwdGVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQk5Mzk4MTA2OTA4MjRCRjAxMDA4REYwMzggLyogSElXZWJWaWV3LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQThERUQ1MDBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0c2NhcGVQbHVnaW5T
dHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExMEMxRDMyMTgyMDJGQzUwMDM2ODgzQSAvKiBN
ZW1vcnlNZWFzdXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUFGNUNFQTBFRERFMUZFMDA4RDg4
M0QgLyogTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzk4
LDEwICszMzIxLDYgQEAKIAkJCWZpbGVzID0gKAogCQkJCTFBOTExOUY2MURCMDQ3MEEwMDg3RDFG
RCAvKiBCYWNrRm9yd2FyZExpc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQTYwNTE5MTE3NTAy
QTVEMDBCQzYyRjUgLyogQmluYXJ5UHJvcGVydHlMaXN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTkzOTgxMTAxMDgyNEJGMDEwMDhERjAzOCAvKiBDYXJib25VdGlscy5tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJOTM5ODEwRkQwODI0QkYwMTAwOERGMDM4IC8qIENhcmJvbldpbmRvd0FkYXB0ZXIubW0g
aW4gU291cmNlcyAqLywKLQkJCQk5Mzk4MTBGRTA4MjRCRjAxMDA4REYwMzggLyogQ2FyYm9uV2lu
ZG93Q29udGVudFZpZXcubSBpbiBTb3VyY2VzICovLAotCQkJCTkzOTgxMEZGMDgyNEJGMDEwMDhE
RjAzOCAvKiBDYXJib25XaW5kb3dGcmFtZS5tIGluIFNvdXJjZXMgKi8sCiAJCQkJQjgyOTU4RDQx
MzI3MDdEMDAwMEQwRTc5IC8qIENvcnJlY3Rpb25QYW5lbC5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTkzRDQzNjRFMUQ1N0FCRUUwMEFCODVFQSAvKiBET00ubW0gaW4gU291cmNlcyAqLywKIAkJCQk5
M0Q0MzY1MDFENTdBQkVFMDBBQjg1RUEgLyogRE9NQWJzdHJhY3RWaWV3Lm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0zNTMyLDggKzM0NTEsNiBAQAogCQkJCTkzRDQzNzk3MUQ1N0FCRUYwMEFCODVFQSAv
KiBET01YUGF0aFJlc3VsdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTkzRDQzNzlBMUQ1N0FCRUYw
MEFCODVFQSAvKiBFeGNlcHRpb25IYW5kbGVycy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBNjA1
MTkzMTc1MDJBNUQwMEJDNjJGNSAvKiBIaXN0b3J5UHJvcGVydHlMaXN0Lm1tIGluIFNvdXJjZXMg
Ki8sCi0JCQkJOTM5ODExMDAwODI0QkYwMTAwOERGMDM4IC8qIEhJVmlld0FkYXB0ZXIubSBpbiBT
b3VyY2VzICovLAotCQkJCUExMDI2NTgzMUY1NjU0MDMwMEI0Qzg0NCAvKiBISVdlYlZpZXcubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxQThERUQ1MTBFRTg4QjhBMDBGMjUwMjIgLyogSG9zdGVkTmV0
c2NhcGVQbHVnaW5TdHJlYW0ubW0gaW4gU291cmNlcyAqLywKIAkJCQlBMTBDMUQzMzE4MjAyRkM1
MDAzNjg4M0EgLyogTWVtb3J5TWVhc3VyZS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQUY1Q0VC
MEVEREUxRkUwMDhEODgzRCAvKiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9u
VXRpbHMuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25VdGlscy5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDA1NTMyMmIzYWQ3YmRiZmYxNjU0MTBiNWUw
ZDEyZGFjNWNkZDY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25VdGlscy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfX0hJV0VCQ0FSQk9OVVRJTFNfXwotI2Rl
ZmluZSBfX0hJV0VCQ0FSQk9OVVRJTFNfXwotCi0jaWZuZGVmIF9fTFA2NF9fCi0KLS8vIFRoZXNl
IGZ1bmN0aW9ucyBhcmUgb25seSBhdmFpbGFibGUgZm9yIDMyLWJpdC4KLQotI2luY2x1ZGUgPFdl
YktpdExlZ2FjeS9XZWJLaXRBdmFpbGFiaWxpdHkuaD4KLQotI2lmZGVmIF9fT0JKQ19fCi1AY2xh
c3MgTlNJbWFnZTsKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewot
I2VuZGlmCi0KLWV4dGVybiB2b2lkCi1XZWJJbml0Rm9yQ2FyYm9uKHZvaWQpIENGX0RFUFJFQ0FU
RURfTUFDKDEwXzMsIDEwXzYpOwotCi0jaWZkZWYgX19PQkpDX18KLQotZXh0ZXJuIENHSW1hZ2VS
ZWYKLVdlYkNvbnZlcnROU0ltYWdlVG9DR0ltYWdlUmVmKE5TSW1hZ2UgKiBpbkltYWdlKSBDRl9E
RVBSRUNBVEVEX01BQygxMF8zLCAxMF82KTsKLQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotfQotI2VuZGlmCi0KLSNlbmRpZgotI2VuZGlmIC8vIF9fSElXRUJDQVJCT05VVElMU19fCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uVXRpbHMubSBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25VdGlscy5tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA4YzRmYTUyNGU5ODM0MWY5NjNhYjljMGY0YmVkMTE2NGI0MzZj
YTllLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25VdGlscy5tCisrKyAvZGV2L251bGwKQEAg
LTEsMTQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIF9fTFA2NF9fCi0KLSNpbmNsdWRlICJDYXJib25VdGlscy5o
IgotI2ltcG9ydCA8d3RmL3NwaS9jb2NvYS9vYmpjU1BJLmg+Ci0KLWV4dGVybiBDR0ltYWdlUmVm
IF9OU0NyZWF0ZUltYWdlUmVmKCB1bnNpZ25lZCBjaGFyICpjb25zdCBiaXRtYXBEYXRhWzVdLCBp
bnQgcGl4ZWxzV2lkZSwgaW50IHBpeGVsc0hpZ2gsIGludCBiaXRzUGVyU2FtcGxlLCBpbnQgc2Ft
cGxlc1BlclBpeGVsLCBpbnQgYml0c1BlclBpeGVsLCBpbnQgYnl0ZXNQZXJSb3csIEJPT0wgaXNQ
bGFuYXIsIEJPT0wgaGFzQWxwaGEsIE5TU3RyaW5nICpjb2xvclNwYWNlTmFtZSwgQ0dDb2xvclNw
YWNlUmVmIGN1c3RvbUNvbG9yU3BhY2UsIGlkIHNvdXJjZU9iaik7Ci0KLXN0YXRpYyB2b2lkCQkJ
CVBvb2xDbGVhbmVyKCBFdmVudExvb3BUaW1lclJlZiBpblRpbWVyLCBFdmVudExvb3BJZGxlVGlt
ZXJNZXNzYWdlIGluU3RhdGUsIHZvaWQgKmluVXNlckRhdGEgKTsKLQotc3RhdGljIHZvaWQqIHNQ
b29sOwotc3RhdGljIHVuc2lnbmVkIG51bVBvb2xzOwotc3RhdGljIEV2ZW50TG9vcFJlZiBwb29s
TG9vcDsKLQotdm9pZCAgICAgICAgICAgICAgICAgICAgSElXZWJWaWV3UmVnaXN0ZXJDbGFzcygg
dm9pZCApOwotCi1zdGF0aWMgdW5zaWduZWQgZ2V0TlNBdXRvcmVsZWFzZVBvb2xDb3VudCh2b2lk
KQotewotICAgIHZvaWQqIHYgPSBvYmpjX2F1dG9yZWxlYXNlUG9vbFB1c2goKTsKLSAgICB1aW50
cHRyX3QgbnVtUG9vbHMgPSAodWludHB0cl90KXY7Ci0gICAgb2JqY19hdXRvcmVsZWFzZVBvb2xQ
b3Aodik7Ci0gICAgcmV0dXJuIG51bVBvb2xzOwotfQotCi12b2lkCi1XZWJJbml0Rm9yQ2FyYm9u
KCkKLXsKLSAgICBzdGF0aWMgYm9vbAkJCXNBcHBLaXRMb2FkZWQ7Ci0KLSAgICBpZiAoICFzQXBw
S2l0TG9hZGVkICkKLSAgICB7Ci0gICAgICAgIFByb2Nlc3NTZXJpYWxOdW1iZXIgICAgcHJvY2Vz
czsKLQotICAgICAgICAvLyBGb3JjZSB1cyB0byByZWdpc3RlciB3aXRoIHByb2Nlc3Mgc2VydmVy
LCB0aGlzIGVuc3VyZSB0aGF0IHRoZSBwcm9jZXNzCi0gICAgICAgIC8vICJmbGF2b3VyIiBpcyBj
b3JyZWN0bHkgZXN0YWJsaXNoZWQuCi0gICAgICAgIEdldEN1cnJlbnRQcm9jZXNzKCAmcHJvY2Vz
cyApOyAKLSAgICAgICAgTlNBcHBsaWNhdGlvbkxvYWQoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgc1Bvb2wgPSBvYmpjX2F1dG9yZWxlYXNlUG9vbFB1c2goKTsKLSAgICAgICAgbnVtUG9v
bHMgPSBnZXROU0F1dG9yZWxlYXNlUG9vbENvdW50KCk7Ci0gICAgICAgIAotICAgICAgICBwb29s
TG9vcCA9IEdldEN1cnJlbnRFdmVudExvb3AgKCk7Ci0KLSAgICAgICAgSW5zdGFsbEV2ZW50TG9v
cElkbGVUaW1lciggR2V0TWFpbkV2ZW50TG9vcCgpLCAxLjAsIDAsIFBvb2xDbGVhbmVyLCAwLCBO
VUxMICk7Ci0gICAgICAgIAotICAgICAgICBzQXBwS2l0TG9hZGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgSElXZWJWaWV3UmVnaXN0ZXJDbGFzcygpOwotICAgIH0KLX0KLQot
LyoKLSAgICBUaGUgcG9vbCBjbGVhbmVyIGlzIHJlcXVpcmVkIGJlY2F1c2UgQ2FyYm9uIGFwcGxp
Y2F0aW9ucyBkbyBub3QgaGF2ZQotICAgIGFuIGF1dG9yZWxlYXNlIHBvb2wgcHJvdmlkZWQgYnkg
dGhlaXIgZXZlbnQgbG9vcHMuICBJbXBvcnRhbnRseSwKLSAgICBjYXJib24gYXBwbGljYXRpb25z
IHRoYXQgbmVzdCBldmVudCBsb29wcywgdXNpbmcgYW55IG9mIHRoZSB2YXJpb3VzCi0gICAgdGVj
aG5pcXVlcyBhdmFpbGFibGUgdG8gQ2FyYm9uIGFwcHMsIE1VU1QgY3JlYXRlIHRoZWlyIG91ciBw
b29scyBhcm91bmQKLSAgICB0aGVpciBuZXN0ZWQgZXZlbnQgbG9vcHMuCi0qLwotc3RhdGljIHZv
aWQKLVBvb2xDbGVhbmVyKCBFdmVudExvb3BUaW1lclJlZiBpblRpbWVyLCBFdmVudExvb3BJZGxl
VGltZXJNZXNzYWdlIGluU3RhdGUsIHZvaWQgKmluVXNlckRhdGEgKQotewotICAgIGlmICggaW5T
dGF0ZSA9PSBrRXZlbnRMb29wSWRsZVRpbWVyU3RhcnRlZCApIHsKLSAgICAgICAgSUdOT1JFX1dB
Uk5JTkdTX0JFR0lOKCJjYXN0LXF1YWwiKQotICAgICAgICBDRlN0cmluZ1JlZiBtb2RlID0gQ0ZS
dW5Mb29wQ29weUN1cnJlbnRNb2RlKCAoQ0ZSdW5Mb29wUmVmKUdldENGUnVuTG9vcEZyb21FdmVu
dExvb3AoIEdldEN1cnJlbnRFdmVudExvb3AoKSApKTsKLSAgICAgICAgSUdOT1JFX1dBUk5JTkdT
X0VORAotICAgICAgICBFdmVudExvb3BSZWYgdGhpc0xvb3AgPSBHZXRDdXJyZW50RXZlbnRMb29w
ICgpOwotICAgICAgICBpZiAoIENGRXF1YWwoIG1vZGUsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSAp
ICYmIHRoaXNMb29wID09IHBvb2xMb29wKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjdXJyZW50
TnVtUG9vbHMgPSBnZXROU0F1dG9yZWxlYXNlUG9vbENvdW50KCktMTsgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChjdXJyZW50TnVtUG9vbHMgPT0gbnVtUG9vbHMpewotICAgICAgICAgICAg
ICAgIG9iamNfYXV0b3JlbGVhc2VQb29sUG9wKHNQb29sKTsKLSAgICAgICAgICAgICAgICBzUG9v
bCA9IG9iamNfYXV0b3JlbGVhc2VQb29sUHVzaCgpOwotICAgICAgICAgICAgICAgIG51bVBvb2xz
ID0gZ2V0TlNBdXRvcmVsZWFzZVBvb2xDb3VudCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIENGUmVsZWFzZSggbW9kZSApOwotICAgIH0KLX0KLQotQ0dJbWFnZVJlZgotV2Vi
Q29udmVydE5TSW1hZ2VUb0NHSW1hZ2VSZWYoCi0JTlNJbWFnZSogICAgICAgICBpbkltYWdlICkK
LXsKLQlOU0FycmF5KgkJCQlyZXBzID0gW2luSW1hZ2UgcmVwcmVzZW50YXRpb25zXTsKLQlOU0Jp
dG1hcEltYWdlUmVwKgkJcmVwID0gTlVMTDsKLQlDR0ltYWdlUmVmCQkJCWltYWdlID0gTlVMTDsK
LQl1bnNpZ25lZAkJCQlpOwotCi0JZm9yICggaT0wOyBpIDwgW3JlcHMgY291bnRdOyBpKysgKQot
CXsKLSAgICAgICAgaWYgKCBbW3JlcHMgb2JqZWN0QXRJbmRleDppXSBpc0tpbmRPZkNsYXNzOltO
U0JpdG1hcEltYWdlUmVwIGNsYXNzXV0gKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXAgPSBb
cmVwcyBvYmplY3RBdEluZGV4OmldOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQl9
Ci0gICAgCi0JaWYgKCByZXAgKQotCXsKLSAgICAgICAgLy9DR0NvbG9yU3BhY2VSZWYgY3N5bmMg
PSAoQ0dDb2xvclNwYWNlUmVmKVtyZXAgdmFsdWVGb3JQcm9wZXJ0eTpOU0ltYWdlQ29sb3JTeW5j
UHJvZmlsZURhdGFdOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgY2hhciogcGxhbmVzWzVd
OwotCi0gICAgICAgIFtyZXAgZ2V0Qml0bWFwRGF0YVBsYW5lczpwbGFuZXNdOwotCi0gICAgICAg
IGltYWdlID0gX05TQ3JlYXRlSW1hZ2VSZWYoIHBsYW5lcywgW3JlcCBwaXhlbHNXaWRlXSwgW3Jl
cCBwaXhlbHNIaWdoXSwKLSAgICAgICAgICAgICAgICAgICAgW3JlcCBiaXRzUGVyU2FtcGxlXSwg
W3JlcCBzYW1wbGVzUGVyUGl4ZWxdLCBbcmVwIGJpdHNQZXJQaXhlbF0sCi0gICAgICAgICAgICAg
ICAgICAgIFtyZXAgYnl0ZXNQZXJSb3ddLCBbcmVwIGlzUGxhbmFyXSwgW3JlcCBoYXNBbHBoYV0s
IFtyZXAgY29sb3JTcGFjZU5hbWVdLAotICAgICAgICAgICAgICAgICAgICBOVUxMLCByZXApOwot
CX0KLSAgICAKLQlyZXR1cm4gaW1hZ2U7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0FkYXB0ZXIuaCBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dBZGFwdGVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDNmNGFlMWIwZjNlYjI3YjVkMmY3OTQ4YmI3ZTllZWZmNzAxMzU5
NGIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0FkYXB0ZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9y
dCA8QXBwS2l0L0FwcEtpdC5oPgotI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgotCi1AaW50ZXJm
YWNlIENhcmJvbldpbmRvd0FkYXB0ZXIgOiBOU1dpbmRvdyAKLXsKLUBwcml2YXRlCi0KLSAgICAv
LyBUaGUgQ2FyYm9uIHdpbmRvdyB0aGF0J3MgYmVpbmcgZW5jYXBzdWxhdGVkLCBhbmQgd2hldGhl
ciBvciBub3QgdGhpcyBvYmplY3Qgb3ducyAoaGFzIHJlc3BvbnNpYmlsaXR5IGZvciBkaXNwb3Np
bmcpIGl0LgotICAgIFdpbmRvd1JlZiBfd2luZG93UmVmOwotICAgIEJPT0wgX3dpbmRvd1JlZklz
T3duZWQ7Ci0gICAgQk9PTCBfY2FyYm9uOwotCi0gICAgLy8gVGhlIFVQUCBmb3IgdGhlIGV2ZW50
IGhhbmRsZXIgdGhhdCB3ZSB1c2UgdG8gZGVhbCB3aXRoIHZhcmlvdXMgQ2FyYm9uIGV2ZW50cywg
YW5kIHRoZSBldmVudCBoYW5kbGVyIGl0c2VsZi4KLSAgICBFdmVudEhhbmRsZXJVUFAgX2hhbmRs
ZUV2ZW50VVBQOwotICAgIEV2ZW50SGFuZGxlclJlZiBfZXZlbnRIYW5kbGVyOwotICAgIAotICAg
IC8vIFllcyBpZiB0aGlzIG9iamVjdCBzaG91bGQgbGV0IENhcmJvbiBoYW5kbGUga0V2ZW50V2lu
ZG93QWN0aXZhdGVkIGFuZCBrRXZlbnRXaW5kb3dEZWFjdGl2YXRlZCBldmVudHMuICBObyBvdGhl
cndpc2UuCi0gICAgQk9PTCBfcGFzc2luZ0NhcmJvbldpbmRvd0FjdGl2YXRpb25FdmVudHM7Ci19
Ci0KLS8vIEluaXRpYWxpemVycy4KLS0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihXaW5k
b3dSZWYpaW5XaW5kb3dSZWYgdGFraW5nT3duZXJzaGlwOihCT09MKWluV2luZG93UmVmSXNPd25l
ZDsKLS0gKGlkKWluaXRXaXRoQ2FyYm9uV2luZG93UmVmOihXaW5kb3dSZWYpaW5XaW5kb3dSZWYg
dGFraW5nT3duZXJzaGlwOihCT09MKWluV2luZG93UmVmSXNPd25lZCBkaXNhYmxlT3JkZXJpbmc6
KEJPT0wpaW5EaXNhYmxlT3JkZXJpbmcgY2FyYm9uOihCT09MKWluQ2FyYm9uOwotCi0vLyBBY2Nl
c3NvcnMuCi0tIChXaW5kb3dSZWYpd2luZG93UmVmOwotCi0vLyBVcGRhdGUgdGhpcyB3aW5kb3cn
cyBmcmFtZSBhbmQgY29udGVudCByZWN0YW5nbGVzIHRvIG1hdGNoIHRoZSBDYXJib24gd2luZG93
J3Mgc3RydWN0dXJlIGFuZCBjb250ZW50IGJvdW5kcyByZWN0YW5nbGVzLiAgUmV0dXJuIHllcyBp
ZiB0aGUgdXBkYXRlIHdhcyByZWFsbHkgbmVjZXNzYXJ5LCBubyBvdGhlcndpc2UuCi0tIChCT09M
KXJlY29uY2lsZVRvQ2FyYm9uV2luZG93Qm91bmRzOwotCi0vLyBIYW5kbGUgYW4gZXZlbnQganVz
dCBsaWtlIGFuIE5TV2luZG93IHdvdWxkLgotLSAodm9pZClzZW5kU3VwZXJFdmVudDooTlNFdmVu
dCAqKWluRXZlbnQ7Ci0KLS0gKHZvaWQpcmVsaW5xdWlzaEZvY3VzOwotCi1AZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93QWRhcHRlci5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dBZGFwdGVyLm1t
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWJkMGE2MWE1NmM4YzI1N2U3OWZmNTNh
ZjdhNDEwOThlZmYyODgzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dBZGFwdGVy
Lm1tCisrKyAvZGV2L251bGwKQEAgLTEsMTA2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gSSBkb24ndCB0aGluayB0aGlz
IGNsYXNzIGJlbG9uZ3MgaW4gV2ViS2l0LiBMZXRzIG1vdmUgaXQgb3V0LgotCi0vLyBUaGluZ3Mg
dGhhdCBJJ3ZlIG5ldmVyIGJvdGhlcmVkIHdvcmtpbmcgb3V0OgotLy8gRm9yIG5vbi1zaGVldCB3
aW5kb3dzLCBoYW5kbGUgQ2FyYm9uIFdpbmRvd01vdmUgZXZlbnRzIHNvIGFzIHRvIGRvIHRoZSBz
YW1lIHRoaW5ncyBhcyAtW05TV2luZG93IF93aW5kb3dNb3ZlZF0uCi0vLyBDaGVjayB0byBzZWUg
aG93IHRoaXMgc3R1ZmYgZGVhbHMgd2l0aCB2YXJpb3VzIHNjcmVlbiBzaXplIGNoYW5nZSBzY2Vu
YXJpb3VzLgotLy8gTS5QLiBXYXJuaW5nIC0gOS8xNy8wMQotCi0vLyBUaGVyZSBhcmUgc29tZSBp
bnZhcmlhbnRzIEknbSBtYWludGFpbmluZyBmb3Igb2JqZWN0cyBvZiB0aGlzIGNsYXNzIHdoaWNo
IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgYnV0IG5vdCBkZWFsbG9jYXRlZC4g
IFRoZXNlIGFsbCBtYWtlIGl0IGVhc2llciB0byBub3Qgb3ZlcnJpZGUgZXZlcnkgc2luZ2xlIG1l
dGhvZCBvZiBOU1dpbmRvdy4KLS8vIF9hdXhpbGlhcnlTdG9yYWdlLT5hdXhXRmxhZ3MuaGFzU2hh
ZG93IHdpbGwgYWx3YXlzIGJlIGZhbHNlIGlmIHRoZSBDYXJib24gd2luZG93IGhhcyBhIGtXaW5k
b3dOb1NoYWRvd0F0dHJpYnV0ZSwgYW5kIHZpY2UgdmVyc2EuCi0vLyBfYXV4aWxpYXJ5U3RvcmFn
ZS0+X2F1eFdGbGFncy5taW5pbWl6ZWQgd2lsbCBhbHdheXMgcmVmbGVjdCB0aGUgd2luZG93J3Mg
Q2FyYm9uIGNvbGxhcHNlZCBzdGF0ZS4KLS8vIF9ib3JkZXJWaWV3IHdpbGwgYWx3YXlzIHBvaW50
IHRvIGFuIE5TQ2FyYm9uV2luZG93RnJhbWUuCi0vLyBfY29udGVudFZpZXcgd2lsbCBhbHdheXMg
cG9pbnQgdG8gYW4gTlNDYXJib25XaW5kb3dDb250ZW50VmlldzsKLS8vIF9mcmFtZSB3aWxsIGFs
d2F5cyByZWZsZWN0IHRoZSB3aW5kb3cncyBDYXJib24ga1dpbmRvd1N0cnVjdHVyZVJnbiBib3Vu
ZHMuCi0vLyBfc3R5bGVNYXNrIHdpbGwgYWx3YXlzIGhhdmUgX05TQ2FyYm9uV2luZG93TWFzayBz
ZXQsIGFuZCB3aWxsIGhhdmUgTlNDbG9zYWJsZVdpbmRvd01hc2ssIE5TTWluaWF0dXJpemFibGVX
aW5kb3dNYXNrLCBOU1Jlc2l6YWJsZVdpbmRvd01hc2ssIGFuZC9vciBOU1RpdGxlZFdpbmRvd01h
c2sgc2V0IGFzIGFwcHJvcHJpYXRlLgotLy8gX3dmbGFncy5vbmVTaG90IGFuZCBfd2ZsYWdzLmRl
bGF5ZWRPbmVTaG90IHdpbGwgYWx3YXlzIGJlIGZhbHNlLgotLy8gX3dGbGFncy52aXNpYmxlIHdp
bGwgYWx3YXlzIHJlZmxlY3QgdGhlIHdpbmRvdydzIENhcmJvbiB2aXNpYmlsaXR5LgotLy8gX3dp
bmRvd051bSB3aWxsIGFsd2F5cyBiZSBncmVhdGVyIHRoYW4gemVybywgYW5kIHZhbGlkLgotLy8g
VGhlIGluc3RhbmNlIHZhcmlhYmxlcyBpbnZvbHZlZCBhcmUgb25lcyB0aGF0IGNhbWUgdG8gbXkg
YXR0ZW50aW9uIGR1cmluZyB0aGUgaW5pdGlhbCB3cml0aW5nIG9mIHRoaXMgY2xhc3M7IEkgaGF2
ZW4ndCBtZXRob2RpY2FsbHkgZ29uZSB0aHJvdWdoIE5TV2luZG93J3MgaXZhciBsaXN0IG9yIGFu
eXRoaW5nIGxpa2UgdGhhdC4gIE0uUC4gTm90aWNlIC0gMTAvMTAvMDAKLQotLy8gVGhpbmdzIHRo
YXQgaGF2ZSB0byBiZSB3b3JrZWQgb24gaWYgTlNDYXJib25XaW5kb3dzIGFyZSBldmVyIHVzZWQg
Zm9yIHNvbWV0aGluZyBvdGhlciB0aGFuIGRpYWxvZ3MgYW5kIHNoZWV0czoKLS8vIENsaWNraW5n
IG9uIGFuIE5TQ2FyYm9uV2luZG93IHdoaWxlIGEgQ29jb2EgYXBwLW1vZGFsIGRpYWxvZyBpcyBz
aG93biBkb2VzIG5vdCBiZWVwLCBhcyBpdCBzaG91bGQgW29sZCBidWcsIG1heWJlIGZpeGVkIG5v
d10uCi0vLyBIYW5kbGluZyBvZiBtb3VzZSBjbGlja3Mgb3Iga2V5IHByZXNzZXMgZm9yIGFueSB3
aW5kb3cgY29udHJvbCAoY2xvc2UsIG1pbmlhdHVyaXplLCB6b29tKSBtaWdodCBub3QgYmUgYWxs
IHRoZXJlLgotLy8gSGFuZGxpbmcgb2YgbWluaWF0dXJpemF0aW9uIG9mIENhcmJvbiB3aW5kb3dz
IHZpYSB0aXRsZSBiYXIgZG91YmxlLWNsaWNrIG1pZ2h0IG5vdCBiZSBhbGwgdGhlcmUuCi0vLyBU
aGUgYmFja2dyb3VuZCBvbiBOU0NhcmJvbldpbmRvd1Rlc3RlcidzIHNhbXBsZSB3aW5kb3cgKG5v
dCBzYW1wbGUgZGlhbG9nIG9yIHNhbXBsZSBzaGVldCkgbWlnaHQgYmUgd3JvbmcuCi0vLyBUaGUg
Y29udHJvbHMgb24gTlNDYXJib25XaW5kb3dUZXN0ZXIncyBzYW1wbGUgd2luZG93IGxvb2sgaW5h
Y3RpdmUgd2hlbiB0aGUgd2luZG93IGlzIGluYWN0aXZlLCBidXQgaGF2ZSBmaXJzdC1jbGljayBi
ZWhhdmlvci4KLS8vIE0uUC4gV2FybmluZyAtIDEyLzE0LzAwCi0KLS8vIFNvbWUgdGhpbmdzIHdv
dWxkIGhhdmUgdG8gYmUgbWFkZSBwdWJsaWMgaWYgc29tZW9uZSB3YW50ZWQgdG8gc3ViY2xhc3Mg
dGhpcyBzbyBhcyB0byBzdXBwb3J0IG1vcmUgbWVudSBpdGVtIGNvbW1hbmRzLiAgTS5QLiBXYXJu
aW5nIC0gOS8xOS8wMAotCi0jaWZuZGVmIF9fTFA2NF9fCi0KLSNpbXBvcnQgIkNhcmJvbldpbmRv
d0FkYXB0ZXIuaCIKLQotI2ltcG9ydCAiQ2FyYm9uV2luZG93RnJhbWUuaCIKLSNpbXBvcnQgIkNh
cmJvbldpbmRvd0NvbnRlbnRWaWV3LmgiCi0jaW1wb3J0ICJISVZpZXdBZGFwdGVyLmgiCi0KLSNp
bXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLS8vI2ltcG9ydCA8Q29yZUdyYXBoaWNzL0NHU1dpbmRv
dy5oPgotI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgotI2ltcG9ydCA8YXNzZXJ0Lmg+Ci0KLSNp
bXBvcnQgPEphdmFTY3JpcHRDb3JlL0luaXRpYWxpemVUaHJlYWRpbmcuaD4KLSNpbXBvcnQgPFdl
YkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4KLSNpbXBvcnQgPHBhbC9zcGkvbWFjL0hJVG9vbGJv
eFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNXaW5kb3dTUEkuaD4KLSNpbXBvcnQgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8d3Rm
L1J1bkxvb3AuaD4KLQotI2ltcG9ydCAiV2ViS2l0TG9nZ2luZy5oIgotI2ltcG9ydCAiV2ViTlNP
YmplY3RFeHRyYXMuaCIKLSNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKLQotZXh0ZXJuIGNv
bnN0IE9TVHlwZSBOU0FwcEtpdFByb3BlcnR5Q3JlYXRvcjsKLWV4dGVybiBjb25zdCBPU1R5cGUg
TlNDYXJib25XaW5kb3dQcm9wZXJ0eVRhZzsKLQotQGludGVyZmFjZSBOU1dpbmRvdyhISVdlYkZy
YW1lVmlldykKLS0gKGlkKV9pbml0Q29udGVudDooY29uc3QgTlNSZWN0ICopY29udGVudFJlY3Qg
c3R5bGVNYXNrOih1bnNpZ25lZCBpbnQpYVN0eWxlIGJhY2tpbmc6KE5TQmFja2luZ1N0b3JlVHlw
ZSlidWZmZXJpbmdUeXBlIGRlZmVyOihCT09MKWZsYWcgY29udGVudFZpZXc6YVZpZXc7Ci0tICh2
b2lkKV9vbGRQbGFjZVdpbmRvdzooTlNSZWN0KWZyYW1lUmVjdDsKLS0gKHZvaWQpX3dpbmRvd01v
dmVkVG9SZWN0OihOU1JlY3QpYWN0dWFsRnJhbWU7Ci0tICh2b2lkKV9zZXRXaW5kb3dOdW1iZXI6
KE5TSW50ZWdlciluYXRpdmVXaW5kb3c7Ci0tIChOU0dyYXBoaWNzQ29udGV4dCAqKV90aHJlYWRD
b250ZXh0OwotLSAodm9pZClfc2V0RnJhbWU6KE5TUmVjdCluZXdXaW5kb3dGcmFtZVJlY3Q7Ci0t
ICh2b2lkKV9zZXRWaXNpYmxlOihCT09MKWZsYWc7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNBcHBs
aWNhdGlvbihISVdlYkZyYW1lVmlldykKLS0gKHZvaWQpc2V0SXNBY3RpdmU6KEJPT0wpYUZsYWc7
Ci0tIChpZClfc2V0TW91c2VBY3RpdmF0aW9uSW5Qcm9ncmVzczooQk9PTClmbGFnOwotLSAoQk9P
TClfaGFuZGxlS2V5RXF1aXZhbGVudDooTlNFdmVudCopdGhlRXZlbnQ7Ci1AZW5kCi0KLUBpbnRl
cmZhY2UgTlNJbnB1dENvbnRleHQKLS0gKEJPT0wpcHJvY2Vzc0lucHV0S2V5QmluZGluZ3M6KE5T
RXZlbnQgKilldmVudDsKLUBlbmQKLQotLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCi1zdGF0aWMg
T1NTdGF0dXMgTlNDYXJib25XaW5kb3dIYW5kbGVFdmVudChFdmVudEhhbmRsZXJDYWxsUmVmIGlu
RXZlbnRIYW5kbGVyQ2FsbFJlZiwgRXZlbnRSZWYgaW5FdmVudFJlZiwgdm9pZCAqaW5Vc2VyRGF0
YSk7Ci0KLUBpbXBsZW1lbnRhdGlvbiBDYXJib25XaW5kb3dBZGFwdGVyCi0KLQotLy8gUmV0dXJu
IGFuIGFwcHJvcHJpYXRlIHdpbmRvdyBmcmFtZSBjbGFzcy4KLSsgKENsYXNzKWZyYW1lVmlld0Ns
YXNzRm9yU3R5bGVNYXNrOih1bnNpZ25lZClzdHlsZQotewotCi0gICAgLy8gVGhlcmUncyBvbmx5
IG9uZSBhcHByb3ByaWF0ZSB3aW5kb3cgc3R5bGUsIGFuZCBvbmx5IG9uZSBhcHByb3ByaWF0ZSB3
aW5kb3cgZnJhbWUgY2xhc3MuCi0gICAgYXNzZXJ0KHN0eWxlICYgX05TQ2FyYm9uV2luZG93TWFz
ayk7Ci0gICAgcmV0dXJuIFtDYXJib25XaW5kb3dGcmFtZSBjbGFzc107Ci0KLX0KLQotCi0vLyBP
dmVycmlkaW5nIG9mIHRoZSBwYXJlbnQgY2xhc3MnIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIsIGp1
c3QgZm9yIHNhZmV0eSdzIHNha2UuCi0tIChpZClpbml0V2l0aENvbnRlbnRSZWN0OihOU1JlY3Qp
Y29udGVudFJlY3Qgc3R5bGVNYXNrOih1bnNpZ25lZClzdHlsZSBiYWNraW5nOihOU0JhY2tpbmdT
dG9yZVR5cGUpYnVmZmVyaW5nVHlwZSBkZWZlcjooQk9PTClmbGFnCi17Ci0KLSAgICAvLyBEbyB0
aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcuCi0gICAgc2VsZiA9IFtzdXBlciBpbml0V2l0aENvbnRl
bnRSZWN0OmNvbnRlbnRSZWN0IHN0eWxlTWFzazpzdHlsZSBiYWNraW5nOmJ1ZmZlcmluZ1R5cGUg
ZGVmZXI6ZmxhZ107Ci0gICAgaWYgKHNlbGYgPT0gbmlsKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgLy8gU2ltcGxlLgotICAgIF93aW5kb3dSZWYgPSBudWxscHRyOwotICAgIF93aW5kb3dS
ZWZJc093bmVkID0gTk87Ci0gICAgX2V2ZW50SGFuZGxlciA9IG51bGxwdHI7Ci0gICAgCi0gICAg
Ly8gRG9uZS4KLSAgICByZXR1cm4gc2VsZjsKLQotfQotCi0vLyBHaXZlbiBhIHJlZmVyZW5jZSB0
byBhIENhcmJvbiB3aW5kb3cgdGhhdCBpcyB0byBiZSBlbmNhcHN1bGF0ZWQsIGFuIGluZGljYXRv
ciBvZiB3aGV0aGVyIG9yIG5vdCB0aGlzIG9iamVjdCBzaG91bGQgdGFrZSByZXNwb25zaWJpbGl0
eSBmb3IgZGlzcG9zaW5nIG9mIHRoZSBDYXJib24gd2luZG93LCBhbmQgYW4gaW5kaWNhdG9yIG9m
IHdoZXRoZXIgdG8gZGlzYWJsZSBDYXJib24gd2luZG93IG9yZGVyaW5nLCBpbml0aWFsaXplLiAg
VGhpcyBpcyB0aGUgY2xhc3MnIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXIuCi0tIChpZClpbml0V2l0
aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmKWluV2luZG93UmVmIHRha2luZ093bmVyc2hpcDoo
Qk9PTClpbldpbmRvd1JlZklzT3duZWQgZGlzYWJsZU9yZGVyaW5nOihCT09MKWluRGlzYWJsZU9y
ZGVyaW5nIGNhcmJvbjooQk9PTClpbkNhcmJvbgotewotCi0gICAgTlNCYWNraW5nU3RvcmVUeXBl
IGJhY2tpbmdTdG9yZVR5cGU7Ci0gICAgQ2FyYm9uV2luZG93Q29udGVudFZpZXcgKmNhcmJvbldp
bmRvd0NvbnRlbnRWaWV3OwotICAgIE5TV2luZG93ICp3aW5kb3dBc1Byb3BlcnR5OwotICAgIE9T
U3RhdHVzIG9zU3RhdHVzOwotICAgIFVJbnQzMiB3aW5kb3dGZWF0dXJlczsKLSAgICBXaW5kb3dB
dHRyaWJ1dGVzIHdpbmRvd0F0dHJpYnV0ZXM7Ci0gICAgdW5zaWduZWQgaW50IHN0eWxlTWFzazsK
LSAgICB2b2lkICpuYXRpdmVXaW5kb3c7Ci0gICAgV2luZG93TW9kYWxpdHkgd2luZG93TW9kYWxp
dHk7Ci0gICAgQ29udHJvbFJlZiBjb250ZW50VmlldzsKLQotICAgIC8vIFNpbXBsZS4KLSAgICAv
LyBJdCdzIHZlcnkgd2VhayB0byBoYXZlIHRvIHB1dCB0aGlzIGJlZm9yZSB0aGUgaW52b2NhdGlv
biBvZiBbc3VwZXIgaW5pdFdpdGhDb250ZW50UmVjdDouLi5dLCBidXQgLXNldENvbnRlbnRWaWV3
OiBpcyBpbnZva2VkIGZyb20gd2l0aGluIHRoYXQgaW5pdGlhbGl6ZXIuICBJdCB0dXJucyBvdXQg
dGhhdCB0aGUgY29tbW9uIGFkbW9uaXRpb24gYWJvdXQgbm90IGNhbGxpbmcgdmlydHVhbCBmdW5j
dGlvbnMgZnJvbSB3aXRoaW4gQysrIGNvbnN0cnVjdG9ycyBtYWtlcyBzZW5zZSBpbiBPYmplY3Rp
dmUtQyB0b28uICBNLlAuIE5vdGljZSAtIDEwLzEwLzAwCi0gICAgX3dpbmRvd1JlZiA9IGluV2lu
ZG93UmVmOwotICAgIC8vX2F1eGlsaWFyeVN0b3JhZ2UtPl93aW5kb3dSZWYgPSBpbldpbmRvd1Jl
ZjsKLSAgICBfd2luZG93UmVmSXNPd25lZCA9IGluV2luZG93UmVmSXNPd25lZDsKLSAgICBfY2Fy
Ym9uID0gaW5DYXJib247Ci0KLSAgICAvLyBGaW5kIG91dCB0aGUgd2luZG93J3MgQ29yZUdyYXBo
aWNzIHdpbmRvdyByZWZlcmVuY2UuCi0gICAgbmF0aXZlV2luZG93ID0gKHZvaWQqKUdldE5hdGl2
ZVdpbmRvd0Zyb21XaW5kb3dSZWYoaW5XaW5kb3dSZWYpOwotCi0gICAgLy8gRmluZCBvdXQgdGhl
IHdpbmRvdydzIENhcmJvbiB3aW5kb3cgYXR0cmlidXRlcy4KLSAgICBHZXRXaW5kb3dBdHRyaWJ1
dGVzKGluV2luZG93UmVmLCAmd2luZG93QXR0cmlidXRlcyk7Ci0KLSAgICAvLyBGaW5kIG91dCB0
aGUgd2luZG93J3MgQ2FyYm9uIHdpbmRvdyBmZWF0dXJlcy4KLSAgICBHZXRXaW5kb3dGZWF0dXJl
cyhpbldpbmRvd1JlZiwgJndpbmRvd0ZlYXR1cmVzKTsKLQotICAgIC8vIEZpZ3VyZSBvdXQgdGhl
IHdpbmRvdydzIGJhY2tpbmcgc3RvcmUgdHlwZS4KLSAgICAvLyBBdCBvbmUgdGltZSwgdGhpcyBo
YWQgY29kZSBzdG9sZW4gZnJvbSBDcmVhdGVQbGF0Zm9ybVdpbmRvdyBpbiBISVRvb2xib3gvV2lu
ZG93cy9QbGF0Zm9ybS9DR1NQbGF0Zm9ybS5jCi0gICAgLy8gQnV0IG5vdyB0aGUgbm9uLXJldGFp
bmVkIHdpbmRvdyBjbGFzcyBpcyBhIENhcmJvbiBzZWNyZXQgdGhhdCdzIG5vdCBldmVuIGluCi0g
ICAgLy8gV2luZG93c1ByaXYuaDsgbWF5YmUgd2UnbGwgaGF2ZSB0byByZXZpc2l0IHRoaXMgaWYg
c29tZW9uZSBuZWVkcyB0byB1c2UgV2ViS2l0Ci0gICAgLy8gaW4gYSBub24tcmV0YWluZWQgd2lu
ZG93LgotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgYmFja2lu
Z1N0b3JlVHlwZSA9IE5TQmFja2luZ1N0b3JlUmV0YWluZWQ7Ci0gICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICAvLyBGaWd1cmUgb3V0IHRoZSB3aW5kb3cncyBzdHls
ZSBtYXNrLgotICAgIHN0eWxlTWFzayA9IF9OU0NhcmJvbldpbmRvd01hc2s7Ci0gICAgaWYgKHdp
bmRvd0F0dHJpYnV0ZXMgJiBrV2luZG93Q2xvc2VCb3hBdHRyaWJ1dGUpCi0gICAgICAgIHN0eWxl
TWFzayB8PSBOU1dpbmRvd1N0eWxlTWFza0Nsb3NhYmxlOwotICAgIGlmICh3aW5kb3dBdHRyaWJ1
dGVzICYga1dpbmRvd1Jlc2l6YWJsZUF0dHJpYnV0ZSkKLSAgICAgICAgc3R5bGVNYXNrIHw9IE5T
V2luZG93U3R5bGVNYXNrUmVzaXphYmxlOwotICAgIGlmICh3aW5kb3dGZWF0dXJlcyAmIGtXaW5k
b3dDYW5Db2xsYXBzZSkKLSAgICAgICAgc3R5bGVNYXNrIHw9IE5TV2luZG93U3R5bGVNYXNrTWlu
aWF0dXJpemFibGU7Ci0gICAgaWYgKHdpbmRvd0ZlYXR1cmVzICYga1dpbmRvd0hhc1RpdGxlQmFy
KQotICAgICAgICBzdHlsZU1hc2sgfD0gTlNXaW5kb3dTdHlsZU1hc2tUaXRsZWQ7Ci0KLSAgICBv
c1N0YXR1cyA9IEdldFdpbmRvd01vZGFsaXR5KF93aW5kb3dSZWYsICZ3aW5kb3dNb2RhbGl0eSwg
bnVsbHB0cik7Ci0gICAgaWYgKG9zU3RhdHVzICE9IG5vRXJyKSB7Ci0gICAgICAgIE5TTG9nKEAi
Q291bGRuJ3QgZ2V0IHdpbmRvdyBtb2RhbGl0eTogZXJyb3I9JWxkIiwgb3NTdGF0dXMpOwotICAg
ICAgICByZXR1cm4gbmlsOwotICAgIH0KLSAgICAKLSAgICAvLyBDcmVhdGUgb25lIG9mIG91ciBz
cGVjaWFsIGNvbnRlbnQgdmlld3MuCi0gICAgY2FyYm9uV2luZG93Q29udGVudFZpZXcgPSBbW1tD
YXJib25XaW5kb3dDb250ZW50VmlldyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotCi0gICAg
Ly8gRG8gc29tZSBzdGFuZGFyZCBDb2NvYSBpbml0aWFsaXphdGlvbi4gIFRoZSBkZWZlciBhcmd1
bWVudCdzIHZhbHVlIGlzIFlFUyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgLVtOU1dpbmRvdyBfY29t
bW9uQXdha2VdIHRvIGdldCBjYWxsZWQuICBJdCBkb2Vzbid0IGFwcGVhciB0aGF0IGFueSByZWxl
dmFudCBOU1dpbmRvdyBjb2RlIGNoZWNrcyBfd0ZsYWdzLmRlZmVycmVkLCBzbyB3ZSBzaG91bGQg
YmUgYWJsZSB0byBnZXQgYXdheSB3aXRoIHRoZSBsaWUuCi0gICAgc2VsZiA9IChDYXJib25XaW5k
b3dBZGFwdGVyKilbc3VwZXIgX2luaXRDb250ZW50Om51bGxwdHIgc3R5bGVNYXNrOnN0eWxlTWFz
ayBiYWNraW5nOmJhY2tpbmdTdG9yZVR5cGUgZGVmZXI6WUVTIGNvbnRlbnRWaWV3OmNhcmJvbldp
bmRvd0NvbnRlbnRWaWV3XTsKLSAgICBpZiAoIXNlbGYpIHJldHVybiBuaWw7Ci0gICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBhc3NlcnQoX2NvbnRlbnRWaWV3KTsK
LSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKLQotICAgIC8vIFJlY29yZCBh
Y2N1cmF0ZWx5IHdoZXRoZXIgb3Igbm90IHRoaXMgd2luZG93IGhhcyBhIHNoYWRvdywgaW4gY2Fz
ZSBzb21lb25lIGFza3MuCi0gLy8gICBfYXV4aWxpYXJ5U3RvcmFnZS0+X2F1eFdGbGFncy5oYXNT
aGFkb3cgPSAod2luZG93QXR0cmlidXRlcyAmIGtXaW5kb3dOb1NoYWRvd0F0dHJpYnV0ZSkgPyBO
TyA6IFlFUzsKLQotICAgIC8vIFJlY29yZCB0aGUgd2luZG93IG51bWJlci4KLSAgICBbc2VsZiBf
c2V0V2luZG93TnVtYmVyOihOU0ludGVnZXIpbmF0aXZlV2luZG93XTsKLQotICAgIC8vIFNldCB1
cCBmcm9tIHRoZSBmcmFtZSByZWN0YW5nbGUuCi0gICAgLy8gV2UgZGlkbid0IGV2ZW4gcmVhbGx5
IHRyeSB0byBnZXQgaXQgcmlnaHQgYXQgX2luaXRDb250ZW50Oi4uLiB0aW1lLCBiZWNhdXNlIGl0
J3MgbW9yZSB0cm91YmxlIHRoYXQgaXQncyB3b3J0aCB0byB3cml0ZSBhIHJlYWwgK1tOU0NhcmJv
bldpbmRvdyBmcmFtZVJlY3RGb3JDb250ZW50UmVjdDpzdHlsZU1hc2s6XS4gIE0uUC4gTm90aWNl
IC0gMTAvMTAvMDAKLSAgICBbc2VsZiByZWNvbmNpbGVUb0NhcmJvbldpbmRvd0JvdW5kc107Ci0K
LSAgICAvLyBJbnN0YWxsIGFuIGV2ZW50IGhhbmRsZXIgZm9yIHRoZSBDYXJib24gd2luZG93IGV2
ZW50cyBpbiB3aGljaCB3ZSdyZSBpbnRlcmVzdGVkLgotICAgIGNvbnN0IEV2ZW50VHlwZVNwZWMg
a0V2ZW50c1tdID0gewotICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dB
Y3RpdmF0ZWQgfSwKLSAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93RGVh
Y3RpdmF0ZWQgfSwKLSAgICAgICAgeyBrRXZlbnRDbGFzc1dpbmRvdywga0V2ZW50V2luZG93Qm91
bmRzQ2hhbmdlZCB9LAotICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dT
aG93biB9LAotICAgICAgICB7IGtFdmVudENsYXNzV2luZG93LCBrRXZlbnRXaW5kb3dIaWRkZW4g
fQotICAgIH07Ci0gICAgCi0gICAgY29uc3QgRXZlbnRUeXBlU3BlYyBrQ29udHJvbEJvdW5kc0No
YW5nZWRFdmVudCA9IHsga0V2ZW50Q2xhc3NDb250cm9sLCBrRXZlbnRDb250cm9sQm91bmRzQ2hh
bmdlZCB9OwotICAgIAotICAgIG9zU3RhdHVzID0gSW5zdGFsbEV2ZW50SGFuZGxlciggR2V0V2lu
ZG93RXZlbnRUYXJnZXQoX3dpbmRvd1JlZiksIE5TQ2FyYm9uV2luZG93SGFuZGxlRXZlbnQsIEdl
dEV2ZW50VHlwZUNvdW50KCBrRXZlbnRzICksIGtFdmVudHMsICh2b2lkKilzZWxmLCAmX2V2ZW50
SGFuZGxlcik7Ci0gICAgaWYgKG9zU3RhdHVzIT1ub0VycikgewotICAgICAgICAgICAgW3NlbGYg
cmVsZWFzZV07Ci0gICAgICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIG9zU3RhdHVz
ID0gSW5zdGFsbEV2ZW50SGFuZGxlciggR2V0Q29udHJvbEV2ZW50VGFyZ2V0KCBISVZpZXdHZXRS
b290KCBfd2luZG93UmVmICkgKSwgTlNDYXJib25XaW5kb3dIYW5kbGVFdmVudCwgMSwgJmtDb250
cm9sQm91bmRzQ2hhbmdlZEV2ZW50LCAodm9pZCopc2VsZiwgJl9ldmVudEhhbmRsZXIpOwotICAg
IGlmIChvc1N0YXR1cyE9bm9FcnIpIHsKLSAgICAgICAgICAgIFtzZWxmIHJlbGVhc2VdOwotICAg
ICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICBISVZpZXdGaW5kQnlJRCggSElWaWV3
R2V0Um9vdCggX3dpbmRvd1JlZiApLCBrSElWaWV3V2luZG93Q29udGVudElELCAmY29udGVudFZp
ZXcgKTsKLSAgICBvc1N0YXR1cyA9IEluc3RhbGxFdmVudEhhbmRsZXIoIEdldENvbnRyb2xFdmVu
dFRhcmdldCggY29udGVudFZpZXcgKSwgTlNDYXJib25XaW5kb3dIYW5kbGVFdmVudCwgMSwgJmtD
b250cm9sQm91bmRzQ2hhbmdlZEV2ZW50LCAodm9pZCopc2VsZiwgJl9ldmVudEhhbmRsZXIpOwot
ICAgIGlmIChvc1N0YXR1cyE9bm9FcnIpIHsKLSAgICAgICAgICAgIFtzZWxmIHJlbGVhc2VdOwot
ICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICB9Ci0KLSAgICAvLyBQdXQgYSBwb2ludGVyIHRv
IHRoaXMgQ29jb2EgTlNXaW5kb3cgaW4gYSBDYXJib24gd2luZG93IHByb3BlcnR5IHRhZy4KLSAg
ICAvLyBSaWdodCBub3csIHRoaXMgaXMganVzdCB1c2VkIGJ5IE5TVmlld0NhcmJvbkNvbnRyb2wu
ICBNLlAuIE5vdGljZSAtIDEwLzkvMDAKLSAgICB3aW5kb3dBc1Byb3BlcnR5ID0gc2VsZjsKLSAg
ICBvc1N0YXR1cyA9IFNldFdpbmRvd1Byb3BlcnR5KF93aW5kb3dSZWYsIE5TQXBwS2l0UHJvcGVy
dHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFnLCBzaXplb2YoTlNXaW5kb3cgKiks
ICZ3aW5kb3dBc1Byb3BlcnR5KTsKLSAgICBpZiAob3NTdGF0dXMhPW5vRXJyKSB7Ci0gICAgICAg
IFtzZWxmIHJlbGVhc2VdOwotICAgICAgICByZXR1cm4gbmlsOwotICAgIH0KLQotICAgIC8vIEln
bm9yZSB0aGUgQ2FyYm9uIHdpbmRvdyBhY3RpdmF0aW9uL2RlYWN0aXZhdGlvbiBldmVudHMgdGhh
dCBDYXJib24gc2VuZHMgdG8gaXRzIHdpbmRvd3MgYXQgYXBwIGFjdGl2YXRpb24vZGVhY3RpdmF0
aW9uLiAgV2UnbGwgc2VuZCBzdWNoIGV2ZW50cyB3aGVuIHdlIHRoaW5rIGl0J3MgYXBwcm9wcmlh
dGUuCi0gICAgX3Bhc3NpbmdDYXJib25XaW5kb3dBY3RpdmF0aW9uRXZlbnRzID0gTk87Ci0KLSAg
ICAvLyBCZSBzdXJlIHRvIHN5bmMgdXAgdmlzaWJpbGl0eQotICAgIFtzZWxmIF9zZXRWaXNpYmxl
OihCT09MKUlzV2luZG93VmlzaWJsZSggX3dpbmRvd1JlZiApXTsKLQotICAgIC8vIERvbmUuCi0g
ICAgcmV0dXJuIHNlbGY7Ci0KLX0KLQotLSAodm9pZClzZXRWaWV3c05lZWREaXNwbGF5OihCT09M
KXdlbGxEb1RoZXkKLXsKLSAgICAvLyBNYWtlIHN1cmUgd2UgY2FuIGZsdXNoIGFueXRoaW5nIHRo
YXQgbmVlZHMgaXQuCi0KLSAgICAvLyBXZSBuZWVkIHRvIHN5bmMgdGhlIGNvbnRleHQgaGVyZS4g
SSB3YXMgaG9waW5nIEkgZGlkbid0IG5lZWQgdG8gZG8gdGhpcywKLSAgICAvLyBidXQgYXBwYXJl
bnRseSB3aGVuIHNjcm9sbGluZywgdGhlIEFwcEtpdCB2aWV3IHN5c3RlbSBkcmF3cyBkaXJlY3Rs
eS4KLSAgICAvLyBXaGVuIHRoaXMgb2NjdXJzLCBJIGNhbm5vdCBpbnRlcmNlcHQgaXQgdG8gbWFr
ZSBpdCBkcmF3IGluIG15IEhJVmlldwotICAgIC8vIGNvbnRleHQuIFdoYXQgZW5kcyB1cCBoYXBw
ZW5pbmcgaXMgdGhhdCBpdCBkcmF3cywgYnV0IG5vdGhpbmcgZXZlcgotICAgIC8vIGZsdXNoZXMg
aXQuCi0KLSAgICBpZiAoW3NlbGYgd2luZG93TnVtYmVyXSAhPSAtMSkgewotICAgICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICBDR0NvbnRleHRSZWYgY2dD
b250ZXh0ID0gKENHQ29udGV4dFJlZilbW3NlbGYgX3RocmVhZENvbnRleHRdIGdyYXBoaWNzUG9y
dF07Ci0gICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotICAgICAgICBD
R0NvbnRleHRTeW5jaHJvbml6ZShjZ0NvbnRleHQpOwotICAgIH0KLX0KLQotKyAodm9pZClpbml0
aWFsaXplCi17Ci0gICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7Ci0gICAgV1RGOjppbml0
aWFsaXplTWFpblRocmVhZFRvUHJvY2Vzc01haW5UaHJlYWQoKTsKLSAgICBSdW5Mb29wOjppbml0
aWFsaXplTWFpblJ1bkxvb3AoKTsKLX0KLQotLy8gR2l2ZW4gYSByZWZlcmVuY2UgdG8gYSBDYXJi
b24gd2luZG93IHRoYXQgaXMgdG8gYmUgZW5jYXBzdWxhdGVkLCBhbmQgYW4gaW5kaWNhdG9yIG9m
IHdoZXRoZXIgb3Igbm90IHRoaXMgb2JqZWN0IHNob3VsZCB0YWtlIHJlc3BvbnNpYmlsaXR5IGZv
ciBkaXNwb3Npbmcgb2YgdGhlIENhcmJvbiB3aW5kb3csIGluaXRpYWxpemUuCi0tIChpZClpbml0
V2l0aENhcmJvbldpbmRvd1JlZjooV2luZG93UmVmKWluV2luZG93UmVmIHRha2luZ093bmVyc2hp
cDooQk9PTClpbldpbmRvd1JlZklzT3duZWQKLXsKLSAgICAvLyBmb3Igbm93LCBzZXQgZGlzYWJs
ZU9yZGVyaW5nIHRvIFlFUyBiZWNhdXNlIHRoYXQgaXMgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nIGFu
ZCBpcyB0aGVyZWZvcmUgbG93ZXIgcmlzay4gSG93ZXZlciwgSSB0aGluayBpdCB3b3VsZCBiZSBj
b3JyZWN0IHRvIHNldCBpdCB0byBOTy4KLSAgICByZXR1cm4gW3NlbGYgaW5pdFdpdGhDYXJib25X
aW5kb3dSZWY6aW5XaW5kb3dSZWYgdGFraW5nT3duZXJzaGlwOmluV2luZG93UmVmSXNPd25lZCBk
aXNhYmxlT3JkZXJpbmc6WUVTIGNhcmJvbjpOT107Ci19Ci0KLQotLy8gQ2xlYW4gdXAuCi0tICh2
b2lkKWRlYWxsb2MKLXsKLSAgICBpZiAoV2ViQ29yZU9iakNTY2hlZHVsZURlYWxsb2NhdGVPbk1h
aW5UaHJlYWQoW0NhcmJvbldpbmRvd0FkYXB0ZXIgY2xhc3NdLCBzZWxmKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gQ2xlYW4gdXAsIGlmIG5lY2Vzc2FyeS4KLSAgICAvLyBpZiB3ZSBkaWRu
J3QgcmVtb3ZlIHRoZSBldmVudCBoYW5kbGVyIGF0IGRlYWxsb2MgdGltZSwgd2Ugd291bGQgcmlz
ayBnZXR0aW5nIHNlbnQgZXZlbnRzIGFmdGVyIHRoZSB3aW5kb3cgaGFzIGJlZW4gZGVhbGxvY2F0
ZWQuICBTZWUgMjcwMjE3OS4gIE0uUC4gTm90aWNlIC0gNi8xLzAxCi0gICAgaWYgKF9ldmVudEhh
bmRsZXIpIFJlbW92ZUV2ZW50SGFuZGxlcihfZXZlbnRIYW5kbGVyKTsKLQotICAgIC8vIERvIHRo
ZSBzdGFuZGFyZCBDb2NvYSB0aGluZy4KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19Ci0KLS0gKFdp
bmRvd1JlZil3aW5kb3dSZWYKLXsKLQotICAgIC8vIFNpbXBsZS4KLSAgICByZXR1cm4gX3dpbmRv
d1JlZjsKLQotfQotCi0vLyBzaG91bGQgYWx3YXlzIGJlIFlFUywgYnV0IGNoZWNrIGluIG9yZGVy
IHRvIGF2b2lkIGluaXRpYWxpemF0aW9uIG9yIGRlYWxsb2NhdGlvbiBzdXJwcmlzZXMKLS0gKEJP
T0wpX2hhc1dpbmRvd1JlZgotewotICAgIHJldHVybiAoX3dpbmRvd1JlZiAhPSBudWxscHRyKTsK
LX0KLQotLy8gYW4gTlNDYXJib25XaW5kb3cgZG9lcyBub3QgbWFuYWdlIHRoZSB3aW5kb3dSZWYu
ICBUaGUgd2luZG93UmVmIG1hbmFnZXMgdGhlIE5TQ2FyYm9uV2luZG93Ci0tIChCT09MKV9tYW5h
Z2VzV2luZG93UmVmCi17Ci0gICAgcmV0dXJuIE5POwotfQotCi0tICh2b2lkKV9yZW1vdmVXaW5k
b3dSZWYKLXsKLSAgICBfd2luZG93UmVmID0gbnVsbHB0cjsKLQotICAgIGlmIChfZXZlbnRIYW5k
bGVyKSBSZW1vdmVFdmVudEhhbmRsZXIoX2V2ZW50SGFuZGxlcik7Ci0KLSAgICBfZXZlbnRIYW5k
bGVyID0gbnVsbHB0cjsKLX0KLQotLSAoV2luZG93Q2xhc3MpX2NhcmJvbldpbmRvd0NsYXNzCi17
Ci0gICAgV2luZG93Q2xhc3Mgd2luZG93Q2xhc3MgPSBrRG9jdW1lbnRXaW5kb3dDbGFzczsKLSAg
ICBPU1N0YXR1cyBvc1N0YXR1czsKLQotICAgIGlmIChbc2VsZiBfaGFzV2luZG93UmVmXSkgewot
ICAgICAgICBvc1N0YXR1cyA9IEdldFdpbmRvd0NsYXNzKFtzZWxmIHdpbmRvd1JlZl0sICZ3aW5k
b3dDbGFzcyk7Ci0gICAgICAgIGlmIChvc1N0YXR1cyAhPSBub0VycikgewotICAgICAgICAgICAg
TlNMb2coQCJDb3VsZG4ndCBnZXQgd2luZG93IGNsYXNzOiBlcnJvcj0lbGQiLCBvc1N0YXR1cyk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHdpbmRvd0NsYXNzOyAKLX0KLQotLy8gVXBk
YXRlIHRoaXMgd2luZG93J3MgZnJhbWUgYW5kIGNvbnRlbnQgZnJhbWUgcmVjdGFuZ2xlcyB0byBt
YXRjaCB0aGUgQ2FyYm9uIHdpbmRvdydzIHN0cnVjdHVyZSBib3VuZHMgYW5kIGNvbnRlbnQgYm91
bmRzIHJlY3RhbmdsZXMuICBSZXR1cm4geWVzIGlmIHRoZSB1cGRhdGUgd2FzIHJlYWxseSBuZWNl
c3NhcnksIG5vIG90aGVyd2lzZS4KLS0gKEJPT0wpcmVjb25jaWxlVG9DYXJib25XaW5kb3dCb3Vu
ZHMKLXsKLSAgICBPU1N0YXR1cyBvc1N0YXR1czsKLSAgICBOU1JlY3QgbmV3Q29udGVudEZyYW1l
UmVjdDsKLSAgICBOU1JlY3QgbmV3V2luZG93RnJhbWVSZWN0OwotICAgIE5TUmVjdCBvbGRDb250
ZW50RnJhbWVSZWN0OwotICAgIFJlY3Qgd2luZG93Q29udGVudEJvdW5kc1JlY3Q7Ci0gICAgUmVj
dCB3aW5kb3dTdHJ1Y3R1cmVCb3VuZHNSZWN0OwotCi0gICAgLy8gSW5pdGlhbGl6ZSBmb3Igc2Fm
ZSByZXR1cm5pbmcuCi0gICAgQk9PTCByZWNvbmNpbGlhdGlvbldhc05lY2Vzc2FyeSA9IE5POwot
Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAvLyBQcmVjb25k
aXRpb24gY2hlY2suCi0gICAgYXNzZXJ0KF9jb250ZW50Vmlldyk7Ci0gICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICAvLyBHZXQgdGhlIENhcmJvbiB3aW5kb3cncyBi
b3VuZHMsIHdoaWNoIGFyZSBleHByZXNzZWQgaW4gZ2xvYmFsIHNjcmVlbiBjb29yZGluYXRlcywg
d2l0aCAoMCwwKSBhdCB0aGUgdG9wLWxlZnQgb2YgdGhlIG1haW4gc2NyZWVuLgotICAgIG9zU3Rh
dHVzID0gR2V0V2luZG93Qm91bmRzKF93aW5kb3dSZWYsIGtXaW5kb3dTdHJ1Y3R1cmVSZ24sICZ3
aW5kb3dTdHJ1Y3R1cmVCb3VuZHNSZWN0KTsKLSAgICBpZiAob3NTdGF0dXMgIT0gbm9FcnIpCi0g
ICAgICAgIE5TTG9nKEAiQSBDYXJib24gd2luZG93J3Mgc3RydWN0dXJlIGJvdW5kcyBjb3VsZG4n
dCBiZSBnb3R0ZW4uIik7Ci0gICAgb3NTdGF0dXMgPSBHZXRXaW5kb3dCb3VuZHMoX3dpbmRvd1Jl
Ziwga1dpbmRvd0NvbnRlbnRSZ24sICZ3aW5kb3dDb250ZW50Qm91bmRzUmVjdCk7Ci0gICAgaWYg
KG9zU3RhdHVzICE9IG5vRXJyKQotICAgICAgICBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIGNv
bnRlbnQgYm91bmRzIGNvdWxkbid0IGJlIGdvdHRlbi4iKTsKLQotICAgIC8vIFNldCB0aGUgZnJh
bWUgcmVjdGFuZ2xlIG9mIHRoZSBib3JkZXIgdmlldyBhbmQgdGhpcyB3aW5kb3cgZnJvbSB0aGUg
Q2FyYm9uIHdpbmRvdydzIHN0cnVjdHVyZSByZWdpb24gYm91bmRzLgotICAgIG5ld1dpbmRvd0Zy
YW1lUmVjdC5vcmlnaW4ueCA9IHdpbmRvd1N0cnVjdHVyZUJvdW5kc1JlY3QubGVmdDsKLSAgICBu
ZXdXaW5kb3dGcmFtZVJlY3Qub3JpZ2luLnkgPSBOU01heFkoWyhOU1NjcmVlbiAqKVtbTlNTY3Jl
ZW4gc2NyZWVuc10gb2JqZWN0QXRJbmRleDowXSBmcmFtZV0pIC0gd2luZG93U3RydWN0dXJlQm91
bmRzUmVjdC5ib3R0b207Ci0gICAgbmV3V2luZG93RnJhbWVSZWN0LnNpemUud2lkdGggPSB3aW5k
b3dTdHJ1Y3R1cmVCb3VuZHNSZWN0LnJpZ2h0IC0gd2luZG93U3RydWN0dXJlQm91bmRzUmVjdC5s
ZWZ0OwotICAgIG5ld1dpbmRvd0ZyYW1lUmVjdC5zaXplLmhlaWdodCA9IHdpbmRvd1N0cnVjdHVy
ZUJvdW5kc1JlY3QuYm90dG9tIC0gd2luZG93U3RydWN0dXJlQm91bmRzUmVjdC50b3A7Ci0gICAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBpZiAoIU5TRXF1YWxSZWN0
cyhuZXdXaW5kb3dGcmFtZVJlY3QsIF9mcmFtZSkpIHsKLSAgICAgICAgW3NlbGYgX3NldEZyYW1l
Om5ld1dpbmRvd0ZyYW1lUmVjdF07Ci0gICAgICAgIFtfYm9yZGVyVmlldyBzZXRGcmFtZVNpemU6
bmV3V2luZG93RnJhbWVSZWN0LnNpemVdOwotICAgICAgICByZWNvbmNpbGlhdGlvbldhc05lY2Vz
c2FyeSA9IFlFUzsKLSAgICB9Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
Ci0KLSAgICAvLyBTZXQgdGhlIGNvbnRlbnQgdmlldydzIGZyYW1lIHJlY3QgZnJvbSB0aGUgQ2Fy
Ym9uIHdpbmRvdydzIGNvbnRlbnQgcmVnaW9uIGJvdW5kcy4KLSAgICBuZXdDb250ZW50RnJhbWVS
ZWN0Lm9yaWdpbi54ID0gd2luZG93Q29udGVudEJvdW5kc1JlY3QubGVmdCAtIHdpbmRvd1N0cnVj
dHVyZUJvdW5kc1JlY3QubGVmdDsKLSAgICBuZXdDb250ZW50RnJhbWVSZWN0Lm9yaWdpbi55ID0g
d2luZG93U3RydWN0dXJlQm91bmRzUmVjdC5ib3R0b20gLSB3aW5kb3dDb250ZW50Qm91bmRzUmVj
dC5ib3R0b207Ci0gICAgbmV3Q29udGVudEZyYW1lUmVjdC5zaXplLndpZHRoID0gd2luZG93Q29u
dGVudEJvdW5kc1JlY3QucmlnaHQgLSB3aW5kb3dDb250ZW50Qm91bmRzUmVjdC5sZWZ0OwotICAg
IG5ld0NvbnRlbnRGcmFtZVJlY3Quc2l6ZS5oZWlnaHQgPSB3aW5kb3dDb250ZW50Qm91bmRzUmVj
dC5ib3R0b20gLSB3aW5kb3dDb250ZW50Qm91bmRzUmVjdC50b3A7Ci0gICAgQUxMT1dfREVQUkVD
QVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBvbGRDb250ZW50RnJhbWVSZWN0ID0gWyhOU1Zp
ZXcgKilfY29udGVudFZpZXcgZnJhbWVdOwotICAgIGlmICghTlNFcXVhbFJlY3RzKG5ld0NvbnRl
bnRGcmFtZVJlY3QsIG9sZENvbnRlbnRGcmFtZVJlY3QpKSB7Ci0gICAgICAgIFsoTlNWaWV3ICop
X2NvbnRlbnRWaWV3IHNldEZyYW1lOm5ld0NvbnRlbnRGcmFtZVJlY3RdOwotICAgICAgICByZWNv
bmNpbGlhdGlvbldhc05lY2Vzc2FyeSA9IFlFUzsKLSAgICB9Ci0gICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECi0KLSAgICAvLyBEb25lLgotICAgIHJldHVybiByZWNvbmNpbGlh
dGlvbldhc05lY2Vzc2FyeTsKLQotfQotCi0KLS8vIEhhbmRsZSBhbiBldmVudCBqdXN0IGxpa2Ug
YW4gTlNXaW5kb3cgd291bGQuCi0tICh2b2lkKXNlbmRTdXBlckV2ZW50OihOU0V2ZW50ICopaW5F
dmVudAotewotCi0gICAgLy8gRmlsdGVyIG91dCBhIGZldyBldmVudHMgdGhhdCBqdXN0IHJlc3Vs
dCBpbiBjb21wbGFpbnRzIGluIHRoZSBsb2cuCi0gICAgLy8gSWdub3JlIHNvbWUgdW5rbm93biBl
dmVudCB0aGF0IGdldHMgc2VudCB3aGVuIE5TVGV4dFZpZXdzIGluIHByaW50aW5nIGFjY2Vzc29y
eSB2aWV3cyBhcmUgZm9jdXNlZC4gIE0uUC4gTm90aWNlIC0gMTIvNy8wMAotICAgIEJPT0wgaWdu
b3JlRXZlbnQgPSBOTzsKLSAgICBOU0V2ZW50VHlwZSBldmVudFR5cGUgPSBbaW5FdmVudCB0eXBl
XTsKLSAgICBpZiAoZXZlbnRUeXBlID09IE5TRXZlbnRUeXBlU3lzdGVtRGVmaW5lZCkgewotICAg
ICAgICBzaG9ydCBldmVudFN1YnR5cGUgPSBbaW5FdmVudCBzdWJ0eXBlXTsKLSAgICAgICAgaWYg
KGV2ZW50U3VidHlwZSA9PSA3KSB7Ci0gICAgICAgICAgICBpZ25vcmVFdmVudCA9IFlFUzsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09IE5TRXZlbnRUeXBlS2V5RG93bikg
ewotICAgICAgICAvLyBIYW5kbGUgY29tbWFuZC1zcGFjZSBhcyBbTlNBcHAgc2VuZEV2ZW50Ol0g
ZG9lcy4KLSAgICAgICAgaWYgKFtOU0lucHV0Q29udGV4dCBwcm9jZXNzSW5wdXRLZXlCaW5kaW5n
czppbkV2ZW50XSkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IAotICAgIC8vIFNpbXBsZS4KLSAgICBpZiAoIWlnbm9yZUV2ZW50KSBbc3VwZXIgc2VuZEV2ZW50
OmluRXZlbnRdOwotfQotCi0tICh2b2lkKXJlbGlucXVpc2hGb2N1cwotewotICAgIE5TUmVzcG9u
ZGVyKiAgZmlyc3RSZXNwb25kZXI7Ci0KLSAgICAvLyBDYXJib24gdGhpbmtzIHRoYXQgYSBjb250
cm9sIGhhcyB0aGUga2V5Ym9hcmQgZm9jdXMsCi0gICAgLy8gb3Igd2Ugd291bGRuJ3QgYmUgYmVp
bmcgYXNrZWQgdG8gcmVsaW5xdWlzaCBmb2N1cy4KLQotICAgIGZpcnN0UmVzcG9uZGVyID0gW3Nl
bGYgZmlyc3RSZXNwb25kZXJdOwotICAgIGlmIChbZmlyc3RSZXNwb25kZXIgaXNLaW5kT2ZDbGFz
czpbTlNWaWV3IGNsYXNzXV0pIHsKLSAgICAgICAgLy8gTWFrZSB0aGUgd2luZG93IHRoZSBmaXJz
dCByZXNwb25kZXIsIHNvIHRoYXQgbm8gdmlldyBpcyB0aGUga2V5IHZpZXcuCi0gICAgICAgIFtz
ZWxmIG1ha2VGaXJzdFJlc3BvbmRlcjpzZWxmXTsKLSAgICB9Ci19Ci0KLS0gKEJPT0wpbWFrZUZp
cnN0UmVzcG9uZGVyOihOU1Jlc3BvbmRlciAqKWFSZXNwb25kZXIKLXsKLSAgICAvLyBMZXQgTlNX
aW5kb3cgZm9jdXMgdGhlIGFwcHJvcHJpYXRlIE5TVmlldy4KLSAgICBpZiAoIVtzdXBlciBtYWtl
Rmlyc3RSZXNwb25kZXI6YVJlc3BvbmRlcl0pCi0gICAgICAgIHJldHVybiBOTzsKLQotICAgIC8v
IE5vdywgaWYgdGhlIHZpZXcgd2UncmUgZm9jdXNpbmcgaXMgaW4gYSBISVdlYlZpZXcsIGZpbmQg
dGhlCi0gICAgLy8gY29ycmVzcG9uZGluZyBISVdlYlZpZXcgZm9yIHRoZSBOU1ZpZXcsIGFuZCB0
ZWxsIGNhcmJvbiB0bwotICAgIC8vIGNsZWFyIGFueSBmb2N1c2VkIGNvbnRyb2wuCi0gICAgSElW
aWV3UmVmIHZpZXdSZWYgPSAwOwotICAgIE5TUmVzcG9uZGVyICpmaXJzdFJlc3BvbmRlciA9IFtz
ZWxmIGZpcnN0UmVzcG9uZGVyXTsgICAgCi0gICAgaWYgKFtmaXJzdFJlc3BvbmRlciBpc0tpbmRP
ZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgewotICAgICAgICBOU1ZpZXcgKnZpZXcgPSAoTlNWaWV3
ICopZmlyc3RSZXNwb25kZXI7Ci0gICAgICAgIHdoaWxlICh2aWV3KSB7Ci0gICAgICAgICAgICB2
aWV3UmVmID0gW0hJVmlld0FkYXB0ZXIgZ2V0SElWaWV3Rm9yTlNWaWV3OnZpZXddOwotICAgICAg
ICAgICAgaWYgKHZpZXdSZWYpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB2
aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEhJVmlld1Jl
ZiBmb2N1czsKLSAgICBHZXRLZXlib2FyZEZvY3VzIChfd2luZG93UmVmLCAmZm9jdXMpOwotICAg
IGlmIChmb2N1cyAhPSB2aWV3UmVmKSB7Ci0gICAgICAgIFNldEtleWJvYXJkRm9jdXMgKF93aW5k
b3dSZWYsIHZpZXdSZWYsIGtDb250cm9sSW5kaWNhdG9yUGFydCApOwotICAgIH0KLQotICAgIHJl
dHVybiBZRVM7Ci19Ci0KLS8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX2FkZEN1cnNvclJlY3Q6
Y3Vyc29yOmZvclZpZXc6LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBpbnZva2Vz
IFtzZWxmIHdpbmRvd051bWJlcl0sIGJlY2F1c2UgQ2FyYm9uIHdpbmRvd3Mgd29uJ3QgaGF2ZSBz
dWJ2aWV3cywgYW5kIHRoZXJlZm9yZSB3b24ndCBoYXZlIGN1cnNvciByZWN0cy4KLQotCi0vLyBU
aGVyZSdzIG5vIG92ZXJyaWRlIG9mIF9hdXRvUmVzaXplU3RhdGUsIGRlc3BpdGUgdGhlIGZhY3Qg
dGhhdCBOU1dpbmRvdydzIG9wZXJhdGVzIG9uIF93aW5kb3dOdW0sIGJlY2F1c2UgaXQgbG9va3Mg
bGlrZSBpdCBtaWdodCB3b3JrIG9uIENhcmJvbiB3aW5kb3dzIGFzIGlzLgotCi0KLS8vIERvIHRo
ZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93LgotLSAodm9pZClfY2FuY2VsS2V5Oihp
ZClzZW5kZXIKLXsKLSAgICAvLyBNb3N0IG9mIHRoZSB0aW1lIHRoZSBoYW5kbGluZyBvZiB0aGUg
Y2FuY2VsIGtleSB3aWxsIGJlIGRvbmUgYnkgQ2FyYm9uLCBidXQgdGhpcyBtZXRob2Qgd2lsbCBi
ZSBpbnZva2VkIGlmIGFuIE5TQ2FyYm9uV2luZG93IGlzIHdyYXBwaW5nIGEgQ2FyYm9uIHdpbmRv
dyB0aGF0IGNvbnRhaW5zIGFuIE5TVmlld0NhcmJvbkNvbnRyb2wsIGFuZCB0aGUgZXNjYXBlIGtl
eSBvciB3aGF0ZXZlciBpcyBwcmVzc2VkIHdpdGggYW4gTlNUZXh0VmlldyBmb2N1c2VkLiAgSnVz
dCBkbyB3aGF0IENhcmJvbiB3b3VsZCBkby4KLSAgICBDb250cm9sUmVmIGNhbmNlbEJ1dHRvbjsK
LSAgICBHZXRXaW5kb3dDYW5jZWxCdXR0b24oX3dpbmRvd1JlZiwgJmNhbmNlbEJ1dHRvbik7Ci0g
ICAgaWYgKGNhbmNlbEJ1dHRvbikgewotICAgICAgICBpZiAoSXNDb250cm9sQWN0aXZlKGNhbmNl
bEJ1dHRvbikpIHsKLSAgICAgICAgICAgIEhJVmlld1NpbXVsYXRlQ2xpY2soY2FuY2VsQnV0dG9u
LCBrQ29udHJvbEJ1dHRvblBhcnQsIDAsIG51bGxwdHIpOwotICAgICAgICB9Ci0gICAgfQotCi19
Ci0KLQotCi0vLyBEbyB0aGUgcmlnaHQgdGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKHZv
aWQpX2NvbW1vbkF3YWtlCi17Ci0gICAgLy8gQ29tcGxhaW4sIGJlY2F1c2UgdGhpcyBzaG91bGQg
bmV2ZXIgYmUgY2FsbGVkLiAgV2UgaW5zaXN0IHRoYXQgLVtOU0NhcmJvbldpbmRvdyBpbml0V2l0
aENhcmJvbldpbmRvd1JlZl0gaXMgdGhlIG9ubHkgdmFsaWQgaW5pdGlhbGl6ZXIgZm9yIGluc3Rh
bmNlcyBvZiB0aGlzIGNsYXNzLCBhbmQgdGhhdCB0aGVyZSdzIG5vIHN1Y2ggdGhpbmcgYXMgYSBv
bmUtc2hvdCBOU0NhcmJvbldpbmRvdy4KLSAgICBOU0xvZyhAIi1bTlNDYXJib25XaW5kb3cgX2Nv
bW1vbkF3YWtlXSBpcyBub3QgaW1wbGVtZW50ZWQuIik7Ci0KLX0KLQotCi0vLyBUaGVyZSdzIG5v
IG92ZXJyaWRlIG9mIF9jb21tb25Jbml0RnJhbWU6c3R5bGVNYXNrOmJhY2tpbmc6ZGVmZXI6LCBk
ZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBtb2RpZmllcyBxdWl0ZSBhIGZldyBpbnN0
YW5jZSB2YXJpYWJsZXMsIGJlY2F1c2UgaXQgZ2V0cyBjYWxsZWQgaW4gYSBoYXJtbGVzcyB3YXkg
aWYgdGhlIGNsYXNzIGluc3RhbmNlIGlzIHByb3Blcmx5IGluaXRpYWxpemVkIHdpdGggLVtOU0Nh
cmJvbldpbmRvdyBpbml0V2l0aENhcmJvbldpbmRvd1JlZjp0YWtpbmdPd25lcnNoaXA6XS4KLQot
Ci0vLyBEbyB0aGUgcmlnaHQgdGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLUlHTk9SRV9XQVJO
SU5HU19CRUdJTigiZGVwcmVjYXRlZC1pbXBsZW1lbnRhdGlvbnMiKQotLSAoaWQpX2Rlc3Ryb3lS
ZWFsV2luZG93OihCT09MKW9yZGVyaW5nT3V0Ci1JR05PUkVfV0FSTklOR1NfRU5ECi17Ci0gICAg
Ly8gQ29tcGxhaW4sIGJlY2F1c2UgdGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkLiAgV2UgZG9u
J3Qgc3VwcG9ydCBvbmUtc2hvdCBOU0NhcmJvbldpbmRvd3MuCi0gICAgTlNMb2coQCItW05TQ2Fy
Ym9uV2luZG93IF9kZXN0cm95UmVhbFdpbmRvdzpdIGlzIG5vdCBpbXBsZW1lbnRlZC4iKTsKLSAg
ICByZXR1cm4gc2VsZjsKLX0KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIF9kaXNjYXJk
Q3Vyc29yUmVjdHNGb3JWaWV3LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBpbnZv
a2VzIFtzZWxmIHdpbmRvd051bWJlcl0sIGJlY2F1c2UgQ2FyYm9uIHdpbmRvd3Mgd29uJ3QgaGF2
ZSBzdWJ2aWV3cywgYW5kIHRoZXJlZm9yZSB3b24ndCBoYXZlIGN1cnNvciByZWN0cy4KLQotCi0v
LyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIF9mb3JjZUZsdXNoV2luZG93VG9TY3JlZW4sIGRlc3Bp
dGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwg
YmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9uIHdpbmRvd3MgYXMg
aXMuCi0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBfZ2V0UG9zaXRpb25Gcm9tU2VydmVy
LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBvcGVyYXRlcyBvbiBfd2luZG93TnVt
LCBiZWNhdXNlIGl0J3Mgb25seSBjYWxsZWQgZnJvbSAtW05TQXBwbGljYXRpb24gX2FjdGl2YXRl
V2luZG93c10sIHdoaWNoIGlzIGhvcGVmdWxseSBhYm91dCB0byBiZWNvbWUgb2Jzb2xldGUgYW55
IHNlY29uZCBub3cuCi0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBfZ2xvYmFsV2luZG93
TnVtLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBpbnZva2VzIFtzZWxmIHdpbmRv
d051bWJlcl0sIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdCBtaWdodCB3b3JrIG9uIENhcmJvbiB3
aW5kb3dzIGFzIGlzLgotCi0KLS8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX2luaXRDb250ZW50
OnN0eWxlTWFzazpiYWNraW5nOmRlZmVyOmNvbnRlbnRWaWV3OiwgZGVzcGl0ZSB0aGUgZmFjdCB0
aGF0IE5TV2luZG93J3MgbW9kaWZpZXMgX2F1eGlsaWFyeVN0b3JhZ2UtPl9hdXhXRmxhZ3MuaGFz
U2hhZG93LCBiZWNhdXNlIGl0IHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZCBpZiB0aGUgY2xhc3MgaW5z
dGFuY2UgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCAtW05TQ2FyYm9uV2luZG93IGluaXRX
aXRoQ2FyYm9uV2luZG93UmVmOnRha2luZ093bmVyc2hpcDpdLgotCi0KLS8vIFRoZXJlJ3Mgbm8g
b3ZlcnJpZGUgb2YgX2luaXRDb250ZW50OnN0eWxlTWFzazpiYWNraW5nOmRlZmVyOmNvdW50ZXJw
YXJ0OiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgbW9kaWZpZXMgX2F1eGlsaWFy
eVN0b3JhZ2UtPl9hdXhXRmxhZ3MuaGFzU2hhZG93LCBiZWNhdXNlIGl0IHdpbGwgbmV2ZXIgZ2V0
IGNhbGxlZCBpZiB0aGUgY2xhc3MgaW5zdGFuY2UgaXMgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0
aCAtW05TQ2FyYm9uV2luZG93IGluaXRXaXRoQ2FyYm9uV2luZG93UmVmOnRha2luZ093bmVyc2hp
cDpdLgotCi0KLS8vIERvIHdoYXQgTlNXaW5kb3cgd291bGQgZG8sIGJ1dCB0aGVuIHN5Y2hyb25p
emUgdGhlIENhcmJvbiB3aW5kb3cgc3RydWN0dXJlcy4KLS0gKHZvaWQpX29sZFBsYWNlV2luZG93
OihOU1JlY3QpZnJhbWVSZWN0Ci17Ci0gICAgT1NTdGF0dXMgb3NTdGF0dXM7Ci0KLSAgICAvLyBE
byB0aGUgc3RhbmRhcmQgQ29jb2EgdGhpbmcuCi0gICAgW3N1cGVyIF9vbGRQbGFjZVdpbmRvdzpm
cmFtZVJlY3RdOwotCi0gICAgLy8gVGVsbCBDYXJib24gdG8gdXBkYXRlIGl0cyB2YXJpb3VzIHJl
Z2lvbnMuCi0gICAgLy8gRGVzcGl0ZSBpdHMgbmFtZSwgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUg
Y2FsbGVkIGVhcmx5IGFuZCBvZnRlbiwgZXZlbiBpZiB0aGUgd2luZG93IGlzbid0IHZpc2libGUg
eWV0LiAgMjcwMjY0OC4gIE0uUC4gTm90aWNlIC0gNy8yNC8wMQotICAgIG9zU3RhdHVzID0gX1N5
bmNXaW5kb3dXaXRoQ0dBZnRlck1vdmUoX3dpbmRvd1JlZik7Ci0gICAgaWYgKG9zU3RhdHVzICE9
IG5vRXJyKQotICAgICAgICBOU0xvZyhAIkEgQ2FyYm9uIHdpbmRvdydzIGJvdW5kcyBjb3VsZG4n
dCBiZSBzeW5jaHJvbml6ZWQgKCVpKS4iLCAoaW50KW9zU3RhdHVzKTsKLX0KLQotCi0vLyBUaGVy
ZSdzIG5vIG92ZXJyaWRlIG9mIF9vcmRlck91dEFuZENhbGNLZXlXaXRoQ291bnRlcjosIGRlc3Bp
dGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwg
YmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9uIHdpbmRvd3MgYXMg
aXMuCi0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBfcmVhbEhlYXJ0QmVhdFRocmVhZENv
bnRleHQsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvd3MncyBpbnZva2VzIFtzZWxmIHdp
bmRvd051bWJlcl0sIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdCBtaWdodCBub3QgZG8gYW55dGhp
bmcgdGhhdCB3aWxsIGVmZmVjdCBhIENhcmJvbiB3aW5kb3cuCi0KLQotLy8gVGhlcmUncyBubyBv
dmVycmlkZSBvZiBfcmVnaXN0ZXJXaXRoRG9ja0lmTmVlZGVkLCBkZXNwaXRlIHRoZSBmYWN0IHRo
YXQgTlNXaW5kb3cncyBpbnZva2VzIFtzZWxmIHdpbmRvd051bWJlcl0sIGJlY2F1c2UgaXQgbG9v
a3MgbGlrZSBpdCBtaWdodCB3b3JrIG9uIENhcmJvbiB3aW5kb3dzIGFzIGlzLgotCi0KLS8vIFRo
ZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX3JlbW92ZUN1cnNvclJlY3Q6Y3Vyc29yOmZvclZpZXc6LCBk
ZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBpbnZva2VzIFtzZWxmIHdpbmRvd051bWJl
cl0sIGJlY2F1c2UgQ2FyYm9uIHdpbmRvd3Mgd29uJ3QgaGF2ZSBzdWJ2aWV3cywgYW5kIHRoZXJl
Zm9yZSB3b24ndCBoYXZlIGN1cnNvciByZWN0cy4KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRl
IG9mIF9zZXRBdm9pZHNBY3RpdmF0aW9uOiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93
J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQg
bWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4KLQotCi0vLyBUaGVyZSdzIG5vIG92
ZXJyaWRlIG9mIF9zZXRGcmFtZTosIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIG1v
ZGlmaWVzIF9mcmFtZSwgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2Fy
Ym9uIHdpbmRvd3MgYXMgaXMuICBUaGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBDYXJib24gd2lu
ZG93IGJvdW5kcyByZWN0IHRvIHRoZSBDb2NvYSBmcmFtZSByZWN0IGlzIGRvbmUgaW4gdGhlIG92
ZXJyaWRlcyBvZiBfb2xkUGxhY2VXaW5kb3c6IGFuZCBfd2luZG93TW92ZWRUb1JlY3Q6LgotCi0K
LS8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX3NldEZyYW1lQ29tbW9uOmRpc3BsYXk6c3Rhc2hT
aXplOiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3aW5k
b3dOdW1iZXJdLCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24g
d2luZG93cyBhcyBpcy4KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIF9zZXRXaW5kb3dO
dW1iZXI6LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBtb2RpZmllcyBfd2luZG93
TnVtIGFuZCBpbnZva2VzIFtzZWxmIHdpbmRvd051bWJlcl0sIGJlY2F1c2UgaXQgbG9va3MgbGlr
ZSBpdCBtaWdodCB3b3JrIG9uIENhcmJvbiB3aW5kb3dzIGFzIGlzLgotCi0KLS8vIERvIHdoYXQg
TlNXaW5kb3cgd291bGQgZG8sIGJ1dCBmb3IgYSBDYXJib24gd2luZG93LgotLy8gVGhpcyBmdW5j
dGlvbiBpcyBtb3N0bHkgY3V0LWFuZC1wYXN0ZWQgZnJvbSAtW05TV2luZG93IF90ZXJtV2luZG93
SWZPd25lcl0uICBNLlAuIE5vdGljZSAtIDgvNy8wMAotLSAodm9pZClfdGVybVdpbmRvd0lmT3du
ZXIKLXsKLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgIFtzZWxm
IF9zZXRXaW5kb3dOdW1iZXI6LTFdOwotICAgIF93RmxhZ3MuaXNUZXJtaW5hdGluZyA9IFlFUzsK
LSAgICBpZiAoX3dpbmRvd1JlZiAmJiBfd2luZG93UmVmSXNPd25lZCkKLSAgICAgICAgRGlzcG9z
ZVdpbmRvdyhfd2luZG93UmVmKTsKLSAgICAvLyBLVyAtIG5lZWQgdG8gY2xlYXIgd2luZG93IHNo
YWRvdyBzdGF0ZSBzbyBpdCBnZXRzIHJlc2V0IGNvcnJlY3RseSB3aGVuIG5ldyB3aW5kb3cgY3Jl
YXRlZAotLy8gICAgaWYgKFtfYm9yZGVyVmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KHNldFNoYWRvd1N0YXRlOildKSB7Ci0vLyAgICAgICAgW19ib3JkZXJWaWV3IHNldFNoYWRvd1N0
YXRlOmtGcmFtZVNoYWRvd05vbmVdOwotLy8gICAgfQotICAgIF93RmxhZ3MuaXNUZXJtaW5hdGlu
ZyA9IE5POwotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAotfQotCi0KLS8v
IFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgX3RocmVhZENvbnRleHQsIGRlc3BpdGUgdGhlIGZhY3Qg
dGhhdCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBs
b29rcyBsaWtlIGl0IG1pZ2h0IG5vdCBkbyBhbnl0aGluZyB0aGF0IHdpbGwgZWZmZWN0IGEgQ2Fy
Ym9uIHdpbmRvdy4KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIF93aW5kb3dNb3ZlZDos
IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIG9wZXJhdGVzIG9uIF93aW5kb3dOdW0s
IGJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdCBtaWdodCB3b3JrIG9uIENhcmJvbiB3aW5kb3dzIGFz
IGlzLgotCi0KLS8vIERvIHdoYXQgTlNXaW5kb3cgd291bGQgZG8sIGJ1dCB0aGVuIHN5Y2hyb25p
emUgdGhlIENhcmJvbiB3aW5kb3cgc3RydWN0dXJlcy4KLS0gKHZvaWQpX3dpbmRvd01vdmVkVG9S
ZWN0OihOU1JlY3QpYWN0dWFsRnJhbWUKLXsKLQotICAgIE9TU3RhdHVzIG9zU3RhdHVzOwotCi0g
ICAgLy8gRG8gdGhlIHN0YW5kYXJkIENvY29hIHRoaW5nLgotICAgIFtzdXBlciBfd2luZG93TW92
ZWRUb1JlY3Q6YWN0dWFsRnJhbWVdOwotCi0gICAgLy8gTGV0IENhcmJvbiBrbm93IHRoYXQgdGhl
IHdpbmRvdyBoYXMgYmVlbiBtb3ZlZCwgdW5sZXNzIHRoaXMgbWV0aG9kIGlzIGJlaW5nIGNhbGxl
ZCAiZWFybHkuIgotICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAg
aWYgKF93RmxhZ3MudmlzaWJsZSkgewotICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19FTkQKLSAgICAgICAgb3NTdGF0dXMgPSBfU3luY1dpbmRvd1dpdGhDR0FmdGVyTW92ZShf
d2luZG93UmVmKTsKLSAgICAgICAgaWYgKG9zU3RhdHVzIT1ub0VycikgTlNMb2coQCJBIENhcmJv
biB3aW5kb3cncyBib3VuZHMgY291bGRuJ3QgYmUgc3luY2hyb25pemVkICglaSkuIiwgKGludClv
c1N0YXR1cyk7Ci0gICAgfQotCi19Ci0KLS0gKE5TUmVjdCljb25zdHJhaW5GcmFtZVJlY3Q6KE5T
UmVjdClhY3R1YWxGcmFtZSB0b1NjcmVlbjooTlNTY3JlZW4gKilzY3JlZW4KLXsKLSAgICAvLyBs
ZXQgQ2FyYm9uIGRlY2lkZSB3aW5kb3cgc2l6ZSBhbmQgcG9zaXRpb24KLSAgICByZXR1cm4gYWN0
dWFsRnJhbWU7Ci19Ci0KLS0gKHZvaWQpc2VsZWN0S2V5Vmlld0ZvbGxvd2luZ1ZpZXc6KE5TVmll
dyAqKWFWaWV3Ci17Ci0gICAgSElWaWV3UmVmIHZpZXcgPSBudWxscHRyOwotICAgIHZpZXcgPSBb
SElWaWV3QWRhcHRlciBnZXRISVZpZXdGb3JOU1ZpZXc6YVZpZXddOwotCi0gICAgaWYgKHZpZXcp
IHsKLSAgICAgICAgSElWaWV3UmVmIGNvbnRlbnRWaWV3OwotICAgICAgICAKLSAgICAgICAgR2V0
Um9vdENvbnRyb2woR2V0Q29udHJvbE93bmVyKHZpZXcpLCAmY29udGVudFZpZXcpOwotICAgICAg
ICBISVZpZXdBZHZhbmNlRm9jdXMoY29udGVudFZpZXcsIDApOwotICAgIH0gZWxzZQotICAgICAg
ICBbc3VwZXIgc2VsZWN0S2V5Vmlld0ZvbGxvd2luZ1ZpZXc6YVZpZXddOwotfQotCi0tICh2b2lk
KXNlbGVjdEtleVZpZXdQcmVjZWRpbmdWaWV3OihOU1ZpZXcgKilhVmlldwotewotICAgIEhJVmll
d1JlZiB2aWV3ID0gbnVsbHB0cjsKLSAgICB2aWV3ID0gW0hJVmlld0FkYXB0ZXIgZ2V0SElWaWV3
Rm9yTlNWaWV3OmFWaWV3XTsKLQotICAgIGlmICh2aWV3KSB7Ci0gICAgICAgIEhJVmlld1JlZiBj
b250ZW50VmlldzsKLSAgICAgICAgCi0gICAgICAgIEdldFJvb3RDb250cm9sKEdldENvbnRyb2xP
d25lcih2aWV3KSwgJmNvbnRlbnRWaWV3KTsKLSAgICAgICAgSElWaWV3QWR2YW5jZUZvY3VzKGNv
bnRlbnRWaWV3LCBzaGlmdEtleSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIFtzdXBlciBzZWxlY3RL
ZXlWaWV3UHJlY2VkaW5nVmlldzphVmlld107Ci19Ci0KLS0gKHZvaWQpbWFrZUtleVdpbmRvdwot
ewotICAgIFtOU0FwcCBfc2V0TW91c2VBY3RpdmF0aW9uSW5Qcm9ncmVzczpOT107Ci0gICAgW05T
QXBwIHNldElzQWN0aXZlOllFU107Ci0gICAgW3N1cGVyIG1ha2VLZXlXaW5kb3ddOwotfQotCi0v
LyBEbyB0aGUgcmlnaHQgdGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKEJPT0wpY2FuQmVj
b21lS2V5V2luZG93Ci17Ci0KLSAgICByZXR1cm4gWUVTOwotfQotCi0vLyBEbyB0aGUgcmlnaHQg
dGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKEJPT0wpY2FuQmVjb21lTWFpbldpbmRvdwot
ewotICAgIE9TU3RhdHVzIG9zU3RhdHVzOwotICAgIFdpbmRvd0NsYXNzIHdpbmRvd0NsYXNzOwot
ICAgIC8vIEJ5IGRlZmF1bHQsIENhcmJvbiB3aW5kb3dzIGNhbm5vdCBiZWNvbWUgdGhlIG1haW4g
d2luZG93LgotICAgIC8vIFdoYXQgYWJvdXQgd2hlbiB0aGUgZGVmYXVsdCBpc24ndCByaWdodD8g
IFJlcXVpcmluZyBzdWJjbGFzc2luZyBzZWVtcyBoYXJzaC4gIE0uUC4gV2FybmluZyAtIDkvMTcv
MDEKLSAgICAvLyBLVyAtICBtb2RpZnkgdGhpcyB0byBhbGxvdyBkb2N1bWVudCB3aW5kb3dzIHRv
IGJlY29tZSBtYWluCi0gICAgLy8gVGhpcyBpcyBwcmltYXJpbHkgdG8gZ2V0IHRoZSByaWdodCBs
b29rLCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHR3byB3aW5kb3dzIHRoYXQgYm90aCBsb29rIGFj
dGl2ZSAtIG9uZSBDb2NvYSBkb2N1bWVudCBhbmQgb25lIENhcmJvbiBkb2N1bWVudAotICAgIG9z
U3RhdHVzID0gR2V0V2luZG93Q2xhc3MoX3dpbmRvd1JlZiwgJndpbmRvd0NsYXNzKTsKLSAgICBy
ZXR1cm4gKG9zU3RhdHVzID09IG5vRXJyICYmIHdpbmRvd0NsYXNzID09IGtEb2N1bWVudFdpbmRv
d0NsYXNzKTsKLSAgICAKLX0KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIGRlbWluaWF0
dXJpemU6LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBpbnZva2VzIFtzZWxmIHdp
bmRvd051bWJlcl0sIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdCBtaWdodCB3b3JrIG9uIENhcmJv
biB3aW5kb3dzIGFzIGlzLgotCi0KLS8vIFRoZXJlJ3Mgbm8gb3ZlcnJpZGUgb2YgZGlzYWJsZUN1
cnNvclJlY3RzLCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyBpbnZva2VzIFtzZWxm
IHdpbmRvd051bWJlcl0sIGJlY2F1c2UgQ2FyYm9uIHdpbmRvd3Mgd29uJ3QgaGF2ZSBzdWJ2aWV3
cywgYW5kIHRoZXJlZm9yZSB3b24ndCBoYXZlIGN1cnNvciByZWN0cy4KLQotCi0KLS8vIFRoZXJl
J3Mgbm8gb3ZlcnJpZGUgb2YgZW5hYmxlQ3Vyc29yUmVjdHMsIGRlc3BpdGUgdGhlIGZhY3QgdGhh
dCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBDYXJib24g
d2luZG93cyB3b24ndCBoYXZlIHN1YnZpZXdzLCBhbmQgdGhlcmVmb3JlIHdvbid0IGhhdmUgY3Vy
c29yIHJlY3RzLgotCi0KLS8vIERvIHRoZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93
LgotLSAodm9pZCllbmNvZGVXaXRoQ29kZXI6KE5TQ29kZXIgKiljb2RlcgotewotCi0gICAgLy8g
QWN0dWFsbHksIHRoaXMgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBpbXBsZW1lbnRlZC4gIE0uUC4g
Tm90aWNlIC0gOC8yLzAwCi0gICAgTlNMb2coQCItW05TQ2FyYm9uV2luZG93IGVuY29kZVdpdGhD
b2RlcjpdIGlzIG5vdCBpbXBsZW1lbnRlZC4iKTsKLQotfQotCi0KLS8vIFRoZXJlJ3Mgbm8gb3Zl
cnJpZGUgb2YgZnJhbWUsIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBOU1dpbmRvdydzIHJldHVybnMg
X2ZyYW1lLCBiZWNhdXNlIF9mcmFtZSBpcyBvbmUgb2YgdGhlIGluc3RhbmNlIHZhcmlhYmxlcyB3
aG9zZSB2YWx1ZSB3ZSdyZSBrZWVwaW5nIHN5bmNocm9uaXplZCB3aXRoIHRoZSBDYXJib24gd2lu
ZG93LgotCi0KLS8vIERvIHRoZSByaWdodCB0aGluZyBmb3IgYSBDYXJib24gd2luZG93LgotSUdO
T1JFX1dBUk5JTkdTX0JFR0lOKCJkZXByZWNhdGVkLWltcGxlbWVudGF0aW9ucyIpCi0tIChpZClp
bml0V2l0aENvZGVyOihOU0NvZGVyICopY29kZXIKLUlHTk9SRV9XQVJOSU5HU19FTkQKLXsKLQot
ICAgIC8vIEFjdHVhbGx5LCB0aGlzIHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgaW1wbGVtZW50ZWQu
ICBNLlAuIE5vdGljZSAtIDgvMi8wMAotICAgIE5TTG9nKEAiLVtOU0NhcmJvbldpbmRvdyBpbml0
V2l0aENvZGVyOl0gaXMgbm90IGltcGxlbWVudGVkLiIpOwotICAgIFtzZWxmIHJlbGVhc2VdOwot
ICAgIHJldHVybiBuaWw7Ci0KLX0KLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIGxldmVs
LCBkZXNwaXRlIHRoZSBmYWN0IHRoYXQgTlNXaW5kb3cncyByZXR1cm5zIF9sZXZlbCwgYmVjYXVz
ZSBfbGV2ZWwgaXMgb25lIG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgd2hvc2UgdmFsdWUgd2Un
cmUga2VlcGluZyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgQ2FyYm9uIHdpbmRvdy4KLQotCi0vLyBU
aGVyZSdzIG5vIG92ZXJyaWRlIG9mIG1pbmlhdHVyaXplOiwgZGVzcGl0ZSB0aGUgZmFjdCB0aGF0
IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJdLCBiZWNhdXNlIGl0IGxvb2tz
IGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4KLQotCi0vLyBUaGVy
ZSdzIG5vIG92ZXJyaWRlIG9mIHJlc2l6ZVRvU2NyZWVuV2l0aEV2ZW50OiwgZGVzcGl0ZSB0aGUg
ZmFjdCB0aGF0IE5TV2luZG93J3Mgb3BlcmF0ZXMgb24gX3dpbmRvd051bS4KLS8vIEl0IGxvb2tz
IGxpa2UgaXQncyBvbmx5IGNhbGxlZCB3aGVuIGFuIF9OU0ZvcmNlUmVzaXplRXZlbnRUeXBlIGV2
ZW50IGlzIHBhc3NlZCBpbnRvIC1bTlNXaW5kb3cgc2VuZEV2ZW50Ol0sIGFuZCBJIGNhbid0IGZp
bmQgYW55IGluc3RhbmNlcyBvZiB0aGF0IGhhcHBlbmluZy4KLQotLy8gVGhlcmUncyBubyBvdmVy
cmlkZSBvZiBzZXRBY2NlcHRzTW91c2VNb3ZlZEV2ZW50czosIGRlc3BpdGUgdGhlIGZhY3QgdGhh
dCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBpdCBsb29r
cyBsaWtlIGl0IG1pZ2h0IHdvcmsgb24gQ2FyYm9uIHdpbmRvd3MgYXMgaXMuCi0KLQotLy8gVGhl
cmUncyBubyBvdmVycmlkZSBvZiBzZXRCYWNraW5nVHlwZTosIGRlc3BpdGUgdGhlIGZhY3QgdGhh
dCBOU1dpbmRvdydzIGludm9rZXMgW3NlbGYgd2luZG93TnVtYmVyXSwgYmVjYXVzZSBpdCdzIGFw
cGFyZW50bHkgbm90IGV4cGVjdGVkIHRvIGRvIGFueXRoaW5nIGFueXdheSwganVkZ2luZyBmcm9t
IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIFBTc2V0d2luZG93dHlwZSgpLgotCi0KLS8v
IERvIHdoYXQgTlNXaW5kb3cgd291bGQgZG8sIGJ1dCBmb3IgYSBDYXJib24gd2luZG93LgotLSAo
dm9pZClzZXRDb250ZW50VmlldzooTlNWaWV3ICopYVZpZXcKLXsKLQotICAgIE5TUmVjdCBjb250
ZW50RnJhbWVSZWN0OwotICAgIE9TU3RhdHVzIG9zU3RhdHVzOwotICAgIFJlY3Qgd2luZG93Q29u
dGVudEJvdW5kc1JlY3Q7Ci0KLSAgICAvLyBQcmVjb25kaXRpb24gY2hlY2suCi0gICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBhc3NlcnQoX2JvcmRlclZpZXcpOwot
ICAgIGFzc2VydChbX2JvcmRlclZpZXcgaXNLaW5kT2ZDbGFzczpbQ2FyYm9uV2luZG93RnJhbWUg
Y2xhc3NdXSk7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0gICAgYXNz
ZXJ0KF93aW5kb3dSZWYpOwotCi0gICAgLy8gUGFyYW1ldGVyIGNoZWNrLgotICAgIGFzc2VydChh
Vmlldyk7Ci0gICAgYXNzZXJ0KFthVmlldyBpc0tpbmRPZkNsYXNzOltDYXJib25XaW5kb3dDb250
ZW50VmlldyBjbGFzc11dKTsKLQotICAgIC8vIEZpbmQgb3V0IHRoZSB3aW5kb3cncyBDYXJib24g
d2luZG93IHN0cnVjdHVyZSByZWdpb24gKGNvbnRlbnQpIGJvdW5kcy4KLSAgICBvc1N0YXR1cyA9
IEdldFdpbmRvd0JvdW5kcyhfd2luZG93UmVmLCBrV2luZG93Q29udGVudFJnbiwgJndpbmRvd0Nv
bnRlbnRCb3VuZHNSZWN0KTsKLSAgICBpZiAob3NTdGF0dXMhPW5vRXJyKSBOU0xvZyhAIkEgQ2Fy
Ym9uIHdpbmRvdydzIGNvbnRlbnQgYm91bmRzIGNvdWxkbid0IGJlIGdvdHRlbi4iKTsKLSAgICBj
b250ZW50RnJhbWVSZWN0Lm9yaWdpbiA9IE5TWmVyb1BvaW50OwotICAgIGNvbnRlbnRGcmFtZVJl
Y3Quc2l6ZS53aWR0aCA9IHdpbmRvd0NvbnRlbnRCb3VuZHNSZWN0LnJpZ2h0IC0gd2luZG93Q29u
dGVudEJvdW5kc1JlY3QubGVmdDsKLSAgICBjb250ZW50RnJhbWVSZWN0LnNpemUuaGVpZ2h0ID0g
d2luZG93Q29udGVudEJvdW5kc1JlY3QuYm90dG9tIC0gd2luZG93Q29udGVudEJvdW5kc1JlY3Qu
dG9wOwotCi0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAvLyBJ
ZiB0aGUgY29udGVudCB2aWV3IGlzIHN0aWxsIGluIHNvbWUgb3RoZXIgdmlldyBoaWVyYXJjaHks
IHByeSBpdCBmcmVlLgotICAgIFtfY29udGVudFZpZXcgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0g
ICAgYXNzZXJ0KCFbX2NvbnRlbnRWaWV3IHN1cGVydmlld10pOwotCi0gICAgLy8gUmVjb3JkIHRo
ZSBjb250ZW50IHZpZXcsIGFuZCBzaXplIGl0IHRvIHRoaXMgd2luZG93J3MgY29udGVudCBmcmFt
ZS4KLSAgICBfY29udGVudFZpZXcgPSBhVmlldzsKLSAgICBbKE5TVmlldyAqKV9jb250ZW50Vmll
dyBzZXRGcmFtZTpjb250ZW50RnJhbWVSZWN0XTsKLQotICAgIC8vIE1ha2UgdGhlIGNvbnRlbnQg
dmlldyBhIHN1YnZpZXcgb2YgdGhlIGJvcmRlciB2aWV3LgotICAgIFtfYm9yZGVyVmlldyBhZGRT
dWJ2aWV3Ol9jb250ZW50Vmlld107Ci0KLSAgICAvLyBUZWxsIHRoZSBjb250ZW50IHZpZXcgaXQn
cyBuZXcgcGxhY2UgaW4gdGhlIHJlc3BvbmRlciBjaGFpbi4KLSAgICBbX2NvbnRlbnRWaWV3IHNl
dE5leHRSZXNwb25kZXI6c2VsZl07Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
RU5ECi19Ci0KLQotLy8gVGhlcmUncyBubyBvdmVycmlkZSBvZiBzZXREZXB0aExpbWl0OiwgZGVz
cGl0ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJd
LCBiZWNhdXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBh
cyBpcy4KLQotCi0tIChCT09MKXdvcmtzV2hlbk1vZGFsCi17Ci0gICAgV2luZG93Q2xhc3Mgd2lu
ZG93Q2xhc3MgPSBbc2VsZiBfY2FyYm9uV2luZG93Q2xhc3NdOwotICAgIHJldHVybiAod2luZG93
Q2xhc3MgPT0ga0Zsb2F0aW5nV2luZG93Q2xhc3MgfHwgd2luZG93Q2xhc3MgPT0ga1V0aWxpdHlX
aW5kb3dDbGFzcyk7Ci19Ci0KLS0gKHZvaWQpX3NldE1vZGFsV2luZG93TGV2ZWwKLXsKLSAgICBy
ZXR1cm47Ci19Ci0KLS0gKGlkKV9jbGVhck1vZGFsV2luZG93TGV2ZWwKLXsKLSAgICByZXR1cm4g
bmlsOwotfQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIHNldExldmVsOiwgZGVzcGl0ZSB0
aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgaW52b2tlcyBbc2VsZiB3aW5kb3dOdW1iZXJdLCBiZWNh
dXNlIGl0IGxvb2tzIGxpa2UgaXQgbWlnaHQgd29yayBvbiBDYXJib24gd2luZG93cyBhcyBpcy4K
LS8vIEkgdGhvdWdodCBhdCBmaXJzdCB0aGF0IHRoZXJlIHNob3VsZCBiZSBhIG1hcHBpbmcgYmV0
d2VlbiBDb2NvYSBsZXZlbCBhbmQgQ2FyYm9uIHdpbmRvdyBjbGFzcywgYnV0IGV4cGVyaW1lbnRz
IGNvbnZpbmNlIG1lIHRoYXQgc3VjaCBpcyBub3QgdGhlIGNhc2UuICBNLlAuIE5vdGljZSAtIDkv
MTgvMDAKLQotCi0vLyBUaGVyZSdzIG5vIG92ZXJyaWRlIG9mIHdpbmRvd051bWJlciwgZGVzcGl0
ZSB0aGUgZmFjdCB0aGF0IE5TV2luZG93J3MgcmV0dXJucyBfd2luZG93TnVtLCBiZWNhdXNlIF93
aW5kb3dOdW0gaXMgb25lIG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgd2hvc2UgdmFsdWUgd2Un
cmUga2VlcGluZyBzeW5jaHJvbml6ZWQgd2l0aCB0aGUgQ2FyYm9uIHdpbmRvdy4KLQotCi0tIChV
SW50MzIpY2FyYm9uSElDb21tYW5kSURGcm9tQWN0aW9uU2VsZWN0b3I6KFNFTClpbkFjdGlvblNl
bGVjdG9yCi17Ci0KLSAgICAvLyBJbml0aWFsaXplIHdpdGggdGhlIGRlZmF1bHQgcmV0dXJuIHZh
bHVlLgotICAgIFVJbnQzMiBoaUNvbW1hbmRJRCA9IDA7Ci0KLUlHTk9SRV9XQVJOSU5HU19CRUdJ
TigidW5kZWNsYXJlZC1zZWxlY3RvciIpCi0gICAgLy8gUHJldHR5IHNpbXBsZSwgaWYgdGVkaW91
cy4KLSAgICBpZiAoaW5BY3Rpb25TZWxlY3RvciA9PSBAc2VsZWN0b3IoY2xlYXI6KSkKLSAgICAg
ICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kQ2xlYXI7Ci0gICAgZWxzZSBpZiAoaW5BY3Rpb25T
ZWxlY3RvciA9PSBAc2VsZWN0b3IoY29weTopKQotICAgICAgICBoaUNvbW1hbmRJRCA9IGtISUNv
bW1hbmRDb3B5OwotICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3IgID09IEBzZWxlY3Rvcihj
dXQ6KSkKLSAgICAgICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kQ3V0OwotICAgIGVsc2UgaWYg
KGluQWN0aW9uU2VsZWN0b3IgPT0gQHNlbGVjdG9yKHBhc3RlOikpCi0gICAgICAgIGhpQ29tbWFu
ZElEID0ga0hJQ29tbWFuZFBhc3RlOwotICAgIGVsc2UgaWYgKGluQWN0aW9uU2VsZWN0b3IgPT0g
QHNlbGVjdG9yKHJlZG86KSkKLSAgICAgICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kUmVkbzsK
LSAgICBlbHNlIGlmIChpbkFjdGlvblNlbGVjdG9yID09IEBzZWxlY3RvcihzZWxlY3RBbGw6KSkK
LSAgICAgICAgaGlDb21tYW5kSUQgPSBrSElDb21tYW5kU2VsZWN0QWxsOwotICAgIGVsc2UgaWYg
KGluQWN0aW9uU2VsZWN0b3IgPT0gQHNlbGVjdG9yKHVuZG86KSkKLSAgICAgICAgaGlDb21tYW5k
SUQgPSBrSElDb21tYW5kVW5kbzsKLUlHTk9SRV9XQVJOSU5HU19FTkQKLQotICAgIC8vIERvbmUu
Ci0gICAgcmV0dXJuIGhpQ29tbWFuZElEOwotCi19Ci0KLQotLSAodm9pZClzZW5kQ2FyYm9uUHJv
Y2Vzc0hJQ29tbWFuZEV2ZW50OihVSW50MzIpaW5ISUNvbW1hbmRJRAotewotCi0gICAgRXZlbnRU
YXJnZXRSZWYgZXZlbnRUYXJnZXRSZWY7Ci0gICAgSElDb21tYW5kIGhpQ29tbWFuZDsKLSAgICBP
U1N0YXR1cyBvc1N0YXR1czsKLQotICAgIC8vIEluaXRpYWxpemUgZm9yIHNhZmUgZXJyb3IgaGFu
ZGxpbmcuCi0gICAgRXZlbnRSZWYgZXZlbnRSZWYgPSBudWxscHRyOwotCi0gICAgLy8gQ3JlYXRl
IGEgUHJvY2VzcyBDb21tYW5kIGV2ZW50LiAgRG9uJ3QgbWVudGlvbiBhbnl0aGluZyBhYm91dCB0
aGUgbWVudSBpdGVtLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIENhcmJvbiBFdmVudCBoYW5k
bGVyIGZpZGRsaW5nIHdpdGggaXQuCi0gICAgaGlDb21tYW5kLmF0dHJpYnV0ZXMgPSAwOwotICAg
IGhpQ29tbWFuZC5jb21tYW5kSUQgPSBpbkhJQ29tbWFuZElEOwotICAgIGhpQ29tbWFuZC5tZW51
Lm1lbnVSZWYgPSAwOwotICAgIGhpQ29tbWFuZC5tZW51Lm1lbnVJdGVtSW5kZXggPSAwOwotICAg
IG9zU3RhdHVzID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwga0V2ZW50Q2xhc3NDb21tYW5kLCBrRXZl
bnRDb21tYW5kUHJvY2VzcywgR2V0Q3VycmVudEV2ZW50VGltZSgpLCBrRXZlbnRBdHRyaWJ1dGVO
b25lLCAmZXZlbnRSZWYpOwotICAgIGlmIChvc1N0YXR1cyE9bm9FcnIpIHsKLSAgICAgICAgTlNM
b2coQCJDcmVhdGVFdmVudCgpIHJldHVybmVkICVpLiIsIChpbnQpb3NTdGF0dXMpOwotICAgICAg
ICBnb3RvIENsZWFuVXA7ICAKLSAgICB9Ci0gICAgb3NTdGF0dXMgPSBTZXRFdmVudFBhcmFtZXRl
cihldmVudFJlZiwga0V2ZW50UGFyYW1EaXJlY3RPYmplY3QsIHR5cGVISUNvbW1hbmQsIHNpemVv
ZihISUNvbW1hbmQpLCAmaGlDb21tYW5kKTsKLSAgICBpZiAob3NTdGF0dXMhPW5vRXJyKSB7Ci0g
ICAgICAgIE5TTG9nKEAiU2V0RXZlbnRQYXJhbWV0ZXIoKSByZXR1cm5lZCAlaS4iLCAoaW50KW9z
U3RhdHVzKTsKLSAgICAgICAgZ290byBDbGVhblVwOwotICAgIH0KLQotICAgIC8vIFNlbmQgYSBD
YXJib24gZXZlbnQgdG8gd2hhdGV2ZXIgaGFzIHRoZSBDYXJib24gdXNlciBmb2N1cy4KLSAgICBl
dmVudFRhcmdldFJlZiA9IEdldFVzZXJGb2N1c0V2ZW50VGFyZ2V0KCk7Ci0gICAgb3NTdGF0dXMg
PSBTZW5kRXZlbnRUb0V2ZW50VGFyZ2V0KGV2ZW50UmVmLCBldmVudFRhcmdldFJlZik7Ci0gICAg
aWYgKG9zU3RhdHVzIT1ub0VycikgewotICAgICAgICBOU0xvZyhAIlNlbmRFdmVudFRvRXZlbnRU
YXJnZXQoKSByZXR1cm5lZCAlaS4iLCAoaW50KW9zU3RhdHVzKTsKLSAgICAgICAgZ290byBDbGVh
blVwOwotICAgIH0KLQotQ2xlYW5VcDoKLQotICAgIC8vIENsZWFuIHVwLgotICAgIGlmIChldmVu
dFJlZikKLSAgICAgICAgUmVsZWFzZUV2ZW50KGV2ZW50UmVmKTsKLX0KLQotCi0tIChCb29sZWFu
KXNlbmRDYXJib25VcGRhdGVISUNvbW1hbmRTdGF0dXNFdmVudDooVUludDMyKWluSElDb21tYW5k
SUQgd2l0aE1lbnVSZWY6KE1lbnVSZWYpaW5NZW51UmVmIGFuZE1lbnVJdGVtSW5kZXg6KFVJbnQx
Nilpbk1lbnVJdGVtSW5kZXgKLXsKLQotICAgIEV2ZW50VGFyZ2V0UmVmIGV2ZW50VGFyZ2V0UmVm
OwotICAgIEhJQ29tbWFuZCBoaUNvbW1hbmQ7Ci0gICAgT1NTdGF0dXMgb3NTdGF0dXM7Ci0KLSAg
ICAvLyBJbml0aWFsaXplIGZvciBzYWZlIGVycm9yIGhhbmRsaW5nIGFuZCBmbGFnIHJldHVybmlu
Zy4KLSAgICBCb29sZWFuIGV2ZW50V2FzSGFuZGxlZCA9IEZBTFNFOwotICAgIEV2ZW50UmVmIGV2
ZW50UmVmID0gbnVsbHB0cjsKLQotICAgIC8vIENyZWF0ZSBhIFByb2Nlc3MgQ29tbWFuZCBldmVu
dC4gIERvbid0IG1lbnRpb24gYW55dGhpbmcgYWJvdXQgdGhlIG1lbnUgaXRlbSwgYmVjYXVzZSB3
ZSBkb24ndCB3YW50IHRoZSBDYXJib24gRXZlbnQgaGFuZGxlciBmaWRkbGluZyB3aXRoIGl0Lgot
ICAgIGhpQ29tbWFuZC5hdHRyaWJ1dGVzID0ga0hJQ29tbWFuZEZyb21NZW51OwotICAgIGhpQ29t
bWFuZC5jb21tYW5kSUQgPSBpbkhJQ29tbWFuZElEOwotICAgIGhpQ29tbWFuZC5tZW51Lm1lbnVS
ZWYgPSBpbk1lbnVSZWY7Ci0gICAgaGlDb21tYW5kLm1lbnUubWVudUl0ZW1JbmRleCA9IGluTWVu
dUl0ZW1JbmRleDsKLSAgICBvc1N0YXR1cyA9IENyZWF0ZUV2ZW50KG51bGxwdHIsIGtFdmVudENs
YXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFVwZGF0ZVN0YXR1cywgR2V0Q3VycmVudEV2ZW50VGlt
ZSgpLCBrRXZlbnRBdHRyaWJ1dGVOb25lLCAmZXZlbnRSZWYpOwotICAgIGlmIChvc1N0YXR1cyE9
bm9FcnIpIHsKLSAgICAgICAgTlNMb2coQCJDcmVhdGVFdmVudCgpIHJldHVybmVkICVpLiIsIChp
bnQpb3NTdGF0dXMpOwotICAgICAgICBnb3RvIENsZWFuVXA7Ci0gICAgfQotICAgIG9zU3RhdHVz
ID0gU2V0RXZlbnRQYXJhbWV0ZXIoZXZlbnRSZWYsIGtFdmVudFBhcmFtRGlyZWN0T2JqZWN0LCB0
eXBlSElDb21tYW5kLCBzaXplb2YoSElDb21tYW5kKSwgJmhpQ29tbWFuZCk7Ci0gICAgaWYgKG9z
U3RhdHVzIT1ub0VycikgewotICAgICAgICBOU0xvZyhAIlNldEV2ZW50UGFyYW1ldGVyKCkgcmV0
dXJuZWQgJWkuIiwgKGludClvc1N0YXR1cyk7Ci0gICAgICAgIGdvdG8gQ2xlYW5VcDsKLSAgICB9
Ci0KLSAgICAvLyBTZW5kIGEgQ2FyYm9uIGV2ZW50IHRvIHdoYXRldmVyIGhhcyB0aGUgQ2FyYm9u
IHVzZXIgZm9jdXMuCi0gICAgZXZlbnRUYXJnZXRSZWYgPSBHZXRVc2VyRm9jdXNFdmVudFRhcmdl
dCgpOwotICAgIG9zU3RhdHVzID0gU2VuZEV2ZW50VG9FdmVudFRhcmdldChldmVudFJlZiwgZXZl
bnRUYXJnZXRSZWYpOwotICAgIGlmIChvc1N0YXR1cyA9PSBub0VycikgewotICAgICAgICBldmVu
dFdhc0hhbmRsZWQgPSBUUlVFOwotICAgIH0gZWxzZSBpZiAob3NTdGF0dXMhPWV2ZW50Tm90SGFu
ZGxlZEVycikgewotICAgICAgICBOU0xvZyhAIlNlbmRFdmVudFRvRXZlbnRUYXJnZXQoKSByZXR1
cm5lZCAlaS4iLCAoaW50KW9zU3RhdHVzKTsKLSAgICAgICAgZ290byBDbGVhblVwOwotICAgIH0K
LQotQ2xlYW5VcDoKLQotICAgIC8vIENsZWFuIHVwLgotICAgIGlmIChldmVudFJlZikKLSAgICAg
ICAgUmVsZWFzZUV2ZW50KGV2ZW50UmVmKTsKLQotICAgIC8vIERvbmUuCi0gICAgcmV0dXJuIGV2
ZW50V2FzSGFuZGxlZDsKLX0KLQotLSAodm9pZClfaGFuZGxlUm9vdEJvdW5kc0NoYW5nZWQKLXsK
LSAgICBISVZpZXdSZWYgcm9vdCA9IEhJVmlld0dldFJvb3QoX3dpbmRvd1JlZik7IAotICAgIEhJ
UmVjdCBmcmFtZTsKLQotICAgIEhJVmlld0dldEZyYW1lKHJvb3QsICZmcmFtZSk7Ci0gICAgQUxM
T1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBbX2JvcmRlclZpZXcgc2V0RnJh
bWVTaXplOiooTlNTaXplKikmZnJhbWUuc2l6ZV07Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECi19Ci0KLS0gKHZvaWQpX2hhbmRsZUNvbnRlbnRCb3VuZHNDaGFuZ2VkCi17
Ci0gICAgSElWaWV3UmVmIHJvb3QsIGNvbnRlbnRWaWV3OyAKLSAgICBISVJlY3Qgcm9vdEJvdW5k
cywgY29udGVudEZyYW1lOwotICAgIE5TUmVjdCBvbGRDb250ZW50RnJhbWVSZWN0OwotCi0gICAg
cm9vdCA9IEhJVmlld0dldFJvb3QoX3dpbmRvd1JlZik7Ci0gICAgSElWaWV3RmluZEJ5SUQocm9v
dCwga0hJVmlld1dpbmRvd0NvbnRlbnRJRCwgJmNvbnRlbnRWaWV3KTsKLSAgICBISVZpZXdHZXRG
cmFtZShjb250ZW50VmlldywgJmNvbnRlbnRGcmFtZSk7Ci0gICAgSElWaWV3R2V0Qm91bmRzKHJv
b3QsICZyb290Qm91bmRzKTsKLQotICAgIC8vIFNldCB0aGUgY29udGVudCB2aWV3J3MgZnJhbWUg
cmVjdCBmcm9tIHRoZSBDYXJib24gd2luZG93J3MgY29udGVudCByZWdpb24gYm91bmRzLgotICAg
IGNvbnRlbnRGcmFtZS5vcmlnaW4ueSA9IHJvb3RCb3VuZHMuc2l6ZS5oZWlnaHQgLSBDR1JlY3RH
ZXRNYXhZKGNvbnRlbnRGcmFtZSk7Ci0KLSAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9O
U19CRUdJTgotICAgIG9sZENvbnRlbnRGcmFtZVJlY3QgPSBbKE5TVmlldyAqKV9jb250ZW50Vmll
dyBmcmFtZV07Ci0gICAgaWYgKCFOU0VxdWFsUmVjdHMoKihOU1JlY3QqKSZjb250ZW50RnJhbWUs
IG9sZENvbnRlbnRGcmFtZVJlY3QpKSB7Ci0gICAgICAgIFsoTlNWaWV3ICopX2NvbnRlbnRWaWV3
IHNldEZyYW1lOiooTlNSZWN0KikmY29udGVudEZyYW1lXTsKLSAgICB9Ci0gICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi19Ci0KLS0gKE9TU3RhdHVzKV9oYW5kbGVDYXJib25F
dmVudDooRXZlbnRSZWYpaW5FdmVudCBjYWxsUmVmOihFdmVudEhhbmRsZXJDYWxsUmVmKWluQ2Fs
bFJlZgotewotICAgIE9TU3RhdHVzIHJlc3VsdCA9IGV2ZW50Tm90SGFuZGxlZEVycjsKLQotICAg
IHN3aXRjaCAoR2V0RXZlbnRDbGFzcyhpbkV2ZW50KSkgewotICAgIGNhc2Uga0V2ZW50Q2xhc3ND
b250cm9sOgotICAgICAgICBDb250cm9sUmVmIGNvbnRyb2w7Ci0KLSAgICAgICAgQVNTRVJUKEdl
dEV2ZW50S2luZChpbkV2ZW50KSA9PSBrRXZlbnRDb250cm9sQm91bmRzQ2hhbmdlZCk7Ci0KLSAg
ICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1EaXJlY3RPYmplY3Qs
IHR5cGVDb250cm9sUmVmLCBudWxscHRyLCBzaXplb2YoQ29udHJvbFJlZiksIG51bGxwdHIsICZj
b250cm9sKTsKLQotICAgICAgICBpZiAoY29udHJvbCA9PSBISVZpZXdHZXRSb290KF93aW5kb3dS
ZWYpKQotICAgICAgICAgICAgW3NlbGYgX2hhbmRsZVJvb3RCb3VuZHNDaGFuZ2VkXTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgW3NlbGYgX2hhbmRsZUNvbnRlbnRCb3VuZHNDaGFuZ2VkXTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGtFdmVudENsYXNzV2luZG93OgotICAgICAgICBz
d2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgewotICAgICAgICBjYXNlIGtFdmVudFdpbmRv
d1Nob3duOgotICAgICAgICAgICAgW3NlbGYgX3NldFZpc2libGU6WUVTXTsKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGNhc2Uga0V2ZW50V2luZG93SGlkZGVuOgotICAgICAgICAgICAg
W3NlbGYgX3NldFZpc2libGU6Tk9dOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBrRXZlbnRXaW5kb3dBY3RpdmF0ZWQ6Ci0gICAgICAgICAgICBbc2VsZiBtYWtlS2V5V2luZG93
XTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Uga0V2ZW50V2luZG93RGVhY3Rp
dmF0ZWQ6Ci0gICAgICAgICAgICBbc2VsZiByZXNpZ25LZXlXaW5kb3ddOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrRXZlbnRXaW5kb3dCb3VuZHNDaGFuZ2VkOgotICAgICAg
ICAgICAgW3NlbGYgcmVjb25jaWxlVG9DYXJib25XaW5kb3dCb3VuZHNdOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotLy8gSGFuZGxlIHZhcmlvdXMgZXZlbnRzIHRoYXQgQ2FyYm9uIGlzIHNlbmRp
bmcgdG8gb3VyIHdpbmRvdy4KLXN0YXRpYyBPU1N0YXR1cyBOU0NhcmJvbldpbmRvd0hhbmRsZUV2
ZW50KEV2ZW50SGFuZGxlckNhbGxSZWYgaW5FdmVudEhhbmRsZXJDYWxsUmVmLCBFdmVudFJlZiBp
bkV2ZW50UmVmLCB2b2lkICppblVzZXJEYXRhKQotewotICAgIC8vIGRlZmF1bHQgYWN0aW9uIGlz
IHRvIHNlbmQgZXZlbnQgdG8gbmV4dCBoYW5kbGVyLiAgV2UgbW9kaWZ5IG9zU3RhdHVzIGFzIG5l
Y2Vzc2FyeSB3aGVyZSB3ZSBkb24ndCB3YW50IHRoaXMgYmVoYXZpb3IKLSAgICBPU1N0YXR1cyBv
c1N0YXR1cyA9IGV2ZW50Tm90SGFuZGxlZEVycjsKLQotICAgIC8vIFdlIGRvIGRpZmZlcmVudCB0
aGluZ3MgZm9yIGRpZmZlcmVudCBldmVudCB0eXBlcy4KLSAgICBDYXJib25XaW5kb3dBZGFwdGVy
ICpjYXJib25XaW5kb3cgPSAoQ2FyYm9uV2luZG93QWRhcHRlciAqKWluVXNlckRhdGE7Ci0KLSAg
ICBvc1N0YXR1cyA9IFtjYXJib25XaW5kb3cgX2hhbmRsZUNhcmJvbkV2ZW50OiBpbkV2ZW50UmVm
IGNhbGxSZWY6IGluRXZlbnRIYW5kbGVyQ2FsbFJlZl07Ci0KLSAgICAvLyBEb25lLiAgSWYgd2Ug
d2FudCB0byBwcm9wYWdhdGUgdGhlIGV2ZW50LCB3ZSByZXR1cm4gZXZlbnROb3RIYW5kbGVkRXJy
IHRvIHNlbmQgaXQgdG8gdGhlIG5leHQgaGFuZGxlcgotICAgIHJldHVybiBvc1N0YXR1czsKLX0K
LQotLy8gWzMzNjQxMTddIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lcyBub3QgZmFsbCB0
aHJvdWdoIHRvIHRoZSBBcHBLaXQgaW1wbGVtZW50YXRpb24hIGJhZCB0aGluZ3MgaGFwcGVuLgot
LSAodm9pZClfcmVhbGx5RG9PcmRlcldpbmRvdzooTlNXaW5kb3dPcmRlcmluZ01vZGUpcGxhY2Ug
cmVsYXRpdmVUbzooaW50KW90aGVyV2luIGZpbmRLZXk6KEJPT0wpZG9LZXlDYWxjIGZvckNvdW50
ZXI6KEJPT0wpaXNBQ291bnRlciBmb3JjZTooQk9PTClkb0ZvcmNlIGlzTW9kYWw6KEJPT0wpaXNN
b2RhbAotewotfQotCi1JR05PUkVfV0FSTklOR1NfQkVHSU4oImRlcHJlY2F0ZWQtaW1wbGVtZW50
YXRpb25zIikKLS0gKE5TUmVjdCkgX2dyb3dCb3hSZWN0Ci1JR05PUkVfV0FSTklOR1NfRU5ECi17
Ci0gICAgV2luZG93QXR0cmlidXRlcyBhdHRyczsKLSAgICBOU1JlY3QgcmV0UmVjdCA9IE5TWmVy
b1JlY3Q7Ci0KLSAgICBHZXRXaW5kb3dBdHRyaWJ1dGVzKF93aW5kb3dSZWYsICZhdHRycyk7Ci0K
LSAgICBpZiAoYXR0cnMgJiBrV2luZG93UmVzaXphYmxlQXR0cmlidXRlKSB7Ci0gICAgICAgIEhJ
UmVjdCBib3VuZHMsIHJlY3Q7Ci0gICAgICAgIEhJVmlld1JlZiB2aWV3OwotCi0gICAgICAgIEhJ
Vmlld0dldEJvdW5kcyhISVZpZXdHZXRSb290KF93aW5kb3dSZWYpLCAmYm91bmRzKTsKLSAgICAg
ICAgSElWaWV3RmluZEJ5SUQoSElWaWV3R2V0Um9vdChfd2luZG93UmVmKSwga0hJVmlld1dpbmRv
d0dyb3dCb3hJRCwgJnZpZXcpOwotICAgICAgICBISVZpZXdHZXRGcmFtZSh2aWV3LCAmcmVjdCk7
Ci0KLSAgICAgICAgcmVjdC5vcmlnaW4ueSA9IGJvdW5kcy5zaXplLmhlaWdodCAtIENHUmVjdEdl
dE1heFkocmVjdCkgLSAxOwotICAgICAgICByZWN0Lm9yaWdpbi54Kys7Ci0KLSAgICAgICAgcmV0
UmVjdCA9ICooTlNSZWN0KikmcmVjdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0UmVjdDsKLX0K
LQotQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBDYXJib25XaW5kb3dBZGFwdGVyCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0Nv
bnRlbnRWaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93
Q29udGVudFZpZXcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3MWJhMGViMDVi
N2IyMWMwOTFlN2M3ZTU4NTA4NTRlMGRjOGQzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9u
V2luZG93Q29udGVudFZpZXcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPEFw
cEtpdC9OU1ZpZXcuaD4KLQotQGludGVyZmFjZSBDYXJib25XaW5kb3dDb250ZW50VmlldyA6IE5T
VmlldyB7IH0KLQotQGVuZCAvLyBpbnRlcmZhY2UgQ2FyYm9uV2luZG93Q29udGVudFZpZXcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dDb250
ZW50Vmlldy5tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0Nv
bnRlbnRWaWV3Lm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhZGExODNlZGRjMGVh
OGQ2YjQwMGEwNDAzYWRmMjM2ZDRiYjQ4MjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldp
bmRvd0NvbnRlbnRWaWV3Lm0KKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9fTFA2
NF9fCi0KLSNpbXBvcnQgIkNhcmJvbldpbmRvd0NvbnRlbnRWaWV3LmgiCi0KLUBpbXBsZW1lbnRh
dGlvbiBDYXJib25XaW5kb3dDb250ZW50VmlldwotCi1AZW5kCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0ZyYW1lLmggYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93RnJhbWUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJiZGJlYmE5NzVmNGRmOTRlODU2MDg1MjNkOTRiNTU3
YTFlODg5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vQ2FyYm9uV2luZG93RnJhbWUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KLQotQGludGVyZmFj
ZSBDYXJib25XaW5kb3dGcmFtZSA6IE5TVmlldwotCi0vLyBJbnN0YW5jZSB2YXJpYWJsZXMuCi17
Ci0KLSAgICBAcHJpdmF0ZQotICAgIAotICAgIC8vIFNvbWV0aGluZyB3ZSBrZWVwIGFyb3VuZCBq
dXN0IHRvIHJldHVybiB3aGVuIGl0J3MgYXNrZWQgZm9yLgotICAgIHVuc2lnbmVkIGludCBfc3R5
bGVNYXNrOwotCi19Ci0KLUBlbmQgLy8gaW50ZXJmYWNlIE5TQ2FyYm9uV2luZG93RnJhbWUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NhcmJvbi9DYXJib25XaW5kb3dGcmFt
ZS5tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0ZyYW1lLm0K
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNmZhYzA1NmZmNTNhMWE0MDQzODg5M2E1
ZGI0OGE4NzdiYmQxNTcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0NhcmJvbldpbmRvd0ZyYW1lLm0K
KysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0g
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfX0xQNjRfXwotCi0jaW1wb3J0ICJD
YXJib25XaW5kb3dGcmFtZS5oIgotI2ltcG9ydCAiQ2FyYm9uV2luZG93QWRhcHRlci5oIgotI2lt
cG9ydCAiQ2FyYm9uV2luZG93Q29udGVudFZpZXcuaCIKLSNpbXBvcnQgPENhcmJvbi9DYXJib24u
aD4KLSNpbXBvcnQgPEZvdW5kYXRpb24vTlNHZW9tZXRyeS5oPgotI2ltcG9ydCA8Rm91bmRhdGlv
bi9OU1N0cmluZy5oPgotCi0jaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCi0KLUBpbnRlcmZh
Y2UgTlNWaWV3KFNlY3JldCkKLS0gKHZvaWQpX3NldFdpbmRvdzooTlNXaW5kb3cgKil3aW5kb3c7
Ci1AZW5kCi0KLUBjbGFzcyBOU0J1dHRvbjsKLS8qCi0KLUBpbnRlcmZhY2UgTlNUaGVtZUZyYW1l
KE5TSGlqYWNrZWRDbGFzc01ldGhvZHMpCi0KLSsgKGZsb2F0KV90aXRsZWJhckhlaWdodDoodW5z
aWduZWQgaW50KXN0eWxlOwotCi1AZW5kCi0qLwotCi1AaW1wbGVtZW50YXRpb24gQ2FyYm9uV2lu
ZG93RnJhbWUKLQotCi0tIChOU1JlY3QpdGl0bGViYXJSZWN0Ci17Ci0gICAgTlNSZWN0ICAgICAg
dGl0bGViYXJSZWN0OwotICAgIE5TUmVjdCAgICAgIGJvdW5kc1JlY3Q7Ci0KLSAgICBib3VuZHNS
ZWN0ID0gW3NlbGYgYm91bmRzXTsKLQotICAgIENhcmJvbldpbmRvd0FkYXB0ZXIgKmNhcmJvbldp
bmRvdzsKLSAgICBjYXJib25XaW5kb3cgPSAoQ2FyYm9uV2luZG93QWRhcHRlciAqKVtzZWxmIHdp
bmRvd107Ci0gICAgV2luZG93UmVmIHdpbmRvd1JlZiA9IFtjYXJib25XaW5kb3cgd2luZG93UmVm
XTsKLSAgICBSZWN0IGdsb2JhbEJvdW5kczsKLSAgICBHZXRXaW5kb3dCb3VuZHMgKHdpbmRvd1Jl
Ziwga1dpbmRvd1RpdGxlQmFyUmduLCAmZ2xvYmFsQm91bmRzKTsKLSAgICAKLSAgICB0aXRsZWJh
clJlY3Qub3JpZ2luLnggICAgPSBib3VuZHNSZWN0Lm9yaWdpbi54OwotICAgIHRpdGxlYmFyUmVj
dC5zaXplLndpZHRoICA9IGJvdW5kc1JlY3Quc2l6ZS53aWR0aDsKLSAgICB0aXRsZWJhclJlY3Qu
c2l6ZS5oZWlnaHQgPSBnbG9iYWxCb3VuZHMuYm90dG9tIC0gZ2xvYmFsQm91bmRzLnRvcDsKLSAg
ICB0aXRsZWJhclJlY3Qub3JpZ2luLnkgICAgPSBOU01heFkoYm91bmRzUmVjdCkgLSB0aXRsZWJh
clJlY3Quc2l6ZS5oZWlnaHQ7Ci0KLSAgICByZXR1cm4gdGl0bGViYXJSZWN0OwotfQotCi0vLyBH
aXZlbiBhIGNvbnRlbnQgcmVjdGFuZ2xlIGFuZCBzdHlsZSBtYXNrLCByZXR1cm4gYSBjb3JyZXNw
b25kaW5nIGZyYW1lIHJlY3RhbmdsZS4KLSsgKE5TUmVjdClmcmFtZVJlY3RGb3JDb250ZW50UmVj
dDooTlNSZWN0KWNvbnRlbnRSZWN0IHN0eWxlTWFzazooTlNVSW50ZWdlcilzdHlsZSB7Ci0KLSAg
ICAvLyBXZSBkb24ndCBib3RoZXIgZmlndXJpbmcgb3V0IGEgZ29vZCB2YWx1ZSwgYmVjYXVzZSBj
b250ZW50IHJlY3RzIHdlcmVuJ3Qgc28gbWVhbmluZ2Z1bCBmb3IgTlNDYXJib25XaW5kb3dzIGlu
IHRoZSBwYXN0LCBidXQgdGhpcyBtaWdodCBub3QgYmUgYSBnb29kIGFzc3VtcHRpb24gYW55bW9y
ZS4gIE0uUC4gV2FybmluZyAtIDEyLzUvMDAKLSAgICByZXR1cm4gY29udGVudFJlY3Q7Ci0KLX0K
LQotKyAoTlNSZWN0KWNvbnRlbnRSZWN0Rm9yRnJhbWVSZWN0OihOU1JlY3QpZnJhbWVSZWN0IHN0
eWxlTWFzazooTlNVSW50ZWdlcilzdHlsZSB7Ci0KLSAgICAvLyBXZSBkb24ndCBib3RoZXIgZmln
dXJpbmcgb3V0IGEgZ29vZCB2YWx1ZSwgYmVjYXVzZSBjb250ZW50IHJlY3RzIHdlcmVuJ3Qgc28g
bWVhbmluZ2Z1bCBmb3IgTlNDYXJib25XaW5kb3dzIGluIHRoZSBwYXN0LCBidXQgdGhpcyBtaWdo
dCBub3QgYmUgYSBnb29kIGFzc3VtcHRpb24gYW55bW9yZS4gIEtXIC0gY29waWVkIGZyb20gK2Zy
YW1lUmVjdEZvckNvbnRlbnRSZWN0OnN0eWxlTWFzawotICAgIHJldHVybiBmcmFtZVJlY3Q7Ci0K
LX0KLQotKyAoTlNTaXplKW1pbkZyYW1lU2l6ZUZvck1pbkNvbnRlbnRTaXplOihOU1NpemUpY1Np
emUgc3R5bGVNYXNrOihOU1VJbnRlZ2VyKXN0eWxlIHsKLSAgICAvLyBTZWUgY29tbWVudHMgYWJv
dmUuICBXZSBkb24ndCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgcmVsYXRpb25zaGlw
IGJldHdlZW4gY29udGVudCByZWN0cyBhbmQgZnJhbWUgcmVjdHMKLSAgICByZXR1cm4gY1NpemU7
Ci19Ci0KLS0gKE5TUmVjdClmcmFtZVJlY3RGb3JDb250ZW50UmVjdDooTlNSZWN0KWNSZWN0IHN0
eWxlTWFzazooTlNVSW50ZWdlcilzdHlsZSB7Ci0gICAgcmV0dXJuIFtbc2VsZiBjbGFzc10gZnJh
bWVSZWN0Rm9yQ29udGVudFJlY3Q6IGNSZWN0IHN0eWxlTWFzazpzdHlsZV07Ci19Ci0tIChOU1Jl
Y3QpY29udGVudFJlY3RGb3JGcmFtZVJlY3Q6KE5TUmVjdClmUmVjdCBzdHlsZU1hc2s6KE5TVUlu
dGVnZXIpc3R5bGUgewotICAgIHJldHVybiBbW3NlbGYgY2xhc3NdIGNvbnRlbnRSZWN0Rm9yRnJh
bWVSZWN0OiBmUmVjdCBzdHlsZU1hc2s6c3R5bGVdOwotfQotLSAoTlNTaXplKW1pbkZyYW1lU2l6
ZUZvck1pbkNvbnRlbnRTaXplOihOU1NpemUpY1NpemUgc3R5bGVNYXNrOihOU1VJbnRlZ2VyKXN0
eWxlIHsKLSAgICByZXR1cm4gW1tzZWxmIGNsYXNzXSBtaW5GcmFtZVNpemVGb3JNaW5Db250ZW50
U2l6ZTpjU2l6ZSBzdHlsZU1hc2s6IHN0eWxlXTsKLX0KLQotLy8gSW5pdGlhbGl6ZS4KLS0gKGlk
KWluaXRXaXRoRnJhbWU6KE5TUmVjdClpbkZyYW1lUmVjdCBzdHlsZU1hc2s6KHVuc2lnbmVkIGlu
dClpblN0eWxlTWFzayBvd25lcjooTlNXaW5kb3cgKilpbk93bmluZ1dpbmRvdyB7Ci0KLSAgICAv
LyBQYXJhbWV0ZXIgY2hlY2suCi0gICAgaWYgKCFbaW5Pd25pbmdXaW5kb3cgaXNLaW5kT2ZDbGFz
czpbQ2FyYm9uV2luZG93QWRhcHRlciBjbGFzc11dKSBOU0xvZyhAIkNhcmJvbldpbmRvd0ZyYW1l
cyBjYW4gb25seSBiZSBvd25lZCBieSBDYXJib25XaW5kb3dBZGFwdGVycy4iKTsKLQotICAgIC8v
IERvIHRoZSBzdGFuZGFyZCBDb2NvYSB0aGluZy4KLSAgICBzZWxmID0gW3N1cGVyIGluaXRXaXRo
RnJhbWU6aW5GcmFtZVJlY3RdOwotICAgIGlmICghc2VsZikgcmV0dXJuIG5pbDsKLQotICAgIC8v
IFJlY29yZCB3aGF0IHdlJ2xsIG5lZWQgbGF0ZXIuCi0gICAgX3N0eWxlTWFzayA9IGluU3R5bGVN
YXNrOwotCi0gICAgLy8gRG8gd2hhdCBOU0ZyYW1lVmlldydzIG1ldGhvZCBvZiB0aGUgc2FtZSBu
YW1lIGRvZXMuCi0gICAgW3NlbGYgX3NldFdpbmRvdzppbk93bmluZ1dpbmRvd107Ci0gICAgW3Nl
bGYgc2V0TmV4dFJlc3BvbmRlcjppbk93bmluZ1dpbmRvd107Ci0KLSAgICAvLyBEb25lLgotICAg
IHJldHVybiBzZWxmOwotCi19Ci0KLQotLy8gU2luayBhIG1ldGhvZCBpbnZvY2F0aW9uLgotLSAo
dm9pZClfc2V0RnJhbWVOZWVkc0Rpc3BsYXk6KEJPT0wpbmVlZHNEaXNwbGF5IHsKLSAgICAKLX0K
LQotCi0vLyBTaW5rIGEgbWV0aG9kIGludm9jYXRpb24uCi0tICh2b2lkKV9zZXRTaGVldDooQk9P
TClzaGVldEZsYWcgewotCi19Ci0KLQotLy8gU2luayBhIG1ldGhvZCBpbnZvY2F0aW9uLgotLSAo
dm9pZClfdXBkYXRlQnV0dG9uU3RhdGUgewotCi19Ci0KLSNpZiAwCi0vLyBTaW5rIGEgbWV0aG9k
IGludm9jYXRpb24uCi0tICh2b2lkKV93aW5kb3dDaGFuZ2VkS2V5U3RhdGUgewotfQotI2VuZGlm
Ci0KLS8vIFRvb2xiYXIgbWV0aG9kcyB0aGF0IE5TV2luZG93IGV4cGVjdHMgdG8gYmUgdGhlcmUu
Ci0tIChCT09MKV9jYW5IYXZlVG9vbGJhciB7IHJldHVybiBOTzsgfQotLSAoQk9PTClfdG9vbGJh
cklzSW5UcmFuc2l0aW9uIHsgcmV0dXJuIE5POyB9Ci0tIChCT09MKV90b29sYmFySXNTaG93biB7
IHJldHVybiBOTzsgfQotLSAoQk9PTClfdG9vbGJhcklzSGlkZGVuIHsgcmV0dXJuIE5POyB9Ci0t
ICh2b2lkKV9zaG93VG9vbGJhcldpdGhBbmltYXRpb246KEJPT0wpYW5pbWF0ZSB7fQotLSAodm9p
ZClfaGlkZVRvb2xiYXJXaXRoQW5pbWF0aW9uOihCT09MKWFuaW1hdGUge30KLS0gKGZsb2F0KV9k
aXN0YW5jZUZyb21Ub29sYmFyQmFzZVRvVGl0bGViYXIgeyByZXR1cm4gMDsgfQotCi0KLS8vIFJl
ZnVzZSB0byBhZG1pdCB0aGVyZSdzIGEgY2xvc2UgYnV0dG9uIG9uIHRoZSB3aW5kb3cuCi0tIChO
U0J1dHRvbiAqKWNsb3NlQnV0dG9uIHsKLQotICAgIC8vIFNpbXBsZS4KLSAgICByZXR1cm4gbmls
OwotfQotCi0KLS8vIFJldHVybiB3aGF0J3MgYXNrZWQgZm9yLgotLSAodW5zaWduZWQgaW50KXN0
eWxlTWFzayB7Ci0KLSAgICAvLyBTaW1wbGUuCi0gICAgcmV0dXJuIF9zdHlsZU1hc2s7Ci0KLX0K
LQotCi0vLyBSZXR1cm4gd2hhdCdzIGFza2VkIGZvci4KLS0gKE5TUmVjdClkcmFnUmVjdEZvckZy
YW1lUmVjdDooTlNSZWN0KWZyYW1lUmVjdCB7Ci0KLSAgICAvLyBEbyB3aGF0IE5TVGhlbWVGcmFt
ZSB3b3VsZCBkby4KLSAgICAvLyBJZiB3ZSBqdXN0IHJldHVybiBOU1plcm9SZWN0IGhlcmUsIF9O
WE1ha2VXaW5kb3dWaXNpYmxlKCkgZ2V0cyBhbGwgYmVmdWRkbGVkIGluIHRoZSBzaGVldC1zaG93
aW5nIGNhc2UsIGEgd2luZG93LW1vdmluZyBsb29wIGlzIGVudGVyZWQsIGFuZCB0aGUgc2hlZXQg
Z2V0cyBtb3ZlZCByaWdodCBvZmYgb2YgdGhlIHNjcmVlbi4gIE0uUC4gV2FybmluZyAtIDMvMjMv
MDEKLSAgICBOU1JlY3QgZHJhZ1JlY3Q7Ci0gICAgZHJhZ1JlY3Quc2l6ZS5oZWlnaHQgPSAyNzsv
L1tOU1RoZW1lRnJhbWUgX3RpdGxlYmFySGVpZ2h0OltzZWxmIHN0eWxlTWFza11dOwotICAgIGRy
YWdSZWN0Lm9yaWdpbi55ID0gTlNNYXhZKGZyYW1lUmVjdCkgLSBkcmFnUmVjdC5zaXplLmhlaWdo
dDsKLSAgICBkcmFnUmVjdC5zaXplLndpZHRoID0gZnJhbWVSZWN0LnNpemUud2lkdGg7Ci0gICAg
ZHJhZ1JlY3Qub3JpZ2luLnggPSBmcmFtZVJlY3Qub3JpZ2luLng7Ci0gICAgcmV0dXJuIGRyYWdS
ZWN0OwotICAgIAotfQotCi0KLS8vIFJldHVybiB3aGF0J3MgYXNrZWQgZm9yLgotLSAoQk9PTClp
c09wYXF1ZSB7Ci0KLSAgICAvLyBSZXR1cm4gYSB2YWx1ZSB0aGF0IHdpbGwgbWFrZSAtW05TV2lu
ZG93IGRpc3BsYXlJZk5lZWRlZF0gb24gb3VyIENhcmJvbiB3aW5kb3cgYWN0dWFsbHkgd29yay4K
LSAgICByZXR1cm4gWUVTOwotCi19Ci0KLQotLy8gUmVmdXNlIHRvIGFkbWl0IHRoZXJlJ3MgYSBt
aW5pbWl6ZSBidXR0b24gb24gdGhlIHdpbmRvdy4KLS0gKE5TQnV0dG9uICopbWluaW1pemVCdXR0
b24gewotCi0gICAgLy8gU2ltcGxlLgotICAgIHJldHVybiBuaWw7Ci0KLX0KLQotCi0vLyBEbyB0
aGUgcmlnaHQgdGhpbmcgZm9yIGEgQ2FyYm9uIHdpbmRvdy4KLS0gKHZvaWQpc2V0VGl0bGU6KE5T
U3RyaW5nICopdGl0bGUgewotCi0gICAgQ2FyYm9uV2luZG93QWRhcHRlciAqY2FyYm9uV2luZG93
OwotICAgIE9TU3RhdHVzIG9zU3RhdHVzOwotICAgIFdpbmRvd1JlZiB3aW5kb3dSZWY7Ci0KLSAg
ICAvLyBTZXQgdGhlIENhcmJvbiB3aW5kb3cncyB0aXRsZS4KLSAgICBjYXJib25XaW5kb3cgPSAo
Q2FyYm9uV2luZG93QWRhcHRlciAqKVtzZWxmIHdpbmRvd107Ci0gICAgd2luZG93UmVmID0gW2Nh
cmJvbldpbmRvdyB3aW5kb3dSZWZdOwotICAgIG9zU3RhdHVzID0gU2V0V2luZG93VGl0bGVXaXRo
Q0ZTdHJpbmcod2luZG93UmVmLCAoQ0ZTdHJpbmdSZWYpdGl0bGUpOwotICAgIGlmIChvc1N0YXR1
cyE9bm9FcnIpIE5TTG9nKEAiQSBDYXJib24gd2luZG93J3MgdGl0bGUgY291bGRuJ3QgYmUgc2V0
LiIpOwotCi19Ci0KLQotLy8gUmV0dXJuIHdoYXQncyBhc2tlZCBmb3IuCi0tIChOU1N0cmluZyAq
KXRpdGxlIHsKLQotICAgIENGU3RyaW5nUmVmIHdpbmRvd1RpdGxlOwotICAgIENhcmJvbldpbmRv
d0FkYXB0ZXIgKmNhcmJvbldpbmRvdzsKLSAgICBOU1N0cmluZyAqd2luZG93VGl0bGVBc05TU3Ry
aW5nOwotICAgIE9TU3RhdHVzIG9zU3RhdHVzOwotICAgIFdpbmRvd1JlZiB3aW5kb3dSZWY7Ci0K
LSAgICAvLyBSZXR1cm4gdGhlIENhcmJvbiB3aW5kb3cncyB0aXRsZS4KLSAgICBjYXJib25XaW5k
b3cgPSAoQ2FyYm9uV2luZG93QWRhcHRlciAqKVtzZWxmIHdpbmRvd107Ci0gICAgd2luZG93UmVm
ID0gW2NhcmJvbldpbmRvdyB3aW5kb3dSZWZdOwotICAgIG9zU3RhdHVzID0gQ29weVdpbmRvd1Rp
dGxlQXNDRlN0cmluZyh3aW5kb3dSZWYsICZ3aW5kb3dUaXRsZSk7Ci0gICAgaWYgKG9zU3RhdHVz
PT1ub0VycikgewotICAgICAgICBJR05PUkVfV0FSTklOR1NfQkVHSU4oImNhc3QtcXVhbCIpCi0g
ICAgICAgIHdpbmRvd1RpdGxlQXNOU1N0cmluZyA9IChOU1N0cmluZyAqKXdpbmRvd1RpdGxlOwot
ICAgICAgICBJR05PUkVfV0FSTklOR1NfRU5ECi0gICAgfSBlbHNlIHsKLSAgICAgICAgTlNMb2co
QCJBIENhcmJvbiB3aW5kb3cncyB0aXRsZSBjb3VsZG4ndCBiZSBnb3R0ZW4uIik7Ci0gICAgICAg
IHdpbmRvd1RpdGxlQXNOU1N0cmluZyA9IEAiIjsKLSAgICB9Ci0gICAgcmV0dXJuIFt3aW5kb3dU
aXRsZUFzTlNTdHJpbmcgYXV0b3JlbGVhc2VdOwotCi19Ci0KLQotLy8gUmV0dXJuIHdoYXQncyBh
c2tlZCBmb3IuCi0tIChmbG9hdClfc2hlZXRIZWlnaHRBZGp1c3RtZW50IHsKLQotICAgIC8vIERv
IHdoYXQgTlNUaGVtZUZyYW1lIHdvdWxkIGRvLgotICAgIHJldHVybiAyMjsvL1tOU1RoZW1lRnJh
bWUgX3RpdGxlYmFySGVpZ2h0Oihbc2VsZiBzdHlsZU1hc2tdICYgfk5TRG9jTW9kYWxXaW5kb3dN
YXNrKV07Ci0gICAgCi19Ci0KLS8vIFJldHVybiB3aGF0J3MgYXNrZWQgZm9yLgotLSAoZmxvYXQp
X21heFRpdGxlYmFyVGl0bGVSZWN0IHsKLQotICAgIC8vIERvIHdoYXQgTlNUaGVtZUZyYW1lIHdv
dWxkIGRvLgotICAgIHJldHVybiAyMjsvL1tOU1RoZW1lRnJhbWUgX3RpdGxlYmFySGVpZ2h0Oihb
c2VsZiBzdHlsZU1hc2tdICYgfk5TRG9jTW9kYWxXaW5kb3dNYXNrKV07Ci0gICAgCi19Ci0KLS0g
KHZvaWQpX2NsZWFyRHJhZ01hcmdpbnMgewotfQotCi0tICh2b2lkKV9yZXNldERyYWdNYXJnaW5z
IHsKLX0KLQotLSAoTlNDb2xvciAqKWNvbnRlbnRGaWxsCi17Ci0gICAgcmV0dXJuIFtOU0NvbG9y
IGNsZWFyQ29sb3JdOwotfQotCi1AZW5kIC8vIGltcGxlbWVudGF0aW9uIE5TQ2FyYm9uV2luZG93
RnJhbWUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJi
b24vSElWaWV3QWRhcHRlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJVmll
d0FkYXB0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI2OWIwMWFhOWE0Nzgz
MDRjMzFjNDUxYzhiNDQzNDZhOWFiMjE1Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vSElWaWV3QWRh
cHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L1dl
YktpdC5oPgotI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KLQotQGludGVyZmFjZSBISVZpZXdB
ZGFwdGVyIDogTlNPYmplY3QKLQotKyAodm9pZCliaW5kSElWaWV3VG9OU1ZpZXc6KEhJVmlld1Jl
ZiloaVZpZXcgbnNWaWV3OihOU1ZpZXcqKW5zVmlldzsKLSsgKHZvaWQpdW5iaW5kTlNWaWV3OihO
U1ZpZXcqKW5zVmlldzsKLSsgKEhJVmlld1JlZilnZXRISVZpZXdGb3JOU1ZpZXc6KE5TVmlldyop
aW5WaWV3OwotCi1AZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJi
b24vSElWaWV3QWRhcHRlci5tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJVmll
d0FkYXB0ZXIubQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTE3Y2JjNjc3OTY2ZjIz
MmRjYjBmMjE0ZTViMDY2NzcyM2YxMmE2YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DYXJib24vSElWaWV3QWRh
cHRlci5tCisrKyAvZGV2L251bGwKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAgICAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9fTFA2NF9f
Ci0KLSNpbXBvcnQgIkhJVmlld0FkYXB0ZXIuaCIKLQotI2ltcG9ydCAiV2ViTlNPYmplY3RFeHRy
YXMuaCIKLSNpbXBvcnQgPHBhbC9zcGkvbWFjL1F1aWNrRHJhd1NQSS5oPgotI2ltcG9ydCA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotc3RhdGljIHZvaWQgU2V0Vmlld05lZWRzRGlzcGxheShISVZpZXdS
ZWYgaW5WaWV3LCBSZ25IYW5kbGUgaW5SZWdpb24sIEJvb2xlYW4gaW5OZWVkc0Rpc3BsYXkpOwot
Ci0jZGVmaW5lIFdBVENIX0lOVkFMSURBVElPTiAwCi0KLUBpbnRlcmZhY2UgTlNWaWV3KFNoaGho
RG9udFRlbGwpCi0tIChOU1JlY3QpX2RpcnR5UmVjdDsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9u
IEhJVmlld0FkYXB0ZXIKLQotc3RhdGljIENGTXV0YWJsZURpY3Rpb25hcnlSZWYgc1ZpZXdNYXA7
Ci0KLQotdHlwZWRlZiB2b2lkICgqU2V0TmVlZHNEaXNwbGF5TWV0aG9kKShpZCwgU0VMLCBCT09M
KTsKLXR5cGVkZWYgdm9pZCAoKlNldE5lZWRzRGlzcGxheUluUmVjdE1ldGhvZCkoaWQsIFNFTCwg
TlNSZWN0KTsKLXR5cGVkZWYgTlNWaWV3ICooKk5leHRWYWxpZEtleVZpZXdNZXRob2QpKGlkLCBT
RUwpOwotCi1zdGF0aWMgU2V0TmVlZHNEaXNwbGF5TWV0aG9kIG9sZE5TVmlld1NldE5lZWRzRGlz
cGxheUlNUDsKLXN0YXRpYyBTZXROZWVkc0Rpc3BsYXlJblJlY3RNZXRob2Qgb2xkTlNWaWV3U2V0
TmVlZHNEaXNwbGF5SW5SZWN0SU1QOwotc3RhdGljIE5leHRWYWxpZEtleVZpZXdNZXRob2Qgb2xk
TlNWaWV3TmV4dFZhbGlkS2V5Vmlld0lNUDsKLQotc3RhdGljIHZvaWQgX3dlYmtpdF9OU1ZpZXdf
c2V0TmVlZHNEaXNwbGF5KGlkIHNlbGYsIFNFTCBfY21kLCBCT09MIGZsYWcpOwotc3RhdGljIHZv
aWQgX3dlYmtpdF9OU1ZpZXdfc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGlkIHNlbGYsIFNFTCBfY21k
LCBOU1JlY3QgaW52YWxpZFJlY3QpOwotc3RhdGljIE5TVmlldyAqX3dlYmtpdF9OU1ZpZXdfbmV4
dFZhbGlkS2V5VmlldyhpZCBzZWxmLCBTRUwgX2NtZCk7Ci0KLSsgKHZvaWQpYmluZEhJVmlld1Rv
TlNWaWV3OihISVZpZXdSZWYpaGlWaWV3IG5zVmlldzooTlNWaWV3Kiluc1ZpZXcKLXsKLSAgICBp
ZiAoc1ZpZXdNYXAgPT0gTlVMTCkgewotICAgICAgICBzVmlld01hcCA9IENGRGljdGlvbmFyeUNy
ZWF0ZU11dGFibGUoTlVMTCwgMCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgICAgLy8gT3ZlcnJpZGUg
LVtOU1ZpZXcgc2V0TmVlZHNEaXNwbGF5Ol0KLSAgICAgICAgTWV0aG9kIHNldE5lZWRzRGlzcGxh
eU1ldGhvZCA9IGNsYXNzX2dldEluc3RhbmNlTWV0aG9kKG9iamNfZ2V0Q2xhc3MoIk5TVmlldyIp
LCBAc2VsZWN0b3Ioc2V0TmVlZHNEaXNwbGF5OikpOwotICAgICAgICBBU1NFUlQoc2V0TmVlZHNE
aXNwbGF5TWV0aG9kKTsKLSAgICAgICAgQVNTRVJUKCFvbGROU1ZpZXdTZXROZWVkc0Rpc3BsYXlJ
TVApOwotICAgICAgICBvbGROU1ZpZXdTZXROZWVkc0Rpc3BsYXlJTVAgPSAoU2V0TmVlZHNEaXNw
bGF5TWV0aG9kKW1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihzZXROZWVkc0Rpc3BsYXlNZXRob2Qs
IChJTVApX3dlYmtpdF9OU1ZpZXdfc2V0TmVlZHNEaXNwbGF5KTsKLQotICAgICAgICAvLyBPdmVy
cmlkZSAtW05TVmlldyBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6XQotICAgICAgICBNZXRob2Qgc2V0
TmVlZHNEaXNwbGF5SW5SZWN0TWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2Qob2JqY19n
ZXRDbGFzcygiTlNWaWV3IiksIEBzZWxlY3RvcihzZXROZWVkc0Rpc3BsYXlJblJlY3Q6KSk7Ci0g
ICAgICAgIEFTU0VSVChzZXROZWVkc0Rpc3BsYXlJblJlY3RNZXRob2QpOwotICAgICAgICBBU1NF
UlQoIW9sZE5TVmlld1NldE5lZWRzRGlzcGxheUluUmVjdElNUCk7Ci0gICAgICAgIG9sZE5TVmll
d1NldE5lZWRzRGlzcGxheUluUmVjdElNUCA9IChTZXROZWVkc0Rpc3BsYXlJblJlY3RNZXRob2Qp
bWV0aG9kX3NldEltcGxlbWVudGF0aW9uKHNldE5lZWRzRGlzcGxheUluUmVjdE1ldGhvZCwgKElN
UClfd2Via2l0X05TVmlld19zZXROZWVkc0Rpc3BsYXlJblJlY3QpOwotCi0gICAgICAgIC8vIE92
ZXJyaWRlIC1bTlNWaWV3IG5leHRWYWxpZEtleVZpZXddCi0gICAgICAgIE1ldGhvZCBuZXh0VmFs
aWRLZXlWaWV3TWV0aG9kID0gY2xhc3NfZ2V0SW5zdGFuY2VNZXRob2Qob2JqY19nZXRDbGFzcygi
TlNWaWV3IiksIEBzZWxlY3RvcihuZXh0VmFsaWRLZXlWaWV3KSk7Ci0gICAgICAgIEFTU0VSVChu
ZXh0VmFsaWRLZXlWaWV3TWV0aG9kKTsKLSAgICAgICAgQVNTRVJUKCFvbGROU1ZpZXdOZXh0VmFs
aWRLZXlWaWV3SU1QKTsKLSAgICAgICAgb2xkTlNWaWV3TmV4dFZhbGlkS2V5Vmlld0lNUCA9IChO
ZXh0VmFsaWRLZXlWaWV3TWV0aG9kKW1ldGhvZF9zZXRJbXBsZW1lbnRhdGlvbihuZXh0VmFsaWRL
ZXlWaWV3TWV0aG9kLCAoSU1QKV93ZWJraXRfTlNWaWV3X25leHRWYWxpZEtleVZpZXcpOwotICAg
IH0KLQotICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKHNWaWV3TWFwLCBuc1ZpZXcsIGhpVmlldyk7
Ci19Ci0KLSsgKEhJVmlld1JlZilnZXRISVZpZXdGb3JOU1ZpZXc6KE5TVmlldyopaW5WaWV3Ci17
Ci0gICAgSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJjYXN0LXF1YWwiKQotICAgIHJldHVybiBzVmll
d01hcCA/IChISVZpZXdSZWYpQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoc1ZpZXdNYXAsIGluVmlldykg
OiBOVUxMOwotICAgIElHTk9SRV9XQVJOSU5HU19FTkQKLX0KLQotKyAodm9pZCl1bmJpbmROU1Zp
ZXc6KE5TVmlldyopaW5WaWV3Ci17Ci0gICAgQ0ZEaWN0aW9uYXJ5UmVtb3ZlVmFsdWUoc1ZpZXdN
YXAsIGluVmlldyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF93ZWJraXRfTlNWaWV3X3NldE5lZWRzRGlz
cGxheShpZCBzZWxmLCBTRUwgX2NtZCwgQk9PTCBmbGFnKQotewotICAgIG9sZE5TVmlld1NldE5l
ZWRzRGlzcGxheUlNUChzZWxmLCBfY21kLCBmbGFnKTsKLQotICAgIGlmICghZmxhZykgewotICAg
ICAgICBISVZpZXdSZWYgaGlWaWV3ID0gTlVMTDsKLSAgICAgICAgTlNSZWN0IHRhcmdldEJvdW5k
cyA9IFtzZWxmIHZpc2libGVSZWN0XTsKLSAgICAgICAgTlNSZWN0IHZhbGlkUmVjdCA9IHRhcmdl
dEJvdW5kczsKLSAgICAgICAgTlNWaWV3ICp2aWV3ID0gc2VsZjsKLSAgICAgICAgCi0gICAgICAg
IHdoaWxlICh2aWV3KSB7Ci0gICAgICAgICAgICB0YXJnZXRCb3VuZHMgPSBbdmlldyB2aXNpYmxl
UmVjdF07Ci0gICAgICAgICAgICBpZiAoKGhpVmlldyA9IFtISVZpZXdBZGFwdGVyIGdldEhJVmll
d0Zvck5TVmlldzp2aWV3XSkgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIHZhbGlkUmVjdCA9IFt2aWV3IGNvbnZlcnRSZWN0OnZhbGlkUmVjdCB0b1ZpZXc6W3Zp
ZXcgc3VwZXJ2aWV3XV07Ci0gICAgICAgICAgICB2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGhpVmlldykgeyAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gRmxpcCByZWN0IGhlcmUgYW5kIGNvbnZlcnQgdG8gcmVnaW9uCi0gICAgICAg
ICAgICBISVJlY3QgcmVjdDsKLSAgICAgICAgICAgIHJlY3Qub3JpZ2luLnggPSB2YWxpZFJlY3Qu
b3JpZ2luLng7Ci0gICAgICAgICAgICByZWN0Lm9yaWdpbi55ID0gdGFyZ2V0Qm91bmRzLnNpemUu
aGVpZ2h0IC0gTlNNYXhZKHZhbGlkUmVjdCk7Ci0gICAgICAgICAgICByZWN0LnNpemUuaGVpZ2h0
ID0gdmFsaWRSZWN0LnNpemUuaGVpZ2h0OwotICAgICAgICAgICAgcmVjdC5zaXplLndpZHRoID0g
dmFsaWRSZWN0LnNpemUud2lkdGg7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZvciBu
b3csIGNhbGwgdGhlIHJlZ2lvbi1iYXNlZCBBUEkuCi0gICAgICAgICAgICBSZ25IYW5kbGUgcmdu
ID0gTmV3UmduKCk7Ci0gICAgICAgICAgICBpZiAocmduKSB7Ci0gICAgICAgICAgICAgICAgUmVj
dCBxZFJlY3Q7Ci0gICAgICAgICAgICAgICAgcWRSZWN0LnRvcCA9IChTSW50MTYpcmVjdC5vcmln
aW4ueTsKLSAgICAgICAgICAgICAgICBxZFJlY3QubGVmdCA9IChTSW50MTYpcmVjdC5vcmlnaW4u
eDsKLSAgICAgICAgICAgICAgICBxZFJlY3QuYm90dG9tID0gQ0dSZWN0R2V0TWF4WShyZWN0KTsK
LSAgICAgICAgICAgICAgICBxZFJlY3QucmlnaHQgPSBDR1JlY3RHZXRNYXhYKHJlY3QpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFJlY3RSZ24ocmduLCAmcWRSZWN0KTsKLSAg
ICAgICAgICAgICAgICBTZXRWaWV3TmVlZHNEaXNwbGF5KGhpVmlldywgcmduLCBmYWxzZSk7Ci0g
ICAgICAgICAgICAgICAgRGlzcG9zZVJnbihyZ24pOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfd2Via2l0X05TVmlld19zZXROZWVkc0Rpc3BsYXlJ
blJlY3QoaWQgc2VsZiwgU0VMIF9jbWQsIE5TUmVjdCBpbnZhbGlkUmVjdCkKLXsKLSAgICBpbnZh
bGlkUmVjdCA9IE5TVW5pb25SZWN0KGludmFsaWRSZWN0LCBbc2VsZiBfZGlydHlSZWN0XSk7Ci0g
ICAgb2xkTlNWaWV3U2V0TmVlZHNEaXNwbGF5SW5SZWN0SU1QKHNlbGYsIF9jbWQsIGludmFsaWRS
ZWN0KTsKLSAgICAKLSAgICBpZiAoIU5TSXNFbXB0eVJlY3QoaW52YWxpZFJlY3QpKSB7Ci0gICAg
ICAgIEhJVmlld1JlZiBoaVZpZXcgPSBOVUxMOwotICAgICAgICBOU1JlY3QgdGFyZ2V0Qm91bmRz
ID0gWyhOU1ZpZXcgKilzZWxmIGJvdW5kc107Ci0gICAgICAgIE5TVmlldyAqdmlldyA9IHNlbGY7
Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAodmlldykgewotICAgICAgICAgICAgdGFyZ2V0Qm91
bmRzID0gW3ZpZXcgYm91bmRzXTsKLSAgICAgICAgICAgIGlmICgoaGlWaWV3ID0gW0hJVmlld0Fk
YXB0ZXIgZ2V0SElWaWV3Rm9yTlNWaWV3OnZpZXddKSAhPSBOVUxMKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgaW52YWxpZFJlY3QgPSBbdmlldyBjb252ZXJ0UmVjdDppbnZh
bGlkUmVjdCB0b1ZpZXc6W3ZpZXcgc3VwZXJ2aWV3XV07Ci0gICAgICAgICAgICB2aWV3ID0gW3Zp
ZXcgc3VwZXJ2aWV3XTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGhpVmlldykg
ewotICAgICAgICAgICAgaWYgKE5TV2lkdGgoaW52YWxpZFJlY3QpID4gMCAmJiBOU0hlaWdodChp
bnZhbGlkUmVjdCkpIHsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gRmxpcCBy
ZWN0IGhlcmUgYW5kIGNvbnZlcnQgdG8gcmVnaW9uCi0gICAgICAgICAgICAgICAgSElSZWN0IHJl
Y3Q7Ci0gICAgICAgICAgICAgICAgcmVjdC5vcmlnaW4ueCA9IGludmFsaWRSZWN0Lm9yaWdpbi54
OwotICAgICAgICAgICAgICAgIHJlY3Qub3JpZ2luLnkgPSB0YXJnZXRCb3VuZHMuc2l6ZS5oZWln
aHQgLSBOU01heFkoaW52YWxpZFJlY3QpOwotICAgICAgICAgICAgICAgIHJlY3Quc2l6ZS5oZWln
aHQgPSBpbnZhbGlkUmVjdC5zaXplLmhlaWdodDsKLSAgICAgICAgICAgICAgICByZWN0LnNpemUu
d2lkdGggPSBpbnZhbGlkUmVjdC5zaXplLndpZHRoOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIC8vIEZvciBub3csIGNhbGwgdGhlIHJlZ2lvbi1iYXNlZCBBUEkuCi0gICAgICAg
ICAgICAgICAgUmduSGFuZGxlIHJnbiA9IE5ld1JnbigpOwotICAgICAgICAgICAgICAgIGlmIChy
Z24pIHsKLSAgICAgICAgICAgICAgICAgICAgUmVjdCBxZFJlY3Q7Ci0gICAgICAgICAgICAgICAg
ICAgIHFkUmVjdC50b3AgPSAoU0ludDE2KXJlY3Qub3JpZ2luLnk7Ci0gICAgICAgICAgICAgICAg
ICAgIHFkUmVjdC5sZWZ0ID0gKFNJbnQxNilyZWN0Lm9yaWdpbi54OwotICAgICAgICAgICAgICAg
ICAgICBxZFJlY3QuYm90dG9tID0gQ0dSZWN0R2V0TWF4WShyZWN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgcWRSZWN0LnJpZ2h0ID0gQ0dSZWN0R2V0TWF4WChyZWN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFJlY3RSZ24ocmduLCAmcWRSZWN0KTsKLSAgICAg
ICAgICAgICAgICAgICAgU2V0Vmlld05lZWRzRGlzcGxheShoaVZpZXcsIHJnbiwgdHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIERpc3Bvc2VSZ24ocmduKTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgW1tzZWxmIHdpbmRvd10g
c2V0Vmlld3NOZWVkRGlzcGxheTpZRVNdOwotICAgIH0KLX0KLQotc3RhdGljIE5TVmlldyAqX3dl
YmtpdF9OU1ZpZXdfbmV4dFZhbGlkS2V5VmlldyhpZCBzZWxmLCBTRUwgX2NtZCkKLXsKLSAgICBp
ZiAoW0hJVmlld0FkYXB0ZXIgZ2V0SElWaWV3Rm9yTlNWaWV3OnNlbGZdKQotICAgICAgICByZXR1
cm4gW1tzZWxmIHdpbmRvd10gY29udGVudFZpZXddOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJu
IG9sZE5TVmlld05leHRWYWxpZEtleVZpZXdJTVAoc2VsZiwgX2NtZCk7Ci19Ci0KLUBlbmQKLQot
c3RhdGljIHZvaWQgU2V0Vmlld05lZWRzRGlzcGxheShISVZpZXdSZWYgaW5ISVZpZXcsIFJnbkhh
bmRsZSBpblJlZ2lvbiwgQm9vbGVhbiBpbk5lZWRzRGlzcGxheSkKLXsKLSAgICBXaW5kb3dBdHRy
aWJ1dGVzIGF0dHJzOwotICAgIAotICAgIEdldFdpbmRvd0F0dHJpYnV0ZXMoR2V0Q29udHJvbE93
bmVyKGluSElWaWV3KSwgJmF0dHJzKTsKLSAgICAKLSAgICBpZiAoYXR0cnMgJiBrV2luZG93Q29t
cG9zaXRpbmdBdHRyaWJ1dGUpIHsKLSNpZiBXQVRDSF9JTlZBTElEQVRJT04KLSAgICAgICAgUmVj
dCBib3VuZHM7Ci0gICAgICAgIEdldFJlZ2lvbkJvdW5kcyhpblJlZ2lvbiwgJmJvdW5kcyk7Ci0g
ICAgICAgIHByaW50ZigiJXM6IHJlY3Qgb24gaW5wdXQgJWQgJWQgJWQgJWRcbiIsIGluTmVlZHNE
aXNwbGF5ID8gIklOVkFMSURBVEUiIDogIlZBTElEQVRFIiwKLSAgICAgICAgICAgICAgICBib3Vu
ZHMudG9wLCBib3VuZHMubGVmdCwgYm91bmRzLmJvdHRvbSwgYm91bmRzLnJpZ2h0KTsKLSNlbmRp
ZgotICAgICAgICBISVZpZXdTZXROZWVkc0Rpc3BsYXlJblJlZ2lvbihpbkhJVmlldywgaW5SZWdp
b24sIGluTmVlZHNEaXNwbGF5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWN0IGJvdW5kcywg
Y250bEJvdW5kczsKLSAgICAgICAgR3JhZlB0ciBwb3J0LCBzYXZlUG9ydDsKLSAgICAgICAgUmVj
dCBwb3J0Qm91bmRzOwotICAgICAgICAKLSNpZiBXQVRDSF9JTlZBTElEQVRJT04KLSAgICAgICAg
cHJpbnRmKCIlczogcmVjdCBvbiBpbnB1dCAlZCAlZCAlZCAlZFxuIiwgaW5OZWVkc0Rpc3BsYXkg
PyAiSU5WQUxJREFURSIgOiAiVkFMSURBVEUiLAotICAgICAgICAgICAgICAgIGJvdW5kcy50b3As
IGJvdW5kcy5sZWZ0LCBib3VuZHMuYm90dG9tLCBib3VuZHMucmlnaHQpOwotI2VuZGlmCi0gICAg
ICAgIEdldENvbnRyb2xCb3VuZHMoaW5ISVZpZXcsICZjbnRsQm91bmRzKTsKLSAgICAgICAgCi0j
aWYgV0FUQ0hfSU5WQUxJREFUSU9OCi0gICAgICAgIHByaW50ZigiJXM6IGNvbnRyb2wgYm91bmRz
IGFyZSAlZCAlZCAlZCAlZFxuIiwgaW5OZWVkc0Rpc3BsYXkgPyAiSU5WQUxJREFURSIgOiAiVkFM
SURBVEUiLAotICAgICAgICAgICAgICAgIGNudGxCb3VuZHMudG9wLCBjbnRsQm91bmRzLmxlZnQs
IGNudGxCb3VuZHMuYm90dG9tLCBjbnRsQm91bmRzLnJpZ2h0KTsKLSNlbmRpZgotICAgICAgICAK
LSAgICAgICAgcG9ydCA9IEdldFdpbmRvd1BvcnQoR2V0Q29udHJvbE93bmVyKGluSElWaWV3KSk7
Ci0gICAgICAgIAotICAgICAgICBHZXRQb3J0KCZzYXZlUG9ydCk7Ci0gICAgICAgIFNldFBvcnQo
cG9ydCk7Ci0gICAgICAgIEdldFBvcnRCb3VuZHMocG9ydCwgJnBvcnRCb3VuZHMpOwotICAgICAg
ICBTZXRPcmlnaW4oMCwgMCk7Ci0gICAgICAgIAotICAgICAgICBPZmZzZXRSZ24oaW5SZWdpb24s
IGNudGxCb3VuZHMubGVmdCwgY250bEJvdW5kcy50b3ApOwotICAgICAgICAKLSAgICAgICAgR2V0
UmVnaW9uQm91bmRzKGluUmVnaW9uLCAmYm91bmRzKTsKLSAgICAgICAgCi0jaWYgV0FUQ0hfSU5W
QUxJREFUSU9OCi0gICAgICAgIHByaW50ZigiJXM6IHJlY3QgaW4gcG9ydCBjb29yZHMgJWQgJWQg
JWQgJWRcbiIsIGluTmVlZHNEaXNwbGF5ID8gIklOVkFMSURBVEUiIDogIlZBTElEQVRFIiwKLSAg
ICAgICAgICAgICAgICBib3VuZHMudG9wLCBib3VuZHMubGVmdCwgYm91bmRzLmJvdHRvbSwgYm91
bmRzLnJpZ2h0KTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgaWYgKGluTmVlZHNEaXNwbGF5
KQotICAgICAgICAgICAgSW52YWxXaW5kb3dSZ24oR2V0Q29udHJvbE93bmVyKGluSElWaWV3KSwg
aW5SZWdpb24pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBWYWxpZFdpbmRvd1JnbihHZXRD
b250cm9sT3duZXIoaW5ISVZpZXcpLCBpblJlZ2lvbik7Ci0gICAgICAgIAotICAgICAgICBTZXRP
cmlnaW4ocG9ydEJvdW5kcy5sZWZ0LCBwb3J0Qm91bmRzLnRvcCk7Ci0gICAgICAgIFNldFBvcnQo
c2F2ZVBvcnQpOwotICAgIH0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DYXJib24vSElXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
YXJib24vSElXZWJWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2MTZjZTNk
YzY0NzRhYzk3YTlkMWIyYzUxMDkzNThiODQ0NGZhOTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJ
V2ViVmlldy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgX19ISVdl
YlZpZXdfXwotI2RlZmluZSBfX0hJV2ViVmlld19fCi0KLSNpZm5kZWYgX19MUDY0X18KLQotI2lu
Y2x1ZGUgPENhcmJvbi9DYXJib24uaD4KLQotI2luY2x1ZGUgPFdlYktpdExlZ2FjeS9XZWJLaXRB
dmFpbGFiaWxpdHkuaD4KLQotI2lmIFBSQUdNQV9PTkNFCi0jcHJhZ21hIG9uY2UKLSNlbmRpZgot
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpZmRlZiBfX09C
SkNfXwotQGNsYXNzIFdlYlZpZXc7Ci0jZW5kaWYKLQotLyoKLSAqICBISVdlYlZpZXdDcmVhdGUo
KQotICogIAotICogIFN1bW1hcnk6Ci0gKiAgICBDcmVhdGVzIGEgbmV3IHdlYiB2aWV3LgotICog
IAotICogIFBhcmFtZXRlcnM6Ci0gKiAgICAKLSAqICAgIG91dENvbnRyb2w6Ci0gKiAgICAgIFRo
ZSBuZXcgd2ViIHZpZXcuCi0gKiAgCi0gKiAgUmVzdWx0OgotICogICAgQW4gb3BlcmF0aW5nIHN5
c3RlbSBzdGF0dXMgY29kZS4KLSAqICAKLSAqICBBdmFpbGFiaWxpdHk6Ci0gKiAgICBNYWMgT1Mg
WDogICAgICAgICBpbiB2ZXJzaW9uIDEwLjIuNyBhbmQgbGF0ZXIgWzMyLWJpdCBvbmx5XQotICog
ICAgQ2FyYm9uTGliOiAgICAgICAgbm90IGF2YWlsYWJsZQotICogICAgTm9uLUNhcmJvbiBDRk06
ICAgbm90IGF2YWlsYWJsZQotICovCi1leHRlcm4gT1NTdGF0dXMgCi1ISVdlYlZpZXdDcmVhdGUo
SElWaWV3UmVmICogb3V0Q29udHJvbCkgQ0ZfREVQUkVDQVRFRF9NQUMoMTBfMywgMTBfNik7Ci0K
LSNpZmRlZiBfX09CSkNfXwotCi0vKgotICogIEhJV2ViVmlld0dldFdlYlZpZXcoKQotICogIAot
ICogIFN1bW1hcnk6Ci0gKiAgICBSZXR1cm5zIHRoZSBXZWJLaXQgV2ViVmlldyBmb3IgYSBnaXZl
biBISVdlYlZpZXcuCi0gKiAgCi0gKiAgUGFyYW1ldGVyczoKLSAqICAgIAotICogICAgaW5WaWV3
OgotICogICAgICBUaGUgdmlldyB0byBpbnNwZWN0LgotICogIAotICogIFJlc3VsdDoKLSAqICAg
IEEgcG9pbnRlciB0byBhIHdlYiB2aWV3IG9iamVjdCwgb3IgTlVMTC4KLSAqICAKLSAqICBBdmFp
bGFiaWxpdHk6Ci0gKiAgICBNYWMgT1MgWDogICAgICAgICBpbiB2ZXJzaW9uIDEwLjIuNyBhbmQg
bGF0ZXIgWzMyLWJpdCBvbmx5XQotICogICAgQ2FyYm9uTGliOiAgICAgICAgbm90IGF2YWlsYWJs
ZQotICogICAgTm9uLUNhcmJvbiBDRk06ICAgbm90IGF2YWlsYWJsZQotICovCi1leHRlcm4gV2Vi
VmlldyAqCi1ISVdlYlZpZXdHZXRXZWJWaWV3KEhJVmlld1JlZiBpblZpZXcpIENGX0RFUFJFQ0FU
RURfTUFDKDEwXzMsIDEwXzYpOwotCi0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0j
ZW5kaWYKLQotI2VuZGlmCi0jZW5kaWYgLyogX19ISVdlYlZpZXdfXyAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2FyYm9uL0hJV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NhcmJvbi9ISVdlYlZpZXcubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJiN2MwZjc2ODQ2NTYyOGVkZTdhYjY4N2U2NmRmMDliYmQ0NzlhYTcuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2FyYm9uL0hJV2ViVmlldy5tbQorKysgL2Rldi9udWxsCkBAIC0xLDE1NDQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgX19MUDY0X18KLQotI2ltcG9ydCAiSElXZWJWaWV3LmgiCi0KLSNpbXBvcnQgIkNh
cmJvbldpbmRvd0FkYXB0ZXIuaCIKLSNpbXBvcnQgIkhJVmlld0FkYXB0ZXIuaCIKLSNpbXBvcnQg
IldlYkhUTUxWaWV3SW50ZXJuYWwuaCIKLSNpbXBvcnQgIldlYktpdC5oIgotI2ltcG9ydCA8cGFs
L3NwaS9tYWMvTlNFdmVudFNQSS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNHcmFwaGljc1NQ
SS5oPgotI2ltcG9ydCA8cGFsL3NwaS9tYWMvUXVpY2tEcmF3U1BJLmg+Ci0jaW1wb3J0IDx3dGYv
QXNzZXJ0aW9ucy5oPgotI2ltcG9ydCA8d3RmL09iakNSdW50aW1lRXh0cmFzLmg+Ci0jaW1wb3J0
IDx3dGYvY2YvVHlwZUNhc3RzQ0YuaD4KLQotV1RGX0RFQ0xBUkVfQ0ZfVFlQRV9UUkFJVChDRlJ1
bkxvb3ApOwotCi1AaW50ZXJmYWNlIE5TV2luZG93IChBcHBLaXRTZWNyZXRzSElXZWJWaWV3S25v
d3MpCi0tICh2b2lkKV9yZW1vdmVXaW5kb3dSZWY7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgTlNWaWV3
IChBcHBLaXRTZWNyZXRzSElXZWJWaWV3S25vd3MpCi0tICh2b2lkKV9jbGVhckRpcnR5UmVjdHNG
b3JUcmVlOwotQGVuZAotCi1leHRlcm4gIkMiIHZvaWQgSElXZWJWaWV3UmVnaXN0ZXJDbGFzcygp
OwotCi1AaW50ZXJmYWNlIE1lbnVJdGVtUHJveHkgOiBOU09iamVjdCA8TlNWYWxpZGF0ZWRVc2Vy
SW50ZXJmYWNlSXRlbT4KLXsKLSAgICBpbnQgICAgIF90YWc7Ci0gICAgU0VMIF9hY3Rpb247Ci19
Ci0KLS0gKGlkKWluaXRXaXRoQWN0aW9uOihTRUwpYWN0aW9uOwotLSAoU0VMKWFjdGlvbjsKLS0g
KGludCl0YWc7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIE1lbnVJdGVtUHJveHkKLQotLSAo
aWQpaW5pdFdpdGhBY3Rpb246KFNFTClhY3Rpb24KLXsKLSAgICBbc3VwZXIgaW5pdF07Ci0gICAg
aWYgKHNlbGYgPT0gbmlsKSByZXR1cm4gbmlsOwotCi0gICAgX2FjdGlvbiA9IGFjdGlvbjsKLQot
ICAgIHJldHVybiBzZWxmOwotfQotCi0tIChTRUwpYWN0aW9uCi17Ci0gICAgICAgcmV0dXJuIF9h
Y3Rpb247Ci19Ci0KLS0gKGludCl0YWcgCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUBlbmQKLQot
QGludGVyZmFjZSBOU1dpbmRvd0dyYXBoaWNzQ29udGV4dCAoSElXZWJWaWV3KQotLSAodm9pZClf
d2ViX3NldEdyYXBoaWNzUG9ydDooQ0dDb250ZXh0UmVmKWNvbnRleHQ7Ci1AZW5kCi0KLUBpbXBs
ZW1lbnRhdGlvbiBOU1dpbmRvd0dyYXBoaWNzQ29udGV4dCAoSElXZWJWaWV3KQotCi0tICh2b2lk
KV93ZWJfc2V0R3JhcGhpY3NQb3J0OihDR0NvbnRleHRSZWYpY29udGV4dAotewotICAgIENHQ29u
dGV4dFJldGFpbihjb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZWxlYXNlKF9jZ3NDb250ZXh0KTsK
LSAgICBfY2dzQ29udGV4dCA9IGNvbnRleHQ7Ci19Ci0KLUBlbmQKLQotc3RydWN0IEhJV2ViVmll
dwotewotICAgIEhJVmlld1JlZiBmVmlld1JlZjsKLQotICAgIFdlYlZpZXcqIGZXZWJWaWV3Owot
ICAgIE5TVmlldyogZkZpcnN0UmVzcG9uZGVyOwotICAgIENhcmJvbldpbmRvd0FkYXB0ZXIqIGZL
aXRXaW5kb3c7Ci0gICAgYm9vbCBmSXNDb21wb3NpdGVkOwotICAgIENGUnVuTG9vcE9ic2VydmVy
UmVmIGZVcGRhdGVPYnNlcnZlcjsKLX07Ci10eXBlZGVmIHN0cnVjdCBISVdlYlZpZXcgSElXZWJW
aWV3OwotCi1zdGF0aWMgY29uc3QgT1NUeXBlIE5TQXBwS2l0UHJvcGVydHlDcmVhdG9yID0gJ2Fr
aXQnOwotLyoKLVRoZXNlIGNvbnN0YW50cyBhcmUgbm90IHVzZWQuIENvbW1lbnRlZCBvdXQgdG8g
bWFrZSB0aGUgY29tcGlsZXIgaGFwcHkuCi1zdGF0aWMgY29uc3QgT1NUeXBlIE5TVmlld0NhcmJv
bkNvbnRyb2xWaWV3UHJvcGVydHlUYWcgPSAndmlldyc7Ci1zdGF0aWMgY29uc3QgT1NUeXBlIE5T
Vmlld0NhcmJvbkNvbnRyb2xBdXRvZGlzcGxheVByb3BlcnR5VGFnID0gJ2F1dGQnOwotc3RhdGlj
IGNvbnN0IE9TVHlwZSBOU1ZpZXdDYXJib25Db250cm9sRmlyc3RSZXNwb25kZXJWaWV3UHJvcGVy
dHlUYWcgPSAnZnJ2dyc7Ci0qLwotc3RhdGljIGNvbnN0IE9TVHlwZSBOU0NhcmJvbldpbmRvd1By
b3BlcnR5VGFnID0gJ3dpbiAnOwotCi0KLXN0YXRpYyBTRUwgX05TU2VsZWN0b3JGb3JISUNvbW1h
bmQoY29uc3QgSElDb21tYW5kKik7Ci0KLXN0YXRpYyBjb25zdCBFdmVudFR5cGVTcGVjIGtFdmVu
dHNbXSA9IHsgCi0gICAgeyBrRXZlbnRDbGFzc0hJT2JqZWN0LCBrRXZlbnRISU9iamVjdENvbnN0
cnVjdCB9LAotICAgIHsga0V2ZW50Q2xhc3NISU9iamVjdCwga0V2ZW50SElPYmplY3REZXN0cnVj
dCB9LAotICAgIAotICAgIHsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VVcCB9LAotICAg
IHsga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VNb3ZlZCB9LAotICAgIHsga0V2ZW50Q2xh
c3NNb3VzZSwga0V2ZW50TW91c2VEcmFnZ2VkIH0sCi0gICAgeyBrRXZlbnRDbGFzc01vdXNlLCBr
RXZlbnRNb3VzZVdoZWVsTW92ZWQgfSwKLQotICAgIHsga0V2ZW50Q2xhc3NLZXlib2FyZCwga0V2
ZW50UmF3S2V5RG93biB9LAotICAgIHsga0V2ZW50Q2xhc3NLZXlib2FyZCwga0V2ZW50UmF3S2V5
UmVwZWF0IH0sCi0KLSAgICB7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFByb2Nl
c3MgfSwKLSAgICB7IGtFdmVudENsYXNzQ29tbWFuZCwga0V2ZW50Q29tbWFuZFVwZGF0ZVN0YXR1
cyB9LAotCi0gICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xJbml0aWFsaXpl
IH0sCi0gICAgeyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xEcmF3IH0sCi0gICAg
eyBrRXZlbnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xIaXRUZXN0IH0sCi0gICAgeyBrRXZl
bnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXRQYXJ0UmVnaW9uIH0sCi0gICAgeyBrRXZl
bnRDbGFzc0NvbnRyb2wsIGtFdmVudENvbnRyb2xHZXREYXRhIH0sCi0gICAgeyBrRXZlbnRDbGFz
c0NvbnRyb2wsIGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkIH0sCi0gICAgeyBrRXZlbnRDbGFz
c0NvbnRyb2wsIGtFdmVudENvbnRyb2xBY3RpdmF0ZSB9LAotICAgIHsga0V2ZW50Q2xhc3NDb250
cm9sLCBrRXZlbnRDb250cm9sRGVhY3RpdmF0ZSB9LAotICAgIHsga0V2ZW50Q2xhc3NDb250cm9s
LCBrRXZlbnRDb250cm9sT3duaW5nV2luZG93Q2hhbmdlZCB9LAotICAgIHsga0V2ZW50Q2xhc3ND
b250cm9sLCBrRXZlbnRDb250cm9sQ2xpY2sgfSwKLSAgICB7IGtFdmVudENsYXNzQ29udHJvbCwg
a0V2ZW50Q29udHJvbENvbnRleHR1YWxNZW51Q2xpY2sgfSwKLSAgICB7IGtFdmVudENsYXNzQ29u
dHJvbCwga0V2ZW50Q29udHJvbFNldEZvY3VzUGFydCB9Ci19OwotCi0jZGVmaW5lIGtISVZpZXdC
YXNlQ2xhc3NJRCBDRlNUUigiY29tLmFwcGxlLmhpdmlldyIpCi0jZGVmaW5lIGtISVdlYlZpZXdD
bGFzc0lEIENGU1RSKCJjb20uYXBwbGUuSElXZWJWaWV3IikKLQotc3RhdGljIEhJV2ViVmlldyog
SElXZWJWaWV3Q29uc3RydWN0b3IoSElWaWV3UmVmIGluVmlldyk7Ci1zdGF0aWMgdm9pZCBISVdl
YlZpZXdEZXN0cnVjdG9yKEhJV2ViVmlldyopOwotCi1zdGF0aWMgT1NTdGF0dXMgSElXZWJWaWV3
RXZlbnRIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVudFJlZiBpbkV2
ZW50LCB2b2lkICppblVzZXJEYXRhKTsKLQotc3RhdGljIFVJbnQzMiBHZXRCZWhhdmlvcnMoKTsK
LXN0YXRpYyBDb250cm9sS2luZCBHZXRLaW5kKCk7Ci1zdGF0aWMgdm9pZCBEcmF3KEhJV2ViVmll
dyogaW5WaWV3LCBSZ25IYW5kbGUgbGltaXRSZ24sIENHQ29udGV4dFJlZiBpbkNvbnRleHQpOwot
c3RhdGljIENvbnRyb2xQYXJ0Q29kZSBIaXRUZXN0KEhJV2ViVmlldyosIGNvbnN0IEhJUG9pbnQq
IHdoZXJlKTsKLXN0YXRpYyBPU1N0YXR1cyBHZXRSZWdpb24oSElXZWJWaWV3KiwgQ29udHJvbFBh
cnRDb2RlIGluUGFydCwgUmduSGFuZGxlIG91dFJnbik7Ci1zdGF0aWMgdm9pZCBCb3VuZHNDaGFu
Z2VkKEhJV2ViVmlldyogaW5WaWV3LCBVSW50MzIgaW5PcHRpb25zLCBjb25zdCBISVJlY3QqIGlu
T3JpZ2luYWxCb3VuZHMsIGNvbnN0IEhJUmVjdCogaW5DdXJyZW50Qm91bmRzKTsKLXN0YXRpYyB2
b2lkIE93bmluZ1dpbmRvd0NoYW5nZWQoSElXZWJWaWV3KiwgV2luZG93UmVmIG9sZFdpbmRvdywg
V2luZG93UmVmIG5ld1dpbmRvdyk7Ci1zdGF0aWMgdm9pZCBBY3RpdmVTdGF0ZUNoYW5nZWQoSElX
ZWJWaWV3Kik7Ci0KLXN0YXRpYyBPU1N0YXR1cyBDbGljayhISVdlYlZpZXcqIGluVmlldywgRXZl
bnRSZWYgaW5FdmVudCk7Ci1zdGF0aWMgT1NTdGF0dXMgQ29udGV4dE1lbnVDbGljayhISVdlYlZp
ZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7Ci1zdGF0aWMgT1NTdGF0dXMgTW91c2VVcChI
SVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7Ci1zdGF0aWMgT1NTdGF0dXMgTW91
c2VNb3ZlZChISVdlYlZpZXcqIGluVmlldywgRXZlbnRSZWYgaW5FdmVudCk7Ci1zdGF0aWMgT1NT
dGF0dXMgTW91c2VEcmFnZ2VkKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50KTsK
LXN0YXRpYyBPU1N0YXR1cyBNb3VzZVdoZWVsTW92ZWQoSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50
UmVmIGluRXZlbnQpOwotCi1zdGF0aWMgT1NTdGF0dXMgUHJvY2Vzc0NvbW1hbmQoSElXZWJWaWV3
KiBpblZpZXcsIGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5kKTsKLXN0YXRpYyBPU1N0YXR1cyBV
cGRhdGVDb21tYW5kU3RhdHVzKEhJV2ViVmlldyogaW5WaWV3LCBjb25zdCBISUNvbW1hbmQqIGlu
Q29tbWFuZCk7Ci0KLXN0YXRpYyBPU1N0YXR1cyBTZXRGb2N1c1BhcnQoSElXZWJWaWV3KiwgQ29u
dHJvbFBhcnRDb2RlIGRlc2lyZWRGb2N1cywgUmduSGFuZGxlIGludmFsaWRSZ24sIEJvb2xlYW4g
Zm9jdXNFdmVyeXRoaW5nLCBDb250cm9sUGFydENvZGUqIGFjdHVhbEZvY3VzKTsKLXN0YXRpYyBO
U1ZpZXcqIEFkdmFuY2VGb2N1cyhISVdlYlZpZXcqLCBib29sIGZvcndhcmQpOwotc3RhdGljIHZv
aWQgUmVsaW5xdWlzaEZvY3VzKEhJV2ViVmlldyosIGJvb2wgaW5BdXRvZGlzcGxheSk7Ci0KLXN0
YXRpYyBXaW5kb3dSZWYgR2V0V2luZG93UmVmKEhJV2ViVmlldyogaW5WaWV3KTsKLXN0YXRpYyB2
b2lkIFN5bmNGcmFtZShISVdlYlZpZXcqIGluVmlldyk7Ci0KLXN0YXRpYyBPU1N0YXR1cyBXaW5k
b3dIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVudFJlZiBpbkV2ZW50
LCB2b2lkKiBpblVzZXJEYXRhKTsKLQotc3RhdGljIHZvaWQgU3RhcnRVcGRhdGVPYnNlcnZlcihI
SVdlYlZpZXcqKTsKLXN0YXRpYyB2b2lkIFN0b3BVcGRhdGVPYnNlcnZlcihISVdlYlZpZXcqKTsK
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBISVdlYlZpZXdDcmVhdGUKLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLU9TU3RhdHVzIEhJV2ViVmlld0NyZWF0ZShISVZp
ZXdSZWYqIG91dENvbnRyb2wpCi17Ci0gICAgSElXZWJWaWV3UmVnaXN0ZXJDbGFzcygpOwotICAg
IHJldHVybiBISU9iamVjdENyZWF0ZShrSElXZWJWaWV3Q2xhc3NJRCwgbnVsbHB0ciwgKEhJT2Jq
ZWN0UmVmKilvdXRDb250cm9sKTsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
LyBISVdlYlZpZXdHZXRXZWJWaWV3Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1X
ZWJWaWV3KiBISVdlYlZpZXdHZXRXZWJWaWV3KEhJVmlld1JlZiBpblZpZXcpCi17Ci0gICAgSElX
ZWJWaWV3KiB2aWV3ID0gKEhJV2ViVmlldyopSElPYmplY3REeW5hbWljQ2FzdCgoSElPYmplY3RS
ZWYpaW5WaWV3LCBrSElXZWJWaWV3Q2xhc3NJRCk7Ci0gICAgV2ViVmlldyogcmVzdWx0ID0gbnVs
bHB0cjsKLQotICAgIGlmICh2aWV3KQotICAgICAgICByZXN1bHQgPSB2aWV3LT5mV2ViVmlldzsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gSElXZWJWaWV3Q29uc3RydWN0b3IKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8K
LQotc3RhdGljIEhJV2ViVmlldyogSElXZWJWaWV3Q29uc3RydWN0b3IoSElWaWV3UmVmIGluVmll
dykKLXsKLSAgICBISVdlYlZpZXcqIHZpZXcgPSAoSElXZWJWaWV3KiltYWxsb2Moc2l6ZW9mKEhJ
V2ViVmlldykpOwotCi0gICAgaWYgKHZpZXcpIHsKLSAgICAgICAgTlNSZWN0IGZyYW1lID0geyB7
IDAsIDAgfSwgeyA0MDAsIDQwMCAgfSB9OwotCi0gICAgICAgIHZpZXctPmZWaWV3UmVmID0gaW5W
aWV3OwotCi0gICAgICAgIFdlYlZpZXcgKndlYlZpZXcgPSBbW1dlYlZpZXcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6IGZyYW1lXTsKLSAgICAgICAgQ0ZSZXRhaW4od2ViVmlldyk7Ci0gICAgICAgIFt3
ZWJWaWV3IHJlbGVhc2VdOwotICAgICAgICB2aWV3LT5mV2ViVmlldyA9IHdlYlZpZXc7Ci0gICAg
ICAgIFtISVZpZXdBZGFwdGVyIGJpbmRISVZpZXdUb05TVmlldzppblZpZXcgbnNWaWV3OnZpZXct
PmZXZWJWaWV3XTsKLQotICAgICAgICB2aWV3LT5mRmlyc3RSZXNwb25kZXIgPSBudWxscHRyOwot
ICAgICAgICB2aWV3LT5mS2l0V2luZG93ID0gbnVsbHB0cjsKLSAgICAgICAgdmlldy0+ZklzQ29t
cG9zaXRlZCA9IGZhbHNlOwotICAgICAgICB2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIgPSBudWxscHRy
OwotICAgIH0KLQotICAgIHJldHVybiB2aWV3OwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIEhJV2ViVmlld0Rlc3RydWN0b3IKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotLy8KLXN0YXRpYyB2b2lkIEhJV2ViVmlld0Rlc3RydWN0b3IoSElXZWJWaWV3KiBpblZpZXcp
Ci17Ci0gICAgW0hJVmlld0FkYXB0ZXIgdW5iaW5kTlNWaWV3OmluVmlldy0+ZldlYlZpZXddOwot
ICAgIENGUmVsZWFzZShpblZpZXctPmZXZWJWaWV3KTsKLQotICAgIGZyZWUoaW5WaWV3KTsKLX0K
LQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBISVdlYlZpZXdSZWdpc3RlckNsYXNz
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi12b2lkIEhJV2ViVmlld1JlZ2lzdGVy
Q2xhc3MoKQotewotICAgIHN0YXRpYyBib29sIHNSZWdpc3RlcmVkOwotCi0gICAgaWYgKCFzUmVn
aXN0ZXJlZCkgewotICAgICAgICBISU9iamVjdFJlZ2lzdGVyU3ViY2xhc3Moa0hJV2ViVmlld0Ns
YXNzSUQsIGtISVZpZXdCYXNlQ2xhc3NJRCwgMCwgSElXZWJWaWV3RXZlbnRIYW5kbGVyLAotICAg
ICAgICAgICAgR2V0RXZlbnRUeXBlQ291bnQoa0V2ZW50cyksIGtFdmVudHMsIDAsIG51bGxwdHIp
OwotICAgICAgICBzUmVnaXN0ZXJlZCA9IHRydWU7Ci0gICAgfQotfQotCi0vLy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLS8vIEdldEJlaGF2aW9ycwotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0vLwotc3RhdGljIFVJbnQzMiBHZXRCZWhhdmlvcnMoKQotewotICAgIHJldHVybiBrQ29u
dHJvbFN1cHBvcnRzRGF0YUFjY2VzcyB8IGtDb250cm9sU3VwcG9ydHNHZXRSZWdpb24gfCBrQ29u
dHJvbEdldHNGb2N1c09uQ2xpY2s7Ci19Ci0KLXN0YXRpYyBDR0NvbnRleHRSZWYgb3ZlcnJpZGVD
R0NvbnRleHQoTlNXaW5kb3cgKndpbmRvdywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBOU1dpbmRvd0dyYXBoaWNz
Q29udGV4dCAqZ3JhcGhpY3NDb250ZXh0ID0gKE5TV2luZG93R3JhcGhpY3NDb250ZXh0ICopd2lu
ZG93LmdyYXBoaWNzQ29udGV4dDsKLSAgICBDR0NvbnRleHRSZWYgc2F2ZWRDb250ZXh0ID0gKENH
Q29udGV4dFJlZilncmFwaGljc0NvbnRleHQuZ3JhcGhpY3NQb3J0OwotICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0VORAotICAgIENHQ29udGV4dFJldGFpbihzYXZlZENvbnRleHQp
OwotICAgIFtncmFwaGljc0NvbnRleHQgX3dlYl9zZXRHcmFwaGljc1BvcnQ6Y29udGV4dF07Ci0g
ICAgcmV0dXJuIHNhdmVkQ29udGV4dDsKLX0KLQotc3RhdGljIHZvaWQgcmVzdG9yZUNHQ29udGV4
dChOU1dpbmRvdyAqd2luZG93LCBDR0NvbnRleHRSZWYgc2F2ZWRDb250ZXh0KQotewotICAgIEFM
TE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgTlNXaW5kb3dHcmFwaGljc0Nv
bnRleHQgKmdyYXBoaWNzQ29udGV4dCA9IChOU1dpbmRvd0dyYXBoaWNzQ29udGV4dCAqKXdpbmRv
dy5ncmFwaGljc0NvbnRleHQ7Ci0gICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5E
Ci0gICAgW2dyYXBoaWNzQ29udGV4dCBfd2ViX3NldEdyYXBoaWNzUG9ydDpzYXZlZENvbnRleHRd
OwotICAgIENHQ29udGV4dFJlbGVhc2Uoc2F2ZWRDb250ZXh0KTsKLX0KLQotLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0vLyBEcmF3Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
Ci1zdGF0aWMgdm9pZCBEcmF3KEhJV2ViVmlldyogaW5WaWV3LCBSZ25IYW5kbGUgbGltaXRSZ24s
IENHQ29udGV4dFJlZiBpbkNvbnRleHQpCi17Ci0gICAgSElSZWN0IGJvdW5kczsKLSAgICBSZWN0
IGRyYXdSZWN0OwotICAgIEhJUmVjdCBoaVJlY3Q7Ci0gICAgYm9vbCBjcmVhdGVkQ29udGV4dCA9
IGZhbHNlOwotCi0gICAgaWYgKCFpblZpZXctPmZJc0NvbXBvc2l0ZWQpIHsKLSAgICAgICAgR3Jh
ZlB0ciBwb3J0OwotICAgICAgICBSZWN0IHBvcnRSZWN0OwotCi0gICAgICAgIEFMTE9XX0RFUFJF
Q0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgIEdldFBvcnQoJnBvcnQpOwotICAgICAg
ICBHZXRQb3J0Qm91bmRzKHBvcnQsICZwb3J0UmVjdCk7Ci0gICAgICAgIENyZWF0ZUNHQ29udGV4
dEZvclBvcnQocG9ydCwgJmluQ29udGV4dCk7Ci0gICAgICAgIFN5bmNDR0NvbnRleHRPcmlnaW5X
aXRoUG9ydChpbkNvbnRleHQsIHBvcnQpOwotICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
aW5Db250ZXh0LCAwLCAocG9ydFJlY3QuYm90dG9tIC0gcG9ydFJlY3QudG9wKSk7Ci0gICAgICAg
IENHQ29udGV4dFNjYWxlQ1RNKGluQ29udGV4dCwgMSwgLTEpOwotICAgICAgICBjcmVhdGVkQ29u
dGV4dCA9IHRydWU7Ci0gICAgfQotCi0gICAgSElWaWV3R2V0Qm91bmRzKGluVmlldy0+ZlZpZXdS
ZWYsICZib3VuZHMpOwotCi0gICAgQ0dDb250ZXh0UmVmIHNhdmVkQ29udGV4dCA9IG92ZXJyaWRl
Q0dDb250ZXh0KGluVmlldy0+ZktpdFdpbmRvdywgaW5Db250ZXh0KTsKLSAgICBbTlNHcmFwaGlj
c0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6W2luVmlldy0+ZktpdFdpbmRvdyBncmFwaGljc0Nv
bnRleHRdXTsKLQotICAgIEdldFJlZ2lvbkJvdW5kcyhsaW1pdFJnbiwgJmRyYXdSZWN0KTsKLQot
ICAgIGlmICghaW5WaWV3LT5mSXNDb21wb3NpdGVkKQotICAgICAgICBPZmZzZXRSZWN0KCZkcmF3
UmVjdCwgKFNJbnQxNiktYm91bmRzLm9yaWdpbi54LCAoU0ludDE2KS1ib3VuZHMub3JpZ2luLnkp
OwotICAgIAotICAgIGhpUmVjdC5vcmlnaW4ueCA9IGRyYXdSZWN0LmxlZnQ7Ci0gICAgaGlSZWN0
Lm9yaWdpbi55ID0gYm91bmRzLnNpemUuaGVpZ2h0IC0gZHJhd1JlY3QuYm90dG9tOyAvLyBmbGlw
IHkKLSAgICBoaVJlY3Quc2l6ZS53aWR0aCA9IGRyYXdSZWN0LnJpZ2h0IC0gZHJhd1JlY3QubGVm
dDsKLSAgICBoaVJlY3Quc2l6ZS5oZWlnaHQgPSBkcmF3UmVjdC5ib3R0b20gLSBkcmF3UmVjdC50
b3A7Ci0KLS8vICAgIHByaW50ZigiRHJhd2luZzogZHJhd1JlY3QgaXMgKCVnICVnKSAoJWcgJWcp
XG4iLCBoaVJlY3Qub3JpZ2luLngsIGhpUmVjdC5vcmlnaW4ueSwKLS8vICAgICAgICAgICAgaGlS
ZWN0LnNpemUud2lkdGgsIGhpUmVjdC5zaXplLmhlaWdodCk7Ci0KLSAgICAvLyBGSVhNRTogV2Ug
bmVlZCB0byBkbyBsYXlvdXQgYmVmb3JlIENhcmJvbiBoYXMgZGVjaWRlZCB3aGF0IHJlZ2lvbiBu
ZWVkcyBkcmF3bi4KLSAgICAvLyBJbiBDb2NvYSB3ZSBtYWtlIHN1cmUgdG8gZG8gbGF5b3V0IGFu
ZCBpbnZhbGlkYXRlIGFueSBuZXcgcmVnaW9ucyBiZWZvcmUgZHJhdywgc28gZXZlcnl0aGluZwot
ICAgIC8vIGNhbiBiZSBkcmF3biBpbiBvbmUgcGFzcy4gRG9pbmcgYSBsYXlvdXQgaGVyZSB3aWxs
IGNhdXNlIG5ldyByZWdpb25zIHRvIGJlIGludmFsaWRhdGVkLCBidXQgdGhleQotICAgIC8vIHdp
bGwgbm90IGFsbCBiZSBkcmF3biBpbiB0aGlzIHBhc3Mgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIGEg
Zml4ZWQgcmVjdCB3ZSBhcmUgZ29pbmcgdG8gZGlzcGxheS4KLQotICAgIE5TVmlldyA8V2ViRG9j
dW1lbnRWaWV3PiAqZG9jdW1lbnRWaWV3ID0gW1tbaW5WaWV3LT5mV2ViVmlldyBtYWluRnJhbWVd
IGZyYW1lVmlld10gZG9jdW1lbnRWaWV3XTsKLSAgICBpZiAoW2RvY3VtZW50VmlldyBpc0tpbmRP
ZkNsYXNzOltXZWJIVE1MVmlldyBjbGFzc11dKQotICAgICAgICBbKFdlYkhUTUxWaWV3ICopZG9j
dW1lbnRWaWV3IF93ZWJfdXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZV07Ci0K
LSAgICBpZiAoaW5WaWV3LT5mSXNDb21wb3NpdGVkKQotICAgICAgICBbaW5WaWV3LT5mV2ViVmll
dyBkaXNwbGF5SWZOZWVkZWRJblJlY3Q6ICooTlNSZWN0KikmaGlSZWN0XTsKLSAgICBlbHNlCi0g
ICAgICAgIFtpblZpZXctPmZXZWJWaWV3IGRpc3BsYXlSZWN0OiooTlNSZWN0KikmaGlSZWN0XTsK
LQotICAgIHJlc3RvcmVDR0NvbnRleHQoaW5WaWV3LT5mS2l0V2luZG93LCBzYXZlZENvbnRleHQp
OwotCi0gICAgaWYgKCFpblZpZXctPmZJc0NvbXBvc2l0ZWQpCi0gICAgewotICAgICAgICBISVZp
ZXdSZWYgICAgICB2aWV3OwotICAgICAgICBISVZpZXdGaW5kQnlJRChISVZpZXdHZXRSb290KEdl
dENvbnRyb2xPd25lcihpblZpZXctPmZWaWV3UmVmKSksIGtISVZpZXdXaW5kb3dHcm93Qm94SUQs
ICZ2aWV3KTsKLSAgICAgICAgaWYgKHZpZXcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEhJUmVj
dCBmcmFtZTsKLQotICAgICAgICAgICAgSElWaWV3R2V0Qm91bmRzKHZpZXcsICZmcmFtZSk7Ci0g
ICAgICAgICAgICBISVZpZXdDb252ZXJ0UmVjdCgmZnJhbWUsIHZpZXcsIG51bGxwdHIpOwotCi0g
ICAgICAgICAgICBoaVJlY3Qub3JpZ2luLnggPSBkcmF3UmVjdC5sZWZ0OwotICAgICAgICAgICAg
aGlSZWN0Lm9yaWdpbi55ID0gZHJhd1JlY3QudG9wOwotICAgICAgICAgICAgaGlSZWN0LnNpemUu
d2lkdGggPSBkcmF3UmVjdC5yaWdodCAtIGRyYXdSZWN0LmxlZnQ7Ci0gICAgICAgICAgICBoaVJl
Y3Quc2l6ZS5oZWlnaHQgPSBkcmF3UmVjdC5ib3R0b20gLSBkcmF3UmVjdC50b3A7Ci0KLSAgICAg
ICAgICAgIEhJVmlld0NvbnZlcnRSZWN0KCZoaVJlY3QsIGluVmlldy0+ZlZpZXdSZWYsIG51bGxw
dHIpOwotCi0gICAgICAgICAgICBpZiAoQ0dSZWN0SW50ZXJzZWN0c1JlY3QoZnJhbWUsIGhpUmVj
dCkpCi0gICAgICAgICAgICAgICAgSElWaWV3U2V0TmVlZHNEaXNwbGF5KHZpZXcsIHRydWUpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNyZWF0ZWRDb250ZXh0KQotICAgIHsKLSAgICAg
ICAgQ0dDb250ZXh0U3luY2hyb25pemUoaW5Db250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0UmVs
ZWFzZShpbkNvbnRleHQpOwotICAgIH0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0vLyBIaXRUZXN0Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgQ29u
dHJvbFBhcnRDb2RlIEhpdFRlc3QoSElXZWJWaWV3KiB2aWV3LCBjb25zdCBISVBvaW50KiB3aGVy
ZSkKLXsKLSAgICBISVJlY3QgYm91bmRzOwotCi0gICAgSElWaWV3R2V0Qm91bmRzKHZpZXctPmZW
aWV3UmVmLCAmYm91bmRzKTsKLQotICAgIGlmIChDR1JlY3RDb250YWluc1BvaW50KGJvdW5kcywg
KndoZXJlKSkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0dXJuIGtDb250cm9sTm9QYXJ0Owot
fQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEdldFJlZ2lvbgotLy8tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotc3RhdGljIE9TU3RhdHVzIEdldFJlZ2lvbihISVdlYlZp
ZXcqIGluVmlldywgQ29udHJvbFBhcnRDb2RlIGluUGFydCwgUmduSGFuZGxlIG91dFJnbikKLXsK
LSAgICBPU1N0YXR1cyBlcnIgPSBldmVudE5vdEhhbmRsZWRFcnI7Ci0KLSAgICBpZiAoaW5QYXJ0
ID09IC0zICYmIFtpblZpZXctPmZXZWJWaWV3IGlzT3BhcXVlXSkgewotICAgICAgICAvLyBrQ29u
dHJvbE9wYXF1ZU1ldGFQYXJ0OgotICAgICAgICBISVJlY3QgYm91bmRzOwotICAgICAgICBSZWN0
IHRlbXA7Ci0KLSAgICAgICAgSElWaWV3R2V0Qm91bmRzKGluVmlldy0+ZlZpZXdSZWYsICZib3Vu
ZHMpOwotCi0gICAgICAgIHRlbXAudG9wID0gKFNJbnQxNilib3VuZHMub3JpZ2luLnk7Ci0gICAg
ICAgIHRlbXAubGVmdCA9IChTSW50MTYpYm91bmRzLm9yaWdpbi54OwotICAgICAgICB0ZW1wLmJv
dHRvbSA9IChTSW50MTYpQ0dSZWN0R2V0TWF4WShib3VuZHMpOwotICAgICAgICB0ZW1wLnJpZ2h0
ID0gKFNJbnQxNilDR1JlY3RHZXRNYXhYKGJvdW5kcyk7Ci0KLSAgICAgICAgUmVjdFJnbihvdXRS
Z24sICZ0ZW1wKTsKLSAgICAgICAgZXJyID0gbm9FcnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVy
cjsKLX0KLQotc3RhdGljIFdpbmRvd1JlZiBHZXRXaW5kb3dSZWYoSElXZWJWaWV3KiBpblZpZXcp
Ci17Ci0gICAgcmV0dXJuIEdldENvbnRyb2xPd25lcihpblZpZXctPmZWaWV3UmVmKTsKLX0KLQot
c3RhdGljIE5TRXZlbnQgKkNyZWF0ZU5TRXZlbnRBZG9wdGluZ0NHRXZlbnQoQ0dFdmVudFJlZiBj
Z0V2ZW50LCBFdmVudFJlZiBldmVudFJlZikKLXsKLSAgICBOU0V2ZW50ICpyZXN1bHQgPSBbW05T
RXZlbnQgYWxsb2NdIF9pbml0V2l0aENHRXZlbnQ6Y2dFdmVudCBldmVudFJlZjpldmVudFJlZl07
Ci0gICAgQ0ZSZWxlYXNlKGNnRXZlbnQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRp
YyBCb29sZWFuCi1Db3B5RXZlbnRDR0V2ZW50KEV2ZW50UmVmIGV2ZW50LCBDR0V2ZW50UmVmKiBj
Z0V2ZW50KQotewotICAgIGlmICgoKmNnRXZlbnQgPSBDb3B5RXZlbnRDR0V2ZW50KGV2ZW50KSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhpcyBldmVudCBtaWdodCBub3QgaGF2
ZSBiZWVuIGNyZWF0ZWQgZGlyZWN0bHkgZnJvbSBhIENHUyBldmVudCwgYW5kIG1pZ2h0IG5vdAot
ICAgIC8vIGhhdmUgYSBDR0V2ZW50UmVmIGFzc29jaWF0ZWQgd2l0aCBpdC4gSW4gdGhhdCBjYXNl
LCB0cnkgdXNpbmcgdGhlIGV2ZW50IG1vc3QKLSAgICAvLyByZWNlbnRseSBkaXNwYXRjaGVkIGJ5
IHRoZSBldmVudCBkaXNwYXRjaGVyLCB3aGljaCBpcyBsaWtlbHkgdG8gYmUgdGhlIG9yaWdpbmFs
Ci0gICAgLy8gdXNlci1pbnB1dCBldmVudCBjb250YWluaW5nIGEgQ0dFdmVudFJlZi4KLSAgICBl
dmVudCA9IEdldEN1cnJlbnRFdmVudCgpOwotICAgIGlmIChldmVudCAmJiAoKmNnRXZlbnQgPSBD
b3B5RXZlbnRDR0V2ZW50KGV2ZW50KSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotc3RhdGljIE5TRXZlbnQgKkNyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uQ2xp
Y2tFdmVudChFdmVudFJlZiBpbkV2ZW50LCBXaW5kb3dSZWYgd2luZG93UmVmKQotewotICAgIEV2
ZW50UmVmIG5ld0V2ZW50OwotICAgIFBvaW50IHdoZXJlOwotICAgIE9TU3RhdHVzIGVycjsKLSAg
ICBVSW50MzIgbW9kaWZpZXJzOwotICAgIFJlY3Qgd2luZFJlY3Q7Ci0KLSAgICBDR0V2ZW50UmVm
IGNnRXZlbnQgPSBudWxscHRyOwotICAgIGlmICghQ29weUV2ZW50Q0dFdmVudChpbkV2ZW50LCAm
Y2dFdmVudCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIG1ha2Ug
dGhlIGV2ZW50IGJlIGEga0V2ZW50TW91c2VEb3duIGV2ZW50LCBvciB0aGUgd2Via2l0IG1pZ2h0
IHRyaXAgdXAgd2hlbgotICAgIC8vIHdlIGNsaWNrIG9uIGEgTmV0c2NhcGUgcGx1Z2luLiBJdCBj
YWxscyBDb252ZXJ0RXZlbnRSZWZUb0V2ZW50UmVjb3JkLCBhc3N1bWluZwotICAgIC8vIHRoYXQg
bW91c2VEb3duIHdhcyBwYXNzZWQgYW4gZXZlbnQgd2l0aCBhIHJlYWwgbW91c2UgZG93biBldmVu
dFJlZi4gV2UganVzdCBuZWVkIGEKLSAgICAvLyBtaW5pbWFsIG9uZSBoZXJlLgotCi0gICAgZXJy
ID0gQ3JlYXRlRXZlbnQobnVsbHB0ciwga0V2ZW50Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VEb3du
LCBHZXRFdmVudFRpbWUoaW5FdmVudCksIDAsICZuZXdFdmVudCk7Ci0gICAgaWYgKGVyciAhPSBu
b0VycikKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZl
bnQsIGtFdmVudFBhcmFtV2luZG93TW91c2VMb2NhdGlvbiwgdHlwZVFEUG9pbnQsIG51bGxwdHIs
IHNpemVvZihQb2ludCksIG51bGxwdHIsICZ3aGVyZSk7Ci0gICAgR2V0V2luZG93Qm91bmRzKHdp
bmRvd1JlZiwga1dpbmRvd1N0cnVjdHVyZVJnbiwgJndpbmRSZWN0KTsKLSAgICB3aGVyZS5oICs9
IHdpbmRSZWN0LmxlZnQ7Ci0gICAgd2hlcmUudiArPSB3aW5kUmVjdC50b3A7Ci0KLSAgICBHZXRF
dmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbUtleU1vZGlmaWVycywgdHlwZVVJbnQz
MiwgbnVsbHB0ciwgc2l6ZW9mKFVJbnQzMiksIG51bGxwdHIsICZtb2RpZmllcnMpOwotICAgIFNl
dEV2ZW50UGFyYW1ldGVyKG5ld0V2ZW50LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVR
RFBvaW50LCBzaXplb2YoUG9pbnQpLCAmd2hlcmUpOwotICAgIFNldEV2ZW50UGFyYW1ldGVyKG5l
d0V2ZW50LCBrRXZlbnRQYXJhbUtleU1vZGlmaWVycywgdHlwZVVJbnQzMiwgc2l6ZW9mKFVJbnQz
MiksICZtb2RpZmllcnMpOwotCi0gICAgcmV0dXJuIENyZWF0ZU5TRXZlbnRBZG9wdGluZ0NHRXZl
bnQoY2dFdmVudCwgbmV3RXZlbnQpOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIENsaWNrCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgT1NTdGF0
dXMgQ2xpY2soSElXZWJWaWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQpCi17Ci0gICAgTlNF
dmVudCAqa2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkNsaWNrRXZlbnQoaW5FdmVu
dCwgR2V0V2luZG93UmVmKGluVmlldykpOwotCi0gICAgaWYgKCFpblZpZXctPmZJc0NvbXBvc2l0
ZWQpCi0gICAgICAgIFN0YXJ0VXBkYXRlT2JzZXJ2ZXIoaW5WaWV3KTsKLQotICAgIFtpblZpZXct
PmZLaXRXaW5kb3cgc2VuZEV2ZW50OmtpdEV2ZW50XTsKLQotICAgIGlmICghaW5WaWV3LT5mSXND
b21wb3NpdGVkKQotICAgICAgICBTdG9wVXBkYXRlT2JzZXJ2ZXIoaW5WaWV3KTsKLQotICAgIFtr
aXRFdmVudCByZWxlYXNlXTsKLQotICAgIHJldHVybiBub0VycjsKLX0KLQotc3RhdGljIE5TRXZl
bnQgKkNyZWF0ZU5TRXZlbnRXaXRoQ2FyYm9uRXZlbnQoRXZlbnRSZWYgaW5FdmVudCkKLXsKLSAg
ICBOU0V2ZW50ICpldmVudCA9IFtOU0V2ZW50IGV2ZW50V2l0aEV2ZW50UmVmOmluRXZlbnRdOwot
ICAgIGlmICghZXZlbnQpCi0gICAgICAgIGV2ZW50ID0gW05TRXZlbnQgZXZlbnRXaXRoRXZlbnRS
ZWY6R2V0Q3VycmVudEV2ZW50KCldOwotCi0gICAgcmV0dXJuIFtldmVudCByZXRhaW5dOwotfQot
Ci0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIE1vdXNlVXAKLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8KLXN0YXRpYyBPU1N0YXR1cyBNb3VzZVVwKEhJV2ViVmlldyogaW5W
aWV3LCBFdmVudFJlZiBpbkV2ZW50KQotewotICAgIE5TRXZlbnQqIGtpdEV2ZW50ID0gQ3JlYXRl
TlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKLQotICAgIFtpblZpZXctPmZLaXRXaW5k
b3cgc2VuZEV2ZW50OmtpdEV2ZW50XTsKLQotICAgIFtraXRFdmVudCByZWxlYXNlXTsKLQotICAg
IHJldHVybiBub0VycjsKLX0KLQotc3RhdGljIE5TRXZlbnQgKkNyZWF0ZU5TRXZlbnRXaXRoQ2Fy
Ym9uTW91c2VNb3ZlRXZlbnQoRXZlbnRSZWYgaW5FdmVudCwgTlNXaW5kb3cgKndpbmRvdykKLXsK
LSAgICBOU0V2ZW50KiBraXRFdmVudCA9IFtOU0V2ZW50IGV2ZW50V2l0aEV2ZW50UmVmOmluRXZl
bnRdOwotCi0gICAgLy8gRklYTUU6IFdvcmtzIGFyb3VuZCBidWcgMzU4NTY0NC4gQ2FuIHJlbW92
ZSBpdCBvbmNlIHRoYXQgYnVnIGlzIGZpeGVkLgotICAgIC8vIFdlIHByZWZsaWdodCBoZXJlIGFu
ZCBkb24ndCBkbyBhbnkgd29yayB3aGVuIHRoZSB3aW5kb3cgaXMgYWxyZWFkeSBjb3JyZWN0Ci0g
ICAgLy8gYmVjYXVzZSBfZXZlbnRSZWxhdGl2ZVRvV2luZG93IHdpbGwgbWFsZnVuY3Rpb24gaWYg
dGhlIGV2ZW50J3Mgd2luZG93IG1ldGhvZAotICAgIC8vIGhhcyBiZWVuIGhpamFja2VkIGJ5IHRo
ZSBidWcgd29ya2Fyb3VuZCB1c2VkIGJ5IENvbnRyaWJ1dGUuIEl0J3MgZmluZSB0byBqdXN0Ci0g
ICAgLy8gbGVhdmUgdGhlIGV2ZW50IGFsb25lIGlmIHRoZSB3aW5kb3cgaXMgYWxyZWFkeSBjb3Jy
ZWN0LgotCi0gICAgaWYgKFtraXRFdmVudCB3aW5kb3ddICE9IHdpbmRvdykKLSAgICAgICAga2l0
RXZlbnQgPSBba2l0RXZlbnQgX2V2ZW50UmVsYXRpdmVUb1dpbmRvdzp3aW5kb3ddOwotCi0gICAg
cmV0dXJuIFtraXRFdmVudCByZXRhaW5dOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLS8vIE1vdXNlTW92ZWQKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0YXRp
YyBPU1N0YXR1cyBNb3VzZU1vdmVkKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50
KQotewotICAgIE5TRXZlbnQgKmtpdEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25Nb3Vz
ZU1vdmVFdmVudChpbkV2ZW50LCBpblZpZXctPmZLaXRXaW5kb3cpOwotICAgIFtpblZpZXctPmZL
aXRXaW5kb3cgc2VuZEV2ZW50OmtpdEV2ZW50XTsKLSAgICBba2l0RXZlbnQgcmVsZWFzZV07Ci0K
LSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
TW91c2VEcmFnZ2VkCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgT1NT
dGF0dXMgTW91c2VEcmFnZ2VkKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJlZiBpbkV2ZW50KQot
ewotICAgIE5TRXZlbnQqIGtpdEV2ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChp
bkV2ZW50KTsKLQotICAgIFtpblZpZXctPmZLaXRXaW5kb3cgc2VuZEV2ZW50OmtpdEV2ZW50XTsK
LQotICAgIFtraXRFdmVudCByZWxlYXNlXTsKLQotICAgIHJldHVybiBub0VycjsKLX0KLQotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBNb3VzZURyYWdnZWQKLS8vLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotLy8KLXN0YXRpYyBPU1N0YXR1cyBNb3VzZVdoZWVsTW92ZWQoSElXZWJW
aWV3KiBpblZpZXcsIEV2ZW50UmVmIGluRXZlbnQpCi17Ci0gICAgTlNFdmVudCoga2l0RXZlbnQg
PSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50KGluRXZlbnQpOwotCi0gICAgW2luVmlldy0+
ZktpdFdpbmRvdyBzZW5kRXZlbnQ6a2l0RXZlbnRdOwotCi0gICAgW2tpdEV2ZW50IHJlbGVhc2Vd
OwotCi0gICAgcmV0dXJuIG5vRXJyOwotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LS8vIENvbnRleHRNZW51Q2xpY2sKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0
YXRpYyBPU1N0YXR1cyBDb250ZXh0TWVudUNsaWNrKEhJV2ViVmlldyogaW5WaWV3LCBFdmVudFJl
ZiBpbkV2ZW50KQotewotICAgIE5TVmlldyAqd2ViVmlldyA9IGluVmlldy0+ZldlYlZpZXc7Ci0g
ICAgTlNXaW5kb3cgKndpbmRvdyA9IFt3ZWJWaWV3IHdpbmRvd107Ci0KLSAgICAvLyBHZXQgdGhl
IHBvaW50IG91dCBvZiB0aGUgZXZlbnQuCi0gICAgSElQb2ludCBwb2ludDsKLSAgICBHZXRFdmVu
dFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbU1vdXNlTG9jYXRpb24sIHR5cGVISVBvaW50
LCBudWxscHRyLCBzaXplb2YocG9pbnQpLCBudWxscHRyLCAmcG9pbnQpOwotICAgIEhJVmlld0Nv
bnZlcnRQb2ludCgmcG9pbnQsIGluVmlldy0+ZlZpZXdSZWYsIG51bGxwdHIpOwotICAgIAotICAg
IC8vIEZsaXAgdGhlIFkgY29vcmRpbmF0ZSwgc2luY2UgQ2FyYm9uIGlzIGZsaXBwZWQgcmVsYXRp
dmUgdG8gdGhlIEFwcEtpdC4KLSAgICBOU1BvaW50IGxvY2F0aW9uID0gTlNNYWtlUG9pbnQocG9p
bnQueCwgW3dpbmRvdyBmcmFtZV0uc2l6ZS5oZWlnaHQgLSBwb2ludC55KTsKLSAgICAKLSAgICAv
LyBNYWtlIHVwIGFuIGV2ZW50IHdpdGggdGhlIHBvaW50IGFuZCBzZW5kIGl0IHRvIHRoZSB3aW5k
b3cuCi0gICAgTlNFdmVudCAqa2l0RXZlbnQgPSBbTlNFdmVudCBtb3VzZUV2ZW50V2l0aFR5cGU6
TlNFdmVudFR5cGVSaWdodE1vdXNlRG93bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvY2F0aW9uOmxvY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vZGlmaWVyRmxhZ3M6MAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGltZXN0YW1wOkdldEV2ZW50VGltZShpbkV2ZW50KQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93TnVtYmVyOlt3aW5kb3cgd2luZG93
TnVtYmVyXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0OjAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudE51bWJl
cjowCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrQ291bnQ6
MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlOjBd
OwotICAgIFtpblZpZXctPmZLaXRXaW5kb3cgc2VuZEV2ZW50OmtpdEV2ZW50XTsKLSAgICByZXR1
cm4gbm9FcnI7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gR2V0S2luZAot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotc3RhdGljIENvbnRyb2xLaW5kIEdldEtp
bmQoKQotewotICAgIGNvbnN0IENvbnRyb2xLaW5kIGtNeUtpbmQgPSB7ICdhcHBsJywgJ3didncn
IH07Ci0gICAgCi0gICAgcmV0dXJuIGtNeUtpbmQ7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotLy8gQm91bmRzQ2hhbmdlZAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0v
Lwotc3RhdGljIHZvaWQgQm91bmRzQ2hhbmdlZChISVdlYlZpZXcqIGluVmlldywgVUludDMyIGlu
T3B0aW9ucywgY29uc3QgSElSZWN0KiBpbk9yaWdpbmFsQm91bmRzLCBjb25zdCBISVJlY3QqIGlu
Q3VycmVudEJvdW5kcykKLXsKLSAgICBpZiAoaW5WaWV3LT5mV2ViVmlldykKLSAgICAgICAgU3lu
Y0ZyYW1lKGluVmlldyk7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gT3du
aW5nV2luZG93Q2hhbmdlZAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwotc3RhdGlj
IHZvaWQKLU93bmluZ1dpbmRvd0NoYW5nZWQoSElXZWJWaWV3KiB2aWV3LCBXaW5kb3dSZWYgb2xk
V2luZG93LCBXaW5kb3dSZWYgbmV3V2luZG93KQotewotICAgIGlmIChuZXdXaW5kb3cpIHsKLSAg
ICAgICAgV2luZG93QXR0cmlidXRlcyBhdHRyczsKLSAgICAgICAgCi0gICAgICAgIE9TU3RhdHVz
IGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KG5ld1dpbmRvdywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0
b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNpemVvZihOU1dpbmRvdyAqKSwgbnVsbHB0
ciwgJnZpZXctPmZLaXRXaW5kb3cpOwotICAgICAgICBpZiAoZXJyICE9IG5vRXJyKSB7Ci0gICAg
ICAgICAgICBjb25zdCBFdmVudFR5cGVTcGVjIGtXaW5kb3dFdmVudHNbXSA9IHsKLSAgICAgICAg
ICAgIHsga0V2ZW50Q2xhc3NXaW5kb3csIGtFdmVudFdpbmRvd0Nsb3NlZCB9LAotICAgICAgICAg
ICAgeyBrRXZlbnRDbGFzc01vdXNlLCBrRXZlbnRNb3VzZU1vdmVkIH0sCi0gICAgICAgICAgICB7
IGtFdmVudENsYXNzTW91c2UsIGtFdmVudE1vdXNlVXAgfSwKLSAgICAgICAgICAgIHsga0V2ZW50
Q2xhc3NNb3VzZSwga0V2ZW50TW91c2VEcmFnZ2VkIH0sCi0gICAgICAgICAgICB7IGtFdmVudENs
YXNzTW91c2UsIGtFdmVudE1vdXNlV2hlZWxNb3ZlZCB9LAotICAgICAgICAgICAgeyBrRXZlbnRD
bGFzc0tleWJvYXJkLCBrRXZlbnRSYXdLZXlEb3duIH0sCi0gICAgICAgICAgICB7IGtFdmVudENs
YXNzS2V5Ym9hcmQsIGtFdmVudFJhd0tleVJlcGVhdCB9LAotICAgICAgICAgICAgeyBrRXZlbnRD
bGFzc0tleWJvYXJkLCBrRXZlbnRSYXdLZXlVcCB9LAotICAgICAgICAgICAgeyBrRXZlbnRDbGFz
c0NvbnRyb2wsIGtFdmVudENvbnRyb2xDbGljayB9LAotICAgICAgICAgICAgfTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgdmlldy0+ZktpdFdpbmRvdyA9IFtbQ2FyYm9uV2luZG93QWRhcHRl
ciBhbGxvY10gaW5pdFdpdGhDYXJib25XaW5kb3dSZWY6IG5ld1dpbmRvdyB0YWtpbmdPd25lcnNo
aXA6IE5PIGRpc2FibGVPcmRlcmluZzpOTyBjYXJib246WUVTXTsKLSAgICAgICAgICAgIFNldFdp
bmRvd1Byb3BlcnR5KG5ld1dpbmRvdywgTlNBcHBLaXRQcm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9u
V2luZG93UHJvcGVydHlUYWcsIHNpemVvZihOU1dpbmRvdyAqKSwgJnZpZXctPmZLaXRXaW5kb3cp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBJbnN0YWxsV2luZG93RXZlbnRIYW5kbGVyKG5l
d1dpbmRvdywgV2luZG93SGFuZGxlciwgR2V0RXZlbnRUeXBlQ291bnQoa1dpbmRvd0V2ZW50cyks
IGtXaW5kb3dFdmVudHMsIG5ld1dpbmRvdywgbnVsbHB0cik7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFtbdmlldy0+ZktpdFdpbmRvdyBjb250ZW50Vmlld10gYWRkU3Vidmlldzp2aWV3
LT5mV2ViVmlld107Ci0gICAgICAgIAotICAgICAgICBHZXRXaW5kb3dBdHRyaWJ1dGVzKG5ld1dp
bmRvdywgJmF0dHJzKTsKLSAgICAgICAgdmlldy0+ZklzQ29tcG9zaXRlZCA9IGF0dHJzICYga1dp
bmRvd0NvbXBvc2l0aW5nQXR0cmlidXRlOwotICAgICAgICAKLSAgICAgICAgU3luY0ZyYW1lKHZp
ZXcpOyAgICAgICAgCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQmUgc3VyZSB0byBkZXRhY2gg
dGhlIGNvY29hIHZpZXcsIHRvby4KLSAgICAgICAgaWYgKHZpZXctPmZXZWJWaWV3KQotICAgICAg
ICAgICAgW3ZpZXctPmZXZWJWaWV3IHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICAKLSAg
ICAgICAgdmlldy0+ZktpdFdpbmRvdyA9IG51bGxwdHI7IC8vIGJyZWFrIHRoZSB0aWVzIHRoYXQg
YmluZAotICAgIH0KLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyAgICBX
aW5kb3dIYW5kbGVyCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICAgIFJlZGly
ZWN0IG1vdXNlIGV2ZW50cyB0byB0aGUgdmlld3MgYmVuZWF0aCB0aGVtLiBUaGlzIGlzIHJlcXVp
cmVkIGZvciBXZWJLaXQgdG8gd29yawotLy8gICAgcHJvcGVybHkuIFdlIGluc3RhbGwgaXQgb25j
ZSBwZXIgd2luZG93LiBXZSBhbHNvIHRhcCBpbnRvIHdpbmRvdyBjbG9zZSB0byByZWxlYXNlCi0v
LyAgICB0aGUgTlNXaW5kb3cgdGhhdCBzaGFkb3dzIG91ciBDYXJib24gd2luZG93LgotLy8KLXN0
YXRpYyBPU1N0YXR1cyBXaW5kb3dIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVm
LCBFdmVudFJlZiBpbkV2ZW50LCB2b2lkKiBpblVzZXJEYXRhKQotewotICAgIFdpbmRvd1JlZiB3
aW5kb3cgPSAoV2luZG93UmVmKWluVXNlckRhdGE7Ci0gICAgT1NTdGF0dXMgcmVzdWx0ID0gZXZl
bnROb3RIYW5kbGVkRXJyOwotCi0gICAgTlNXaW5kb3cqIGtpdFdpbmRvdzsKLSAgICBPU1N0YXR1
cyBlcnIgPSBub0VycjsKLSAgICBOU0V2ZW50KiBraXRFdmVudDsKLQotICAgIHN3aXRjaCAoR2V0
RXZlbnRDbGFzcyhpbkV2ZW50KSkgewotICAgIGNhc2Uga0V2ZW50Q2xhc3NDb250cm9sOgotICAg
ICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgewotICAgICAgICBjYXNlIGtFdmVu
dENvbnRyb2xDbGljazoKLSAgICAgICAgICAgIENhcmJvbldpbmRvd0FkYXB0ZXIgKmtpdFdpbmRv
dzsKLQotICAgICAgICAgICAgZXJyID0gR2V0V2luZG93UHJvcGVydHkod2luZG93LCBOU0FwcEtp
dFByb3BlcnR5Q3JlYXRvciwgTlNDYXJib25XaW5kb3dQcm9wZXJ0eVRhZywgc2l6ZW9mKE5TV2lu
ZG93ICopLCBudWxscHRyLCAma2l0V2luZG93KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFdlIG11c3QgYmUgb3V0c2lkZSB0aGUgSElXZWJWaWV3LCByZWxpbnF1aXNoIGZvY3Vz
LgotICAgICAgICAgICAgW2tpdFdpbmRvdyByZWxpbnF1aXNoRm9jdXNdOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICBjYXNl
IGtFdmVudENsYXNzS2V5Ym9hcmQ6Ci0gICAgICAgIC8vIGlmIHRoZSBmaXJzdCByZXNwb25kZXIg
aW4gdGhlIGtpdCB3aW5kb3cgaXMgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlCi0gICAgICAgIC8v
IHdpbmRvdywgd2UgYXNzdW1lIGEgc3VidmlldyBvZiB0aGUgd2VidmlldyBpcyBmb2N1c2VkLiB3
ZSBtdXN0IHNlbmQKLSAgICAgICAgLy8gdGhlIGV2ZW50IHRvIHRoZSB3aW5kb3cgc28gdGhhdCBp
dCBnb2VzIHRocm91Z2ggdGhlIGtpdCdzIG5vcm1hbCBUU00KLSAgICAgICAgLy8gbG9naWMsIGFu
ZCAtLSBtb3JlIGltcG9ydGFudGx5IC0tIGFsbG93cyBhbnkgZGVsZWdhdGVzIGFzc29jaWF0ZWQK
LSAgICAgICAgLy8gd2l0aCB0aGUgZmlyc3QgcmVzcG9uZGVyIHRvIGhhdmUgYSBjaGFuY2UgYXQg
dGhlIGV2ZW50LgotCi0gICAgICAgIGVyciA9IEdldFdpbmRvd1Byb3BlcnR5KHdpbmRvdywgTlNB
cHBLaXRQcm9wZXJ0eUNyZWF0b3IsIE5TQ2FyYm9uV2luZG93UHJvcGVydHlUYWcsIHNpemVvZihO
U1dpbmRvdyAqKSwgbnVsbHB0ciwgJmtpdFdpbmRvdyk7Ci0gICAgICAgIGlmIChlcnIgPT0gbm9F
cnIpIHsKLSAgICAgICAgICAgIE5TUmVzcG9uZGVyKiByZXNwb25kZXIgPSBba2l0V2luZG93IGZp
cnN0UmVzcG9uZGVyXTsKLSAgICAgICAgICAgIGlmIChyZXNwb25kZXIgIT0ga2l0V2luZG93KSB7
Ci0gICAgICAgICAgICAgICAga2l0RXZlbnQgPSBDcmVhdGVOU0V2ZW50V2l0aENhcmJvbkV2ZW50
KGluRXZlbnQpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFtraXRXaW5kb3cg
c2VuZEV2ZW50OmtpdEV2ZW50XTsKLSAgICAgICAgICAgICAgICBba2l0RXZlbnQgcmVsZWFzZV07
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGtFdmVudENs
YXNzV2luZG93OgotICAgICAgICAKLQotICAgICAgICBlcnIgPSBHZXRXaW5kb3dQcm9wZXJ0eSh3
aW5kb3csIE5TQXBwS2l0UHJvcGVydHlDcmVhdG9yLCBOU0NhcmJvbldpbmRvd1Byb3BlcnR5VGFn
LCBzaXplb2YoTlNXaW5kb3cgKiksIG51bGxwdHIsICZraXRXaW5kb3cpOwotICAgICAgICBpZiAo
ZXJyID09IG5vRXJyKSB7Ci0gICAgICAgICAgICBba2l0V2luZG93IF9yZW1vdmVXaW5kb3dSZWZd
OwotICAgICAgICAgICAgW2tpdFdpbmRvdyBjbG9zZV07Ci0gICAgICAgIH0KLSAgICAgICAgcmVz
dWx0ID0gbm9FcnI7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBrRXZlbnRDbGFzc01vdXNl
OgotICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgewotICAgICAgICBjYXNl
IGtFdmVudE1vdXNlTW92ZWQ6Ci0gICAgICAgICAgICBQb2ludCB3aGVyZTsKLSAgICAgICAgICAg
IEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtTW91c2VMb2NhdGlvbiwgdHlw
ZVFEUG9pbnQsIG51bGxwdHIsIHNpemVvZihQb2ludCksIG51bGxwdHIsICZ3aGVyZSk7Ci0KLSAg
ICAgICAgICAgIFdpbmRvd1JlZiB0ZW1wOwotICAgICAgICAgICAgRmluZFdpbmRvdyh3aGVyZSwg
JnRlbXApOwotICAgICAgICAgICAgaWYgKHRlbXAgPT0gd2luZG93KSB7Ci0gICAgICAgICAgICAg
ICAgUmVjdCBib3VuZHM7Ci0gICAgICAgICAgICAgICAgR2V0V2luZG93Qm91bmRzKHdpbmRvdywg
a1dpbmRvd1N0cnVjdHVyZVJnbiwgJmJvdW5kcyk7Ci0gICAgICAgICAgICAgICAgd2hlcmUuaCAt
PSBib3VuZHMubGVmdDsKLSAgICAgICAgICAgICAgICB3aGVyZS52IC09IGJvdW5kcy50b3A7Ci0g
ICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1XaW5k
b3dSZWYsIHR5cGVXaW5kb3dSZWYsIHNpemVvZihXaW5kb3dSZWYpLCAmd2luZG93KTsKLSAgICAg
ICAgICAgICAgICBTZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbVdpbmRvd01v
dXNlTG9jYXRpb24sIHR5cGVRRFBvaW50LCBzaXplb2YoUG9pbnQpLCAmd2hlcmUpOwotCi0gICAg
ICAgICAgICAgICAgSElWaWV3UmVmIHZpZXcgPSBudWxscHRyOwotCi0gICAgICAgICAgICAgICAg
ZXJyID0gSElWaWV3R2V0Vmlld0Zvck1vdXNlRXZlbnQoSElWaWV3R2V0Um9vdCh3aW5kb3cpLCBp
bkV2ZW50LCAmdmlldyk7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA9PSBub0VyciAmJiB2aWV3
ICYmIEhJT2JqZWN0SXNPZkNsYXNzKChISU9iamVjdFJlZil2aWV3LCBrSElXZWJWaWV3Q2xhc3NJ
RCkpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFNlbmRFdmVudFRvRXZlbnRUYXJnZXRX
aXRoT3B0aW9ucyhpbkV2ZW50LCBISU9iamVjdEdldEV2ZW50VGFyZ2V0KChISU9iamVjdFJlZil2
aWV3KSwga0V2ZW50VGFyZ2V0RG9udFByb3BhZ2F0ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBrRXZlbnRNb3VzZVVw
OgotICAgICAgICBjYXNlIGtFdmVudE1vdXNlRHJhZ2dlZDoKLSAgICAgICAgY2FzZSBrRXZlbnRN
b3VzZVdoZWVsTW92ZWQ6Ci0gICAgICAgICAgICBISVZpZXdSZWYgdmlldyA9IG51bGxwdHI7Ci0K
LSAgICAgICAgICAgIGVyciA9IEhJVmlld0dldFZpZXdGb3JNb3VzZUV2ZW50KEhJVmlld0dldFJv
b3Qod2luZG93KSwgaW5FdmVudCwgJnZpZXcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSBub0Vy
ciAmJiB2aWV3ICYmIEhJT2JqZWN0SXNPZkNsYXNzKChISU9iamVjdFJlZil2aWV3LCBrSElXZWJW
aWV3Q2xhc3NJRCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gU2VuZEV2ZW50VG9FdmVudFRh
cmdldFdpdGhPcHRpb25zKGluRXZlbnQsIEhJT2JqZWN0R2V0RXZlbnRUYXJnZXQoKEhJT2JqZWN0
UmVmKXZpZXcpLCBrRXZlbnRUYXJnZXREb250UHJvcGFnYXRlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBTeW5jRnJhbWUKLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0YXRpYyB2b2lkIFN5bmNGcmFtZShISVdlYlZp
ZXcqIGluVmlldykKLXsKLSAgICBISVZpZXdSZWYgcGFyZW50ID0gSElWaWV3R2V0U3VwZXJ2aWV3
KGluVmlldy0+ZlZpZXdSZWYpOwotICAgIAotICAgIGlmIChwYXJlbnQpIHsKLSAgICAgICAgaWYg
KGluVmlldy0+ZklzQ29tcG9zaXRlZCkgewotICAgICAgICAgICAgSElSZWN0IGZyYW1lOwotICAg
ICAgICAgICAgSElSZWN0IHBhcmVudEJvdW5kczsKLSAgICAgICAgICAgIE5TUG9pbnQgb3JpZ2lu
OwotCi0gICAgICAgICAgICBISVZpZXdHZXRGcmFtZShpblZpZXctPmZWaWV3UmVmLCAmZnJhbWUp
OwotICAgICAgICAgICAgSElWaWV3R2V0Qm91bmRzKHBhcmVudCwgJnBhcmVudEJvdW5kcyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG9yaWdpbi54ID0gZnJhbWUub3JpZ2luLng7Ci0gICAg
ICAgICAgICBvcmlnaW4ueSA9IHBhcmVudEJvdW5kcy5zaXplLmhlaWdodCAtIENHUmVjdEdldE1h
eFkoZnJhbWUpOwotLy8gICAgcHJpbnRmKCJzeW5jaW5nIHRvICglZyAlZykgKCVnICVnKVxuIiwg
b3JpZ2luLngsIG9yaWdpbi55LAotLy8gICAgICAgICAgICBmcmFtZS5zaXplLndpZHRoLCBmcmFt
ZS5zaXplLmhlaWdodCk7Ci0gICAgICAgICAgICBbaW5WaWV3LT5mV2ViVmlldyBzZXRGcmFtZU9y
aWdpbjogb3JpZ2luXTsKLSAgICAgICAgICAgIFtpblZpZXctPmZXZWJWaWV3IHNldEZyYW1lU2l6
ZTogKihOU1NpemUqKSZmcmFtZS5zaXplXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IEdyYWZQdHIgcG9ydCA9IEdldFdpbmRvd1BvcnQoR2V0Q29udHJvbE93bmVyKGluVmlldy0+ZlZp
ZXdSZWYpKTsKLSAgICAgICAgICAgIFBpeE1hcEhhbmRsZSBwb3J0UGl4ID0gR2V0UG9ydFBpeE1h
cChwb3J0KTsKLSAgICAgICAgICAgIFJlY3QgYm91bmRzOwotICAgICAgICAgICAgSElSZWN0IHJv
b3RGcmFtZTsKLSAgICAgICAgICAgIEhJUmVjdCBmcmFtZTsKLQotICAgICAgICAgICAgR2V0Q29u
dHJvbEJvdW5kcyhpblZpZXctPmZWaWV3UmVmLCAmYm91bmRzKTsKLSAgICAgICAgICAgIE9mZnNl
dFJlY3QoJmJvdW5kcywgLSgqKnBvcnRQaXgpLmJvdW5kcy5sZWZ0LCAtKCoqcG9ydFBpeCkuYm91
bmRzLnRvcCk7Ci0KLS8vICAgICAgICAgICAgcHJpbnRmKCJjb250cm9sIGxpdmVzIGF0ICVkICVk
ICVkICVkIGluIHdpbmRvdy1jb29yZHNcbiIsIGJvdW5kcy50b3AsIGJvdW5kcy5sZWZ0LAotLy8g
ICAgICAgICAgICAgICAgYm91bmRzLmJvdHRvbSwgYm91bmRzLnJpZ2h0KTsKLSAgCi0gICAgICAg
ICAgICBISVZpZXdHZXRGcmFtZShISVZpZXdHZXRSb290KEdldENvbnRyb2xPd25lcihpblZpZXct
PmZWaWV3UmVmKSksICZyb290RnJhbWUpOwotCi0gICAgICAgICAgICBmcmFtZS5vcmlnaW4ueCA9
IGJvdW5kcy5sZWZ0OwotICAgICAgICAgICAgZnJhbWUub3JpZ2luLnkgPSByb290RnJhbWUuc2l6
ZS5oZWlnaHQgLSBib3VuZHMuYm90dG9tOwotICAgICAgICAgICAgZnJhbWUuc2l6ZS53aWR0aCA9
IGJvdW5kcy5yaWdodCAtIGJvdW5kcy5sZWZ0OwotICAgICAgICAgICAgZnJhbWUuc2l6ZS5oZWln
aHQgPSBib3VuZHMuYm90dG9tIC0gYm91bmRzLnRvcDsKLQotLy8gICAgICAgICAgICBwcmludGYo
IiAgIGJlZm9yZSBmcmFtZSBjb252ZXJ0ICglZyAlZykgKCVnICVnKVxuIiwgZnJhbWUub3JpZ2lu
LngsIGZyYW1lLm9yaWdpbi55LAotLy8gICAgICAgICAgICAgICAgZnJhbWUuc2l6ZS53aWR0aCwg
ZnJhbWUuc2l6ZS5oZWlnaHQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBbaW5WaWV3LT5m
V2ViVmlldyBjb252ZXJ0UmVjdDoqKE5TUmVjdCopJmZyYW1lIGZyb21WaWV3Om5pbF07Ci0KLS8v
ICAgICAgICAgICAgcHJpbnRmKCIgICBtb3Zpbmcgd2ViIHZpZXcgdG8gKCVnICVnKSAoJWcgJWcp
XG4iLCBmcmFtZS5vcmlnaW4ueCwgZnJhbWUub3JpZ2luLnksCi0vLyAgICAgICAgICAgICAgICBm
cmFtZS5zaXplLndpZHRoLCBmcmFtZS5zaXplLmhlaWdodCk7Ci0KLSAgICAgICAgICAgIFtpblZp
ZXctPmZXZWJWaWV3IHNldEZyYW1lT3JpZ2luOiAqKE5TUG9pbnQqKSZmcmFtZS5vcmlnaW5dOwot
ICAgICAgICAgICAgW2luVmlldy0+ZldlYlZpZXcgc2V0RnJhbWVTaXplOiAqKE5TU2l6ZSopJmZy
YW1lLnNpemVdOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIFNldEZvY3VzUGFydAotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLwot
c3RhdGljIE9TU3RhdHVzIFNldEZvY3VzUGFydChISVdlYlZpZXcqIHZpZXcsIENvbnRyb2xQYXJ0
Q29kZSBkZXNpcmVkRm9jdXMsIFJnbkhhbmRsZSBpbnZhbGlkUmduLCBCb29sZWFuIGZvY3VzRXZl
cnl0aGluZywgQ29udHJvbFBhcnRDb2RlKiBhY3R1YWxGb2N1cykKLXsKLSAgICBOU1ZpZXcgKmZy
ZXNobHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3OwotICAgIFNJbnQzMiBwYXJ0Q29kZVRvUmV0dXJu
OwotCi0gICAgLy8gRG8gd2hhdCBDYXJib24gaXMgdGVsbGluZyB1cyB0byBkby4KLSAgICBpZiAo
ZGVzaXJlZEZvY3VzID09IGtDb250cm9sRm9jdXNOb1BhcnQpIHsKLSAgICAgICAgLy8gUmVsaW5x
dWlzaCB0aGUga2V5Ym9hcmQgZm9jdXMuCi0gICAgICAgIFJlbGlucXVpc2hGb2N1cyh2aWV3LCB0
cnVlKTsgLy8gKGF1dG9kaXNwbGF5ID8gWUVTIDogTk8pKTsKLSAgICAgICAgZnJlc2hseU1hZGVG
aXJzdFJlc3BvbmRlclZpZXcgPSBuaWw7Ci0gICAgICAgIHBhcnRDb2RlVG9SZXR1cm4gPSBrQ29u
dHJvbEZvY3VzTm9QYXJ0OwotICAgICAgICAvLyBOU0xvZyhAIlJlbGlucXVpc2hlZCB0aGUga2V5
IGZvY3VzIGJlY2F1c2Ugd2UgaGF2ZSBubyBjaG9pY2UuIik7Ci0gICAgfSBlbHNlIGlmIChkZXNp
cmVkRm9jdXMgPT0ga0NvbnRyb2xGb2N1c05leHRQYXJ0IHx8IGRlc2lyZWRGb2N1cyA9PSBrQ29u
dHJvbEZvY3VzUHJldlBhcnQpIHsKLSAgICAgICAgQk9PTCBnb0ZvcndhcmQgPSAoZGVzaXJlZEZv
Y3VzID09IGtDb250cm9sRm9jdXNOZXh0UGFydCk7Ci0KLSAgICAgICAgLy8gQWR2YW5jZSB0aGUg
a2V5Ym9hcmQgZm9jdXMsIG1heWJlIHJpZ2h0IG9mZiBvZiB0aGlzIHZpZXcuICBNYXliZSBhIHN1
YnZpZXcgb2YgdGhpcyBvbmUgYWxyZWFkeSBoYXMgdGhlIGtleWJvYXJkIGZvY3VzLCBtYXliZSBu
b3QuCi0gICAgICAgIGZyZXNobHlNYWRlRmlyc3RSZXNwb25kZXJWaWV3ID0gQWR2YW5jZUZvY3Vz
KHZpZXcsIGdvRm9yd2FyZCk7Ci0gICAgICAgIGlmIChmcmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVy
VmlldykKLSAgICAgICAgICAgIHBhcnRDb2RlVG9SZXR1cm4gPSBkZXNpcmVkRm9jdXM7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHBhcnRDb2RlVG9SZXR1cm4gPSBrQ29udHJvbEZvY3VzTm9Q
YXJ0OwotICAgICAgICAvLyBOU0xvZyhmcmVzaGx5TWFkZUZpcnN0UmVzcG9uZGVyVmlldyA/IEAi
QWR2YW5jZWQgdGhlIGtleSBmb2N1cy4iIDogQCJSZWxpbnF1aXNoZWQgdGhlIGtleSBmb2N1cy4i
KTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXaGF0J3MgdGhpcz8KLSAgICAgICAgaWYgKGRl
c2lyZWRGb2N1cyAhPSBrQ29udHJvbEluZGljYXRvclBhcnQpCi0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXcgPSBu
aWw7Ci0gICAgICAgIHBhcnRDb2RlVG9SZXR1cm4gPSBkZXNpcmVkRm9jdXM7Ci0gICAgfQotCi0g
ICAgdmlldy0+ZkZpcnN0UmVzcG9uZGVyID0gZnJlc2hseU1hZGVGaXJzdFJlc3BvbmRlclZpZXc7
Ci0KLSAgICAqYWN0dWFsRm9jdXMgPSBwYXJ0Q29kZVRvUmV0dXJuOwotCi0gICAgLy8gRG9uZS4K
LSAgICByZXR1cm4gbm9FcnI7Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8g
QWR2YW5jZUZvY3VzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1zdGF0aWMgTlNW
aWV3KiBBZHZhbmNlRm9jdXMoSElXZWJWaWV3KiB2aWV3LCBib29sIGZvcndhcmQpCi17Ci0gICAg
TlNSZXNwb25kZXIqIG9sZEZpcnN0UmVzcG9uZGVyOwotICAgIE5TVmlldyogY3VycmVudEtleVZp
ZXc7Ci0gICAgTlNWaWV3KiB2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXI7Ci0gICAgCi0gICAgLy8g
Rm9jdXMgb24gc29tZSBwYXJ0IChzdWJ2aWV3KSBvZiB0aGlzIGNvbnRyb2wgKHZpZXcpLgotICAg
IC8vIE1heWJlIGEgc3VidmlldyBvZiB0aGlzIG9uZSBhbHJlYWR5IGhhcyB0aGUga2V5Ym9hcmQg
Zm9jdXMsIG1heWJlIG5vdC4KLSAgICAKLSAgICBvbGRGaXJzdFJlc3BvbmRlciA9IFt2aWV3LT5m
S2l0V2luZG93IGZpcnN0UmVzcG9uZGVyXTsKLQotICAgIC8vIElmIHdlIHRhYiBvdXQgb2Ygb3Vy
IE5TVmlldywgaXQgd2lsbCBubyBsb25nZXIgYmUgdGhlIHJlc3BvbmRlcgotICAgIC8vIHdoZW4g
d2UgZ2V0IGhlcmUuIFdlJ2xsIHRyeSB0aGlzIHRyaWNrIGZvciBub3cuIFdlIG1pZ2h0IG5lZWQg
dG8KLSAgICAvLyB0YWcgdGhlIHZpZXcgYXBwcm9wcmlhdGVseS4KLQotICAgIGlmICh2aWV3LT5m
Rmlyc3RSZXNwb25kZXIgJiYgKChOU1Jlc3BvbmRlciopdmlldy0+ZkZpcnN0UmVzcG9uZGVyICE9
IG9sZEZpcnN0UmVzcG9uZGVyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAg
aWYgKFtvbGRGaXJzdFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgewot
ICAgICAgICBOU1ZpZXcqIHRlbnRhdGl2ZU5ld0tleVZpZXc7Ci0KLSAgICAgICAgLy8gU29tZSB2
aWV3IGluIHRoaXMgd2luZG93IGFscmVhZHkgaGFzIHRoZSBrZXlib2FyZCBmb2N1cy4gIEl0IGJl
dHRlciBhdCBsZWFzdCBiZSBhIHN1YnZpZXcgb2YgdGhpcyBvbmUuCi0gICAgICAgIE5TVmlldyog
b2xkRmlyc3RSZXNwb25kZXJWaWV3ID0gKE5TVmlldyAqKW9sZEZpcnN0UmVzcG9uZGVyOwotICAg
ICAgICBBU1NFUlQoW29sZEZpcnN0UmVzcG9uZGVyVmlldyBpc0Rlc2NlbmRhbnRPZjp2aWV3LT5m
V2ViVmlld10pOwotCi0gICAgICAgIGlmIChvbGRGaXJzdFJlc3BvbmRlclZpZXcgIT0gdmlldy0+
ZkZpcnN0UmVzcG9uZGVyICYmICFbb2xkRmlyc3RSZXNwb25kZXJWaWV3IGlzRGVzY2VuZGFudE9m
OnZpZXctPmZGaXJzdFJlc3BvbmRlcl0pIHsKLSAgICAgICAgICAgIC8vIERlc3BpdGUgb3VyIGVm
Zm9ydHMgdG8gcmVjb3JkIHdoYXQgdmlldyB3ZSBtYWRlIHRoZSBmaXJzdCByZXNwb25kZXIKLSAg
ICAgICAgICAgIC8vIChmb3IgdXNlIGluIHRoZSBuZXh0IHBhcmFncmFwaCkgd2UgY291bGRuJ3Qg
a2VlcCB1cCBiZWNhdXNlIHRoZSB1c2VyCi0gICAgICAgICAgICAvLyBoYXMgY2xpY2tlZCBpbiBh
IHRleHQgZmllbGQgdG8gbWFrZSBpdCB0aGUga2V5IGZvY3VzLCBpbnN0ZWFkIG9mIHVzaW5nCi0g
ICAgICAgICAgICAvLyB0aGUgdGFiIGtleS4gRmluZCBhIGNvbnRyb2wgb24gd2hpY2ggaXQncyBy
ZWFzb25hYmxlIHRvIGludm9rZQotICAgICAgICAgICAgLy8gLVtOU1ZpZXcgbmV4dFZhbGlkS2V5
Vmlld10sIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZhY3QgdGhhdAotICAgICAgICAgICAgLy8g
TlNUZXh0RmllbGRzIGFsd2F5cyBwYXNzIG9uIGZpcnN0LXJlc3BvbmRlcnNoaXAgdG8gYSB0ZW1w
b3JhcmlseS0KLSAgICAgICAgICAgIC8vIGNvbnRhaW5lZCBOU1RleHRWaWV3LgotCi0gICAgICAg
ICAgICBOU1ZpZXcgKnZpZXdCZWluZ1Rlc3RlZDsKLSAgICAgICAgICAgIGN1cnJlbnRLZXlWaWV3
ID0gb2xkRmlyc3RSZXNwb25kZXJWaWV3OwotICAgICAgICAgICAgdmlld0JlaW5nVGVzdGVkID0g
Y3VycmVudEtleVZpZXc7Ci0gICAgICAgICAgICB3aGlsZSAodmlld0JlaW5nVGVzdGVkICE9IHZp
ZXctPmZXZWJWaWV3KSB7Ci0gICAgICAgICAgICAgICAgaWYgKFt2aWV3QmVpbmdUZXN0ZWQgaXNL
aW5kT2ZDbGFzczpbTlNUZXh0RmllbGQgY2xhc3NdXSkgewotICAgICAgICAgICAgICAgICAgICBj
dXJyZW50S2V5VmlldyA9IHZpZXdCZWluZ1Rlc3RlZDsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHZpZXdCZWluZ1Rlc3RlZCA9
IFt2aWV3QmVpbmdUZXN0ZWQgc3VwZXJ2aWV3XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIFdlIHJlY29yZGVkIHdoaWNoIHZpZXcgd2UgbWFkZSBpbnRv
IHRoZSBmaXJzdCByZXNwb25kZXIgdGhlCi0gICAgICAgICAgICAvLyBsYXN0IHRpbWUgdGhlIHVz
ZXIgaGl0IHRoZSB0YWIga2V5LCBhbmQgbm90aGluZyBoYXMgaW52YWxpZGF0ZWQKLSAgICAgICAg
ICAgIC8vIG91ciByZWNvcmRlZCB2YWx1ZSBzaW5jZS4KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgY3VycmVudEtleVZpZXcgPSB2aWV3LT5mRmlyc3RSZXNwb25kZXI7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBUcnkgdG8gbW92ZSBvbiB0byB0aGUgbmV4dCBvciBwcmV2aW91cyBrZXkgdmll
dy4gIFdlIHVzZSB0aGUgbGFib3Jpb3VzbHkKLSAgICAgICAgLy8gcmVjb3JkZWQvZmlndXJlZCBj
dXJyZW50S2V5VmlldyBpbnN0ZWFkIG9mIGp1c3Qgb2xkRmlyc3RSZXNwb25kZXIgYXMgdGhlCi0g
ICAgICAgIC8vIGp1bXBpbmctb2ZmLXBvaW50IHdoZW4gc2VhcmNoaW5nIGZvciB0aGUgbmV4dCB2
YWxpZCBrZXkgdmlldy4gVGhpcyBpcyBzbwotICAgICAgICAvLyB3ZSBkb24ndCBnZXQgZm9vbGVk
IGlmIHdlIHJlY2VudGx5IG1hZGUgc29tZSB2aWV3IHRoZSBmaXJzdCByZXNwb25kZXIsIGJ1dAot
ICAgICAgICAvLyBpdCBwYXNzZWQgb24gZmlyc3QtcmVzcG9uZGVyLW5lc3MgdG8gc29tZSB0ZW1w
b3Jhcnkgc3Vidmlldy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gWW91IGNhbid0IHB1dCBub3Jt
YWwgdmlld3MgaW4gYSB3aW5kb3cgd2l0aCBDYXJib24tY29udHJvbC13cmFwcGVkIHZpZXdzLgot
ICAgICAgICAvLyBTdHVmZiBsaWtlIHRoaXMgd291bGQgYnJlYWsuIE0uUC4gTm90aWNlIC0gMTIv
Mi8wMAotCi0gICAgICAgIHRlbnRhdGl2ZU5ld0tleVZpZXcgPSBmb3J3YXJkID8gW2N1cnJlbnRL
ZXlWaWV3IG5leHRWYWxpZEtleVZpZXddIDogW2N1cnJlbnRLZXlWaWV3IHByZXZpb3VzVmFsaWRL
ZXlWaWV3XTsKLSAgICAgICAgaWYgKHRlbnRhdGl2ZU5ld0tleVZpZXcgJiYgW3RlbnRhdGl2ZU5l
d0tleVZpZXcgaXNEZXNjZW5kYW50T2Y6dmlldy0+ZldlYlZpZXddKSB7Ci0gICAgICAgICAgICAv
LyBUaGUgdXNlciBoYXMgdGFiYmVkIHRvIGFub3RoZXIgc3VidmlldyBvZiB0aGlzIGNvbnRyb2wg
dmlldy4gIENoYW5nZSB0aGUga2V5Ym9hcmQgZm9jdXMuCi0gICAgICAgICAgICAvL05TTG9nKEAi
VGFiYmVkIHRvIHRoZSBuZXh0IG9yIHByZXZpb3VzIGtleSB2aWV3LiIpOwotCi0gICAgICAgICAg
ICBbdmlldy0+ZktpdFdpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6dGVudGF0aXZlTmV3S2V5Vmll
d107Ci0gICAgICAgICAgICB2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXIgPSB0ZW50YXRpdmVOZXdL
ZXlWaWV3OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVGhlIHVzZXIgaGFzIHRh
YmJlZCBwYXN0IHRoZSBzdWJ2aWV3cyBvZiB0aGlzIGNvbnRyb2wgdmlldy4gIFRoZSB3aW5kb3cg
aXMgdGhlIGZpcnN0IHJlc3BvbmRlciBub3cuCi0gICAgICAgICAgICAvL05TTG9nKEAiVGFiYmVk
IHBhc3QgdGhlIGZpcnN0IG9yIGxhc3Qga2V5IHZpZXcuIik7Ci0gICAgICAgICAgICBbdmlldy0+
ZktpdFdpbmRvdyBtYWtlRmlyc3RSZXNwb25kZXI6dmlldy0+ZktpdFdpbmRvd107Ci0gICAgICAg
ICAgICB2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXIgPSBuaWw7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICAvLyBObyB2aWV3IGluIHRoaXMgd2luZG93IGhhcyB0aGUga2V5Ym9hcmQg
Zm9jdXMuICBUaGlzIHZpZXcgc2hvdWxkCi0gICAgICAgIC8vIHRyeSB0byBzZWxlY3Qgb25lIG9m
IGl0cyBrZXkgc3Vidmlld3MuIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluCi0gICAgICAgIC8vIHRo
ZSBzdWJ2aWV3cyBvZiBzaWJsaW5nIHZpZXdzIGhlcmUuCi0KLSAgICAgICAgLy8gTlNMb2coQCJO
byBrZXlib2FyZCBmb2N1cyBpbiB3aW5kb3cuIEF0dGVtcHRpbmcgdG8gc2V0Li4uIik7Ci0KLSAg
ICAgICAgTlNWaWV3ICp0ZW50YXRpdmVOZXdLZXlWaWV3OwotICAgICAgICBBU1NFUlQob2xkRmly
c3RSZXNwb25kZXIgPT0gdmlldy0+ZktpdFdpbmRvdyk7Ci0gICAgICAgIGlmIChbdmlldy0+Zldl
YlZpZXcgYWNjZXB0c0ZpcnN0UmVzcG9uZGVyXSkKLSAgICAgICAgICAgIHRlbnRhdGl2ZU5ld0tl
eVZpZXcgPSB2aWV3LT5mV2ViVmlldzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVudGF0
aXZlTmV3S2V5VmlldyA9IFt2aWV3LT5mV2ViVmlldyBuZXh0VmFsaWRLZXlWaWV3XTsKLSAgICAg
ICAgaWYgKHRlbnRhdGl2ZU5ld0tleVZpZXcgJiYgW3RlbnRhdGl2ZU5ld0tleVZpZXcgaXNEZXNj
ZW5kYW50T2Y6dmlldy0+ZldlYlZpZXddKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGNvbnRyb2wg
dmlldyBoYXMgYXQgbGVhc3Qgb25lIHN1YnZpZXcgdGhhdCBjYW4gdGFrZSB0aGUga2V5Ym9hcmQg
Zm9jdXMuCi0gICAgICAgICAgICBpZiAoIWZvcndhcmQpIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGUgdXNlciBoYXMgdGFiYmVkIGludG8gdGhpcyBjb250cm9sIHZpZXcgYmFja3dhcmRzLiBGaW5k
Ci0gICAgICAgICAgICAgICAgLy8gYW5kIHNlbGVjdCB0aGUgbGFzdCBzdWJ2aWV3IG9mIHRoaXMg
b25lIHRoYXQgY2FuIHRha2UgdGhlCi0gICAgICAgICAgICAgICAgLy8ga2V5Ym9hcmQgZm9jdXMu
IFdhdGNoIG91dCBmb3IgbG9vcHMgb2YgdmFsaWQga2V5IHZpZXdzLgotCi0gICAgICAgICAgICAg
ICAgTlNWaWV3ICpmaXJzdFRlbnRhdGl2ZU5ld0tleVZpZXcgPSB0ZW50YXRpdmVOZXdLZXlWaWV3
OwotICAgICAgICAgICAgICAgIE5TVmlldyAqbmV4dFRlbnRhdGl2ZU5ld0tleVZpZXcgPSBbdGVu
dGF0aXZlTmV3S2V5VmlldyBuZXh0VmFsaWRLZXlWaWV3XTsKLSAgICAgICAgICAgICAgICB3aGls
ZSAobmV4dFRlbnRhdGl2ZU5ld0tleVZpZXcgJiYgW25leHRUZW50YXRpdmVOZXdLZXlWaWV3IGlz
RGVzY2VuZGFudE9mOnZpZXctPmZXZWJWaWV3XSAmJiBuZXh0VGVudGF0aXZlTmV3S2V5VmlldyAh
PSBmaXJzdFRlbnRhdGl2ZU5ld0tleVZpZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgdGVudGF0
aXZlTmV3S2V5VmlldyA9IG5leHRUZW50YXRpdmVOZXdLZXlWaWV3OwotICAgICAgICAgICAgICAg
ICAgICBuZXh0VGVudGF0aXZlTmV3S2V5VmlldyA9IFt0ZW50YXRpdmVOZXdLZXlWaWV3IG5leHRW
YWxpZEtleVZpZXddOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBTZXQgdGhlIGtleWJvYXJkIGZvY3VzLgotICAgICAgICAgICAgLy9OU0xvZyhA
IlRhYmJlZCBpbnRvIHRoZSBmaXJzdCBvciBsYXN0IGtleSB2aWV3LiIpOwotICAgICAgICAgICAg
W3ZpZXctPmZLaXRXaW5kb3cgbWFrZUZpcnN0UmVzcG9uZGVyOnRlbnRhdGl2ZU5ld0tleVZpZXdd
OwotICAgICAgICAgICAgdmlld1dlTWFkZUZpcnN0UmVzcG9uZGVyID0gdGVudGF0aXZlTmV3S2V5
VmlldzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFRoaXMgY29udHJvbCB2aWV3
IGhhcyBubyBzdWJ2aWV3cyB0aGF0IGNhbiB0YWtlIHRoZSBrZXlib2FyZCBmb2N1cy4KLSAgICAg
ICAgICAgIC8vTlNMb2coQCJDYW4ndCB0YWIgaW50byB0aGlzIHZpZXcuIik7Ci0gICAgICAgICAg
ICB2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXIgPSBuaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBEb25lLgotICAgIHJldHVybiB2aWV3V2VNYWRlRmlyc3RSZXNwb25kZXI7Ci19Ci0KLQot
Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0vLyBSZWxpbnF1aXNoRm9jdXMKLS8vLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0YXRpYyB2b2lkIFJlbGlucXVpc2hGb2N1cyhISVdl
YlZpZXcqIHZpZXcsIGJvb2wgaW5BdXRvZGlzcGxheSkKLXsKLSAgICBOU1Jlc3BvbmRlciogZmly
c3RSZXNwb25kZXI7Ci0KLSAgICAvLyBBcHBhcmVudGx5IENhcmJvbiB0aGlua3MgdGhhdCBzb21l
IHN1YnZpZXcgb2YgdGhpcyBjb250cm9sIHZpZXcgaGFzIHRoZSBrZXlib2FyZCBmb2N1cywKLSAg
ICAvLyBvciB3ZSB3b3VsZG4ndCBiZSBiZWluZyBhc2tlZCB0byByZWxpbnF1aXNoIGZvY3VzLgot
Ci0gICAgZmlyc3RSZXNwb25kZXIgPSBbdmlldy0+ZktpdFdpbmRvdyBmaXJzdFJlc3BvbmRlcl07
Ci0gICAgaWYgKFtmaXJzdFJlc3BvbmRlciBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkg
ewotICAgICAgICAvLyBTb21lIHN1YnZpZXcgb2YgdGhpcyBjb250cm9sIHZpZXcgcmVhbGx5IGlz
IHRoZSBmaXJzdCByZXNwb25kZXIgcmlnaHQgbm93LgotICAgICAgICBBU1NFUlQoWyhOU1ZpZXcg
KilmaXJzdFJlc3BvbmRlciBpc0Rlc2NlbmRhbnRPZjp2aWV3LT5mV2ViVmlld10pOwotCi0gICAg
ICAgIC8vIE1ha2UgdGhlIHdpbmRvdyB0aGUgZmlyc3QgcmVzcG9uZGVyLCBzbyB0aGF0IG5vIHZp
ZXcgaXMgdGhlIGtleSB2aWV3LgotICAgICAgICBbdmlldy0+ZktpdFdpbmRvdyBtYWtlRmlyc3RS
ZXNwb25kZXI6dmlldy0+ZktpdFdpbmRvd107Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBjb250cm9s
IGlzIG5vdCBhbGxvd2VkIHRvIGRvIGF1dG9kaXNwbGF5LCBkb24ndCBsZXQKLSAgICAgICAgLy8g
aXQgYXV0b2Rpc3BsYXkgYW55IGp1c3QtY2hhbmdlZCBmb2N1cyByaW5ncyBvciB0ZXh0IG9uIHRo
ZQotICAgICAgICAvLyBuZXh0IGdvIGFyb3VuZCB0aGUgZXZlbnQgbG9vcC4gSSdtIHByb2JhYmx5
IGNsZWFyaW5nIG1vcmUKLSAgICAgICAgLy8gZGlydHkgcmVjdHMgdGhhbiBJIGhhdmUgdG8sIGJ1
dCBpdCBkb2Vzbid0IHNlZW0gdG8gaHVydCBpbgotICAgICAgICAvLyB0aGUgcHJpbnQgcGFuZWwg
YWNjZXNzb3J5IHZpZXcgY2FzZSwgYW5kIEkgZG9uJ3QgaGF2ZSB0aW1lCi0gICAgICAgIC8vIHRv
IGZpZ3VyZSBvdXQgZXhhY3RseSB3aGF0IC1bTlNDZWxsIF9zZXRLZXlib2FyZEZvY3VzUmluZ05l
ZWRzRGlzcGxheV0KLSAgICAgICAgLy8gaXMgZG9pbmcgd2hlbiBpbnZva2VkIGluZGlyZWN0bHkg
ZnJvbSAtbWFrZUZpcnN0UmVzcG9uZGVyIHVwIGFib3ZlLiBNLlAuIE5vdGljZSAtIDEyLzQvMDAK
LQotICAgICAgICBpZiAoIWluQXV0b2Rpc3BsYXkpCi0gICAgICAgICAgICBbW3ZpZXctPmZXZWJW
aWV3IG9wYXF1ZUFuY2VzdG9yXSBfY2xlYXJEaXJ0eVJlY3RzRm9yVHJlZV07Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgLy8gVGhlIENvY29hIGZpcnN0IHJlc3BvbmRlciBkb2VzIG5vdCBjb3JyZXNw
b25kIHRvIHRoZSBDYXJib24KLSAgICAgICAgLy8gY29udHJvbCB0aGF0IGhhcyB0aGUga2V5Ym9h
cmQgZm9jdXMuIFRoaXMgY2FuIGhhcHBlbiB3aGVuCi0gICAgICAgIC8vIHlvdSd2ZSBjbG9zZWQg
YSBkaWFsb2cgYnkgaGl0dGluZyByZXR1cm4gaW4gYW4gTlNUZXh0VmlldwotICAgICAgICAvLyB0
aGF0J3MgYSBzdWJ2aWV3IG9mIHRoaXMgb25lOyBDb2NvYSBjbG9zZWQgdGhlIHdpbmRvdywgYW5k
Ci0gICAgICAgIC8vIG5vdyBDYXJib24gaXMgdGVsbGluZyB0aGlzIGNvbnRyb2wgdG8gcmVsaW5x
dWlzaCB0aGUgZm9jdXMKLSAgICAgICAgLy8gYXMgaXQncyBiZWluZyBkaXNwb3NlZC4gVGhlcmUn
cyBub3RoaW5nIHRvIGRvLgotCi0gICAgICAgIEFTU0VSVChmaXJzdFJlc3BvbmRlciA9PSB2aWV3
LT5mS2l0V2luZG93KTsKLSAgICB9Ci19Ci0KLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ly8gQWN0aXZlU3RhdGVDaGFuZ2VkCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1z
dGF0aWMgdm9pZCBBY3RpdmVTdGF0ZUNoYW5nZWQoSElXZWJWaWV3KiB2aWV3KQotewotSUdOT1JF
X1dBUk5JTkdTX0JFR0lOKCJ1bmRlY2xhcmVkLXNlbGVjdG9yIikKLSAgICBpZiAoW3ZpZXctPmZX
ZWJWaWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Ioc2V0RW5hYmxlZCldKSB7Ci0gICAg
ICAgIFsoTlNDb250cm9sKil2aWV3LT5mV2ViVmlldyBzZXRFbmFibGVkOiBJc0NvbnRyb2xFbmFi
bGVkKHZpZXctPmZWaWV3UmVmKV07Ci0gICAgICAgIEhJVmlld1NldE5lZWRzRGlzcGxheSh2aWV3
LT5mVmlld1JlZiwgdHJ1ZSk7Ci0gICAgfQotSUdOT1JFX1dBUk5JTkdTX0VORAotfQotCi0KLS8v
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUHJvY2Vzc0NvbW1hbmQKLS8vLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8KLXN0YXRpYyBPU1N0YXR1cyBQcm9jZXNzQ29tbWFuZChISVdl
YlZpZXcqIGluVmlldywgY29uc3QgSElDb21tYW5kKiBpbkNvbW1hbmQpCi17Ci0gICAgT1NTdGF0
dXMgcmVzdWx0ID0gZXZlbnROb3RIYW5kbGVkRXJyOwotICAgIE5TUmVzcG9uZGVyKiByZXNwOwot
ICAgIAotICAgIHJlc3AgPSBbaW5WaWV3LT5mS2l0V2luZG93IGZpcnN0UmVzcG9uZGVyXTsKLQot
ICAgIGlmIChbcmVzcCBpc0tpbmRPZkNsYXNzOltOU1ZpZXcgY2xhc3NdXSkgewotICAgICAgICBO
U1ZpZXcqIHJlc3BWaWV3ID0gKE5TVmlldyopcmVzcDsKLQotICAgICAgICBpZiAocmVzcFZpZXcg
PT0gaW5WaWV3LT5mV2ViVmlldyB8fCBbcmVzcFZpZXcgaXNEZXNjZW5kYW50T2Y6IGluVmlldy0+
ZldlYlZpZXddKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGluQ29tbWFuZC0+Y29tbWFuZElEKSB7
Ci0gICAgICAgICAgICBjYXNlIGtISUNvbW1hbmRDdXQ6Ci0gICAgICAgICAgICBjYXNlIGtISUNv
bW1hbmRDb3B5OgotICAgICAgICAgICAgY2FzZSBrSElDb21tYW5kUGFzdGU6Ci0gICAgICAgICAg
ICBjYXNlIGtISUNvbW1hbmRDbGVhcjoKLSAgICAgICAgICAgIGNhc2Uga0hJQ29tbWFuZFNlbGVj
dEFsbDogewotICAgICAgICAgICAgICAgIFNFTCBzZWxlY3RvciA9IF9OU1NlbGVjdG9yRm9ySElD
b21tYW5kKGluQ29tbWFuZCk7Ci0gICAgICAgICAgICAgICAgaWYgKFtyZXNwVmlldyByZXNwb25k
c1RvU2VsZWN0b3I6c2VsZWN0b3JdKSB7Ci0gICAgICAgICAgICAgICAgICAgIFtyZXNwVmlldyBw
ZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Igd2l0aE9iamVjdDpuaWxdOwotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBub0VycjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0vLyBVcGRhdGVDb21tYW5kU3RhdHVzCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8v
Ci1zdGF0aWMgT1NTdGF0dXMKLVVwZGF0ZUNvbW1hbmRTdGF0dXMoSElXZWJWaWV3KiBpblZpZXcs
IGNvbnN0IEhJQ29tbWFuZCogaW5Db21tYW5kKQotewotICAgIE9TU3RhdHVzIHJlc3VsdCA9IGV2
ZW50Tm90SGFuZGxlZEVycjsKLSAgICBNZW51SXRlbVByb3h5KiBwcm94eSA9IG51bGxwdHI7Ci0g
ICAgTlNSZXNwb25kZXIqIHJlc3A7Ci0gICAgCi0gICAgcmVzcCA9IFtpblZpZXctPmZLaXRXaW5k
b3cgZmlyc3RSZXNwb25kZXJdOwotICAgIAotICAgIGlmIChbcmVzcCBpc0tpbmRPZkNsYXNzOltO
U1ZpZXcgY2xhc3NdXSkgewotICAgICAgICBOU1ZpZXcqIHJlc3BWaWV3ID0gKE5TVmlldyopcmVz
cDsKLQotICAgICAgICBpZiAoKHJlc3BWaWV3ID09IGluVmlldy0+ZldlYlZpZXcgfHwgW3Jlc3BW
aWV3IGlzRGVzY2VuZGFudE9mOiBpblZpZXctPmZXZWJWaWV3XSkgJiYgaW5Db21tYW5kLT5hdHRy
aWJ1dGVzICYga0hJQ29tbWFuZEZyb21NZW51KSB7Ci0gICAgICAgICAgICBTRUwgc2VsZWN0b3Ig
PSBfTlNTZWxlY3RvckZvckhJQ29tbWFuZChpbkNvbW1hbmQpOwotICAgIAotICAgICAgICAgICAg
aWYgKHNlbGVjdG9yICYmIFtyZXNwIHJlc3BvbmRzVG9TZWxlY3Rvcjogc2VsZWN0b3JdKSB7Ci0g
ICAgICAgICAgICAgICAgcHJveHkgPSBbW01lbnVJdGVtUHJveHkgYWxsb2NdIGluaXRXaXRoQWN0
aW9uOiBzZWxlY3Rvcl07Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8v
IENhbid0IHVzZSAtcGVyZm9ybVNlbGVjdG9yOndpdGhPYmplY3Q6IGhlcmUgYmVjYXVzZSB0aGUg
bWV0aG9kIHdlJ3JlIGNhbGxpbmcgcmV0dXJucyBCT09MLCB3aGlsZQotICAgICAgICAgICAgICAg
IC8vIC1wZXJmb3JtU2VsZWN0b3I6d2l0aE9iamVjdDoncyByZXR1cm4gdmFsdWUgaXMgYXNzdW1l
ZCB0byBiZSBhbiBpZC4KLSAgICAgICAgICAgICAgICBpZiAod3RmT2JqQ01zZ1NlbmQ8Qk9PTD4o
cmVzcCwgQHNlbGVjdG9yKHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06KSwgcHJveHkpKQotICAg
ICAgICAgICAgICAgICAgICBFbmFibGVNZW51SXRlbShpbkNvbW1hbmQtPm1lbnUubWVudVJlZiwg
aW5Db21tYW5kLT5tZW51Lm1lbnVJdGVtSW5kZXgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgRGlzYWJsZU1lbnVJdGVtKGluQ29tbWFuZC0+bWVudS5tZW51UmVm
LCBpbkNvbW1hbmQtPm1lbnUubWVudUl0ZW1JbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIGlmIChwcm94eSkKLSAgICAgICAgW3Byb3h5IHJlbGVhc2VdOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gQmxhdGFudGx5IHN0b2xlbiBmcm9tIEFwcEtp
dCBhbmQgY3JvcHBlZCBhIGJpdAotCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIF9O
U1NlbGVjdG9yRm9ySElDb21tYW5kCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vCi1z
dGF0aWMgU0VMIF9OU1NlbGVjdG9yRm9ySElDb21tYW5kKGNvbnN0IEhJQ29tbWFuZCogaW5Db21t
YW5kKQotewotSUdOT1JFX1dBUk5JTkdTX0JFR0lOKCJ1bmRlY2xhcmVkLXNlbGVjdG9yIikKLSAg
ICBzd2l0Y2ggKGluQ29tbWFuZC0+Y29tbWFuZElEKSB7Ci0gICAgY2FzZSBrSElDb21tYW5kVW5k
bzoKLSAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcih1bmRvOik7Ci0gICAgY2FzZSBrSElDb21tYW5k
UmVkbzoKLSAgICAgICAgcmV0dXJuIEBzZWxlY3RvcihyZWRvOik7Ci0gICAgY2FzZSBrSElDb21t
YW5kQ3V0OgotICAgICAgICByZXR1cm4gQHNlbGVjdG9yKGN1dDopOwotICAgIGNhc2Uga0hJQ29t
bWFuZENvcHk6Ci0gICAgICAgIHJldHVybiBAc2VsZWN0b3IoY29weTopOwotICAgIGNhc2Uga0hJ
Q29tbWFuZFBhc3RlOgotICAgICAgICByZXR1cm4gQHNlbGVjdG9yKHBhc3RlOik7Ci0gICAgY2Fz
ZSBrSElDb21tYW5kQ2xlYXI6Ci0gICAgICAgIHJldHVybiBAc2VsZWN0b3IoZGVsZXRlOik7Ci0g
ICAgY2FzZSBrSElDb21tYW5kU2VsZWN0QWxsOgotICAgICAgICByZXR1cm4gQHNlbGVjdG9yKHNl
bGVjdEFsbDopOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LUlHTk9SRV9XQVJOSU5HU19FTkQKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi0KLS8vLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vICAgIEhJV2ViVmlld0V2ZW50SGFuZGxlcgotLy8t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gICAgT3VyIG9iamVjdCdzIHZpcnR1YWwgZXZl
bnQgaGFuZGxlciBtZXRob2QuIEknbSBub3Qgc3VyZSBpZiB3ZSBuZWVkIHRoaXMgdGhlc2UgZGF5
cy4KLS8vICAgIFdlIHVzZWQgdG8gZG8gdmFyaW91cyB0aGluZ3Mgd2l0aCBpdCwgYnV0IHRob3Nl
IGRheXMgYXJlIGxvbmcgZ29uZS4uLgotLy8KLXN0YXRpYyBPU1N0YXR1cwotSElXZWJWaWV3RXZl
bnRIYW5kbGVyKEV2ZW50SGFuZGxlckNhbGxSZWYgaW5DYWxsUmVmLCBFdmVudFJlZiBpbkV2ZW50
LCB2b2lkICppblVzZXJEYXRhKQotewotICAgIE9TU3RhdHVzIHJlc3VsdCA9IGV2ZW50Tm90SGFu
ZGxlZEVycjsKLSAgICBISVBvaW50IHdoZXJlOwotICAgIE9TVHlwZSB0YWc7Ci0gICAgdm9pZCAq
cHRyOwotICAgIFNpemUgc2l6ZTsKLSAgICBVSW50MzIgZmVhdHVyZXM7Ci0gICAgUmduSGFuZGxl
IHJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgQ29udHJvbFBhcnRDb2RlIHBhcnQ7Ci0gICAgSElXZWJW
aWV3KiB2aWV3ID0gKEhJV2ViVmlldyopaW5Vc2VyRGF0YTsKLQotICAgIC8vIFtOU0FwcCBzZXRX
aW5kb3dzTmVlZFVwZGF0ZTpZRVNdIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBldmVudHMgc28gdGhh
dCBBY3RpdmF0ZVRTTURvY3VtZW50IGlzIGNhbGxlZCB0byBzZXQgYW4gYWN0aXZlIGRvY3VtZW50
LiAKLSAgICAvLyBXaXRob3V0IGFuIGFjdGl2ZSBkb2N1bWVudCwgVFNNIHdpbGwgdXNlIGEgZGVm
YXVsdCBkb2N1bWVudCB3aGljaCB1c2VzIGEgYm90dG9tLWxpbmUgaW5wdXQgd2luZG93IHdoaWNo
IHdlIGRvbid0IHdhbnQuCi0gICAgW05TQXBwIHNldFdpbmRvd3NOZWVkVXBkYXRlOllFU107Ci0g
ICAgICAgIAotICAgIHN3aXRjaCAoR2V0RXZlbnRDbGFzcyhpbkV2ZW50KSkgewotICAgIGNhc2Ug
a0V2ZW50Q2xhc3NISU9iamVjdDoKLSAgICAgICAgc3dpdGNoIChHZXRFdmVudEtpbmQoaW5FdmVu
dCkpIHsKLSAgICAgICAgY2FzZSBrRXZlbnRISU9iamVjdENvbnN0cnVjdDoKLSAgICAgICAgICAg
IEhJT2JqZWN0UmVmIG9iamVjdDsKLQotICAgICAgICAgICAgcmVzdWx0ID0gR2V0RXZlbnRQYXJh
bWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1ISU9iamVjdEluc3RhbmNlLAotICAgICAgICAgICAg
dHlwZUhJT2JqZWN0UmVmLCBudWxscHRyLCBzaXplb2YoSElPYmplY3RSZWYpLCBudWxscHRyLCAm
b2JqZWN0KTsKLSAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0KTsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgLy8g
b24gZW50cnkgZm9yIG91ciBjb25zdHJ1Y3QgZXZlbnQsIHdlJ3JlIHBhc3NlZCB0aGUKLSAgICAg
ICAgICAgIC8vIGNyZWF0aW9uIHByb2Mgd2UgcmVnaXN0ZXJlZCB3aXRoIGZvciB0aGlzIGNsYXNz
LgotICAgICAgICAgICAgLy8gd2UgdXNlIGl0IG5vdyB0byBjcmVhdGUgdGhlIGluc3RhbmNlLCBh
bmQgdGhlbiB3ZQotICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgaW5zdGFuY2UgcGFyYW1ldGVy
IGRhdGEgd2l0aCBzYWlkIGluc3RhbmNlCi0gICAgICAgICAgICAvLyBhcyB0eXBlIHZvaWQuCi0K
LSAgICAgICAgICAgIHZpZXcgPSBISVdlYlZpZXdDb25zdHJ1Y3RvcigoSElWaWV3UmVmKW9iamVj
dCk7Ci0KLSAgICAgICAgICAgIGlmICh2aWV3KQotICAgICAgICAgICAgICAgIFNldEV2ZW50UGFy
YW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtSElPYmplY3RJbnN0YW5jZSwgdHlwZVZvaWRQdHIs
IHNpemVvZih2b2lkICopLCAmdmlldyk7IAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2Uga0V2ZW50SElPYmplY3REZXN0cnVjdDoKLSAgICAgICAgICAg
IEhJV2ViVmlld0Rlc3RydWN0b3Iodmlldyk7Ci0gICAgICAgICAgICAvLyByZXN1bHQgaXMgdW5p
bXBvcnRhbnQKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBrRXZlbnRDbGFzc0tleWJvYXJkOiB7Ci0gICAgICAgIE5TRXZlbnQqIGtpdEV2
ZW50ID0gQ3JlYXRlTlNFdmVudFdpdGhDYXJib25FdmVudChpbkV2ZW50KTsKLSAgICAgICAgW3Zp
ZXctPmZLaXRXaW5kb3cgc2VuZFN1cGVyRXZlbnQ6a2l0RXZlbnRdOwotICAgICAgICBba2l0RXZl
bnQgcmVsZWFzZV07Ci0gICAgICAgIHJlc3VsdCA9IG5vRXJyOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBjYXNlIGtFdmVudENsYXNzTW91c2U6Ci0gICAgICAgIHN3aXRjaCAoR2V0RXZl
bnRLaW5kKGluRXZlbnQpKSB7Ci0gICAgICAgIGNhc2Uga0V2ZW50TW91c2VVcDoKLSAgICAgICAg
ICAgIHJlc3VsdCA9IE1vdXNlVXAodmlldywgaW5FdmVudCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgCi0gICAgICAgIGNhc2Uga0V2ZW50TW91c2VXaGVlbE1vdmVkOgotICAgICAgICAg
ICAgcmVzdWx0ID0gTW91c2VXaGVlbE1vdmVkKHZpZXcsIGluRXZlbnQpOwotICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBrRXZlbnRNb3VzZU1vdmVkOgotICAgICAgICAgICAgcmVz
dWx0ID0gTW91c2VNb3ZlZCh2aWV3LCBpbkV2ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2Uga0V2ZW50TW91c2VEcmFnZ2VkOgotICAgICAgICAgICAgcmVzdWx0ID0gTW91
c2VEcmFnZ2VkKHZpZXcsIGluRXZlbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGtFdmVudENsYXNzQ29tbWFuZDoKLSAgICAgICAg
SElDb21tYW5kIGNvbW1hbmQ7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBh
cmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJhbURpcmVjdE9iamVjdCwgdHlwZUhJQ29tbWFuZCwg
bnVsbHB0ciwgc2l6ZW9mKEhJQ29tbWFuZCksIG51bGxwdHIsICZjb21tYW5kKTsKLSAgICAgICAg
QVNTRVJUKCFyZXN1bHQpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLQotICAgICAgICBzd2l0Y2ggKEdldEV2ZW50S2luZChpbkV2ZW50KSkgewotICAg
ICAgICBjYXNlIGtFdmVudENvbW1hbmRQcm9jZXNzOgotICAgICAgICAgICAgcmVzdWx0ID0gUHJv
Y2Vzc0NvbW1hbmQodmlldywgJmNvbW1hbmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgCi0g
ICAgICAgIGNhc2Uga0V2ZW50Q29tbWFuZFVwZGF0ZVN0YXR1czoKLSAgICAgICAgICAgIHJlc3Vs
dCA9IFVwZGF0ZUNvbW1hbmRTdGF0dXModmlldywgJmNvbW1hbmQpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGtFdmVudENsYXNzQ29u
dHJvbDoKLSAgICAgICAgc3dpdGNoIChHZXRFdmVudEtpbmQoaW5FdmVudCkpIHsKLSAgICAgICAg
Y2FzZSBrRXZlbnRDb250cm9sSW5pdGlhbGl6ZToKLSAgICAgICAgICAgIGZlYXR1cmVzID0gR2V0
QmVoYXZpb3JzKCk7Ci0gICAgICAgICAgICBTZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZl
bnRQYXJhbUNvbnRyb2xGZWF0dXJlcywgdHlwZVVJbnQzMiwgc2l6ZW9mKFVJbnQzMiksICZmZWF0
dXJlcyk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub0VycjsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbERyYXc6IHsKLSAgICAgICAgICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIo
aW5FdmVudCwga0V2ZW50UGFyYW1SZ25IYW5kbGUsIHR5cGVRRFJnbkhhbmRsZSwgbnVsbHB0ciwg
c2l6ZW9mKFJnbkhhbmRsZSksIG51bGxwdHIsICZyZWdpb24pOwotICAgICAgICAgICAgR2V0RXZl
bnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1DR0NvbnRleHRSZWYsIHR5cGVDR0NvbnRl
eHRSZWYsIG51bGxwdHIsIHNpemVvZihDR0NvbnRleHRSZWYpLCBudWxscHRyLCAmY29udGV4dCk7
Ci0KLSAgICAgICAgICAgIERyYXcodmlldywgcmVnaW9uLCBjb250ZXh0KTsKLSAgICAgICAgICAg
IHJlc3VsdCA9IG5vRXJyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIGtFdmVudENvbnRyb2xIaXRUZXN0OgotICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0
ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Nb3VzZUxvY2F0aW9uLCB0eXBlSElQb2ludCwgbnVsbHB0
ciwgc2l6ZW9mKEhJUG9pbnQpLCBudWxscHRyLCAmd2hlcmUpOwotICAgICAgICAgICAgcGFydCA9
IEhpdFRlc3QodmlldywgJndoZXJlKTsKLSAgICAgICAgICAgIFNldEV2ZW50UGFyYW1ldGVyKGlu
RXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUsIHNpemVv
ZihDb250cm9sUGFydENvZGUpLCAmcGFydCk7Ci0gICAgICAgICAgICByZXN1bHQgPSBub0VycjsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbEdldFBhcnRS
ZWdpb246Ci0gICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJh
bUNvbnRyb2xQYXJ0LCB0eXBlQ29udHJvbFBhcnRDb2RlLCBudWxscHRyLCBzaXplb2YoQ29udHJv
bFBhcnRDb2RlKSwgbnVsbHB0ciwgJnBhcnQpOwotICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0
ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUmVnaW9uLCB0eXBlUURSZ25IYW5kbGUsIG51
bGxwdHIsIHNpemVvZihSZ25IYW5kbGUpLCBudWxscHRyLCAmcmVnaW9uKTsKLSAgICAgICAgICAg
IHJlc3VsdCA9IEdldFJlZ2lvbih2aWV3LCBwYXJ0LCByZWdpb24pOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbEdldERhdGE6
IHsKLSAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29u
dHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUsIG51bGxwdHIsIHNpemVvZihDb250cm9sUGFy
dENvZGUpLCBudWxscHRyLCAmcGFydCk7Ci0gICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihp
bkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xEYXRhVGFnLCB0eXBlRW51bWVyYXRpb24sIG51bGxw
dHIsIHNpemVvZihPU1R5cGUpLCBudWxscHRyLCAmdGFnKTsKLSAgICAgICAgICAgIEdldEV2ZW50
UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbERhdGFCdWZmZXIsIHR5cGVQdHIs
IG51bGxwdHIsIHNpemVvZihQdHIpLCBudWxscHRyLCAmcHRyKTsKLSAgICAgICAgICAgIEdldEV2
ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29udHJvbERhdGFCdWZmZXJTaXplLCB0
eXBlQnl0ZUNvdW50LCBudWxscHRyLCBzaXplb2YoU2l6ZSksIG51bGxwdHIsICZzaXplKTsKLQot
ICAgICAgICAgICAgaWYgKHRhZyA9PSBrQ29udHJvbEtpbmRUYWcpIHsKLSAgICAgICAgICAgICAg
ICBTaXplIG91dFNpemU7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbm9FcnI7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAocHRyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaXplICE9IHNp
emVvZihDb250cm9sS2luZCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBlcnJE
YXRhU2l6ZU1pc21hdGNoOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICAoKihDb250cm9sS2luZCAqKXB0cikgPSBHZXRLaW5kKCk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgb3V0U2l6ZSA9IHNpemVvZihDb250cm9sS2luZCk7
Ci0gICAgICAgICAgICAgICAgU2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1D
b250cm9sRGF0YUJ1ZmZlclNpemUsIHR5cGVCeXRlQ291bnQsIHNpemVvZihTaXplKSwgJm91dFNp
emUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYXNlIGtFdmVudENvbnRyb2xCb3VuZHNDaGFuZ2VkOiB7Ci0gICAgICAgICAgICBISVJl
Y3QgcHJldlJlY3QsIGN1cnJSZWN0OwotICAgICAgICAgICAgVUludDMyIGF0dHJzOwotICAgICAg
ICAKLSAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQXR0
cmlidXRlcywgdHlwZVVJbnQzMiwgbnVsbHB0ciwgc2l6ZW9mKFVJbnQzMiksIG51bGxwdHIsICZh
dHRycyk7Ci0gICAgICAgICAgICBHZXRFdmVudFBhcmFtZXRlcihpbkV2ZW50LCBrRXZlbnRQYXJh
bU9yaWdpbmFsQm91bmRzLCB0eXBlSElSZWN0LCBudWxscHRyLCBzaXplb2YoSElSZWN0KSwgbnVs
bHB0ciwgJnByZXZSZWN0KTsKLSAgICAgICAgICAgIEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQs
IGtFdmVudFBhcmFtQ3VycmVudEJvdW5kcywgdHlwZUhJUmVjdCwgbnVsbHB0ciwgc2l6ZW9mKEhJ
UmVjdCksIG51bGxwdHIsICZjdXJyUmVjdCk7Ci0KLSAgICAgICAgICAgIEJvdW5kc0NoYW5nZWQo
dmlldywgYXR0cnMsICZwcmV2UmVjdCwgJmN1cnJSZWN0KTsKLSAgICAgICAgICAgIHJlc3VsdCA9
IG5vRXJyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIGtF
dmVudENvbnRyb2xBY3RpdmF0ZToKLSAgICAgICAgICAgIEFjdGl2ZVN0YXRlQ2hhbmdlZCh2aWV3
KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgY2FzZSBrRXZlbnRDb250cm9sRGVhY3RpdmF0ZToKLSAgICAgICAgICAgIEFjdGl2ZVN0
YXRlQ2hhbmdlZCh2aWV3KTsKLSAgICAgICAgICAgIHJlc3VsdCA9IG5vRXJyOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBjYXNlIGtFdmVudENvbnRyb2xPd25pbmdXaW5k
b3dDaGFuZ2VkOiB7Ci0gICAgICAgICAgICBXaW5kb3dSZWYgZnJvbVdpbmRvdywgdG9XaW5kb3c7
Ci0KLSAgICAgICAgICAgIHJlc3VsdCA9IEdldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVu
dFBhcmFtQ29udHJvbE9yaWdpbmFsT3duaW5nV2luZG93LCB0eXBlV2luZG93UmVmLCBudWxscHRy
LCBzaXplb2YoV2luZG93UmVmKSwgbnVsbHB0ciwgJmZyb21XaW5kb3cpOwotICAgICAgICAgICAg
QVNTRVJUKCFyZXN1bHQpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgICAgICByZXN1bHQgPSBHZXRFdmVudFBhcmFtZXRl
cihpbkV2ZW50LCBrRXZlbnRQYXJhbUNvbnRyb2xDdXJyZW50T3duaW5nV2luZG93LCB0eXBlV2lu
ZG93UmVmLCBudWxscHRyLCBzaXplb2YoV2luZG93UmVmKSwgbnVsbHB0ciwgJnRvV2luZG93KTsK
LSAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICAgICAgT3duaW5nV2luZG93
Q2hhbmdlZCh2aWV3LCBmcm9tV2luZG93LCB0b1dpbmRvdyk7Ci0gICAgICAgICAgICByZXN1bHQg
PSBub0VycjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBr
RXZlbnRDb250cm9sQ2xpY2s6Ci0gICAgICAgICAgICByZXN1bHQgPSBDbGljayh2aWV3LCBpbkV2
ZW50KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2Uga0V2ZW50Q29udHJvbENvbnRleHR1YWxNZW51Q2xpY2s6Ci0g
ICAgICAgICAgICByZXN1bHQgPSBDb250ZXh0TWVudUNsaWNrKHZpZXcsIGluRXZlbnQpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBrRXZlbnRDb250cm9sU2V0Rm9jdXNQYXJ0OiB7Ci0gICAgICAgICAgICBDb250
cm9sUGFydENvZGUgZGVzaXJlZEZvY3VzOwotICAgICAgICAgICAgUmduSGFuZGxlIGludmFsaWRS
Z247Ci0gICAgICAgICAgICBCb29sZWFuIGZvY3VzRXZlcnl0aGluZzsKLSAgICAgICAgICAgIENv
bnRyb2xQYXJ0Q29kZSBhY3R1YWxGb2N1czsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVz
dWx0ID0gR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9sUGFydCwg
dHlwZUNvbnRyb2xQYXJ0Q29kZSwgbnVsbHB0ciwgc2l6ZW9mKENvbnRyb2xQYXJ0Q29kZSksIG51
bGxwdHIsICZkZXNpcmVkRm9jdXMpOyAKLSAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0KTsKLSAg
ICAgICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQot
ICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9s
SW52YWxSZ24sIHR5cGVRRFJnbkhhbmRsZSwgbnVsbHB0ciwgc2l6ZW9mKFJnbkhhbmRsZSksIG51
bGxwdHIsICZpbnZhbGlkUmduKTsKLSAgICAgICAgICAgIGZvY3VzRXZlcnl0aGluZyA9IGZhbHNl
OyAvLyBhIGdvb2QgZGVmYXVsdCBpbiBjYXNlIHRoZSBwYXJhbWV0ZXIgZG9lc24ndCBleGlzdAot
ICAgICAgICAgICAgR2V0RXZlbnRQYXJhbWV0ZXIoaW5FdmVudCwga0V2ZW50UGFyYW1Db250cm9s
Rm9jdXNFdmVyeXRoaW5nLCB0eXBlQm9vbGVhbiwgbnVsbHB0ciwgc2l6ZW9mKEJvb2xlYW4pLCBu
dWxscHRyLCAmZm9jdXNFdmVyeXRoaW5nKTsKLQotICAgICAgICAgICAgcmVzdWx0ID0gU2V0Rm9j
dXNQYXJ0KHZpZXcsIGRlc2lyZWRGb2N1cywgaW52YWxpZFJnbiwgZm9jdXNFdmVyeXRoaW5nLCAm
YWN0dWFsRm9jdXMpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBub0VycikKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoIVNldEV2ZW50UGFyYW1ldGVyKGluRXZlbnQsIGtFdmVudFBhcmFtQ29u
dHJvbFBhcnQsIHR5cGVDb250cm9sUGFydENvZGUsIHNpemVvZihDb250cm9sUGFydENvZGUpLCAm
YWN0dWFsRm9jdXMpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gc29tZSBvdGhlciBraW5kIG9mIENvbnRyb2wgZXZlbnQKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgLy8gc29t
ZSBvdGhlciBldmVudCBjbGFzcwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLXN0YXRpYyB2b2lkIFVwZGF0ZU9ic2VydmVyKENG
UnVuTG9vcE9ic2VydmVyUmVmIG9ic2VydmVyLCBDRlJ1bkxvb3BBY3Rpdml0eSBhY3Rpdml0eSwg
dm9pZCAqaW5mbyk7Ci0KLXN0YXRpYyB2b2lkIFN0YXJ0VXBkYXRlT2JzZXJ2ZXIoSElXZWJWaWV3
KiB2aWV3KQotewotICAgIENGUnVuTG9vcE9ic2VydmVyQ29udGV4dCBjb250ZXh0OwotICAgIENG
UnVuTG9vcE9ic2VydmVyUmVmIG9ic2VydmVyOwotICAgIENGUnVuTG9vcFJlZiBtYWluUnVuTG9v
cDsKLSAgICAKLSAgICBBU1NFUlQoIXZpZXctPmZJc0NvbXBvc2l0ZWQpOwotICAgIEFTU0VSVCgh
dmlldy0+ZlVwZGF0ZU9ic2VydmVyKTsKLQotICAgIGNvbnRleHQudmVyc2lvbiA9IDA7Ci0gICAg
Y29udGV4dC5pbmZvID0gdmlldzsKLSAgICBjb250ZXh0LnJldGFpbiA9IG51bGxwdHI7Ci0gICAg
Y29udGV4dC5yZWxlYXNlID0gbnVsbHB0cjsKLSAgICBjb250ZXh0LmNvcHlEZXNjcmlwdGlvbiA9
IG51bGxwdHI7Ci0KLSAgICBtYWluUnVuTG9vcCA9IGNoZWNrZWRfY2ZfY2FzdDxDRlJ1bkxvb3BS
ZWY+KEdldENGUnVuTG9vcEZyb21FdmVudExvb3AoR2V0TWFpbkV2ZW50TG9vcCgpKSk7Ci0gICAg
b2JzZXJ2ZXIgPSBDRlJ1bkxvb3BPYnNlcnZlckNyZWF0ZShudWxscHRyLCBrQ0ZSdW5Mb29wRW50
cnkgfCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZywgdHJ1ZSwgMCwgVXBkYXRlT2JzZXJ2ZXIsICZj
b250ZXh0KTsKLSAgICBDRlJ1bkxvb3BBZGRPYnNlcnZlcihtYWluUnVuTG9vcCwgb2JzZXJ2ZXIs
IGtDRlJ1bkxvb3BDb21tb25Nb2Rlcyk7IAotCi0gICAgdmlldy0+ZlVwZGF0ZU9ic2VydmVyID0g
b2JzZXJ2ZXI7Ci0gICAgCi0gICAgLy8gcHJpbnRmKCJVcGRhdGUgb2JzZXJ2ZXIgc3RhcnRlZFxu
Iik7Ci19Ci0KLXN0YXRpYyB2b2lkIFN0b3BVcGRhdGVPYnNlcnZlcihISVdlYlZpZXcqIHZpZXcp
Ci17Ci0gICAgQVNTRVJUKCF2aWV3LT5mSXNDb21wb3NpdGVkKTsKLSAgICBBU1NFUlQodmlldy0+
ZlVwZGF0ZU9ic2VydmVyKTsKLQotICAgIENGUnVuTG9vcE9ic2VydmVySW52YWxpZGF0ZSh2aWV3
LT5mVXBkYXRlT2JzZXJ2ZXIpOwotICAgIENGUmVsZWFzZSh2aWV3LT5mVXBkYXRlT2JzZXJ2ZXIp
OwotICAgIHZpZXctPmZVcGRhdGVPYnNlcnZlciA9IG51bGxwdHI7Ci0KLSAgICAvLyBwcmludGYo
IlVwZGF0ZSBvYnNlcnZlciByZW1vdmVkXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgCi1VcGRhdGVP
YnNlcnZlcihDRlJ1bkxvb3BPYnNlcnZlclJlZiBvYnNlcnZlciwgQ0ZSdW5Mb29wQWN0aXZpdHkg
YWN0aXZpdHksIHZvaWQgKmluZm8pCi17Ci0gICAgSElXZWJWaWV3KiB2aWV3ID0gKEhJV2ViVmll
dyopaW5mbzsKLSAgICBSZ25IYW5kbGUgcmVnaW9uID0gTmV3UmduKCk7Ci0KLSAgICAvLyBwcmlu
dGYoIlVwZGF0ZSBvYnNlcnZlciBjYWxsZWRcbiIpOwotCi0gICAgaWYgKHJlZ2lvbikgewotICAg
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICBHZXRXaW5k
b3dSZWdpb24oR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSwga1dpbmRvd1VwZGF0ZVJn
biwgcmVnaW9uKTsKLSAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECi0g
ICAgICAgIAotICAgICAgICBpZiAoIUVtcHR5UmduKHJlZ2lvbikpIHsKLSAgICAgICAgICAgIFJn
bkhhbmRsZSBvdXJSZ24gPSBOZXdSZ24oKTsKLSAgICAgICAgICAgIFJlY3QgcmVjdDsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgR2V0V2luZG93Qm91bmRzKEdldENvbnRyb2xPd25lcih2aWV3
LT5mVmlld1JlZiksIGtXaW5kb3dTdHJ1Y3R1cmVSZ24sICZyZWN0KTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gcHJpbnRmKCJVcGRhdGUgcmVnaW9uIGlzIG5vbi1lbXB0eVxuIik7Ci0g
ICAgICAgICAgICBpZiAob3VyUmduKSB7Ci0gICAgICAgICAgICAgICAgUmVjdCByZWN0OwotICAg
ICAgICAgICAgICAgIEdyYWZQdHIgc2F2ZVBvcnQsIHBvcnQ7Ci0gICAgICAgICAgICAgICAgUG9p
bnQgb2Zmc2V0ID0geyAwLCAwIH07Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
cG9ydCA9IEdldFdpbmRvd1BvcnQoR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR2V0UG9ydCgmc2F2ZVBvcnQpOwotICAg
ICAgICAgICAgICAgIFNldFBvcnQocG9ydCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgR2xvYmFsVG9Mb2NhbCgmb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICBPZmZzZXRSZ24o
cmVnaW9uLCBvZmZzZXQuaCwgb2Zmc2V0LnYpOwotCi0gICAgICAgICAgICAgICAgR2V0Q29udHJv
bEJvdW5kcyh2aWV3LT5mVmlld1JlZiwgJnJlY3QpOwotICAgICAgICAgICAgICAgIFJlY3RSZ24o
b3VyUmduLCAmcmVjdCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gcHJp
bnRmKCJvdXIgY29udHJvbCBpcyBhdCAlZCAlZCAlZCAlZFxuIiwgcmVjdC50b3AsIHJlY3QubGVm
dCwgcmVjdC5ib3R0b20sIHJlY3QucmlnaHQpOwotICAgICAgICAgICAgICAgIEdldFJlZ2lvbkJv
dW5kcyhyZWdpb24sICZyZWN0KTsKLSAgICAgICAgICAgICAgICAvLyBwcmludGYoInJlZ2lvbiBp
cyBhdCAlZCAlZCAlZCAlZFxuIiwgcmVjdC50b3AsIHJlY3QubGVmdCwgcmVjdC5ib3R0b20sIHJl
Y3QucmlnaHQpOwotCi0gICAgICAgICAgICAgICAgU2VjdFJnbihvdXJSZ24sIHJlZ2lvbiwgb3Vy
UmduKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHZXRSZWdpb25Cb3VuZHMo
b3VyUmduLCAmcmVjdCk7Ci0gICAgICAgICAgICAgICAgLy8gcHJpbnRmKCJpbnRlcnNlY3Rpb24g
aXMgICVkICVkICVkICVkXG4iLCByZWN0LnRvcCwgcmVjdC5sZWZ0LCByZWN0LmJvdHRvbSwgcmVj
dC5yaWdodCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFFbXB0eVJnbihvdXJSZ24pKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFJnbkhhbmRsZSBzYXZlVmlzID0gTmV3UmduKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBwcmludGYoImxvb2tzIGxpa2Ugd2Ug
c2hvdWxkIGRyYXdcbiIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2F2ZVZpcykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gUkdCQ29sb3Iga1JlZENvbG9yID0geyAweGZmZmYsIDAs
IDAgfTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdldFBvcnRWaXNpYmxlUmVnaW9uKEdldFdp
bmRvd1BvcnQoR2V0Q29udHJvbE93bmVyKHZpZXctPmZWaWV3UmVmKSksIHNhdmVWaXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgU2V0UG9ydFZpc2libGVSZWdpb24oR2V0V2luZG93UG9ydChH
ZXRDb250cm9sT3duZXIodmlldy0+ZlZpZXdSZWYpKSwgb3VyUmduKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUkdCRm9yZUNvbG9yKCZrUmVk
Q29sb3IpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFpbnRSZ24ob3VyUmduKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIFFERmx1c2hQb3J0QnVmZmVyKHBvcnQsIG51bGxwdHIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsYXkoMTUsIG51bGxwdHIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgRHJhdzFDb250cm9sKHZpZXctPmZWaWV3UmVmKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFZhbGlkV2luZG93UmduKEdldENvbnRyb2xPd25lcih2aWV3LT5mVmll
d1JlZiksIG91clJnbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFNldFBvcnRWaXNpYmxlUmVnaW9uKEdldFdpbmRvd1BvcnQoR2V0Q29udHJvbE93
bmVyKHZpZXctPmZWaWV3UmVmKSksIHNhdmVWaXMpOwotICAgICAgICAgICAgICAgICAgICAgICAg
RGlzcG9zZVJnbihzYXZlVmlzKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIFNldFBvcnQoc2F2ZVBvcnQpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIERpc3Bvc2VSZ24ob3VyUmduKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgRGlzcG9zZVJnbihyZWdpb24pOwotICAgIH0K
LX0KLQotI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>