<?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>66159</bug_id>
          
          <creation_ts>2011-08-12 13:13:01 -0700</creation_ts>
          <short_desc>REGRESSION(r92976): Does not compile on chromium-win (Requested by abarth|gardener on #webkit).</short_desc>
          <delta_ts>2011-08-12 13:16:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>66009</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Review Bot">webkit.review.bot</reporter>
          <assigned_to name="WebKit Review Bot">webkit.review.bot</assigned_to>
          <cc>abarth</cc>
    
    <cc>fishd</cc>
    
    <cc>fsamuel</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>450604</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-12 13:13:01 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/92976 broke the build:
Does not compile on chromium-win (Requested by abarth|gardener on #webkit).

This is an automatic bug report generated by the sheriff-bot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests case pain.

&quot;Only you can prevent forest fires.&quot; -- Smokey the Bear</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450605</commentid>
    <comment_count>1</comment_count>
      <attachid>103804</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-12 13:13:28 -0700</bug_when>
    <thetext>Created attachment 103804
ROLLOUT of r92976

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID --ignore-builders

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450608</commentid>
    <comment_count>2</comment_count>
      <attachid>103804</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-12 13:16:14 -0700</bug_when>
    <thetext>Comment on attachment 103804
ROLLOUT of r92976

Clearing flags on attachment: 103804

Committed r92983: &lt;http://trac.webkit.org/changeset/92983&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450609</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-08-12 13:16:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103804</attachid>
            <date>2011-08-12 13:13:28 -0700</date>
            <delta_ts>2011-08-12 13:16:14 -0700</delta_ts>
            <desc>ROLLOUT of r92976</desc>
            <filename>bug-66159-20110812201249.patch</filename>
            <type>text/plain</type>
            <size>137278</size>
            <attacher name="WebKit Review Bot">webkit.review.bot</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI5ODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZTFlYjBiZjFlM2NkMDcw
MWIxNDg5ZTEzYzY3MTYzOWM0ZGY2ODU3Li40MzlkNWM1NDFlNDkzY2E2MzMxYmJiYmI3ZjM2MGE1
NjUyNjQ2MjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAwIEBACisyMDExLTA4LTEyICBTaGVy
aWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KKworICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByOTI5NzYuCisgICAgICAgIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
Y2hhbmdlc2V0LzkyOTc2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NjE1OQorCisgICAgICAgIERvZXMgbm90IGNvbXBpbGUgb24gY2hyb21pdW0td2lu
IChSZXF1ZXN0ZWQgYnkgYWJhcnRofGdhcmRlbmVyCisgICAgICAgIG9uICN3ZWJraXQpLgorCisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BvcHVw
Q29udGFpbmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1
cENvbnRhaW5lci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BvcHVw
TGlzdEJveC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBM
aXN0Qm94Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpzZWxlY3RlZEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6bnVtSXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBMaXN0Qm94OjpzZXRCYXNlV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94
OjpzZXRNYXhIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpzZXRNYXhX
aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmRpc2Nvbm5lY3RDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjppdGVtcyk6CisgICAgICAgIChXZWJD
b3JlOjpQb3B1cExpc3RCb3g6OlBvcHVwTGlzdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1
cExpc3RCb3g6On5Qb3B1cExpc3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94
OjpzY3JvbGxUb1JldmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RS
ZWxhdGl2ZU1vdXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0UmVsYXRpdmVX
aGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wdXBDb250YWluZXI6OlBvcHVwQ29udGFpbmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyOjp+UG9wdXBDb250YWluZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UG9wdXBDb250YWluZXI6OmxheW91dEFuZENhbGN1bGF0ZVdpZGdldFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wdXBDb250YWluZXI6OnNob3dQb3B1cCk6CisgICAgICAgIChX
ZWJDb3JlOjpQb3B1cENvbnRhaW5lcjo6aGlkZVBvcHVwKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwQ29udGFpbmVyOjpub3RpZnlQb3B1cEhpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpQb3B1
cENvbnRhaW5lcjo6bGF5b3V0QW5kR2V0UlRMT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwQ29udGFpbmVyOjpoYW5kbGVNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQ
b3B1cENvbnRhaW5lcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UG9wdXBDb250YWluZXI6OmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlBvcHVwQ29udGFpbmVyOjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlBvcHVwQ29udGFpbmVyOjpoYW5kbGVUb3VjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwQ29udGFpbmVyOjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBDb250YWluZXI6OmhhbmRsZUtleUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwQ29u
dGFpbmVyOjpoaWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cENvbnRhaW5lcjo6cGFpbnRCb3JkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UG9wdXBDb250YWluZXI6OmlzSW50ZXJlc3RlZEluRXZlbnRGb3JLZXkpOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wdXBDb250YWluZXI6OmNocm9tZUNsaWVudENocm9taXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyOjpzaG93SW5SZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyOjpyZWZyZXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBv
cHVwQ29udGFpbmVyOjppc1JUTCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cENvbnRhaW5lcjo6
c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cENvbnRhaW5lcjo6bWVudUl0
ZW1IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBDb250YWluZXI6Om1lbnVJdGVtRm9u
dFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBDb250YWluZXI6Om1lbnVTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpwb3B1cERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBDb250
YWluZXI6OmdldFNlbGVjdGVkSXRlbVRvb2xUaXApOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBM
aXN0Qm94OjpoYW5kbGVNb3VzZURvd25FdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExp
c3RCb3g6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlz
dEJveDo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBM
aXN0Qm94OjpoYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJv
eDo6aXNJbnRlcmVzdGVkSW5FdmVudEZvcktleSk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExp
c3RCb3g6OmhhbmRsZVRvdWNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94
OjpoYW5kbGVHZXN0dXJlRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNDaGFyYWN0ZXJUeXBl
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpoYW5kbGVLZXlFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6Omhvc3RXaW5kb3cpOgorICAgICAgICAo
V2ViQ29yZTo6c3RyaXBMZWFkaW5nV2hpdGVTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1
cExpc3RCb3g6OnR5cGVBaGVhZEZpbmQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OnBhaW50Um93KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6Z2V0Um93Rm9udCk6CisgICAgICAgIChXZWJD
b3JlOjpQb3B1cExpc3RCb3g6OmFiYW5kb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0
Qm94Ojpwb2ludFRvUm93SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94Ojph
Y2NlcHRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OnNlbGVjdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6c2V0T3JpZ2luYWxJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmdldFJvd0hlaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpQb3B1cExpc3RCb3g6OmdldFJvd0JvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
b3B1cExpc3RCb3g6OmludmFsaWRhdGVSb3cpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0
Qm94OjpzY3JvbGxUb1JldmVhbFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6
OmlzU2VsZWN0YWJsZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpjbGVh
clNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OnNlbGVjdE5leHRS
b3cpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpzZWxlY3RQcmV2aW91c1Jvdyk6
CisgICAgICAgIChXZWJDb3JlOjpQb3B1cExpc3RCb3g6OmFkanVzdFNlbGVjdGVkSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94OjpoaWRlUG9wdXApOgorICAgICAgICAoV2Vi
Q29yZTo6UG9wdXBMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cExpc3RCb3g6OnNldE1heFdpZHRoQW5kTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlBvcHVwTGlzdEJveDo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTGlzdEJveDo6
Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBMaXN0Qm94Ojppc1BvaW50SW5Cb3VuZHMp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpQb3B1cEl0ZW06OlBvcHVwSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpQ
b3B1cENvbnRhaW5lcjo6bGlzdEJveCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cENvbnRhaW5l
cjo6cG9wdXBUeXBlKToKKwogMjAxMS0wOC0xMiAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5j
b20+CiAKICAgICAgICAgQ2FuY2VsIGluIG9uYmVmb3JldW5sb2FkIGRpYWxvZyBzb21ldGltZSBj
YXVzZXMgYSBidXR0b24gdG8gc3RvcCB3b3JraW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGVmMDU0
YmQ4MTdlNjI5ZWEzYTVhODI4MDczOGU0ZmM2NTU0ODRmOTUuLjhjNTQ1NTAxZTExOWQ1NDM2NmM1
NTlkMzYyMTFjZGVlOWU0ZTQ5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyNTYsMTIgKzMyNTYs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVDaHJvbWl1
bUd0ay5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtVGhlbWVD
aHJvbWl1bUd0ay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVdp
ZGdldC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cENvbnRhaW5lci5j
cHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwQ29udGFpbmVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uaCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBMaXN0Qm94LmNwcCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vUG9wdXBMaXN0Qm94LmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL1BvcHVwTWVudVByaXZhdGUuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9jaHJvbWl1bS9TY3JvbGxBbmltYXRvckNocm9taXVtTWFjLmgnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBDb250YWluZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBDb250YWluZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWM0NmU2NzFlZDk0MzhjYzZiYjRlYjI1OGQ5NzVjNmZk
OWIyZDA3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwQ29udGFpbmVyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDExLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQ
b3B1cENvbnRhaW5lci5oIgotCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21l
Q2xpZW50Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1l
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiRnJhbWVsZXNzU2Nyb2xsVmll
dy5oIgotI2luY2x1ZGUgIkZyYW1lbGVzc1Njcm9sbFZpZXdDbGllbnQuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUGFnZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiUG9wdXBMaXN0Qm94LmgiCi0jaW5jbHVkZSAi
UG9wdXBNZW51Q2xpZW50LmgiCi0jaW5jbHVkZSAiVXNlckdlc3R1cmVJbmRpY2F0b3IuaCIKLSNp
bmNsdWRlIDxsaW1pdHM+Ci0KLSNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCi0jaW5jbHVkZSAi
UGxhdGZvcm1HZXN0dXJlRXZlbnQuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKLSNpbmNsdWRlICJQbGF0Zm9ybVRvdWNoRXZlbnQuaCIKLSNlbmRpZgotCi11c2luZyBuYW1l
c3BhY2Ugc3RkOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBjb25zdCBpbnQga0Jv
cmRlclNpemUgPSAxOwotCi1zdGF0aWMgUGxhdGZvcm1Nb3VzZUV2ZW50IGNvbnN0cnVjdFJlbGF0
aXZlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWxlc3NTY3JvbGxW
aWV3KiBwYXJlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBGcmFtZWxlc3NTY3JvbGxWaWV3KiBjaGlsZCkKLXsKLSAgICBJbnRQb2ludCBw
b3MgPSBwYXJlbnQtPmNvbnZlcnRTZWxmVG9DaGlsZChjaGlsZCwgZS5wb3MoKSk7Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBpcyBhIGhvcnJpYmxlIGhhY2sgc2luY2UgUGxhdGZvcm1Nb3VzZUV2ZW50
IGhhcyBubyBzZXR0ZXJzIGZvciB4L3kuCi0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IHJlbGF0aXZl
RXZlbnQgPSBlOwotICAgIEludFBvaW50JiByZWxhdGl2ZVBvcyA9IGNvbnN0X2Nhc3Q8SW50UG9p
bnQmPihyZWxhdGl2ZUV2ZW50LnBvcygpKTsKLSAgICByZWxhdGl2ZVBvcy5zZXRYKHBvcy54KCkp
OwotICAgIHJlbGF0aXZlUG9zLnNldFkocG9zLnkoKSk7Ci0gICAgcmV0dXJuIHJlbGF0aXZlRXZl
bnQ7Ci19Ci0KLXN0YXRpYyBQbGF0Zm9ybVdoZWVsRXZlbnQgY29uc3RydWN0UmVsYXRpdmVXaGVl
bEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lbGVzc1Njcm9sbFZpZXcqIHBh
cmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZyYW1lbGVzc1Njcm9sbFZpZXcqIGNoaWxkKQotewotICAgIEludFBvaW50IHBvcyA9IHBh
cmVudC0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxkLCBlLnBvcygpKTsKLQotICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGEgaG9ycmlibGUgaGFjayBzaW5jZSBQbGF0Zm9ybVdoZWVsRXZlbnQgaGFzIG5v
IHNldHRlcnMgZm9yIHgveS4KLSAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgcmVsYXRpdmVFdmVudCA9
IGU7Ci0gICAgSW50UG9pbnQmIHJlbGF0aXZlUG9zID0gY29uc3RfY2FzdDxJbnRQb2ludCY+KHJl
bGF0aXZlRXZlbnQucG9zKCkpOwotICAgIHJlbGF0aXZlUG9zLnNldFgocG9zLngoKSk7Ci0gICAg
cmVsYXRpdmVQb3Muc2V0WShwb3MueSgpKTsKLSAgICByZXR1cm4gcmVsYXRpdmVFdmVudDsKLX0K
LQotLy8gc3RhdGljCi1QYXNzUmVmUHRyPFBvcHVwQ29udGFpbmVyPiBQb3B1cENvbnRhaW5lcjo6
Y3JlYXRlKFBvcHVwTWVudUNsaWVudCogY2xpZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQb3B1cFR5cGUgcG9wdXBUeXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb3B1cENvbnRh
aW5lclNldHRpbmdzJiBzZXR0aW5ncykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBvcHVw
Q29udGFpbmVyKGNsaWVudCwgcG9wdXBUeXBlLCBzZXR0aW5ncykpOwotfQotCi1Qb3B1cENvbnRh
aW5lcjo6UG9wdXBDb250YWluZXIoUG9wdXBNZW51Q2xpZW50KiBjbGllbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUG9wdXBUeXBlIHBvcHVwVHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBQb3B1cENvbnRhaW5lclNldHRpbmdzJiBzZXR0aW5ncykK
LSAgICA6IG1fbGlzdEJveChQb3B1cExpc3RCb3g6OmNyZWF0ZShjbGllbnQsIHNldHRpbmdzKSkK
LSAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCi0gICAgLCBtX3BvcHVwVHlwZShwb3B1cFR5cGUp
Ci0gICAgLCBtX3BvcHVwT3BlbihmYWxzZSkKLXsKLSAgICBzZXRTY3JvbGxiYXJNb2RlcyhTY3Jv
bGxiYXJBbHdheXNPZmYsIFNjcm9sbGJhckFsd2F5c09mZik7Ci19Ci0KLVBvcHVwQ29udGFpbmVy
Ojp+UG9wdXBDb250YWluZXIoKQotewotICAgIGlmIChtX2xpc3RCb3ggJiYgbV9saXN0Qm94LT5w
YXJlbnQoKSkKLSAgICAgICAgcmVtb3ZlQ2hpbGQobV9saXN0Qm94LmdldCgpKTsKLX0KLQotSW50
UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2FsY3VsYXRlV2lkZ2V0UmVjdChpbnQgdGFy
Z2V0Q29udHJvbEhlaWdodCwgY29uc3QgSW50UG9pbnQmIHBvcHVwSW5pdGlhbENvb3JkaW5hdGUp
Ci17Ci0gICAgLy8gUmVzZXQgdGhlIG1heCB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZWlyIGRlZmF1
bHQgdmFsdWVzLCB0aGV5IHdpbGwgYmUgcmVjb21wdXRlZCBiZWxvdwotICAgIC8vIGlmIG5lY2Vz
c2FyeS4KLSAgICBtX2xpc3RCb3gtPnNldE1heEhlaWdodChrTWF4SGVpZ2h0KTsKLSAgICBtX2xp
c3RCb3gtPnNldE1heFdpZHRoKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotCi0g
ICAgLy8gTGF5IGV2ZXJ5dGhpbmcgb3V0IHRvIGZpZ3VyZSBvdXQgb3VyIHByZWZlcnJlZCBzaXpl
LCB0aGVuIHRlbGwgdGhlIHZpZXcncwotICAgIC8vIFdpZGdldENsaWVudCBhYm91dCBpdC4gSXQg
c2hvdWxkIGFzc2lnbiB1cyBhIGNsaWVudC4KLSAgICBpbnQgcnRsT2Zmc2V0ID0gbGF5b3V0QW5k
R2V0UlRMT2Zmc2V0KCk7Ci0gICAgYm9vbCBpc1JUTCA9IHRoaXMtPmlzUlRMKCk7Ci0gICAgaW50
IHJpZ2h0T2Zmc2V0ID0gaXNSVEwgPyBydGxPZmZzZXQgOiAwOwotCi0gICAgLy8gQXNzdW1lIG1f
bGlzdEJveCBzaXplIGlzIGFscmVhZHkgY2FsY3VsYXRlZC4KLSAgICBJbnRTaXplIHRhcmdldFNp
emUobV9saXN0Qm94LT53aWR0aCgpICsga0JvcmRlclNpemUgKiAyLAotICAgICAgICAgICAgICAg
ICAgICAgICBtX2xpc3RCb3gtPmhlaWdodCgpICsga0JvcmRlclNpemUgKiAyKTsKLQotICAgIElu
dFJlY3Qgd2lkZ2V0UmVjdDsKLSAgICBDaHJvbWVDbGllbnRDaHJvbWl1bSogY2hyb21lQ2xpZW50
ID0gY2hyb21lQ2xpZW50Q2hyb21pdW0oKTsKLSAgICBpZiAoY2hyb21lQ2xpZW50KSB7Ci0gICAg
ICAgIC8vIElmIHRoZSBwb3B1cCB3b3VsZCBleHRlbmQgcGFzdCB0aGUgYm90dG9tIG9mIHRoZSBz
Y3JlZW4sIG9wZW4gdXB3YXJkcwotICAgICAgICAvLyBpbnN0ZWFkLgotICAgICAgICBGbG9hdFJl
Y3Qgc2NyZWVuID0gc2NyZWVuQXZhaWxhYmxlUmVjdChtX2ZyYW1lVmlldy5nZXQoKSk7Ci0gICAg
ICAgIC8vIFVzZSBwb3B1cEluaXRpYWxDb29yZGluYXRlLngoKSArIHJpZ2h0T2Zmc2V0IGJlY2F1
c2UgUlRMIHBvc2l0aW9uCi0gICAgICAgIC8vIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuCi0gICAg
ICAgIHdpZGdldFJlY3QgPSBjaHJvbWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9w
dXBJbml0aWFsQ29vcmRpbmF0ZS54KCkgKyByaWdodE9mZnNldCwgcG9wdXBJbml0aWFsQ29vcmRp
bmF0ZS55KCksIHRhcmdldFNpemUud2lkdGgoKSwgdGFyZ2V0U2l6ZS5oZWlnaHQoKSkpOwotCi0g
ICAgICAgIC8vIElmIHdlIGhhdmUgbXVsdGlwbGUgc2NyZWVucyBhbmQgdGhlIGJyb3dzZXIgcmVj
dCBpcyBpbiBvbmUgc2NyZWVuLCB3ZSBoYXZlCi0gICAgICAgIC8vIHRvIGNsaXAgdGhlIHdpbmRv
dyB3aWR0aCB0byB0aGUgc2NyZWVuIHdpZHRoLgotICAgICAgICAvLyBXaGVuIGNsaXBwaW5nLCB3
ZSBhbHNvIG5lZWQgdG8gc2V0IGEgbWF4aW11bSB3aWR0aCBmb3IgdGhlIGxpc3QgYm94LgotICAg
ICAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCA9IGNocm9tZUNsaWVudC0+d2luZG93UmVjdCgpOwot
ICAgICAgICBpZiAod2luZG93UmVjdC54KCkgPj0gc2NyZWVuLngoKSAmJiB3aW5kb3dSZWN0Lm1h
eFgoKSA8PSBzY3JlZW4ubWF4WCgpICYmICh3aWRnZXRSZWN0LngoKSA8IHNjcmVlbi54KCkgfHwg
d2lkZ2V0UmVjdC5tYXhYKCkgPiBzY3JlZW4ubWF4WCgpKSkgewotICAgICAgICAgICAgLy8gRmly
c3QsIGludmVyc2UgdGhlIHBvcHVwIGFsaWdubWVudCBpZiBpdCBkb2VzIG5vdCBmaXQgdGhlIHNj
cmVlbiAtIHRoaXMgbWlnaHQgZml4IHRoaW5ncyAob3IgbWFrZSB0aGVtIGJldHRlcikuCi0gICAg
ICAgICAgICBJbnRSZWN0IGludmVyc2VXaWRnZXRSZWN0ID0gY2hyb21lQ2xpZW50LT53aW5kb3dU
b1NjcmVlbihJbnRSZWN0KHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueCgpICsgKGlzUlRMID8gMCA6
IHJ0bE9mZnNldCksIHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueSgpLCB0YXJnZXRTaXplLndpZHRo
KCksIHRhcmdldFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIEludFJlY3QgZW5jbG9zaW5n
U2NyZWVuID0gZW5jbG9zaW5nSW50UmVjdChzY3JlZW4pOwotICAgICAgICAgICAgdW5zaWduZWQg
b3JpZ2luYWxDdXRvZmYgPSBtYXgoZW5jbG9zaW5nU2NyZWVuLngoKSAtIHdpZGdldFJlY3QueCgp
LCAwKSArIG1heCh3aWRnZXRSZWN0Lm1heFgoKSAtIGVuY2xvc2luZ1NjcmVlbi5tYXhYKCksIDAp
OwotICAgICAgICAgICAgdW5zaWduZWQgaW52ZXJzZUN1dG9mZiA9IG1heChlbmNsb3NpbmdTY3Jl
ZW4ueCgpIC0gaW52ZXJzZVdpZGdldFJlY3QueCgpLCAwKSArIG1heChpbnZlcnNlV2lkZ2V0UmVj
dC5tYXhYKCkgLSBlbmNsb3NpbmdTY3JlZW4ubWF4WCgpLCAwKTsKLQotICAgICAgICAgICAgLy8g
QWNjZXB0IHRoZSBpbnZlcnNlIHBvcHVwIGFsaWdubWVudCBpZiB0aGUgdHJpbW1lZCBjb250ZW50
IGdldHMgc2hvcnRlciB0aGFuIHRoYXQgaW4gdGhlIG9yaWdpbmFsIGFsaWdubWVudCBjYXNlLgot
ICAgICAgICAgICAgaWYgKGludmVyc2VDdXRvZmYgPCBvcmlnaW5hbEN1dG9mZikKLSAgICAgICAg
ICAgICAgICB3aWRnZXRSZWN0ID0gaW52ZXJzZVdpZGdldFJlY3Q7Ci0KLSAgICAgICAgICAgIGlm
ICh3aWRnZXRSZWN0LngoKSA8IHNjcmVlbi54KCkpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCB3aWRnZXRSaWdodCA9IHdpZGdldFJlY3QubWF4WCgpOwotICAgICAgICAgICAgICAgIHdpZGdl
dFJlY3Quc2V0V2lkdGgod2lkZ2V0UmVjdC5tYXhYKCkgLSBzY3JlZW4ueCgpKTsKLSAgICAgICAg
ICAgICAgICB3aWRnZXRSZWN0LnNldFgod2lkZ2V0UmlnaHQgLSB3aWRnZXRSZWN0LndpZHRoKCkp
OwotICAgICAgICAgICAgICAgIGxpc3RCb3goKS0+c2V0TWF4V2lkdGhBbmRMYXlvdXQobWF4KHdp
ZGdldFJlY3Qud2lkdGgoKSAtIGtCb3JkZXJTaXplICogMiwgMCkpOwotICAgICAgICAgICAgfSBl
bHNlIGlmICh3aWRnZXRSZWN0Lm1heFgoKSA+IHNjcmVlbi5tYXhYKCkpIHsKLSAgICAgICAgICAg
ICAgICB3aWRnZXRSZWN0LnNldFdpZHRoKHNjcmVlbi5tYXhYKCkgLSB3aWRnZXRSZWN0LngoKSk7
Ci0gICAgICAgICAgICAgICAgbGlzdEJveCgpLT5zZXRNYXhXaWR0aEFuZExheW91dChtYXgod2lk
Z2V0UmVjdC53aWR0aCgpIC0ga0JvcmRlclNpemUgKiAyLCAwKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBDYWxjdWxhdGUgWSBheGlzIHNpemUuCi0gICAgICAgIGlm
ICh3aWRnZXRSZWN0Lm1heFkoKSA+IHN0YXRpY19jYXN0PGludD4oc2NyZWVuLm1heFkoKSkpIHsK
LSAgICAgICAgICAgIGlmICh3aWRnZXRSZWN0LnkoKSAtIHdpZGdldFJlY3QuaGVpZ2h0KCkgLSB0
YXJnZXRDb250cm9sSGVpZ2h0ID4gMCkgewotICAgICAgICAgICAgICAgIC8vIFRoZXJlIGlzIGVu
b3VnaCByb29tIHRvIG9wZW4gdXB3YXJkcy4KLSAgICAgICAgICAgICAgICB3aWRnZXRSZWN0Lm1v
dmUoMCwgLSh3aWRnZXRSZWN0LmhlaWdodCgpICsgdGFyZ2V0Q29udHJvbEhlaWdodCkpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBGaWd1cmUgd2hldGhlciB1cHdh
cmRzIG9yIGRvd253YXJkcyBoYXMgbW9yZSByb29tIGFuZCBzZXQgdGhlCi0gICAgICAgICAgICAg
ICAgLy8gbWF4aW11bSBudW1iZXIgb2YgaXRlbXMuCi0gICAgICAgICAgICAgICAgaW50IHNwYWNl
QWJvdmUgPSB3aWRnZXRSZWN0LnkoKSAtIHRhcmdldENvbnRyb2xIZWlnaHQ7Ci0gICAgICAgICAg
ICAgICAgaW50IHNwYWNlQmVsb3cgPSBzY3JlZW4ubWF4WSgpIC0gd2lkZ2V0UmVjdC55KCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKHNwYWNlQWJvdmUgPiBzcGFjZUJlbG93KQotICAgICAgICAgICAg
ICAgICAgICBtX2xpc3RCb3gtPnNldE1heEhlaWdodChzcGFjZUFib3ZlKTsKLSAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fbGlzdEJveC0+c2V0TWF4SGVpZ2h0KHNw
YWNlQmVsb3cpOwotICAgICAgICAgICAgICAgIGxheW91dEFuZEdldFJUTE9mZnNldCgpOwotICAg
ICAgICAgICAgICAgIC8vIE91ciBoZWlnaHQgaGFzIGNoYW5nZWQsIHNvIHJlY29tcHV0ZSBvbmx5
IFkgYXhpcyBvZiB3aWRnZXRSZWN0LgotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUg
dG8gcmVjb21wdXRlIFggYXhpcywgc28gd2Ugb25seSByZXBsYWNlIFkgYXhpcwotICAgICAgICAg
ICAgICAgIC8vIGluIHdpZGdldFJlY3QuCi0gICAgICAgICAgICAgICAgSW50UmVjdCBmcmFtZUlu
U2NyZWVuID0gY2hyb21lQ2xpZW50LT53aW5kb3dUb1NjcmVlbihmcmFtZVJlY3QoKSk7Ci0gICAg
ICAgICAgICAgICAgd2lkZ2V0UmVjdC5zZXRZKGZyYW1lSW5TY3JlZW4ueSgpKTsKLSAgICAgICAg
ICAgICAgICB3aWRnZXRSZWN0LnNldEhlaWdodChmcmFtZUluU2NyZWVuLmhlaWdodCgpKTsKLSAg
ICAgICAgICAgICAgICAvLyBBbmQgbW92ZSB1cHdhcmRzIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAg
ICAgICAgICBpZiAoc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3cpCi0gICAgICAgICAgICAgICAgICAg
IHdpZGdldFJlY3QubW92ZSgwLCAtKHdpZGdldFJlY3QuaGVpZ2h0KCkgKyB0YXJnZXRDb250cm9s
SGVpZ2h0KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHdp
ZGdldFJlY3Q7Ci19Ci0KLXZvaWQgUG9wdXBDb250YWluZXI6OnNob3dQb3B1cChGcmFtZVZpZXcq
IHZpZXcpCi17Ci0gICAgbV9mcmFtZVZpZXcgPSB2aWV3OwotICAgIGxpc3RCb3goKS0+bV9mb2N1
c2VkTm9kZSA9IG1fZnJhbWVWaWV3LT5mcmFtZSgpLT5kb2N1bWVudCgpLT5mb2N1c2VkTm9kZSgp
OwotCi0gICAgQ2hyb21lQ2xpZW50Q2hyb21pdW0qIGNocm9tZUNsaWVudCA9IGNocm9tZUNsaWVu
dENocm9taXVtKCk7Ci0gICAgaWYgKGNocm9tZUNsaWVudCkgewotICAgICAgICBJbnRSZWN0IHBv
cHVwUmVjdCA9IGZyYW1lUmVjdCgpOwotICAgICAgICBjaHJvbWVDbGllbnQtPnBvcHVwT3BlbmVk
KHRoaXMsIGxheW91dEFuZENhbGN1bGF0ZVdpZGdldFJlY3QocG9wdXBSZWN0LmhlaWdodCgpLCBw
b3B1cFJlY3QubG9jYXRpb24oKSksIGZhbHNlKTsKLSAgICAgICAgbV9wb3B1cE9wZW4gPSB0cnVl
OwotICAgIH0KLQotICAgIGlmICghbV9saXN0Qm94LT5wYXJlbnQoKSkKLSAgICAgICAgYWRkQ2hp
bGQobV9saXN0Qm94LmdldCgpKTsKLQotICAgIC8vIEVuYWJsZSBzY3JvbGxiYXJzIGFmdGVyIHRo
ZSBsaXN0Ym94IGlzIGluc2VydGVkIGludG8gdGhlIGhpZXJhcmNoeSwKLSAgICAvLyBzbyBpdCBo
YXMgYSBwcm9wZXIgV2lkZ2V0Q2xpZW50LgotICAgIG1fbGlzdEJveC0+c2V0VmVydGljYWxTY3Jv
bGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pOwotCi0gICAgbV9saXN0Qm94LT5zY3JvbGxUb1JldmVh
bFNlbGVjdGlvbigpOwotCi0gICAgaW52YWxpZGF0ZSgpOwotfQotCi12b2lkIFBvcHVwQ29udGFp
bmVyOjpoaWRlUG9wdXAoKQotewotICAgIGxpc3RCb3goKS0+aGlkZVBvcHVwKCk7Ci19Ci0KLXZv
aWQgUG9wdXBDb250YWluZXI6Om5vdGlmeVBvcHVwSGlkZGVuKCkKLXsKLSAgICBpZiAoIW1fcG9w
dXBPcGVuKQotICAgICAgICByZXR1cm47Ci0gICAgbV9wb3B1cE9wZW4gPSBmYWxzZTsKLSAgICBj
aHJvbWVDbGllbnRDaHJvbWl1bSgpLT5wb3B1cENsb3NlZCh0aGlzKTsKLX0KLQotaW50IFBvcHVw
Q29udGFpbmVyOjpsYXlvdXRBbmRHZXRSVExPZmZzZXQoKQotewotICAgIG1fbGlzdEJveC0+bGF5
b3V0KCk7Ci0KLSAgICAvLyBQbGFjZSB0aGUgbGlzdGJveCB3aXRoaW4gb3VyIGJvcmRlci4KLSAg
ICBtX2xpc3RCb3gtPm1vdmUoa0JvcmRlclNpemUsIGtCb3JkZXJTaXplKTsKLQotICAgIC8vIFNp
emUgb3Vyc2VsdmVzIHRvIGNvbnRhaW4gbGlzdGJveCArIGJvcmRlci4KLSAgICBpbnQgbGlzdEJv
eFdpZHRoID0gbV9saXN0Qm94LT53aWR0aCgpICsga0JvcmRlclNpemUgKiAyOwotICAgIHJlc2l6
ZShsaXN0Qm94V2lkdGgsIG1fbGlzdEJveC0+aGVpZ2h0KCkgKyBrQm9yZGVyU2l6ZSAqIDIpOwot
ICAgIGludmFsaWRhdGUoKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIHN0YXJ0aW5nIHgtYXhpcyBm
b3IgYSBub3JtYWwgUlRMIG9yIHJpZ2h0LWFsaWduZWQgTFRSIGRyb3Bkb3duLiBGb3IgdGhvc2Us
Ci0gICAgLy8gdGhlIHJpZ2h0IGVkZ2Ugb2YgZHJvcGRvd24gYm94IHNob3VsZCBiZSBhbGlnbmVk
IHdpdGggdGhlIHJpZ2h0IGVkZ2Ugb2YgPHNlbGVjdD4vPGlucHV0PiBlbGVtZW50IGJveCwKLSAg
ICAvLyBhbmQgdGhlIGRyb3Bkb3duIGJveCBzaG91bGQgYmUgZXhwYW5kZWQgdG8gdGhlIGxlZnQg
aWYgbW9yZSBzcGFjZSBpcyBuZWVkZWQuCi0gICAgLy8gbV9vcmlnaW5hbEZyYW1lUmVjdC53aWR0
aCgpIGlzIHRoZSB3aWR0aCBvZiB0aGUgdGFyZ2V0IDxzZWxlY3Q+LzxpbnB1dD4gZWxlbWVudC4K
LSAgICByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdC53aWR0aCgpIC0gbGlzdEJveFdpZHRoOwot
fQotCi1ib29sIFBvcHVwQ29udGFpbmVyOjpoYW5kbGVNb3VzZURvd25FdmVudChjb25zdCBQbGF0
Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQotewotICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGdlc3R1
cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVyZSk7Ci0gICAgcmV0dXJu
IG1fbGlzdEJveC0+aGFuZGxlTW91c2VEb3duRXZlbnQoCi0gICAgICAgIGNvbnN0cnVjdFJlbGF0
aXZlTW91c2VFdmVudChldmVudCwgdGhpcywgbV9saXN0Qm94LmdldCgpKSk7Ci19Ci0KLWJvb2wg
UG9wdXBDb250YWluZXI6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZlbnQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRv
cihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICByZXR1cm4gbV9saXN0Qm94
LT5oYW5kbGVNb3VzZU1vdmVFdmVudCgKLSAgICAgICAgY29uc3RydWN0UmVsYXRpdmVNb3VzZUV2
ZW50KGV2ZW50LCB0aGlzLCBtX2xpc3RCb3guZ2V0KCkpKTsKLX0KLQotYm9vbCBQb3B1cENvbnRh
aW5lcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBl
dmVudCkKLXsKLSAgICBSZWZQdHI8UG9wdXBDb250YWluZXI+IHByb3RlY3QodGhpcyk7Ci0gICAg
VXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKTsKLSAgICByZXR1cm4gbV9saXN0Qm94LT5oYW5kbGVNb3VzZVJlbGVhc2VF
dmVudCgKLSAgICAgICAgY29uc3RydWN0UmVsYXRpdmVNb3VzZUV2ZW50KGV2ZW50LCB0aGlzLCBt
X2xpc3RCb3guZ2V0KCkpKTsKLX0KLQotYm9vbCBQb3B1cENvbnRhaW5lcjo6aGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50KQotewotICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGdlc3R1cmVJbmRpY2F0b3IoRGVmaW5pdGVseVByb2Nlc3NpbmdVc2VyR2VzdHVy
ZSk7Ci0gICAgcmV0dXJuIG1fbGlzdEJveC0+aGFuZGxlV2hlZWxFdmVudCgKLSAgICAgICAgY29u
c3RydWN0UmVsYXRpdmVXaGVlbEV2ZW50KGV2ZW50LCB0aGlzLCBtX2xpc3RCb3guZ2V0KCkpKTsK
LX0KLQotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1ib29sIFBvcHVwQ29udGFpbmVyOjpoYW5k
bGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpCi17Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQotLy8gRklY
TUU6IFJlZmFjdG9yIHRoaXMgY29kZSB0byBzaGFyZSBmdW5jdGlvbmFsaXR5IHdpdGggRXZlbnRI
YW5kbGVyOjpoYW5kbGVHZXN0dXJlRXZlbnQuCi1ib29sIFBvcHVwQ29udGFpbmVyOjpoYW5kbGVH
ZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCkKLXsK
LSAgICBzd2l0Y2ggKGdlc3R1cmVFdmVudC50eXBlKCkpIHsKLSAgICBjYXNlIFBsYXRmb3JtR2Vz
dHVyZUV2ZW50OjpUYXBUeXBlOiB7Ci0gICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91
c2VNb3ZlKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRp
b24oKSwgTm9CdXR0b24sIE1vdXNlRXZlbnRNb3ZlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0
dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50
LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1w
KCkpOwotICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZmFrZU1vdXNlRG93bihnZXN0dXJlRXZl
bnQucG9zaXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24s
IE1vdXNlRXZlbnRQcmVzc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlm
dEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdl
c3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7Ci0gICAgICAg
IFBsYXRmb3JtTW91c2VFdmVudCBmYWtlTW91c2VVcChnZXN0dXJlRXZlbnQucG9zaXRpb24oKSwg
Z2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIExlZnRCdXR0b24sIE1vdXNlRXZlbnRSZWxl
YXNlZCwgLyogY2xpY2tDb3VudCAqLyAxLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVy
ZUV2ZW50LmN0cmxLZXkoKSwgZ2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0
YUtleSgpLCBnZXN0dXJlRXZlbnQudGltZXN0YW1wKCkpOwotICAgICAgICAvLyBoYW5kbGVNb3Vz
ZU1vdmVFdmVudChmYWtlTW91c2VNb3ZlKTsKLSAgICAgICAgaGFuZGxlTW91c2VEb3duRXZlbnQo
ZmFrZU1vdXNlRG93bik7Ci0gICAgICAgIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGZha2VNb3Vz
ZVVwKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGNhc2UgUGxhdGZvcm1HZXN0
dXJlRXZlbnQ6OlNjcm9sbFVwZGF0ZVR5cGU6IHsKLSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50
IHN5bnRoZXRpY1doZWVsRXZlbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1cmVFdmVu
dC5nbG9iYWxQb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCksIGdlc3R1cmVFdmVudC5k
ZWx0YVkoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWCgpIC8gMTIwLjBmLCBnZXN0dXJlRXZlbnQuZGVs
dGFZKCkgLyAxMjAuMGYsIFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50LCAvKiBpc0FjY2VwdGVkICov
IGZhbHNlLCBnZXN0dXJlRXZlbnQuc2hpZnRLZXkoKSwgZ2VzdHVyZUV2ZW50LmN0cmxLZXkoKSwg
Z2VzdHVyZUV2ZW50LmFsdEtleSgpLCBnZXN0dXJlRXZlbnQubWV0YUtleSgpKTsKLSAgICAgICAg
aGFuZGxlV2hlZWxFdmVudChzeW50aGV0aWNXaGVlbEV2ZW50KTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNjcm9sbEJlZ2luVHlw
ZToKLSAgICBjYXNlIFBsYXRmb3JtR2VzdHVyZUV2ZW50OjpTY3JvbGxFbmRUeXBlOgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KLWJvb2wgUG9w
dXBDb250YWluZXI6OmhhbmRsZUtleUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCi17Ci0gICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZp
bml0ZWx5UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKLSAgICByZXR1cm4gbV9saXN0Qm94LT5oYW5k
bGVLZXlFdmVudChldmVudCk7Ci19Ci0KLXZvaWQgUG9wdXBDb250YWluZXI6OmhpZGUoKQotewot
ICAgIG1fbGlzdEJveC0+YWJhbmRvbigpOwotfQotCi12b2lkIFBvcHVwQ29udGFpbmVyOjpwYWlu
dChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIGFk
anVzdCBjb29yZHMgZm9yIHNjcm9sbGVkIGZyYW1lCi0gICAgSW50UmVjdCByID0gaW50ZXJzZWN0
aW9uKHJlY3QsIGZyYW1lUmVjdCgpKTsKLSAgICBpbnQgdHggPSB4KCk7Ci0gICAgaW50IHR5ID0g
eSgpOwotCi0gICAgci5tb3ZlKC10eCwgLXR5KTsKLQotICAgIGdjLT50cmFuc2xhdGUoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHR4KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHR5KSk7Ci0gICAgbV9saXN0Qm94
LT5wYWludChnYywgcik7Ci0gICAgZ2MtPnRyYW5zbGF0ZSgtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHR4
KSwgLXN0YXRpY19jYXN0PGZsb2F0Pih0eSkpOwotCi0gICAgcGFpbnRCb3JkZXIoZ2MsIHJlY3Qp
OwotfQotCi12b2lkIFBvcHVwQ29udGFpbmVyOjpwYWludEJvcmRlcihHcmFwaGljc0NvbnRleHQq
IGdjLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIEZJWE1FOiBXaGVyZSBkbyB3ZSBn
ZXQgdGhlIGJvcmRlciBjb2xvciBmcm9tPwotICAgIENvbG9yIGJvcmRlckNvbG9yKDEyNywgMTU3
LCAxODUpOwotCi0gICAgZ2MtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKLSAgICBnYy0+c2V0
RmlsbENvbG9yKGJvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLQotICAgIGludCB0
eCA9IHgoKTsKLSAgICBpbnQgdHkgPSB5KCk7Ci0KLSAgICAvLyB0b3AsIGxlZnQsIGJvdHRvbSwg
cmlnaHQKLSAgICBnYy0+ZHJhd1JlY3QoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGtCb3JkZXJT
aXplKSk7Ci0gICAgZ2MtPmRyYXdSZWN0KEludFJlY3QodHgsIHR5LCBrQm9yZGVyU2l6ZSwgaGVp
Z2h0KCkpKTsKLSAgICBnYy0+ZHJhd1JlY3QoSW50UmVjdCh0eCwgdHkgKyBoZWlnaHQoKSAtIGtC
b3JkZXJTaXplLCB3aWR0aCgpLCBrQm9yZGVyU2l6ZSkpOwotICAgIGdjLT5kcmF3UmVjdChJbnRS
ZWN0KHR4ICsgd2lkdGgoKSAtIGtCb3JkZXJTaXplLCB0eSwga0JvcmRlclNpemUsIGhlaWdodCgp
KSk7Ci19Ci0KLWJvb2wgUG9wdXBDb250YWluZXI6OmlzSW50ZXJlc3RlZEluRXZlbnRGb3JLZXko
aW50IGtleUNvZGUpCi17Ci0gICAgcmV0dXJuIG1fbGlzdEJveC0+aXNJbnRlcmVzdGVkSW5FdmVu
dEZvcktleShrZXlDb2RlKTsKLX0KLQotQ2hyb21lQ2xpZW50Q2hyb21pdW0qIFBvcHVwQ29udGFp
bmVyOjpjaHJvbWVDbGllbnRDaHJvbWl1bSgpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENo
cm9tZUNsaWVudENocm9taXVtKj4obV9mcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKS0+Y2hyb21l
KCktPmNsaWVudCgpKTsKLX0KLQotdm9pZCBQb3B1cENvbnRhaW5lcjo6c2hvd0luUmVjdChjb25z
dCBJbnRSZWN0JiByLCBGcmFtZVZpZXcqIHYsIGludCBpbmRleCkKLXsKLSAgICAvLyBUaGUgcmVj
dCBpcyB0aGUgc2l6ZSBvZiB0aGUgc2VsZWN0IGJveC4gSXQncyB1c3VhbGx5IGxhcmdlciB0aGFu
IHdlIG5lZWQuCi0gICAgLy8gc3VidHJhY3QgYm9yZGVyIHNpemUgc28gdGhhdCB1c3VhbGx5IHRo
ZSBjb250YWluZXIgd2lsbCBiZSBkaXNwbGF5ZWQKLSAgICAvLyBleGFjdGx5IHRoZSBzYW1lIHdp
ZHRoIGFzIHRoZSBzZWxlY3QgYm94LgotICAgIGxpc3RCb3goKS0+c2V0QmFzZVdpZHRoKG1heChy
LndpZHRoKCkgLSBrQm9yZGVyU2l6ZSAqIDIsIDApKTsKLQotICAgIGxpc3RCb3goKS0+dXBkYXRl
RnJvbUVsZW1lbnQoKTsKLQotICAgIC8vIFdlIHNldCB0aGUgc2VsZWN0ZWQgaXRlbSBpbiB1cGRh
dGVGcm9tRWxlbWVudCgpLCBhbmQgZGlzcmVnYXJkIHRoZQotICAgIC8vIGluZGV4IHBhc3NlZCBp
bnRvIHRoaXMgZnVuY3Rpb24gKHNhbWUgYXMgV2Via2l0J3MgUG9wdXBNZW51V2luLmNwcCkKLSAg
ICAvLyBGSVhNRTogbWFrZSBzdXJlIHRoaXMgaXMgY29ycmVjdCwgYW5kIGFkZCBhbiBhc3NlcnRp
b24uCi0gICAgLy8gQVNTRVJUKHBvcHVwV2luZG93KHBvcHVwKS0+bGlzdEJveCgpLT5zZWxlY3Rl
ZEluZGV4KCkgPT0gaW5kZXgpOwotCi0gICAgLy8gQ29udmVydCBwb2ludCB0byBtYWluIHdpbmRv
dyBjb29yZHMuCi0gICAgSW50UG9pbnQgbG9jYXRpb24gPSB2LT5jb250ZW50c1RvV2luZG93KHIu
bG9jYXRpb24oKSk7Ci0KLSAgICAvLyBNb3ZlIGl0IGJlbG93IHRoZSBzZWxlY3Qgd2lkZ2V0Lgot
ICAgIGxvY2F0aW9uLm1vdmUoMCwgci5oZWlnaHQoKSk7Ci0KLSAgICBtX29yaWdpbmFsRnJhbWVS
ZWN0ID0gSW50UmVjdChsb2NhdGlvbiwgci5zaXplKCkpOwotICAgIHNldEZyYW1lUmVjdChtX29y
aWdpbmFsRnJhbWVSZWN0KTsKLSAgICBzaG93UG9wdXAodik7Ci19Ci0KLXZvaWQgUG9wdXBDb250
YWluZXI6OnJlZnJlc2goY29uc3QgSW50UmVjdCYgdGFyZ2V0Q29udHJvbFJlY3QpCi17Ci0gICAg
SW50UG9pbnQgbG9jYXRpb24gPSBtX2ZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyh0YXJnZXRD
b250cm9sUmVjdC5sb2NhdGlvbigpKTsKLSAgICAvLyBNb3ZlIGl0IGJlbG93IHRoZSBzZWxlY3Qg
d2lkZ2V0LgotICAgIGxvY2F0aW9uLm1vdmUoMCwgdGFyZ2V0Q29udHJvbFJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgbGlzdEJveCgpLT5zZXRCYXNlV2lkdGgobWF4KG1fb3JpZ2luYWxGcmFtZVJlY3Qu
d2lkdGgoKSAtIGtCb3JkZXJTaXplICogMiwgMCkpOwotICAgIHNldEJvdW5kc1NpemUobV9vcmln
aW5hbEZyYW1lUmVjdC5zaXplKCkpOwotCi0gICAgbGlzdEJveCgpLT51cGRhdGVGcm9tRWxlbWVu
dCgpOwotICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCBzaXplIHRvIGNoZWNrIGlmIHdlIG5lZWQg
dG8gcmVxdWVzdCB0aGUgbG9jYXRpb24uCi0gICAgSW50U2l6ZSBvcmlnaW5hbFNpemUgPSBzaXpl
KCk7Ci0gICAgSW50UmVjdCB3aWRnZXRSZWN0ID0gbGF5b3V0QW5kQ2FsY3VsYXRlV2lkZ2V0UmVj
dCh0YXJnZXRDb250cm9sUmVjdC5oZWlnaHQoKSwgbG9jYXRpb24pOwotICAgIGlmIChvcmlnaW5h
bFNpemUgIT0gd2lkZ2V0UmVjdC5zaXplKCkpIHsKLSAgICAgICAgQ2hyb21lQ2xpZW50Q2hyb21p
dW0qIGNocm9tZUNsaWVudCA9IGNocm9tZUNsaWVudENocm9taXVtKCk7Ci0gICAgICAgIGlmIChj
aHJvbWVDbGllbnQpIHsKLSAgICAgICAgICAgIEludFBvaW50IHdpZGdldExvY2F0aW9uID0gY2hy
b21lQ2xpZW50LT5zY3JlZW5Ub1dpbmRvdyh3aWRnZXRSZWN0LmxvY2F0aW9uKCkpOwotICAgICAg
ICAgICAgd2lkZ2V0UmVjdC5zZXRMb2NhdGlvbih3aWRnZXRMb2NhdGlvbik7Ci0gICAgICAgICAg
ICBzZXRGcmFtZVJlY3Qod2lkZ2V0UmVjdCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnZh
bGlkYXRlKCk7Ci19Ci0KLWlubGluZSBib29sIFBvcHVwQ29udGFpbmVyOjppc1JUTCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fbGlzdEJveC0+bV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkudGV4
dERpcmVjdGlvbigpID09IFJUTDsKLX0KLQotaW50IFBvcHVwQ29udGFpbmVyOjpzZWxlY3RlZElu
ZGV4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saXN0Qm94LT5zZWxlY3RlZEluZGV4KCk7Ci19
Ci0KLWludCBQb3B1cENvbnRhaW5lcjo6bWVudUl0ZW1IZWlnaHQoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2xpc3RCb3gtPmdldFJvd0hlaWdodCgwKTsKLX0KLQotaW50IFBvcHVwQ29udGFpbmVy
OjptZW51SXRlbUZvbnRTaXplKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9saXN0Qm94LT5nZXRS
b3dGb250KDApLnNpemUoKTsKLX0KLQotUG9wdXBNZW51U3R5bGUgUG9wdXBDb250YWluZXI6Om1l
bnVTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGlzdEJveC0+bV9wb3B1cENsaWVudC0+
bWVudVN0eWxlKCk7Ci19Ci0KLWNvbnN0IFdURjo6VmVjdG9yPFBvcHVwSXRlbSo+JiBQb3B1cENv
bnRhaW5lcjo6IHBvcHVwRGF0YSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGlzdEJveC0+aXRl
bXMoKTsKLX0KLQotU3RyaW5nIFBvcHVwQ29udGFpbmVyOjpnZXRTZWxlY3RlZEl0ZW1Ub29sVGlw
KCkKLXsKLSAgICAvLyBXZSBjYW5ub3QgdXNlIG1fcG9wdXBDbGllbnQtPnNlbGVjdGVkSW5kZXgo
KSB0byBjaG9vc2UgdG9vbHRpcCBtZXNzYWdlLAotICAgIC8vIGJlY2F1c2UgdGhlIHNlbGVjdGVk
SW5kZXgoKSBtaWdodCByZXR1cm4gZmluYWwgc2VsZWN0ZWQgaW5kZXgsIG5vdCBob3ZlcmluZyBz
ZWxlY3Rpb24uCi0gICAgcmV0dXJuIGxpc3RCb3goKS0+bV9wb3B1cENsaWVudC0+aXRlbVRvb2xU
aXAobGlzdEJveCgpLT5tX3NlbGVjdGVkSW5kZXgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cENv
bnRhaW5lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBDb250YWlu
ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUyZTFiNDI1NDI2YzlkMzE5YWQz
MzVmMjRkN2JmMDlkZTNiM2IwZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cENvbnRhaW5l
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTEsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBQb3B1cENvbnRhaW5l
cl9oCi0jZGVmaW5lIFBvcHVwQ29udGFpbmVyX2gKLQotI2luY2x1ZGUgIkZyYW1lbGVzc1Njcm9s
bFZpZXcuaCIKLSNpbmNsdWRlICJQb3B1cExpc3RCb3guaCIKLSNpbmNsdWRlICJQb3B1cE1lbnVT
dHlsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENocm9tZUNsaWVudENocm9t
aXVtOwotY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgUG9wdXBNZW51Q2xpZW50OwotCi1jbGFzcyBQ
b3B1cENvbnRhaW5lciA6IHB1YmxpYyBGcmFtZWxlc3NTY3JvbGxWaWV3IHsKLXB1YmxpYzoKLSAg
ICBlbnVtIFBvcHVwVHlwZSB7Ci0gICAgICAgIFNlbGVjdCwgLy8gSFRNTCBzZWxlY3QgcG9wdXAu
Ci0gICAgICAgIFN1Z2dlc3Rpb24sIC8vIEF1dG9jb21wbGV0ZS9hdXRvZmlsbCBwb3B1cC4KLSAg
ICB9OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8UG9wdXBDb250YWluZXI+IGNyZWF0ZShQb3B1
cE1lbnVDbGllbnQqLCBQb3B1cFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQb3B1cENvbnRhaW5lclNldHRpbmdzJik7Ci0KLSAgICAvLyBX
aGV0aGVyIGEga2V5IGV2ZW50IHNob3VsZCBiZSBzZW50IHRvIHRoaXMgcG9wdXAuCi0gICAgdmly
dHVhbCBib29sIGlzSW50ZXJlc3RlZEluRXZlbnRGb3JLZXkoaW50IGtleUNvZGUpOwotCi0gICAg
Ly8gRnJhbWVsZXNzU2Nyb2xsVmlldwotICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VEb3duRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
Jik7Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChj
b25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxl
S2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7Ci0jaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKLSAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9y
bVRvdWNoRXZlbnQmKTsKLSNlbmRpZgotI2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCi0g
ICAgdmlydHVhbCBib29sIGhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVF
dmVudCYpOwotI2VuZGlmCi0KLSAgICAvLyBQb3B1cENvbnRhaW5lciBtZXRob2RzCi0KLSAgICAv
LyBTaG93IHRoZSBwb3B1cAotICAgIHZvaWQgc2hvd1BvcHVwKEZyYW1lVmlldyopOwotCi0gICAg
Ly8gU2hvdyB0aGUgcG9wdXAgaW4gdGhlIHNwZWNpZmllZCByZWN0IGZvciB0aGUgc3BlY2lmaWVk
IGZyYW1lLgotICAgIC8vIE5vdGU6IHRoaXMgY29kZSB3YXMgc29tZWhvdyBhcmJpdHJhcmlseSBm
YWN0b3JlZC1vdXQgb2YgdGhlIFBvcHVwIGNsYXNzCi0gICAgLy8gc28gV2ViVmlld0ltcGwgY2Fu
IGNyZWF0ZSBhIFBvcHVwQ29udGFpbmVyLiBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgotICAgIC8v
IGRpc3BsYXlpbmcgYXV0byBjb21wbGV0ZSBwb3B1cCBtZW51cyBvbiBNYWMgQ2hyb21pdW0sIGFu
ZCBmb3IgYWxsCi0gICAgLy8gcG9wdXBzIG9uIG90aGVyIHBsYXRmb3Jtcy4KLSAgICB2b2lkIHNo
b3dJblJlY3QoY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyosIGludCBpbmRleCk7Ci0KLSAgICAv
LyBIaWRlcyB0aGUgcG9wdXAuCi0gICAgdm9pZCBoaWRlUG9wdXAoKTsKLQotICAgIC8vIFRoZSBw
b3B1cCB3YXMgaGlkZGVuLgotICAgIHZvaWQgbm90aWZ5UG9wdXBIaWRkZW4oKTsKLQotICAgIC8v
IENvbXB1dGUgc2l6ZSBvZiB3aWRnZXQgYW5kIGNoaWxkcmVuLiBSZXR1cm4gcmlnaHQgb2Zmc2V0
IGZvciB0aGUgcG9wdXAgcmlnaHQgYWxpZ25tZW50LgotICAgIGludCBsYXlvdXRBbmRHZXRSVExP
ZmZzZXQoKTsKLQotICAgIFBvcHVwTGlzdEJveCogbGlzdEJveCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGlzdEJveC5nZXQoKTsgfQotCi0gICAgYm9vbCBpc1JUTCgpIGNvbnN0OwotCi0gICAgLy8gR2V0
cyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdGhhdCB0aGUgdXNlciBpcyBjdXJyZW50bHkgbW91c2Vk
LW92ZXIgb3IKLSAgICAvLyBoYXMgc2VsZWN0ZWQgd2l0aCB0aGUga2V5Ym9hcmQgdXAvZG93biBh
cnJvd3MuCi0gICAgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKLQotICAgIC8vIFJlZnJlc2gg
dGhlIHBvcHVwIHZhbHVlcyBmcm9tIHRoZSBQb3B1cE1lbnVDbGllbnQuCi0gICAgdm9pZCByZWZy
ZXNoKGNvbnN0IEludFJlY3QmIHRhcmdldENvbnRyb2xSZWN0KTsKLQotICAgIC8vIFRoZSBtZW51
IHBlci1pdGVtIGRhdGEuCi0gICAgY29uc3QgV1RGOjpWZWN0b3I8UG9wdXBJdGVtKj4mIHBvcHVw
RGF0YSgpIGNvbnN0OwotCi0gICAgLy8gVGhlIGhlaWdodCBvZiBhIHJvdyBpbiB0aGUgbWVudS4K
LSAgICBpbnQgbWVudUl0ZW1IZWlnaHQoKSBjb25zdDsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRo
ZSBmb250IGJlaW5nIHVzZWQuCi0gICAgaW50IG1lbnVJdGVtRm9udFNpemUoKSBjb25zdDsKLQot
ICAgIC8vIFRoZSBzdHlsZSBvZiB0aGUgbWVudSBiZWluZyB1c2VkLgotICAgIFBvcHVwTWVudVN0
eWxlIG1lbnVTdHlsZSgpIGNvbnN0OwotCi0gICAgUG9wdXBUeXBlIHBvcHVwVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcG9wdXBUeXBlOyB9Ci0KLSAgICAvLyBXaGlsZSBob3ZlcmluZyBwb3B1cCBt
ZW51IHdpbmRvdywgd2Ugd2FudCB0byBzaG93IHRvb2wgdGlwIG1lc3NhZ2UuCi0gICAgU3RyaW5n
IGdldFNlbGVjdGVkSXRlbVRvb2xUaXAoKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3Mg
V1RGOjpSZWZDb3VudGVkPFBvcHVwQ29udGFpbmVyPjsKLQotICAgIFBvcHVwQ29udGFpbmVyKFBv
cHVwTWVudUNsaWVudCosIFBvcHVwVHlwZSwgY29uc3QgUG9wdXBDb250YWluZXJTZXR0aW5ncyYp
OwotICAgIH5Qb3B1cENvbnRhaW5lcigpOwotCi0gICAgLy8gUGFpbnQgdGhlIGJvcmRlci4KLSAg
ICB2b2lkIHBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKLQot
ICAgIC8vIExheW91dCBhbmQgY2FsY3VsYXRlIHBvcHVwIHdpZGdldCBzaXplIGFuZCBsb2NhdGlv
biBhbmQgcmV0dXJucyBpdCBhcyBJbnRSZWN0LgotICAgIEludFJlY3QgbGF5b3V0QW5kQ2FsY3Vs
YXRlV2lkZ2V0UmVjdChpbnQgdGFyZ2V0Q29udHJvbEhlaWdodCwgY29uc3QgSW50UG9pbnQmIHBv
cHVwSW5pdGlhbENvb3JkaW5hdGUpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgQ2hyb21lQ2xpZW50
IG9mIHRoZSBwYWdlIHRoaXMgcG9wdXAgaXMgYXNzb2NpYXRlZCB3aXRoLgotICAgIENocm9tZUNs
aWVudENocm9taXVtKiBjaHJvbWVDbGllbnRDaHJvbWl1bSgpOwotCi0gICAgUmVmUHRyPFBvcHVw
TGlzdEJveD4gbV9saXN0Qm94OwotICAgIFJlZlB0cjxGcmFtZVZpZXc+IG1fZnJhbWVWaWV3Owot
Ci0gICAgUG9wdXBDb250YWluZXJTZXR0aW5ncyBtX3NldHRpbmdzOwotICAgIFBvcHVwVHlwZSBt
X3BvcHVwVHlwZTsKLSAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7Ci0gICAgLy8gV2hl
dGhlciB0aGUgcG9wdXAgaXMgY3VycmVudGx5IG9wZW4uCi0gICAgYm9vbCBtX3BvcHVwT3BlbjsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cExpc3RCb3guY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBMaXN0Qm94LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjAxNTA2NGNkYzE4ZTI1OTIwNTI1ZjMwYTQ3OTM5MzA1N2UxMjA2OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cExpc3RCb3guY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsOTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJQb3B1cExpc3RCb3gu
aCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKLSNpbmNs
dWRlICJGcmFtZWxlc3NTY3JvbGxWaWV3Q2xpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1v
dXNlRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgotI2luY2x1ZGUgIlBsYXRm
b3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlBvcHVwQ29udGFpbmVyLmgiCi0jaW5jbHVkZSAi
UG9wdXBNZW51Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLSNpbmNs
dWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCi0jaW5jbHVk
ZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2luY2x1ZGUgPGxp
bWl0cz4KLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLQotI2lmIEVOQUJMRShHRVNUVVJF
X0VWRU5UUykKLSNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5oIgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLXVz
aW5nIG5hbWVzcGFjZSBXVEY7Ci11c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKLQotUG9wdXBMaXN0
Qm94OjpQb3B1cExpc3RCb3goUG9wdXBNZW51Q2xpZW50KiBjbGllbnQsIGNvbnN0IFBvcHVwQ29u
dGFpbmVyU2V0dGluZ3MmIHNldHRpbmdzKQotICAgIDogbV9zZXR0aW5ncyhzZXR0aW5ncykKLSAg
ICAsIG1fb3JpZ2luYWxJbmRleCgwKQotICAgICwgbV9zZWxlY3RlZEluZGV4KDApCi0gICAgLCBt
X2FjY2VwdGVkSW5kZXhPbkFiYW5kb24oLTEpCi0gICAgLCBtX3Zpc2libGVSb3dzKDApCi0gICAg
LCBtX2Jhc2VXaWR0aCgwKQotICAgICwgbV9tYXhIZWlnaHQoa01heEhlaWdodCkKLSAgICAsIG1f
cG9wdXBDbGllbnQoY2xpZW50KQotICAgICwgbV9yZXBlYXRpbmdDaGFyKDApCi0gICAgLCBtX2xh
c3RDaGFyVGltZSgwKQotICAgICwgbV9tYXhXaW5kb3dXaWR0aChzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKQotewotICAgIHNldFNjcm9sbGJhck1vZGVzKFNjcm9sbGJhckFsd2F5c09m
ZiwgU2Nyb2xsYmFyQWx3YXlzT2ZmKTsKLX0KLQotYm9vbCBQb3B1cExpc3RCb3g6OmhhbmRsZU1v
dXNlRG93bkV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCi17Ci0gICAgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIgPSBzY3JvbGxiYXJBdFBvaW50KGV2ZW50LnBvcygpKTsKLSAgICBp
ZiAoc2Nyb2xsYmFyKSB7Ci0gICAgICAgIG1fY2FwdHVyaW5nU2Nyb2xsYmFyID0gc2Nyb2xsYmFy
OwotICAgICAgICBtX2NhcHR1cmluZ1Njcm9sbGJhci0+bW91c2VEb3duKGV2ZW50KTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKCFpc1BvaW50SW5Cb3VuZHMoZXZlbnQu
cG9zKCkpKQotICAgICAgICBhYmFuZG9uKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBQb3B1cExpc3RCb3g6OmhhbmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZlbnQpCi17Ci0gICAgaWYgKG1fY2FwdHVyaW5nU2Nyb2xsYmFyKSB7Ci0gICAgICAg
IG1fY2FwdHVyaW5nU2Nyb2xsYmFyLT5tb3VzZU1vdmVkKGV2ZW50KTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBzY3JvbGxiYXJBdFBv
aW50KGV2ZW50LnBvcygpKTsKLSAgICBpZiAobV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZSAhPSBz
Y3JvbGxiYXIpIHsKLSAgICAgICAgLy8gU2VuZCBtb3VzZSBleGl0ZWQgdG8gdGhlIG9sZCBzY3Jv
bGxiYXIuCi0gICAgICAgIGlmIChtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlKQotICAgICAgICAg
ICAgbV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZS0+bW91c2VFeGl0ZWQoKTsKLSAgICAgICAgbV9s
YXN0U2Nyb2xsYmFyVW5kZXJNb3VzZSA9IHNjcm9sbGJhcjsKLSAgICB9Ci0KLSAgICBpZiAoc2Ny
b2xsYmFyKSB7Ci0gICAgICAgIHNjcm9sbGJhci0+bW91c2VNb3ZlZChldmVudCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghaXNQb2ludEluQm91bmRzKGV2ZW50LnBv
cygpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2VsZWN0SW5kZXgocG9pbnRUb1Jv
d0luZGV4KGV2ZW50LnBvcygpKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUG9wdXBM
aXN0Qm94OjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
IGV2ZW50KQotewotICAgIGlmIChtX2NhcHR1cmluZ1Njcm9sbGJhcikgewotICAgICAgICBtX2Nh
cHR1cmluZ1Njcm9sbGJhci0+bW91c2VVcCgpOwotICAgICAgICBtX2NhcHR1cmluZ1Njcm9sbGJh
ciA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmICghaXNQb2ludElu
Qm91bmRzKGV2ZW50LnBvcygpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOZWVk
IHRvIGNoZWNrIGJlZm9yZSBjYWxsaW5nIGFjY2VwdEluZGV4KCksIGJlY2F1c2UgbV9wb3B1cENs
aWVudCBtaWdodCBiZSByZW1vdmVkIGluIGFjY2VwdEluZGV4KCkgY2FsbGluZyBiZWNhdXNlIG9m
IGV2ZW50IGhhbmRsZXIuCi0gICAgYm9vbCBpc1NlbGVjdFBvcHVwID0gbV9wb3B1cENsaWVudC0+
bWVudVN0eWxlKCkubWVudVR5cGUoKSA9PSBQb3B1cE1lbnVTdHlsZTo6U2VsZWN0UG9wdXA7Ci0g
ICAgaWYgKGFjY2VwdEluZGV4KHBvaW50VG9Sb3dJbmRleChldmVudC5wb3MoKSkpICYmIG1fZm9j
dXNlZE5vZGUgJiYgaXNTZWxlY3RQb3B1cCkgewotICAgICAgICBtX2ZvY3VzZWROb2RlLT5kaXNw
YXRjaE1vdXNlRXZlbnQoZXZlbnQsIGV2ZW50TmFtZXMoKS5tb3VzZXVwRXZlbnQpOwotICAgICAg
ICBtX2ZvY3VzZWROb2RlLT5kaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnQsIGV2ZW50TmFtZXMoKS5j
bGlja0V2ZW50KTsKLQotICAgICAgICAvLyBDbGVhciBtX2ZvY3VzZWROb2RlIGhlcmUsIGJlY2F1
c2Ugd2UgY2Fubm90IGNsZWFyIGluIGhpZGVQb3B1cCgpIHdoaWNoIGlzIGNhbGxlZCBiZWZvcmUg
ZGlzcGF0Y2hNb3VzZUV2ZW50KCkgaXMgY2FsbGVkLgotICAgICAgICBtX2ZvY3VzZWROb2RlID0g
MDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBQb3B1cExpc3RCb3g6Omhh
bmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKLXsKLSAgICBp
ZiAoIWlzUG9pbnRJbkJvdW5kcyhldmVudC5wb3MoKSkpIHsKLSAgICAgICAgYWJhbmRvbigpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBQYXNzIGl0IG9mZiB0byB0aGUg
c2Nyb2xsIHZpZXcuCi0gICAgLy8gU2FkbHksIFdlYkNvcmUgZGV2cyBkb24ndCB1bmRlcnN0YW5k
IHRoZSB3aG9sZSAiY29uc3QiIHRoaW5nLgotICAgIHdoZWVsRXZlbnQoY29uc3RfY2FzdDxQbGF0
Zm9ybVdoZWVsRXZlbnQmPihldmVudCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBTaG91
bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggaGFuZGxlS2V5RXZlbnQoKS4KLWJvb2wgUG9wdXBMaXN0
Qm94Ojppc0ludGVyZXN0ZWRJbkV2ZW50Rm9yS2V5KGludCBrZXlDb2RlKQotewotICAgIHN3aXRj
aCAoa2V5Q29kZSkgewotICAgIGNhc2UgVktFWV9FU0NBUEU6Ci0gICAgY2FzZSBWS0VZX1JFVFVS
TjoKLSAgICBjYXNlIFZLRVlfVVA6Ci0gICAgY2FzZSBWS0VZX0RPV046Ci0gICAgY2FzZSBWS0VZ
X1BSSU9SOgotICAgIGNhc2UgVktFWV9ORVhUOgotICAgIGNhc2UgVktFWV9IT01FOgotICAgIGNh
c2UgVktFWV9FTkQ6Ci0gICAgY2FzZSBWS0VZX1RBQjoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCi1ib29sIFBvcHVwTGlzdEJveDo6aGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgot
Ci0jaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKLWJvb2wgUG9wdXBMaXN0Qm94OjpoYW5k
bGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKQotewotICAgIHJldHVy
biBmYWxzZTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCBpc0NoYXJhY3RlclR5cGVFdmVudChj
b25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGV2ZW50KQotewotICAgIC8vIENoZWNrIHdoZXRo
ZXIgdGhlIGV2ZW50IGlzIGEgY2hhcmFjdGVyLXR5cGVkIGV2ZW50IG9yIG5vdC4KLSAgICAvLyBX
ZSB1c2UgUmF3S2V5RG93bi9DaGFyL0tleVVwIGV2ZW50IHNjaGVtZSBvbiBhbGwgcGxhdGZvcm1z
LAotICAgIC8vIHNvIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhciAobm90IFJhd0tleURvd24p
IHR5cGUgZXZlbnQKLSAgICAvLyBpcyBjb25zaWRlcmVkIGFzIGNoYXJhY3RlciB0eXBlIGV2ZW50
LgotICAgIHJldHVybiBldmVudC50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFy
OwotfQotCi1ib29sIFBvcHVwTGlzdEJveDo6aGFuZGxlS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50JiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQudHlwZSgpID09IFBsYXRmb3Jt
S2V5Ym9hcmRFdmVudDo6S2V5VXApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFu
dW1JdGVtcygpICYmIGV2ZW50LndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpICE9IFZLRVlfRVNDQVBF
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHN3aXRjaCAoZXZlbnQud2luZG93c1ZpcnR1
YWxLZXlDb2RlKCkpIHsKLSAgICBjYXNlIFZLRVlfRVNDQVBFOgotICAgICAgICBhYmFuZG9uKCk7
IC8vIG1heSBkZWxldGUgdGhpcwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNlIFZLRVlf
UkVUVVJOOgotICAgICAgICBpZiAobV9zZWxlY3RlZEluZGV4ID09IC0xKSAgewotICAgICAgICAg
ICAgaGlkZVBvcHVwKCk7Ci0gICAgICAgICAgICAvLyBEb24ndCBlYXQgdGhlIGVudGVyIGlmIG5v
dGhpbmcgaXMgc2VsZWN0ZWQuCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgYWNjZXB0SW5kZXgobV9zZWxlY3RlZEluZGV4KTsgLy8gbWF5IGRlbGV0ZSB0aGlz
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgVktFWV9VUDoKLSAgICBjYXNlIFZLRVlf
RE9XTjoKLSAgICAgICAgLy8gV2UgaGF2ZSB0byBmb3J3YXJkIG9ubHkgc2hpZnQgKyB1cCBjb21i
aW5hdGlvbiB0byBmb2N1c2VkIG5vZGUgd2hlbiBhdXRvZmlsbCBwb3B1cC4KLSAgICAgICAgLy8g
QmVjYXVzZSBhbGwgY2hhcmFjdGVycyBmcm9tIHRoZSBjdXJzb3IgdG8gdGhlIHN0YXJ0IG9mIHRo
ZSB0ZXh0IGFyZWEgc2hvdWxkIHNlbGVjdGVkIHdoZW4geW91IHByZXNzIHNoaWZ0ICsgdXAgYXJy
b3cuCi0gICAgICAgIC8vIHNoaWZ0ICsgZG93biBzaG91bGQgYmUgdGhlIHNpbWlsYXIgd2F5IHRv
IHNoaWZ0ICsgdXAuCi0gICAgICAgIGlmIChldmVudC5tb2RpZmllcnMoKSAmJiBtX3BvcHVwQ2xp
ZW50LT5tZW51U3R5bGUoKS5tZW51VHlwZSgpID09IFBvcHVwTWVudVN0eWxlOjpBdXRvZmlsbFBv
cHVwKQotICAgICAgICAgICAgbV9mb2N1c2VkTm9kZS0+ZGlzcGF0Y2hLZXlFdmVudChldmVudCk7
Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpID09IFZLRVlf
VVApCi0gICAgICAgICAgICBzZWxlY3RQcmV2aW91c1JvdygpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBzZWxlY3ROZXh0Um93KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVktFWV9Q
UklPUjoKLSAgICAgICAgYWRqdXN0U2VsZWN0ZWRJbmRleCgtbV92aXNpYmxlUm93cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVktFWV9ORVhUOgotICAgICAgICBhZGp1c3RTZWxlY3RlZElu
ZGV4KG1fdmlzaWJsZVJvd3MpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZLRVlfSE9NRToK
LSAgICAgICAgYWRqdXN0U2VsZWN0ZWRJbmRleCgtbV9zZWxlY3RlZEluZGV4KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBWS0VZX0VORDoKLSAgICAgICAgYWRqdXN0U2VsZWN0ZWRJbmRleCht
X2l0ZW1zLnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlm
ICghZXZlbnQuY3RybEtleSgpICYmICFldmVudC5hbHRLZXkoKSAmJiAhZXZlbnQubWV0YUtleSgp
Ci0gICAgICAgICAgICAmJiBpc1ByaW50YWJsZUNoYXIoZXZlbnQud2luZG93c1ZpcnR1YWxLZXlD
b2RlKCkpCi0gICAgICAgICAgICAmJiBpc0NoYXJhY3RlclR5cGVFdmVudChldmVudCkpCi0gICAg
ICAgICAgICB0eXBlQWhlYWRGaW5kKGV2ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgaWYgKG1fb3JpZ2luYWxJbmRleCAhPSBtX3NlbGVjdGVkSW5kZXgpIHsKLSAgICAgICAgLy8g
S2V5Ym9hcmQgZXZlbnRzIHNob3VsZCB1cGRhdGUgdGhlIHNlbGVjdGlvbiBpbW1lZGlhdGVseSAo
YnV0IHdlIGRvbid0Ci0gICAgICAgIC8vIHdhbnQgdG8gZmlyZSB0aGUgb25jaGFuZ2UgZXZlbnQg
dW50aWwgdGhlIHBvcHVwIGlzIGNsb3NlZCwgdG8gbWF0Y2gKLSAgICAgICAgLy8gSUUpLiBXZSBj
aGFuZ2UgdGhlIG9yaWdpbmFsIGluZGV4IHNvIHdlIHJldmVydCB0byB0aGF0IHdoZW4gdGhlCi0g
ICAgICAgIC8vIHBvcHVwIGlzIGNsb3NlZC4KLSAgICAgICAgaWYgKG1fc2V0dGluZ3MuYWNjZXB0
T25BYmFuZG9uKQotICAgICAgICAgICAgbV9hY2NlcHRlZEluZGV4T25BYmFuZG9uID0gbV9zZWxl
Y3RlZEluZGV4OwotCi0gICAgICAgIHNldE9yaWdpbmFsSW5kZXgobV9zZWxlY3RlZEluZGV4KTsK
LSAgICAgICAgaWYgKG1fc2V0dGluZ3Muc2V0VGV4dE9uSW5kZXhDaGFuZ2UpCi0gICAgICAgICAg
ICBtX3BvcHVwQ2xpZW50LT5zZXRUZXh0RnJvbUl0ZW0obV9zZWxlY3RlZEluZGV4KTsKLSAgICB9
Ci0gICAgaWYgKGV2ZW50LndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpID09IFZLRVlfVEFCKSB7Ci0g
ICAgICAgIC8vIFRBQiBpcyBhIHNwZWNpYWwgY2FzZSBhcyBpdCBzaG91bGQgc2VsZWN0IHRoZSBj
dXJyZW50IGl0ZW0gaWYgYW55IGFuZAotICAgICAgICAvLyBhZHZhbmNlIGZvY3VzLgotICAgICAg
ICBpZiAobV9zZWxlY3RlZEluZGV4ID49IDApIHsKLSAgICAgICAgICAgIGFjY2VwdEluZGV4KG1f
c2VsZWN0ZWRJbmRleCk7IC8vIE1heSBkZWxldGUgdXMuCi0gICAgICAgICAgICAvLyBSZXR1cm4g
ZmFsc2Ugc28gdGhlIFRBQiBrZXkgZXZlbnQgaXMgcHJvcGFnYXRlZCB0byB0aGUgcGFnZS4KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAvLyBDYWxsIGFiYW5k
b24oKSBzbyB3ZSBob25vciBtX2FjY2VwdGVkSW5kZXhPbkFiYW5kb24gaWYgc2V0LgotICAgICAg
ICBhYmFuZG9uKCk7Ci0gICAgICAgIC8vIFJldHVybiBmYWxzZSBzbyB0aGUgVEFCIGtleSBldmVu
dCBpcyBwcm9wYWdhdGVkIHRvIHRoZSBwYWdlLgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUhvc3RXaW5kb3cqIFBvcHVwTGlzdEJveDo6aG9z
dFdpbmRvdygpIGNvbnN0Ci17Ci0gICAgLy8gT3VyIHBhcmVudCBpcyB0aGUgcm9vdCBTY3JvbGxW
aWV3LCBzbyBpdCBpcyB0aGUgb25lIHRoYXQgaGFzIGEKLSAgICAvLyBIb3N0V2luZG93LiBGcmFt
ZVZpZXc6Omhvc3RXaW5kb3coKSB3b3JrcyBzaW1pbGFybHkuCi0gICAgcmV0dXJuIHBhcmVudCgp
ID8gcGFyZW50KCktPmhvc3RXaW5kb3coKSA6IDA7Ci19Ci0KLS8vIEZyb20gSFRNTFNlbGVjdEVs
ZW1lbnQuY3BwCi1zdGF0aWMgU3RyaW5nIHN0cmlwTGVhZGluZ1doaXRlU3BhY2UoY29uc3QgU3Ry
aW5nJiBzdHJpbmcpCi17Ci0gICAgaW50IGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBp
bnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGlmIChzdHJp
bmdbaV0gIT0gbm9CcmVha1NwYWNlCi0gICAgICAgICAgICAmJiAoc3RyaW5nW2ldIDw9IDB4N0Yg
PyAhaXNzcGFjZShzdHJpbmdbaV0pIDogKGRpcmVjdGlvbihzdHJpbmdbaV0pICE9IFdoaXRlU3Bh
Y2VOZXV0cmFsKSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgIHJldHVybiBzdHJpbmcuc3Vi
c3RyaW5nKGksIGxlbmd0aCAtIGkpOwotfQotCi0vLyBGcm9tIEhUTUxTZWxlY3RFbGVtZW50LmNw
cCwgd2l0aCBtb2RpZmljYXRpb25zCi12b2lkIFBvcHVwTGlzdEJveDo6dHlwZUFoZWFkRmluZChj
b25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGV2ZW50KQotewotICAgIFRpbWVTdGFtcCBub3cg
PSBzdGF0aWNfY2FzdDxUaW1lU3RhbXA+KGN1cnJlbnRUaW1lKCkgKiAxMDAwLjBmKTsKLSAgICBU
aW1lU3RhbXAgZGVsdGEgPSBub3cgLSBtX2xhc3RDaGFyVGltZTsKLQotICAgIC8vIFJlc2V0IHRo
ZSB0aW1lIHdoZW4gdXNlciB0eXBlcyBpbiBhIGNoYXJhY3Rlci4gVGhlIHRpbWUgZ2FwIGJldHdl
ZW4KLSAgICAvLyBsYXN0IGNoYXJhY3RlciBhbmQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIHVz
ZWQgdG8gaW5kaWNhdGUgd2hldGhlcgotICAgIC8vIHVzZXIgdHlwZWQgaW4gYSBzdHJpbmcgb3Ig
anVzdCBhIGNoYXJhY3RlciBhcyB0aGUgc2VhcmNoIHByZWZpeC4KLSAgICBtX2xhc3RDaGFyVGlt
ZSA9IG5vdzsKLQotICAgIFVDaGFyIGMgPSBldmVudC53aW5kb3dzVmlydHVhbEtleUNvZGUoKTsK
LQotICAgIFN0cmluZyBwcmVmaXg7Ci0gICAgaW50IHNlYXJjaFN0YXJ0T2Zmc2V0ID0gMTsKLSAg
ICBpZiAoZGVsdGEgPiBrVHlwZUFoZWFkVGltZW91dE1zKSB7Ci0gICAgICAgIG1fdHlwZWRTdHJp
bmcgPSBwcmVmaXggPSBTdHJpbmcoJmMsIDEpOwotICAgICAgICBtX3JlcGVhdGluZ0NoYXIgPSBj
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fdHlwZWRTdHJpbmcuYXBwZW5kKGMpOwotCi0gICAg
ICAgIGlmIChjID09IG1fcmVwZWF0aW5nQ2hhcikKLSAgICAgICAgICAgIC8vIFRoZSB1c2VyIGlz
IGxpa2VseSB0cnlpbmcgdG8gY3ljbGUgdGhyb3VnaCBhbGwgdGhlIGl0ZW1zIHN0YXJ0aW5nIHdp
dGggdGhpcyBjaGFyYWN0ZXIsIHNvIGp1c3Qgc2VhcmNoIG9uIHRoZSBjaGFyYWN0ZXIKLSAgICAg
ICAgICAgIHByZWZpeCA9IFN0cmluZygmYywgMSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgbV9yZXBlYXRpbmdDaGFyID0gMDsKLSAgICAgICAgICAgIHByZWZpeCA9IG1fdHlwZWRTdHJp
bmc7Ci0gICAgICAgICAgICBzZWFyY2hTdGFydE9mZnNldCA9IDA7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBDb21wdXRlIGEgY2FzZS1mb2xkZWQgY29weSBvZiB0aGUgcHJlZml4IHN0cmlu
ZyBiZWZvcmUgYmVnaW5uaW5nIHRoZSBzZWFyY2ggZm9yCi0gICAgLy8gYSBtYXRjaGluZyBlbGVt
ZW50LiBUaGlzIGNvZGUgdXNlcyBmb2xkQ2FzZSB0byB3b3JrIGFyb3VuZCB0aGUgZmFjdCB0aGF0
Ci0gICAgLy8gU3RyaW5nOjpzdGFydFdpdGggZG9lcyBub3QgZm9sZCBub24tQVNDSUkgY2hhcmFj
dGVycy4gVGhpcyBjb2RlIGNhbiBiZSBjaGFuZ2VkCi0gICAgLy8gdG8gdXNlIHN0YXJ0V2l0aCBv
bmNlIHRoYXQgaXMgZml4ZWQuCi0gICAgU3RyaW5nIHByZWZpeFdpdGhDYXNlRm9sZGVkKHByZWZp
eC5mb2xkQ2FzZSgpKTsKLSAgICBpbnQgaXRlbUNvdW50ID0gbnVtSXRlbXMoKTsKLSAgICBpbnQg
aW5kZXggPSAobWF4KDAsIG1fc2VsZWN0ZWRJbmRleCkgKyBzZWFyY2hTdGFydE9mZnNldCkgJSBp
dGVtQ291bnQ7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVtQ291bnQ7IGkrKywgaW5kZXgg
PSAoaW5kZXggKyAxKSAlIGl0ZW1Db3VudCkgewotICAgICAgICBpZiAoIWlzU2VsZWN0YWJsZUl0
ZW0oaW5kZXgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHN0cmlwTGVh
ZGluZ1doaXRlU3BhY2UobV9pdGVtc1tpbmRleF0tPmxhYmVsKS5mb2xkQ2FzZSgpLnN0YXJ0c1dp
dGgocHJlZml4V2l0aENhc2VGb2xkZWQpKSB7Ci0gICAgICAgICAgICBzZWxlY3RJbmRleChpbmRl
eCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgUG9w
dXBMaXN0Qm94OjpwYWludChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIC8vIGFkanVzdCBjb29yZHMgZm9yIHNjcm9sbGVkIGZyYW1lCi0gICAgSW50UmVj
dCByID0gaW50ZXJzZWN0aW9uKHJlY3QsIGZyYW1lUmVjdCgpKTsKLSAgICBpbnQgdHggPSB4KCkg
LSBzY3JvbGxYKCk7Ci0gICAgaW50IHR5ID0geSgpIC0gc2Nyb2xsWSgpOwotCi0gICAgci5tb3Zl
KC10eCwgLXR5KTsKLQotICAgIC8vIHNldCBjbGlwIHJlY3QgdG8gbWF0Y2ggcmV2aXNlZCBkYW1h
Z2UgcmVjdAotICAgIGdjLT5zYXZlKCk7Ci0gICAgZ2MtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxm
bG9hdD4odHgpLCBzdGF0aWNfY2FzdDxmbG9hdD4odHkpKTsKLSAgICBnYy0+Y2xpcChyKTsKLQot
ICAgIC8vIEZJWE1FOiBDYW4gd2Ugb3B0aW1pemUgc2Nyb2xsaW5nIHRvIG5vdCByZXF1aXJlIHJl
cGFpbnRpbmcgdGhlIGVudGlyZQotICAgIC8vIHdpbmRvdz8gU2hvdWxkIHdlPwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtSXRlbXMoKTsgKytpKQotICAgICAgICBwYWludFJvdyhnYywgciwg
aSk7Ci0KLSAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIGFuIGVtcHR5IHBvcHVwLgotICAgIGlmICgh
bnVtSXRlbXMoKSkKLSAgICAgICAgZ2MtPmZpbGxSZWN0KHIsIENvbG9yOjp3aGl0ZSwgQ29sb3JT
cGFjZURldmljZVJHQik7Ci0KLSAgICBnYy0+cmVzdG9yZSgpOwotCi0gICAgU2Nyb2xsVmlldzo6
cGFpbnQoZ2MsIHJlY3QpOwotfQotCi1zdGF0aWMgY29uc3QgaW50IHNlcGFyYXRvclBhZGRpbmcg
PSA0Owotc3RhdGljIGNvbnN0IGludCBzZXBhcmF0b3JIZWlnaHQgPSAxOwotCi12b2lkIFBvcHVw
TGlzdEJveDo6cGFpbnRSb3coR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgcmVj
dCwgaW50IHJvd0luZGV4KQotewotICAgIC8vIFRoaXMgY29kZSBpcyBiYXNlZCBsYXJnZWx5IG9u
IFJlbmRlckxpc3RCb3g6OnBhaW50KiBtZXRob2RzLgotCi0gICAgSW50UmVjdCByb3dSZWN0ID0g
Z2V0Um93Qm91bmRzKHJvd0luZGV4KTsKLSAgICBpZiAoIXJvd1JlY3QuaW50ZXJzZWN0cyhyZWN0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUG9wdXBNZW51U3R5bGUgc3R5bGUgPSBtX3BvcHVw
Q2xpZW50LT5pdGVtU3R5bGUocm93SW5kZXgpOwotCi0gICAgLy8gUGFpbnQgYmFja2dyb3VuZAot
ICAgIENvbG9yIGJhY2tDb2xvciwgdGV4dENvbG9yLCBsYWJlbENvbG9yOwotICAgIGlmIChyb3dJ
bmRleCA9PSBtX3NlbGVjdGVkSW5kZXgpIHsKLSAgICAgICAgYmFja0NvbG9yID0gUmVuZGVyVGhl
bWU6OmRlZmF1bHRUaGVtZSgpLT5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KCk7Ci0gICAgICAgIHRleHRDb2xvciA9IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWN0
aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwotICAgICAgICBsYWJlbENvbG9y
ID0gdGV4dENvbG9yOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJhY2tDb2xvciA9IHN0eWxlLmJh
Y2tncm91bmRDb2xvcigpOwotICAgICAgICB0ZXh0Q29sb3IgPSBzdHlsZS5mb3JlZ3JvdW5kQ29s
b3IoKTsKLSAgICAgICAgLy8gRklYTUU6IGZvciBub3cgdGhlIGxhYmVsIGNvbG9yIGlzIGhhcmQt
Y29kZWQuIEl0IHNob3VsZCBiZSBhZGRlZCB0bwotICAgICAgICAvLyB0aGUgUG9wdXBNZW51U3R5
bGUuCi0gICAgICAgIGxhYmVsQ29sb3IgPSBDb2xvcigxMTUsIDExNSwgMTE1KTsKLSAgICB9Ci0K
LSAgICAvLyBJZiB3ZSBoYXZlIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZCwgbWFrZSBzdXJlIGl0
IGhhcyBhIGNvbG9yIHRvIGJsZW5kCi0gICAgLy8gYWdhaW5zdC4KLSAgICBpZiAoYmFja0NvbG9y
Lmhhc0FscGhhKCkpCi0gICAgICAgIGdjLT5maWxsUmVjdChyb3dSZWN0LCBDb2xvcjo6d2hpdGUs
IENvbG9yU3BhY2VEZXZpY2VSR0IpOwotCi0gICAgZ2MtPmZpbGxSZWN0KHJvd1JlY3QsIGJhY2tD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAgICAvLyBJdCBkb2Vzbid0IGxvb2sgZ29v
ZCBidXQgQXV0b2ZpbGwgcmVxdWlyZXMgc3BlY2lhbCBzdHlsZSBmb3Igc2VwYXJhdG9yLgotICAg
IC8vIEF1dG9maWxsIGRvZXNuJ3QgaGF2ZSBwYWRkaW5nIGFuZCAjZGNkY2RjIGNvbG9yLgotICAg
IGlmIChtX3BvcHVwQ2xpZW50LT5pdGVtSXNTZXBhcmF0b3Iocm93SW5kZXgpKSB7Ci0gICAgICAg
IGludCBwYWRkaW5nID0gc3R5bGUubWVudVR5cGUoKSA9PSBQb3B1cE1lbnVTdHlsZTo6QXV0b2Zp
bGxQb3B1cCA/IDAgOiBzZXBhcmF0b3JQYWRkaW5nOwotICAgICAgICBJbnRSZWN0IHNlcGFyYXRv
clJlY3QoCi0gICAgICAgICAgICByb3dSZWN0LngoKSArIHBhZGRpbmcsCi0gICAgICAgICAgICBy
b3dSZWN0LnkoKSArIChyb3dSZWN0LmhlaWdodCgpIC0gc2VwYXJhdG9ySGVpZ2h0KSAvIDIsCi0g
ICAgICAgICAgICByb3dSZWN0LndpZHRoKCkgLSAyICogcGFkZGluZywgc2VwYXJhdG9ySGVpZ2h0
KTsKLSAgICAgICAgZ2MtPmZpbGxSZWN0KHNlcGFyYXRvclJlY3QsIHN0eWxlLm1lbnVUeXBlKCkg
PT0gUG9wdXBNZW51U3R5bGU6OkF1dG9maWxsUG9wdXAgPyBDb2xvcigweGRjLCAweGRjLCAweGRj
KSA6IHRleHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIXN0eWxlLmlzVmlzaWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBnYy0+c2V0RmlsbENvbG9yKHRleHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7Ci0KLSAg
ICBGb250IGl0ZW1Gb250ID0gZ2V0Um93Rm9udChyb3dJbmRleCk7Ci0gICAgLy8gRklYTUU6IGh0
dHA6Ly9jcmJ1Zy5jb20vMTk4NzIgV2Ugc2hvdWxkIGdldCB0aGUgcGFkZGluZyBvZiBpbmRpdmlk
dWFsIG9wdGlvbgotICAgIC8vIGVsZW1lbnRzLiBUaGlzIHByb2JhYmx5IGltcGxpZXMgY2hhbmdl
cyB0byBQb3B1cE1lbnVDbGllbnQuCi0gICAgYm9vbCByaWdodEFsaWduZWQgPSBtX3BvcHVwQ2xp
ZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCkgPT0gUlRMOwotICAgIGludCB0ZXh0WCA9
IDA7Ci0gICAgaW50IG1heFdpZHRoID0gMDsKLSAgICBpZiAocmlnaHRBbGlnbmVkKQotICAgICAg
ICBtYXhXaWR0aCA9IHJvd1JlY3Qud2lkdGgoKSAtIG1heCgwLCBtX3BvcHVwQ2xpZW50LT5jbGll
bnRQYWRkaW5nUmlnaHQoKSAtIG1fcG9wdXBDbGllbnQtPmNsaWVudEluc2V0UmlnaHQoKSk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIHRleHRYID0gbWF4KDAsIG1fcG9wdXBDbGllbnQtPmNsaWVudFBh
ZGRpbmdMZWZ0KCkgLSBtX3BvcHVwQ2xpZW50LT5jbGllbnRJbnNldExlZnQoKSk7Ci0gICAgICAg
IG1heFdpZHRoID0gcm93UmVjdC53aWR0aCgpIC0gdGV4dFg7Ci0gICAgfQotICAgIC8vIFByZXBh
cmUgdGV4dCB0byBiZSBkcmF3bi4KLSAgICBTdHJpbmcgaXRlbVRleHQgPSBtX3BvcHVwQ2xpZW50
LT5pdGVtVGV4dChyb3dJbmRleCk7Ci0gICAgU3RyaW5nIGl0ZW1MYWJlbCA9IG1fcG9wdXBDbGll
bnQtPml0ZW1MYWJlbChyb3dJbmRleCk7Ci0gICAgU3RyaW5nIGl0ZW1JY29uID0gbV9wb3B1cENs
aWVudC0+aXRlbUljb24ocm93SW5kZXgpOwotICAgIGlmIChtX3NldHRpbmdzLnJlc3RyaWN0V2lk
dGhPZkxpc3RCb3gpIHsgLy8gVHJ1bmNhdGUgc3RyaW5ncyB0byBmaXQgaW4uCi0gICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgbGVmdFRydW5jYXRlIGZvciB0aGUgcnRsIGNhc2UuCi0gICAgICAg
IC8vIFN0cmluZ1RydW5jYXRvcjo6bGVmdFRydW5jYXRlIHdvdWxkIGhhdmUgdG8gYmUgaW1wbGVt
ZW50ZWQuCi0gICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmdUcnVuY2F0b3I6OnJpZ2h0VHJ1bmNh
dGUoaXRlbVRleHQsIG1heFdpZHRoLCBpdGVtRm9udCk7Ci0gICAgICAgIGlmIChzdHIgIT0gaXRl
bVRleHQpIHsKLSAgICAgICAgICAgIGl0ZW1UZXh0ID0gc3RyOwotICAgICAgICAgICAgLy8gRG9u
J3QgZGlzcGxheSB0aGUgbGFiZWwgb3IgaWNvbiwgd2UgYWxyZWFkeSBkb24ndCBoYXZlIGVub3Vn
aCByb29tIGZvciB0aGUgaXRlbSB0ZXh0LgotICAgICAgICAgICAgaXRlbUxhYmVsID0gIiI7Ci0g
ICAgICAgICAgICBpdGVtSWNvbiA9ICIiOwotICAgICAgICB9IGVsc2UgaWYgKCFpdGVtTGFiZWwu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBtYXhXaWR0aCAt
IGtUZXh0VG9MYWJlbFBhZGRpbmcgLQotICAgICAgICAgICAgICAgIFN0cmluZ1RydW5jYXRvcjo6
d2lkdGgoaXRlbVRleHQsIGl0ZW1Gb250KTsKLSAgICAgICAgICAgIGl0ZW1MYWJlbCA9IFN0cmlu
Z1RydW5jYXRvcjo6cmlnaHRUcnVuY2F0ZShpdGVtTGFiZWwsIGF2YWlsYWJsZVdpZHRoLCBpdGVt
Rm9udCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBQcmVwYXJlIHRoZSBkaXJlY3Rpb25h
bGl0eSB0byBkcmF3IHRleHQuCi0gICAgVGV4dFJ1biB0ZXh0UnVuKGl0ZW1UZXh0LmNoYXJhY3Rl
cnMoKSwgaXRlbVRleHQubGVuZ3RoKCksIGZhbHNlLCAwLCAwLCBUZXh0UnVuOjpBbGxvd1RyYWls
aW5nRXhwYW5zaW9uLCBzdHlsZS50ZXh0RGlyZWN0aW9uKCksIHN0eWxlLmhhc1RleHREaXJlY3Rp
b25PdmVycmlkZSgpKTsKLSAgICAvLyBJZiB0aGUgdGV4dCBpcyByaWdodC10by1sZWZ0LCBtYWtl
IGl0IHJpZ2h0LWFsaWduZWQgYnkgYWRqdXN0aW5nIGl0cwotICAgIC8vIGJlZ2lubmluZyBwb3Np
dGlvbi4KLSAgICBpZiAocmlnaHRBbGlnbmVkKQotICAgICAgICB0ZXh0WCArPSBtYXhXaWR0aCAt
IGl0ZW1Gb250LndpZHRoKHRleHRSdW4pOwotCi0gICAgLy8gRHJhdyB0aGUgaXRlbSB0ZXh0Lgot
ICAgIGludCB0ZXh0WSA9IHJvd1JlY3QueSgpICsgaXRlbUZvbnQuZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKSArIChyb3dSZWN0LmhlaWdodCgpIC0gaXRlbUZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQo
KSkgLyAyOwotICAgIGdjLT5kcmF3QmlkaVRleHQoaXRlbUZvbnQsIHRleHRSdW4sIEludFBvaW50
KHRleHRYLCB0ZXh0WSkpOwotCi0gICAgLy8gV2UgYXJlIHVzaW5nIHRoZSBsZWZ0IHBhZGRpbmcg
YXMgdGhlIHJpZ2h0IHBhZGRpbmcgaW5jbHVkZXMgcm9vbSBmb3IgdGhlIHNjcm9sbC1iYXIgd2hp
Y2gKLSAgICAvLyBkb2VzIG5vdCBzaG93IGluIHRoaXMgY2FzZS4KLSAgICBpbnQgcmlnaHRQYWRk
aW5nID0gbWF4KDAsIG1fcG9wdXBDbGllbnQtPmNsaWVudFBhZGRpbmdMZWZ0KCkgLSBtX3BvcHVw
Q2xpZW50LT5jbGllbnRJbnNldExlZnQoKSk7Ci0gICAgaW50IHJlbWFpbmluZ1dpZHRoID0gcm93
UmVjdC53aWR0aCgpIC0gcmlnaHRQYWRkaW5nOwotCi0gICAgLy8gRHJhdyB0aGUgaWNvbiBpZiBh
cHBsaWNhYmxlLgotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJl
c291cmNlKGl0ZW1JY29uLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICBpZiAoaW1hZ2UgJiYgIWltYWdl
LT5pc051bGwoKSkgewotICAgICAgICBJbnRSZWN0IGltYWdlUmVjdCA9IGltYWdlLT5yZWN0KCk7
Ci0gICAgICAgIHJlbWFpbmluZ1dpZHRoIC09IChpbWFnZVJlY3Qud2lkdGgoKSArIGtMYWJlbFRv
SWNvblBhZGRpbmcpOwotICAgICAgICBpbWFnZVJlY3Quc2V0WChyb3dSZWN0LndpZHRoKCkgLSBy
aWdodFBhZGRpbmcgLSBpbWFnZVJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIGltYWdlUmVjdC5zZXRZ
KHJvd1JlY3QueSgpICsgKHJvd1JlY3QuaGVpZ2h0KCkgLSBpbWFnZVJlY3QuaGVpZ2h0KCkpIC8g
Mik7Ci0gICAgICAgIGdjLT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGltYWdlUmVjdCk7Ci0gICAgfQotCi0gICAgLy8gRHJhdyB0aGUgdGhlIGxhYmVsIGlmIGFw
cGxpY2FibGUuCi0gICAgaWYgKGl0ZW1MYWJlbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIEF1dG9maWxsIGxhYmVsIGlzIDAuOSBzbWFsbGVyIHRoYW4gcmVndWxhciBmb250
IHNpemUuCi0gICAgaWYgKHN0eWxlLm1lbnVUeXBlKCkgPT0gUG9wdXBNZW51U3R5bGU6OkF1dG9m
aWxsUG9wdXApIHsKLSAgICAgICAgaXRlbUZvbnQgPSBtX3BvcHVwQ2xpZW50LT5pdGVtU3R5bGUo
cm93SW5kZXgpLmZvbnQoKTsKLSAgICAgICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5m
b250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZC5zZXRDb21wdXRlZFNpemUoZC5jb21wdXRlZFNp
emUoKSAqIDAuOSk7Ci0gICAgICAgIGl0ZW1Gb250ID0gRm9udChkLCBpdGVtRm9udC5sZXR0ZXJT
cGFjaW5nKCksIGl0ZW1Gb250LndvcmRTcGFjaW5nKCkpOwotICAgICAgICBpdGVtRm9udC51cGRh
dGUoMCk7Ci0gICAgfQotCi0gICAgVGV4dFJ1biBsYWJlbFRleHRSdW4oaXRlbUxhYmVsLmNoYXJh
Y3RlcnMoKSwgaXRlbUxhYmVsLmxlbmd0aCgpLCBmYWxzZSwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dU
cmFpbGluZ0V4cGFuc2lvbiwgc3R5bGUudGV4dERpcmVjdGlvbigpLCBzdHlsZS5oYXNUZXh0RGly
ZWN0aW9uT3ZlcnJpZGUoKSk7Ci0gICAgaWYgKHJpZ2h0QWxpZ25lZCkKLSAgICAgICAgdGV4dFgg
PSBtYXgoMCwgbV9wb3B1cENsaWVudC0+Y2xpZW50UGFkZGluZ0xlZnQoKSAtIG1fcG9wdXBDbGll
bnQtPmNsaWVudEluc2V0TGVmdCgpKTsKLSAgICBlbHNlCi0gICAgICAgIHRleHRYID0gcmVtYWlu
aW5nV2lkdGggLSBpdGVtRm9udC53aWR0aChsYWJlbFRleHRSdW4pOwotCi0gICAgZ2MtPnNldEZp
bGxDb2xvcihsYWJlbENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAgICBnYy0+ZHJhd0Jp
ZGlUZXh0KGl0ZW1Gb250LCBsYWJlbFRleHRSdW4sIEludFBvaW50KHRleHRYLCB0ZXh0WSkpOwot
fQotCi1Gb250IFBvcHVwTGlzdEJveDo6Z2V0Um93Rm9udChpbnQgcm93SW5kZXgpCi17Ci0gICAg
Rm9udCBpdGVtRm9udCA9IG1fcG9wdXBDbGllbnQtPml0ZW1TdHlsZShyb3dJbmRleCkuZm9udCgp
OwotICAgIGlmIChtX3BvcHVwQ2xpZW50LT5pdGVtSXNMYWJlbChyb3dJbmRleCkpIHsKLSAgICAg
ICAgLy8gQm9sZC1pZnkgbGFiZWxzIChpZSwgYW4gPG9wdGdyb3VwPiBoZWFkaW5nKS4KLSAgICAg
ICAgRm9udERlc2NyaXB0aW9uIGQgPSBpdGVtRm9udC5mb250RGVzY3JpcHRpb24oKTsKLSAgICAg
ICAgZC5zZXRXZWlnaHQoRm9udFdlaWdodEJvbGQpOwotICAgICAgICBGb250IGZvbnQoZCwgaXRl
bUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVtRm9udC53b3JkU3BhY2luZygpKTsKLSAgICAgICAg
Zm9udC51cGRhdGUoMCk7Ci0gICAgICAgIHJldHVybiBmb250OwotICAgIH0KLQotICAgIHJldHVy
biBpdGVtRm9udDsKLX0KLQotdm9pZCBQb3B1cExpc3RCb3g6OmFiYW5kb24oKQotewotICAgIFJl
ZlB0cjxQb3B1cExpc3RCb3g+IGtlZXBBbGl2ZSh0aGlzKTsKLQotICAgIG1fc2VsZWN0ZWRJbmRl
eCA9IG1fb3JpZ2luYWxJbmRleDsKLQotICAgIGhpZGVQb3B1cCgpOwotCi0gICAgaWYgKG1fYWNj
ZXB0ZWRJbmRleE9uQWJhbmRvbiA+PSAwKSB7Ci0gICAgICAgIGlmIChtX3BvcHVwQ2xpZW50KQot
ICAgICAgICAgICAgbV9wb3B1cENsaWVudC0+dmFsdWVDaGFuZ2VkKG1fYWNjZXB0ZWRJbmRleE9u
QWJhbmRvbik7Ci0gICAgICAgIG1fYWNjZXB0ZWRJbmRleE9uQWJhbmRvbiA9IC0xOwotICAgIH0K
LX0KLQotaW50IFBvcHVwTGlzdEJveDo6cG9pbnRUb1Jvd0luZGV4KGNvbnN0IEludFBvaW50JiBw
b2ludCkKLXsKLSAgICBpbnQgeSA9IHNjcm9sbFkoKSArIHBvaW50LnkoKTsKLQotICAgIC8vIEZJ
WE1FOiBiaW5hcnkgc2VhcmNoIGlmIHBlcmYgbWF0dGVycy4KLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bUl0ZW1zKCk7ICsraSkgewotICAgICAgICBpZiAoeSA8IG1faXRlbXNbaV0tPnlPZmZz
ZXQpCi0gICAgICAgICAgICByZXR1cm4gaS0xOwotICAgIH0KLQotICAgIC8vIExhc3QgaXRlbT8K
LSAgICBpZiAoeSA8IGNvbnRlbnRzSGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBtX2l0ZW1zLnNp
emUoKS0xOwotCi0gICAgcmV0dXJuIC0xOwotfQotCi1ib29sIFBvcHVwTGlzdEJveDo6YWNjZXB0
SW5kZXgoaW50IGluZGV4KQotewotICAgIC8vIENsZWFyIG1fYWNjZXB0ZWRJbmRleE9uQWJhbmRv
biBvbmNlIHVzZXIgYWNjZXB0cyB0aGUgc2VsZWN0ZWQgaW5kZXguCi0gICAgaWYgKG1fYWNjZXB0
ZWRJbmRleE9uQWJhbmRvbiA+PSAwKQotICAgICAgICBtX2FjY2VwdGVkSW5kZXhPbkFiYW5kb24g
PSAtMTsKLQotICAgIGlmIChpbmRleCA+PSBudW1JdGVtcygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoaW5kZXggPCAwKSB7Ci0gICAgICAgIGlmIChtX3BvcHVwQ2xpZW50KSB7
Ci0gICAgICAgICAgICAvLyBFbnRlciBwcmVzc2VkIHdpdGggbm8gc2VsZWN0aW9uLCBqdXN0IGNs
b3NlIHRoZSBwb3B1cC4KLSAgICAgICAgICAgIGhpZGVQb3B1cCgpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoaXNTZWxlY3RhYmxlSXRlbShpbmRl
eCkpIHsKLSAgICAgICAgUmVmUHRyPFBvcHVwTGlzdEJveD4ga2VlcEFsaXZlKHRoaXMpOwotCi0g
ICAgICAgIC8vIEhpZGUgb3Vyc2VsdmVzIGZpcnN0IHNpbmNlIHZhbHVlQ2hhbmdlZCBtYXkgaGF2
ZSBudW1lcm91cyBzaWRlLWVmZmVjdHMuCi0gICAgICAgIGhpZGVQb3B1cCgpOwotCi0gICAgICAg
IC8vIFRlbGwgdGhlIDxzZWxlY3Q+IFBvcHVwTWVudUNsaWVudCB3aGF0IGluZGV4IHdhcyBzZWxl
Y3RlZC4KLSAgICAgICAgbV9wb3B1cENsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQg
UG9wdXBMaXN0Qm94OjpzZWxlY3RJbmRleChpbnQgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4IDwg
MCB8fCBpbmRleCA+PSBudW1JdGVtcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGlz
U2VsZWN0YWJsZSA9IGlzU2VsZWN0YWJsZUl0ZW0oaW5kZXgpOwotICAgIGlmIChpbmRleCAhPSBt
X3NlbGVjdGVkSW5kZXggJiYgaXNTZWxlY3RhYmxlKSB7Ci0gICAgICAgIGludmFsaWRhdGVSb3co
bV9zZWxlY3RlZEluZGV4KTsKLSAgICAgICAgbV9zZWxlY3RlZEluZGV4ID0gaW5kZXg7Ci0gICAg
ICAgIGludmFsaWRhdGVSb3cobV9zZWxlY3RlZEluZGV4KTsKLQotICAgICAgICBzY3JvbGxUb1Jl
dmVhbFNlbGVjdGlvbigpOwotICAgICAgICBtX3BvcHVwQ2xpZW50LT5zZWxlY3Rpb25DaGFuZ2Vk
KG1fc2VsZWN0ZWRJbmRleCk7Ci0gICAgfSBlbHNlIGlmICghaXNTZWxlY3RhYmxlKQotICAgICAg
ICBjbGVhclNlbGVjdGlvbigpOwotfQotCi12b2lkIFBvcHVwTGlzdEJveDo6c2V0T3JpZ2luYWxJ
bmRleChpbnQgaW5kZXgpCi17Ci0gICAgbV9vcmlnaW5hbEluZGV4ID0gbV9zZWxlY3RlZEluZGV4
ID0gaW5kZXg7Ci19Ci0KLWludCBQb3B1cExpc3RCb3g6OmdldFJvd0hlaWdodChpbnQgaW5kZXgp
Ci17Ci0gICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAgcmV0dXJuIFBvcHVwTWVudUNocm9taXVt
OjptaW5pbXVtUm93SGVpZ2h0KCk7Ci0KLSAgICBpZiAobV9wb3B1cENsaWVudC0+aXRlbVN0eWxl
KGluZGV4KS5pc0Rpc3BsYXlOb25lKCkpCi0gICAgICAgIHJldHVybiBQb3B1cE1lbnVDaHJvbWl1
bTo6bWluaW11bVJvd0hlaWdodCgpOwotCi0gICAgLy8gU2VwYXJhdG9yIHJvdyBoZWlnaHQgaXMg
dGhlIHNhbWUgc2l6ZSBhcyBpdHNlbGYuCi0gICAgaWYgKG1fcG9wdXBDbGllbnQtPml0ZW1Jc1Nl
cGFyYXRvcihpbmRleCkpCi0gICAgICAgIHJldHVybiBtYXgoc2VwYXJhdG9ySGVpZ2h0LCBQb3B1
cE1lbnVDaHJvbWl1bTo6bWluaW11bVJvd0hlaWdodCgpKTsKLQotICAgIFN0cmluZyBpY29uID0g
bV9wb3B1cENsaWVudC0+aXRlbUljb24oaW5kZXgpOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Uo
SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGljb24udXRmOCgpLmRhdGEoKSkpOwotCi0gICAg
aW50IGZvbnRIZWlnaHQgPSBnZXRSb3dGb250KGluZGV4KS5mb250TWV0cmljcygpLmhlaWdodCgp
OwotICAgIGludCBpY29uSGVpZ2h0ID0gKGltYWdlICYmICFpbWFnZS0+aXNOdWxsKCkpID8gaW1h
Z2UtPnJlY3QoKS5oZWlnaHQoKSA6IDA7Ci0KLSAgICBpbnQgbGluZVBhZGRpbmdIZWlnaHQgPSBt
X3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5tZW51VHlwZSgpID09IFBvcHVwTWVudVN0eWxlOjpB
dXRvZmlsbFBvcHVwID8ga0xpbmVQYWRkaW5nSGVpZ2h0IDogMDsKLSAgICBpbnQgY2FsY3VsYXRl
ZFJvd0hlaWdodCA9IG1heChmb250SGVpZ2h0LCBpY29uSGVpZ2h0KSArIGxpbmVQYWRkaW5nSGVp
Z2h0ICogMjsKLSAgICByZXR1cm4gbWF4KGNhbGN1bGF0ZWRSb3dIZWlnaHQsIFBvcHVwTWVudUNo
cm9taXVtOjptaW5pbXVtUm93SGVpZ2h0KCkpOwotfQotCi1JbnRSZWN0IFBvcHVwTGlzdEJveDo6
Z2V0Um93Qm91bmRzKGludCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPCAwKQotICAgICAgICBy
ZXR1cm4gSW50UmVjdCgwLCAwLCB2aXNpYmxlV2lkdGgoKSwgZ2V0Um93SGVpZ2h0KGluZGV4KSk7
Ci0KLSAgICByZXR1cm4gSW50UmVjdCgwLCBtX2l0ZW1zW2luZGV4XS0+eU9mZnNldCwgdmlzaWJs
ZVdpZHRoKCksIGdldFJvd0hlaWdodChpbmRleCkpOwotfQotCi12b2lkIFBvcHVwTGlzdEJveDo6
aW52YWxpZGF0ZVJvdyhpbnQgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gSW52YWxpZGF0ZSBpbiB0aGUgd2luZG93IGNvbnRlbnRzLCBhcyBG
cmFtZWxlc3NTY3JvbGxWaWV3OjppbnZhbGlkYXRlUmVjdAotICAgIC8vIHBhaW50cyBpbiB0aGUg
d2luZG93IGNvb3JkaW5hdGVzLgotICAgIGludmFsaWRhdGVSZWN0KGNvbnRlbnRzVG9XaW5kb3co
Z2V0Um93Qm91bmRzKGluZGV4KSkpOwotfQotCi12b2lkIFBvcHVwTGlzdEJveDo6c2Nyb2xsVG9S
ZXZlYWxSb3coaW50IGluZGV4KQotewotICAgIGlmIChpbmRleCA8IDApCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEludFJlY3Qgcm93UmVjdCA9IGdldFJvd0JvdW5kcyhpbmRleCk7Ci0KLSAgICBp
ZiAocm93UmVjdC55KCkgPCBzY3JvbGxZKCkpIHsKLSAgICAgICAgLy8gUm93IGlzIGFib3ZlIGN1
cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLCBzY3JvbGwgdXAuCi0gICAgICAgIFNjcm9sbFZpZXc6OnNl
dFNjcm9sbFBvc2l0aW9uKEludFBvaW50KDAsIHJvd1JlY3QueSgpKSk7Ci0gICAgfSBlbHNlIGlm
IChyb3dSZWN0Lm1heFkoKSA+IHNjcm9sbFkoKSArIHZpc2libGVIZWlnaHQoKSkgewotICAgICAg
ICAvLyBSb3cgaXMgYmVsb3cgY3VycmVudCBzY3JvbGwgcG9zaXRpb24sIHNjcm9sbCBkb3duLgot
ICAgICAgICBTY3JvbGxWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0
Lm1heFkoKSAtIHZpc2libGVIZWlnaHQoKSkpOwotICAgIH0KLX0KLQotYm9vbCBQb3B1cExpc3RC
b3g6OmlzU2VsZWN0YWJsZUl0ZW0oaW50IGluZGV4KQotewotICAgIEFTU0VSVChpbmRleCA+PSAw
ICYmIGluZGV4IDwgbnVtSXRlbXMoKSk7Ci0gICAgcmV0dXJuIG1faXRlbXNbaW5kZXhdLT50eXBl
ID09IFBvcHVwSXRlbTo6VHlwZU9wdGlvbiAmJiBtX3BvcHVwQ2xpZW50LT5pdGVtSXNFbmFibGVk
KGluZGV4KTsKLX0KLQotdm9pZCBQb3B1cExpc3RCb3g6OmNsZWFyU2VsZWN0aW9uKCkKLXsKLSAg
ICBpZiAobV9zZWxlY3RlZEluZGV4ICE9IC0xKSB7Ci0gICAgICAgIGludmFsaWRhdGVSb3cobV9z
ZWxlY3RlZEluZGV4KTsKLSAgICAgICAgbV9zZWxlY3RlZEluZGV4ID0gLTE7Ci0gICAgICAgIG1f
cG9wdXBDbGllbnQtPnNlbGVjdGlvbkNsZWFyZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUG9wdXBM
aXN0Qm94OjpzZWxlY3ROZXh0Um93KCkKLXsKLSAgICBpZiAoIW1fc2V0dGluZ3MubG9vcFNlbGVj
dGlvbk5hdmlnYXRpb24gfHwgbV9zZWxlY3RlZEluZGV4ICE9IG51bUl0ZW1zKCkgLSAxKSB7Ci0g
ICAgICAgIGFkanVzdFNlbGVjdGVkSW5kZXgoMSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBXZSBhcmUgbW92aW5nIHBhc3QgdGhlIGxhc3QgaXRlbSwgbm8gcm93IHNob3VsZCBi
ZSBzZWxlY3RlZC4KLSAgICBjbGVhclNlbGVjdGlvbigpOwotfQotCi12b2lkIFBvcHVwTGlzdEJv
eDo6c2VsZWN0UHJldmlvdXNSb3coKQotewotICAgIGlmICghbV9zZXR0aW5ncy5sb29wU2VsZWN0
aW9uTmF2aWdhdGlvbiB8fCBtX3NlbGVjdGVkSW5kZXggPiAwKSB7Ci0gICAgICAgIGFkanVzdFNl
bGVjdGVkSW5kZXgoLTEpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Nl
bGVjdGVkSW5kZXgpIHsKLSAgICAgICAgLy8gV2UgYXJlIG1vdmluZyBwYXN0IHRoZSBmaXJzdCBp
dGVtLCBjbGVhciB0aGUgc2VsZWN0aW9uLgotICAgICAgICBjbGVhclNlbGVjdGlvbigpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTm8gcm93IGlzIHNlbGVjdGVkLCBqdW1wIHRv
IHRoZSBsYXN0IGl0ZW0uCi0gICAgc2VsZWN0SW5kZXgobnVtSXRlbXMoKSAtIDEpOwotICAgIHNj
cm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCk7Ci19Ci0KLXZvaWQgUG9wdXBMaXN0Qm94OjphZGp1c3RT
ZWxlY3RlZEluZGV4KGludCBkZWx0YSkKLXsKLSAgICBpbnQgdGFyZ2V0SW5kZXggPSBtX3NlbGVj
dGVkSW5kZXggKyBkZWx0YTsKLSAgICB0YXJnZXRJbmRleCA9IG1pbihtYXgodGFyZ2V0SW5kZXgs
IDApLCBudW1JdGVtcygpIC0gMSk7Ci0gICAgaWYgKCFpc1NlbGVjdGFibGVJdGVtKHRhcmdldElu
ZGV4KSkgewotICAgICAgICAvLyBXZSBkaWRuJ3QgbGFuZCBvbiBhbiBvcHRpb24uIFRyeSB0byBm
aW5kIG9uZS4KLSAgICAgICAgLy8gV2UgdHJ5IHRvIHNlbGVjdCB0aGUgY2xvc2VzdCBpbmRleCB0
byB0YXJnZXQsIHByaW9yaXRpemluZyBhbnkgaW4KLSAgICAgICAgLy8gdGhlIHJhbmdlIFtjdXJy
ZW50LCB0YXJnZXRdLgotCi0gICAgICAgIGludCBkaXIgPSBkZWx0YSA+IDAgPyAxIDogLTE7Ci0g
ICAgICAgIGludCB0ZXN0SW5kZXggPSBtX3NlbGVjdGVkSW5kZXg7Ci0gICAgICAgIGludCBiZXN0
SW5kZXggPSBtX3NlbGVjdGVkSW5kZXg7Ci0gICAgICAgIGJvb2wgcGFzc2VkVGFyZ2V0ID0gZmFs
c2U7Ci0gICAgICAgIHdoaWxlICh0ZXN0SW5kZXggPj0gMCAmJiB0ZXN0SW5kZXggPCBudW1JdGVt
cygpKSB7Ci0gICAgICAgICAgICBpZiAoaXNTZWxlY3RhYmxlSXRlbSh0ZXN0SW5kZXgpKQotICAg
ICAgICAgICAgICAgIGJlc3RJbmRleCA9IHRlc3RJbmRleDsKLSAgICAgICAgICAgIGlmICh0ZXN0
SW5kZXggPT0gdGFyZ2V0SW5kZXgpCi0gICAgICAgICAgICAgICAgcGFzc2VkVGFyZ2V0ID0gdHJ1
ZTsKLSAgICAgICAgICAgIGlmIChwYXNzZWRUYXJnZXQgJiYgYmVzdEluZGV4ICE9IG1fc2VsZWN0
ZWRJbmRleCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgdGVzdEluZGV4
ICs9IGRpcjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFBpY2sgdGhlIGJlc3QgaW5kZXgsIHdo
aWNoIG1heSBtZWFuIHdlIGRvbid0IGNoYW5nZS4KLSAgICAgICAgdGFyZ2V0SW5kZXggPSBiZXN0
SW5kZXg7Ci0gICAgfQotCi0gICAgLy8gU2VsZWN0IHRoZSBuZXcgaW5kZXgsIGFuZCBlbnN1cmUg
aXRzIHZpc2libGUuIFdlIGRvIHRoaXMgcmVnYXJkbGVzcyBvZgotICAgIC8vIHdoZXRoZXIgdGhl
IHNlbGVjdGlvbiBjaGFuZ2VkIHRvIGVuc3VyZSBrZXlib2FyZCBldmVudHMgYWx3YXlzIGJyaW5n
IHRoZQotICAgIC8vIHNlbGVjdGlvbiBpbnRvIHZpZXcuCi0gICAgc2VsZWN0SW5kZXgodGFyZ2V0
SW5kZXgpOwotICAgIHNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCk7Ci19Ci0KLXZvaWQgUG9wdXBM
aXN0Qm94OjpoaWRlUG9wdXAoKQotewotICAgIGlmIChwYXJlbnQoKSkgewotICAgICAgICBQb3B1
cENvbnRhaW5lciogY29udGFpbmVyID0gc3RhdGljX2Nhc3Q8UG9wdXBDb250YWluZXIqPihwYXJl
bnQoKSk7Ci0gICAgICAgIGlmIChjb250YWluZXItPmNsaWVudCgpKQotICAgICAgICAgICAgY29u
dGFpbmVyLT5jbGllbnQoKS0+cG9wdXBDbG9zZWQoY29udGFpbmVyKTsKLSAgICAgICAgY29udGFp
bmVyLT5ub3RpZnlQb3B1cEhpZGRlbigpOwotICAgIH0KLQotICAgIGlmIChtX3BvcHVwQ2xpZW50
KQotICAgICAgICBtX3BvcHVwQ2xpZW50LT5wb3B1cERpZEhpZGUoKTsKLX0KLQotdm9pZCBQb3B1
cExpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICBjbGVhcigpOwotCi0gICAgaW50
IHNpemUgPSBtX3BvcHVwQ2xpZW50LT5saXN0U2l6ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFBvcHVwSXRlbTo6VHlwZSB0eXBlOwotICAgICAgICBp
ZiAobV9wb3B1cENsaWVudC0+aXRlbUlzU2VwYXJhdG9yKGkpKQotICAgICAgICAgICAgdHlwZSA9
IFBvcHVwSXRlbTo6VHlwZVNlcGFyYXRvcjsKLSAgICAgICAgZWxzZSBpZiAobV9wb3B1cENsaWVu
dC0+aXRlbUlzTGFiZWwoaSkpCi0gICAgICAgICAgICB0eXBlID0gUG9wdXBJdGVtOjpUeXBlR3Jv
dXA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHR5cGUgPSBQb3B1cEl0ZW06OlR5cGVPcHRp
b247Ci0gICAgICAgIG1faXRlbXMuYXBwZW5kKG5ldyBQb3B1cEl0ZW0obV9wb3B1cENsaWVudC0+
aXRlbVRleHQoaSksIHR5cGUpKTsKLSAgICAgICAgbV9pdGVtc1tpXS0+ZW5hYmxlZCA9IGlzU2Vs
ZWN0YWJsZUl0ZW0oaSk7Ci0gICAgICAgIFBvcHVwTWVudVN0eWxlIHN0eWxlID0gbV9wb3B1cENs
aWVudC0+aXRlbVN0eWxlKGkpOwotICAgICAgICBtX2l0ZW1zW2ldLT50ZXh0RGlyZWN0aW9uID0g
c3R5bGUudGV4dERpcmVjdGlvbigpOwotICAgICAgICBtX2l0ZW1zW2ldLT5oYXNUZXh0RGlyZWN0
aW9uT3ZlcnJpZGUgPSBzdHlsZS5oYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUoKTsKLSAgICB9Ci0K
LSAgICBtX3NlbGVjdGVkSW5kZXggPSBtX3BvcHVwQ2xpZW50LT5zZWxlY3RlZEluZGV4KCk7Ci0g
ICAgc2V0T3JpZ2luYWxJbmRleChtX3NlbGVjdGVkSW5kZXgpOwotCi0gICAgbGF5b3V0KCk7Ci19
Ci0KLXZvaWQgUG9wdXBMaXN0Qm94OjpzZXRNYXhXaWR0aEFuZExheW91dChpbnQgbWF4V2lkdGgp
Ci17Ci0gICAgbV9tYXhXaW5kb3dXaWR0aCA9IG1heFdpZHRoOwotICAgIGxheW91dCgpOwotfQot
Ci12b2lkIFBvcHVwTGlzdEJveDo6bGF5b3V0KCkKLXsKLSAgICBib29sIGlzUmlnaHRBbGlnbmVk
ID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpID09IFJUTDsKLQot
ICAgIC8vIFNpemUgb3VyIGNoaWxkIGl0ZW1zLgotICAgIGludCBiYXNlV2lkdGggPSAwOwotICAg
IGludCBwYWRkaW5nV2lkdGggPSAwOwotICAgIGludCBsaW5lRW5kUGFkZGluZ1dpZHRoID0gMDsK
LSAgICBpbnQgeSA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1JdGVtcygpOyArK2kp
IHsKLSAgICAgICAgLy8gUGxhY2UgdGhlIGl0ZW0gdmVydGljYWxseS4KLSAgICAgICAgbV9pdGVt
c1tpXS0+eU9mZnNldCA9IHk7Ci0gICAgICAgIGlmIChtX3BvcHVwQ2xpZW50LT5pdGVtU3R5bGUo
aSkuaXNEaXNwbGF5Tm9uZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHkgKz0g
Z2V0Um93SGVpZ2h0KGkpOwotCi0gICAgICAgIC8vIEVuc3VyZSB0aGUgcG9wdXAgaXMgd2lkZSBl
bm91Z2ggdG8gZml0IHRoaXMgaXRlbS4KLSAgICAgICAgRm9udCBpdGVtRm9udCA9IGdldFJvd0Zv
bnQoaSk7Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0gbV9wb3B1cENsaWVudC0+aXRlbVRleHQoaSk7
Ci0gICAgICAgIFN0cmluZyBsYWJlbCA9IG1fcG9wdXBDbGllbnQtPml0ZW1MYWJlbChpKTsKLSAg
ICAgICAgU3RyaW5nIGljb24gPSBtX3BvcHVwQ2xpZW50LT5pdGVtSWNvbihpKTsKLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpY29uSW1hZ2UoSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGljb24u
dXRmOCgpLmRhdGEoKSkpOwotICAgICAgICBpbnQgd2lkdGggPSAwOwotICAgICAgICBpZiAoIXRl
eHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgd2lkdGggPSBpdGVtRm9udC53aWR0aChUZXh0UnVu
KHRleHQpKTsKLSAgICAgICAgaWYgKCFsYWJlbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlm
ICh3aWR0aCA+IDApCi0gICAgICAgICAgICAgICAgd2lkdGggKz0ga1RleHRUb0xhYmVsUGFkZGlu
ZzsKLSAgICAgICAgICAgIHdpZHRoICs9IGl0ZW1Gb250LndpZHRoKFRleHRSdW4obGFiZWwpKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoaWNvbkltYWdlICYmICFpY29uSW1hZ2UtPmlzTnVsbCgp
KSB7Ci0gICAgICAgICAgICBpZiAod2lkdGggPiAwKQotICAgICAgICAgICAgICAgIHdpZHRoICs9
IGtMYWJlbFRvSWNvblBhZGRpbmc7Ci0gICAgICAgICAgICB3aWR0aCArPSBpY29uSW1hZ2UtPnJl
Y3QoKS53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgYmFzZVdpZHRoID0gbWF4KGJhc2VX
aWR0aCwgd2lkdGgpOwotICAgICAgICAvLyBGSVhNRTogaHR0cDovL2IvMTIxMDQ4MSBXZSBzaG91
bGQgZ2V0IHRoZSBwYWRkaW5nIG9mIGluZGl2aWR1YWwgb3B0aW9uIGVsZW1lbnRzLgotICAgICAg
ICBwYWRkaW5nV2lkdGggPSBtYXgocGFkZGluZ1dpZHRoLAotICAgICAgICAgICAgbV9wb3B1cENs
aWVudC0+Y2xpZW50UGFkZGluZ0xlZnQoKSArIG1fcG9wdXBDbGllbnQtPmNsaWVudFBhZGRpbmdS
aWdodCgpKTsKLSAgICAgICAgbGluZUVuZFBhZGRpbmdXaWR0aCA9IG1heChsaW5lRW5kUGFkZGlu
Z1dpZHRoLAotICAgICAgICAgICAgaXNSaWdodEFsaWduZWQgPyBtX3BvcHVwQ2xpZW50LT5jbGll
bnRQYWRkaW5nTGVmdCgpIDogbV9wb3B1cENsaWVudC0+Y2xpZW50UGFkZGluZ1JpZ2h0KCkpOwot
ICAgIH0KLQotICAgIC8vIENhbGN1bGF0ZSBzY3JvbGwgYmFyIHdpZHRoLgotICAgIGludCB3aW5k
b3dIZWlnaHQgPSAwOwotICAgIG1fdmlzaWJsZVJvd3MgPSBtaW4obnVtSXRlbXMoKSwga01heFZp
c2libGVSb3dzKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV92aXNpYmxlUm93czsgKytp
KSB7Ci0gICAgICAgIGludCByb3dIZWlnaHQgPSBnZXRSb3dIZWlnaHQoaSk7Ci0KLSAgICAgICAg
Ly8gT25seSBjbGlwIHRoZSB3aW5kb3cgaGVpZ2h0IGZvciBub24tTWFjIHBsYXRmb3Jtcy4KLSAg
ICAgICAgaWYgKHdpbmRvd0hlaWdodCArIHJvd0hlaWdodCA+IG1fbWF4SGVpZ2h0KSB7Ci0gICAg
ICAgICAgICBtX3Zpc2libGVSb3dzID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgd2luZG93SGVpZ2h0ICs9IHJvd0hlaWdodDsKLSAgICB9Ci0KLSAgICAvLyBT
ZXQgb3VyIHdpZGdldCBhbmQgc2Nyb2xsYWJsZSBjb250ZW50cyBzaXplcy4KLSAgICBpbnQgc2Ny
b2xsYmFyV2lkdGggPSAwOwotICAgIGlmIChtX3Zpc2libGVSb3dzIDwgbnVtSXRlbXMoKSkgewot
ICAgICAgICBzY3JvbGxiYXJXaWR0aCA9IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5z
Y3JvbGxiYXJUaGlja25lc3MoKTsKLQotICAgICAgICAvLyBVc2Uga01pbkVuZE9mTGluZVBhZGRp
bmcgd2hlbiB0aGVyZSBpcyBhIHNjcm9sbGJhciBzbyB0aGF0IHdlIHVzZQotICAgICAgICAvLyBh
cyBtdWNoIGFzIChsaW5lRW5kUGFkZGluZ1dpZHRoIC0ga01pbkVuZE9mTGluZVBhZGRpbmcpIHBh
ZGRpbmcKLSAgICAgICAgLy8gc3BhY2UgZm9yIHNjcm9sbGJhciBhbmQgYWxsb3cgdXNlciB0byB1
c2UgQ1NTIHBhZGRpbmcgdG8gbWFrZSB0aGUKLSAgICAgICAgLy8gcG9wdXAgbGlzdGJveCBhbGln
biB3aXRoIHRoZSBzZWxlY3QgZWxlbWVudC4KLSAgICAgICAgcGFkZGluZ1dpZHRoID0gcGFkZGlu
Z1dpZHRoIC0gbGluZUVuZFBhZGRpbmdXaWR0aCArIGtNaW5FbmRPZkxpbmVQYWRkaW5nOwotICAg
IH0KLQotICAgIGludCB3aW5kb3dXaWR0aDsKLSAgICBpbnQgY29udGVudFdpZHRoOwotICAgIGlm
IChtX3NldHRpbmdzLnJlc3RyaWN0V2lkdGhPZkxpc3RCb3gpIHsKLSAgICAgICAgd2luZG93V2lk
dGggPSBtX2Jhc2VXaWR0aDsKLSAgICAgICAgY29udGVudFdpZHRoID0gbV9iYXNlV2lkdGggLSBz
Y3JvbGxiYXJXaWR0aDsKLSAgICB9IGVsc2UgewotICAgICAgICB3aW5kb3dXaWR0aCA9IGJhc2VX
aWR0aCArIHNjcm9sbGJhcldpZHRoICsgcGFkZGluZ1dpZHRoOwotICAgICAgICBpZiAod2luZG93
V2lkdGggPiBtX21heFdpbmRvd1dpZHRoKSB7Ci0gICAgICAgICAgICAvLyB3aW5kb3dXaWR0aCBl
eGNlZWRzIG1fbWF4V2luZG93V2lkdGgsIHNvIHdlIGhhdmUgdG8gY2xpcC4KLSAgICAgICAgICAg
IHdpbmRvd1dpZHRoID0gbV9tYXhXaW5kb3dXaWR0aDsKLSAgICAgICAgICAgIGJhc2VXaWR0aCA9
IHdpbmRvd1dpZHRoIC0gc2Nyb2xsYmFyV2lkdGggLSBwYWRkaW5nV2lkdGg7Ci0gICAgICAgICAg
ICBtX2Jhc2VXaWR0aCA9IGJhc2VXaWR0aDsKLSAgICAgICAgfQotICAgICAgICBjb250ZW50V2lk
dGggPSB3aW5kb3dXaWR0aCAtIHNjcm9sbGJhcldpZHRoOwotCi0gICAgICAgIGlmICh3aW5kb3dX
aWR0aCA8IG1fYmFzZVdpZHRoKSB7Ci0gICAgICAgICAgICB3aW5kb3dXaWR0aCA9IG1fYmFzZVdp
ZHRoOwotICAgICAgICAgICAgY29udGVudFdpZHRoID0gbV9iYXNlV2lkdGggLSBzY3JvbGxiYXJX
aWR0aDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2Jhc2VXaWR0aCA9IGJhc2VXaWR0
aDsKLSAgICB9Ci0KLSAgICByZXNpemUod2luZG93V2lkdGgsIHdpbmRvd0hlaWdodCk7Ci0gICAg
c2V0Q29udGVudHNTaXplKEludFNpemUoY29udGVudFdpZHRoLCBnZXRSb3dCb3VuZHMobnVtSXRl
bXMoKSAtIDEpLm1heFkoKSkpOwotCi0gICAgaWYgKGhvc3RXaW5kb3coKSkKLSAgICAgICAgc2Ny
b2xsVG9SZXZlYWxTZWxlY3Rpb24oKTsKLQotICAgIGludmFsaWRhdGUoKTsKLX0KLQotdm9pZCBQ
b3B1cExpc3RCb3g6OmNsZWFyKCkKLXsKLSAgICBmb3IgKFZlY3RvcjxQb3B1cEl0ZW0qPjo6aXRl
cmF0b3IgaXQgPSBtX2l0ZW1zLmJlZ2luKCk7IGl0ICE9IG1faXRlbXMuZW5kKCk7ICsraXQpCi0g
ICAgICAgIGRlbGV0ZSAqaXQ7Ci0gICAgbV9pdGVtcy5jbGVhcigpOwotfQotCi1ib29sIFBvcHVw
TGlzdEJveDo6aXNQb2ludEluQm91bmRzKGNvbnN0IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBy
ZXR1cm4gbnVtSXRlbXMoKSAmJiBJbnRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKS5jb250
YWlucyhwb2ludCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTGlzdEJveC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBMaXN0Qm94LmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDRjZWMzYTQxYWU3MDUxYTYwMTkwOWYxYTAxNTlmNjk2MmExYjFlNDYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBMaXN0Qm94LmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
MDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotI2lmbmRlZiBQb3B1cExpc3RCb3hfaAotI2RlZmluZSBQb3B1cExpc3RCb3hfaAot
Ci0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUg
IkZyYW1lbGVzc1Njcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
Tm9kZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBs
b25nIFRpbWVTdGFtcDsKLQotc3RhdGljIGNvbnN0IGludCBrTGFiZWxUb0ljb25QYWRkaW5nID0g
NTsKLXN0YXRpYyBjb25zdCBpbnQga0xpbmVQYWRkaW5nSGVpZ2h0ID0gMzsgLy8gUGFkZGluZyBo
ZWlnaHQgcHV0IGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBlYWNoIGxpbmUuCi1zdGF0aWMgY29u
c3QgaW50IGtNYXhIZWlnaHQgPSA1MDA7Ci1zdGF0aWMgY29uc3QgaW50IGtNYXhWaXNpYmxlUm93
cyA9IDIwOwotc3RhdGljIGNvbnN0IGludCBrTWluRW5kT2ZMaW5lUGFkZGluZyA9IDI7Ci1zdGF0
aWMgY29uc3QgaW50IGtUZXh0VG9MYWJlbFBhZGRpbmcgPSAxMDsKLXN0YXRpYyBjb25zdCBUaW1l
U3RhbXAga1R5cGVBaGVhZFRpbWVvdXRNcyA9IDEwMDA7Ci0KLWNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKLWNsYXNzIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDsKLWNsYXNzIFBsYXRmb3JtTW91c2VFdmVu
dDsKLSNpZiBFTkFCTEUoR0VTVFVSRV9FVkVOVFMpCi1jbGFzcyBQbGF0Zm9ybUdlc3R1cmVFdmVu
dDsKLSNlbmRpZgotI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi1jbGFzcyBQbGF0Zm9ybVRvdWNo
RXZlbnQ7Ci0jZW5kaWYKLWNsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKLWNsYXNzIFBvcHVwTWVu
dUNsaWVudDsKLQotc3RydWN0IFBvcHVwQ29udGFpbmVyU2V0dGluZ3MgewotICAgIC8vIFdoZXRo
ZXIgdGhlIFBvcHVwTWVudUNsaWVudCBzaG91bGQgYmUgdG9sZCB0byBjaGFuZ2UgaXRzIHRleHQg
d2hlbiBhCi0gICAgLy8gbmV3IGl0ZW0gaXMgc2VsZWN0ZWQgYnkgdXNpbmcgdGhlIGFycm93IGtl
eXMuCi0gICAgYm9vbCBzZXRUZXh0T25JbmRleENoYW5nZTsKLQotICAgIC8vIFdoZXRoZXIgdGhl
IHNlbGVjdGlvbiBzaG91bGQgYmUgYWNjZXB0ZWQgd2hlbiB0aGUgcG9wdXAgbWVudSBpcwotICAg
IC8vIGNsb3NlZCAodGhyb3VnaCBFU0MgYmVpbmcgcHJlc3NlZCBvciB0aGUgZm9jdXMgZ29pbmcg
YXdheSkuCi0gICAgLy8gTm90ZSB0aGF0IHdoZW4gVEFCIGlzIHByZXNzZWQsIHRoZSBzZWxlY3Rp
b24gaXMgYWx3YXlzIGFjY2VwdGVkCi0gICAgLy8gcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcu
Ci0gICAgYm9vbCBhY2NlcHRPbkFiYW5kb247Ci0KLSAgICAvLyBXaGV0aGVyIHdlIHNob3VsZCBt
b3ZlIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGZpcnN0L2xhc3QgaXRlbSB3aGVuCi0gICAgLy8gdGhl
IHVzZXIgcHJlc3NlcyBkb3duL3VwIGFycm93IGtleXMgYW5kIHRoZSBsYXN0L2ZpcnN0IGl0ZW0g
aXMKLSAgICAvLyBzZWxlY3RlZC4KLSAgICBib29sIGxvb3BTZWxlY3Rpb25OYXZpZ2F0aW9uOwot
Ci0gICAgLy8gV2hldGhlciB3ZSBzaG91bGQgcmVzdHJpY3QgdGhlIHdpZHRoIG9mIHRoZSBQb3B1
cExpc3RCb3ggb3Igbm90LgotICAgIC8vIEF1dG9jb21wbGV0ZSBwb3B1cHMgYXJlIHJlc3RyaWN0
ZWQsIGNvbWJvLWJveGVzIChzZWxlY3QgdGFncykgYXJlbid0LgotICAgIGJvb2wgcmVzdHJpY3RX
aWR0aE9mTGlzdEJveDsKLX07Ci0KLS8vIEEgY29udGFpbmVyIGZvciB0aGUgZGF0YSBmb3IgZWFj
aCBtZW51IGl0ZW0gKGUuZy4gcmVwcmVzZW50ZWQgYnkgPG9wdGlvbj4KLS8vIG9yIDxvcHRncm91
cD4gaW4gYSA8c2VsZWN0PiB3aWRnZXQpIGFuZCBpcyB1c2VkIGJ5IFBvcHVwTGlzdEJveC4KLXN0
cnVjdCBQb3B1cEl0ZW0gewotICAgIGVudW0gVHlwZSB7Ci0gICAgICAgIFR5cGVPcHRpb24sCi0g
ICAgICAgIFR5cGVHcm91cCwKLSAgICAgICAgVHlwZVNlcGFyYXRvcgotICAgIH07Ci0KLSAgICBQ
b3B1cEl0ZW0oY29uc3QgU3RyaW5nJiBsYWJlbCwgVHlwZSB0eXBlKQotICAgICAgICA6IGxhYmVs
KGxhYmVsKQotICAgICAgICAsIHR5cGUodHlwZSkKLSAgICAgICAgLCB5T2Zmc2V0KDApCi0gICAg
ewotICAgIH0KLSAgICBTdHJpbmcgbGFiZWw7Ci0gICAgVHlwZSB0eXBlOwotICAgIGludCB5T2Zm
c2V0OyAvLyB5IG9mZnNldCBvZiB0aGlzIGl0ZW0sIHJlbGF0aXZlIHRvIHRoZSB0b3Agb2YgdGhl
IHBvcHVwLgotICAgIFRleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbjsKLSAgICBib29sIGhhc1Rl
eHREaXJlY3Rpb25PdmVycmlkZTsKLSAgICBib29sIGVuYWJsZWQ7Ci19OwotCi0vLyBUaGlzIGNs
YXNzIHVzZXMgV2ViQ29yZSBjb2RlIHRvIHBhaW50IGFuZCBoYW5kbGUgZXZlbnRzIGZvciBhIGRy
b3AtZG93biBsaXN0Ci0vLyBib3ggKCJjb21ib2JveCIgb24gV2luZG93cykuCi1jbGFzcyBQb3B1
cExpc3RCb3ggOiBwdWJsaWMgRnJhbWVsZXNzU2Nyb2xsVmlldyB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8UG9wdXBMaXN0Qm94PiBjcmVhdGUoUG9wdXBNZW51Q2xpZW50KiBjbGll
bnQsIGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0dGluZ3MmIHNldHRpbmdzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQb3B1cExpc3RCb3goY2xpZW50LCBzZXR0aW5ncykpOwot
ICAgIH0KLQotICAgIC8vIEZyYW1lbGVzc1Njcm9sbFZpZXcKLSAgICB2aXJ0dWFsIHZvaWQgcGFp
bnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVNb3VzZURvd25FdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKLSAgICB2aXJ0
dWFsIGJvb2wgaGFuZGxlTW91c2VNb3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7
Ci0gICAgdmlydHVhbCBib29sIGhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBs
YXRmb3JtV2hlZWxFdmVudCYpOwotICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVLZXlFdmVudChjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmKTsKLSNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAg
IHZpcnR1YWwgYm9vbCBoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYp
OwotI2VuZGlmCi0jaWYgRU5BQkxFKEdFU1RVUkVfUkVDT0dOSVpFUikKLSAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlR2VzdHVyZUV2ZW50KGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50Jik7Ci0jZW5k
aWYKLQotICAgIC8vIFNjcm9sbFZpZXcKLSAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3coKSBjb25zdDsKLQotICAgIC8vIFBvcHVwTGlzdEJveCBtZXRob2RzCi0KLSAgICAvLyBIaWRl
cyB0aGUgcG9wdXAuCi0gICAgdm9pZCBoaWRlUG9wdXAoKTsKLQotICAgIC8vIFVwZGF0ZXMgb3Vy
IGludGVybmFsIGxpc3QgdG8gbWF0Y2ggdGhlIGNsaWVudC4KLSAgICB2b2lkIHVwZGF0ZUZyb21F
bGVtZW50KCk7Ci0KLSAgICAvLyBGcmVlcyBhbnkgYWxsb2NhdGVkIHJlc291cmNlcyB1c2VkIGlu
IGEgcGFydGljdWxhciBwb3B1cCBzZXNzaW9uLgotICAgIHZvaWQgY2xlYXIoKTsKLQotICAgIC8v
IFNldHMgdGhlIGluZGV4IG9mIHRoZSBvcHRpb24gdGhhdCBpcyBkaXNwbGF5ZWQgaW4gdGhlIDxz
ZWxlY3Q+IHdpZGdldCBpbiB0aGUgcGFnZQotICAgIHZvaWQgc2V0T3JpZ2luYWxJbmRleChpbnQp
OwotCi0gICAgLy8gR2V0cyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gdGhhdCB0aGUgdXNlciBpcyBj
dXJyZW50bHkgbW91c2VkIG92ZXIgb3IgaGFzIHNlbGVjdGVkIHdpdGgKLSAgICAvLyB0aGUga2V5
Ym9hcmQuIFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBpbmRleCwgc2luY2Ug
dGhlIHVzZXIgaGFzIG5vdCB5ZXQKLSAgICAvLyBhY2NlcHRlZCB0aGlzIGlucHV0LgotICAgIGlu
dCBzZWxlY3RlZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZEluZGV4OyB9Ci0KLSAg
ICAvLyBNb3ZlcyBzZWxlY3Rpb24gZG93bi91cCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGl0ZW1zLCBz
Y3JvbGxpbmcgaWYgbmVjZXNzYXJ5LgotICAgIC8vIFBvc2l0aXZlIGlzIGRvd24uIFRoZSByZXN1
bHRpbmcgaW5kZXggd2lsbCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZQotICAgIC8vIFswLCBudW1J
dGVtcyksIGFuZCBub24tb3B0aW9uIGl0ZW1zIHdpbGwgYmUgc2tpcHBlZC4KLSAgICB2b2lkIGFk
anVzdFNlbGVjdGVkSW5kZXgoaW50IGRlbHRhKTsKLQotICAgIC8vIFJldHVybnMgdGhlIG51bWJl
ciBvZiBpdGVtcyBpbiB0aGUgbGlzdC4KLSAgICBpbnQgbnVtSXRlbXMoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KG1faXRlbXMuc2l6ZSgpKTsgfQotCi0gICAgdm9pZCBzZXRCYXNl
V2lkdGgoaW50IHdpZHRoKSB7IG1fYmFzZVdpZHRoID0gc3RkOjptaW4obV9tYXhXaW5kb3dXaWR0
aCwgd2lkdGgpOyB9Ci0KLSAgICAvLyBDb21wdXRlcyB0aGUgc2l6ZSBvZiB3aWRnZXQgYW5kIGNo
aWxkcmVuLgotICAgIHZvaWQgbGF5b3V0KCk7Ci0KLSAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhl
IHBvcHVwIHdhbnRzIHRvIHByb2Nlc3MgZXZlbnRzIGZvciB0aGUgcGFzc2VkIGtleS4KLSAgICBi
b29sIGlzSW50ZXJlc3RlZEluRXZlbnRGb3JLZXkoaW50IGtleUNvZGUpOwotCi0gICAgLy8gR2V0
cyB0aGUgaGVpZ2h0IG9mIGEgcm93LgotICAgIGludCBnZXRSb3dIZWlnaHQoaW50IGluZGV4KTsK
LQotICAgIHZvaWQgc2V0TWF4SGVpZ2h0KGludCBtYXhIZWlnaHQpIHsgbV9tYXhIZWlnaHQgPSBt
YXhIZWlnaHQ7IH0KLQotICAgIHZvaWQgc2V0TWF4V2lkdGgoaW50IG1heFdpZHRoKSB7IG1fbWF4
V2luZG93V2lkdGggPSBtYXhXaWR0aDsgfQotCi0gICAgdm9pZCBzZXRNYXhXaWR0aEFuZExheW91
dChpbnQpOwotCi0gICAgdm9pZCBkaXNjb25uZWN0Q2xpZW50KCkgeyBtX3BvcHVwQ2xpZW50ID0g
MDsgfQotCi0gICAgY29uc3QgVmVjdG9yPFBvcHVwSXRlbSo+JiBpdGVtcygpIGNvbnN0IHsgcmV0
dXJuIG1faXRlbXM7IH0KLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgUG9wdXBDb250YWlu
ZXI7Ci0gICAgZnJpZW5kIGNsYXNzIFJlZkNvdW50ZWQ8UG9wdXBMaXN0Qm94PjsKLQotICAgIFBv
cHVwTGlzdEJveChQb3B1cE1lbnVDbGllbnQqLCBjb25zdCBQb3B1cENvbnRhaW5lclNldHRpbmdz
Jik7Ci0KLSAgICB+UG9wdXBMaXN0Qm94KCkKLSAgICB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAg
fQotCi0gICAgLy8gQ2xvc2VzIHRoZSBwb3B1cAotICAgIHZvaWQgYWJhbmRvbigpOwotCi0gICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBzZWxlY3Rpb24gY2FuIGJlIGNoYW5nZWQgdG8gaW5kZXgu
Ci0gICAgLy8gRGlzYWJsZWQgaXRlbXMsIG9yIGxhYmVscyBjYW5ub3QgYmUgc2VsZWN0ZWQuCi0g
ICAgYm9vbCBpc1NlbGVjdGFibGVJdGVtKGludCBpbmRleCk7Ci0KLSAgICAvLyBTZWxlY3QgYW4g
aW5kZXggaW4gdGhlIGxpc3QsIHNjcm9sbGluZyBpZiBuZWNlc3NhcnkuCi0gICAgdm9pZCBzZWxl
Y3RJbmRleChpbnQgaW5kZXgpOwotCi0gICAgLy8gQWNjZXB0cyB0aGUgc2VsZWN0ZWQgaW5kZXgg
YXMgdGhlIHZhbHVlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgPHNlbGVjdD4gd2lkZ2V0IG9uCi0g
ICAgLy8gdGhlIHdlYiBwYWdlLCBhbmQgY2xvc2VzIHRoZSBwb3B1cC4gUmV0dXJucyB0cnVlIGlm
IGluZGV4IGlzIGFjY2VwdGVkLgotICAgIGJvb2wgYWNjZXB0SW5kZXgoaW50IGluZGV4KTsKLQot
ICAgIC8vIENsZWFycyB0aGUgc2VsZWN0aW9uIChzbyBubyByb3cgYXBwZWFycyBzZWxlY3RlZCku
Ci0gICAgdm9pZCBjbGVhclNlbGVjdGlvbigpOwotCi0gICAgLy8gU2Nyb2xscyB0byByZXZlYWwg
dGhlIGdpdmVuIGluZGV4LgotICAgIHZvaWQgc2Nyb2xsVG9SZXZlYWxSb3coaW50IGluZGV4KTsK
LSAgICB2b2lkIHNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCkgeyBzY3JvbGxUb1JldmVhbFJvdyht
X3NlbGVjdGVkSW5kZXgpOyB9Ci0KLSAgICAvLyBJbnZhbGlkYXRlcyB0aGUgcm93IGF0IHRoZSBn
aXZlbiBpbmRleC4KLSAgICB2b2lkIGludmFsaWRhdGVSb3coaW50IGluZGV4KTsKLQotICAgIC8v
IEdldCB0aGUgYm91bmRzIG9mIGEgcm93LgotICAgIEludFJlY3QgZ2V0Um93Qm91bmRzKGludCBp
bmRleCk7Ci0KLSAgICAvLyBDb252ZXJ0cyBhIHBvaW50IHRvIGFuIGluZGV4IG9mIHRoZSByb3cg
dGhlIHBvaW50IGlzIG92ZXIKLSAgICBpbnQgcG9pbnRUb1Jvd0luZGV4KGNvbnN0IEludFBvaW50
Jik7Ci0KLSAgICAvLyBQYWludCBhbiBpbmRpdmlkdWFsIHJvdwotICAgIHZvaWQgcGFpbnRSb3co
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGludCByb3dJbmRleCk7Ci0KLSAgICAv
LyBUZXN0IGlmIHRoZSBnaXZlbiBwb2ludCBpcyB3aXRoaW4gdGhlIGJvdW5kcyBvZiB0aGUgcG9w
dXAgd2luZG93LgotICAgIGJvb2wgaXNQb2ludEluQm91bmRzKGNvbnN0IEludFBvaW50Jik7Ci0K
LSAgICAvLyBDYWxsZWQgd2hlbiB0aGUgdXNlciBwcmVzc2VzIGEgdGV4dCBrZXkuIERvZXMgYSBw
cmVmaXgtc2VhcmNoIG9mIHRoZSBpdGVtcy4KLSAgICB2b2lkIHR5cGVBaGVhZEZpbmQoY29uc3Qg
UGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBmb250IHRvIHVz
ZSBmb3IgdGhlIGdpdmVuIHJvdwotICAgIEZvbnQgZ2V0Um93Rm9udChpbnQgaW5kZXgpOwotCi0g
ICAgLy8gTW92ZXMgdGhlIHNlbGVjdGlvbiBkb3duL3VwIG9uZSBpdGVtLCB0YWtpbmcgY2FyZSBv
ZiBsb29waW5nIGJhY2sgdG8gdGhlCi0gICAgLy8gZmlyc3QvbGFzdCBlbGVtZW50IGlmIG1fbG9v
cFNlbGVjdGlvbk5hdmlnYXRpb24gaXMgdHJ1ZS4KLSAgICB2b2lkIHNlbGVjdFByZXZpb3VzUm93
KCk7Ci0gICAgdm9pZCBzZWxlY3ROZXh0Um93KCk7Ci0KLSAgICAvLyBUaGUgc2V0dGluZ3MgdGhh
dCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBmb3IgdGhpcyBQb3B1cCB3aW5kb3cuCi0gICAgUG9wdXBD
b250YWluZXJTZXR0aW5ncyBtX3NldHRpbmdzOwotCi0gICAgLy8gVGhpcyBpcyB0aGUgaW5kZXgg
b2YgdGhlIGl0ZW0gbWFya2VkIGFzICJzZWxlY3RlZCIgLSBpLmUuIGRpc3BsYXllZCBpbiB0aGUg
d2lkZ2V0IG9uIHRoZQotICAgIC8vIHBhZ2UuCi0gICAgaW50IG1fb3JpZ2luYWxJbmRleDsKLQot
ICAgIC8vIFRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRoYXQgdGhlIHVzZXIgaXMgaG92
ZXJlZCBvdmVyIG9yIGhhcyBzZWxlY3RlZCB1c2luZyB0aGUKLSAgICAvLyBrZXlib2FyZCBpbiB0
aGUgbGlzdC4gVGhleSBoYXZlIG5vdCBjb25maXJtZWQgdGhpcyBzZWxlY3Rpb24gYnkgY2xpY2tp
bmcgb3IgcHJlc3NpbmcKLSAgICAvLyBlbnRlciB5ZXQgaG93ZXZlci4KLSAgICBpbnQgbV9zZWxl
Y3RlZEluZGV4OwotCi0gICAgLy8gSWYgPj0gMCwgdGhpcyBpcyB0aGUgaW5kZXggd2Ugc2hvdWxk
IGFjY2VwdCBpZiB0aGUgcG9wdXAgaXMgImFiYW5kb25lZCIuCi0gICAgLy8gVGhpcyBpcyB1c2Vk
IGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uLCB3aGVyZSB3ZSB3YW50IHRoZQotICAgIC8vIHNlbGVj
dGlvbiB0byBjaGFuZ2UgaW1tZWRpYXRlbHksIGFuZCBpcyBvbmx5IHVzZWQgaWYgdGhlIHNldHRp
bmdzCi0gICAgLy8gYWNjZXB0T25BYmFuZG9uIGZpZWxkIGlzIHRydWUuCi0gICAgaW50IG1fYWNj
ZXB0ZWRJbmRleE9uQWJhbmRvbjsKLQotICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiByb3dz
IHZpc2libGUgaW4gdGhlIHBvcHVwLiBUaGUgbWF4aW11bSBudW1iZXIgdmlzaWJsZSBhdCBhIHRp
bWUgaXMKLSAgICAvLyBkZWZpbmVkIGFzIGJlaW5nIGtNYXhWaXNpYmxlUm93cy4gRm9yIGEgc2Ny
b2xsZWQgcG9wdXAsIHRoaXMgY2FuIGJlIHRob3VnaHQgb2YgYXMgdGhlCi0gICAgLy8gcGFnZSBz
aXplIGluIGRhdGEgdW5pdHMuCi0gICAgaW50IG1fdmlzaWJsZVJvd3M7Ci0KLSAgICAvLyBPdXIg
c3VnZ2VzdGVkIHdpZHRoLCBub3QgaW5jbHVkaW5nIHNjcm9sbGJhci4KLSAgICBpbnQgbV9iYXNl
V2lkdGg7Ci0KLSAgICAvLyBUaGUgbWF4aW11bSBoZWlnaHQgd2UgY2FuIGJlIHdpdGhvdXQgYmVp
bmcgb2ZmLXNjcmVlbi4KLSAgICBpbnQgbV9tYXhIZWlnaHQ7Ci0KLSAgICAvLyBBIGxpc3Qgb2Yg
dGhlIG9wdGlvbnMgY29udGFpbmVkIHdpdGhpbiB0aGUgPHNlbGVjdD4KLSAgICBWZWN0b3I8UG9w
dXBJdGVtKj4gbV9pdGVtczsKLQotICAgIC8vIFRoZSA8c2VsZWN0PiBQb3B1cE1lbnVDbGllbnQg
dGhhdCBvcGVuZWQgdXMuCi0gICAgUG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xpZW50OwotCi0g
ICAgLy8gVGhlIHNjcm9sbGJhciB3aGljaCBoYXMgbW91c2UgY2FwdHVyZS4gTW91c2UgZXZlbnRz
IGdvIHN0cmFpZ2h0IHRvIHRoaXMKLSAgICAvLyBpZiBub3QgbnVsbC4KLSAgICBSZWZQdHI8U2Ny
b2xsYmFyPiBtX2NhcHR1cmluZ1Njcm9sbGJhcjsKLQotICAgIC8vIFRoZSBsYXN0IHNjcm9sbGJh
ciB0aGF0IHRoZSBtb3VzZSB3YXMgb3Zlci4gVXNlZCBmb3IgbW91c2VvdmVyIGhpZ2hsaWdodHMu
Ci0gICAgUmVmUHRyPFNjcm9sbGJhcj4gbV9sYXN0U2Nyb2xsYmFyVW5kZXJNb3VzZTsKLQotICAg
IC8vIFRoZSBzdHJpbmcgdGhlIHVzZXIgaGFzIHR5cGVkIHNvIGZhciBpbnRvIHRoZSBwb3B1cC4g
VXNlZCBmb3IgdHlwZUFoZWFkRmluZC4KLSAgICBTdHJpbmcgbV90eXBlZFN0cmluZzsKLQotICAg
IC8vIFRoZSBjaGFyIHRoZSB1c2VyIGhhcyBoaXQgcmVwZWF0ZWRseS4gVXNlZCBmb3IgdHlwZUFo
ZWFkRmluZC4KLSAgICBVQ2hhciBtX3JlcGVhdGluZ0NoYXI7Ci0KLSAgICAvLyBUaGUgbGFzdCB0
aW1lIHRoZSB1c2VyIGhpdCBhIGtleS4gVXNlZCBmb3IgdHlwZUFoZWFkRmluZC4KLSAgICBUaW1l
U3RhbXAgbV9sYXN0Q2hhclRpbWU7Ci0KLSAgICAvLyBJZiB3aWR0aCBleGVlZHMgc2NyZWVuIHdp
ZHRoLCB3ZSBoYXZlIHRvIGNsaXAgaXQuCi0gICAgaW50IG1fbWF4V2luZG93V2lkdGg7Ci0KLSAg
ICAvLyBUbyBmb3J3YXJkIGxhc3QgbW91c2UgcmVsZWFzZSBldmVudC4KLSAgICBSZWZQdHI8Tm9k
ZT4gbV9mb2N1c2VkTm9kZTsKLQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVu
dUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVu
dUNocm9taXVtLmNwcAppbmRleCAzYjJmMmFlOWZlMzQzMjhhYmNlZGIzZDk1YTE5ZjE4ZTUxMjk0
YzIwLi40MzhhMjlhNTg2NTk2ZTNkOWIyM2Q4ZmQ2MjM3NmZhYjNkYjE0MDQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0u
Y3BwCkBAIC0zMSwxMiArMzEsNjMgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlBvcHVwTWVudUNocm9taXVtLmgiCi0jaW5jbHVkZSAiUG9wdXBDb250YWluZXIuaCIKKworI2lu
Y2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudENocm9taXVtLmgiCisjaW5j
bHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVsZXNzU2Nyb2xsVmll
dy5oIgorI2luY2x1ZGUgIkZyYW1lbGVzc1Njcm9sbFZpZXdDbGllbnQuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiS2V5Ym9h
cmRDb2Rlcy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVNjcmVlbi5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUg
IlBvcHVwTWVudUNsaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAi
U2Nyb2xsYmFyVGhlbWUuaCIKKyNpbmNsdWRlICJTdHJpbmdUcnVuY2F0b3IuaCIKKyNpbmNsdWRl
ICJTeXN0ZW1UaW1lLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlVzZXJHZXN0
dXJlSW5kaWNhdG9yLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8
d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKworI2lmIEVOQUJMRShHRVNUVVJFX0VWRU5U
UykKKyNpbmNsdWRlICJQbGF0Zm9ybUdlc3R1cmVFdmVudC5oIgorI2VuZGlmCisKKyNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQorI2luY2x1ZGUgIlBsYXRmb3JtVG91Y2hFdmVudC5oIgorI2VuZGlm
CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFt
ZXNwYWNlIFVuaWNvZGU7CisKK3VzaW5nIHN0ZDo6bWluOwordXNpbmcgc3RkOjptYXg7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogaW50IFBvcHVwTWVudUNocm9taXVtOjpzX21pbmltdW1Sb3dI
ZWlnaHQgPSAwOwogCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBUaW1lU3RhbXA7CisKK3N0
YXRpYyBjb25zdCBpbnQga01heFZpc2libGVSb3dzID0gMjA7CitzdGF0aWMgY29uc3QgaW50IGtN
YXhIZWlnaHQgPSA1MDA7CitzdGF0aWMgY29uc3QgaW50IGtCb3JkZXJTaXplID0gMTsKK3N0YXRp
YyBjb25zdCBpbnQga1RleHRUb0xhYmVsUGFkZGluZyA9IDEwOworc3RhdGljIGNvbnN0IGludCBr
TGFiZWxUb0ljb25QYWRkaW5nID0gNTsKK3N0YXRpYyBjb25zdCBpbnQga01pbkVuZE9mTGluZVBh
ZGRpbmcgPSAyOworc3RhdGljIGNvbnN0IFRpbWVTdGFtcCBrVHlwZUFoZWFkVGltZW91dE1zID0g
MTAwMDsKK3N0YXRpYyBjb25zdCBpbnQga0xpbmVQYWRkaW5nSGVpZ2h0ID0gMzsgLy8gUGFkZGlu
ZyBoZWlnaHQgcHV0IGF0IHRoZSB0b3AgYW5kIGJvdHRvbSBvZiBlYWNoIGxpbmUuCisKIC8vIFRo
ZSBzZXR0aW5ncyB1c2VkIGZvciB0aGUgZHJvcCBkb3duIG1lbnUuCiAvLyBUaGlzIGlzIHRoZSBk
ZWxlZ2F0ZSB1c2VkIGlmIG5vbmUgaXMgcHJvdmlkZWQuCiBzdGF0aWMgY29uc3QgUG9wdXBDb250
YWluZXJTZXR0aW5ncyBkcm9wRG93blNldHRpbmdzID0gewpAQCAtNDYsNiArOTcsMTQ0OSBAQCBz
dGF0aWMgY29uc3QgUG9wdXBDb250YWluZXJTZXR0aW5ncyBkcm9wRG93blNldHRpbmdzID0gewog
ICAgIGZhbHNlIC8vIHJlc3RyaWN0V2lkdGhPZkxpc3RCb3gKIH07CiAKKy8vIFRoaXMgY2xhc3Mg
dXNlcyBXZWJDb3JlIGNvZGUgdG8gcGFpbnQgYW5kIGhhbmRsZSBldmVudHMgZm9yIGEgZHJvcC1k
b3duIGxpc3QKKy8vIGJveCAoImNvbWJvYm94IiBvbiBXaW5kb3dzKS4KK2NsYXNzIFBvcHVwTGlz
dEJveCA6IHB1YmxpYyBGcmFtZWxlc3NTY3JvbGxWaWV3IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQb3B1cExpc3RCb3g+IGNyZWF0ZShQb3B1cE1lbnVDbGllbnQqIGNsaWVudCwg
Y29uc3QgUG9wdXBDb250YWluZXJTZXR0aW5ncyYgc2V0dGluZ3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFBvcHVwTGlzdEJveChjbGllbnQsIHNldHRpbmdzKSk7CisgICAg
fQorCisgICAgLy8gRnJhbWVsZXNzU2Nyb2xsVmlldworICAgIHZpcnR1YWwgdm9pZCBwYWludChH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRs
ZU1vdXNlRG93bkV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1YWwg
Ym9vbCBoYW5kbGVNb3VzZU1vdmVFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3Vz
ZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhhbmRsZUtleUV2ZW50KGNvbnN0IFBs
YXRmb3JtS2V5Ym9hcmRFdmVudCYpOworI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCisgICAgdmly
dHVhbCBib29sIGhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50Jik7Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05JWkVSKQorICAgIHZpcnR1YWwgYm9vbCBo
YW5kbGVHZXN0dXJlRXZlbnQoY29uc3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmKTsKKyNlbmRpZgor
CisgICAgLy8gU2Nyb2xsVmlldworICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygp
IGNvbnN0OworCisgICAgLy8gUG9wdXBMaXN0Qm94IG1ldGhvZHMKKworICAgIC8vIEhpZGVzIHRo
ZSBwb3B1cC4KKyAgICB2b2lkIGhpZGVQb3B1cCgpOworCisgICAgLy8gVXBkYXRlcyBvdXIgaW50
ZXJuYWwgbGlzdCB0byBtYXRjaCB0aGUgY2xpZW50LgorICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1l
bnQoKTsKKworICAgIC8vIEZyZWVzIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIHVzZWQgaW4gYSBw
YXJ0aWN1bGFyIHBvcHVwIHNlc3Npb24uCisgICAgdm9pZCBjbGVhcigpOworCisgICAgLy8gU2V0
cyB0aGUgaW5kZXggb2YgdGhlIG9wdGlvbiB0aGF0IGlzIGRpc3BsYXllZCBpbiB0aGUgPHNlbGVj
dD4gd2lkZ2V0IGluIHRoZSBwYWdlCisgICAgdm9pZCBzZXRPcmlnaW5hbEluZGV4KGludCBpbmRl
eCk7CisKKyAgICAvLyBHZXRzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB0aGF0IHRoZSB1c2VyIGlz
IGN1cnJlbnRseSBtb3VzZWQgb3ZlciBvciBoYXMgc2VsZWN0ZWQgd2l0aAorICAgIC8vIHRoZSBr
ZXlib2FyZC4gVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIGluZGV4LCBzaW5j
ZSB0aGUgdXNlciBoYXMgbm90IHlldAorICAgIC8vIGFjY2VwdGVkIHRoaXMgaW5wdXQuCisgICAg
aW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5kZXg7IH0KKwor
ICAgIC8vIE1vdmVzIHNlbGVjdGlvbiBkb3duL3VwIHRoZSBnaXZlbiBudW1iZXIgb2YgaXRlbXMs
IHNjcm9sbGluZyBpZiBuZWNlc3NhcnkuCisgICAgLy8gUG9zaXRpdmUgaXMgZG93bi4gIFRoZSBy
ZXN1bHRpbmcgaW5kZXggd2lsbCBiZSBjbGFtcGVkIHRvIHRoZSByYW5nZQorICAgIC8vIFswLCBu
dW1JdGVtcyksIGFuZCBub24tb3B0aW9uIGl0ZW1zIHdpbGwgYmUgc2tpcHBlZC4KKyAgICB2b2lk
IGFkanVzdFNlbGVjdGVkSW5kZXgoaW50IGRlbHRhKTsKKworICAgIC8vIFJldHVybnMgdGhlIG51
bWJlciBvZiBpdGVtcyBpbiB0aGUgbGlzdC4KKyAgICBpbnQgbnVtSXRlbXMoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1faXRlbXMuc2l6ZSgpKTsgfQorCisgICAgdm9pZCBzZXRC
YXNlV2lkdGgoaW50IHdpZHRoKSB7IG1fYmFzZVdpZHRoID0gbWluKG1fbWF4V2luZG93V2lkdGgs
IHdpZHRoKTsgfQorCisgICAgLy8gQ29tcHV0ZXMgdGhlIHNpemUgb2Ygd2lkZ2V0IGFuZCBjaGls
ZHJlbi4KKyAgICB2b2lkIGxheW91dCgpOworCisgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBw
b3B1cCB3YW50cyB0byBwcm9jZXNzIGV2ZW50cyBmb3IgdGhlIHBhc3NlZCBrZXkuCisgICAgYm9v
bCBpc0ludGVyZXN0ZWRJbkV2ZW50Rm9yS2V5KGludCBrZXlDb2RlKTsKKworICAgIC8vIEdldHMg
dGhlIGhlaWdodCBvZiBhIHJvdy4KKyAgICBpbnQgZ2V0Um93SGVpZ2h0KGludCBpbmRleCk7CisK
KyAgICB2b2lkIHNldE1heEhlaWdodChpbnQgbWF4SGVpZ2h0KSB7IG1fbWF4SGVpZ2h0ID0gbWF4
SGVpZ2h0OyB9CisKKyAgICB2b2lkIHNldE1heFdpZHRoKGludCBtYXhXaWR0aCkgeyBtX21heFdp
bmRvd1dpZHRoID0gbWF4V2lkdGg7IH0KKworICAgIHZvaWQgc2V0TWF4V2lkdGhBbmRMYXlvdXQo
aW50KTsKKworICAgIHZvaWQgZGlzY29ubmVjdENsaWVudCgpIHsgbV9wb3B1cENsaWVudCA9IDA7
IH0KKworICAgIGNvbnN0IFZlY3RvcjxQb3B1cEl0ZW0qPiYgaXRlbXMoKSBjb25zdCB7IHJldHVy
biBtX2l0ZW1zOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBvcHVwQ29udGFpbmVy
OworICAgIGZyaWVuZCBjbGFzcyBSZWZDb3VudGVkPFBvcHVwTGlzdEJveD47CisKKyAgICBQb3B1
cExpc3RCb3goUG9wdXBNZW51Q2xpZW50KiBjbGllbnQsIGNvbnN0IFBvcHVwQ29udGFpbmVyU2V0
dGluZ3MmIHNldHRpbmdzKQorICAgICAgICA6IG1fc2V0dGluZ3Moc2V0dGluZ3MpCisgICAgICAg
ICwgbV9vcmlnaW5hbEluZGV4KDApCisgICAgICAgICwgbV9zZWxlY3RlZEluZGV4KDApCisgICAg
ICAgICwgbV9hY2NlcHRlZEluZGV4T25BYmFuZG9uKC0xKQorICAgICAgICAsIG1fdmlzaWJsZVJv
d3MoMCkKKyAgICAgICAgLCBtX2Jhc2VXaWR0aCgwKQorICAgICAgICAsIG1fbWF4SGVpZ2h0KGtN
YXhIZWlnaHQpCisgICAgICAgICwgbV9wb3B1cENsaWVudChjbGllbnQpCisgICAgICAgICwgbV9y
ZXBlYXRpbmdDaGFyKDApCisgICAgICAgICwgbV9sYXN0Q2hhclRpbWUoMCkKKyAgICAgICAgLCBt
X21heFdpbmRvd1dpZHRoKG51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgIHsKKyAgICAg
ICAgc2V0U2Nyb2xsYmFyTW9kZXMoU2Nyb2xsYmFyQWx3YXlzT2ZmLCBTY3JvbGxiYXJBbHdheXNP
ZmYpOworICAgIH0KKworICAgIH5Qb3B1cExpc3RCb3goKQorICAgIHsKKyAgICAgICAgY2xlYXIo
KTsKKyAgICB9CisKKyAgICAvLyBDbG9zZXMgdGhlIHBvcHVwCisgICAgdm9pZCBhYmFuZG9uKCk7
CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHNlbGVjdGlvbiBjYW4gYmUgY2hhbmdlZCB0
byBpbmRleC4KKyAgICAvLyBEaXNhYmxlZCBpdGVtcywgb3IgbGFiZWxzIGNhbm5vdCBiZSBzZWxl
Y3RlZC4KKyAgICBib29sIGlzU2VsZWN0YWJsZUl0ZW0oaW50IGluZGV4KTsKKworICAgIC8vIFNl
bGVjdCBhbiBpbmRleCBpbiB0aGUgbGlzdCwgc2Nyb2xsaW5nIGlmIG5lY2Vzc2FyeS4KKyAgICB2
b2lkIHNlbGVjdEluZGV4KGludCBpbmRleCk7CisKKyAgICAvLyBBY2NlcHRzIHRoZSBzZWxlY3Rl
ZCBpbmRleCBhcyB0aGUgdmFsdWUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSA8c2VsZWN0PiB3aWRn
ZXQgb24KKyAgICAvLyB0aGUgd2ViIHBhZ2UsIGFuZCBjbG9zZXMgdGhlIHBvcHVwLiBSZXR1cm5z
IHRydWUgaWYgaW5kZXggaXMgYWNjZXB0ZWQuCisgICAgYm9vbCBhY2NlcHRJbmRleChpbnQgaW5k
ZXgpOworCisgICAgLy8gQ2xlYXJzIHRoZSBzZWxlY3Rpb24gKHNvIG5vIHJvdyBhcHBlYXJzIHNl
bGVjdGVkKS4KKyAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7CisKKyAgICAvLyBTY3JvbGxzIHRv
IHJldmVhbCB0aGUgZ2l2ZW4gaW5kZXguCisgICAgdm9pZCBzY3JvbGxUb1JldmVhbFJvdyhpbnQg
aW5kZXgpOworICAgIHZvaWQgc2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24oKSB7IHNjcm9sbFRvUmV2
ZWFsUm93KG1fc2VsZWN0ZWRJbmRleCk7IH0KKworICAgIC8vIEludmFsaWRhdGVzIHRoZSByb3cg
YXQgdGhlIGdpdmVuIGluZGV4LgorICAgIHZvaWQgaW52YWxpZGF0ZVJvdyhpbnQgaW5kZXgpOwor
CisgICAgLy8gR2V0IHRoZSBib3VuZHMgb2YgYSByb3cuCisgICAgSW50UmVjdCBnZXRSb3dCb3Vu
ZHMoaW50IGluZGV4KTsKKworICAgIC8vIENvbnZlcnRzIGEgcG9pbnQgdG8gYW4gaW5kZXggb2Yg
dGhlIHJvdyB0aGUgcG9pbnQgaXMgb3ZlcgorICAgIGludCBwb2ludFRvUm93SW5kZXgoY29uc3Qg
SW50UG9pbnQmKTsKKworICAgIC8vIFBhaW50IGFuIGluZGl2aWR1YWwgcm93CisgICAgdm9pZCBw
YWludFJvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0JiwgaW50IHJvd0luZGV4KTsK
KworICAgIC8vIFRlc3QgaWYgdGhlIGdpdmVuIHBvaW50IGlzIHdpdGhpbiB0aGUgYm91bmRzIG9m
IHRoZSBwb3B1cCB3aW5kb3cuCisgICAgYm9vbCBpc1BvaW50SW5Cb3VuZHMoY29uc3QgSW50UG9p
bnQmKTsKKworICAgIC8vIENhbGxlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgYSB0ZXh0IGtleS4g
IERvZXMgYSBwcmVmaXgtc2VhcmNoIG9mIHRoZSBpdGVtcy4KKyAgICB2b2lkIHR5cGVBaGVhZEZp
bmQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50Jik7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBm
b250IHRvIHVzZSBmb3IgdGhlIGdpdmVuIHJvdworICAgIEZvbnQgZ2V0Um93Rm9udChpbnQgaW5k
ZXgpOworCisgICAgLy8gTW92ZXMgdGhlIHNlbGVjdGlvbiBkb3duL3VwIG9uZSBpdGVtLCB0YWtp
bmcgY2FyZSBvZiBsb29waW5nIGJhY2sgdG8gdGhlCisgICAgLy8gZmlyc3QvbGFzdCBlbGVtZW50
IGlmIG1fbG9vcFNlbGVjdGlvbk5hdmlnYXRpb24gaXMgdHJ1ZS4KKyAgICB2b2lkIHNlbGVjdFBy
ZXZpb3VzUm93KCk7CisgICAgdm9pZCBzZWxlY3ROZXh0Um93KCk7CisKKyAgICAvLyBUaGUgc2V0
dGluZ3MgdGhhdCBzcGVjaWZ5IHRoZSBiZWhhdmlvciBmb3IgdGhpcyBQb3B1cCB3aW5kb3cuCisg
ICAgUG9wdXBDb250YWluZXJTZXR0aW5ncyBtX3NldHRpbmdzOworCisgICAgLy8gVGhpcyBpcyB0
aGUgaW5kZXggb2YgdGhlIGl0ZW0gbWFya2VkIGFzICJzZWxlY3RlZCIgLSBpLmUuIGRpc3BsYXll
ZCBpbiB0aGUgd2lkZ2V0IG9uIHRoZQorICAgIC8vIHBhZ2UuCisgICAgaW50IG1fb3JpZ2luYWxJ
bmRleDsKKworICAgIC8vIFRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHRoYXQgdGhlIHVz
ZXIgaXMgaG92ZXJlZCBvdmVyIG9yIGhhcyBzZWxlY3RlZCB1c2luZyB0aGUKKyAgICAvLyBrZXli
b2FyZCBpbiB0aGUgbGlzdC4gVGhleSBoYXZlIG5vdCBjb25maXJtZWQgdGhpcyBzZWxlY3Rpb24g
YnkgY2xpY2tpbmcgb3IgcHJlc3NpbmcKKyAgICAvLyBlbnRlciB5ZXQgaG93ZXZlci4KKyAgICBp
bnQgbV9zZWxlY3RlZEluZGV4OworCisgICAgLy8gSWYgPj0gMCwgdGhpcyBpcyB0aGUgaW5kZXgg
d2Ugc2hvdWxkIGFjY2VwdCBpZiB0aGUgcG9wdXAgaXMgImFiYW5kb25lZCIuCisgICAgLy8gVGhp
cyBpcyB1c2VkIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uLCB3aGVyZSB3ZSB3YW50IHRoZQorICAg
IC8vIHNlbGVjdGlvbiB0byBjaGFuZ2UgaW1tZWRpYXRlbHksIGFuZCBpcyBvbmx5IHVzZWQgaWYg
dGhlIHNldHRpbmdzCisgICAgLy8gYWNjZXB0T25BYmFuZG9uIGZpZWxkIGlzIHRydWUuCisgICAg
aW50IG1fYWNjZXB0ZWRJbmRleE9uQWJhbmRvbjsKKworICAgIC8vIFRoaXMgaXMgdGhlIG51bWJl
ciBvZiByb3dzIHZpc2libGUgaW4gdGhlIHBvcHVwLiBUaGUgbWF4aW11bSBudW1iZXIgdmlzaWJs
ZSBhdCBhIHRpbWUgaXMKKyAgICAvLyBkZWZpbmVkIGFzIGJlaW5nIGtNYXhWaXNpYmxlUm93cy4g
Rm9yIGEgc2Nyb2xsZWQgcG9wdXAsIHRoaXMgY2FuIGJlIHRob3VnaHQgb2YgYXMgdGhlCisgICAg
Ly8gcGFnZSBzaXplIGluIGRhdGEgdW5pdHMuCisgICAgaW50IG1fdmlzaWJsZVJvd3M7CisKKyAg
ICAvLyBPdXIgc3VnZ2VzdGVkIHdpZHRoLCBub3QgaW5jbHVkaW5nIHNjcm9sbGJhci4KKyAgICBp
bnQgbV9iYXNlV2lkdGg7CisKKyAgICAvLyBUaGUgbWF4aW11bSBoZWlnaHQgd2UgY2FuIGJlIHdp
dGhvdXQgYmVpbmcgb2ZmLXNjcmVlbi4KKyAgICBpbnQgbV9tYXhIZWlnaHQ7CisKKyAgICAvLyBB
IGxpc3Qgb2YgdGhlIG9wdGlvbnMgY29udGFpbmVkIHdpdGhpbiB0aGUgPHNlbGVjdD4KKyAgICBW
ZWN0b3I8UG9wdXBJdGVtKj4gbV9pdGVtczsKKworICAgIC8vIFRoZSA8c2VsZWN0PiBQb3B1cE1l
bnVDbGllbnQgdGhhdCBvcGVuZWQgdXMuCisgICAgUG9wdXBNZW51Q2xpZW50KiBtX3BvcHVwQ2xp
ZW50OworCisgICAgLy8gVGhlIHNjcm9sbGJhciB3aGljaCBoYXMgbW91c2UgY2FwdHVyZS4gIE1v
dXNlIGV2ZW50cyBnbyBzdHJhaWdodCB0byB0aGlzCisgICAgLy8gaWYgbm9uLU5VTEwuCisgICAg
UmVmUHRyPFNjcm9sbGJhcj4gbV9jYXB0dXJpbmdTY3JvbGxiYXI7CisKKyAgICAvLyBUaGUgbGFz
dCBzY3JvbGxiYXIgdGhhdCB0aGUgbW91c2Ugd2FzIG92ZXIuICBVc2VkIGZvciBtb3VzZW92ZXIg
aGlnaGxpZ2h0cy4KKyAgICBSZWZQdHI8U2Nyb2xsYmFyPiBtX2xhc3RTY3JvbGxiYXJVbmRlck1v
dXNlOworCisgICAgLy8gVGhlIHN0cmluZyB0aGUgdXNlciBoYXMgdHlwZWQgc28gZmFyIGludG8g
dGhlIHBvcHVwLiBVc2VkIGZvciB0eXBlQWhlYWRGaW5kLgorICAgIFN0cmluZyBtX3R5cGVkU3Ry
aW5nOworCisgICAgLy8gVGhlIGNoYXIgdGhlIHVzZXIgaGFzIGhpdCByZXBlYXRlZGx5LiAgVXNl
ZCBmb3IgdHlwZUFoZWFkRmluZC4KKyAgICBVQ2hhciBtX3JlcGVhdGluZ0NoYXI7CisKKyAgICAv
LyBUaGUgbGFzdCB0aW1lIHRoZSB1c2VyIGhpdCBhIGtleS4gIFVzZWQgZm9yIHR5cGVBaGVhZEZp
bmQuCisgICAgVGltZVN0YW1wIG1fbGFzdENoYXJUaW1lOworCisgICAgLy8gSWYgd2lkdGggZXhl
ZWRzIHNjcmVlbiB3aWR0aCwgd2UgaGF2ZSB0byBjbGlwIGl0LgorICAgIGludCBtX21heFdpbmRv
d1dpZHRoOworCisgICAgLy8gVG8gZm9yd2FyZCBsYXN0IG1vdXNlIHJlbGVhc2UgZXZlbnQuCisg
ICAgUmVmUHRyPE5vZGU+IG1fZm9jdXNlZE5vZGU7Cit9OworCitzdGF0aWMgUGxhdGZvcm1Nb3Vz
ZUV2ZW50IGNvbnN0cnVjdFJlbGF0aXZlTW91c2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZl
bnQmIGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBGcmFtZWxlc3NTY3JvbGxWaWV3KiBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcmFtZWxlc3NTY3JvbGxWaWV3KiBjaGls
ZCkKK3sKKyAgICBJbnRQb2ludCBwb3MgPSBwYXJlbnQtPmNvbnZlcnRTZWxmVG9DaGlsZChjaGls
ZCwgZS5wb3MoKSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIGhvcnJpYmxlIGhhY2sgc2lu
Y2UgUGxhdGZvcm1Nb3VzZUV2ZW50IGhhcyBubyBzZXR0ZXJzIGZvciB4L3kuCisgICAgUGxhdGZv
cm1Nb3VzZUV2ZW50IHJlbGF0aXZlRXZlbnQgPSBlOworICAgIEludFBvaW50JiByZWxhdGl2ZVBv
cyA9IGNvbnN0X2Nhc3Q8SW50UG9pbnQmPihyZWxhdGl2ZUV2ZW50LnBvcygpKTsKKyAgICByZWxh
dGl2ZVBvcy5zZXRYKHBvcy54KCkpOworICAgIHJlbGF0aXZlUG9zLnNldFkocG9zLnkoKSk7Cisg
ICAgcmV0dXJuIHJlbGF0aXZlRXZlbnQ7Cit9CisKK3N0YXRpYyBQbGF0Zm9ybVdoZWVsRXZlbnQg
Y29uc3RydWN0UmVsYXRpdmVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZy
YW1lbGVzc1Njcm9sbFZpZXcqIHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZyYW1lbGVzc1Njcm9sbFZpZXcqIGNoaWxkKQorewor
ICAgIEludFBvaW50IHBvcyA9IHBhcmVudC0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxkLCBlLnBv
cygpKTsKKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgaG9ycmlibGUgaGFjayBzaW5jZSBQbGF0
Zm9ybVdoZWVsRXZlbnQgaGFzIG5vIHNldHRlcnMgZm9yIHgveS4KKyAgICBQbGF0Zm9ybVdoZWVs
RXZlbnQgcmVsYXRpdmVFdmVudCA9IGU7CisgICAgSW50UG9pbnQmIHJlbGF0aXZlUG9zID0gY29u
c3RfY2FzdDxJbnRQb2ludCY+KHJlbGF0aXZlRXZlbnQucG9zKCkpOworICAgIHJlbGF0aXZlUG9z
LnNldFgocG9zLngoKSk7CisgICAgcmVsYXRpdmVQb3Muc2V0WShwb3MueSgpKTsKKyAgICByZXR1
cm4gcmVsYXRpdmVFdmVudDsKK30KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUG9wdXBD
b250YWluZXIgaW1wbGVtZW50YXRpb24KKworLy8gc3RhdGljCitQYXNzUmVmUHRyPFBvcHVwQ29u
dGFpbmVyPiBQb3B1cENvbnRhaW5lcjo6Y3JlYXRlKFBvcHVwTWVudUNsaWVudCogY2xpZW50LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3B1cFR5
cGUgcG9wdXBUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBQb3B1cENvbnRhaW5lclNldHRpbmdzJiBzZXR0aW5ncykKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFBvcHVwQ29udGFpbmVyKGNsaWVudCwgcG9wdXBUeXBlLCBzZXR0
aW5ncykpOworfQorCitQb3B1cENvbnRhaW5lcjo6UG9wdXBDb250YWluZXIoUG9wdXBNZW51Q2xp
ZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9wdXBUeXBlIHBv
cHVwVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb3B1cENvbnRh
aW5lclNldHRpbmdzJiBzZXR0aW5ncykKKyAgICA6IG1fbGlzdEJveChQb3B1cExpc3RCb3g6OmNy
ZWF0ZShjbGllbnQsIHNldHRpbmdzKSkKKyAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCisgICAg
LCBtX3BvcHVwVHlwZShwb3B1cFR5cGUpCisgICAgLCBtX3BvcHVwT3BlbihmYWxzZSkKK3sKKyAg
ICBzZXRTY3JvbGxiYXJNb2RlcyhTY3JvbGxiYXJBbHdheXNPZmYsIFNjcm9sbGJhckFsd2F5c09m
Zik7Cit9CisKK1BvcHVwQ29udGFpbmVyOjp+UG9wdXBDb250YWluZXIoKQoreworICAgIGlmICht
X2xpc3RCb3ggJiYgbV9saXN0Qm94LT5wYXJlbnQoKSkKKyAgICAgICAgcmVtb3ZlQ2hpbGQobV9s
aXN0Qm94LmdldCgpKTsKK30KKworSW50UmVjdCBQb3B1cENvbnRhaW5lcjo6bGF5b3V0QW5kQ2Fs
Y3VsYXRlV2lkZ2V0UmVjdChpbnQgdGFyZ2V0Q29udHJvbEhlaWdodCwgY29uc3QgSW50UG9pbnQm
IHBvcHVwSW5pdGlhbENvb3JkaW5hdGUpCit7CisgICAgLy8gUmVzZXQgdGhlIG1heCB3aWR0aCBh
bmQgaGVpZ2h0IHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCB0aGV5IHdpbGwgYmUgcmVjb21wdXRl
ZCBiZWxvdworICAgIC8vIGlmIG5lY2Vzc2FyeS4KKyAgICBtX2xpc3RCb3gtPnNldE1heEhlaWdo
dChrTWF4SGVpZ2h0KTsKKyAgICBtX2xpc3RCb3gtPnNldE1heFdpZHRoKG51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKTsKKworICAgIC8vIExheSBldmVyeXRoaW5nIG91dCB0byBmaWd1cmUgb3V0
IG91ciBwcmVmZXJyZWQgc2l6ZSwgdGhlbiB0ZWxsIHRoZSB2aWV3J3MKKyAgICAvLyBXaWRnZXRD
bGllbnQgYWJvdXQgaXQuICBJdCBzaG91bGQgYXNzaWduIHVzIGEgY2xpZW50LgorICAgIGludCBy
dGxPZmZzZXQgPSBsYXlvdXRBbmRHZXRSVExPZmZzZXQoKTsKKyAgICBib29sIGlzUlRMID0gdGhp
cy0+aXNSVEwoKTsKKyAgICBpbnQgcmlnaHRPZmZzZXQgPSBpc1JUTCA/IHJ0bE9mZnNldCA6IDA7
CisKKyAgICAvLyBBc3N1bWUgbV9saXN0Qm94IHNpemUgaXMgYWxyZWFkeSBjYWxjdWxhdGVkLgor
ICAgIEludFNpemUgdGFyZ2V0U2l6ZShtX2xpc3RCb3gtPndpZHRoKCkgKyBrQm9yZGVyU2l6ZSAq
IDIsCisgICAgICAgICAgICAgICAgICAgICAgIG1fbGlzdEJveC0+aGVpZ2h0KCkgKyBrQm9yZGVy
U2l6ZSAqIDIpOworCisgICAgSW50UmVjdCB3aWRnZXRSZWN0OworICAgIENocm9tZUNsaWVudENo
cm9taXVtKiBjaHJvbWVDbGllbnQgPSBjaHJvbWVDbGllbnRDaHJvbWl1bSgpOworICAgIGlmIChj
aHJvbWVDbGllbnQpIHsKKyAgICAgICAgLy8gSWYgdGhlIHBvcHVwIHdvdWxkIGV4dGVuZCBwYXN0
IHRoZSBib3R0b20gb2YgdGhlIHNjcmVlbiwgb3BlbiB1cHdhcmRzCisgICAgICAgIC8vIGluc3Rl
YWQuCisgICAgICAgIEZsb2F0UmVjdCBzY3JlZW4gPSBzY3JlZW5BdmFpbGFibGVSZWN0KG1fZnJh
bWVWaWV3LmdldCgpKTsKKyAgICAgICAgLy8gVXNlIHBvcHVwSW5pdGlhbENvb3JkaW5hdGUueCgp
ICsgcmlnaHRPZmZzZXQgYmVjYXVzZSBSVEwgcG9zaXRpb24KKyAgICAgICAgLy8gbmVlZHMgdG8g
YmUgY29uc2lkZXJlZC4KKyAgICAgICAgd2lkZ2V0UmVjdCA9IGNocm9tZUNsaWVudC0+d2luZG93
VG9TY3JlZW4oSW50UmVjdChwb3B1cEluaXRpYWxDb29yZGluYXRlLngoKSArIHJpZ2h0T2Zmc2V0
LCBwb3B1cEluaXRpYWxDb29yZGluYXRlLnkoKSwgdGFyZ2V0U2l6ZS53aWR0aCgpLCB0YXJnZXRT
aXplLmhlaWdodCgpKSk7CisKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSBtdWx0aXBsZSBzY3JlZW5z
IGFuZCB0aGUgYnJvd3NlciByZWN0IGlzIGluIG9uZSBzY3JlZW4sIHdlIGhhdmUKKyAgICAgICAg
Ly8gdG8gY2xpcCB0aGUgd2luZG93IHdpZHRoIHRvIHRoZSBzY3JlZW4gd2lkdGguCisgICAgICAg
IC8vIFdoZW4gY2xpcHBpbmcsIHdlIGFsc28gbmVlZCB0byBzZXQgYSBtYXhpbXVtIHdpZHRoIGZv
ciB0aGUgbGlzdCBib3guCisgICAgICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0ID0gY2hyb21lQ2xp
ZW50LT53aW5kb3dSZWN0KCk7CisgICAgICAgIGlmICh3aW5kb3dSZWN0LngoKSA+PSBzY3JlZW4u
eCgpICYmIHdpbmRvd1JlY3QubWF4WCgpIDw9IHNjcmVlbi5tYXhYKCkgJiYgKHdpZGdldFJlY3Qu
eCgpIDwgc2NyZWVuLngoKSB8fCB3aWRnZXRSZWN0Lm1heFgoKSA+IHNjcmVlbi5tYXhYKCkpKSB7
CisgICAgICAgICAgICAvLyBGaXJzdCwgaW52ZXJzZSB0aGUgcG9wdXAgYWxpZ25tZW50IGlmIGl0
IGRvZXMgbm90IGZpdCB0aGUgc2NyZWVuIC0gdGhpcyBtaWdodCBmaXggdGhpbmdzIChvciBtYWtl
IHRoZW0gYmV0dGVyKS4KKyAgICAgICAgICAgIEludFJlY3QgaW52ZXJzZVdpZGdldFJlY3QgPSBj
aHJvbWVDbGllbnQtPndpbmRvd1RvU2NyZWVuKEludFJlY3QocG9wdXBJbml0aWFsQ29vcmRpbmF0
ZS54KCkgKyAoaXNSVEwgPyAwIDogcnRsT2Zmc2V0KSwgcG9wdXBJbml0aWFsQ29vcmRpbmF0ZS55
KCksIHRhcmdldFNpemUud2lkdGgoKSwgdGFyZ2V0U2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAg
ICAgSW50UmVjdCBlbmNsb3NpbmdTY3JlZW4gPSBlbmNsb3NpbmdJbnRSZWN0KHNjcmVlbik7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbEN1dG9mZiA9IG1heChlbmNsb3NpbmdTY3JlZW4u
eCgpIC0gd2lkZ2V0UmVjdC54KCksIDApICsgbWF4KHdpZGdldFJlY3QubWF4WCgpIC0gZW5jbG9z
aW5nU2NyZWVuLm1heFgoKSwgMCk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnZlcnNlQ3V0b2Zm
ID0gbWF4KGVuY2xvc2luZ1NjcmVlbi54KCkgLSBpbnZlcnNlV2lkZ2V0UmVjdC54KCksIDApICsg
bWF4KGludmVyc2VXaWRnZXRSZWN0Lm1heFgoKSAtIGVuY2xvc2luZ1NjcmVlbi5tYXhYKCksIDAp
OworCisgICAgICAgICAgICAvLyBBY2NlcHQgdGhlIGludmVyc2UgcG9wdXAgYWxpZ25tZW50IGlm
IHRoZSB0cmltbWVkIGNvbnRlbnQgZ2V0cyBzaG9ydGVyIHRoYW4gdGhhdCBpbiB0aGUgb3JpZ2lu
YWwgYWxpZ25tZW50IGNhc2UuCisgICAgICAgICAgICBpZiAoaW52ZXJzZUN1dG9mZiA8IG9yaWdp
bmFsQ3V0b2ZmKQorICAgICAgICAgICAgICAgIHdpZGdldFJlY3QgPSBpbnZlcnNlV2lkZ2V0UmVj
dDsKKworICAgICAgICAgICAgaWYgKHdpZGdldFJlY3QueCgpIDwgc2NyZWVuLngoKSkgeworICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHdpZGdldFJpZ2h0ID0gd2lkZ2V0UmVjdC5tYXhYKCk7Cisg
ICAgICAgICAgICAgICAgd2lkZ2V0UmVjdC5zZXRXaWR0aCh3aWRnZXRSZWN0Lm1heFgoKSAtIHNj
cmVlbi54KCkpOworICAgICAgICAgICAgICAgIHdpZGdldFJlY3Quc2V0WCh3aWRnZXRSaWdodCAt
IHdpZGdldFJlY3Qud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgbGlzdEJveCgpLT5zZXRNYXhX
aWR0aEFuZExheW91dChtYXgod2lkZ2V0UmVjdC53aWR0aCgpIC0ga0JvcmRlclNpemUgKiAyLCAw
KSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHdpZGdldFJlY3QubWF4WCgpID4gc2NyZWVuLm1h
eFgoKSkgeworICAgICAgICAgICAgICAgIHdpZGdldFJlY3Quc2V0V2lkdGgoc2NyZWVuLm1heFgo
KSAtIHdpZGdldFJlY3QueCgpKTsKKyAgICAgICAgICAgICAgICBsaXN0Qm94KCktPnNldE1heFdp
ZHRoQW5kTGF5b3V0KG1heCh3aWRnZXRSZWN0LndpZHRoKCkgLSBrQm9yZGVyU2l6ZSAqIDIsIDAp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIENhbGN1bGF0ZSBZIGF4
aXMgc2l6ZS4KKyAgICAgICAgaWYgKHdpZGdldFJlY3QubWF4WSgpID4gc3RhdGljX2Nhc3Q8aW50
PihzY3JlZW4ubWF4WSgpKSkgeworICAgICAgICAgICAgaWYgKHdpZGdldFJlY3QueSgpIC0gd2lk
Z2V0UmVjdC5oZWlnaHQoKSAtIHRhcmdldENvbnRyb2xIZWlnaHQgPiAwKSB7CisgICAgICAgICAg
ICAgICAgLy8gVGhlcmUgaXMgZW5vdWdoIHJvb20gdG8gb3BlbiB1cHdhcmRzLgorICAgICAgICAg
ICAgICAgIHdpZGdldFJlY3QubW92ZSgwLCAtKHdpZGdldFJlY3QuaGVpZ2h0KCkgKyB0YXJnZXRD
b250cm9sSGVpZ2h0KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IEZpZ3VyZSB3aGV0aGVyIHVwd2FyZHMgb3IgZG93bndhcmRzIGhhcyBtb3JlIHJvb20gYW5kIHNl
dCB0aGUKKyAgICAgICAgICAgICAgICAvLyBtYXhpbXVtIG51bWJlciBvZiBpdGVtcy4KKyAgICAg
ICAgICAgICAgICBpbnQgc3BhY2VBYm92ZSA9IHdpZGdldFJlY3QueSgpIC0gdGFyZ2V0Q29udHJv
bEhlaWdodDsKKyAgICAgICAgICAgICAgICBpbnQgc3BhY2VCZWxvdyA9IHNjcmVlbi5tYXhZKCkg
LSB3aWRnZXRSZWN0LnkoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3BhY2VBYm92ZSA+IHNwYWNl
QmVsb3cpCisgICAgICAgICAgICAgICAgICAgIG1fbGlzdEJveC0+c2V0TWF4SGVpZ2h0KHNwYWNl
QWJvdmUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbV9saXN0
Qm94LT5zZXRNYXhIZWlnaHQoc3BhY2VCZWxvdyk7CisgICAgICAgICAgICAgICAgbGF5b3V0QW5k
R2V0UlRMT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgLy8gT3VyIGhlaWdodCBoYXMgY2hhbmdl
ZCwgc28gcmVjb21wdXRlIG9ubHkgWSBheGlzIG9mIHdpZGdldFJlY3QuCisgICAgICAgICAgICAg
ICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byByZWNvbXB1dGUgWCBheGlzLCBzbyB3ZSBvbmx5IHJlcGxh
Y2UgWSBheGlzCisgICAgICAgICAgICAgICAgLy8gaW4gd2lkZ2V0UmVjdC4KKyAgICAgICAgICAg
ICAgICBJbnRSZWN0IGZyYW1lSW5TY3JlZW4gPSBjaHJvbWVDbGllbnQtPndpbmRvd1RvU2NyZWVu
KGZyYW1lUmVjdCgpKTsKKyAgICAgICAgICAgICAgICB3aWRnZXRSZWN0LnNldFkoZnJhbWVJblNj
cmVlbi55KCkpOworICAgICAgICAgICAgICAgIHdpZGdldFJlY3Quc2V0SGVpZ2h0KGZyYW1lSW5T
Y3JlZW4uaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIC8vIEFuZCBtb3ZlIHVwd2FyZHMgaWYg
bmVjZXNzYXJ5LgorICAgICAgICAgICAgICAgIGlmIChzcGFjZUFib3ZlID4gc3BhY2VCZWxvdykK
KyAgICAgICAgICAgICAgICAgICAgd2lkZ2V0UmVjdC5tb3ZlKDAsIC0od2lkZ2V0UmVjdC5oZWln
aHQoKSArIHRhcmdldENvbnRyb2xIZWlnaHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gd2lkZ2V0UmVjdDsKK30KKwordm9pZCBQb3B1cENvbnRhaW5lcjo6
c2hvd1BvcHVwKEZyYW1lVmlldyogdmlldykKK3sKKyAgICBtX2ZyYW1lVmlldyA9IHZpZXc7Cisg
ICAgbGlzdEJveCgpLT5tX2ZvY3VzZWROb2RlID0gbV9mcmFtZVZpZXctPmZyYW1lKCktPmRvY3Vt
ZW50KCktPmZvY3VzZWROb2RlKCk7CisKKyAgICBDaHJvbWVDbGllbnRDaHJvbWl1bSogY2hyb21l
Q2xpZW50ID0gY2hyb21lQ2xpZW50Q2hyb21pdW0oKTsKKyAgICBpZiAoY2hyb21lQ2xpZW50KSB7
CisgICAgICAgIEludFJlY3QgcG9wdXBSZWN0ID0gZnJhbWVSZWN0KCk7CisgICAgICAgIGNocm9t
ZUNsaWVudC0+cG9wdXBPcGVuZWQodGhpcywgbGF5b3V0QW5kQ2FsY3VsYXRlV2lkZ2V0UmVjdChw
b3B1cFJlY3QuaGVpZ2h0KCksIHBvcHVwUmVjdC5sb2NhdGlvbigpKSwgZmFsc2UpOworICAgICAg
ICBtX3BvcHVwT3BlbiA9IHRydWU7CisgICAgfQorCisgICAgaWYgKCFtX2xpc3RCb3gtPnBhcmVu
dCgpKQorICAgICAgICBhZGRDaGlsZChtX2xpc3RCb3guZ2V0KCkpOworCisgICAgLy8gRW5hYmxl
IHNjcm9sbGJhcnMgYWZ0ZXIgdGhlIGxpc3Rib3ggaXMgaW5zZXJ0ZWQgaW50byB0aGUgaGllcmFy
Y2h5LAorICAgIC8vIHNvIGl0IGhhcyBhIHByb3BlciBXaWRnZXRDbGllbnQuCisgICAgbV9saXN0
Qm94LT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0byk7CisKKyAgICBtX2xp
c3RCb3gtPnNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKCk7CisKKyAgICBpbnZhbGlkYXRlKCk7Cit9
CisKK3ZvaWQgUG9wdXBDb250YWluZXI6OmhpZGVQb3B1cCgpCit7CisgICAgbGlzdEJveCgpLT5o
aWRlUG9wdXAoKTsKK30KKwordm9pZCBQb3B1cENvbnRhaW5lcjo6bm90aWZ5UG9wdXBIaWRkZW4o
KQoreworICAgIGlmICghbV9wb3B1cE9wZW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX3BvcHVw
T3BlbiA9IGZhbHNlOworICAgIGNocm9tZUNsaWVudENocm9taXVtKCktPnBvcHVwQ2xvc2VkKHRo
aXMpOworfQorCitpbnQgUG9wdXBDb250YWluZXI6OmxheW91dEFuZEdldFJUTE9mZnNldCgpCit7
CisgICAgbV9saXN0Qm94LT5sYXlvdXQoKTsKKworICAgIC8vIFBsYWNlIHRoZSBsaXN0Ym94IHdp
dGhpbiBvdXIgYm9yZGVyLgorICAgIG1fbGlzdEJveC0+bW92ZShrQm9yZGVyU2l6ZSwga0JvcmRl
clNpemUpOworCisgICAgLy8gU2l6ZSBvdXJzZWx2ZXMgdG8gY29udGFpbiBsaXN0Ym94ICsgYm9y
ZGVyLgorICAgIGludCBsaXN0Qm94V2lkdGggPSBtX2xpc3RCb3gtPndpZHRoKCkgKyBrQm9yZGVy
U2l6ZSAqIDI7CisgICAgcmVzaXplKGxpc3RCb3hXaWR0aCwgbV9saXN0Qm94LT5oZWlnaHQoKSAr
IGtCb3JkZXJTaXplICogMik7CisgICAgaW52YWxpZGF0ZSgpOworCisgICAgLy8gQ29tcHV0ZSB0
aGUgc3RhcnRpbmcgeC1heGlzIGZvciBhIG5vcm1hbCBSVEwgb3IgcmlnaHQtYWxpZ25lZCBMVFIg
ZHJvcGRvd24uIEZvciB0aG9zZSwKKyAgICAvLyB0aGUgcmlnaHQgZWRnZSBvZiBkcm9wZG93biBi
b3ggc2hvdWxkIGJlIGFsaWduZWQgd2l0aCB0aGUgcmlnaHQgZWRnZSBvZiA8c2VsZWN0Pi88aW5w
dXQ+IGVsZW1lbnQgYm94LAorICAgIC8vIGFuZCB0aGUgZHJvcGRvd24gYm94IHNob3VsZCBiZSBl
eHBhbmRlZCB0byB0aGUgbGVmdCBpZiBtb3JlIHNwYWNlIGlzIG5lZWRlZC4KKyAgICAvLyBtX29y
aWdpbmFsRnJhbWVSZWN0LndpZHRoKCkgaXMgdGhlIHdpZHRoIG9mIHRoZSB0YXJnZXQgPHNlbGVj
dD4vPGlucHV0PiBlbGVtZW50LgorICAgIHJldHVybiBtX29yaWdpbmFsRnJhbWVSZWN0LndpZHRo
KCkgLSBsaXN0Qm94V2lkdGg7Cit9CisKK2Jvb2wgUG9wdXBDb250YWluZXI6OmhhbmRsZU1vdXNl
RG93bkV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgVXNlckdl
c3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5UHJvY2Vzc2luZ1VzZXJH
ZXN0dXJlKTsKKyAgICByZXR1cm4gbV9saXN0Qm94LT5oYW5kbGVNb3VzZURvd25FdmVudCgKKyAg
ICAgICAgY29uc3RydWN0UmVsYXRpdmVNb3VzZUV2ZW50KGV2ZW50LCB0aGlzLCBtX2xpc3RCb3gu
Z2V0KCkpKTsKK30KKworYm9vbCBQb3B1cENvbnRhaW5lcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGlj
YXRvciBnZXN0dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOwor
ICAgIHJldHVybiBtX2xpc3RCb3gtPmhhbmRsZU1vdXNlTW92ZUV2ZW50KAorICAgICAgICBjb25z
dHJ1Y3RSZWxhdGl2ZU1vdXNlRXZlbnQoZXZlbnQsIHRoaXMsIG1fbGlzdEJveC5nZXQoKSkpOwor
fQorCitib29sIFBvcHVwQ29udGFpbmVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQ
bGF0Zm9ybU1vdXNlRXZlbnQmIGV2ZW50KQoreworICAgIFJlZlB0cjxQb3B1cENvbnRhaW5lcj4g
cHJvdGVjdCh0aGlzKTsKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBnZXN0dXJlSW5kaWNhdG9y
KERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIHJldHVybiBtX2xpc3RCb3gt
PmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KAorICAgICAgICBjb25zdHJ1Y3RSZWxhdGl2ZU1vdXNl
RXZlbnQoZXZlbnQsIHRoaXMsIG1fbGlzdEJveC5nZXQoKSkpOworfQorCitib29sIFBvcHVwQ29u
dGFpbmVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQp
Cit7CisgICAgVXNlckdlc3R1cmVJbmRpY2F0b3IgZ2VzdHVyZUluZGljYXRvcihEZWZpbml0ZWx5
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4gbV9saXN0Qm94LT5oYW5kbGVXaGVl
bEV2ZW50KAorICAgICAgICBjb25zdHJ1Y3RSZWxhdGl2ZVdoZWVsRXZlbnQoZXZlbnQsIHRoaXMs
IG1fbGlzdEJveC5nZXQoKSkpOworfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK2Jvb2wg
UG9wdXBDb250YWluZXI6OmhhbmRsZVRvdWNoRXZlbnQoY29uc3QgUGxhdGZvcm1Ub3VjaEV2ZW50
JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShHRVNUVVJF
X1JFQ09HTklaRVIpCisvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBjb2RlIHRvIHNoYXJlIGZ1bmN0
aW9uYWxpdHkgd2l0aCBFdmVudEhhbmRsZXI6OmhhbmRsZUdlc3R1cmVFdmVudC4KK2Jvb2wgUG9w
dXBDb250YWluZXI6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVu
dCYgZ2VzdHVyZUV2ZW50KQoreworICAgIHN3aXRjaCAoZ2VzdHVyZUV2ZW50LnR5cGUoKSkgewor
ICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlRhcFR5cGU6IHsKKyAgICAgICAgUGxhdGZv
cm1Nb3VzZUV2ZW50IGZha2VNb3VzZU1vdmUoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIGdlc3R1
cmVFdmVudC5nbG9iYWxQb3NpdGlvbigpLCBOb0J1dHRvbiwgTW91c2VFdmVudE1vdmVkLCAvKiBj
bGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3Ry
bEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdl
c3R1cmVFdmVudC50aW1lc3RhbXAoKSk7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudCBmYWtl
TW91c2VEb3duKGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9z
aXRpb24oKSwgTGVmdEJ1dHRvbiwgTW91c2VFdmVudFByZXNzZWQsIC8qIGNsaWNrQ291bnQgKi8g
MSwgZ2VzdHVyZUV2ZW50LnNoaWZ0S2V5KCksIGdlc3R1cmVFdmVudC5jdHJsS2V5KCksIGdlc3R1
cmVFdmVudC5hbHRLZXkoKSwgZ2VzdHVyZUV2ZW50Lm1ldGFLZXkoKSwgZ2VzdHVyZUV2ZW50LnRp
bWVzdGFtcCgpKTsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGZha2VNb3VzZVVwKGdlc3R1
cmVFdmVudC5wb3NpdGlvbigpLCBnZXN0dXJlRXZlbnQuZ2xvYmFsUG9zaXRpb24oKSwgTGVmdEJ1
dHRvbiwgTW91c2VFdmVudFJlbGVhc2VkLCAvKiBjbGlja0NvdW50ICovIDEsIGdlc3R1cmVFdmVu
dC5zaGlmdEtleSgpLCBnZXN0dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5
KCksIGdlc3R1cmVFdmVudC5tZXRhS2V5KCksIGdlc3R1cmVFdmVudC50aW1lc3RhbXAoKSk7Cisg
ICAgICAgIC8vIGhhbmRsZU1vdXNlTW92ZUV2ZW50KGZha2VNb3VzZU1vdmUpOworICAgICAgICBo
YW5kbGVNb3VzZURvd25FdmVudChmYWtlTW91c2VEb3duKTsKKyAgICAgICAgaGFuZGxlTW91c2VS
ZWxlYXNlRXZlbnQoZmFrZU1vdXNlVXApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVFdmVudDo6U2Nyb2xsVXBkYXRlVHlwZTogeworICAgICAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQgc3ludGhldGljV2hlZWxFdmVudChnZXN0dXJlRXZlbnQucG9z
aXRpb24oKSwgZ2VzdHVyZUV2ZW50Lmdsb2JhbFBvc2l0aW9uKCksIGdlc3R1cmVFdmVudC5kZWx0
YVgoKSwgZ2VzdHVyZUV2ZW50LmRlbHRhWSgpLCBnZXN0dXJlRXZlbnQuZGVsdGFYKCkgLyAxMjAu
MGYsIGdlc3R1cmVFdmVudC5kZWx0YVkoKSAvIDEyMC4wZiwgU2Nyb2xsQnlQaXhlbFdoZWVsRXZl
bnQsIC8qIGlzQWNjZXB0ZWQgKi8gZmFsc2UsIGdlc3R1cmVFdmVudC5zaGlmdEtleSgpLCBnZXN0
dXJlRXZlbnQuY3RybEtleSgpLCBnZXN0dXJlRXZlbnQuYWx0S2V5KCksIGdlc3R1cmVFdmVudC5t
ZXRhS2V5KCkpOworICAgICAgICBoYW5kbGVXaGVlbEV2ZW50KHN5bnRoZXRpY1doZWVsRXZlbnQp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBQbGF0Zm9ybUdlc3R1cmVF
dmVudDo6U2Nyb2xsQmVnaW5UeXBlOgorICAgIGNhc2UgUGxhdGZvcm1HZXN0dXJlRXZlbnQ6OlNj
cm9sbEVuZFR5cGU6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisjZW5kaWYKKworYm9vbCBQb3B1cENvbnRhaW5lcjo6aGFuZGxlS2V5RXZlbnQoY29uc3QgUGxh
dGZvcm1LZXlib2FyZEV2ZW50JiBldmVudCkKK3sKKyAgICBVc2VyR2VzdHVyZUluZGljYXRvciBn
ZXN0dXJlSW5kaWNhdG9yKERlZmluaXRlbHlQcm9jZXNzaW5nVXNlckdlc3R1cmUpOworICAgIHJl
dHVybiBtX2xpc3RCb3gtPmhhbmRsZUtleUV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBQb3B1cENv
bnRhaW5lcjo6aGlkZSgpCit7CisgICAgbV9saXN0Qm94LT5hYmFuZG9uKCk7Cit9CisKK3ZvaWQg
UG9wdXBDb250YWluZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgLy8gYWRqdXN0IGNvb3JkcyBmb3Igc2Nyb2xsZWQgZnJhbWUKKyAgICBJ
bnRSZWN0IHIgPSBpbnRlcnNlY3Rpb24ocmVjdCwgZnJhbWVSZWN0KCkpOworICAgIGludCB0eCA9
IHgoKTsKKyAgICBpbnQgdHkgPSB5KCk7CisKKyAgICByLm1vdmUoLXR4LCAtdHkpOworCisgICAg
Z2MtPnRyYW5zbGF0ZShzdGF0aWNfY2FzdDxmbG9hdD4odHgpLCBzdGF0aWNfY2FzdDxmbG9hdD4o
dHkpKTsKKyAgICBtX2xpc3RCb3gtPnBhaW50KGdjLCByKTsKKyAgICBnYy0+dHJhbnNsYXRlKC1z
dGF0aWNfY2FzdDxmbG9hdD4odHgpLCAtc3RhdGljX2Nhc3Q8ZmxvYXQ+KHR5KSk7CisKKyAgICBw
YWludEJvcmRlcihnYywgcmVjdCk7Cit9CisKK3ZvaWQgUG9wdXBDb250YWluZXI6OnBhaW50Qm9y
ZGVyKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8g
RklYTUU6IFdoZXJlIGRvIHdlIGdldCB0aGUgYm9yZGVyIGNvbG9yIGZyb20/CisgICAgQ29sb3Ig
Ym9yZGVyQ29sb3IoMTI3LCAxNTcsIDE4NSk7CisKKyAgICBnYy0+c2V0U3Ryb2tlU3R5bGUoTm9T
dHJva2UpOworICAgIGdjLT5zZXRGaWxsQ29sb3IoYm9yZGVyQ29sb3IsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworCisgICAgaW50IHR4ID0geCgpOworICAgIGludCB0eSA9IHkoKTsKKworICAgIC8v
IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodAorICAgIGdjLT5kcmF3UmVjdChJbnRSZWN0KHR4LCB0
eSwgd2lkdGgoKSwga0JvcmRlclNpemUpKTsKKyAgICBnYy0+ZHJhd1JlY3QoSW50UmVjdCh0eCwg
dHksIGtCb3JkZXJTaXplLCBoZWlnaHQoKSkpOworICAgIGdjLT5kcmF3UmVjdChJbnRSZWN0KHR4
LCB0eSArIGhlaWdodCgpIC0ga0JvcmRlclNpemUsIHdpZHRoKCksIGtCb3JkZXJTaXplKSk7Cisg
ICAgZ2MtPmRyYXdSZWN0KEludFJlY3QodHggKyB3aWR0aCgpIC0ga0JvcmRlclNpemUsIHR5LCBr
Qm9yZGVyU2l6ZSwgaGVpZ2h0KCkpKTsKK30KKworYm9vbCBQb3B1cENvbnRhaW5lcjo6aXNJbnRl
cmVzdGVkSW5FdmVudEZvcktleShpbnQga2V5Q29kZSkKK3sKKyAgICByZXR1cm4gbV9saXN0Qm94
LT5pc0ludGVyZXN0ZWRJbkV2ZW50Rm9yS2V5KGtleUNvZGUpOworfQorCitDaHJvbWVDbGllbnRD
aHJvbWl1bSogUG9wdXBDb250YWluZXI6OmNocm9tZUNsaWVudENocm9taXVtKCkKK3sKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50Q2hyb21pdW0qPihtX2ZyYW1lVmlldy0+ZnJh
bWUoKS0+cGFnZSgpLT5jaHJvbWUoKS0+Y2xpZW50KCkpOworfQorCit2b2lkIFBvcHVwQ29udGFp
bmVyOjpzaG93SW5SZWN0KGNvbnN0IEludFJlY3QmIHIsIEZyYW1lVmlldyogdiwgaW50IGluZGV4
KQoreworICAgIC8vIFRoZSByZWN0IGlzIHRoZSBzaXplIG9mIHRoZSBzZWxlY3QgYm94LiBJdCdz
IHVzdWFsbHkgbGFyZ2VyIHRoYW4gd2UgbmVlZC4KKyAgICAvLyBzdWJ0cmFjdCBib3JkZXIgc2l6
ZSBzbyB0aGF0IHVzdWFsbHkgdGhlIGNvbnRhaW5lciB3aWxsIGJlIGRpc3BsYXllZAorICAgIC8v
IGV4YWN0bHkgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHNlbGVjdCBib3guCisgICAgbGlzdEJveCgp
LT5zZXRCYXNlV2lkdGgobWF4KHIud2lkdGgoKSAtIGtCb3JkZXJTaXplICogMiwgMCkpOworCisg
ICAgbGlzdEJveCgpLT51cGRhdGVGcm9tRWxlbWVudCgpOworCisgICAgLy8gV2Ugc2V0IHRoZSBz
ZWxlY3RlZCBpdGVtIGluIHVwZGF0ZUZyb21FbGVtZW50KCksIGFuZCBkaXNyZWdhcmQgdGhlCisg
ICAgLy8gaW5kZXggcGFzc2VkIGludG8gdGhpcyBmdW5jdGlvbiAoc2FtZSBhcyBXZWJraXQncyBQ
b3B1cE1lbnVXaW4uY3BwKQorICAgIC8vIEZJWE1FOiBtYWtlIHN1cmUgdGhpcyBpcyBjb3JyZWN0
LCBhbmQgYWRkIGFuIGFzc2VydGlvbi4KKyAgICAvLyBBU1NFUlQocG9wdXBXaW5kb3cocG9wdXAp
LT5saXN0Qm94KCktPnNlbGVjdGVkSW5kZXgoKSA9PSBpbmRleCk7CisKKyAgICAvLyBDb252ZXJ0
IHBvaW50IHRvIG1haW4gd2luZG93IGNvb3Jkcy4KKyAgICBJbnRQb2ludCBsb2NhdGlvbiA9IHYt
PmNvbnRlbnRzVG9XaW5kb3coci5sb2NhdGlvbigpKTsKKworICAgIC8vIE1vdmUgaXQgYmVsb3cg
dGhlIHNlbGVjdCB3aWRnZXQuCisgICAgbG9jYXRpb24ubW92ZSgwLCByLmhlaWdodCgpKTsKKwor
ICAgIG1fb3JpZ2luYWxGcmFtZVJlY3QgPSBJbnRSZWN0KGxvY2F0aW9uLCByLnNpemUoKSk7Cisg
ICAgc2V0RnJhbWVSZWN0KG1fb3JpZ2luYWxGcmFtZVJlY3QpOworICAgIHNob3dQb3B1cCh2KTsK
K30KKwordm9pZCBQb3B1cENvbnRhaW5lcjo6cmVmcmVzaChjb25zdCBJbnRSZWN0JiB0YXJnZXRD
b250cm9sUmVjdCkKK3sKKyAgICBJbnRQb2ludCBsb2NhdGlvbiA9IG1fZnJhbWVWaWV3LT5jb250
ZW50c1RvV2luZG93KHRhcmdldENvbnRyb2xSZWN0LmxvY2F0aW9uKCkpOworICAgIC8vIE1vdmUg
aXQgYmVsb3cgdGhlIHNlbGVjdCB3aWRnZXQuCisgICAgbG9jYXRpb24ubW92ZSgwLCB0YXJnZXRD
b250cm9sUmVjdC5oZWlnaHQoKSk7CisKKyAgICBsaXN0Qm94KCktPnNldEJhc2VXaWR0aChtYXgo
bV9vcmlnaW5hbEZyYW1lUmVjdC53aWR0aCgpIC0ga0JvcmRlclNpemUgKiAyLCAwKSk7CisgICAg
c2V0Qm91bmRzU2l6ZShtX29yaWdpbmFsRnJhbWVSZWN0LnNpemUoKSk7CisKKyAgICBsaXN0Qm94
KCktPnVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgLy8gU3RvcmUgdGhlIG9yaWdpbmFsIHNpemUg
dG8gY2hlY2sgaWYgd2UgbmVlZCB0byByZXF1ZXN0IHRoZSBsb2NhdGlvbi4KKyAgICBJbnRTaXpl
IG9yaWdpbmFsU2l6ZSA9IHNpemUoKTsKKyAgICBJbnRSZWN0IHdpZGdldFJlY3QgPSBsYXlvdXRB
bmRDYWxjdWxhdGVXaWRnZXRSZWN0KHRhcmdldENvbnRyb2xSZWN0LmhlaWdodCgpLCBsb2NhdGlv
bik7CisgICAgaWYgKG9yaWdpbmFsU2l6ZSAhPSB3aWRnZXRSZWN0LnNpemUoKSkgeworICAgICAg
ICBDaHJvbWVDbGllbnRDaHJvbWl1bSogY2hyb21lQ2xpZW50ID0gY2hyb21lQ2xpZW50Q2hyb21p
dW0oKTsKKyAgICAgICAgaWYgKGNocm9tZUNsaWVudCkgeworICAgICAgICAgICAgSW50UG9pbnQg
d2lkZ2V0TG9jYXRpb24gPSBjaHJvbWVDbGllbnQtPnNjcmVlblRvV2luZG93KHdpZGdldFJlY3Qu
bG9jYXRpb24oKSk7CisgICAgICAgICAgICB3aWRnZXRSZWN0LnNldExvY2F0aW9uKHdpZGdldExv
Y2F0aW9uKTsKKyAgICAgICAgICAgIHNldEZyYW1lUmVjdCh3aWRnZXRSZWN0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGludmFsaWRhdGUoKTsKK30KKworaW5saW5lIGJvb2wgUG9wdXBDb250
YWluZXI6OmlzUlRMKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saXN0Qm94LT5tX3BvcHVwQ2xp
ZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCkgPT0gUlRMOworfQorCitpbnQgUG9wdXBD
b250YWluZXI6OnNlbGVjdGVkSW5kZXgoKSBjb25zdAoreworICAgIHJldHVybiBtX2xpc3RCb3gt
PnNlbGVjdGVkSW5kZXgoKTsKK30KKworaW50IFBvcHVwQ29udGFpbmVyOjptZW51SXRlbUhlaWdo
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGlzdEJveC0+Z2V0Um93SGVpZ2h0KDApOworfQor
CitpbnQgUG9wdXBDb250YWluZXI6Om1lbnVJdGVtRm9udFNpemUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xpc3RCb3gtPmdldFJvd0ZvbnQoMCkuc2l6ZSgpOworfQorCitQb3B1cE1lbnVTdHls
ZSBQb3B1cENvbnRhaW5lcjo6bWVudVN0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9saXN0
Qm94LT5tX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKTsKK30KKworY29uc3QgV1RGOjpWZWN0b3I8
UG9wdXBJdGVtKj4mIFBvcHVwQ29udGFpbmVyOjogcG9wdXBEYXRhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9saXN0Qm94LT5pdGVtcygpOworfQorCitTdHJpbmcgUG9wdXBDb250YWluZXI6Omdl
dFNlbGVjdGVkSXRlbVRvb2xUaXAoKQoreworICAgIC8vIFdlIGNhbm5vdCB1c2UgbV9wb3B1cENs
aWVudC0+c2VsZWN0ZWRJbmRleCgpIHRvIGNob29zZSB0b29sdGlwIG1lc3NhZ2UsCisgICAgLy8g
YmVjYXVzZSB0aGUgc2VsZWN0ZWRJbmRleCgpIG1pZ2h0IHJldHVybiBmaW5hbCBzZWxlY3RlZCBp
bmRleCwgbm90IGhvdmVyaW5nIHNlbGVjdGlvbi4KKyAgICByZXR1cm4gbGlzdEJveCgpLT5tX3Bv
cHVwQ2xpZW50LT5pdGVtVG9vbFRpcChsaXN0Qm94KCktPm1fc2VsZWN0ZWRJbmRleCk7Cit9CisK
Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIFBvcHVwTGlzdEJveCBpbXBsZW1lbnRhdGlvbgor
Citib29sIFBvcHVwTGlzdEJveDo6aGFuZGxlTW91c2VEb3duRXZlbnQoY29uc3QgUGxhdGZvcm1N
b3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhciA9IHNjcm9sbGJh
ckF0UG9pbnQoZXZlbnQucG9zKCkpOworICAgIGlmIChzY3JvbGxiYXIpIHsKKyAgICAgICAgbV9j
YXB0dXJpbmdTY3JvbGxiYXIgPSBzY3JvbGxiYXI7CisgICAgICAgIG1fY2FwdHVyaW5nU2Nyb2xs
YmFyLT5tb3VzZURvd24oZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoIWlzUG9pbnRJbkJvdW5kcyhldmVudC5wb3MoKSkpCisgICAgICAgIGFiYW5kb24oKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBvcHVwTGlzdEJveDo6aGFuZGxlTW91c2VN
b3ZlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCkKK3sKKyAgICBpZiAobV9j
YXB0dXJpbmdTY3JvbGxiYXIpIHsKKyAgICAgICAgbV9jYXB0dXJpbmdTY3JvbGxiYXItPm1vdXNl
TW92ZWQoZXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBTY3JvbGxi
YXIqIHNjcm9sbGJhciA9IHNjcm9sbGJhckF0UG9pbnQoZXZlbnQucG9zKCkpOworICAgIGlmICht
X2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlICE9IHNjcm9sbGJhcikgeworICAgICAgICAvLyBTZW5k
IG1vdXNlIGV4aXRlZCB0byB0aGUgb2xkIHNjcm9sbGJhci4KKyAgICAgICAgaWYgKG1fbGFzdFNj
cm9sbGJhclVuZGVyTW91c2UpCisgICAgICAgICAgICBtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNl
LT5tb3VzZUV4aXRlZCgpOworICAgICAgICBtX2xhc3RTY3JvbGxiYXJVbmRlck1vdXNlID0gc2Ny
b2xsYmFyOworICAgIH0KKworICAgIGlmIChzY3JvbGxiYXIpIHsKKyAgICAgICAgc2Nyb2xsYmFy
LT5tb3VzZU1vdmVkKGV2ZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
aWYgKCFpc1BvaW50SW5Cb3VuZHMoZXZlbnQucG9zKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBzZWxlY3RJbmRleChwb2ludFRvUm93SW5kZXgoZXZlbnQucG9zKCkpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQb3B1cExpc3RCb3g6OmhhbmRsZU1vdXNlUmVsZWFzZUV2
ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQpCit7CisgICAgaWYgKG1fY2FwdHVy
aW5nU2Nyb2xsYmFyKSB7CisgICAgICAgIG1fY2FwdHVyaW5nU2Nyb2xsYmFyLT5tb3VzZVVwKCk7
CisgICAgICAgIG1fY2FwdHVyaW5nU2Nyb2xsYmFyID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgaWYgKCFpc1BvaW50SW5Cb3VuZHMoZXZlbnQucG9zKCkpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5lZWQgdG8gY2hlY2sgYmVmb3JlIGNhbGxpbmcgYWNj
ZXB0SW5kZXgoKSwgYmVjYXVzZSBtX3BvcHVwQ2xpZW50IG1pZ2h0IGJlIHJlbW92ZWQgaW4gYWNj
ZXB0SW5kZXgoKSBjYWxsaW5nIGJlY2F1c2Ugb2YgZXZlbnQgaGFuZGxlci4KKyAgICBib29sIGlz
U2VsZWN0UG9wdXAgPSBtX3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS5tZW51VHlwZSgpID09IFBv
cHVwTWVudVN0eWxlOjpTZWxlY3RQb3B1cDsKKyAgICBpZiAoYWNjZXB0SW5kZXgocG9pbnRUb1Jv
d0luZGV4KGV2ZW50LnBvcygpKSkgJiYgbV9mb2N1c2VkTm9kZSAmJiBpc1NlbGVjdFBvcHVwKSB7
CisgICAgICAgIG1fZm9jdXNlZE5vZGUtPmRpc3BhdGNoTW91c2VFdmVudChldmVudCwgZXZlbnRO
YW1lcygpLm1vdXNldXBFdmVudCk7CisgICAgICAgIG1fZm9jdXNlZE5vZGUtPmRpc3BhdGNoTW91
c2VFdmVudChldmVudCwgZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpOworCisgICAgICAgIC8vIENs
ZWFyIG1fZm9jdXNlZE5vZGUgaGVyZSwgYmVjYXVzZSB3ZSBjYW5ub3QgY2xlYXIgaW4gaGlkZVBv
cHVwKCkgd2hpY2ggaXMgY2FsbGVkIGJlZm9yZSBkaXNwYXRjaE1vdXNlRXZlbnQoKSBpcyBjYWxs
ZWQuCisgICAgICAgIG1fZm9jdXNlZE5vZGUgPSAwOworICAgIH0KKworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFBvcHVwTGlzdEJveDo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIGV2ZW50KQoreworICAgIGlmICghaXNQb2ludEluQm91bmRzKGV2ZW50LnBv
cygpKSkgeworICAgICAgICBhYmFuZG9uKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIC8vIFBhc3MgaXQgb2ZmIHRvIHRoZSBzY3JvbGwgdmlldy4KKyAgICAvLyBTYWRseSwg
V2ViQ29yZSBkZXZzIGRvbid0IHVuZGVyc3RhbmQgdGhlIHdob2xlICJjb25zdCIgdGhpbmcuCisg
ICAgd2hlZWxFdmVudChjb25zdF9jYXN0PFBsYXRmb3JtV2hlZWxFdmVudCY+KGV2ZW50KSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBoYW5k
bGVLZXlFdmVudCgpLgorYm9vbCBQb3B1cExpc3RCb3g6OmlzSW50ZXJlc3RlZEluRXZlbnRGb3JL
ZXkoaW50IGtleUNvZGUpCit7CisgICAgc3dpdGNoIChrZXlDb2RlKSB7CisgICAgY2FzZSBWS0VZ
X0VTQ0FQRToKKyAgICBjYXNlIFZLRVlfUkVUVVJOOgorICAgIGNhc2UgVktFWV9VUDoKKyAgICBj
YXNlIFZLRVlfRE9XTjoKKyAgICBjYXNlIFZLRVlfUFJJT1I6CisgICAgY2FzZSBWS0VZX05FWFQ6
CisgICAgY2FzZSBWS0VZX0hPTUU6CisgICAgY2FzZSBWS0VZX0VORDoKKyAgICBjYXNlIFZLRVlf
VEFCOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKK2Jvb2wgUG9wdXBM
aXN0Qm94OjpoYW5kbGVUb3VjaEV2ZW50KGNvbnN0IFBsYXRmb3JtVG91Y2hFdmVudCYpCit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoR0VTVFVSRV9SRUNPR05J
WkVSKQorYm9vbCBQb3B1cExpc3RCb3g6OmhhbmRsZUdlc3R1cmVFdmVudChjb25zdCBQbGF0Zm9y
bUdlc3R1cmVFdmVudCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3N0YXRp
YyBib29sIGlzQ2hhcmFjdGVyVHlwZUV2ZW50KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCit7CisgICAgLy8gQ2hlY2sgd2hldGhlciB0aGUgZXZlbnQgaXMgYSBjaGFyYWN0ZXIt
dHlwZWQgZXZlbnQgb3Igbm90LgorICAgIC8vIFdlIHVzZSBSYXdLZXlEb3duL0NoYXIvS2V5VXAg
ZXZlbnQgc2NoZW1lIG9uIGFsbCBwbGF0Zm9ybXMsCisgICAgLy8gc28gUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50OjpDaGFyIChub3QgUmF3S2V5RG93bikgdHlwZSBldmVudAorICAgIC8vIGlzIGNvbnNp
ZGVyZWQgYXMgY2hhcmFjdGVyIHR5cGUgZXZlbnQuCisgICAgcmV0dXJuIGV2ZW50LnR5cGUoKSA9
PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXI7Cit9CisKK2Jvb2wgUG9wdXBMaXN0Qm94Ojpo
YW5kbGVLZXlFdmVudChjb25zdCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGV2ZW50KQoreworICAg
IGlmIChldmVudC50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpLZXlVcCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAobnVtSXRlbXMoKSA9PSAwICYmIGV2ZW50LndpbmRv
d3NWaXJ0dWFsS2V5Q29kZSgpICE9IFZLRVlfRVNDQVBFKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHN3aXRjaCAoZXZlbnQud2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKKyAgICBjYXNl
IFZLRVlfRVNDQVBFOgorICAgICAgICBhYmFuZG9uKCk7ICAvLyBtYXkgZGVsZXRlIHRoaXMKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBWS0VZX1JFVFVSTjoKKyAgICAgICAgaWYgKG1f
c2VsZWN0ZWRJbmRleCA9PSAtMSkgIHsKKyAgICAgICAgICAgIGhpZGVQb3B1cCgpOworICAgICAg
ICAgICAgLy8gRG9uJ3QgZWF0IHRoZSBlbnRlciBpZiBub3RoaW5nIGlzIHNlbGVjdGVkLgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGFjY2VwdEluZGV4KG1f
c2VsZWN0ZWRJbmRleCk7ICAvLyBtYXkgZGVsZXRlIHRoaXMKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgY2FzZSBWS0VZX1VQOgorICAgIGNhc2UgVktFWV9ET1dOOgorICAgICAgICAvLyBXZSBo
YXZlIHRvIGZvcndhcmQgb25seSBzaGlmdCArIHVwIGNvbWJpbmF0aW9uIHRvIGZvY3VzZWQgbm9k
ZSB3aGVuIGF1dG9maWxsIHBvcHVwLgorICAgICAgICAvLyBCZWNhdXNlIGFsbCBjaGFyYWN0ZXJz
IGZyb20gdGhlIGN1cnNvciB0byB0aGUgc3RhcnQgb2YgdGhlIHRleHQgYXJlYSBzaG91bGQgc2Vs
ZWN0ZWQgd2hlbiB5b3UgcHJlc3Mgc2hpZnQgKyB1cCBhcnJvdy4KKyAgICAgICAgLy8gc2hpZnQg
KyBkb3duIHNob3VsZCBiZSB0aGUgc2ltaWxhciB3YXkgdG8gc2hpZnQgKyB1cC4KKyAgICAgICAg
aWYgKGV2ZW50Lm1vZGlmaWVycygpICYmIG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLm1lbnVU
eXBlKCkgPT0gUG9wdXBNZW51U3R5bGU6OkF1dG9maWxsUG9wdXApCisgICAgICAgICAgICBtX2Zv
Y3VzZWROb2RlLT5kaXNwYXRjaEtleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgZWxzZSBpZiAoZXZl
bnQud2luZG93c1ZpcnR1YWxLZXlDb2RlKCkgPT0gVktFWV9VUCkKKyAgICAgICAgICAgIHNlbGVj
dFByZXZpb3VzUm93KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlbGVjdE5leHRSb3co
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBWS0VZX1BSSU9SOgorICAgICAgICBhZGp1c3RT
ZWxlY3RlZEluZGV4KC1tX3Zpc2libGVSb3dzKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBW
S0VZX05FWFQ6CisgICAgICAgIGFkanVzdFNlbGVjdGVkSW5kZXgobV92aXNpYmxlUm93cyk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVktFWV9IT01FOgorICAgICAgICBhZGp1c3RTZWxlY3Rl
ZEluZGV4KC1tX3NlbGVjdGVkSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLRVlf
RU5EOgorICAgICAgICBhZGp1c3RTZWxlY3RlZEluZGV4KG1faXRlbXMuc2l6ZSgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCFldmVudC5jdHJsS2V5KCkgJiYg
IWV2ZW50LmFsdEtleSgpICYmICFldmVudC5tZXRhS2V5KCkKKyAgICAgICAgICAgICYmIGlzUHJp
bnRhYmxlQ2hhcihldmVudC53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkKKyAgICAgICAgICAgICYm
IGlzQ2hhcmFjdGVyVHlwZUV2ZW50KGV2ZW50KSkKKyAgICAgICAgICAgIHR5cGVBaGVhZEZpbmQo
ZXZlbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAobV9vcmlnaW5hbEluZGV4
ICE9IG1fc2VsZWN0ZWRJbmRleCkgeworICAgICAgICAvLyBLZXlib2FyZCBldmVudHMgc2hvdWxk
IHVwZGF0ZSB0aGUgc2VsZWN0aW9uIGltbWVkaWF0ZWx5IChidXQgd2UgZG9uJ3QKKyAgICAgICAg
Ly8gd2FudCB0byBmaXJlIHRoZSBvbmNoYW5nZSBldmVudCB1bnRpbCB0aGUgcG9wdXAgaXMgY2xv
c2VkLCB0byBtYXRjaAorICAgICAgICAvLyBJRSkuICBXZSBjaGFuZ2UgdGhlIG9yaWdpbmFsIGlu
ZGV4IHNvIHdlIHJldmVydCB0byB0aGF0IHdoZW4gdGhlCisgICAgICAgIC8vIHBvcHVwIGlzIGNs
b3NlZC4KKyAgICAgICAgaWYgKG1fc2V0dGluZ3MuYWNjZXB0T25BYmFuZG9uKQorICAgICAgICAg
ICAgbV9hY2NlcHRlZEluZGV4T25BYmFuZG9uID0gbV9zZWxlY3RlZEluZGV4OworCisgICAgICAg
IHNldE9yaWdpbmFsSW5kZXgobV9zZWxlY3RlZEluZGV4KTsKKyAgICAgICAgaWYgKG1fc2V0dGlu
Z3Muc2V0VGV4dE9uSW5kZXhDaGFuZ2UpCisgICAgICAgICAgICBtX3BvcHVwQ2xpZW50LT5zZXRU
ZXh0RnJvbUl0ZW0obV9zZWxlY3RlZEluZGV4KTsKKyAgICB9CisgICAgaWYgKGV2ZW50LndpbmRv
d3NWaXJ0dWFsS2V5Q29kZSgpID09IFZLRVlfVEFCKSB7CisgICAgICAgIC8vIFRBQiBpcyBhIHNw
ZWNpYWwgY2FzZSBhcyBpdCBzaG91bGQgc2VsZWN0IHRoZSBjdXJyZW50IGl0ZW0gaWYgYW55IGFu
ZAorICAgICAgICAvLyBhZHZhbmNlIGZvY3VzLgorICAgICAgICBpZiAobV9zZWxlY3RlZEluZGV4
ID49IDApIHsKKyAgICAgICAgICAgIGFjY2VwdEluZGV4KG1fc2VsZWN0ZWRJbmRleCk7IC8vIE1h
eSBkZWxldGUgdXMuCisgICAgICAgICAgICAvLyBSZXR1cm4gZmFsc2Ugc28gdGhlIFRBQiBrZXkg
ZXZlbnQgaXMgcHJvcGFnYXRlZCB0byB0aGUgcGFnZS4KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAvLyBDYWxsIGFiYW5kb24oKSBzbyB3ZSBob25vciBtX2Fj
Y2VwdGVkSW5kZXhPbkFiYW5kb24gaWYgc2V0LgorICAgICAgICBhYmFuZG9uKCk7CisgICAgICAg
IC8vIFJldHVybiBmYWxzZSBzbyB0aGUgVEFCIGtleSBldmVudCBpcyBwcm9wYWdhdGVkIHRvIHRo
ZSBwYWdlLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0hvc3RXaW5kb3cqIFBvcHVwTGlzdEJveDo6aG9zdFdpbmRvdygpIGNvbnN0Cit7Cisg
ICAgLy8gT3VyIHBhcmVudCBpcyB0aGUgcm9vdCBTY3JvbGxWaWV3LCBzbyBpdCBpcyB0aGUgb25l
IHRoYXQgaGFzIGEKKyAgICAvLyBIb3N0V2luZG93LiAgRnJhbWVWaWV3Ojpob3N0V2luZG93KCkg
d29ya3Mgc2ltaWxhcmx5LgorICAgIHJldHVybiBwYXJlbnQoKSA/IHBhcmVudCgpLT5ob3N0V2lu
ZG93KCkgOiAwOworfQorCisvLyBGcm9tIEhUTUxTZWxlY3RFbGVtZW50LmNwcAorc3RhdGljIFN0
cmluZyBzdHJpcExlYWRpbmdXaGl0ZVNwYWNlKGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAg
IGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgaW50IGk7CisgICAgZm9yIChpID0g
MDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICBpZiAoc3RyaW5nW2ldICE9IG5vQnJlYWtTcGFj
ZQorICAgICAgICAgICAgJiYgKHN0cmluZ1tpXSA8PSAweDdGID8gIWlzc3BhY2Uoc3RyaW5nW2ld
KSA6IChkaXJlY3Rpb24oc3RyaW5nW2ldKSAhPSBXaGl0ZVNwYWNlTmV1dHJhbCkpKQorICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhpLCBsZW5ndGggLSBp
KTsKK30KKworLy8gRnJvbSBIVE1MU2VsZWN0RWxlbWVudC5jcHAsIHdpdGggbW9kaWZpY2F0aW9u
cwordm9pZCBQb3B1cExpc3RCb3g6OnR5cGVBaGVhZEZpbmQoY29uc3QgUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50JiBldmVudCkKK3sKKyAgICBUaW1lU3RhbXAgbm93ID0gc3RhdGljX2Nhc3Q8VGltZVN0
YW1wPihjdXJyZW50VGltZSgpICogMTAwMC4wZik7CisgICAgVGltZVN0YW1wIGRlbHRhID0gbm93
IC0gbV9sYXN0Q2hhclRpbWU7CisKKyAgICAvLyBSZXNldCB0aGUgdGltZSB3aGVuIHVzZXIgdHlw
ZXMgaW4gYSBjaGFyYWN0ZXIuIFRoZSB0aW1lIGdhcCBiZXR3ZWVuCisgICAgLy8gbGFzdCBjaGFy
YWN0ZXIgYW5kIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyB1c2VkIHRvIGluZGljYXRlIHdoZXRo
ZXIKKyAgICAvLyB1c2VyIHR5cGVkIGluIGEgc3RyaW5nIG9yIGp1c3QgYSBjaGFyYWN0ZXIgYXMg
dGhlIHNlYXJjaCBwcmVmaXguCisgICAgbV9sYXN0Q2hhclRpbWUgPSBub3c7CisKKyAgICBVQ2hh
ciBjID0gZXZlbnQud2luZG93c1ZpcnR1YWxLZXlDb2RlKCk7CisKKyAgICBTdHJpbmcgcHJlZml4
OworICAgIGludCBzZWFyY2hTdGFydE9mZnNldCA9IDE7CisgICAgaWYgKGRlbHRhID4ga1R5cGVB
aGVhZFRpbWVvdXRNcykgeworICAgICAgICBtX3R5cGVkU3RyaW5nID0gcHJlZml4ID0gU3RyaW5n
KCZjLCAxKTsKKyAgICAgICAgbV9yZXBlYXRpbmdDaGFyID0gYzsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX3R5cGVkU3RyaW5nLmFwcGVuZChjKTsKKworICAgICAgICBpZiAoYyA9PSBtX3JlcGVh
dGluZ0NoYXIpCisgICAgICAgICAgICAvLyBUaGUgdXNlciBpcyBsaWtlbHkgdHJ5aW5nIHRvIGN5
Y2xlIHRocm91Z2ggYWxsIHRoZSBpdGVtcyBzdGFydGluZyB3aXRoIHRoaXMgY2hhcmFjdGVyLCBz
byBqdXN0IHNlYXJjaCBvbiB0aGUgY2hhcmFjdGVyCisgICAgICAgICAgICBwcmVmaXggPSBTdHJp
bmcoJmMsIDEpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1fcmVwZWF0aW5nQ2hhciA9
IDA7CisgICAgICAgICAgICBwcmVmaXggPSBtX3R5cGVkU3RyaW5nOworICAgICAgICAgICAgc2Vh
cmNoU3RhcnRPZmZzZXQgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSBh
IGNhc2UtZm9sZGVkIGNvcHkgb2YgdGhlIHByZWZpeCBzdHJpbmcgYmVmb3JlIGJlZ2lubmluZyB0
aGUgc2VhcmNoIGZvcgorICAgIC8vIGEgbWF0Y2hpbmcgZWxlbWVudC4gVGhpcyBjb2RlIHVzZXMg
Zm9sZENhc2UgdG8gd29yayBhcm91bmQgdGhlIGZhY3QgdGhhdAorICAgIC8vIFN0cmluZzo6c3Rh
cnRXaXRoIGRvZXMgbm90IGZvbGQgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFRoaXMgY29kZSBjYW4g
YmUgY2hhbmdlZAorICAgIC8vIHRvIHVzZSBzdGFydFdpdGggb25jZSB0aGF0IGlzIGZpeGVkLgor
ICAgIFN0cmluZyBwcmVmaXhXaXRoQ2FzZUZvbGRlZChwcmVmaXguZm9sZENhc2UoKSk7CisgICAg
aW50IGl0ZW1Db3VudCA9IG51bUl0ZW1zKCk7CisgICAgaW50IGluZGV4ID0gKG1heCgwLCBtX3Nl
bGVjdGVkSW5kZXgpICsgc2VhcmNoU3RhcnRPZmZzZXQpICUgaXRlbUNvdW50OworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgaXRlbUNvdW50OyBpKyssIGluZGV4ID0gKGluZGV4ICsgMSkgJSBpdGVt
Q291bnQpIHsKKyAgICAgICAgaWYgKCFpc1NlbGVjdGFibGVJdGVtKGluZGV4KSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChzdHJpcExlYWRpbmdXaGl0ZVNwYWNlKG1faXRl
bXNbaW5kZXhdLT5sYWJlbCkuZm9sZENhc2UoKS5zdGFydHNXaXRoKHByZWZpeFdpdGhDYXNlRm9s
ZGVkKSkgeworICAgICAgICAgICAgc2VsZWN0SW5kZXgoaW5kZXgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFBvcHVwTGlzdEJveDo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBhZGp1c3Qg
Y29vcmRzIGZvciBzY3JvbGxlZCBmcmFtZQorICAgIEludFJlY3QgciA9IGludGVyc2VjdGlvbihy
ZWN0LCBmcmFtZVJlY3QoKSk7CisgICAgaW50IHR4ID0geCgpIC0gc2Nyb2xsWCgpOworICAgIGlu
dCB0eSA9IHkoKSAtIHNjcm9sbFkoKTsKKworICAgIHIubW92ZSgtdHgsIC10eSk7CisKKyAgICAv
LyBzZXQgY2xpcCByZWN0IHRvIG1hdGNoIHJldmlzZWQgZGFtYWdlIHJlY3QKKyAgICBnYy0+c2F2
ZSgpOworICAgIGdjLT50cmFuc2xhdGUoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHR4KSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHR5KSk7CisgICAgZ2MtPmNsaXAocik7CisKKyAgICAvLyBGSVhNRTogQ2FuIHdl
IG9wdGltaXplIHNjcm9sbGluZyB0byBub3QgcmVxdWlyZSByZXBhaW50aW5nIHRoZSBlbnRpcmUK
KyAgICAvLyB3aW5kb3c/ICBTaG91bGQgd2U/CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1J
dGVtcygpOyArK2kpCisgICAgICAgIHBhaW50Um93KGdjLCByLCBpKTsKKworICAgIC8vIFNwZWNp
YWwgY2FzZSBmb3IgYW4gZW1wdHkgcG9wdXAuCisgICAgaWYgKG51bUl0ZW1zKCkgPT0gMCkKKyAg
ICAgICAgZ2MtPmZpbGxSZWN0KHIsIENvbG9yOjp3aGl0ZSwgQ29sb3JTcGFjZURldmljZVJHQik7
CisKKyAgICBnYy0+cmVzdG9yZSgpOworCisgICAgU2Nyb2xsVmlldzo6cGFpbnQoZ2MsIHJlY3Qp
OworfQorCitzdGF0aWMgY29uc3QgaW50IHNlcGFyYXRvclBhZGRpbmcgPSA0Oworc3RhdGljIGNv
bnN0IGludCBzZXBhcmF0b3JIZWlnaHQgPSAxOworCit2b2lkIFBvcHVwTGlzdEJveDo6cGFpbnRS
b3coR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHJvd0luZGV4
KQoreworICAgIC8vIFRoaXMgY29kZSBpcyBiYXNlZCBsYXJnZWx5IG9uIFJlbmRlckxpc3RCb3g6
OnBhaW50KiBtZXRob2RzLgorCisgICAgSW50UmVjdCByb3dSZWN0ID0gZ2V0Um93Qm91bmRzKHJv
d0luZGV4KTsKKyAgICBpZiAoIXJvd1JlY3QuaW50ZXJzZWN0cyhyZWN0KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUG9wdXBNZW51U3R5bGUgc3R5bGUgPSBtX3BvcHVwQ2xpZW50LT5pdGVtU3R5
bGUocm93SW5kZXgpOworCisgICAgLy8gUGFpbnQgYmFja2dyb3VuZAorICAgIENvbG9yIGJhY2tD
b2xvciwgdGV4dENvbG9yLCBsYWJlbENvbG9yOworICAgIGlmIChyb3dJbmRleCA9PSBtX3NlbGVj
dGVkSW5kZXgpIHsKKyAgICAgICAgYmFja0NvbG9yID0gUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVt
ZSgpLT5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgIHRl
eHRDb2xvciA9IFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+YWN0aXZlTGlzdEJveFNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpOworICAgICAgICBsYWJlbENvbG9yID0gdGV4dENvbG9yOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGJhY2tDb2xvciA9IHN0eWxlLmJhY2tncm91bmRDb2xvcigp
OworICAgICAgICB0ZXh0Q29sb3IgPSBzdHlsZS5mb3JlZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAg
Ly8gRklYTUU6IGZvciBub3cgdGhlIGxhYmVsIGNvbG9yIGlzIGhhcmQtY29kZWQuIEl0IHNob3Vs
ZCBiZSBhZGRlZCB0bworICAgICAgICAvLyB0aGUgUG9wdXBNZW51U3R5bGUuCisgICAgICAgIGxh
YmVsQ29sb3IgPSBDb2xvcigxMTUsIDExNSwgMTE1KTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBo
YXZlIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZCwgbWFrZSBzdXJlIGl0IGhhcyBhIGNvbG9yIHRv
IGJsZW5kCisgICAgLy8gYWdhaW5zdC4KKyAgICBpZiAoYmFja0NvbG9yLmhhc0FscGhhKCkpCisg
ICAgICAgIGdjLT5maWxsUmVjdChyb3dSZWN0LCBDb2xvcjo6d2hpdGUsIENvbG9yU3BhY2VEZXZp
Y2VSR0IpOworCisgICAgZ2MtPmZpbGxSZWN0KHJvd1JlY3QsIGJhY2tDb2xvciwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisKKyAgICAvLyBJdCBkb2Vzbid0IGxvb2sgZ29vZCBidXQgQXV0b2ZpbGwg
cmVxdWlyZXMgc3BlY2lhbCBzdHlsZSBmb3Igc2VwYXJhdG9yLgorICAgIC8vIEF1dG9maWxsIGRv
ZXNuJ3QgaGF2ZSBwYWRkaW5nIGFuZCAjZGNkY2RjIGNvbG9yLgorICAgIGlmIChtX3BvcHVwQ2xp
ZW50LT5pdGVtSXNTZXBhcmF0b3Iocm93SW5kZXgpKSB7CisgICAgICAgIGludCBwYWRkaW5nID0g
c3R5bGUubWVudVR5cGUoKSA9PSBQb3B1cE1lbnVTdHlsZTo6QXV0b2ZpbGxQb3B1cCA/IDAgOiBz
ZXBhcmF0b3JQYWRkaW5nOworICAgICAgICBJbnRSZWN0IHNlcGFyYXRvclJlY3QoCisgICAgICAg
ICAgICByb3dSZWN0LngoKSArIHBhZGRpbmcsCisgICAgICAgICAgICByb3dSZWN0LnkoKSArIChy
b3dSZWN0LmhlaWdodCgpIC0gc2VwYXJhdG9ySGVpZ2h0KSAvIDIsCisgICAgICAgICAgICByb3dS
ZWN0LndpZHRoKCkgLSAyICogcGFkZGluZywgc2VwYXJhdG9ySGVpZ2h0KTsKKyAgICAgICAgZ2Mt
PmZpbGxSZWN0KHNlcGFyYXRvclJlY3QsIHN0eWxlLm1lbnVUeXBlKCkgPT0gUG9wdXBNZW51U3R5
bGU6OkF1dG9maWxsUG9wdXAgPyBDb2xvcigweGRjLCAweGRjLCAweGRjKSA6IHRleHRDb2xvciwg
Q29sb3JTcGFjZURldmljZVJHQik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IXN0eWxlLmlzVmlzaWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBnYy0+c2V0RmlsbENv
bG9yKHRleHRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisKKyAgICBGb250IGl0ZW1Gb250
ID0gZ2V0Um93Rm9udChyb3dJbmRleCk7CisgICAgLy8gRklYTUU6IGh0dHA6Ly9jcmJ1Zy5jb20v
MTk4NzIgV2Ugc2hvdWxkIGdldCB0aGUgcGFkZGluZyBvZiBpbmRpdmlkdWFsIG9wdGlvbgorICAg
IC8vIGVsZW1lbnRzLiAgVGhpcyBwcm9iYWJseSBpbXBsaWVzIGNoYW5nZXMgdG8gUG9wdXBNZW51
Q2xpZW50LgorICAgIGJvb2wgcmlnaHRBbGlnbmVkID0gbV9wb3B1cENsaWVudC0+bWVudVN0eWxl
KCkudGV4dERpcmVjdGlvbigpID09IFJUTDsKKyAgICBpbnQgdGV4dFggPSAwOworICAgIGludCBt
YXhXaWR0aCA9IDA7CisgICAgaWYgKHJpZ2h0QWxpZ25lZCkKKyAgICAgICAgbWF4V2lkdGggPSBy
b3dSZWN0LndpZHRoKCkgLSBtYXgoMCwgbV9wb3B1cENsaWVudC0+Y2xpZW50UGFkZGluZ1JpZ2h0
KCkgLSBtX3BvcHVwQ2xpZW50LT5jbGllbnRJbnNldFJpZ2h0KCkpOworICAgIGVsc2UgeworICAg
ICAgICB0ZXh0WCA9IG1heCgwLCBtX3BvcHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nTGVmdCgpIC0g
bV9wb3B1cENsaWVudC0+Y2xpZW50SW5zZXRMZWZ0KCkpOworICAgICAgICBtYXhXaWR0aCA9IHJv
d1JlY3Qud2lkdGgoKSAtIHRleHRYOworICAgIH0KKyAgICAvLyBQcmVwYXJlIHRleHQgdG8gYmUg
ZHJhd24uCisgICAgU3RyaW5nIGl0ZW1UZXh0ID0gbV9wb3B1cENsaWVudC0+aXRlbVRleHQocm93
SW5kZXgpOworICAgIFN0cmluZyBpdGVtTGFiZWwgPSBtX3BvcHVwQ2xpZW50LT5pdGVtTGFiZWwo
cm93SW5kZXgpOworICAgIFN0cmluZyBpdGVtSWNvbiA9IG1fcG9wdXBDbGllbnQtPml0ZW1JY29u
KHJvd0luZGV4KTsKKyAgICBpZiAobV9zZXR0aW5ncy5yZXN0cmljdFdpZHRoT2ZMaXN0Qm94KSB7
IC8vIFRydW5jYXRlIHN0cmluZ3MgdG8gZml0IGluLgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGxlZnRUcnVuY2F0ZSBmb3IgdGhlIHJ0bCBjYXNlLgorICAgICAgICAvLyBTdHJpbmdUcnVu
Y2F0b3I6OmxlZnRUcnVuY2F0ZSB3b3VsZCBoYXZlIHRvIGJlIGltcGxlbWVudGVkLgorICAgICAg
ICBTdHJpbmcgc3RyID0gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKGl0ZW1UZXh0LCBt
YXhXaWR0aCwgaXRlbUZvbnQpOworICAgICAgICBpZiAoc3RyICE9IGl0ZW1UZXh0KSB7CisgICAg
ICAgICAgICBpdGVtVGV4dCA9IHN0cjsKKyAgICAgICAgICAgIC8vIERvbid0IGRpc3BsYXkgdGhl
IGxhYmVsIG9yIGljb24sIHdlIGFscmVhZHkgZG9uJ3QgaGF2ZSBlbm91Z2ggcm9vbSBmb3IgdGhl
IGl0ZW0gdGV4dC4KKyAgICAgICAgICAgIGl0ZW1MYWJlbCA9ICIiOworICAgICAgICAgICAgaXRl
bUljb24gPSAiIjsKKyAgICAgICAgfSBlbHNlIGlmICghaXRlbUxhYmVsLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gbWF4V2lkdGggLSBrVGV4dFRvTGFiZWxQ
YWRkaW5nIC0KKyAgICAgICAgICAgICAgICBTdHJpbmdUcnVuY2F0b3I6OndpZHRoKGl0ZW1UZXh0
LCBpdGVtRm9udCk7CisgICAgICAgICAgICBpdGVtTGFiZWwgPSBTdHJpbmdUcnVuY2F0b3I6OnJp
Z2h0VHJ1bmNhdGUoaXRlbUxhYmVsLCBhdmFpbGFibGVXaWR0aCwgaXRlbUZvbnQpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gUHJlcGFyZSB0aGUgZGlyZWN0aW9uYWxpdHkgdG8gZHJhdyB0
ZXh0LgorICAgIFRleHRSdW4gdGV4dFJ1bihpdGVtVGV4dC5jaGFyYWN0ZXJzKCksIGl0ZW1UZXh0
Lmxlbmd0aCgpLCBmYWxzZSwgMCwgMCwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwg
c3R5bGUudGV4dERpcmVjdGlvbigpLCBzdHlsZS5oYXNUZXh0RGlyZWN0aW9uT3ZlcnJpZGUoKSk7
CisgICAgLy8gSWYgdGhlIHRleHQgaXMgcmlnaHQtdG8tbGVmdCwgbWFrZSBpdCByaWdodC1hbGln
bmVkIGJ5IGFkanVzdGluZyBpdHMKKyAgICAvLyBiZWdpbm5pbmcgcG9zaXRpb24uCisgICAgaWYg
KHJpZ2h0QWxpZ25lZCkKKyAgICAgICAgdGV4dFggKz0gbWF4V2lkdGggLSBpdGVtRm9udC53aWR0
aCh0ZXh0UnVuKTsKKworICAgIC8vIERyYXcgdGhlIGl0ZW0gdGV4dC4KKyAgICBpbnQgdGV4dFkg
PSByb3dSZWN0LnkoKSArIGl0ZW1Gb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgKyAocm93UmVj
dC5oZWlnaHQoKSAtIGl0ZW1Gb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCkpIC8gMjsKKyAgICBn
Yy0+ZHJhd0JpZGlUZXh0KGl0ZW1Gb250LCB0ZXh0UnVuLCBJbnRQb2ludCh0ZXh0WCwgdGV4dFkp
KTsKKworICAgIC8vIFdlIGFyZSB1c2luZyB0aGUgbGVmdCBwYWRkaW5nIGFzIHRoZSByaWdodCBw
YWRkaW5nIGluY2x1ZGVzIHJvb20gZm9yIHRoZSBzY3JvbGwtYmFyIHdoaWNoCisgICAgLy8gZG9l
cyBub3Qgc2hvdyBpbiB0aGlzIGNhc2UuCisgICAgaW50IHJpZ2h0UGFkZGluZyA9IG1heCgwLCBt
X3BvcHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nTGVmdCgpIC0gbV9wb3B1cENsaWVudC0+Y2xpZW50
SW5zZXRMZWZ0KCkpOworICAgIGludCByZW1haW5pbmdXaWR0aCA9IHJvd1JlY3Qud2lkdGgoKSAt
IHJpZ2h0UGFkZGluZzsKKworICAgIC8vIERyYXcgdGhlIGljb24gaWYgYXBwbGljYWJsZS4KKyAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlKEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShpdGVtSWNv
bi51dGY4KCkuZGF0YSgpKSk7CisgICAgaWYgKGltYWdlICYmICFpbWFnZS0+aXNOdWxsKCkpIHsK
KyAgICAgICAgSW50UmVjdCBpbWFnZVJlY3QgPSBpbWFnZS0+cmVjdCgpOworICAgICAgICByZW1h
aW5pbmdXaWR0aCAtPSAoaW1hZ2VSZWN0LndpZHRoKCkgKyBrTGFiZWxUb0ljb25QYWRkaW5nKTsK
KyAgICAgICAgaW1hZ2VSZWN0LnNldFgocm93UmVjdC53aWR0aCgpIC0gcmlnaHRQYWRkaW5nIC0g
aW1hZ2VSZWN0LndpZHRoKCkpOworICAgICAgICBpbWFnZVJlY3Quc2V0WShyb3dSZWN0LnkoKSAr
IChyb3dSZWN0LmhlaWdodCgpIC0gaW1hZ2VSZWN0LmhlaWdodCgpKSAvIDIpOworICAgICAgICBn
Yy0+ZHJhd0ltYWdlKGltYWdlLmdldCgpLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBpbWFnZVJlY3Qp
OworICAgIH0KKworICAgIC8vIERyYXcgdGhlIHRoZSBsYWJlbCBpZiBhcHBsaWNhYmxlLgorICAg
IGlmIChpdGVtTGFiZWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBBdXRv
ZmlsbCBsYWJlbCBpcyAwLjkgc21hbGxlciB0aGFuIHJlZ3VsYXIgZm9udCBzaXplLgorICAgIGlm
IChzdHlsZS5tZW51VHlwZSgpID09IFBvcHVwTWVudVN0eWxlOjpBdXRvZmlsbFBvcHVwKSB7Cisg
ICAgICAgIGl0ZW1Gb250ID0gbV9wb3B1cENsaWVudC0+aXRlbVN0eWxlKHJvd0luZGV4KS5mb250
KCk7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgICAgIGQuc2V0Q29tcHV0ZWRTaXplKGQuY29tcHV0ZWRTaXplKCkgKiAwLjkpOwor
ICAgICAgICBpdGVtRm9udCA9IEZvbnQoZCwgaXRlbUZvbnQubGV0dGVyU3BhY2luZygpLCBpdGVt
Rm9udC53b3JkU3BhY2luZygpKTsKKyAgICAgICAgaXRlbUZvbnQudXBkYXRlKDApOworICAgIH0K
KworICAgIFRleHRSdW4gbGFiZWxUZXh0UnVuKGl0ZW1MYWJlbC5jaGFyYWN0ZXJzKCksIGl0ZW1M
YWJlbC5sZW5ndGgoKSwgZmFsc2UsIDAsIDAsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNp
b24sIHN0eWxlLnRleHREaXJlY3Rpb24oKSwgc3R5bGUuaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRl
KCkpOworICAgIGlmIChyaWdodEFsaWduZWQpCisgICAgICAgIHRleHRYID0gbWF4KDAsIG1fcG9w
dXBDbGllbnQtPmNsaWVudFBhZGRpbmdMZWZ0KCkgLSBtX3BvcHVwQ2xpZW50LT5jbGllbnRJbnNl
dExlZnQoKSk7CisgICAgZWxzZQorICAgICAgICB0ZXh0WCA9IHJlbWFpbmluZ1dpZHRoIC0gaXRl
bUZvbnQud2lkdGgobGFiZWxUZXh0UnVuKTsKKworICAgIGdjLT5zZXRGaWxsQ29sb3IobGFiZWxD
b2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7CisgICAgZ2MtPmRyYXdCaWRpVGV4dChpdGVtRm9u
dCwgbGFiZWxUZXh0UnVuLCBJbnRQb2ludCh0ZXh0WCwgdGV4dFkpKTsKK30KKworRm9udCBQb3B1
cExpc3RCb3g6OmdldFJvd0ZvbnQoaW50IHJvd0luZGV4KQoreworICAgIEZvbnQgaXRlbUZvbnQg
PSBtX3BvcHVwQ2xpZW50LT5pdGVtU3R5bGUocm93SW5kZXgpLmZvbnQoKTsKKyAgICBpZiAobV9w
b3B1cENsaWVudC0+aXRlbUlzTGFiZWwocm93SW5kZXgpKSB7CisgICAgICAgIC8vIEJvbGQtaWZ5
IGxhYmVscyAoaWUsIGFuIDxvcHRncm91cD4gaGVhZGluZykuCisgICAgICAgIEZvbnREZXNjcmlw
dGlvbiBkID0gaXRlbUZvbnQuZm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGQuc2V0V2VpZ2h0
KEZvbnRXZWlnaHRCb2xkKTsKKyAgICAgICAgRm9udCBmb250KGQsIGl0ZW1Gb250LmxldHRlclNw
YWNpbmcoKSwgaXRlbUZvbnQud29yZFNwYWNpbmcoKSk7CisgICAgICAgIGZvbnQudXBkYXRlKDAp
OworICAgICAgICByZXR1cm4gZm9udDsKKyAgICB9CisKKyAgICByZXR1cm4gaXRlbUZvbnQ7Cit9
CisKK3ZvaWQgUG9wdXBMaXN0Qm94OjphYmFuZG9uKCkKK3sKKyAgICBSZWZQdHI8UG9wdXBMaXN0
Qm94PiBrZWVwQWxpdmUodGhpcyk7CisKKyAgICBtX3NlbGVjdGVkSW5kZXggPSBtX29yaWdpbmFs
SW5kZXg7CisKKyAgICBoaWRlUG9wdXAoKTsKKworICAgIGlmIChtX2FjY2VwdGVkSW5kZXhPbkFi
YW5kb24gPj0gMCkgeworICAgICAgICBpZiAobV9wb3B1cENsaWVudCkKKyAgICAgICAgICAgIG1f
cG9wdXBDbGllbnQtPnZhbHVlQ2hhbmdlZChtX2FjY2VwdGVkSW5kZXhPbkFiYW5kb24pOworICAg
ICAgICBtX2FjY2VwdGVkSW5kZXhPbkFiYW5kb24gPSAtMTsKKyAgICB9Cit9CisKK2ludCBQb3B1
cExpc3RCb3g6OnBvaW50VG9Sb3dJbmRleChjb25zdCBJbnRQb2ludCYgcG9pbnQpCit7CisgICAg
aW50IHkgPSBzY3JvbGxZKCkgKyBwb2ludC55KCk7CisKKyAgICAvLyBGSVhNRTogYmluYXJ5IHNl
YXJjaCBpZiBwZXJmIG1hdHRlcnMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1JdGVtcygp
OyArK2kpIHsKKyAgICAgICAgaWYgKHkgPCBtX2l0ZW1zW2ldLT55T2Zmc2V0KQorICAgICAgICAg
ICAgcmV0dXJuIGktMTsKKyAgICB9CisKKyAgICAvLyBMYXN0IGl0ZW0/CisgICAgaWYgKHkgPCBj
b250ZW50c0hlaWdodCgpKQorICAgICAgICByZXR1cm4gbV9pdGVtcy5zaXplKCktMTsKKworICAg
IHJldHVybiAtMTsKK30KKworYm9vbCBQb3B1cExpc3RCb3g6OmFjY2VwdEluZGV4KGludCBpbmRl
eCkKK3sKKyAgICAvLyBDbGVhciBtX2FjY2VwdGVkSW5kZXhPbkFiYW5kb24gb25jZSB1c2VyIGFj
Y2VwdHMgdGhlIHNlbGVjdGVkIGluZGV4LgorICAgIGlmIChtX2FjY2VwdGVkSW5kZXhPbkFiYW5k
b24gPj0gMCkKKyAgICAgICAgbV9hY2NlcHRlZEluZGV4T25BYmFuZG9uID0gLTE7CisKKyAgICBp
ZiAoaW5kZXggPj0gbnVtSXRlbXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYg
KGluZGV4IDwgMCkgeworICAgICAgICBpZiAobV9wb3B1cENsaWVudCkgeworICAgICAgICAgICAg
Ly8gRW50ZXIgcHJlc3NlZCB3aXRoIG5vIHNlbGVjdGlvbiwganVzdCBjbG9zZSB0aGUgcG9wdXAu
CisgICAgICAgICAgICBoaWRlUG9wdXAoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKGlzU2VsZWN0YWJsZUl0ZW0oaW5kZXgpKSB7CisgICAgICAg
IFJlZlB0cjxQb3B1cExpc3RCb3g+IGtlZXBBbGl2ZSh0aGlzKTsKKworICAgICAgICAvLyBIaWRl
IG91cnNlbHZlcyBmaXJzdCBzaW5jZSB2YWx1ZUNoYW5nZWQgbWF5IGhhdmUgbnVtZXJvdXMgc2lk
ZS1lZmZlY3RzLgorICAgICAgICBoaWRlUG9wdXAoKTsKKworICAgICAgICAvLyBUZWxsIHRoZSA8
c2VsZWN0PiBQb3B1cE1lbnVDbGllbnQgd2hhdCBpbmRleCB3YXMgc2VsZWN0ZWQuCisgICAgICAg
IG1fcG9wdXBDbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRleCk7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFBvcHVwTGlzdEJveDo6
c2VsZWN0SW5kZXgoaW50IGluZGV4KQoreworICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0g
bnVtSXRlbXMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBpc1NlbGVjdGFibGUgPSBp
c1NlbGVjdGFibGVJdGVtKGluZGV4KTsKKyAgICBpZiAoaW5kZXggIT0gbV9zZWxlY3RlZEluZGV4
ICYmIGlzU2VsZWN0YWJsZSkgeworICAgICAgICBpbnZhbGlkYXRlUm93KG1fc2VsZWN0ZWRJbmRl
eCk7CisgICAgICAgIG1fc2VsZWN0ZWRJbmRleCA9IGluZGV4OworICAgICAgICBpbnZhbGlkYXRl
Um93KG1fc2VsZWN0ZWRJbmRleCk7CisKKyAgICAgICAgc2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24o
KTsKKyAgICAgICAgbV9wb3B1cENsaWVudC0+c2VsZWN0aW9uQ2hhbmdlZChtX3NlbGVjdGVkSW5k
ZXgpOworICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0YWJsZSkgeworICAgICAgICBjbGVhclNlbGVj
dGlvbigpOworICAgIH0KK30KKwordm9pZCBQb3B1cExpc3RCb3g6OnNldE9yaWdpbmFsSW5kZXgo
aW50IGluZGV4KQoreworICAgIG1fb3JpZ2luYWxJbmRleCA9IG1fc2VsZWN0ZWRJbmRleCA9IGlu
ZGV4OworfQorCitpbnQgUG9wdXBMaXN0Qm94OjpnZXRSb3dIZWlnaHQoaW50IGluZGV4KQorewor
ICAgIGlmIChpbmRleCA8IDApCisgICAgICAgIHJldHVybiBQb3B1cE1lbnVDaHJvbWl1bTo6bWlu
aW11bVJvd0hlaWdodCgpOworCisgICAgaWYgKG1fcG9wdXBDbGllbnQtPml0ZW1TdHlsZShpbmRl
eCkuaXNEaXNwbGF5Tm9uZSgpKQorICAgICAgICByZXR1cm4gUG9wdXBNZW51Q2hyb21pdW06Om1p
bmltdW1Sb3dIZWlnaHQoKTsKKworICAgIC8vIFNlcGFyYXRvciByb3cgaGVpZ2h0IGlzIHRoZSBz
YW1lIHNpemUgYXMgaXRzZWxmLgorICAgIGlmIChtX3BvcHVwQ2xpZW50LT5pdGVtSXNTZXBhcmF0
b3IoaW5kZXgpKQorICAgICAgICByZXR1cm4gbWF4KHNlcGFyYXRvckhlaWdodCwgUG9wdXBNZW51
Q2hyb21pdW06Om1pbmltdW1Sb3dIZWlnaHQoKSk7CisKKyAgICBTdHJpbmcgaWNvbiA9IG1fcG9w
dXBDbGllbnQtPml0ZW1JY29uKGluZGV4KTsKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlKEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZShpY29uLnV0ZjgoKS5kYXRhKCkpKTsKKworICAgIGludCBm
b250SGVpZ2h0ID0gZ2V0Um93Rm9udChpbmRleCkuZm9udE1ldHJpY3MoKS5oZWlnaHQoKTsKKyAg
ICBpbnQgaWNvbkhlaWdodCA9IChpbWFnZSAmJiAhaW1hZ2UtPmlzTnVsbCgpKSA/IGltYWdlLT5y
ZWN0KCkuaGVpZ2h0KCkgOiAwOworCisgICAgaW50IGxpbmVQYWRkaW5nSGVpZ2h0ID0gbV9wb3B1
cENsaWVudC0+bWVudVN0eWxlKCkubWVudVR5cGUoKSA9PSBQb3B1cE1lbnVTdHlsZTo6QXV0b2Zp
bGxQb3B1cCA/IGtMaW5lUGFkZGluZ0hlaWdodCA6IDA7CisgICAgaW50IGNhbGN1bGF0ZWRSb3dI
ZWlnaHQgPSBtYXgoZm9udEhlaWdodCwgaWNvbkhlaWdodCkgKyBsaW5lUGFkZGluZ0hlaWdodCAq
IDI7CisgICAgcmV0dXJuIG1heChjYWxjdWxhdGVkUm93SGVpZ2h0LCBQb3B1cE1lbnVDaHJvbWl1
bTo6bWluaW11bVJvd0hlaWdodCgpKTsKK30KKworSW50UmVjdCBQb3B1cExpc3RCb3g6OmdldFJv
d0JvdW5kcyhpbnQgaW5kZXgpCit7CisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoMCwgMCwgdmlzaWJsZVdpZHRoKCksIGdldFJvd0hlaWdodChpbmRleCkpOworCisg
ICAgcmV0dXJuIEludFJlY3QoMCwgbV9pdGVtc1tpbmRleF0tPnlPZmZzZXQsIHZpc2libGVXaWR0
aCgpLCBnZXRSb3dIZWlnaHQoaW5kZXgpKTsKK30KKwordm9pZCBQb3B1cExpc3RCb3g6OmludmFs
aWRhdGVSb3coaW50IGluZGV4KQoreworICAgIGlmIChpbmRleCA8IDApCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIEludmFsaWRhdGUgaW4gdGhlIHdpbmRvdyBjb250ZW50cywgYXMgRnJhbWVs
ZXNzU2Nyb2xsVmlldzo6aW52YWxpZGF0ZVJlY3QKKyAgICAvLyBwYWludHMgaW4gdGhlIHdpbmRv
dyBjb29yZGluYXRlcy4KKyAgICBpbnZhbGlkYXRlUmVjdChjb250ZW50c1RvV2luZG93KGdldFJv
d0JvdW5kcyhpbmRleCkpKTsKK30KKwordm9pZCBQb3B1cExpc3RCb3g6OnNjcm9sbFRvUmV2ZWFs
Um93KGludCBpbmRleCkKK3sKKyAgICBpZiAoaW5kZXggPCAwKQorICAgICAgICByZXR1cm47CisK
KyAgICBJbnRSZWN0IHJvd1JlY3QgPSBnZXRSb3dCb3VuZHMoaW5kZXgpOworCisgICAgaWYgKHJv
d1JlY3QueSgpIDwgc2Nyb2xsWSgpKSB7CisgICAgICAgIC8vIFJvdyBpcyBhYm92ZSBjdXJyZW50
IHNjcm9sbCBwb3NpdGlvbiwgc2Nyb2xsIHVwLgorICAgICAgICBTY3JvbGxWaWV3OjpzZXRTY3Jv
bGxQb3NpdGlvbihJbnRQb2ludCgwLCByb3dSZWN0LnkoKSkpOworICAgIH0gZWxzZSBpZiAocm93
UmVjdC5tYXhZKCkgPiBzY3JvbGxZKCkgKyB2aXNpYmxlSGVpZ2h0KCkpIHsKKyAgICAgICAgLy8g
Um93IGlzIGJlbG93IGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uLCBzY3JvbGwgZG93bi4KKyAgICAg
ICAgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMCwgcm93UmVjdC5tYXhZ
KCkgLSB2aXNpYmxlSGVpZ2h0KCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgUG9wdXBMaXN0Qm94Ojpp
c1NlbGVjdGFibGVJdGVtKGludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBp
bmRleCA8IG51bUl0ZW1zKCkpOworICAgIHJldHVybiBtX2l0ZW1zW2luZGV4XS0+dHlwZSA9PSBQ
b3B1cEl0ZW06OlR5cGVPcHRpb24gJiYgbV9wb3B1cENsaWVudC0+aXRlbUlzRW5hYmxlZChpbmRl
eCk7Cit9CisKK3ZvaWQgUG9wdXBMaXN0Qm94OjpjbGVhclNlbGVjdGlvbigpCit7CisgICAgaWYg
KG1fc2VsZWN0ZWRJbmRleCAhPSAtMSkgeworICAgICAgICBpbnZhbGlkYXRlUm93KG1fc2VsZWN0
ZWRJbmRleCk7CisgICAgICAgIG1fc2VsZWN0ZWRJbmRleCA9IC0xOworICAgICAgICBtX3BvcHVw
Q2xpZW50LT5zZWxlY3Rpb25DbGVhcmVkKCk7CisgICAgfQorfQorCit2b2lkIFBvcHVwTGlzdEJv
eDo6c2VsZWN0TmV4dFJvdygpCit7CisgICAgaWYgKCFtX3NldHRpbmdzLmxvb3BTZWxlY3Rpb25O
YXZpZ2F0aW9uIHx8IG1fc2VsZWN0ZWRJbmRleCAhPSBudW1JdGVtcygpIC0gMSkgeworICAgICAg
ICBhZGp1c3RTZWxlY3RlZEluZGV4KDEpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2UgYXJlIG1vdmluZyBwYXN0IHRoZSBsYXN0IGl0ZW0sIG5vIHJvdyBzaG91bGQgYmUgc2Vs
ZWN0ZWQuCisgICAgY2xlYXJTZWxlY3Rpb24oKTsKK30KKwordm9pZCBQb3B1cExpc3RCb3g6OnNl
bGVjdFByZXZpb3VzUm93KCkKK3sKKyAgICBpZiAoIW1fc2V0dGluZ3MubG9vcFNlbGVjdGlvbk5h
dmlnYXRpb24gfHwgbV9zZWxlY3RlZEluZGV4ID4gMCkgeworICAgICAgICBhZGp1c3RTZWxlY3Rl
ZEluZGV4KC0xKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3NlbGVjdGVk
SW5kZXggPT0gMCkgeworICAgICAgICAvLyBXZSBhcmUgbW92aW5nIHBhc3QgdGhlIGZpcnN0IGl0
ZW0sIGNsZWFyIHRoZSBzZWxlY3Rpb24uCisgICAgICAgIGNsZWFyU2VsZWN0aW9uKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBObyByb3cgaXMgc2VsZWN0ZWQsIGp1bXAgdG8g
dGhlIGxhc3QgaXRlbS4KKyAgICBzZWxlY3RJbmRleChudW1JdGVtcygpIC0gMSk7CisgICAgc2Ny
b2xsVG9SZXZlYWxTZWxlY3Rpb24oKTsKK30KKwordm9pZCBQb3B1cExpc3RCb3g6OmFkanVzdFNl
bGVjdGVkSW5kZXgoaW50IGRlbHRhKQoreworICAgIGludCB0YXJnZXRJbmRleCA9IG1fc2VsZWN0
ZWRJbmRleCArIGRlbHRhOworICAgIHRhcmdldEluZGV4ID0gbWluKG1heCh0YXJnZXRJbmRleCwg
MCksIG51bUl0ZW1zKCkgLSAxKTsKKyAgICBpZiAoIWlzU2VsZWN0YWJsZUl0ZW0odGFyZ2V0SW5k
ZXgpKSB7CisgICAgICAgIC8vIFdlIGRpZG4ndCBsYW5kIG9uIGFuIG9wdGlvbi4gIFRyeSB0byBm
aW5kIG9uZS4KKyAgICAgICAgLy8gV2UgdHJ5IHRvIHNlbGVjdCB0aGUgY2xvc2VzdCBpbmRleCB0
byB0YXJnZXQsIHByaW9yaXRpemluZyBhbnkgaW4KKyAgICAgICAgLy8gdGhlIHJhbmdlIFtjdXJy
ZW50LCB0YXJnZXRdLgorCisgICAgICAgIGludCBkaXIgPSBkZWx0YSA+IDAgPyAxIDogLTE7Cisg
ICAgICAgIGludCB0ZXN0SW5kZXggPSBtX3NlbGVjdGVkSW5kZXg7CisgICAgICAgIGludCBiZXN0
SW5kZXggPSBtX3NlbGVjdGVkSW5kZXg7CisgICAgICAgIGJvb2wgcGFzc2VkVGFyZ2V0ID0gZmFs
c2U7CisgICAgICAgIHdoaWxlICh0ZXN0SW5kZXggPj0gMCAmJiB0ZXN0SW5kZXggPCBudW1JdGVt
cygpKSB7CisgICAgICAgICAgICBpZiAoaXNTZWxlY3RhYmxlSXRlbSh0ZXN0SW5kZXgpKQorICAg
ICAgICAgICAgICAgIGJlc3RJbmRleCA9IHRlc3RJbmRleDsKKyAgICAgICAgICAgIGlmICh0ZXN0
SW5kZXggPT0gdGFyZ2V0SW5kZXgpCisgICAgICAgICAgICAgICAgcGFzc2VkVGFyZ2V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgIGlmIChwYXNzZWRUYXJnZXQgJiYgYmVzdEluZGV4ICE9IG1fc2VsZWN0
ZWRJbmRleCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgdGVzdEluZGV4
ICs9IGRpcjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBpY2sgdGhlIGJlc3QgaW5kZXgsIHdo
aWNoIG1heSBtZWFuIHdlIGRvbid0IGNoYW5nZS4KKyAgICAgICAgdGFyZ2V0SW5kZXggPSBiZXN0
SW5kZXg7CisgICAgfQorCisgICAgLy8gU2VsZWN0IHRoZSBuZXcgaW5kZXgsIGFuZCBlbnN1cmUg
aXRzIHZpc2libGUuICBXZSBkbyB0aGlzIHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGV0aGVyIHRo
ZSBzZWxlY3Rpb24gY2hhbmdlZCB0byBlbnN1cmUga2V5Ym9hcmQgZXZlbnRzIGFsd2F5cyBicmlu
ZyB0aGUKKyAgICAvLyBzZWxlY3Rpb24gaW50byB2aWV3LgorICAgIHNlbGVjdEluZGV4KHRhcmdl
dEluZGV4KTsKKyAgICBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOworfQorCit2b2lkIFBvcHVw
TGlzdEJveDo6aGlkZVBvcHVwKCkKK3sKKyAgICBpZiAocGFyZW50KCkpIHsKKyAgICAgICAgUG9w
dXBDb250YWluZXIqIGNvbnRhaW5lciA9IHN0YXRpY19jYXN0PFBvcHVwQ29udGFpbmVyKj4ocGFy
ZW50KCkpOworICAgICAgICBpZiAoY29udGFpbmVyLT5jbGllbnQoKSkKKyAgICAgICAgICAgIGNv
bnRhaW5lci0+Y2xpZW50KCktPnBvcHVwQ2xvc2VkKGNvbnRhaW5lcik7CisgICAgICAgIGNvbnRh
aW5lci0+bm90aWZ5UG9wdXBIaWRkZW4oKTsKKyAgICB9CisKKyAgICBpZiAobV9wb3B1cENsaWVu
dCkKKyAgICAgICAgbV9wb3B1cENsaWVudC0+cG9wdXBEaWRIaWRlKCk7Cit9CisKK3ZvaWQgUG9w
dXBMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgY2xlYXIoKTsKKworICAgIGlu
dCBzaXplID0gbV9wb3B1cENsaWVudC0+bGlzdFNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHNpemU7ICsraSkgeworICAgICAgICBQb3B1cEl0ZW06OlR5cGUgdHlwZTsKKyAgICAgICAg
aWYgKG1fcG9wdXBDbGllbnQtPml0ZW1Jc1NlcGFyYXRvcihpKSkKKyAgICAgICAgICAgIHR5cGUg
PSBQb3B1cEl0ZW06OlR5cGVTZXBhcmF0b3I7CisgICAgICAgIGVsc2UgaWYgKG1fcG9wdXBDbGll
bnQtPml0ZW1Jc0xhYmVsKGkpKQorICAgICAgICAgICAgdHlwZSA9IFBvcHVwSXRlbTo6VHlwZUdy
b3VwOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0eXBlID0gUG9wdXBJdGVtOjpUeXBlT3B0
aW9uOworICAgICAgICBtX2l0ZW1zLmFwcGVuZChuZXcgUG9wdXBJdGVtKG1fcG9wdXBDbGllbnQt
Pml0ZW1UZXh0KGkpLCB0eXBlKSk7CisgICAgICAgIG1faXRlbXNbaV0tPmVuYWJsZWQgPSBpc1Nl
bGVjdGFibGVJdGVtKGkpOworICAgICAgICBQb3B1cE1lbnVTdHlsZSBzdHlsZSA9IG1fcG9wdXBD
bGllbnQtPml0ZW1TdHlsZShpKTsKKyAgICAgICAgbV9pdGVtc1tpXS0+dGV4dERpcmVjdGlvbiA9
IHN0eWxlLnRleHREaXJlY3Rpb24oKTsKKyAgICAgICAgbV9pdGVtc1tpXS0+aGFzVGV4dERpcmVj
dGlvbk92ZXJyaWRlID0gc3R5bGUuaGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlKCk7CisgICAgfQor
CisgICAgbV9zZWxlY3RlZEluZGV4ID0gbV9wb3B1cENsaWVudC0+c2VsZWN0ZWRJbmRleCgpOwor
ICAgIHNldE9yaWdpbmFsSW5kZXgobV9zZWxlY3RlZEluZGV4KTsKKworICAgIGxheW91dCgpOwor
fQorCit2b2lkIFBvcHVwTGlzdEJveDo6c2V0TWF4V2lkdGhBbmRMYXlvdXQoaW50IG1heFdpZHRo
KQoreworICAgIG1fbWF4V2luZG93V2lkdGggPSBtYXhXaWR0aDsKKyAgICBsYXlvdXQoKTsKK30K
Kwordm9pZCBQb3B1cExpc3RCb3g6OmxheW91dCgpCit7CisgICAgYm9vbCBpc1JpZ2h0QWxpZ25l
ZCA9IG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLnRleHREaXJlY3Rpb24oKSA9PSBSVEw7Cisg
ICAgCisgICAgLy8gU2l6ZSBvdXIgY2hpbGQgaXRlbXMuCisgICAgaW50IGJhc2VXaWR0aCA9IDA7
CisgICAgaW50IHBhZGRpbmdXaWR0aCA9IDA7CisgICAgaW50IGxpbmVFbmRQYWRkaW5nV2lkdGgg
PSAwOworICAgIGludCB5ID0gMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZW1zKCk7
ICsraSkgeworICAgICAgICAvLyBQbGFjZSB0aGUgaXRlbSB2ZXJ0aWNhbGx5LgorICAgICAgICBt
X2l0ZW1zW2ldLT55T2Zmc2V0ID0geTsKKyAgICAgICAgaWYgKG1fcG9wdXBDbGllbnQtPml0ZW1T
dHlsZShpKS5pc0Rpc3BsYXlOb25lKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
eSArPSBnZXRSb3dIZWlnaHQoaSk7CisKKyAgICAgICAgLy8gRW5zdXJlIHRoZSBwb3B1cCBpcyB3
aWRlIGVub3VnaCB0byBmaXQgdGhpcyBpdGVtLgorICAgICAgICBGb250IGl0ZW1Gb250ID0gZ2V0
Um93Rm9udChpKTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBtX3BvcHVwQ2xpZW50LT5pdGVtVGV4
dChpKTsKKyAgICAgICAgU3RyaW5nIGxhYmVsID0gbV9wb3B1cENsaWVudC0+aXRlbUxhYmVsKGkp
OworICAgICAgICBTdHJpbmcgaWNvbiA9IG1fcG9wdXBDbGllbnQtPml0ZW1JY29uKGkpOworICAg
ICAgICBSZWZQdHI8SW1hZ2U+IGljb25JbWFnZShJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2Uo
aWNvbi51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIGludCB3aWR0aCA9IDA7CisgICAgICAgIGlm
ICghdGV4dC5pc0VtcHR5KCkpCisgICAgICAgICAgICB3aWR0aCA9IGl0ZW1Gb250LndpZHRoKFRl
eHRSdW4odGV4dCkpOworICAgICAgICBpZiAoIWxhYmVsLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgaWYgKHdpZHRoID4gMCkKKyAgICAgICAgICAgICAgICB3aWR0aCArPSBrVGV4dFRvTGFiZWxQ
YWRkaW5nOworICAgICAgICAgICAgd2lkdGggKz0gaXRlbUZvbnQud2lkdGgoVGV4dFJ1bihsYWJl
bCkpOworICAgICAgICB9CisgICAgICAgIGlmIChpY29uSW1hZ2UgJiYgIWljb25JbWFnZS0+aXNO
dWxsKCkpIHsKKyAgICAgICAgICAgIGlmICh3aWR0aCA+IDApCisgICAgICAgICAgICAgICAgd2lk
dGggKz0ga0xhYmVsVG9JY29uUGFkZGluZzsKKyAgICAgICAgICAgIHdpZHRoICs9IGljb25JbWFn
ZS0+cmVjdCgpLndpZHRoKCk7CisgICAgICAgIH0KKworICAgICAgICBiYXNlV2lkdGggPSBtYXgo
YmFzZVdpZHRoLCB3aWR0aCk7CisgICAgICAgIC8vIEZJWE1FOiBodHRwOi8vYi8xMjEwNDgxIFdl
IHNob3VsZCBnZXQgdGhlIHBhZGRpbmcgb2YgaW5kaXZpZHVhbCBvcHRpb24gZWxlbWVudHMuCisg
ICAgICAgIHBhZGRpbmdXaWR0aCA9IG1heChwYWRkaW5nV2lkdGgsCisgICAgICAgICAgICBtX3Bv
cHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nTGVmdCgpICsgbV9wb3B1cENsaWVudC0+Y2xpZW50UGFk
ZGluZ1JpZ2h0KCkpOworICAgICAgICBsaW5lRW5kUGFkZGluZ1dpZHRoID0gbWF4KGxpbmVFbmRQ
YWRkaW5nV2lkdGgsCisgICAgICAgICAgICBpc1JpZ2h0QWxpZ25lZCA/IG1fcG9wdXBDbGllbnQt
PmNsaWVudFBhZGRpbmdMZWZ0KCkgOiBtX3BvcHVwQ2xpZW50LT5jbGllbnRQYWRkaW5nUmlnaHQo
KSk7CisgICAgfQorCisgICAgLy8gQ2FsY3VsYXRlIHNjcm9sbCBiYXIgd2lkdGguCisgICAgaW50
IHdpbmRvd0hlaWdodCA9IDA7CisgICAgbV92aXNpYmxlUm93cyA9IG1pbihudW1JdGVtcygpLCBr
TWF4VmlzaWJsZVJvd3MpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3Zpc2libGVSb3dz
OyArK2kpIHsKKyAgICAgICAgaW50IHJvd0hlaWdodCA9IGdldFJvd0hlaWdodChpKTsKKworICAg
ICAgICAvLyBPbmx5IGNsaXAgdGhlIHdpbmRvdyBoZWlnaHQgZm9yIG5vbi1NYWMgcGxhdGZvcm1z
LgorICAgICAgICBpZiAod2luZG93SGVpZ2h0ICsgcm93SGVpZ2h0ID4gbV9tYXhIZWlnaHQpIHsK
KyAgICAgICAgICAgIG1fdmlzaWJsZVJvd3MgPSBpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKworICAgICAgICB3aW5kb3dIZWlnaHQgKz0gcm93SGVpZ2h0OworICAgIH0KKworICAg
IC8vIFNldCBvdXIgd2lkZ2V0IGFuZCBzY3JvbGxhYmxlIGNvbnRlbnRzIHNpemVzLgorICAgIGlu
dCBzY3JvbGxiYXJXaWR0aCA9IDA7CisgICAgaWYgKG1fdmlzaWJsZVJvd3MgPCBudW1JdGVtcygp
KSB7CisgICAgICAgIHNjcm9sbGJhcldpZHRoID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1l
KCktPnNjcm9sbGJhclRoaWNrbmVzcygpOworCisgICAgICAgIC8vIFVzZSBrTWluRW5kT2ZMaW5l
UGFkZGluZyB3aGVuIHRoZXJlIGlzIGEgc2Nyb2xsYmFyIHNvIHRoYXQgd2UgdXNlCisgICAgICAg
IC8vIGFzIG11Y2ggYXMgKGxpbmVFbmRQYWRkaW5nV2lkdGggLSBrTWluRW5kT2ZMaW5lUGFkZGlu
ZykgcGFkZGluZworICAgICAgICAvLyBzcGFjZSBmb3Igc2Nyb2xsYmFyIGFuZCBhbGxvdyB1c2Vy
IHRvIHVzZSBDU1MgcGFkZGluZyB0byBtYWtlIHRoZQorICAgICAgICAvLyBwb3B1cCBsaXN0Ym94
IGFsaWduIHdpdGggdGhlIHNlbGVjdCBlbGVtZW50LgorICAgICAgICBwYWRkaW5nV2lkdGggPSBw
YWRkaW5nV2lkdGggLSBsaW5lRW5kUGFkZGluZ1dpZHRoICsga01pbkVuZE9mTGluZVBhZGRpbmc7
CisgICAgfQorCisgICAgaW50IHdpbmRvd1dpZHRoOworICAgIGludCBjb250ZW50V2lkdGg7Cisg
ICAgaWYgKG1fc2V0dGluZ3MucmVzdHJpY3RXaWR0aE9mTGlzdEJveCkgeworICAgICAgICB3aW5k
b3dXaWR0aCA9IG1fYmFzZVdpZHRoOworICAgICAgICBjb250ZW50V2lkdGggPSBtX2Jhc2VXaWR0
aCAtIHNjcm9sbGJhcldpZHRoOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvd1dpZHRoID0g
YmFzZVdpZHRoICsgc2Nyb2xsYmFyV2lkdGggKyBwYWRkaW5nV2lkdGg7CisgICAgICAgIGlmICh3
aW5kb3dXaWR0aCA+IG1fbWF4V2luZG93V2lkdGgpIHsKKyAgICAgICAgICAgIC8vIHdpbmRvd1dp
ZHRoIGV4Y2VlZHMgbV9tYXhXaW5kb3dXaWR0aCwgc28gd2UgaGF2ZSB0byBjbGlwLgorICAgICAg
ICAgICAgd2luZG93V2lkdGggPSBtX21heFdpbmRvd1dpZHRoOworICAgICAgICAgICAgYmFzZVdp
ZHRoID0gd2luZG93V2lkdGggLSBzY3JvbGxiYXJXaWR0aCAtIHBhZGRpbmdXaWR0aDsKKyAgICAg
ICAgICAgIG1fYmFzZVdpZHRoID0gYmFzZVdpZHRoOworICAgICAgICB9CisgICAgICAgIGNvbnRl
bnRXaWR0aCA9IHdpbmRvd1dpZHRoIC0gc2Nyb2xsYmFyV2lkdGg7CisKKyAgICAgICAgaWYgKHdp
bmRvd1dpZHRoIDwgbV9iYXNlV2lkdGgpIHsKKyAgICAgICAgICAgIHdpbmRvd1dpZHRoID0gbV9i
YXNlV2lkdGg7CisgICAgICAgICAgICBjb250ZW50V2lkdGggPSBtX2Jhc2VXaWR0aCAtIHNjcm9s
bGJhcldpZHRoOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fYmFzZVdpZHRoID0gYmFz
ZVdpZHRoOworICAgIH0KKworICAgIHJlc2l6ZSh3aW5kb3dXaWR0aCwgd2luZG93SGVpZ2h0KTsK
KyAgICBzZXRDb250ZW50c1NpemUoSW50U2l6ZShjb250ZW50V2lkdGgsIGdldFJvd0JvdW5kcyhu
dW1JdGVtcygpIC0gMSkubWF4WSgpKSk7CisKKyAgICBpZiAoaG9zdFdpbmRvdygpKQorICAgICAg
ICBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOworCisgICAgaW52YWxpZGF0ZSgpOworfQorCit2
b2lkIFBvcHVwTGlzdEJveDo6Y2xlYXIoKQoreworICAgIGZvciAoVmVjdG9yPFBvcHVwSXRlbSo+
OjppdGVyYXRvciBpdCA9IG1faXRlbXMuYmVnaW4oKTsgaXQgIT0gbV9pdGVtcy5lbmQoKTsgKytp
dCkKKyAgICAgICAgZGVsZXRlICppdDsKKyAgICBtX2l0ZW1zLmNsZWFyKCk7Cit9CisKK2Jvb2wg
UG9wdXBMaXN0Qm94Ojppc1BvaW50SW5Cb3VuZHMoY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
ICAgIHJldHVybiBudW1JdGVtcygpICE9IDAgJiYgSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWln
aHQoKSkuY29udGFpbnMocG9pbnQpOworfQorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQ
b3B1cE1lbnVDaHJvbWl1bSBpbXBsZW1lbnRhdGlvbgorLy8KKy8vIE5vdGU6IHlvdSBjYW5ub3Qg
YWRkIG1ldGhvZHMgdG8gdGhpcyBjbGFzcywgc2luY2UgaXQgaXMgZGVmaW5lZCBhYm92ZSB0aGUK
Ky8vICAgICAgIHBvcnRhYmlsaXR5IGxheWVyLiBUbyBhY2Nlc3MgbWV0aG9kcyBhbmQgcHJvcGVy
dGllcyBvbiB0aGUKKy8vICAgICAgIHBvcHVwIHdpZGdldHMsIHVzZSB8cG9wdXBXaW5kb3d8IGFi
b3ZlLgorCiBQb3B1cE1lbnVDaHJvbWl1bTo6UG9wdXBNZW51Q2hyb21pdW0oUG9wdXBNZW51Q2xp
ZW50KiBjbGllbnQpCiAgICAgOiBtX3BvcHVwQ2xpZW50KGNsaWVudCkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Qb3B1cE1lbnVDaHJvbWl1bS5oCmluZGV4
IGVkZDM1NTI2ZjE3YzNkYzY0ZTUxZmMxZjA3OTZmNDA0ZWM4MTVlNWUuLjgyZDg3OWJkZjA1ZTM5
NjNkODM4ODJjN2M3YmFjMDllOTY5OTU0NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1BvcHVwTWVudUNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUG9wdXBNZW51Q2hyb21pdW0uaApAQCAtMzMsMTcgKzMzLDE3NiBA
QAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlICJGcmFtZWxlc3NTY3JvbGxWaWV3
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAj
aW5jbHVkZSAiUG9wdXBNZW51LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIlBvcHVwTWVudVN0eWxlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q2hyb21lQ2xpZW50Q2hyb21pdW07CiBjbGFzcyBGcmFtZVZpZXc7Ci1jbGFzcyBJbnRSZWN0Owot
Y2xhc3MgUG9wdXBJdGVtOworY2xhc3MgUG9wdXBMaXN0Qm94OwogY2xhc3MgUG9wdXBNZW51Q2xp
ZW50OwogCisvLyBBIGNvbnRhaW5lciBmb3IgdGhlIGRhdGEgZm9yIGVhY2ggbWVudSBpdGVtIChl
LmcuIHJlcHJlc2VudGVkIGJ5IDxvcHRpb24+CisvLyBvciA8b3B0Z3JvdXA+IGluIGEgPHNlbGVj
dD4gd2lkZ2V0KSBhbmQgaXMgdXNlZCBieSBQb3B1cExpc3RCb3guCitzdHJ1Y3QgUG9wdXBJdGVt
IHsKKyAgICBlbnVtIFR5cGUgeworICAgICAgICBUeXBlT3B0aW9uLAorICAgICAgICBUeXBlR3Jv
dXAsCisgICAgICAgIFR5cGVTZXBhcmF0b3IKKyAgICB9OworCisgICAgUG9wdXBJdGVtKGNvbnN0
IFN0cmluZyYgbGFiZWwsIFR5cGUgdHlwZSkKKyAgICAgICAgOiBsYWJlbChsYWJlbCkKKyAgICAg
ICAgLCB0eXBlKHR5cGUpCisgICAgICAgICwgeU9mZnNldCgwKQorICAgIHsKKyAgICB9CisgICAg
U3RyaW5nIGxhYmVsOworICAgIFR5cGUgdHlwZTsKKyAgICBpbnQgeU9mZnNldDsgLy8geSBvZmZz
ZXQgb2YgdGhpcyBpdGVtLCByZWxhdGl2ZSB0byB0aGUgdG9wIG9mIHRoZSBwb3B1cC4KKyAgICBU
ZXh0RGlyZWN0aW9uIHRleHREaXJlY3Rpb247CisgICAgYm9vbCBoYXNUZXh0RGlyZWN0aW9uT3Zl
cnJpZGU7CisgICAgYm9vbCBlbmFibGVkOworfTsKKworLy8gRklYTUU6IE91ciBGcmFtZWxlc3NT
Y3JvbGxWaWV3IGNsYXNzZXMgc2hvdWxkIHByb2JhYmx5IGltcGxlbWVudCBIb3N0V2luZG93IQor
CisvLyBUaGUgUG9wdXBDb250YWluZXIgY2xhc3MgaG9sZHMgYSBQb3B1cExpc3RCb3ggKHNlZSBj
cHAgZmlsZSkuICBJdHMgc29sZSBwdXJwb3NlIGlzIHRvIGJlCisvLyBhYmxlIHRvIGRyYXcgYSBi
b3JkZXIgYXJvdW5kIGl0cyBjaGlsZC4gIEFsbCBpdHMgcGFpbnQvZXZlbnQgaGFuZGxpbmcgaXMK
Ky8vIGp1c3QgZm9yd2FyZGVkIHRvIHRoZSBjaGlsZCBsaXN0Qm94ICh3aXRoIHRoZSBhcHByb3By
aWF0ZSB0cmFuc2Zvcm1zKS4KKy8vIE5PVEU6IHRoaXMgY2xhc3MgaXMgZXhwb3NlZCBzbyBpdCBj
YW4gYmUgaW5zdGFudGlhdGVkIGRpcmVjbHkgZm9yIHRoZQorLy8gYXV0b2ZpbGwgcG9wdXAuICBX
ZSBjYW5ub3QgdXNlIHRoZSBQb3B1cCBjbGFzcyBkaXJlY3RseSBpbiB0aGF0IGNhc2UgYXMgdGhl
CisvLyBhdXRvZmlsbCBwb3B1cCBzaG91bGQgbm90IGJlIGZvY3VzZWQgd2hlbiBzaG93biBhbmQg
d2Ugd2FudCB0byBmb3J3YXJkIHRoZQorLy8ga2V5IGV2ZW50cyB0byBpdCAodGhyb3VnaCBoYW5k
bGVLZXlFdmVudCkuCisKK3N0cnVjdCBQb3B1cENvbnRhaW5lclNldHRpbmdzIHsKKyAgICAvLyBX
aGV0aGVyIHRoZSBQb3B1cE1lbnVDbGllbnQgc2hvdWxkIGJlIHRvbGQgdG8gY2hhbmdlIGl0cyB0
ZXh0IHdoZW4gYQorICAgIC8vIG5ldyBpdGVtIGlzIHNlbGVjdGVkIGJ5IHVzaW5nIHRoZSBhcnJv
dyBrZXlzLgorICAgIGJvb2wgc2V0VGV4dE9uSW5kZXhDaGFuZ2U7CisKKyAgICAvLyBXaGV0aGVy
IHRoZSBzZWxlY3Rpb24gc2hvdWxkIGJlIGFjY2VwdGVkIHdoZW4gdGhlIHBvcHVwIG1lbnUgaXMK
KyAgICAvLyBjbG9zZWQgKHRocm91Z2ggRVNDIGJlaW5nIHByZXNzZWQgb3IgdGhlIGZvY3VzIGdv
aW5nIGF3YXkpLgorICAgIC8vIE5vdGUgdGhhdCB3aGVuIFRBQiBpcyBwcmVzc2VkLCB0aGUgc2Vs
ZWN0aW9uIGlzIGFsd2F5cyBhY2NlcHRlZAorICAgIC8vIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0
aW5nLgorICAgIGJvb2wgYWNjZXB0T25BYmFuZG9uOworCisgICAgLy8gV2hldGhlciB3ZSBzaG91
bGQgbW92ZSB0aGUgc2VsZWN0aW9uIHRvIHRoZSBmaXJzdC9sYXN0IGl0ZW0gd2hlbgorICAgIC8v
IHRoZSB1c2VyIHByZXNzZXMgZG93bi91cCBhcnJvdyBrZXlzIGFuZCB0aGUgbGFzdC9maXJzdCBp
dGVtIGlzCisgICAgLy8gc2VsZWN0ZWQuCisgICAgYm9vbCBsb29wU2VsZWN0aW9uTmF2aWdhdGlv
bjsKKworICAgIC8vIFdoZXRoZXIgd2Ugc2hvdWxkIHJlc3RyaWN0IHRoZSB3aWR0aCBvZiB0aGUg
UG9wdXBMaXN0Qm94IG9yIG5vdC4KKyAgICAvLyBBdXRvY29tcGxldGUgcG9wdXBzIGFyZSByZXN0
cmljdGVkLCBjb21iby1ib3hlcyAoc2VsZWN0IHRhZ3MpIGFyZW4ndC4KKyAgICBib29sIHJlc3Ry
aWN0V2lkdGhPZkxpc3RCb3g7Cit9OworCitjbGFzcyBQb3B1cENvbnRhaW5lciA6IHB1YmxpYyBG
cmFtZWxlc3NTY3JvbGxWaWV3IHsKK3B1YmxpYzoKKyAgICBlbnVtIFBvcHVwVHlwZSB7CisgICAg
ICAgIFNlbGVjdCwgLy8gSFRNTCBzZWxlY3QgcG9wdXAuCisgICAgICAgIFN1Z2dlc3Rpb24sIC8v
IEF1dG9jb21wbGV0ZS9hdXRvZmlsbCBwb3B1cC4KKyAgICB9OworCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UG9wdXBDb250YWluZXI+IGNyZWF0ZShQb3B1cE1lbnVDbGllbnQqLCBQb3B1cFR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb3B1
cENvbnRhaW5lclNldHRpbmdzJik7CisKKyAgICAvLyBXaGV0aGVyIGEga2V5IGV2ZW50IHNob3Vs
ZCBiZSBzZW50IHRvIHRoaXMgcG9wdXAuCisgICAgdmlydHVhbCBib29sIGlzSW50ZXJlc3RlZElu
RXZlbnRGb3JLZXkoaW50IGtleUNvZGUpOworCisgICAgLy8gRnJhbWVsZXNzU2Nyb2xsVmlldwor
ICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIGhpZGUoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlTW91c2VE
b3duRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CisgICAgdmlydHVhbCBib29sIGhh
bmRsZU1vdXNlTW92ZUV2ZW50KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpOworICAgIHZpcnR1
YWwgYm9vbCBoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmKTsKKyAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50Jik7CisjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKKyAgICB2aXJ0dWFsIGJv
b2wgaGFuZGxlVG91Y2hFdmVudChjb25zdCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsKKyNlbmRpZgor
I2lmIEVOQUJMRShHRVNUVVJFX1JFQ09HTklaRVIpCisgICAgdmlydHVhbCBib29sIGhhbmRsZUdl
c3R1cmVFdmVudChjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYpOworI2VuZGlmCisKKyAgICAv
LyBQb3B1cENvbnRhaW5lciBtZXRob2RzCisKKyAgICAvLyBTaG93IHRoZSBwb3B1cAorICAgIHZv
aWQgc2hvd1BvcHVwKEZyYW1lVmlldyopOworCisgICAgLy8gU2hvdyB0aGUgcG9wdXAgaW4gdGhl
IHNwZWNpZmllZCByZWN0IGZvciB0aGUgc3BlY2lmaWVkIGZyYW1lLgorICAgIC8vIE5vdGU6IHRo
aXMgY29kZSB3YXMgc29tZWhvdyBhcmJpdHJhcmlseSBmYWN0b3JlZC1vdXQgb2YgdGhlIFBvcHVw
IGNsYXNzCisgICAgLy8gc28gV2ViVmlld0ltcGwgY2FuIGNyZWF0ZSBhIFBvcHVwQ29udGFpbmVy
LiBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgorICAgIC8vIGRpc3BsYXlpbmcgYXV0byBjb21wbGV0
ZSBwb3B1cCBtZW51cyBvbiBNYWMgQ2hyb21pdW0sIGFuZCBmb3IgYWxsCisgICAgLy8gcG9wdXBz
IG9uIG90aGVyIHBsYXRmb3Jtcy4KKyAgICB2b2lkIHNob3dJblJlY3QoY29uc3QgSW50UmVjdCYs
IEZyYW1lVmlldyosIGludCBpbmRleCk7CisKKyAgICAvLyBIaWRlcyB0aGUgcG9wdXAuCisgICAg
dm9pZCBoaWRlUG9wdXAoKTsKKworICAgIC8vIFRoZSBwb3B1cCB3YXMgaGlkZGVuLgorICAgIHZv
aWQgbm90aWZ5UG9wdXBIaWRkZW4oKTsKKworICAgIC8vIENvbXB1dGUgc2l6ZSBvZiB3aWRnZXQg
YW5kIGNoaWxkcmVuLiBSZXR1cm4gcmlnaHQgb2Zmc2V0IGZvciB0aGUgcG9wdXAgcmlnaHQgYWxp
Z25tZW50LgorICAgIGludCBsYXlvdXRBbmRHZXRSVExPZmZzZXQoKTsKKworICAgIFBvcHVwTGlz
dEJveCogbGlzdEJveCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdEJveC5nZXQoKTsgfQorCisgICAg
Ym9vbCBpc1JUTCgpIGNvbnN0OworCisgICAgLy8gR2V0cyB0aGUgaW5kZXggb2YgdGhlIGl0ZW0g
dGhhdCB0aGUgdXNlciBpcyBjdXJyZW50bHkgbW91c2VkLW92ZXIgb3IKKyAgICAvLyBoYXMgc2Vs
ZWN0ZWQgd2l0aCB0aGUga2V5Ym9hcmQgdXAvZG93biBhcnJvd3MuCisgICAgaW50IHNlbGVjdGVk
SW5kZXgoKSBjb25zdDsKKworICAgIC8vIFJlZnJlc2ggdGhlIHBvcHVwIHZhbHVlcyBmcm9tIHRo
ZSBQb3B1cE1lbnVDbGllbnQuCisgICAgdm9pZCByZWZyZXNoKGNvbnN0IEludFJlY3QmIHRhcmdl
dENvbnRyb2xSZWN0KTsKKworICAgIC8vIFRoZSBtZW51IHBlci1pdGVtIGRhdGEuCisgICAgY29u
c3QgV1RGOjpWZWN0b3I8UG9wdXBJdGVtKj4mIHBvcHVwRGF0YSgpIGNvbnN0OworCisgICAgLy8g
VGhlIGhlaWdodCBvZiBhIHJvdyBpbiB0aGUgbWVudS4KKyAgICBpbnQgbWVudUl0ZW1IZWlnaHQo
KSBjb25zdDsKKworICAgIC8vIFRoZSBzaXplIG9mIHRoZSBmb250IGJlaW5nIHVzZWQuCisgICAg
aW50IG1lbnVJdGVtRm9udFNpemUoKSBjb25zdDsKKworICAgIC8vIFRoZSBzdHlsZSBvZiB0aGUg
bWVudSBiZWluZyB1c2VkLgorICAgIFBvcHVwTWVudVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0Owor
CisgICAgUG9wdXBUeXBlIHBvcHVwVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXBUeXBlOyB9
CisKKyAgICAvLyBXaGlsZSBob3ZlcmluZyBwb3B1cCBtZW51IHdpbmRvdywgd2Ugd2FudCB0byBz
aG93IHRvb2wgdGlwIG1lc3NhZ2UuCisgICAgU3RyaW5nIGdldFNlbGVjdGVkSXRlbVRvb2xUaXAo
KTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgV1RGOjpSZWZDb3VudGVkPFBvcHVwQ29u
dGFpbmVyPjsKKworICAgIFBvcHVwQ29udGFpbmVyKFBvcHVwTWVudUNsaWVudCosIFBvcHVwVHlw
ZSwgY29uc3QgUG9wdXBDb250YWluZXJTZXR0aW5ncyYpOworICAgIH5Qb3B1cENvbnRhaW5lcigp
OworCisgICAgLy8gUGFpbnQgdGhlIGJvcmRlci4KKyAgICB2b2lkIHBhaW50Qm9yZGVyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKKworICAgIC8vIExheW91dCBhbmQgY2FsY3Vs
YXRlIHBvcHVwIHdpZGdldCBzaXplIGFuZCBsb2NhdGlvbiBhbmQgcmV0dXJucyBpdCBhcyBJbnRS
ZWN0LgorICAgIEludFJlY3QgbGF5b3V0QW5kQ2FsY3VsYXRlV2lkZ2V0UmVjdChpbnQgdGFyZ2V0
Q29udHJvbEhlaWdodCwgY29uc3QgSW50UG9pbnQmIHBvcHVwSW5pdGlhbENvb3JkaW5hdGUpOwor
CisgICAgLy8gUmV0dXJucyB0aGUgQ2hyb21lQ2xpZW50IG9mIHRoZSBwYWdlIHRoaXMgcG9wdXAg
aXMgYXNzb2NpYXRlZCB3aXRoLgorICAgIENocm9tZUNsaWVudENocm9taXVtKiBjaHJvbWVDbGll
bnRDaHJvbWl1bSgpOworCisgICAgUmVmUHRyPFBvcHVwTGlzdEJveD4gbV9saXN0Qm94OworICAg
IFJlZlB0cjxGcmFtZVZpZXc+IG1fZnJhbWVWaWV3OworCisgICAgUG9wdXBDb250YWluZXJTZXR0
aW5ncyBtX3NldHRpbmdzOworICAgIFBvcHVwVHlwZSBtX3BvcHVwVHlwZTsKKyAgICBJbnRSZWN0
IG1fb3JpZ2luYWxGcmFtZVJlY3Q7CisgICAgLy8gV2hldGhlciB0aGUgcG9wdXAgaXMgY3VycmVu
dGx5IG9wZW4uCisgICAgYm9vbCBtX3BvcHVwT3BlbjsKK307CisKIGNsYXNzIFBvcHVwTWVudUNo
cm9taXVtIDogcHVibGljIFBvcHVwTWVudSB7CiBwdWJsaWM6CiAgICAgUG9wdXBNZW51Q2hyb21p
dW0oUG9wdXBNZW51Q2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE3NTg3
YjVmOTFhYmI3MWQ0YWNiMWY1YTRiZGQ3ZThlODgzOGU3YmUuLmM2MzY4YzNmZWM0MjAxYWJjZGFl
YzIyZTQxNjMyYzExY2Y5OTQyYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsMTggQEAKIDIwMTEtMDgtMTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21h
aWwuY29tPgogCisgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5Mjk3Ni4KKyAgICAg
ICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvOTI5NzYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTU5CisKKyAgICAgICAgRG9lcyBu
b3QgY29tcGlsZSBvbiBjaHJvbWl1bS13aW4gKFJlcXVlc3RlZCBieSBhYmFydGh8Z2FyZGVuZXIK
KyAgICAgICAgb24gI3dlYmtpdCkuCisKKyAgICAgICAgKiBzcmMvQ2hyb21lQ2xpZW50SW1wbC5j
cHA6CisgICAgICAgICogc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwOgorICAgICAgICAqIHNyYy9X
ZWJWaWV3SW1wbC5jcHA6CisKKzIwMTEtMDgtMTIgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5Mjk3
OC4KICAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvOTI5NzgKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTU1CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCmluZGV4IDBiMjFj
OWI5ZjNkOTQ1ZWNiYjU1ZDg1MzViYTk3YWZlNGJjMzQwNmQuLjIwYmI1YTRjY2U4ZDZlMGU5NjQ0
NWY4ZWFjYjgxMjgzNjJlNzNiMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9tZUNsaWVudEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Nocm9tZUNsaWVudEltcGwuY3BwCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSAiTm90aWZp
Y2F0aW9uUHJlc2VudGVySW1wbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgotI2luY2x1ZGUgIlBvcHVwQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUG9w
dXBNZW51Q2hyb21pdW0uaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJT
Y3JpcHRDb250cm9sbGVyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQb3B1cE1lbnVJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBv
cHVwTWVudUltcGwuY3BwCmluZGV4IDRlMWIxZTY2MGYyNjdjNDkyNDA5NDIwNzUzNDY5OTVjOTQz
MzkxNzEuLmUyNjY4YjFiODRkOWY0MmFkY2FiZjMxOTA0YmM4YjY4ZDA1MDNmMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBvcHVwTWVudUltcGwuY3BwCkBAIC00MCw3
ICs0MCw2IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0j
aW5jbHVkZSAiUG9wdXBDb250YWluZXIuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKaW5kZXggYTIxZjM0ZDNjZTY2ZmFkZDI3OGQyZmEwNWNlODAwNDE3NzI4
YzkxMS4uOGY4MzgwOGM2OTFlOTZhOTJjZTM1OWYxMjc4MzUwMGVkMDI2MjBjZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtODUsNyArODUsNyBAQAog
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtVGhlbWVD
aHJvbWl1bUd0ay5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUg
IlBvcHVwQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51Q2hyb21pdW0uaCIKICNpbmNs
dWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>