<?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>52235</bug_id>
          
          <creation_ts>2011-01-11 12:16:08 -0800</creation_ts>
          <short_desc>[chromium] Move WebGraphicsContext3DDefaultImpl to Chromium repository</short_desc>
          <delta_ts>2011-01-11 14:16:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>332536</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-11 12:16:08 -0800</bug_when>
    <thetext>In http://trac.webkit.org/changeset/65093 , Chromium&apos;s in-process WebGL implementation was changed to use Chromium&apos;s GL bindings rather than the GLEW library. Unfortunately, I did not realize at the time that this introduced an undesirable circular dependency between Chromium and WebKit.

The solution is to move this class from the WebKit repository to the Chromium repository. The Chromium-side changes have been landed in http://src.chromium.org/viewvc/chrome?view=rev&amp;revision=71069 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332611</commentid>
    <comment_count>1</comment_count>
      <attachid>78590</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-11 13:43:22 -0800</bug_when>
    <thetext>Created attachment 78590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332644</commentid>
    <comment_count>2</comment_count>
      <attachid>78590</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-11 14:10:35 -0800</bug_when>
    <thetext>Comment on attachment 78590
Patch

R=me. deletion rules!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>332651</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-11 14:16:52 -0800</bug_when>
    <thetext>Committed r75553: &lt;http://trac.webkit.org/changeset/75553&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78590</attachid>
            <date>2011-01-11 13:43:22 -0800</date>
            <delta_ts>2011-01-11 14:10:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52235-20110111134321.patch</filename>
            <type>text/plain</type>
            <size>82906</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzU1NDkpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDEtMTEgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsIHRvIENocm9taXVtIHJlcG9zaXRvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMjM1CisKKyAgICAgICAgRGVsZXRlZCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLCB3aGljaCBoYXMgYmVlbiBtb3ZlZCB0bworICAg
ICAgICB0aGUgQ2hyb21pdW0gcmVwb3NpdG9yeSB1bmRlciBXZWJHcmFwaGljc0NvbnRleHQzRElu
UHJvY2Vzc0ltcGwuCisgICAgICAgIFJlbW92ZWQgV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZURlZmF1bHQoKS4gUm9sbGVkIGZvcndhcmQKKyAgICAgICAgQ2hyb21pdW0gdmVyc2lvbiB0byBw
aWNrIHVwIG5lZWRlZCBjaGFuZ2VzLgorCisgICAgICAgIFRlc3RlZCB3aXRoIGJ1aWxkLXdlYmtp
dCAtLWNocm9taXVtIC0tZGVidWcgYW5kIGEgcnVuIG9mIHRoZSBXZWJHTAorICAgICAgICBsYXlv
dXQgdGVzdHMgaW4gRFJULgorCisgICAgICAgICogREVQUzoKKyAgICAgICAgKiBXZWJLaXQuZ3lw
OgorICAgICAgICAqIHB1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHNy
Yy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcDoKKyAgICAgICAgKiBzcmMvV2ViR3JhcGhp
Y3NDb250ZXh0M0QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbC5oOiBSZW1vdmVkLgorCiAyMDExLTAxLTExICBQYXZlbCBGZWxk
bWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkg
U2VtaWtoYXRza3kuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vREVQUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vREVQUwkocmV2aXNpb24gNzU1MjcpCisrKyBXZWJLaXQvY2hyb21pdW0v
REVQUwkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogCiB2YXJzID0gewogICAnY2hy
b21pdW1fc3ZuJzogJ2h0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3N2bi90cnVuay9zcmMnLAotICAn
Y2hyb21pdW1fcmV2JzogJzcwOTUyJworICAnY2hyb21pdW1fcmV2JzogJzcxMDY5JwogfQogCiBk
ZXBzID0gewpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDc1NTI3KQorKysgV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCw5ICs0NjAsNiBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkdlb2xvY2F0aW9uUG9zaXRpb24uY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYkdseXBoQ2FjaGUuY3BwJywKLSAgICAgICAgICAgICAg
ICAnc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNELmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcCcsCi0gICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViSGlzdG9yeUl0ZW0uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhUVFBCb2R5
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQTG9hZEluZm8uY3BwJywKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlz
aW9uIDc1NTI3KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQz
RC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSwxMCArNzksNiBAQCBwdWJsaWM6CiAgICAgLy8gVGhp
cyBkZXN0cnVjdG9yIG5lZWRzIHRvIGJlIHB1YmxpYyBzbyB0aGF0IHVzaW5nIGNsYXNzZXMgY2Fu
IGRlc3Ryb3kgaW5zdGFuY2VzIGlmIGluaXRpYWxpemF0aW9uIGZhaWxzLgogICAgIHZpcnR1YWwg
fldlYkdyYXBoaWNzQ29udGV4dDNEKCkge30KIAotICAgIC8vIENyZWF0ZXMgYSAiZGVmYXVsdCIg
aW1wbGVtZW50YXRpb24gb2YgV2ViR3JhcGhpY3NDb250ZXh0M0Qgd2hpY2ggY2FsbHMKLSAgICAv
LyBPcGVuR0wgZGlyZWN0bHkuCi0gICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViR3JhcGhpY3NDb250
ZXh0M0QqIGNyZWF0ZURlZmF1bHQoKTsKLQogICAgIC8vIEluaXRpYWxpemVzIHRoZSBncmFwaGlj
cyBjb250ZXh0OyBzaG91bGQgYmUgdGhlIGZpcnN0IG9wZXJhdGlvbiBwZXJmb3JtZWQKICAgICAv
LyBvbiBuZXdseS1jb25zdHJ1Y3RlZCBpbnN0YW5jZXMuIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNz
LgogICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplKEF0dHJpYnV0ZXMsIFdlYlZpZXcqLCBib29s
IHJlbmRlckRpcmVjdGx5VG9XZWJWaWV3KSA9IDA7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3Jj
L0dyYXBoaWNzQ29udGV4dDNEQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc1NTI3KQor
KysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiV2ViR3JhcGhpY3NDb250ZXh0M0QuaCIK
LSNpbmNsdWRlICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCiAjaW5jbHVkZSAi
V2ViS2l0LmgiCiAjaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViVmlld0lt
cGwuaCIKQEAgLTc0LDggKzczLDYgQEAKIC8vICAgMi4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bCBkZWxlZ2F0ZXMgdG8gYW4gaW1wbGVtZW50YXRpb24gb2YKIC8vICAgICAgV2ViR3JhcGhpY3ND
b250ZXh0M0QuIFRoaXMgaXMgZG9uZSBzbyB3ZSBoYXZlIGEgcGxhY2UgdG8gaW5qZWN0IGFuCiAv
LyAgICAgIGltcGxlbWVudGF0aW9uIHdoaWNoIHJlbW90ZXMgdGhlIE9wZW5HTCBjYWxscyBhY3Jv
c3MgcHJvY2Vzc2VzLgotLy8KLS8vIFRoZSBsZWdhY3ksIGluLXByb2Nlc3MsIGltcGxlbWVudGF0
aW9uIHVzZXMgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4
dDNELmNwcAkocmV2aXNpb24gNzU1MjcpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBo
aWNzQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNsdWRl
ICJXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmgiCi0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1XZWJHcmFwaGljc0NvbnRleHQzRCogV2ViR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZURl
ZmF1bHQoKQotewotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgcmV0dXJuIG5ldyBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsKCk7Ci0jZWxzZQotICAgIHJldHVybiAwOwotI2VuZGlm
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCShyZXZpc2lv
biA3NTUyNykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU4OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1ZGUgIldlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuaCIKLQotI2luY2x1ZGUgImFwcC9nZngvZ2wvZ2xfYmluZGlu
Z3MuaCIKLSNpbmNsdWRlICJhcHAvZ2Z4L2dsL2dsX2NvbnRleHQuaCIKLSNpbmNsdWRlICJhcHAv
Z2Z4L2dsL2dsX2ltcGxlbWVudGF0aW9uLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotZW51bSB7Ci0g
ICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgPSAweDhERkIsCi0gICAgTUFYX1ZBUllJTkdf
VkVDVE9SUyA9IDB4OERGQywKLSAgICBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTID0gMHg4
REZECi19OwotCi1XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpWZXJ0ZXhBdHRyaWJQ
b2ludGVyU3RhdGU6OlZlcnRleEF0dHJpYlBvaW50ZXJTdGF0ZSgpCi0gICAgOiBlbmFibGVkKGZh
bHNlKQotICAgICwgYnVmZmVyKDApCi0gICAgLCBpbmR4KDApCi0gICAgLCBzaXplKDApCi0gICAg
LCB0eXBlKDApCi0gICAgLCBub3JtYWxpemVkKGZhbHNlKQotICAgICwgc3RyaWRlKDApCi0gICAg
LCBvZmZzZXQoMCkKLXsKLX0KLQotV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCgpCi0gICAgOiBtX2luaXRpYWxpemVkKGZhbHNl
KQotICAgICwgbV9yZW5kZXJEaXJlY3RseVRvV2ViVmlldyhmYWxzZSkKLSAgICAsIG1faXNHTEVT
MihmYWxzZSkKLSAgICAsIG1faGF2ZUVYVEZyYW1lYnVmZmVyT2JqZWN0KGZhbHNlKQotICAgICwg
bV9oYXZlRVhURnJhbWVidWZmZXJNdWx0aXNhbXBsZShmYWxzZSkKLSAgICAsIG1faGF2ZUFOR0xF
RnJhbWVidWZmZXJNdWx0aXNhbXBsZShmYWxzZSkKLSAgICAsIG1fdGV4dHVyZSgwKQotICAgICwg
bV9mYm8oMCkKLSAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCi0gICAgLCBtX2NhY2hlZFdp
ZHRoKDApCi0gICAgLCBtX2NhY2hlZEhlaWdodCgwKQotICAgICwgbV9tdWx0aXNhbXBsZUZCTygw
KQotICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQotICAgICwgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX2JvdW5kRkJPKDApCi0gICAgLCBtX2JvdW5k
VGV4dHVyZSgwKQotICAgICwgbV9jb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUZCTygwKQotI2lm
ZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQotICAgICwgbV9zY2FubGluZSgwKQotI2Vu
ZGlmCi0gICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkKLSAgICAsIG1fZnJhZ21lbnRDb21waWxl
cigwKQotICAgICwgbV92ZXJ0ZXhDb21waWxlcigwKQotewotfQotCi1XZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsOjp+V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCgpCi17Ci0g
ICAgaWYgKG1faW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgICAgIGdsRGVs
ZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKLSAgICAg
ICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVwdGggfHwgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCi0g
ICAgICAgICAgICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzRVhU
KDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChtX2F0dHJpYnV0ZXMuZGVwdGggfHwgbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAg
ICAgICAgZ2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0gICAgICAgIH0KLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAg
ICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fY29weVRleHR1cmVUb1BhcmVudFRl
eHR1cmVGQk8pOwotI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQotICAgICAgICBp
ZiAobV9zY2FubGluZSkKLSAgICAgICAgICAgIGRlbGV0ZVtdIG1fc2NhbmxpbmU7Ci0jZW5kaWYK
LSAgICAgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJvKTsKLQotICAgICAgICBt
X2dsQ29udGV4dC0+RGVzdHJveSgpOwotCi0gICAgICAgIGZvciAoU2hhZGVyU291cmNlTWFwOjpp
dGVyYXRvciBpaSA9IG1fc2hhZGVyU291cmNlTWFwLmJlZ2luKCk7IGlpICE9IG1fc2hhZGVyU291
cmNlTWFwLmVuZCgpOyArK2lpKSB7Ci0gICAgICAgICAgICBpZiAoaWktPnNlY29uZCkKLSAgICAg
ICAgICAgICAgICBkZWxldGUgaWktPnNlY29uZDsKLSAgICAgICAgfQotICAgICAgICBhbmdsZURl
c3Ryb3lDb21waWxlcnMoKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6aW5pdGlhbGl6ZShXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyaWJ1dGVzLCBXZWJWaWV3KiB3ZWJWaWV3LCBib29sIHJlbmRlckRpcmVjdGx5VG9XZWJWaWV3
KQotewotICAgIGlmICghZ2Z4OjpHTENvbnRleHQ6OkluaXRpYWxpemVPbmVPZmYoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgbV9yZW5kZXJEaXJlY3RseVRvV2ViVmlldyA9IHJlbmRl
ckRpcmVjdGx5VG9XZWJWaWV3OwotICAgIGdmeDo6R0xDb250ZXh0KiBzaGFyZUNvbnRleHQgPSAw
OwotCi0gICAgaWYgKCFyZW5kZXJEaXJlY3RseVRvV2ViVmlldykgewotICAgICAgICAvLyBQaWNr
IHVwIHRoZSBjb21wb3NpdG9yJ3MgY29udGV4dCB0byBzaGFyZSByZXNvdXJjZXMgd2l0aC4KLSAg
ICAgICAgV2ViR3JhcGhpY3NDb250ZXh0M0QqIHZpZXdDb250ZXh0ID0gd2ViVmlldy0+Z3JhcGhp
Y3NDb250ZXh0M0QoKTsKLSAgICAgICAgaWYgKHZpZXdDb250ZXh0KSB7Ci0gICAgICAgICAgICBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsKiBjb250ZXh0SW1wbCA9IHN0YXRpY19jYXN0
PFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwqPih2aWV3Q29udGV4dCk7Ci0gICAgICAg
ICAgICBzaGFyZUNvbnRleHQgPSBjb250ZXh0SW1wbC0+bV9nbENvbnRleHQuZ2V0KCk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBUaGUgY29tcG9zaXRvcidzIGNvbnRleHQgZGlk
bid0IGdldCBjcmVhdGVkCi0gICAgICAgICAgICAvLyBzdWNjZXNzZnVsbHksIHNvIGNvbmNlcHR1
YWxseSB0aGVyZSBpcyBubyB3YXkgd2UgY2FuCi0gICAgICAgICAgICAvLyByZW5kZXIgc3VjY2Vz
c2Z1bGx5IHRvIHRoZSBXZWJWaWV3LgotICAgICAgICAgICAgbV9yZW5kZXJEaXJlY3RseVRvV2Vi
VmlldyA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhpcyBpbXBsZW1lbnRh
dGlvbiBhbHdheXMgcmVuZGVycyBvZmZzY3JlZW4gcmVnYXJkbGVzcyBvZgotICAgIC8vIHdoZXRo
ZXIgcmVuZGVyRGlyZWN0bHlUb1dlYlZpZXcgaXMgdHJ1ZS4gQm90aCBEdW1wUmVuZGVyVHJlZQot
ICAgIC8vIGFuZCB0ZXN0X3NoZWxsIHBhaW50IGZpcnN0IHRvIGFuIGludGVybWVkaWF0ZSBvZmZz
Y3JlZW4gYnVmZmVyCi0gICAgLy8gYW5kIGZyb20gdGhlcmUgdG8gdGhlIHdpbmRvdywgYW5kIFdl
YlZpZXdJbXBsOjpwYWludCBhbHJlYWR5Ci0gICAgLy8gY29ycmVjdGx5IGhhbmRsZXMgdGhlIGNh
c2Ugd2hlcmUgdGhlIGNvbXBvc2l0b3IgaXMgYWN0aXZlIGJ1dAotICAgIC8vIHRoZSBvdXRwdXQg
bmVlZHMgdG8gZ28gdG8gYSBXZWJDYW52YXMuCi0gICAgbV9nbENvbnRleHQgPSBXVEY6OmFkb3B0
UHRyKGdmeDo6R0xDb250ZXh0OjpDcmVhdGVPZmZzY3JlZW5HTENvbnRleHQoc2hhcmVDb250ZXh0
KSk7Ci0gICAgaWYgKCFtX2dsQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
bV9hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKLQotICAgIC8vIEZJWE1FOiBmb3IgdGhlIG1vbWVu
dCB3ZSBkaXNhYmxlIG11bHRpc2FtcGxpbmcgZm9yIHRoZSBjb21wb3NpdG9yLgotICAgIC8vIEl0
IGFjdHVhbGx5IHdvcmtzIGluIHRoaXMgaW1wbGVtZW50YXRpb24sIGJ1dCB0aGVyZSBhcmUgYSBm
ZXcKLSAgICAvLyBjb25zaWRlcmF0aW9ucy4gRmlyc3QsIHdlIGxpa2VseSB3YW50IHRvIHJlZHVj
ZSB0aGUgZnV6emluZXNzIGluCi0gICAgLy8gdGhlc2UgdGVzdHMgYXMgbXVjaCBhcyBwb3NzaWJs
ZSBiZWNhdXNlIHdlIHdhbnQgdG8gcnVuIHBpeGVsIHRlc3RzLgotICAgIC8vIFNlY29uZCwgTWVz
YSdzIG11bHRpc2FtcGxpbmcgZG9lc24ndCBzZWVtIHRvIGFudGlhbGlhcyBzdHJhaWdodAotICAg
IC8vIGVkZ2VzIGluIHNvbWUgQ1NTIDNEIHNhbXBsZXMuIFRoaXJkLCB3ZSBkb24ndCBoYXZlIG11
bHRpc2FtcGxpbmcKLSAgICAvLyBzdXBwb3J0IGZvciB0aGUgY29tcG9zaXRvciBpbiB0aGUgbm9y
bWFsIGNhc2UgYXQgdGhlIHRpbWUgb2YgdGhpcwotICAgIC8vIHdyaXRpbmcuCi0gICAgaWYgKHJl
bmRlckRpcmVjdGx5VG9XZWJWaWV3KQotICAgICAgICBtX2F0dHJpYnV0ZXMuYW50aWFsaWFzID0g
ZmFsc2U7Ci0KLSAgICBtX2lzR0xFUzIgPSBnZng6OkdldEdMSW1wbGVtZW50YXRpb24oKSA9PSBn
Zng6OmtHTEltcGxlbWVudGF0aW9uRUdMR0xFUzI7Ci0gICAgY29uc3QgY2hhciogZXh0ZW5zaW9u
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGdsR2V0U3RyaW5nKEdMX0VYVEVOU0lP
TlMpKTsKLSAgICBtX2hhdmVFWFRGcmFtZWJ1ZmZlck9iamVjdCA9IHN0cnN0cihleHRlbnNpb25z
LCAiR0xfRVhUX2ZyYW1lYnVmZmVyX29iamVjdCIpOwotICAgIG1faGF2ZUVYVEZyYW1lYnVmZmVy
TXVsdGlzYW1wbGUgPSBzdHJzdHIoZXh0ZW5zaW9ucywgIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0
aXNhbXBsZSIpOwotICAgIG1faGF2ZUFOR0xFRnJhbWVidWZmZXJNdWx0aXNhbXBsZSA9IHN0cnN0
cihleHRlbnNpb25zLCAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsKLQotICAg
IHZhbGlkYXRlQXR0cmlidXRlcygpOwotCi0gICAgaWYgKCFtX2lzR0xFUzIpIHsKLSAgICAgICAg
Z2xFbmFibGUoR0xfVkVSVEVYX1BST0dSQU1fUE9JTlRfU0laRSk7Ci0gICAgICAgIGdsRW5hYmxl
KEdMX1BPSU5UX1NQUklURSk7Ci0gICAgfQotCi0gICAgaWYgKCFhbmdsZUNyZWF0ZUNvbXBpbGVy
cygpKSB7Ci0gICAgICAgIGFuZ2xlRGVzdHJveUNvbXBpbGVycygpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fY29weVRleHR1
cmVUb1BhcmVudFRleHR1cmVGQk8pOwotCi0gICAgbV9pbml0aWFsaXplZCA9IHRydWU7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6
dmFsaWRhdGVBdHRyaWJ1dGVzKCkKLXsKLSAgICBjb25zdCBjaGFyKiBleHRlbnNpb25zID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZ2xHZXRTdHJpbmcoR0xfRVhURU5TSU9OUykpOwot
Ci0gICAgaWYgKG1fYXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChzdHJzdHIoZXh0
ZW5zaW9ucywgIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpCi0gICAgICAgICAgICB8fCBz
dHJzdHIoZXh0ZW5zaW9ucywgIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1fYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICBtX2F0dHJp
YnV0ZXMuZGVwdGggPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fYXR0cmli
dXRlcy5zdGVuY2lsID0gZmFsc2U7Ci0gICAgfQotICAgIGlmIChtX2F0dHJpYnV0ZXMuYW50aWFs
aWFzKSB7Ci0gICAgICAgIGJvb2wgaXNWYWxpZFZlbmRvciA9IHRydWU7Ci0jaWYgUExBVEZPUk0o
Q0cpCi0gICAgICAgIC8vIEN1cnJlbnRseSBpbiBNYWMgd2Ugb25seSB0dXJuIG9uIGFudGlhbGlh
cyBpZiB2ZW5kb3IgaXMgTlZJRElBLgotICAgICAgICBjb25zdCBjaGFyKiB2ZW5kb3IgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKLSAgICAg
ICAgaWYgKCFzdHJzdHIodmVuZG9yLCAiTlZJRElBIikpCi0gICAgICAgICAgICBpc1ZhbGlkVmVu
ZG9yID0gZmFsc2U7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCEoaXNWYWxpZFZlbmRvcgotICAgICAg
ICAgICAgICAmJiAobV9oYXZlRVhURnJhbWVidWZmZXJNdWx0aXNhbXBsZQotICAgICAgICAgICAg
ICAgICAgfHwgKG1faGF2ZUFOR0xFRnJhbWVidWZmZXJNdWx0aXNhbXBsZSAmJiBzdHJzdHIoZXh0
ZW5zaW9ucywgIkdMX09FU19yZ2I4X3JnYmE4IikpKSkpCi0gICAgICAgICAgICBtX2F0dHJpYnV0
ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gRG9uJ3QgYW50aWFsaWFzIHdoZW4g
dXNpbmcgTWVzYSB0byBlbnN1cmUgbW9yZSByZWxpYWJsZSB0ZXN0aW5nIGFuZAotICAgICAgICAv
LyBiZWNhdXNlIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIG11bHRpc2FtcGxlIHN0cmFpZ2h0IGxpbmVz
IGNvcnJlY3RseS4KLSAgICAgICAgY29uc3QgY2hhciogcmVuZGVyZXIgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhHTF9SRU5ERVJFUikpOwotICAgICAgICBpZiAo
IXN0cm5jbXAocmVuZGVyZXIsICJNZXNhIiwgNCkpCi0gICAgICAgICAgICBtX2F0dHJpYnV0ZXMu
YW50aWFsaWFzID0gZmFsc2U7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBpbnN0ZWFkIG9mIGVuZm9y
Y2luZyBwcmVtdWx0aXBsaWVkQWxwaGEgPSB0cnVlLCBpbXBsZW1lbnQgdGhlCi0gICAgLy8gY29y
cmVjdCBiZWhhdmlvciB3aGVuIHByZW11bHRpcGxpZWRBbHBoYSA9IGZhbHNlIGlzIHJlcXVlc3Rl
ZC4KLSAgICBtX2F0dHJpYnV0ZXMucHJlbXVsdGlwbGllZEFscGhhID0gdHJ1ZTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZXNvbHZlTXVsdGlzYW1wbGVkRnJh
bWVidWZmZXIodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCkKLXsKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcykgewotICAgICAgICBn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7Ci0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7Ci0gICAgICAgIGlmIChtX2hhdmVFWFRGcmFtZWJ1ZmZlck11bHRpc2FtcGxl
KQotICAgICAgICAgICAgZ2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsg
aGVpZ2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQs
IEdMX05FQVJFU1QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2hhdmVB
TkdMRUZyYW1lYnVmZmVyTXVsdGlzYW1wbGUpOwotICAgICAgICAgICAgZ2xCbGl0RnJhbWVidWZm
ZXJBTkdMRSh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSAr
IGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTkVBUkVTVCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJP
KTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bWFr
ZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICByZXR1cm4gbV9nbENvbnRleHQtPk1ha2VDdXJyZW50
KCk7Ci19Ci0KLWludCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp3aWR0aCgpCi17
Ci0gICAgcmV0dXJuIG1fY2FjaGVkV2lkdGg7Ci19Ci0KLWludCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpoZWlnaHQoKQotewotICAgIHJldHVybiBtX2NhY2hlZEhlaWdodDsKLX0K
LQotaW50IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnNpemVJbkJ5dGVzKGludCB0
eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR0xfQllURToKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHTGJ5dGUpOwotICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAg
ICAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKLSAgICBjYXNlIEdMX1NIT1JUOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdMc2hvcnQpOwotICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6Ci0gICAg
ICAgIHJldHVybiBzaXplb2YoR0x1c2hvcnQpOwotICAgIGNhc2UgR0xfSU5UOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdMaW50KTsKLSAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHTHVpbnQpOwotICAgIGNhc2UgR0xfRkxPQVQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoR0xmbG9hdCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1ib29sIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmlzR0xFUzJDb21wbGlhbnQoKQotewotICAgIHJl
dHVybiBtX2lzR0xFUzI7Ci19Ci0KLXVuc2lnbmVkIGludCBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsOjpnZXRQbGF0Zm9ybVRleHR1cmVJZCgpCi17Ci0gICAgcmV0dXJuIG1fdGV4dHVy
ZTsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpwcmVwYXJlVGV4
dHVyZSgpCi17Ci0gICAgaWYgKCFtX3JlbmRlckRpcmVjdGx5VG9XZWJWaWV3KSB7Ci0gICAgICAg
IC8vIFdlIG5lZWQgdG8gcHJlcGFyZSBvdXIgcmVuZGVyaW5nIHJlc3VsdHMgZm9yIHRoZSBjb21w
b3NpdG9yLgotICAgICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxlZEZyYW1lYnVmZmVyKDAsIDAsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0
KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgY3JlYXRlVGV4dHVyZU9iamVjdChHTGVudW0gdGFy
Z2V0KQotewotICAgIEdMdWludCB0ZXh0dXJlID0gMDsKLSAgICBnbEdlblRleHR1cmVzKDEsICZ0
ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci0gICAgZ2xUZXhQ
YXJhbWV0ZXJmKHRhcmdldCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9ORUFSRVNUKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX05FQVJF
U1QpOwotICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIG1fY2Fj
aGVkV2lkdGggPSB3aWR0aDsKLSAgICBtX2NhY2hlZEhlaWdodCA9IGhlaWdodDsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLQotICAgIEdMZW51bSB0YXJnZXQgPSBHTF9URVhUVVJFXzJEOwot
Ci0gICAgaWYgKCFtX3RleHR1cmUpIHsKLSAgICAgICAgLy8gR2VuZXJhdGUgdGhlIHRleHR1cmUg
b2JqZWN0Ci0gICAgICAgIG1fdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmVPYmplY3QodGFyZ2V0KTsK
LSAgICAgICAgLy8gR2VuZXJhdGUgdGhlIGZyYW1lYnVmZmVyIG9iamVjdAotICAgICAgICBnbEdl
bkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9IG1fZmJv
OwotICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoIHx8IG1fYXR0cmlidXRlcy5zdGVuY2ls
KQotICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7Ci0gICAgICAgIC8vIEdlbmVyYXRlIHRoZSBtdWx0aXNhbXBsZSBmcmFtZWJ1ZmZlciBv
YmplY3QKLSAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgICAg
IGdsR2VuRnJhbWVidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgICAg
IGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZC
Tyk7Ci0gICAgICAgICAgICBtX2JvdW5kRkJPID0gbV9tdWx0aXNhbXBsZUZCTzsKLSAgICAgICAg
ICAgIGdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVwdGggfHwgbV9hdHRyaWJ1dGVzLnN0ZW5j
aWwpCi0gICAgICAgICAgICAgICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIEdMaW50IGlu
dGVybmFsTXVsdGlzYW1wbGVkQ29sb3JGb3JtYXQsIGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9y
Rm9ybWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7Ci0gICAgaWYgKG1fYXR0cmli
dXRlcy5hbHBoYSkgewotICAgICAgICAvLyBHTF9SR0JBOF9PRVMgPT0gR0xfUkdCQTgKLSAgICAg
ICAgaW50ZXJuYWxNdWx0aXNhbXBsZWRDb2xvckZvcm1hdCA9IEdMX1JHQkE4OwotICAgICAgICBp
bnRlcm5hbENvbG9yRm9ybWF0ID0gbV9pc0dMRVMyID8gR0xfUkdCQSA6IEdMX1JHQkE4OwotICAg
ICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gR0xf
UkdCOF9PRVMgPT0gR0xfUkdCOAotICAgICAgICBpbnRlcm5hbE11bHRpc2FtcGxlZENvbG9yRm9y
bWF0ID0gR0xfUkdCODsKLSAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IG1faXNHTEVTMiA/
IEdMX1JHQiA6IEdMX1JHQjg7Ci0gICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOwotICAgIH0K
LSAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgbV9hdHRyaWJ1dGVzLmRlcHRoKSB7Ci0g
ICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVp
cmVkIGFuZCBkZXB0aCBpcyBub3QuCi0gICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsIGNvbnN0cnVjdG9yLgotICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwgJiYg
bV9hdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAobV9pc0dMRVMyKQotICAgICAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID0gR0xfREVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Ci0KLSAg
ICAvLyBSZXNpemUgbXVsdGlzYW1wbGluZyBGQk8KLSAgICBpZiAobV9hdHRyaWJ1dGVzLmFudGlh
bGlhcykgewotICAgICAgICBHTGludCBtYXhTYW1wbGVDb3VudDsKLSAgICAgICAgZ2xHZXRJbnRl
Z2VydihHTF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1wbGVDb3VudCk7Ci0gICAgICAgIEdMaW50
IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwgbWF4U2FtcGxlQ291bnQpOwotICAgICAgICBpZiAo
bV9ib3VuZEZCTyAhPSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgICAgICBtdXN0UmVzdG9y
ZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICB9Ci0gICAgICAgIGdsQmluZFJl
bmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIpOwotICAgICAgICBpZiAobV9oYXZlRVhURnJhbWVidWZmZXJNdWx0aXNhbXBsZSkKLSAgICAg
ICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbE11bHRpc2FtcGxlZENvbG9yRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9oYXZlQU5H
TEVGcmFtZWJ1ZmZlck11bHRpc2FtcGxlKTsKLSAgICAgICAgICAgIGdsUmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlQU5HTEUoR0xfUkVOREVSQlVGRkVSX0VYVCwgc2FtcGxlQ291bnQsIGlu
dGVybmFsTXVsdGlzYW1wbGVkQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9
Ci0gICAgICAgIGdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCB8fCBt
X2F0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChH
TF9SRU5ERVJCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAg
ICAgICAgICAgIGlmIChtX2hhdmVFWFRGcmFtZWJ1ZmZlck11bHRpc2FtcGxlKQotICAgICAgICAg
ICAgICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlRVhUKEdMX1JFTkRFUkJVRkZF
Ul9FWFQsIHNhbXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9oYXZl
QU5HTEVGcmFtZWJ1ZmZlck11bHRpc2FtcGxlKTsKLSAgICAgICAgICAgICAgICBnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFKEdMX1JFTkRFUkJVRkZFUl9FWFQsIHNhbXBsZUNv
dW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAg
ICAgICAgZ2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5kZXB0
aCkKLSAgICAgICAgICAgICAgICBnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQs
IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9Ci0gICAgICAgIGds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICAgICAgR0xl
bnVtIHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9F
WFQpOwotICAgICAgICBpZiAoc3RhdHVzICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCkg
ewotICAgICAgICAgICAgcHJpbnRmKCJHcmFwaGljc0NvbnRleHQzRDogbXVsdGlzYW1wbGluZyBm
cmFtZWJ1ZmZlciB3YXMgaW5jb21wbGV0ZVxuIik7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBj
bGVhbnVwLgotICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIFJlc2l6ZSByZWd1bGFyIEZCTwotICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJv
KSB7Ci0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOwotICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfQotICAgIGdsQmluZFRl
eHR1cmUodGFyZ2V0LCBtX3RleHR1cmUpOwotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGlu
dGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJ
R05FRF9CWVRFLCAwKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCB0YXJnZXQsIG1fdGV4dHVyZSwgMCk7
Ci0gICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIDApOwotICAgIGlmICghbV9hdHRyaWJ1dGVzLmFu
dGlhbGlhcyAmJiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgbV9hdHRyaWJ1dGVzLmRlcHRoKSkg
ewotICAgICAgICBnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xf
UkVOREVSQlVGRkVSX0VYVCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQpOwotICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICBnbEZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9B
VFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIp
OwotICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgZ2xGcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1F
TlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAg
ICAgIGdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKLSAgICB9
Ci0gICAgR0xlbnVtIHN0YXR1cyA9IGdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1c0VYVChHTF9GUkFN
RUJVRkZFUl9FWFQpOwotICAgIGlmIChzdGF0dXMgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVf
RVhUKSB7Ci0gICAgICAgIHByaW50ZigiV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDog
ZnJhbWVidWZmZXIgd2FzIGluY29tcGxldGVcbiIpOwotCi0gICAgICAgIC8vIEZJWE1FOiBjbGVh
bnVwLgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIGlmIChtX2F0dHJp
YnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIGlmIChtX2JvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxv
YXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGlu
dCBjbGVhclN0ZW5jaWwgPSAwOwotICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBH
THVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOwotICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JF
bmFibGVkID0gR0xfRkFMU0U7Ci0gICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZB
TFNFOwotICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAg
ICBnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxVRSwgY2xlYXJDb2xvcik7Ci0gICAgZ2xD
bGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIGdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVN
QVNLLCBjb2xvck1hc2spOwotICAgIGdsQ29sb3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RS
VUUsIEdMX1RSVUUpOwotICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgZ2xH
ZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUsICZjbGVhckRlcHRoKTsKLSAgICAgICAgZ2xD
bGVhckRlcHRoKDEpOwotICAgICAgICBnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywg
JmRlcHRoTWFzayk7Ci0gICAgICAgIGdsRGVwdGhNYXNrKEdMX1RSVUUpOwotICAgICAgICBjbGVh
ck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cmlidXRl
cy5zdGVuY2lsKSB7Ci0gICAgICAgIGdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxV
RSwgJmNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIGdsQ2xlYXJTdGVuY2lsKDApOwotICAgICAgICBn
bEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50
Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9O
VCwgMHhmZmZmZmZmZik7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9C
SVQ7Ci0gICAgfQotICAgIGlzU2Npc3NvckVuYWJsZWQgPSBnbElzRW5hYmxlZChHTF9TQ0lTU09S
X1RFU1QpOwotICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGlzRGl0aGVyRW5h
YmxlZCA9IGdsSXNFbmFibGVkKEdMX0RJVEhFUik7Ci0gICAgZ2xEaXNhYmxlKEdMX0RJVEhFUik7
Ci0KLSAgICBnbENsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICBnbENsZWFyQ29sb3IoY2xlYXJDb2xv
clswXSwgY2xlYXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7Ci0gICAg
Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29s
b3JNYXNrWzNdKTsKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgIGdsQ2xl
YXJEZXB0aChjbGVhckRlcHRoKTsKLSAgICAgICAgZ2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKLSAg
ICB9Ci0gICAgaWYgKG1fYXR0cmlidXRlcy5zdGVuY2lsKSB7Ci0gICAgICAgIGdsQ2xlYXJTdGVu
Y2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIGdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9O
VCwgc3RlbmNpbE1hc2spOwotICAgIH0KLSAgICBpZiAoaXNTY2lzc29yRW5hYmxlZCkKLSAgICAg
ICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKLSAgICBlbHNlCi0gICAgICAgIGdsRGlzYWJs
ZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCi0gICAgICAgIGds
RW5hYmxlKEdMX0RJVEhFUik7Ci0gICAgZWxzZQotICAgICAgICBnbERpc2FibGUoR0xfRElUSEVS
KTsKLQotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJF
WFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKLQotI2lmZGVmIEZMSVBfRlJBTUVC
VUZGRVJfVkVSVElDQUxMWQotICAgIGlmIChtX3NjYW5saW5lKSB7Ci0gICAgICAgIGRlbGV0ZVtd
IG1fc2NhbmxpbmU7Ci0gICAgICAgIG1fc2NhbmxpbmUgPSAwOwotICAgIH0KLSAgICBtX3NjYW5s
aW5lID0gbmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKLSNlbmRpZiAvLyBGTElQX0ZSQU1F
QlVGRkVSX1ZFUlRJQ0FMTFkKLX0KLQotI2lmZGVmIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxM
WQotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpmbGlwVmVydGljYWxseSh1
bnNpZ25lZCBjaGFyKiBmcmFtZWJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHdpZHRoLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaGVp
Z2h0KQotewotICAgIHVuc2lnbmVkIGNoYXIqIHNjYW5saW5lID0gbV9zY2FubGluZTsKLSAgICBp
ZiAoIXNjYW5saW5lKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgaW50IHJvd0J5dGVz
ID0gd2lkdGggKiA0OwotICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGhlaWdodCAvIDI7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGNoYXIqIHJvd0EgPSBmcmFtZWJ1ZmZlciArIGkgKiByb3dCeXRlczsKLSAgICAgICAgdW5z
aWduZWQgY2hhciogcm93QiA9IGZyYW1lYnVmZmVyICsgKGhlaWdodCAtIGkgLSAxKSAqIHJvd0J5
dGVzOwotICAgICAgICAvLyBGSVhNRTogdGhpcyBpcyB3aGVyZSB0aGUgbXVsdGlwbGljYXRpb24g
b2YgdGhlIGFscGhhCi0gICAgICAgIC8vIGNoYW5uZWwgaW50byB0aGUgY29sb3IgYnVmZmVyIHdp
bGwgbmVlZCB0byBvY2N1ciBpZiB0aGUKLSAgICAgICAgLy8gdXNlciBzcGVjaWZpZXMgdGhlICJw
cmVtdWx0aXBseUFscGhhIiBmbGFnIGluIHRoZSBjb250ZXh0Ci0gICAgICAgIC8vIGNyZWF0aW9u
IGF0dHJpYnV0ZXMuCi0gICAgICAgIG1lbWNweShzY2FubGluZSwgcm93Qiwgcm93Qnl0ZXMpOwot
ICAgICAgICBtZW1jcHkocm93Qiwgcm93QSwgcm93Qnl0ZXMpOwotICAgICAgICBtZW1jcHkocm93
QSwgc2NhbmxpbmUsIHJvd0J5dGVzKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotYm9vbCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZWFkQmFja0ZyYW1lYnVmZmVyKHVuc2lnbmVkIGNo
YXIqIHBpeGVscywgc2l6ZV90IGJ1ZmZlclNpemUpCi17Ci0gICAgaWYgKGJ1ZmZlclNpemUgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90Pig0ICogd2lkdGgoKSAqIGhlaWdodCgpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBFYXJsaWVy
IHZlcnNpb25zIG9mIHRoaXMgY29kZSB1c2VkIHRoZSBHUFUgdG8gZmxpcCB0aGUKLSAgICAvLyBm
cmFtZWJ1ZmZlciB2ZXJ0aWNhbGx5IGJlZm9yZSByZWFkaW5nIGl0IGJhY2sgZm9yIGNvbXBvc2l0
aW5nCi0gICAgLy8gdmlhIHNvZnR3YXJlLiBUaGlzIGNvZGUgd2FzIHF1aXRlIGNvbXBsaWNhdGVk
LCB1c2VkIGEgbG90IG9mCi0gICAgLy8gR1BVIG1lbW9yeSwgYW5kIGRpZG4ndCBwcm92aWRlIGFu
IG9idmlvdXMgc3BlZWR1cC4gU2luY2UgdGhpcwotICAgIC8vIHZlcnRpY2FsIGZsaXAgaXMgb25s
eSBhIHRlbXBvcmFyeSBzb2x1dGlvbiBhbnl3YXkgdW50aWwgQ2hyb21lCi0gICAgLy8gaXMgZnVs
bHkgR1BVIGNvbXBvc2l0ZWQsIGl0IHdhc24ndCB3b3J0aCB0aGUgY29tcGxleGl0eS4KLQotICAg
IHJlc29sdmVNdWx0aXNhbXBsZWRGcmFtZWJ1ZmZlcigwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2Nh
Y2hlZEhlaWdodCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2Zibyk7Ci0KLSAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKLSAgICBib29sIG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIGdsR2V0SW50ZWdlcnYoR0xfUEFDS19B
TElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKLSAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsK
LSAgICAgICAgZ2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7Ci0gICAgICAgIG11
c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1faXNHTEVT
MikgewotICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgdGVzdGluZyBmb3IgcHJlc2VuY2Ugb2Yg
R0xfT0VTX3JlYWRfZm9ybWF0Ci0gICAgICAgIC8vIGFuZCBHTF9FWFRfcmVhZF9mb3JtYXRfYmdy
YSwgYW5kIHVzaW5nIEdMX0JHUkFfRVhUIGhlcmUKLSAgICAgICAgLy8gZGlyZWN0bHkuCi0gICAg
ICAgIGdsUmVhZFBpeGVscygwLCAwLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdodCwgR0xf
UkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4ZWxzKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBidWZmZXJTaXplOyBpICs9IDQpCi0gICAgICAgICAgICBzdGQ6OnN3YXAocGl4ZWxz
W2ldLCBwaXhlbHNbaSArIDJdKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2xSZWFkUGl4ZWxzKDAs
IDAsIG1fY2FjaGVkV2lkdGgsIG1fY2FjaGVkSGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9C
WVRFLCBwaXhlbHMpOwotCi0gICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKLSAgICAg
ICAgZ2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7Ci0KLSAg
ICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwot
Ci0jaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCi0gICAgaWYgKHBpeGVscykKLSAg
ICAgICAgZmxpcFZlcnRpY2FsbHkocGl4ZWxzLCBtX2NhY2hlZFdpZHRoLCBtX2NhY2hlZEhlaWdo
dCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OnN5bnRoZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3Ip
Ci17Ci0gICAgbV9zeW50aGV0aWNFcnJvcnMuYWRkKGVycm9yKTsKLX0KLQotdm9pZCogV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bWFwQnVmZmVyU3ViRGF0YUNIUk9NSVVNKHVuc2ln
bmVkIHRhcmdldCwgaW50IG9mZnNldCwgaW50IHNpemUsIHVuc2lnbmVkIGFjY2VzcykKLXsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp1
bm1hcEJ1ZmZlclN1YkRhdGFDSFJPTUlVTShjb25zdCB2b2lkKiBtZW0pCi17Ci19Ci0KLXZvaWQq
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om1hcFRleFN1YkltYWdlMkRDSFJPTUlV
TSh1bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgdW5z
aWduZWQgYWNjZXNzKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OnVubWFwVGV4U3ViSW1hZ2UyRENIUk9NSVVNKGNvbnN0IHZvaWQq
IG1lbSkKLXsKLX0KLQotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjb3B5
VGV4dHVyZVRvUGFyZW50VGV4dHVyZUNIUk9NSVVNKHVuc2lnbmVkIGlkLCB1bnNpZ25lZCBpZDIp
Ci17Ci0gICAgaWYgKCFnbEdldFRleExldmVsUGFyYW1ldGVyaXYpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9jb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVyZUZCTyk7Ci0gICAg
Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMX0NPTE9SX0FUVEFDSE1FTlQwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xfVEVYVFVSRV8yRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7IC8vIGxldmVsCi0gICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBpZDIpOwotICAgIEdMc2l6ZWkgd2lkdGgsIGhlaWdo
dDsKLSAgICBnbEdldFRleExldmVsUGFyYW1ldGVyaXYoR0xfVEVYVFVSRV8yRCwgMCwgR0xfVEVY
VFVSRV9XSURUSCwgJndpZHRoKTsKLSAgICBnbEdldFRleExldmVsUGFyYW1ldGVyaXYoR0xfVEVY
VFVSRV8yRCwgMCwgR0xfVEVYVFVSRV9IRUlHSFQsICZoZWlnaHQpOwotICAgIGdsQ29weVRleElt
YWdlMkQoR0xfVEVYVFVSRV8yRCwKLSAgICAgICAgICAgICAgICAgICAgIDAsIC8vIGxldmVsCi0g
ICAgICAgICAgICAgICAgICAgICBHTF9SR0JBLAotICAgICAgICAgICAgICAgICAgICAgMCwgMCwg
Ly8geCwgeQotICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAwKTsgLy8gYm9yZGVyCi0gICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2JvdW5kVGV4dHVyZSk7Ci0gICAgZ2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKLX0KLQotV2ViU3RyaW5n
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldFJlcXVlc3RhYmxlRXh0ZW5zaW9u
c0NIUk9NSVVNKCkKLXsKLSAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViR3Jh
cGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVxdWVzdEV4dGVuc2lvbkNIUk9NSVVNKGNvbnN0
IGNoYXIqKQotewotfQotCi0vLyBIZWxwZXIgbWFjcm9zIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9m
IGNvZGUuCi0KLSNkZWZpbmUgREVMRUdBVEVfVE9fR0wobmFtZSwgZ2xuYW1lKSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4
dDNERGVmYXVsdEltcGw6Om5hbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Z2wjI2dsbmFtZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0dMXzEobmFtZSwg
Z2xuYW1lLCB0MSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpuYW1lKHQxIGExKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FU
RV9UT19HTF8xUihuYW1lLCBnbG5hbWUsIHQxLCBydCkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLXJ0IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUodDEgYTEp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXR1cm4gZ2wjI2dsbmFtZShhMSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0K
LSNkZWZpbmUgREVMRUdBVEVfVE9fR0xfMihuYW1lLCBnbG5hbWUsIHQxLCB0MikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6Om5hbWUodDEgYTEsIHQyIGEyKSAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFt
ZShhMSwgYTIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0dMXzJSKG5hbWUsIGdsbmFtZSwg
dDEsIHQyLCBydCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotcnQgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIpICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHJldHVybiBnbCMjZ2xuYW1lKGExLCBhMik7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19HTF8z
KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIs
IHQzIGEzKSAgICAgICAgICAgICAgICBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUg
REVMRUdBVEVfVE9fR0xfNChuYW1lLCBnbG5hbWUsIHQxLCB0MiwgdDMsIHQ0KSAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5h
bWUodDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQpICAgICAgICAgXAoteyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZ2wjI2dsbmFtZShhMSwgYTIs
IGEzLCBhNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotfQotCi0jZGVmaW5lIERFTEVHQVRFX1RPX0dMXzUobmFtZSwgZ2xuYW1lLCB0MSwgdDIsIHQz
LCB0NCwgdDUpICAgICAgICAgICAgICAgICAgICAgXAotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsOjpuYW1lKHQxIGExLCB0MiBhMiwgdDMgYTMsIHQ0IGE0LCB0NSBhNSkgIFwK
LXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGds
IyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19HTF82KG5hbWUsIGds
bmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NikgICAgICAgICAgICAgICAgIFwKLXZvaWQgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0
NCBhNCwgdDUgYTUsIHQ2IGE2KSBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgREVM
RUdBVEVfVE9fR0xfNyhuYW1lLCBnbG5hbWUsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3KSAg
ICAgICAgICAgICBcCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6Om5hbWUo
dDEgYTEsIHQyIGEyLCB0MyBhMywgdDQgYTQsIHQ1IGE1LCB0NiBhNiwgdDcgYTcpIFwKLXsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5h
bWUoYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBERUxFR0FURV9UT19HTF84KG5hbWUsIGdsbmFtZSwg
dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KSAgICAgICAgIFwKLXZvaWQgV2ViR3JhcGhp
Y3NDb250ZXh0M0REZWZhdWx0SW1wbDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwg
dDUgYTUsIHQ2IGE2LCB0NyBhNywgdDggYTgpIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGdsIyNnbG5hbWUoYTEsIGEyLCBhMywgYTQsIGE1
LCBhNiwgYTcsIGE4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2Rl
ZmluZSBERUxFR0FURV9UT19HTF85KG5hbWUsIGdsbmFtZSwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0
NiwgdDcsIHQ4LCB0OSkgICAgIFwKLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1w
bDo6bmFtZSh0MSBhMSwgdDIgYTIsIHQzIGEzLCB0NCBhNCwgdDUgYTUsIHQ2IGE2LCB0NyBhNywg
dDggYTgsIHQ5IGE5KSBcCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBnbCMjZ2xuYW1lKGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwg
YTkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLXZvaWQgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUp
Ci17Ci0gICAgLy8gRklYTUU6IHF1ZXJ5IG51bWJlciBvZiB0ZXh0dXJlcyBhdmFpbGFibGUuCi0g
ICAgaWYgKHRleHR1cmUgPCBHTF9URVhUVVJFMCB8fCB0ZXh0dXJlID4gR0xfVEVYVFVSRTArMzIp
Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsK
LX0KLQotREVMRUdBVEVfVE9fR0xfMihhdHRhY2hTaGFkZXIsIEF0dGFjaFNoYWRlciwgV2ViR0xJ
ZCwgV2ViR0xJZCkKLQotREVMRUdBVEVfVE9fR0xfMyhiaW5kQXR0cmliTG9jYXRpb24sIEJpbmRB
dHRyaWJMb2NhdGlvbiwgV2ViR0xJZCwgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciopCi0KLXZv
aWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YmluZEJ1ZmZlcih1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xJZCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgaWYgKHRhcmdldCA9PSBHTF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRBcnJh
eUJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICBnbEJpbmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQot
Ci12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmJpbmRGcmFtZWJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCBmcmFtZWJ1ZmZlcikKLXsKLSAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICBmcmFtZWJ1ZmZl
ciA9IChtX2F0dHJpYnV0ZXMuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsK
LSAgICBpZiAoZnJhbWVidWZmZXIgIT0gbV9ib3VuZEZCTykgewotICAgICAgICBnbEJpbmRGcmFt
ZWJ1ZmZlckVYVCh0YXJnZXQsIGZyYW1lYnVmZmVyKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9IGZy
YW1lYnVmZmVyOwotICAgIH0KLX0KLQotREVMRUdBVEVfVE9fR0xfMihiaW5kUmVuZGVyYnVmZmVy
LCBCaW5kUmVuZGVyYnVmZmVyRVhULCB1bnNpZ25lZCBsb25nLCBXZWJHTElkKQotCi12b2lkIFdl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBXZWJHTElkIHRleHR1cmUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgZ2xCaW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOwotICAgIG1fYm91bmRUZXh0dXJlID0g
dGV4dHVyZTsKLX0KLQotREVMRUdBVEVfVE9fR0xfNChibGVuZENvbG9yLCBCbGVuZENvbG9yLCBk
b3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCi0KLURFTEVHQVRFX1RPX0dMXzEoYmxlbmRF
cXVhdGlvbiwgQmxlbmRFcXVhdGlvbiwgdW5zaWduZWQgbG9uZykKLQotREVMRUdBVEVfVE9fR0xf
MihibGVuZEVxdWF0aW9uU2VwYXJhdGUsIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKLQotREVMRUdBVEVfVE9fR0xfMihibGVuZEZ1bmMsIEJsZW5k
RnVuYywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKLQotREVMRUdBVEVfVE9fR0xfNChi
bGVuZEZ1bmNTZXBhcmF0ZSwgQmxlbmRGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcsIHVuc2ln
bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLURFTEVHQVRFX1RPX0dM
XzQoYnVmZmVyRGF0YSwgQnVmZmVyRGF0YSwgdW5zaWduZWQgbG9uZywgaW50LCBjb25zdCB2b2lk
KiwgdW5zaWduZWQgbG9uZykKLQotREVMRUdBVEVfVE9fR0xfNChidWZmZXJTdWJEYXRhLCBCdWZm
ZXJTdWJEYXRhLCB1bnNpZ25lZCBsb25nLCBsb25nLCBpbnQsIGNvbnN0IHZvaWQqKQotCi1ERUxF
R0FURV9UT19HTF8xUihjaGVja0ZyYW1lYnVmZmVyU3RhdHVzLCBDaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzRVhULCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQotCi1ERUxFR0FURV9UT19HTF8x
KGNsZWFyLCBDbGVhciwgdW5zaWduZWQgbG9uZykKLQotREVMRUdBVEVfVE9fR0xfNChjbGVhckNv
bG9yLCBDbGVhckNvbG9yLCBkb3VibGUsIGRvdWJsZSwgZG91YmxlLCBkb3VibGUpCi0KLURFTEVH
QVRFX1RPX0dMXzEoY2xlYXJEZXB0aCwgQ2xlYXJEZXB0aCwgZG91YmxlKQotCi1ERUxFR0FURV9U
T19HTF8xKGNsZWFyU3RlbmNpbCwgQ2xlYXJTdGVuY2lsLCBsb25nKQotCi1ERUxFR0FURV9UT19H
TF80KGNvbG9yTWFzaywgQ29sb3JNYXNrLCBib29sLCBib29sLCBib29sLCBib29sKQotCi12b2lk
IFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNvbXBpbGVTaGFkZXIoV2ViR0xJZCBz
aGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTaGFkZXJTb3VyY2VN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgIC8vIFBh
c3NpbmcgZG93biB0byBnbCBkcml2ZXIgdG8gZ2VuZXJhdGUgdGhlIGNvcnJlY3QgZXJyb3I7IG9y
IHRoZSBjYXNlCi0gICAgICAgIC8vIHdoZXJlIHRoZSBzaGFkZXIgZGVsZXRpb24gaXMgZGVsYXll
ZCB3aGVuIGl0J3MgYXR0YWNoZWQgdG8gYSBwcm9ncmFtLgotICAgICAgICBnbENvbXBpbGVTaGFk
ZXIoc2hhZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBTaGFkZXJTb3VyY2VFbnRy
eSogZW50cnkgPSByZXN1bHQtPnNlY29uZDsKLSAgICBBU1NFUlQoZW50cnkpOwotCi0gICAgaWYg
KCFhbmdsZVZhbGlkYXRlU2hhZGVyU291cmNlKCplbnRyeSkpCi0gICAgICAgIHJldHVybjsgLy8g
U2hhZGVyIGRpZG4ndCB2YWxpZGF0ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29tcGlsaW5n
IHRyYW5zbGF0ZWQgc291cmNlCi0KLSAgICBpbnQgc2hhZGVyTGVuZ3RoID0gZW50cnktPnRyYW5z
bGF0ZWRTb3VyY2UgPyBzdHJsZW4oZW50cnktPnRyYW5zbGF0ZWRTb3VyY2UpIDogMDsKLSAgICBn
bFNoYWRlclNvdXJjZShzaGFkZXIsIDEsIGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcioqPigmZW50cnkt
PnRyYW5zbGF0ZWRTb3VyY2UpLCAmc2hhZGVyTGVuZ3RoKTsKLSAgICBnbENvbXBpbGVTaGFkZXIo
c2hhZGVyKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBpbnQgY29tcGlsZVN0YXR1czsKLSAgICBn
bEdldFNoYWRlcml2KHNoYWRlciwgR0xfQ09NUElMRV9TVEFUVVMsICZjb21waWxlU3RhdHVzKTsK
LSAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5lcmF0ZWQgR0xTTCB3aWxsIGJlIGFjY2VwdGVk
IGJ5IE9wZW5HTAotICAgIEFTU0VSVChjb21waWxlU3RhdHVzID09IEdMX1RSVUUpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Y29weVRleEltYWdl
MkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCwgbG9uZyBib3JkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBib29sIG5lZWRzUmVzb2x2ZSA9IChtX2F0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fYm91bmRG
Qk8gPT0gbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgaWYgKG5lZWRzUmVzb2x2ZSkgewotICAgICAg
ICByZXNvbHZlTXVsdGlzYW1wbGVkRnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwot
ICAgIH0KLQotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0KLSAgICBpZiAobmVlZHNSZXNvbHZl
KQotICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91
bmRGQk8pOwotfQotCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNvcHlU
ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZz
ZXQsIGxvbmcgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAg
Ym9vbCBuZWVkc1Jlc29sdmUgPSAobV9hdHRyaWJ1dGVzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJP
ID09IG1fbXVsdGlzYW1wbGVGQk8pOwotICAgIGlmIChuZWVkc1Jlc29sdmUpIHsKLSAgICAgICAg
cmVzb2x2ZU11bHRpc2FtcGxlZEZyYW1lYnVmZmVyKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAg
ICB9Ci0KLSAgICBnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKG5lZWRzUmVzb2x2ZSkKLSAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJP
KTsKLX0KLQotREVMRUdBVEVfVE9fR0xfMShjdWxsRmFjZSwgQ3VsbEZhY2UsIHVuc2lnbmVkIGxv
bmcpCi0KLURFTEVHQVRFX1RPX0dMXzEoZGVwdGhGdW5jLCBEZXB0aEZ1bmMsIHVuc2lnbmVkIGxv
bmcpCi0KLURFTEVHQVRFX1RPX0dMXzEoZGVwdGhNYXNrLCBEZXB0aE1hc2ssIGJvb2wpCi0KLURF
TEVHQVRFX1RPX0dMXzIoZGVwdGhSYW5nZSwgRGVwdGhSYW5nZSwgZG91YmxlLCBkb3VibGUpCi0K
LURFTEVHQVRFX1RPX0dMXzIoZGV0YWNoU2hhZGVyLCBEZXRhY2hTaGFkZXIsIFdlYkdMSWQsIFdl
YkdMSWQpCi0KLURFTEVHQVRFX1RPX0dMXzEoZGlzYWJsZSwgRGlzYWJsZSwgdW5zaWduZWQgbG9u
ZykKLQotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBpZiAoaW5kZXggPCBOdW1UcmFja2VkUG9pbnRlclN0YXRlcykKLSAgICAgICAg
bV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbaW5kZXhdLmVuYWJsZWQgPSBmYWxzZTsKLSAgICBn
bERpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLURFTEVHQVRFX1RPX0dMXzMo
ZHJhd0FycmF5cywgRHJhd0FycmF5cywgdW5zaWduZWQgbG9uZywgbG9uZywgbG9uZykKLQotdm9p
ZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkcmF3RWxlbWVudHModW5zaWduZWQg
bG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcg
b2Zmc2V0KQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRHJhd0VsZW1lbnRz
KG1vZGUsIGNvdW50LCB0eXBlLAotICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Ci19Ci0KLURFTEVHQVRFX1RP
X0dMXzEoZW5hYmxlLCBFbmFibGUsIHVuc2lnbmVkIGxvbmcpCi0KLXZvaWQgV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9u
ZyBpbmRleCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAoaW5kZXggPCBO
dW1UcmFja2VkUG9pbnRlclN0YXRlcykKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3Rh
dGVbaW5kZXhdLmVuYWJsZWQgPSB0cnVlOwotICAgIGdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXko
aW5kZXgpOwotfQotCi1ERUxFR0FURV9UT19HTChmaW5pc2gsIEZpbmlzaCkKLQotREVMRUdBVEVf
VE9fR0woZmx1c2gsIEZsdXNoKQotCi1ERUxFR0FURV9UT19HTF80KGZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyLCBGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCwgdW5zaWduZWQgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgV2ViR0xJZCkKLQotREVMRUdBVEVfVE9fR0xfNShmcmFt
ZWJ1ZmZlclRleHR1cmUyRCwgRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFdlYkdMSWQsIGxvbmcpCi0KLURFTEVHQVRF
X1RPX0dMXzEoZnJvbnRGYWNlLCBGcm9udEZhY2UsIHVuc2lnbmVkIGxvbmcpCi0KLXZvaWQgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9u
ZyB0YXJnZXQpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1faXNHTEVT
MiB8fCBtX2hhdmVFWFRGcmFtZWJ1ZmZlck9iamVjdCkKLSAgICAgICAgZ2xHZW5lcmF0ZU1pcG1h
cEVYVCh0YXJnZXQpOwotICAgIC8vIEZJWE1FOiBwcm92aWRlIGFsdGVybmF0aXZlIGNvZGUgcGF0
aD8gVGhpcyB3aWxsIGJlIHVucGxlYXNhbnQKLSAgICAvLyB0byBpbXBsZW1lbnQgaWYgZ2xHZW5l
cmF0ZU1pcG1hcEVYVCBpcyBub3QgYXZhaWxhYmxlIC0tIGl0IHdpbGwKLSAgICAvLyByZXF1aXJl
IGEgdGV4dHVyZSByZWFkYmFjayBhbmQgcmUtdXBsb2FkLgotfQotCi1ib29sIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGw6OmdldEFjdGl2ZUF0dHJpYihXZWJHTElkIHByb2dyYW0sIHVu
c2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEdM
aW50IG1heE5hbWVMZW5ndGggPSAtMTsKLSAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsKLSAgICBpZiAobWF4
TmFtZUxlbmd0aCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBHTGNoYXIqIG5hbWUg
PSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhtYXhOYW1lTGVuZ3RoICogc2l6ZW9mKEdMY2hh
cikpLmdldFZhbHVlKG5hbWUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIEdMc2l6ZWkgbGVu
Z3RoID0gMDsKLSAgICBHTGludCBzaXplID0gLTE7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAg
IGdsR2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBtYXhOYW1lTGVuZ3RoLAotICAgICAg
ICAgICAgICAgICAgICAgICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7Ci0gICAgaWYgKHNp
emUgPCAwKSB7Ci0gICAgICAgIGZhc3RGcmVlKG5hbWUpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGluZm8ubmFtZSA9IFdlYlN0cmluZzo6ZnJvbVVURjgobmFtZSwgbGVuZ3Ro
KTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7Ci0gICAgZmFz
dEZyZWUobmFtZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTElkIHByb2dyYW0sIHVuc2ln
bmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgR0xpbnQgbWF4TmFtZUxlbmd0aCA9IC0xOwotICAgIGdsR2V0UHJvZ3JhbWl2
KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsK
LSAgICBpZiAobWF4TmFtZUxlbmd0aCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBH
TGNoYXIqIG5hbWUgPSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhtYXhOYW1lTGVuZ3RoICog
c2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKG5hbWUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdMX09VVF9PRl9NRU1PUlkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IEdMc2l6ZWkgbGVuZ3RoID0gMDsKLSAgICBHTGludCBzaXplID0gLTE7Ci0gICAgR0xlbnVtIHR5
cGUgPSAwOwotICAgIGdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4TmFtZUxl
bmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgJmxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1l
KTsKLSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgZmFzdEZyZWUobmFtZSk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaW5mby5uYW1lID0gV2ViU3RyaW5nOjpmcm9tVVRG
OChuYW1lLCBsZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7Ci0gICAgaW5mby5zaXplID0g
c2l6ZTsKLSAgICBmYXN0RnJlZShuYW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotREVMRUdB
VEVfVE9fR0xfNChnZXRBdHRhY2hlZFNoYWRlcnMsIEdldEF0dGFjaGVkU2hhZGVycywgV2ViR0xJ
ZCwgaW50LCBpbnQqLCB1bnNpZ25lZCBpbnQqKQotCi1ERUxFR0FURV9UT19HTF8yUihnZXRBdHRy
aWJMb2NhdGlvbiwgR2V0QXR0cmliTG9jYXRpb24sIFdlYkdMSWQsIGNvbnN0IGNoYXIqLCBpbnQp
Ci0KLURFTEVHQVRFX1RPX0dMXzIoZ2V0Qm9vbGVhbnYsIEdldEJvb2xlYW52LCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBjaGFyKikKLQotREVMRUdBVEVfVE9fR0xfMyhnZXRCdWZmZXJQYXJhbWV0
ZXJpdiwgR2V0QnVmZmVyUGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcs
IGludCopCi0KLVdlYkdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIFdlYkdyYXBoaWNzQ29u
dGV4dDNERGVmYXVsdEltcGw6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKLXsKLSAgICByZXR1cm4g
bV9hdHRyaWJ1dGVzOwotfQotCi11bnNpZ25lZCBsb25nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVm
YXVsdEltcGw6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9zeW50aGV0aWNFcnJvcnMuc2l6ZSgp
ID4gMCkgewotICAgICAgICBMaXN0SGFzaFNldDx1bnNpZ25lZCBsb25nPjo6aXRlcmF0b3IgaXRl
ciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2luKCk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZXJy
ID0gKml0ZXI7Ci0gICAgICAgIG1fc3ludGhldGljRXJyb3JzLnJlbW92ZShpdGVyKTsKLSAgICAg
ICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBy
ZXR1cm4gZ2xHZXRFcnJvcigpOwotfQotCi1ib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmlzQ29udGV4dExvc3QoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotREVMRUdB
VEVfVE9fR0xfMihnZXRGbG9hdHYsIEdldEZsb2F0diwgdW5zaWduZWQgbG9uZywgZmxvYXQqKQot
Ci12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0
dGFjaG1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFs
dWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKGF0dGFjaG1lbnQgPT0g
R0xfREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UKQotICAgICAgICBhdHRhY2htZW50ID0gR0xfREVQ
VEhfQVRUQUNITUVOVDsgLy8gT3IgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBlaXRoZXIgd29ya3Mu
Ci0gICAgZ2xHZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdkVYVCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkK
LXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9pc0dMRVMyKSB7Ci0gICAg
ICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAvLyBOZWVkIHRvIGVtdWxhdGUgTUFYX0ZSQUdNRU5UL1ZFUlRFWF9VTklGT1JNX1ZFQ1RP
UlMgYW5kIE1BWF9WQVJZSU5HX1ZFQ1RPUlMKLSAgICAvLyBiZWNhdXNlIGRlc2t0b3AgR0wncyBj
b3JyZXNwb25kaW5nIHF1ZXJpZXMgcmV0dXJuIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cwotICAg
IC8vIHdoZXJlYXMgR0xFUzIgcmV0dXJuIHRoZSBudW1iZXIgb2YgdmVjdG9ycyAoZWFjaCB2ZWN0
b3IgaGFzIDQgY29tcG9uZW50cykuCi0gICAgLy8gVGhlcmVmb3JlLCB0aGUgdmFsdWUgcmV0dXJu
ZWQgYnkgZGVza3RvcCBHTCBuZWVkcyB0byBiZSBkaXZpZGVkIGJ5IDQuCi0gICAgc3dpdGNoIChw
bmFtZSkgewotICAgIGNhc2UgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAg
Z2xHZXRJbnRlZ2VydihHTF9NQVhfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7
Ci0gICAgICAgICp2YWx1ZSAvPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTOgotICAgICAgICBnbEdldEludGVnZXJ2KEdMX01BWF9WRVJURVhf
VU5JRk9STV9DT01QT05FTlRTLCB2YWx1ZSk7Ci0gICAgICAgICp2YWx1ZSAvPSA0OwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIE1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICAgIGdsR2V0SW50
ZWdlcnYoR0xfTUFYX1ZBUllJTkdfRkxPQVRTLCB2YWx1ZSk7Ci0gICAgICAgICp2YWx1ZSAvPSA0
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBnbEdldEludGVnZXJ2KHBu
YW1lLCB2YWx1ZSk7Ci0gICAgfQotfQotCi1ERUxFR0FURV9UT19HTF8zKGdldFByb2dyYW1pdiwg
R2V0UHJvZ3JhbWl2LCBXZWJHTElkLCB1bnNpZ25lZCBsb25nLCBpbnQqKQotCi1XZWJTdHJpbmcg
V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xJ
ZCBwcm9ncmFtKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IGxvZ0xl
bmd0aDsKLSAgICBnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9JTkZPX0xPR19MRU5HVEgsICZs
b2dMZW5ndGgpOwotICAgIGlmICghbG9nTGVuZ3RoKQotICAgICAgICByZXR1cm4gV2ViU3RyaW5n
KCk7Ci0gICAgR0xjaGFyKiBsb2cgPSAwOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsb2dMZW5n
dGggKiBzaXplb2YoR0xjaGFyKSkuZ2V0VmFsdWUobG9nKSkKLSAgICAgICAgcmV0dXJuIFdlYlN0
cmluZygpOwotICAgIEdMc2l6ZWkgcmV0dXJuZWRMb2dMZW5ndGg7Ci0gICAgZ2xHZXRQcm9ncmFt
SW5mb0xvZyhwcm9ncmFtLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsKLSAg
ICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7Ci0gICAgV2ViU3Ry
aW5nIHJlcyA9IFdlYlN0cmluZzo6ZnJvbVVURjgobG9nLCByZXR1cm5lZExvZ0xlbmd0aCk7Ci0g
ICAgZmFzdEZyZWUobG9nKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1ERUxFR0FURV9UT19HTF8z
KGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2LCBHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdkVY
VCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKLQotdm9pZCBXZWJHcmFwaGlj
c0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJpdihXZWJHTElkIHNoYWRlciwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LQotICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5k
KCkpIHsKLSAgICAgICAgU2hhZGVyU291cmNlRW50cnkqIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7
Ci0gICAgICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAg
ICAgY2FzZSBHTF9DT01QSUxFX1NUQVRVUzoKLSAgICAgICAgICAgIGlmICghZW50cnktPmlzVmFs
aWQpIHsKLSAgICAgICAgICAgICAgICAqdmFsdWUgPSAwOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdMX0lO
Rk9fTE9HX0xFTkdUSDoKLSAgICAgICAgICAgIGlmICghZW50cnktPmlzVmFsaWQpIHsKLSAgICAg
ICAgICAgICAgICAqdmFsdWUgPSBlbnRyeS0+bG9nID8gc3RybGVuKGVudHJ5LT5sb2cpIDogMDsK
LSAgICAgICAgICAgICAgICBpZiAoKnZhbHVlKQotICAgICAgICAgICAgICAgICAgICAoKnZhbHVl
KSsrOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RIOgotICAgICAgICAg
ICAgKnZhbHVlID0gZW50cnktPnNvdXJjZSA/IHN0cmxlbihlbnRyeS0+c291cmNlKSA6IDA7Ci0g
ICAgICAgICAgICBpZiAoKnZhbHVlKQotICAgICAgICAgICAgICAgICgqdmFsdWUpKys7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBnbEdldFNoYWRlcml2KHNo
YWRlciwgcG5hbWUsIHZhbHVlKTsKLX0KLQotV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmdldFNoYWRlckluZm9Mb2coV2ViR0xJZCBzaGFkZXIpCi17Ci0gICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAgICBpZiAocmVzdWx0ICE9IG1f
c2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgIFNoYWRlclNvdXJjZUVudHJ5KiBlbnRy
eSA9IHJlc3VsdC0+c2Vjb25kOwotICAgICAgICBBU1NFUlQoZW50cnkpOwotICAgICAgICBpZiAo
IWVudHJ5LT5pc1ZhbGlkKSB7Ci0gICAgICAgICAgICBpZiAoIWVudHJ5LT5sb2cpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwotICAgICAgICAgICAgV2ViU3RyaW5nIHJlcyA9
IFdlYlN0cmluZzo6ZnJvbVVURjgoZW50cnktPmxvZywgc3RybGVuKGVudHJ5LT5sb2cpKTsKLSAg
ICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTGludCBsb2dM
ZW5ndGggPSAwOwotICAgIGdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgs
ICZsb2dMZW5ndGgpOwotICAgIGlmIChsb2dMZW5ndGggPD0gMSkKLSAgICAgICAgcmV0dXJuIFdl
YlN0cmluZygpOwotICAgIEdMY2hhciogbG9nID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2Mo
bG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikpLmdldFZhbHVlKGxvZykpCi0gICAgICAgIHJldHVy
biBXZWJTdHJpbmcoKTsKLSAgICBHTHNpemVpIHJldHVybmVkTG9nTGVuZ3RoOwotICAgIGdsR2V0
U2hhZGVySW5mb0xvZyhzaGFkZXIsIGxvZ0xlbmd0aCwgJnJldHVybmVkTG9nTGVuZ3RoLCBsb2cp
OwotICAgIEFTU0VSVChsb2dMZW5ndGggPT0gcmV0dXJuZWRMb2dMZW5ndGggKyAxKTsKLSAgICBX
ZWJTdHJpbmcgcmVzID0gV2ViU3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3Ro
KTsKLSAgICBmYXN0RnJlZShsb2cpOwotICAgIHJldHVybiByZXM7Ci19Ci0KLVdlYlN0cmluZyBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBz
aGFkZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBTaGFkZXJTb3VyY2VN
YXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKLSAg
ICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKSB7Ci0gICAgICAgIFNoYWRl
clNvdXJjZUVudHJ5KiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOwotICAgICAgICBBU1NFUlQoZW50
cnkpOwotICAgICAgICBpZiAoIWVudHJ5LT5zb3VyY2UpCi0gICAgICAgICAgICByZXR1cm4gV2Vi
U3RyaW5nKCk7Ci0gICAgICAgIFdlYlN0cmluZyByZXMgPSBXZWJTdHJpbmc6OmZyb21VVEY4KGVu
dHJ5LT5zb3VyY2UsIHN0cmxlbihlbnRyeS0+c291cmNlKSk7Ci0gICAgICAgIHJldHVybiByZXM7
Ci0gICAgfQotCi0gICAgR0xpbnQgbG9nTGVuZ3RoID0gMDsKLSAgICBnbEdldFNoYWRlcml2KHNo
YWRlciwgR0xfU0hBREVSX1NPVVJDRV9MRU5HVEgsICZsb2dMZW5ndGgpOwotICAgIGlmIChsb2dM
ZW5ndGggPD0gMSkKLSAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwotICAgIEdMY2hhciogbG9n
ID0gMDsKLSAgICBpZiAoIXRyeUZhc3RNYWxsb2MobG9nTGVuZ3RoICogc2l6ZW9mKEdMY2hhcikp
LmdldFZhbHVlKGxvZykpCi0gICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLSAgICBHTHNpemVp
IHJldHVybmVkTG9nTGVuZ3RoOwotICAgIGdsR2V0U2hhZGVyU291cmNlKHNoYWRlciwgbG9nTGVu
Z3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxvZyk7Ci0gICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSBy
ZXR1cm5lZExvZ0xlbmd0aCArIDEpOwotICAgIFdlYlN0cmluZyByZXMgPSBXZWJTdHJpbmc6OmZy
b21VVEY4KGxvZywgcmV0dXJuZWRMb2dMZW5ndGgpOwotICAgIGZhc3RGcmVlKGxvZyk7Ci0gICAg
cmV0dXJuIHJlczsKLX0KLQotV2ViU3RyaW5nIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGw6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgcmVzdWx0LmFwcGVuZChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihnbEdldFN0cmluZyhuYW1lKSkpOwotICAgIGlmIChu
YW1lID09IEdMX0VYVEVOU0lPTlMpIHsKLSAgICAgICAgLy8gR0xfQ0hST01JVU1fY29weV90ZXh0
dXJlX3RvX3BhcmVudF90ZXh0dXJlIHJlcXVpcmVzIHRoZQotICAgICAgICAvLyBkZXNrdG9wR0wt
b25seSBmdW5jdGlvbiBnbEdldFRleExldmVsUGFyYW1ldGVyaXYgKEdMRVMyCi0gICAgICAgIC8v
IGRvZXNuJ3Qgc3VwcG9ydCBpdCkuCi0gICAgICAgIGlmICghbV9pc0dMRVMyKQotICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiIEdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZV90b19wYXJlbnRfdGV4
dHVyZSIpOwotICAgIH0KLSAgICByZXR1cm4gV2ViU3RyaW5nKHJlc3VsdC50b1N0cmluZygpKTsK
LX0KLQotREVMRUdBVEVfVE9fR0xfMyhnZXRUZXhQYXJhbWV0ZXJmdiwgR2V0VGV4UGFyYW1ldGVy
ZnYsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KikKLQotREVMRUdBVEVfVE9f
R0xfMyhnZXRUZXhQYXJhbWV0ZXJpdiwgR2V0VGV4UGFyYW1ldGVyaXYsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIGludCopCi0KLURFTEVHQVRFX1RPX0dMXzMoZ2V0VW5pZm9ybWZ2LCBH
ZXRVbmlmb3JtZnYsIFdlYkdMSWQsIGxvbmcsIGZsb2F0KikKLQotREVMRUdBVEVfVE9fR0xfMyhn
ZXRVbmlmb3JtaXYsIEdldFVuaWZvcm1pdiwgV2ViR0xJZCwgbG9uZywgaW50KikKLQotREVMRUdB
VEVfVE9fR0xfMlIoZ2V0VW5pZm9ybUxvY2F0aW9uLCBHZXRVbmlmb3JtTG9jYXRpb24sIFdlYkdM
SWQsIGNvbnN0IGNoYXIqLCBsb25nKQotCi1ERUxFR0FURV9UT19HTF8zKGdldFZlcnRleEF0dHJp
YmZ2LCBHZXRWZXJ0ZXhBdHRyaWJmdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxv
YXQqKQotCi1ERUxFR0FURV9UT19HTF8zKGdldFZlcnRleEF0dHJpYml2LCBHZXRWZXJ0ZXhBdHRy
aWJpdiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgaW50KikKLQotbG9uZyBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQg
bG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICB2b2lkKiBwb2ludGVyOwotICAgIGdsR2V0VmVydGV4QXR0cmliUG9pbnRlcnYo
aW5kZXgsIHBuYW1lLCAmcG9pbnRlcik7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8bG9u
Zz4ocG9pbnRlcik7Ci19Ci0KLURFTEVHQVRFX1RPX0dMXzIoaGludCwgSGludCwgdW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZykKLQotREVMRUdBVEVfVE9fR0xfMVIoaXNCdWZmZXIsIElzQnVm
ZmVyLCBXZWJHTElkLCBib29sKQotCi1ERUxFR0FURV9UT19HTF8xUihpc0VuYWJsZWQsIElzRW5h
YmxlZCwgdW5zaWduZWQgbG9uZywgYm9vbCkKLQotREVMRUdBVEVfVE9fR0xfMVIoaXNGcmFtZWJ1
ZmZlciwgSXNGcmFtZWJ1ZmZlckVYVCwgV2ViR0xJZCwgYm9vbCkKLQotREVMRUdBVEVfVE9fR0xf
MVIoaXNQcm9ncmFtLCBJc1Byb2dyYW0sIFdlYkdMSWQsIGJvb2wpCi0KLURFTEVHQVRFX1RPX0dM
XzFSKGlzUmVuZGVyYnVmZmVyLCBJc1JlbmRlcmJ1ZmZlckVYVCwgV2ViR0xJZCwgYm9vbCkKLQot
REVMRUdBVEVfVE9fR0xfMVIoaXNTaGFkZXIsIElzU2hhZGVyLCBXZWJHTElkLCBib29sKQotCi1E
RUxFR0FURV9UT19HTF8xUihpc1RleHR1cmUsIElzVGV4dHVyZSwgV2ViR0xJZCwgYm9vbCkKLQot
REVMRUdBVEVfVE9fR0xfMShsaW5lV2lkdGgsIExpbmVXaWR0aCwgZG91YmxlKQotCi1ERUxFR0FU
RV9UT19HTF8xKGxpbmtQcm9ncmFtLCBMaW5rUHJvZ3JhbSwgV2ViR0xJZCkKLQotREVMRUdBVEVf
VE9fR0xfMihwaXhlbFN0b3JlaSwgUGl4ZWxTdG9yZWksIHVuc2lnbmVkIGxvbmcsIGxvbmcpCi0K
LURFTEVHQVRFX1RPX0dMXzIocG9seWdvbk9mZnNldCwgUG9seWdvbk9mZnNldCwgZG91YmxlLCBk
b3VibGUpCi0KLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVhZFBpeGVs
cyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUsIHZvaWQqIHBpeGVs
cykKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRo
ZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAot
ICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcgY2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3Jl
IHJlYWRpbmcgcGl4ZWxzLgotICAgIGdsRmx1c2goKTsKLSAgICBib29sIG5lZWRzUmVzb2x2ZSA9
IChtX2F0dHJpYnV0ZXMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZC
Tyk7Ci0gICAgaWYgKG5lZWRzUmVzb2x2ZSkgewotICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGVk
RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICBnbEZsdXNoKCk7Ci0g
ICAgfQotCi0gICAgZ2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzKTsKLQotICAgIGlmIChuZWVkc1Jlc29sdmUpCi0gICAgICAgIGdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci19Ci0KLXZvaWQgV2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsK
LX0KLQotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZW5kZXJidWZmZXJT
dG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbG9uZyB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGhlaWdodCkKLXsKLSAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0g
ICAgY2FzZSBHTF9ERVBUSF9TVEVOQ0lMOgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RF
UFRIMjRfU1RFTkNJTDhfRVhUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX0RFUFRIX0NP
TVBPTkVOVDE2OgotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX0RFUFRIX0NPTVBPTkVOVDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9SR0JBNDoKLSAgICBjYXNlIEdMX1JHQjVfQTE6
Ci0gICAgICAgIGludGVybmFsZm9ybWF0ID0gR0xfUkdCQTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSAweDhENjI6IC8vIEdMX1JHQjU2NQotICAgICAgICBpbnRlcm5hbGZvcm1hdCA9IEdMX1JH
QjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0
YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotREVMRUdBVEVfVE9f
R0xfMihzYW1wbGVDb3ZlcmFnZSwgU2FtcGxlQ292ZXJhZ2UsIGRvdWJsZSwgYm9vbCkKLQotREVM
RUdBVEVfVE9fR0xfNChzY2lzc29yLCBTY2lzc29yLCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25n
LCB1bnNpZ25lZCBsb25nKQotCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50
ZXJuYWxGb3JtYXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJv
cmRlciwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMp
Ci17Ci0gICAgaWYgKHdpZHRoICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6c2hhZGVy
U291cmNlKFdlYkdMSWQgc2hhZGVyLCBjb25zdCBjaGFyKiBzdHJpbmcpCi17Ci0gICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbGVuZ3RoID0gc3RyaW5nID8gc3RybGVuKHN0cmlu
ZykgOiAwOwotICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwotICAgIGlmIChyZXN1bHQgIT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpIHsKLSAgICAgICAgU2hhZGVyU291cmNlRW50cnkqIGVudHJ5ID0gcmVzdWx0LT5z
ZWNvbmQ7Ci0gICAgICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgICAgIGlmIChlbnRyeS0+c291cmNl
KSB7Ci0gICAgICAgICAgICBmYXN0RnJlZShlbnRyeS0+c291cmNlKTsKLSAgICAgICAgICAgIGVu
dHJ5LT5zb3VyY2UgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGlmICghdHJ5RmFzdE1hbGxvYygo
bGVuZ3RoICsgMSkgKiBzaXplb2YoY2hhcikpLmdldFZhbHVlKGVudHJ5LT5zb3VyY2UpKQotICAg
ICAgICAgICAgcmV0dXJuOyAvLyBGSVhNRTogZ2VuZXJhdGUgYW4gZXJyb3I/Ci0gICAgICAgIG1l
bWNweShlbnRyeS0+c291cmNlLCBzdHJpbmcsIChsZW5ndGggKyAxKSAqIHNpemVvZihjaGFyKSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGdsU2hhZGVyU291cmNlKHNoYWRlciwgMSwgJnN0cmluZywg
Jmxlbmd0aCk7Ci19Ci0KLURFTEVHQVRFX1RPX0dMXzMoc3RlbmNpbEZ1bmMsIFN0ZW5jaWxGdW5j
LCB1bnNpZ25lZCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nKQotCi1ERUxFR0FURV9UT19HTF80
KHN0ZW5jaWxGdW5jU2VwYXJhdGUsIFN0ZW5jaWxGdW5jU2VwYXJhdGUsIHVuc2lnbmVkIGxvbmcs
IHVuc2lnbmVkIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLURFTEVHQVRFX1RPX0dMXzEo
c3RlbmNpbE1hc2ssIFN0ZW5jaWxNYXNrLCB1bnNpZ25lZCBsb25nKQotCi1ERUxFR0FURV9UT19H
TF8yKHN0ZW5jaWxNYXNrU2VwYXJhdGUsIFN0ZW5jaWxNYXNrU2VwYXJhdGUsIHVuc2lnbmVkIGxv
bmcsIHVuc2lnbmVkIGxvbmcpCi0KLURFTEVHQVRFX1RPX0dMXzMoc3RlbmNpbE9wLCBTdGVuY2ls
T3AsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCi0KLURFTEVH
QVRFX1RPX0dMXzQoc3RlbmNpbE9wU2VwYXJhdGUsIFN0ZW5jaWxPcFNlcGFyYXRlLCB1bnNpZ25l
ZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQotCi1E
RUxFR0FURV9UT19HTF8zKHRleFBhcmFtZXRlcmYsIFRleFBhcmFtZXRlcmYsIHVuc2lnbmVkLCB1
bnNpZ25lZCwgZmxvYXQpOwotCi1ERUxFR0FURV9UT19HTF8zKHRleFBhcmFtZXRlcmksIFRleFBh
cmFtZXRlcmksIHVuc2lnbmVkLCB1bnNpZ25lZCwgaW50KTsKLQotREVMRUdBVEVfVE9fR0xfOSh0
ZXhTdWJJbWFnZTJELCBUZXhTdWJJbWFnZTJELCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQsIGNvbnN0
IHZvaWQqKQotCi1ERUxFR0FURV9UT19HTF8yKHVuaWZvcm0xZiwgVW5pZm9ybTFmLCBsb25nLCBm
bG9hdCkKLQotREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtMWZ2LCBVbmlmb3JtMWZ2LCBsb25nLCBp
bnQsIGZsb2F0KikKLQotREVMRUdBVEVfVE9fR0xfMih1bmlmb3JtMWksIFVuaWZvcm0xaSwgbG9u
ZywgaW50KQotCi1ERUxFR0FURV9UT19HTF8zKHVuaWZvcm0xaXYsIFVuaWZvcm0xaXYsIGxvbmcs
IGludCwgaW50KikKLQotREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtMmYsIFVuaWZvcm0yZiwgbG9u
ZywgZmxvYXQsIGZsb2F0KQotCi1ERUxFR0FURV9UT19HTF8zKHVuaWZvcm0yZnYsIFVuaWZvcm0y
ZnYsIGxvbmcsIGludCwgZmxvYXQqKQotCi1ERUxFR0FURV9UT19HTF8zKHVuaWZvcm0yaSwgVW5p
Zm9ybTJpLCBsb25nLCBpbnQsIGludCkKLQotREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtMml2LCBV
bmlmb3JtMml2LCBsb25nLCBpbnQsIGludCopCi0KLURFTEVHQVRFX1RPX0dMXzQodW5pZm9ybTNm
LCBVbmlmb3JtM2YsIGxvbmcsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCi0KLURFTEVHQVRFX1RPX0dM
XzModW5pZm9ybTNmdiwgVW5pZm9ybTNmdiwgbG9uZywgaW50LCBmbG9hdCopCi0KLURFTEVHQVRF
X1RPX0dMXzQodW5pZm9ybTNpLCBVbmlmb3JtM2ksIGxvbmcsIGludCwgaW50LCBpbnQpCi0KLURF
TEVHQVRFX1RPX0dMXzModW5pZm9ybTNpdiwgVW5pZm9ybTNpdiwgbG9uZywgaW50LCBpbnQqKQot
Ci1ERUxFR0FURV9UT19HTF81KHVuaWZvcm00ZiwgVW5pZm9ybTRmLCBsb25nLCBmbG9hdCwgZmxv
YXQsIGZsb2F0LCBmbG9hdCkKLQotREVMRUdBVEVfVE9fR0xfMyh1bmlmb3JtNGZ2LCBVbmlmb3Jt
NGZ2LCBsb25nLCBpbnQsIGZsb2F0KikKLQotREVMRUdBVEVfVE9fR0xfNSh1bmlmb3JtNGksIFVu
aWZvcm00aSwgbG9uZywgaW50LCBpbnQsIGludCwgaW50KQotCi1ERUxFR0FURV9UT19HTF8zKHVu
aWZvcm00aXYsIFVuaWZvcm00aXYsIGxvbmcsIGludCwgaW50KikKLQotREVMRUdBVEVfVE9fR0xf
NCh1bmlmb3JtTWF0cml4MmZ2LCBVbmlmb3JtTWF0cml4MmZ2LCBsb25nLCBpbnQsIGJvb2wsIGNv
bnN0IGZsb2F0KikKLQotREVMRUdBVEVfVE9fR0xfNCh1bmlmb3JtTWF0cml4M2Z2LCBVbmlmb3Jt
TWF0cml4M2Z2LCBsb25nLCBpbnQsIGJvb2wsIGNvbnN0IGZsb2F0KikKLQotREVMRUdBVEVfVE9f
R0xfNCh1bmlmb3JtTWF0cml4NGZ2LCBVbmlmb3JtTWF0cml4NGZ2LCBsb25nLCBpbnQsIGJvb2ws
IGNvbnN0IGZsb2F0KikKLQotREVMRUdBVEVfVE9fR0xfMSh1c2VQcm9ncmFtLCBVc2VQcm9ncmFt
LCBXZWJHTElkKQotCi1ERUxFR0FURV9UT19HTF8xKHZhbGlkYXRlUHJvZ3JhbSwgVmFsaWRhdGVQ
cm9ncmFtLCBXZWJHTElkKQotCi1ERUxFR0FURV9UT19HTF8yKHZlcnRleEF0dHJpYjFmLCBWZXJ0
ZXhBdHRyaWIxZiwgdW5zaWduZWQgbG9uZywgZmxvYXQpCi0KLURFTEVHQVRFX1RPX0dMXzIodmVy
dGV4QXR0cmliMWZ2LCBWZXJ0ZXhBdHRyaWIxZnYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGZsb2F0
KikKLQotREVMRUdBVEVfVE9fR0xfMyh2ZXJ0ZXhBdHRyaWIyZiwgVmVydGV4QXR0cmliMmYsIHVu
c2lnbmVkIGxvbmcsIGZsb2F0LCBmbG9hdCkKLQotREVMRUdBVEVfVE9fR0xfMih2ZXJ0ZXhBdHRy
aWIyZnYsIFZlcnRleEF0dHJpYjJmdiwgdW5zaWduZWQgbG9uZywgY29uc3QgZmxvYXQqKQotCi1E
RUxFR0FURV9UT19HTF80KHZlcnRleEF0dHJpYjNmLCBWZXJ0ZXhBdHRyaWIzZiwgdW5zaWduZWQg
bG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCkKLQotREVMRUdBVEVfVE9fR0xfMih2ZXJ0ZXhBdHRy
aWIzZnYsIFZlcnRleEF0dHJpYjNmdiwgdW5zaWduZWQgbG9uZywgY29uc3QgZmxvYXQqKQotCi1E
RUxFR0FURV9UT19HTF81KHZlcnRleEF0dHJpYjRmLCBWZXJ0ZXhBdHRyaWI0ZiwgdW5zaWduZWQg
bG9uZywgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQpCi0KLURFTEVHQVRFX1RPX0dMXzIodmVy
dGV4QXR0cmliNGZ2LCBWZXJ0ZXhBdHRyaWI0ZnYsIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGZsb2F0
KikKLQotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjp2ZXJ0ZXhBdHRyaWJQ
b2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwgaW50IHNpemUsIGludCB0eXBlLCBib29sIG5vcm1h
bGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewot
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA8
PSAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiByYWlzZSBleGNlcHRpb24uCi0gICAgICAgIC8vIExv
Z01lc3NhZ2VmKCgiYnVmZmVyRGF0YTogbm8gYnVmZmVyIGJvdW5kIikpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKGluZHggPCBOdW1UcmFja2VkUG9pbnRlclN0YXRlcykgewot
ICAgICAgICBWZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUmIHN0YXRlID0gbV92ZXJ0ZXhBdHRyaWJQ
b2ludGVyU3RhdGVbaW5keF07Ci0gICAgICAgIHN0YXRlLmJ1ZmZlciA9IG1fYm91bmRBcnJheUJ1
ZmZlcjsKLSAgICAgICAgc3RhdGUuaW5keCA9IGluZHg7Ci0gICAgICAgIHN0YXRlLnNpemUgPSBz
aXplOwotICAgICAgICBzdGF0ZS50eXBlID0gdHlwZTsKLSAgICAgICAgc3RhdGUubm9ybWFsaXpl
ZCA9IG5vcm1hbGl6ZWQ7Ci0gICAgICAgIHN0YXRlLnN0cmlkZSA9IHN0cmlkZTsKLSAgICAgICAg
c3RhdGUub2Zmc2V0ID0gb2Zmc2V0OwotICAgIH0KLQotICAgIGdsVmVydGV4QXR0cmliUG9pbnRl
cihpbmR4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90Pihv
ZmZzZXQpKSk7Ci19Ci0KLURFTEVHQVRFX1RPX0dMXzQodmlld3BvcnQsIFZpZXdwb3J0LCBsb25n
LCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQotCi11bnNpZ25lZCBXZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpjcmVhdGVCdWZmZXIoKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvOwotICAgIGdsR2VuQnVmZmVyc0FSQigxLCAmbyk7
Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXVuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVs
dEltcGw6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBHTHVpbnQgbyA9IDA7Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm8pOwotICAg
IHJldHVybiBvOwotfQotCi11bnNpZ25lZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBs
OjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1
cm4gZ2xDcmVhdGVQcm9ncmFtKCk7Ci19Ci0KLXVuc2lnbmVkIFdlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGw6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7Ci0gICAgR0x1aW50IG87Ci0gICAgZ2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZvKTsK
LSAgICByZXR1cm4gbzsKLX0KLQotdW5zaWduZWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgc2hhZGVyVHlwZSkKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBBU1NFUlQoc2hhZGVyVHlwZSA9PSBHTF9WRVJURVhfU0hB
REVSIHx8IHNoYWRlclR5cGUgPT0gR0xfRlJBR01FTlRfU0hBREVSKTsKLSAgICB1bnNpZ25lZCBz
aGFkZXIgPSBnbENyZWF0ZVNoYWRlcihzaGFkZXJUeXBlKTsKLSAgICBpZiAoc2hhZGVyKSB7Ci0g
ICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChzaGFkZXIpOwotICAgICAgICBpZiAocmVzdWx0ICE9IG1fc2hhZGVyU291cmNlTWFw
LmVuZCgpKQotICAgICAgICAgICAgZGVsZXRlIHJlc3VsdC0+c2Vjb25kOwotICAgICAgICBtX3No
YWRlclNvdXJjZU1hcC5zZXQoc2hhZGVyLCBuZXcgU2hhZGVyU291cmNlRW50cnkoc2hhZGVyVHlw
ZSkpOwotICAgIH0KLQotICAgIHJldHVybiBzaGFkZXI7Ci19Ci0KLXVuc2lnbmVkIFdlYkdyYXBo
aWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBvOwotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm8pOwot
ICAgIHJldHVybiBvOwotfQotCi12b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmRlbGV0ZUJ1ZmZlcih1bnNpZ25lZCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgZ2xEZWxldGVCdWZmZXJzQVJCKDEsICZidWZmZXIpOwotfQotCi12b2lkIFdlYkdy
YXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmRlbGV0ZUZyYW1lYnVmZmVyKHVuc2lnbmVkIGZy
YW1lYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzRVhUKDEsICZmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6ZGVsZXRlUHJvZ3JhbSh1bnNpZ25lZCBwcm9ncmFtKQotewotICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLX0K
LQotdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVSZW5kZXJidWZm
ZXIodW5zaWduZWQgcmVuZGVyYnVmZmVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwot
ICAgIGdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmcmVuZGVyYnVmZmVyKTsKLX0KLQotdm9p
ZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpkZWxldGVTaGFkZXIodW5zaWduZWQg
c2hhZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgU2hhZGVyU291cmNl
TWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7Ci0g
ICAgaWYgKHJlc3VsdCAhPSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKLSAgICAgICAgZGVsZXRl
IHJlc3VsdC0+c2Vjb25kOwotICAgIG1fc2hhZGVyU291cmNlTWFwLnJlbW92ZShyZXN1bHQpOwot
ICAgIGdsRGVsZXRlU2hhZGVyKHNoYWRlcik7Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlKQotewotICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJnRleHR1cmUpOwot
fQotCi1ib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFuZ2xlQ3JlYXRlQ29t
cGlsZXJzKCkKLXsKLSAgICBpZiAoIVNoSW5pdGlhbGl6ZSgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgcmVzb3VyY2VzOwotICAgIFNoSW5pdEJ1aWx0
SW5SZXNvdXJjZXMoJnJlc291cmNlcyk7Ci0gICAgZ2V0SW50ZWdlcnYoR0xfTUFYX1ZFUlRFWF9B
VFRSSUJTLCAmcmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIGdldEludGVnZXJ2KE1B
WF9WRVJURVhfVU5JRk9STV9WRUNUT1JTLCAmcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1WZWN0
b3JzKTsKLSAgICBnZXRJbnRlZ2VydihNQVhfVkFSWUlOR19WRUNUT1JTLCAmcmVzb3VyY2VzLk1h
eFZhcnlpbmdWZWN0b3JzKTsKLSAgICBnZXRJbnRlZ2VydihHTF9NQVhfVkVSVEVYX1RFWFRVUkVf
SU1BR0VfVU5JVFMsICZyZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAg
IGdldEludGVnZXJ2KEdMX01BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmcmVzb3Vy
Y2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdMX01B
WF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzKTsK
LSAgICBnZXRJbnRlZ2VydihNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmcmVzb3VyY2Vz
Lk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwotICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3Ig
T3BlbkdMIEVTLgotICAgIHJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0KLSAgICBtX2Zy
YWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NIQURFUiwg
U0hfV0VCR0xfU1BFQywgJnJlc291cmNlcyk7Ci0gICAgbV92ZXJ0ZXhDb21waWxlciA9IFNoQ29u
c3RydWN0Q29tcGlsZXIoU0hfVkVSVEVYX1NIQURFUiwgU0hfV0VCR0xfU1BFQywgJnJlc291cmNl
cyk7Ci0gICAgcmV0dXJuIChtX2ZyYWdtZW50Q29tcGlsZXIgJiYgbV92ZXJ0ZXhDb21waWxlcik7
Ci19Ci0KLXZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6YW5nbGVEZXN0cm95
Q29tcGlsZXJzKCkKLXsKLSAgICBpZiAobV9mcmFnbWVudENvbXBpbGVyKSB7Ci0gICAgICAgIFNo
RGVzdHJ1Y3QobV9mcmFnbWVudENvbXBpbGVyKTsKLSAgICAgICAgbV9mcmFnbWVudENvbXBpbGVy
ID0gMDsKLSAgICB9Ci0gICAgaWYgKG1fdmVydGV4Q29tcGlsZXIpIHsKLSAgICAgICAgU2hEZXN0
cnVjdChtX3ZlcnRleENvbXBpbGVyKTsKLSAgICAgICAgbV92ZXJ0ZXhDb21waWxlciA9IDA7Ci0g
ICAgfQotfQotCi1ib29sIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OmFuZ2xlVmFs
aWRhdGVTaGFkZXJTb3VyY2UoU2hhZGVyU291cmNlRW50cnkmIGVudHJ5KQotewotICAgIGVudHJ5
LmlzVmFsaWQgPSBmYWxzZTsKLSAgICBpZiAoZW50cnkudHJhbnNsYXRlZFNvdXJjZSkgewotICAg
ICAgICBmYXN0RnJlZShlbnRyeS50cmFuc2xhdGVkU291cmNlKTsKLSAgICAgICAgZW50cnkudHJh
bnNsYXRlZFNvdXJjZSA9IDA7Ci0gICAgfQotICAgIGlmIChlbnRyeS5sb2cpIHsKLSAgICAgICAg
ZmFzdEZyZWUoZW50cnkubG9nKTsKLSAgICAgICAgZW50cnkubG9nID0gMDsKLSAgICB9Ci0KLSAg
ICBTaEhhbmRsZSBjb21waWxlciA9IDA7Ci0gICAgc3dpdGNoIChlbnRyeS50eXBlKSB7Ci0gICAg
Y2FzZSBHTF9GUkFHTUVOVF9TSEFERVI6Ci0gICAgICAgIGNvbXBpbGVyID0gbV9mcmFnbWVudENv
bXBpbGVyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX1ZFUlRFWF9TSEFERVI6Ci0gICAg
ICAgIGNvbXBpbGVyID0gbV92ZXJ0ZXhDb21waWxlcjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGlmICghY29tcGlsZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghU2hD
b21waWxlKGNvbXBpbGVyLCAmZW50cnkuc291cmNlLCAxLCBTSF9PQkpFQ1RfQ09ERSkpIHsKLSAg
ICAgICAgaW50IGxvZ1NpemUgPSAwOwotICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lO
Rk9fTE9HX0xFTkdUSCwgJmxvZ1NpemUpOwotICAgICAgICBpZiAobG9nU2l6ZSA+IDEgJiYgdHJ5
RmFzdE1hbGxvYyhsb2dTaXplICogc2l6ZW9mKGNoYXIpKS5nZXRWYWx1ZShlbnRyeS5sb2cpKQot
ICAgICAgICAgICAgU2hHZXRJbmZvTG9nKGNvbXBpbGVyLCBlbnRyeS5sb2cpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgaWYgKG1faXNH
TEVTMikgewotICAgICAgICAvLyBBTkdMRSBkb2VzIG5vdCB5ZXQgaGF2ZSBhIEdMU0wgRVMgYmFj
a2VuZC4gVGhlcmVmb3JlIGlmIHRoZQotICAgICAgICAvLyBjb21waWxlIHN1Y2NlZWRzIHdlIHNl
bmQgdGhlIG9yaWdpbmFsIHNvdXJjZSBkb3duLgotICAgICAgICBsZW5ndGggPSBzdHJsZW4oZW50
cnkuc291cmNlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IDApCi0gICAgICAgICAgICArK2xlbmd0
aDsgLy8gQWRkIG51bGwgdGVybWluYXRvcgotICAgIH0gZWxzZQotICAgICAgICBTaEdldEluZm8o
Y29tcGlsZXIsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJmxlbmd0aCk7Ci0gICAgaWYgKGxlbmd0
aCA+IDEpIHsKLSAgICAgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxlbmd0aCAqIHNpemVvZihjaGFy
KSkuZ2V0VmFsdWUoZW50cnkudHJhbnNsYXRlZFNvdXJjZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChtX2lzR0xFUzIpCi0gICAgICAgICAgICBzdHJuY3B5KGVudHJ5
LnRyYW5zbGF0ZWRTb3VyY2UsIGVudHJ5LnNvdXJjZSwgbGVuZ3RoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCBlbnRyeS50cmFuc2xhdGVkU291
cmNlKTsKLSAgICB9Ci0gICAgZW50cnkuaXNWYWxpZCA9IHRydWU7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZB
UykKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbC5oCShyZXZpc2lvbiA3NTUyNykKKysrIFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDM4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsX2gKLSNk
ZWZpbmUgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbF9oCi0KLSNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQotCi0jaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCi0jaW5jbHVkZSAiV2Vi
R3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi0jaWYgIVBM
QVRGT1JNKENHKQotI2RlZmluZSBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FMTFkKLSNlbmRpZgot
bmFtZXNwYWNlIGdmeCB7Ci1jbGFzcyBHTENvbnRleHQ7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi0vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBXZWJHTC4gSW4gQ2hyb21pdW0s
IHVzaW5nIHRoaXMgY2xhc3MKLS8vIHJlcXVpcmVzIHRoZSBzYW5kYm94IHRvIGJlIGRpc2FibGVk
LCB3aGljaCBpcyBzdHJvbmdseSBkaXNjb3VyYWdlZC4KLS8vIEl0IGlzIHByb3ZpZGVkIGZvciBz
dXBwb3J0IG9mIHRlc3Rfc2hlbGwgYW5kIGFueSBDaHJvbWl1bSBwb3J0cwotLy8gd2hlcmUgYW4g
aW4tcmVuZGVyZXIgV2ViR0wgaW1wbGVtZW50YXRpb24gd291bGQgYmUgaGVscGZ1bC4KLQotY2xh
c3MgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCA6IHB1YmxpYyBXZWJHcmFwaGljc0Nv
bnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbCgp
OwotICAgIHZpcnR1YWwgfldlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwoKTsKLQotICAg
IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAgIC8vIFdlYkdyYXBoaWNzQ29udGV4dDNEIG1ldGhvZHMKLSAg
ICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZShXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyaWJ1dGVzLCBXZWJWaWV3KiwgYm9vbCk7Ci0gICAgdmlydHVhbCBib29sIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgdmlydHVhbCBpbnQgd2lkdGgoKTsKLSAgICB2aXJ0dWFsIGlu
dCBoZWlnaHQoKTsKLQotICAgIHZpcnR1YWwgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlKTsKLQot
ICAgIHZpcnR1YWwgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgdmlydHVhbCBib29sIHJlYWRC
YWNrRnJhbWVidWZmZXIodW5zaWduZWQgY2hhciogcGl4ZWxzLCBzaXplX3QgYnVmZmVyU2l6ZSk7
Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRQbGF0Zm9ybVRleHR1cmVJZCgpOwotICAg
IHZpcnR1YWwgdm9pZCBwcmVwYXJlVGV4dHVyZSgpOwotCi0gICAgdmlydHVhbCB2b2lkIHN5bnRo
ZXNpemVHTEVycm9yKHVuc2lnbmVkIGxvbmcgZXJyb3IpOwotICAgIHZpcnR1YWwgdm9pZCogbWFw
QnVmZmVyU3ViRGF0YUNIUk9NSVVNKHVuc2lnbmVkIHRhcmdldCwgaW50IG9mZnNldCwgaW50IHNp
emUsIHVuc2lnbmVkIGFjY2Vzcyk7Ci0gICAgdmlydHVhbCB2b2lkIHVubWFwQnVmZmVyU3ViRGF0
YUNIUk9NSVVNKGNvbnN0IHZvaWQqKTsKLSAgICB2aXJ0dWFsIHZvaWQqIG1hcFRleFN1YkltYWdl
MkRDSFJPTUlVTSh1bnNpZ25lZCB0YXJnZXQsIGludCBsZXZlbCwgaW50IHhvZmZzZXQsIGludCB5
b2Zmc2V0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQg
dHlwZSwgdW5zaWduZWQgYWNjZXNzKTsKLSAgICB2aXJ0dWFsIHZvaWQgdW5tYXBUZXhTdWJJbWFn
ZTJEQ0hST01JVU0oY29uc3Qgdm9pZCopOwotICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4dHVyZVRv
UGFyZW50VGV4dHVyZUNIUk9NSVVNKHVuc2lnbmVkIHRleHR1cmUsIHVuc2lnbmVkIHBhcmVudFRl
eHR1cmUpOwotCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0UmVxdWVzdGFibGVFeHRlbnNpb25z
Q0hST01JVU0oKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEV4dGVuc2lvbkNIUk9NSVVNKGNv
bnN0IGNoYXIqKTsKLQotICAgIHZpcnR1YWwgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxv
bmcgdGV4dHVyZSk7Ci0gICAgdmlydHVhbCB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTElkIHByb2dy
YW0sIFdlYkdMSWQgc2hhZGVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9u
KFdlYkdMSWQgcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3QgY2hhciogbmFtZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdM
SWQgYnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBXZWJHTElkIGZyYW1lYnVmZmVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmluZFJl
bmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJZCByZW5kZXJidWZmZXIpOwot
ICAgIHZpcnR1YWwgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xJ
ZCB0ZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3Vi
bGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOwotICAgIHZpcnR1YWwgdm9pZCBi
bGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9kZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5k
RXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0IsIHVuc2lnbmVkIGxvbmcgbW9k
ZUFscGhhKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3Rv
ciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmRGdW5jU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25l
ZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKLQotICAgIHZpcnR1YWwg
dm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgY29uc3Qgdm9p
ZCogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJ1ZmZlclN1
YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBpbnQgc2l6ZSwgY29uc3Qg
dm9pZCogZGF0YSk7Ci0KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKHVu
c2lnbmVkIGxvbmcgbWFzayk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyQ29sb3IoZG91YmxlIHJl
ZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKLSAgICB2aXJ0dWFs
IHZvaWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhclN0
ZW5jaWwobG9uZyBzKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29sb3JNYXNrKGJvb2wgcmVkLCBib29s
IGdyZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxl
U2hhZGVyKFdlYkdMSWQgc2hhZGVyKTsKLQotICAgIHZpcnR1YWwgdm9pZCBjb3B5VGV4SW1hZ2Uy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5h
bGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0LCBsb25nIGJvcmRlcik7Ci0gICAgdmlydHVhbCB2b2lkIGNvcHlUZXhTdWJJbWFn
ZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcg
eW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2Rl
KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYyk7Ci0gICAg
dmlydHVhbCB2b2lkIGRlcHRoTWFzayhib29sIGZsYWcpOwotICAgIHZpcnR1YWwgdm9pZCBkZXB0
aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOwotICAgIHZpcnR1YWwgdm9pZCBkZXRh
Y2hTaGFkZXIoV2ViR0xJZCBwcm9ncmFtLCBXZWJHTElkIHNoYWRlcik7Ci0gICAgdmlydHVhbCB2
b2lkIGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KTsK
LSAgICB2aXJ0dWFsIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWdu
ZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCk7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgdmlydHVh
bCB2b2lkIGZpbmlzaCgpOwotICAgIHZpcnR1YWwgdm9pZCBmbHVzaCgpOwotICAgIHZpcnR1YWwg
dm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2Vi
R0xJZCByZW5kZXJidWZmZXIpOwotICAgIHZpcnR1YWwgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUy
RCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25l
ZCBsb25nIHRleHRhcmdldCwgV2ViR0xJZCB0ZXh0dXJlLCBsb25nIGxldmVsKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSk7Ci0gICAgdmlydHVhbCB2b2lk
IGdlbmVyYXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKLQotICAgIHZpcnR1YWwgYm9v
bCBnZXRBY3RpdmVBdHRyaWIoV2ViR0xJZCBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBB
Y3RpdmVJbmZvJik7Ci0gICAgdmlydHVhbCBib29sIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xJZCBw
cm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBBY3RpdmVJbmZvJik7Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMSWQgcHJvZ3JhbSwgaW50IG1heENvdW50LCBp
bnQqIGNvdW50LCB1bnNpZ25lZCBpbnQqIHNoYWRlcnMpOwotCi0gICAgdmlydHVhbCBpbnQgIGdl
dEF0dHJpYkxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwgY29uc3QgY2hhciogbmFtZSk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSwgdW5zaWduZWQg
Y2hhciogdmFsdWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBpbnQqIHZhbHVlKTsKLQot
ICAgIHZpcnR1YWwgQXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgdmly
dHVhbCB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250
ZXh0TG9zdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIGdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBu
YW1lLCBmbG9hdCogdmFsdWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0
dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwotCi0gICAgdmlydHVh
bCB2b2lkIGdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwotCi0g
ICAgdmlydHVhbCB2b2lkIGdldFByb2dyYW1pdihXZWJHTElkIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGludCogdmFsdWUpOwotCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0UHJvZ3Jh
bUluZm9Mb2coV2ViR0xJZCBwcm9ncmFtKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgaW50KiB2YWx1ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2hhZGVyaXYoV2ViR0xJZCBz
aGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpOwotCi0gICAgdmlydHVhbCBX
ZWJTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTElkIHNoYWRlcik7Ci0KLSAgICAvLyBUQkQK
LSAgICAvLyB2b2lkIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlw
ZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7
Ci0KLSAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xJZCBzaGFkZXIp
OwotICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCogdmFsdWUpOwotICAgIHZpcnR1YWwgdm9pZCBn
ZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgaW50KiB2YWx1ZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VW5pZm9ybWZ2KFdlYkdMSWQg
cHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgZmxvYXQqIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0VW5pZm9ybWl2KFdlYkdMSWQgcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgaW50KiB2YWx1ZSk7
Ci0KLSAgICB2aXJ0dWFsIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMSWQgcHJvZ3JhbSwg
Y29uc3QgY2hhciogbmFtZSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliZnYo
dW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSwgZmxvYXQqIHZhbHVlKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwg
dW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSk7Ci0KLSAgICB2aXJ0dWFsIGxvbmcgZ2V0
VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOwotCi0gICAgdmlydHVhbCB2b2lkIGhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgbW9kZSk7Ci0gICAgdmlydHVhbCBib29sIGlzQnVmZmVyKFdlYkdMSWQgYnVmZmVy
KTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKHVuc2lnbmVkIGxvbmcgY2FwKTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcihXZWJHTElkIGZyYW1lYnVmZmVyKTsKLSAgICB2aXJ0
dWFsIGJvb2wgaXNQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSk7Ci0gICAgdmlydHVhbCBib29sIGlz
UmVuZGVyYnVmZmVyKFdlYkdMSWQgcmVuZGVyYnVmZmVyKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXNT
aGFkZXIoV2ViR0xJZCBzaGFkZXIpOwotICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoV2ViR0xJ
ZCB0ZXh0dXJlKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVdpZHRoKGRvdWJsZSk7Ci0gICAgdmly
dHVhbCB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMSWQgcHJvZ3JhbSk7Ci0gICAgdmlydHVhbCB2b2lk
IHBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pOwotICAgIHZpcnR1
YWwgdm9pZCBwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cyk7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3
aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25l
ZCBsb25nIHR5cGUsIHZvaWQqIHBpeGVscyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVNo
YWRlckNvbXBpbGVyKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Ft
cGxlQ292ZXJhZ2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCk7Ci0gICAgdmlydHVhbCB2b2lk
IHNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMSWQgc2hhZGVy
LCBjb25zdCBjaGFyKiBzdHJpbmcpOwotICAgIHZpcnR1YWwgdm9pZCBzdGVuY2lsRnVuYyh1bnNp
Z25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOwotICAgIHZpcnR1
YWwgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQg
bG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKTsKLSAgICB2aXJ0dWFsIHZv
aWQgc3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyBtYXNrKTsKLSAgICB2aXJ0dWFsIHZvaWQgc3Rl
bmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgbWFzayk7
Ci0gICAgdmlydHVhbCB2b2lkIHN0ZW5jaWxPcCh1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVk
IGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpOwotICAgIHZpcnR1YWwgdm9pZCBzdGVu
Y2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5z
aWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBp
bnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQg
Ym9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cyk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4UGFyYW1ldGVyZih1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIHBuYW1lLCBmbG9hdCBwYXJhbSk7Ci0gICAgdmlydHVhbCB2b2lkIHRleFBhcmFtZXRl
cmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKTsKLQotICAgIHZp
cnR1YWwgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKTsKLQotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMWYobG9uZyBsb2NhdGlvbiwgZmxv
YXQgeCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgaW50IGNv
dW50LCBmbG9hdCogdik7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaShsb25nIGxvY2F0aW9u
LCBpbnQgeCk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0xaXYobG9uZyBsb2NhdGlvbiwgaW50
IGNvdW50LCBpbnQqIHYpOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtMmYobG9uZyBsb2NhdGlv
biwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0yZnYobG9uZyBs
b2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdik7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0y
aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHkpOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3Jt
Mml2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgaW50KiB2KTsKLSAgICB2aXJ0dWFsIHZvaWQg
dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwotICAg
IHZpcnR1YWwgdm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIGludCBjb3VudCwgZmxvYXQq
IHYpOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGlu
dCB5LCBpbnQgeik7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwg
aW50IGNvdW50LCBpbnQqIHYpOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtNGYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7Ci0gICAgdmlydHVhbCB2
b2lkIHVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgaW50IGNvdW50LCBmbG9hdCogdik7Ci0gICAg
dmlydHVhbCB2b2lkIHVuaWZvcm00aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6
LCBpbnQgdyk7Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm00aXYobG9uZyBsb2NhdGlvbiwgaW50
IGNvdW50LCBpbnQqIHYpOwotICAgIHZpcnR1YWwgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGxvbmcg
bG9jYXRpb24sIGludCBjb3VudCwgYm9vbCB0cmFuc3Bvc2UsIGNvbnN0IGZsb2F0KiB2YWx1ZSk7
Ci0gICAgdmlydHVhbCB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgaW50IGNv
dW50LCBib29sIHRyYW5zcG9zZSwgY29uc3QgZmxvYXQqIHZhbHVlKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBpbnQgY291bnQsIGJvb2wgdHJhbnNw
b3NlLCBjb25zdCBmbG9hdCogdmFsdWUpOwotCi0gICAgdmlydHVhbCB2b2lkIHVzZVByb2dyYW0o
V2ViR0xJZCBwcm9ncmFtKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsaWRhdGVQcm9ncmFtKFdlYkdM
SWQgcHJvZ3JhbSk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWYodW5zaWduZWQg
bG9uZyBpbmR4LCBmbG9hdCB4KTsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVu
c2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7Ci0gICAgdmlydHVhbCB2b2lk
IHZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0g
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGNvbnN0
IGZsb2F0KiB2YWx1ZXMpOwotICAgIHZpcnR1YWwgdm9pZCB2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOwotICAgIHZpcnR1YWwgdm9p
ZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBjb25zdCBmbG9hdCogdmFsdWVz
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBpbmR4LCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKLSAgICB2aXJ0dWFsIHZvaWQgdmVy
dGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgY29uc3QgZmxvYXQqIHZhbHVlcyk7Ci0g
ICAgdmlydHVhbCB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBp
bnQgc2l6ZSwgaW50IHR5cGUsIGJvb2wgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZz
ZXQpOwotCi0gICAgdmlydHVhbCB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7Ci0KLSAgICAvLyBTdXBwb3J0IGZv
ciBidWZmZXIgY3JlYXRpb24gYW5kIGRlbGV0aW9uCi0gICAgdmlydHVhbCB1bnNpZ25lZCBjcmVh
dGVCdWZmZXIoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0g
ICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgdmlydHVhbCB1bnNpZ25l
ZCBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVNoYWRl
cih1bnNpZ25lZCBsb25nKTsKLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUoKTsK
LQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVCdWZmZXIodW5zaWduZWQpOwotICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVGcmFtZWJ1ZmZlcih1bnNpZ25lZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZVByb2dyYW0odW5zaWduZWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIo
dW5zaWduZWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVTaGFkZXIodW5zaWduZWQpOwotICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVkKTsKLQotcHJpdmF0ZToKLSAgICBX
ZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0gICAgYm9vbCBt
X2luaXRpYWxpemVkOwotICAgIGJvb2wgbV9yZW5kZXJEaXJlY3RseVRvV2ViVmlldzsKLSAgICBi
b29sIG1faXNHTEVTMjsKLSAgICBib29sIG1faGF2ZUVYVEZyYW1lYnVmZmVyT2JqZWN0OwotICAg
IGJvb2wgbV9oYXZlRVhURnJhbWVidWZmZXJNdWx0aXNhbXBsZTsKLSAgICBib29sIG1faGF2ZUFO
R0xFRnJhbWVidWZmZXJNdWx0aXNhbXBsZTsKLQotICAgIHVuc2lnbmVkIGludCBtX3RleHR1cmU7
Ci0gICAgdW5zaWduZWQgaW50IG1fZmJvOwotICAgIHVuc2lnbmVkIGludCBtX2RlcHRoU3RlbmNp
bEJ1ZmZlcjsKLSAgICB1bnNpZ25lZCBpbnQgbV9jYWNoZWRXaWR0aCwgbV9jYWNoZWRIZWlnaHQ7
Ci0KLSAgICAvLyBGb3IgbXVsdGlzYW1wbGluZwotICAgIHVuc2lnbmVkIGludCBtX211bHRpc2Ft
cGxlRkJPOwotICAgIHVuc2lnbmVkIGludCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
OwotICAgIHVuc2lnbmVkIGludCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7Ci0KLSAgICAvLyBG
b3IgdHJhY2tpbmcgd2hpY2ggRkJPIGlzIGJvdW5kCi0gICAgdW5zaWduZWQgaW50IG1fYm91bmRG
Qk87Ci0KLSAgICAvLyBGb3IgdHJhY2tpbmcgd2hpY2ggdGV4dHVyZSBpcyBib3VuZAotICAgIHVu
c2lnbmVkIGludCBtX2JvdW5kVGV4dHVyZTsKLSAgICAKLSAgICAvLyBGQk8gdXNlZCBmb3IgY29w
eWluZyBjaGlsZCB0ZXh0dXJlIHRvIHBhcmVudCB0ZXh0dXJlLgotICAgIHVuc2lnbmVkIG1fY29w
eVRleHR1cmVUb1BhcmVudFRleHR1cmVGQk87Ci0KLSNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZF
UlRJQ0FMTFkKLSAgICB1bnNpZ25lZCBjaGFyKiBtX3NjYW5saW5lOwotICAgIHZvaWQgZmxpcFZl
cnRpY2FsbHkodW5zaWduZWQgY2hhciogZnJhbWVidWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgaGVpZ2h0KTsKLSNlbmRpZgotCi0gICAgLy8gVGFrZSBpbnRvIGFjY291bnQgdGhlIHVz
ZXIncyByZXF1ZXN0ZWQgY29udGV4dCBjcmVhdGlvbiBhdHRyaWJ1dGVzLCBpbgotICAgIC8vIHBh
cnRpY3VsYXIgc3RlbmNpbCBhbmQgYW50aWFsaWFzLCBhbmQgZGV0ZXJtaW5lIHdoaWNoIGNvdWxk
IG9yIGNvdWxkCi0gICAgLy8gbm90IGJlIGhvbm9yZWQgYmFzZWQgb24gdGhlIGNhcGFiaWxpdGll
cyBvZiB0aGUgT3BlbkdMIGltcGxlbWVudGF0aW9uLgotICAgIHZvaWQgdmFsaWRhdGVBdHRyaWJ1
dGVzKCk7Ci0KLSAgICAvLyBSZXNvbHZlIHRoZSBnaXZlbiByZWN0YW5nbGUgb2YgdGhlIG11bHRp
c2FtcGxlZCBmcmFtZWJ1ZmZlciBpZiBuZWNlc3NhcnkuCi0gICAgdm9pZCByZXNvbHZlTXVsdGlz
YW1wbGVkRnJhbWVidWZmZXIodW5zaWduZWQgeCwgdW5zaWduZWQgeSwgdW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCk7Ci0KLSAgICAvLyBOb3RlOiB3ZSBhcmVuJ3QgY3VycmVudGx5IHVz
aW5nIHRoaXMgaW5mb3JtYXRpb24sIGJ1dCB3ZSB3aWxsCi0gICAgLy8gbmVlZCB0byBpbiBvcmRl
ciB0byB2ZXJpZnkgdGhhdCBhbGwgZW5hYmxlZCB2ZXJ0ZXggYXJyYXlzIGhhdmUKLSAgICAvLyBh
IHZhbGlkIGJ1ZmZlciBib3VuZCAtLSB0byBhdm9pZCBjcmFzaGVzIG9uIGNlcnRhaW4gY2FyZHMu
Ci0gICAgdW5zaWduZWQgaW50IG1fYm91bmRBcnJheUJ1ZmZlcjsKLSAgICBzdHJ1Y3QgVmVydGV4
QXR0cmliUG9pbnRlclN0YXRlIHsKLSAgICAgICAgVmVydGV4QXR0cmliUG9pbnRlclN0YXRlKCk7
Ci0KLSAgICAgICAgYm9vbCBlbmFibGVkOwotICAgICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcjsK
LSAgICAgICAgdW5zaWduZWQgbG9uZyBpbmR4OwotICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAg
aW50IHR5cGU7Ci0gICAgICAgIGJvb2wgbm9ybWFsaXplZDsKLSAgICAgICAgdW5zaWduZWQgbG9u
ZyBzdHJpZGU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotICAgIH07Ci0KLSAgICBl
bnVtIHsKLSAgICAgICAgTnVtVHJhY2tlZFBvaW50ZXJTdGF0ZXMgPSAyCi0gICAgfTsKLSAgICBW
ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGUgbV92ZXJ0ZXhBdHRyaWJQb2ludGVyU3RhdGVbTnVtVHJh
Y2tlZFBvaW50ZXJTdGF0ZXNdOwotCi0gICAgLy8gRXJyb3JzIHJhaXNlZCBieSBzeW50aGVzaXpl
R0xFcnJvcigpLgotICAgIExpc3RIYXNoU2V0PHVuc2lnbmVkIGxvbmc+IG1fc3ludGhldGljRXJy
b3JzOwotCi0gICAgT3duUHRyPGdmeDo6R0xDb250ZXh0PiBtX2dsQ29udGV4dDsKLQotICAgIC8v
IEFOR0xFIHJlbGF0ZWQuCi0gICAgc3RydWN0IFNoYWRlclNvdXJjZUVudHJ5IHsKLSAgICAgICAg
U2hhZGVyU291cmNlRW50cnkodW5zaWduZWQgbG9uZyBzaGFkZXJUeXBlKQotICAgICAgICAgICAg
ICAgIDogdHlwZShzaGFkZXJUeXBlKQotICAgICAgICAgICAgICAgICwgc291cmNlKDApCi0gICAg
ICAgICAgICAgICAgLCBsb2coMCkKLSAgICAgICAgICAgICAgICAsIHRyYW5zbGF0ZWRTb3VyY2Uo
MCkKLSAgICAgICAgICAgICAgICAsIGlzVmFsaWQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAg
fQotCi0gICAgICAgIH5TaGFkZXJTb3VyY2VFbnRyeSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChzb3VyY2UpCi0gICAgICAgICAgICAgICAgZmFzdEZyZWUoc291cmNlKTsKLSAgICAgICAg
ICAgIGlmIChsb2cpCi0gICAgICAgICAgICAgICAgZmFzdEZyZWUobG9nKTsKLSAgICAgICAgICAg
IGlmICh0cmFuc2xhdGVkU291cmNlKQotICAgICAgICAgICAgICAgIGZhc3RGcmVlKHRyYW5zbGF0
ZWRTb3VyY2UpOwotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlOwotICAg
ICAgICBjaGFyKiBzb3VyY2U7Ci0gICAgICAgIGNoYXIqIGxvZzsKLSAgICAgICAgY2hhciogdHJh
bnNsYXRlZFNvdXJjZTsKLSAgICAgICAgYm9vbCBpc1ZhbGlkOwotICAgIH07Ci0KLSAgICBib29s
IGFuZ2xlQ3JlYXRlQ29tcGlsZXJzKCk7Ci0gICAgdm9pZCBhbmdsZURlc3Ryb3lDb21waWxlcnMo
KTsKLSAgICBib29sIGFuZ2xlVmFsaWRhdGVTaGFkZXJTb3VyY2UoU2hhZGVyU291cmNlRW50cnkm
IGVudHJ5KTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJHTElkLCBTaGFkZXJTb3VyY2VFbnRy
eSo+IFNoYWRlclNvdXJjZU1hcDsKLSAgICBTaGFkZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VN
YXA7Ci0KLSAgICBTaEhhbmRsZSBtX2ZyYWdtZW50Q29tcGlsZXI7Ci0gICAgU2hIYW5kbGUgbV92
ZXJ0ZXhDb21waWxlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
RU5BQkxFKDNEX0NBTlZBUykKLQotI2VuZGlmCg==
</data>
<flag name="review"
          id="69927"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="69928"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>