<?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>134138</bug_id>
          
          <creation_ts>2014-06-20 15:48:07 -0700</creation_ts>
          <short_desc>[EFL] Remove DumpRenderTree/efl and EWebLauncher</short_desc>
          <delta_ts>2014-06-20 22:54:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>134087</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1017099</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-06-20 15:48:07 -0700</bug_when>
    <thetext>SSIA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017139</commentid>
    <comment_count>1</comment_count>
      <attachid>233488</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-06-20 17:01:02 -0700</bug_when>
    <thetext>Created attachment 233488
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017196</commentid>
    <comment_count>2</comment_count>
      <attachid>233488</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2014-06-20 22:18:02 -0700</bug_when>
    <thetext>Comment on attachment 233488
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017197</commentid>
    <comment_count>3</comment_count>
      <attachid>233488</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-06-20 22:21:45 -0700</bug_when>
    <thetext>Comment on attachment 233488
Patch

thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017202</commentid>
    <comment_count>4</comment_count>
      <attachid>233488</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-06-20 22:54:05 -0700</bug_when>
    <thetext>Comment on attachment 233488
Patch

Clearing flags on attachment: 233488

Committed r170230: &lt;http://trac.webkit.org/changeset/170230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017203</commentid>
    <comment_count>5</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-06-20 22:54:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233488</attachid>
            <date>2014-06-20 17:01:02 -0700</date>
            <delta_ts>2014-06-20 22:54:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134138-20140621090038.patch</filename>
            <type>text/plain</type>
            <size>262982</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMjIzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDliZDNkMjgzNGU2ZWQ3N2U1NTUyZTgxYWM2YjYzOGQ0
N2VlODQ3MC4uNDA4ZjEzZDJiZmMxNjNlMWQwNmEzNWFjNjJiYTMzNjRiNDU1ZDAwOSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3
IEBACisyMDE0LTA2LTIwICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKwor
ICAgICAgICBbRUZMXSBSZW1vdmUgRHVtcFJlbmRlclRyZWUvZWZsIGFuZCBFV2ViTGF1bmNoZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDEzOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIER1bXBSZW5k
ZXJUcmVlL2VmbCBhbmQgRVdlYkxhdW5jaGVyIGFyZSBub3QgbmVjZXNzYXJ5IGFueW1vcmUgYmVj
YXVzZSBXZWJLaXQxIEVGTCB3aWxsIGJlIHJlbW92ZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybUVmbC5jbWFrZTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmw6IFJlbW92ZWQgZW50aXJlIGRpcmVjdG9y
eS4KKyAgICAgICAgKiBFV2ViTGF1bmNoZXI6IERpdHRvLgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcDogUmVuYW1lZCBmcm9t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9Gb250TWFuYWdlbWVudC5jcHAuCisgICAgICAgIChi
dWlsZFBhdGgpOgorICAgICAgICAoZ2V0Q29yZUZvbnRGaWxlcyk6CisgICAgICAgIChhZGRGb250
RGlyZWN0b3J5KToKKyAgICAgICAgKGFkZEZvbnRGaWxlcyk6CisgICAgICAgIChnZXRDdXN0b21C
dWlsZERpcik6CisgICAgICAgIChnZXRQbGF0Zm9ybUZvbnRzUGF0aCk6CisgICAgICAgIChhZGRG
b250c1RvRW52aXJvbm1lbnQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50Lmg6IFJlbmFtZWQgZnJvbSBUb29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuaC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtRWZsLmNtYWtlOgorCiAyMDE0LTA2LTIwICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgTmFtZSBtb3ZpbmcuIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9U
b29scy9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0NNYWtlTGlzdHMudHh0CmluZGV4IGZmMDQyMzc0
MmY3ZjMwMTQyMGZjYTYxNjM5Y2Y0NzRlMTY3NDg1MGQuLmIxMjQ4MDQ4M2VhOTFkOTk3OTkyMTQx
YzM4MmE2M2Y2ZTVkMTAwYTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NNYWtlTGlzdHMudHh0CisrKyBi
L1Rvb2xzL0NNYWtlTGlzdHMudHh0CkBAIC00LDcgKzQsNiBAQCBlbmRpZiAoKQogCiBpZiAoIiR7
UE9SVH0iIFNUUkVRVUFMICJFZmwiKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoSW1hZ2VEaWZmKQot
ICAgIGFkZF9zdWJkaXJlY3RvcnkoRVdlYkxhdW5jaGVyL0NvbnRyb2xUaGVtZSkKIAogICAgIGFk
ZF9zdWJkaXJlY3RvcnkoTWluaUJyb3dzZXIvZWZsKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoRHVt
cFJlbmRlclRyZWUvVGVzdE5ldHNjYXBlUGx1Z0luKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvUGxhdGZvcm1FZmwuY21ha2UgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9y
bUVmbC5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM3NzM5OGFhNWVlN2M3
NDVmNDkwYjQ3NWU4NWI2MTg3NzRlZmRhZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9QbGF0Zm9ybUVmbC5jbWFrZQor
KysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLWxpc3QoQVBQRU5EIER1bXBSZW5kZXJUcmVl
X1NPVVJDRVMKLSAgICBhdGsvQWNjZXNzaWJpbGl0eUNhbGxiYWNrc0F0ay5jcHAKLSAgICBhdGsv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwCi0gICAgYXRrL0FjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyQXRrLmNwcAotICAgIGF0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRr
LmNwcAotCi0gICAgY2Fpcm8vUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmNwcAotCi0gICAgZWZsL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyRWZsLmNwcAotICAgIGVmbC9EdW1wSGlzdG9yeUl0ZW0uY3Bw
Ci0gICAgZWZsL0R1bXBSZW5kZXJUcmVlLmNwcAotICAgIGVmbC9EdW1wUmVuZGVyVHJlZUNocm9t
ZS5jcHAKLSAgICBlZmwvRHVtcFJlbmRlclRyZWVWaWV3LmNwcAotICAgIGVmbC9FZGl0aW5nQ2Fs
bGJhY2tzLmNwcAotICAgIGVmbC9FdmVudFNlbmRlci5jcHAKLSAgICBlZmwvRm9udE1hbmFnZW1l
bnQuY3BwCi0gICAgZWZsL0dDQ29udHJvbGxlckVmbC5jcHAKLSAgICBlZmwvSlNTdHJpbmdVdGls
cy5jcHAKLSAgICBlZmwvUGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAKLSAgICBlZmwvVGVzdFJ1bm5l
ckVmbC5jcHAKLSAgICBlZmwvVGV4dElucHV0Q29udHJvbGxlci5jcHAKLSAgICBlZmwvV29ya1F1
ZXVlSXRlbUVmbC5jcHAKLSkKLQotbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfTElCUkFSSUVT
Ci0gICAgJHtDQUlST19MSUJSQVJJRVN9Ci0gICAgJHtFQ09SRV9FVkFTX0xJQlJBUklFU30KLSAg
ICAke0VDT1JFX0ZJTEVfTElCUkFSSUVTfQotICAgICR7RUNPUkVfSU5QVVRfTElCUkFSSUVTfQot
ICAgICR7RUNPUkVfTElCUkFSSUVTfQotICAgICR7RURKRV9MSUJSQVJJRVN9Ci0gICAgJHtFSU5B
X0xJQlJBUklFU30KLSAgICAke0VPX0xJQlJBUklFU30KLSAgICAke0VWQVNfTElCUkFSSUVTfQot
ICAgICR7Rk9OVENPTkZJR19MSUJSQVJJRVN9Ci0gICAgJHtHTElCX0xJQlJBUklFU30KLSAgICAk
e0xJQlNPVVBfTElCUkFSSUVTfQotICAgICR7TElCWE1MMl9MSUJSQVJJRVN9Ci0gICAgJHtMSUJY
U0xUX0xJQlJBUklFU30gLWxtCi0gICAgJHtTUUxJVEVfTElCUkFSSUVTfQotKQotCi1saXN0KEFQ
UEVORCBEdW1wUmVuZGVyVHJlZV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCS0lUX0RJ
Un0vZWZsL2V3ayIKLSAgICAke1dFQktJVF9ESVJ9L2VmbAotICAgICR7V0VCS0lUX0RJUn0vZWZs
L1dlYkNvcmVTdXBwb3J0Ci0gICAgJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8KLSAgICAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAKLSAgICAke1dURl9E
SVJ9L3d0Zi9lZmwKLSAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvYXRrCi0gICAgJHtU
T09MU19ESVJ9L0R1bXBSZW5kZXJUcmVlL2NhaXJvCi0gICAgJHtUT09MU19ESVJ9L0R1bXBSZW5k
ZXJUcmVlL2VmbAotICAgICR7Q0FJUk9fSU5DTFVERV9ESVJTfQotICAgICR7RUNPUkVfSU5DTFVE
RV9ESVJTfQotICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQotICAgICR7RUNPUkVfRVZBU19JTkNM
VURFX0RJUlN9Ci0gICAgJHtFQ09SRV9GSUxFX0lOQ0xVREVfRElSU30KLSAgICAke0VDT1JFX0lO
UFVUX0lOQ0xVREVfRElSU30KLSAgICAke0VESkVfSU5DTFVERV9ESVJTfQotICAgICR7RUlOQV9J
TkNMVURFX0RJUlN9Ci0gICAgJHtFT19JTkNMVURFX0RJUlN9Ci0gICAgJHtFVkFTX0lOQ0xVREVf
RElSU30KLSAgICAke0ZPTlRDT05GSUdfSU5DTFVERV9ESVJ9Ci0gICAgJHtHTElCX0lOQ0xVREVf
RElSU30KLSAgICAke0xJQlNPVVBfSU5DTFVERV9ESVJTfQotKQotCi1pZiAoRU5BQkxFX0FDQ0VT
U0lCSUxJVFkpCi0gICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVfSU5DTFVERV9ESVJFQ1RP
UklFUwotICAgICAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvYXRrCi0gICAgICAgICR7
QVRLX0lOQ0xVREVfRElSU30KLSAgICApCi0gICAgbGlzdChBUFBFTkQgRHVtcFJlbmRlclRyZWVf
TElCUkFSSUVTCi0gICAgICAgICR7QVRLX0xJQlJBUklFU30KLSAgICApCi1lbmRpZiAoKQotCi0j
IEZJWE1FOiBFRkwgcG9ydCBuZWVkcyB0byBoYXZlIG93biB0ZXN0IGZvbnQgYW5kIGZvbnQgY29u
ZmlndXJlIGluc3RlYWQgb2YgZ3RrIHRlc3QgZm9udCBpbiBmdXR1cmUKLSMgRklYTUU6IERPV05M
T0FERURfRk9OVFNfRElSIHNob3VsZCBub3QgaGFyZGNvZGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1
cmUuCi1hZGRfZGVmaW5pdGlvbnMoLURGT05UU19DT05GX0RJUj0iJHtUT09MU19ESVJ9L1dlYktp
dFRlc3RSdW5uZXIvZ3RrL2ZvbnRzIgotICAgICAgICAgICAgICAgIC1ERE9XTkxPQURFRF9GT05U
U19ESVI9IiR7Q01BS0VfU09VUkNFX0RJUn0vV2ViS2l0QnVpbGQvRGVwZW5kZW5jaWVzL1NvdXJj
ZS93ZWJraXRndGstdGVzdC1mb250cyIpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9lZmwvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJFZmwuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyRWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjgzZTY1M2I1Yjk5MzUyOTc5OTk1Y2IyOWMzNjk5YWIwNTU1MThhMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJFZmwuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFu
IE1pY2hhZWwgQWxvbnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmlj
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmgiCi0KLSNpZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0KLSNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5Q2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
IgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVD
aHJvbWUuaCIKLSNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRF
ZmwuaCIKLQotI2luY2x1ZGUgPGF0ay9hdGsuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5p
cXVlUHRyLmg+Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OmZvY3VzZWRFbGVtZW50KCkKLXsKLSAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSAgRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmb2N1c2VkQWNjZXNzaWJsZUVsZW1lbnQoYnJvd3Nlci0+
bWFpbkZyYW1lKCkpOwotICAgIGlmICghYWNjZXNzaWJsZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudChhY2Nlc3NpYmxlKTsKLX0KLQotQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQo
KQotewotICAgIEF0a09iamVjdCogYWNjZXNzaWJsZSA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6cm9vdEFjY2Vzc2libGVFbGVtZW50KGJyb3dzZXItPm1haW5GcmFtZSgpKTsKLSAgICBpZiAo
IWFjY2Vzc2libGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQoYWNjZXNzaWJsZSk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBp
ZCkKLXsKLSAgICBBdGtPYmplY3QqIHJvb3QgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnJv
b3RBY2Nlc3NpYmxlRWxlbWVudChicm93c2VyLT5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKCFyb290
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGlkKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBpZEJ1
ZmZlcihzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFsbG9jKGJ1ZmZlclNpemUpKSk7Ci0gICAgSlNT
dHJpbmdHZXRVVEY4Q1N0cmluZyhpZCwgaWRCdWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotCi0g
ICAgQXRrT2JqZWN0KiByZXN1bHQgPSBjaGlsZEVsZW1lbnRCeUlkKHJvb3QsIGlkQnVmZmVyLmdl
dCgpKTsKLSAgICBpZiAoQVRLX0lTX09CSkVDVChyZXN1bHQpKQotICAgICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudChyZXN1bHQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBIaXN0b3J5SXRlbS5j
cHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcEhpc3RvcnlJdGVtLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI1YjEyODQ3ZDAzOWQzYTI2M2ZmMWU5ZGQ4OWFmMTU0
Njc2ZGE4Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcEhpc3RvcnlJdGVtLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBF
bWJlZGRlZCBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmlj
cwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwot
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkR1bXBIaXN0b3J5
SXRlbS5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRlICJEdW1wUmVu
ZGVyVHJlZUNocm9tZS5oIgotI2luY2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVl
U3VwcG9ydEVmbC5oIgotI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5jbHVkZSA8RVdlYktp
dC5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1Fd2tfSGlzdG9yeV9J
dGVtKiBwcmV2VGVzdEJGSXRlbSA9IDA7Ci1jb25zdCB1bnNpZ25lZCBoaXN0b3J5SXRlbUluZGVu
dCA9IDg7Ci0KLXN0YXRpYyBib29sIGNvbXBhcmVIaXN0b3J5SXRlbXNCeVRhcmdldChjb25zdCBF
d2tfSGlzdG9yeV9JdGVtKiBpdGVtMSwgY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbTIpCi17
Ci0gICAgcmV0dXJuIFdURjo6Y29kZVBvaW50Q29tcGFyZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRF
Zmw6Omhpc3RvcnlJdGVtVGFyZ2V0KGl0ZW0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6aGlzdG9yeUl0ZW1UYXJnZXQoaXRlbTIp
KSA8IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXBIaXN0b3J5SXRlbShjb25zdCBFd2tfSGlzdG9y
eV9JdGVtKiBpdGVtLCBpbnQgaW5kZW50LCBib29sIGN1cnJlbnQpCi17Ci0gICAgQVNTRVJUKGl0
ZW0pOwotICAgIGludCBzdGFydCA9IDA7Ci0gICAgaWYgKGN1cnJlbnQpIHsKLSAgICAgICAgcHJp
bnRmKCJjdXJyLT4iKTsKLSAgICAgICAgc3RhcnQgPSA2OwotICAgIH0KLSAgICBmb3IgKGludCBp
ID0gc3RhcnQ7IGkgPCBpbmRlbnQ7IGkrKykKLSAgICAgICAgcHV0Y2hhcignICcpOwotCi0gICAg
Ly8gbm9ybWFsaXplIGZpbGUgVVJMcy4KLSAgICBjb25zdCBjaGFyKiB1cmkgPSBld2tfaGlzdG9y
eV9pdGVtX3VyaV9nZXQoaXRlbSk7Ci0gICAgaWYgKCFzdHJuY2FzZWNtcCh1cmksICJmaWxlOi8v
Iiwgc2l6ZW9mKCJmaWxlOi8vIikgLSAxKSkgewotICAgICAgICBjb25zdCBjaGFyKiBwb3MgPSBz
dHJzdHIodXJpLCAiL0xheW91dFRlc3RzLyIpOwotICAgICAgICBpZiAoIXBvcykKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBwcmludGYoIihmaWxlIHRlc3QpOiVzIiwgcG9zICsgc2l6
ZW9mKCIvTGF5b3V0VGVzdHMvIikgLSAxKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcHJpbnRmKCIl
cyIsIHVyaSk7Ci0KLSAgICBjb25zdCBTdHJpbmcgdGFyZ2V0ID0gRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpoaXN0b3J5SXRlbVRhcmdldChpdGVtKTsKLSAgICBpZiAoIXRhcmdldC5pc0VtcHR5
KCkpCi0gICAgICAgIHByaW50ZigiIChpbiBmcmFtZSBcIiVzXCIpIiwgdGFyZ2V0LnV0ZjgoKS5k
YXRhKCkpOwotICAgIGlmIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmlzVGFyZ2V0SXRlbShp
dGVtKSkKLSAgICAgICAgcHJpbnRmKCIgICoqbmF2IHRhcmdldCoqIik7Ci0gICAgcHV0Y2hhcign
XG4nKTsKLQotICAgIEhpc3RvcnlJdGVtQ2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBEdW1wUmVu
ZGVyVHJlZVN1cHBvcnRFZmw6OmNoaWxkSGlzdG9yeUl0ZW1zKGl0ZW0pOwotCi0gICAgLy8gTXVz
dCBzb3J0IHRvIGVsaW1pbmF0ZSBhcmJpdHJhcnkgcmVzdWx0IG9yZGVyaW5nIHdoaWNoIGRlZmVh
dHMgcmVwcm9kdWNpYmxlIHRlc3RpbmcuCi0gICAgc3RkOjpzdGFibGVfc29ydChjaGlsZHJlbi5i
ZWdpbigpLCBjaGlsZHJlbi5lbmQoKSwgY29tcGFyZUhpc3RvcnlJdGVtc0J5VGFyZ2V0KTsKLQot
ICAgIGNvbnN0IHNpemVfdCBzaXplID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICBkdW1wSGlzdG9yeUl0ZW0oY2hpbGRyZW5b
aV0sIGluZGVudCArIDQsIGZhbHNlKTsKLX0KLQotc3RhdGljIHZvaWQgZHVtcEJhY2tGb3J3YXJk
TGlzdEZvcldlYlZpZXcoRXZhc19PYmplY3QqIHZpZXcpCi17Ci0gICAgcHJpbnRmKCJcbj09PT09
PT09PT09PT09IEJhY2sgRm9yd2FyZCBMaXN0ID09PT09PT09PT09PT09XG4iKTsKLQotICAgIGNv
bnN0IEV3a19IaXN0b3J5KiBoaXN0b3J5ID0gZXdrX3ZpZXdfaGlzdG9yeV9nZXQodmlldyk7Ci0K
LSAgICAvLyBQcmludCBvdXQgYWxsIGl0ZW1zIGluIHRoZSBsaXN0IGFmdGVyIHByZXZUZXN0QkZJ
dGVtLCB3aGljaCB3YXMgZnJvbSB0aGUgcHJldmlvdXMgdGVzdAotICAgIC8vIEdhdGhlciBpdGVt
cyBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QsIHRoZSBwcmludCB0aGVtIG91dCBmcm9tIG9sZGVz
dCB0byBuZXdlc3QKLSAgICBFaW5hX0xpc3QqIGl0ZW1zVG9QcmludCA9IDA7Ci0gICAgdm9pZCog
aGlzdG9yeUl0ZW07Ci0gICAgRWluYV9MaXN0KiBiYWNrd2FyZExpc3QgPSBld2tfaGlzdG9yeV9i
YWNrX2xpc3RfZ2V0KGhpc3RvcnkpOwotICAgIEVJTkFfTElTVF9GUkVFKGJhY2t3YXJkTGlzdCwg
aGlzdG9yeUl0ZW0pIHsKLSAgICAgICAgaWYgKGhpc3RvcnlJdGVtID09IHByZXZUZXN0QkZJdGVt
KSB7Ci0gICAgICAgICAgICBlaW5hX2xpc3RfZnJlZShiYWNrd2FyZExpc3QpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbXNUb1ByaW50ID0gZWluYV9saXN0X2Fw
cGVuZChpdGVtc1RvUHJpbnQsIGhpc3RvcnlJdGVtKTsKLSAgICB9Ci0KLSAgICBjb25zdCBFd2tf
SGlzdG9yeV9JdGVtKiBjdXJyZW50SXRlbSA9IGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9jdXJy
ZW50X2dldChoaXN0b3J5KTsKLSAgICBpZiAoY3VycmVudEl0ZW0pCi0gICAgICAgIGl0ZW1zVG9Q
cmludCA9IGVpbmFfbGlzdF9hcHBlbmQoaXRlbXNUb1ByaW50LCBjdXJyZW50SXRlbSk7Ci0KLSAg
ICBFaW5hX0xpc3QqIGZvcndhcmRMaXN0ID0gZXdrX2hpc3RvcnlfZm9yd2FyZF9saXN0X2dldCho
aXN0b3J5KTsKLSAgICBFSU5BX0xJU1RfRlJFRShmb3J3YXJkTGlzdCwgaGlzdG9yeUl0ZW0pIHsK
LSAgICAgICAgQVNTRVJUKGhpc3RvcnlJdGVtICE9IHByZXZUZXN0QkZJdGVtKTsKLSAgICAgICAg
aXRlbXNUb1ByaW50ID0gZWluYV9saXN0X2FwcGVuZChpdGVtc1RvUHJpbnQsIGhpc3RvcnlJdGVt
KTsKLSAgICB9Ci0KLSAgICBFSU5BX0xJU1RfRlJFRShpdGVtc1RvUHJpbnQsIGhpc3RvcnlJdGVt
KSB7Ci0gICAgICAgIGR1bXBIaXN0b3J5SXRlbShzdGF0aWNfY2FzdDxFd2tfSGlzdG9yeV9JdGVt
Kj4oaGlzdG9yeUl0ZW0pLCBoaXN0b3J5SXRlbUluZGVudCwgaGlzdG9yeUl0ZW0gPT0gY3VycmVu
dEl0ZW0pOwotICAgICAgICBld2tfaGlzdG9yeV9pdGVtX2ZyZWUoc3RhdGljX2Nhc3Q8RXdrX0hp
c3RvcnlfSXRlbSo+KGhpc3RvcnlJdGVtKSk7Ci0gICAgfQotCi0gICAgcHJpbnRmKCI9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7Ci19Ci0KLXZvaWQg
ZHVtcEJhY2tGb3J3YXJkTGlzdEZvcldlYlZpZXdzKCkKLXsKLSAgICAvLyBEdW1wIHRoZSBiYWNr
IGZvcndhcmQgbGlzdCBvZiB0aGUgbWFpbiBXZWJWaWV3IGZpcnN0Ci0gICAgZHVtcEJhY2tGb3J3
YXJkTGlzdEZvcldlYlZpZXcoYnJvd3Nlci0+bWFpblZpZXcoKSk7Ci0KLSAgICBWZWN0b3I8RXZh
c19PYmplY3QqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBicm93c2VyLT5leHRyYVZpZXdzKCkuYmVn
aW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gYnJvd3Nlci0+ZXh0cmFWaWV3cygpLmVuZCgpOyArK2l0
KQotICAgICAgICBkdW1wQmFja0ZvcndhcmRMaXN0Rm9yV2ViVmlldygqaXQpOwotfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBIaXN0b3J5SXRlbS5oIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0R1bXBIaXN0b3J5SXRlbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlYThhZmVhYWY3ZDhkM2EyMWFlMWE1MGE4YWY5NGNlNWNmOWJhNGZhLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9EdW1wSGlzdG9yeUl0ZW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIER1bXBIaXN0b3J5SXRlbV9oCi0jZGVmaW5lIER1bXBIaXN0b3J5SXRlbV9oCi0KLSNp
bmNsdWRlIDxFdmFzLmg+Ci0KLXZvaWQgZHVtcEJhY2tGb3J3YXJkTGlzdEZvcldlYlZpZXdzKCk7
Ci0KLSNlbmRpZiAvLyBEdW1wSGlzdG9yeUl0ZW1faApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Vm
bC9EdW1wUmVuZGVyVHJlZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjM2Ux
MzQ0NzA4YTAwMTEzMmMyNjI1N2U4OTY4MzQwNWQwY2MwZjguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBS
ZW5kZXJUcmVlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ3OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgiCi0KLSNpbmNsdWRlICJEdW1wSGlzdG9y
eUl0ZW0uaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNocm9tZS5oIgotI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlVmlldy5oIgotI2luY2x1ZGUgIkV2ZW50U2VuZGVyLmgiCi0jaW5jbHVkZSAi
Rm9udE1hbmFnZW1lbnQuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
IlBpeGVsRHVtcFN1cHBvcnQuaCIKLSNpbmNsdWRlICJUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAi
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmgiCi0jaW5jbHVkZSAiV2Vi
Q29yZVRlc3RTdXBwb3J0LmgiCi0jaW5jbHVkZSAiV29ya1F1ZXVlLmgiCi0jaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxFV2ViS2l0Lmg+Ci0jaW5jbHVkZSA8RWNvcmUuaD4KLSNp
bmNsdWRlIDxFY29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8RWNvcmVfRmlsZS5oPgotI2luY2x1ZGUg
PEVkamUuaD4KLSNpbmNsdWRlIDxFdmFzLmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29u
ZmlnLmg+Ci0jaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2VmbC9VbmlxdWVQdHJFZmwuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgot
Ci1Pd25QdHI8RHVtcFJlbmRlclRyZWVDaHJvbWU+IGJyb3dzZXI7Ci1FdmFzX09iamVjdCogdG9w
TG9hZGluZ0ZyYW1lID0gMDsKLWJvb2wgd2FpdEZvclBvbGljeSA9IGZhbHNlOwotYm9vbCBwb2xp
Y3lEZWxlZ2F0ZUVuYWJsZWQgPSBmYWxzZTsKLWJvb2wgcG9saWN5RGVsZWdhdGVQZXJtaXNzaXZl
ID0gZmFsc2U7Ci1FY29yZV9UaW1lciogd2FpdFRvRHVtcFdhdGNoZG9nID0gMDsKLWV4dGVybiBF
d2tfSGlzdG9yeV9JdGVtKiBwcmV2VGVzdEJGSXRlbTsKLQotLy8gRnJvbSB0aGUgdG9wLWxldmVs
IER1bXBSZW5kZXJUcmVlLmgKLVJlZlB0cjxUZXN0UnVubmVyPiBnVGVzdFJ1bm5lcjsKLXZvbGF0
aWxlIGJvb2wgZG9uZSA9IGZhbHNlOwotCi1zdGF0aWMgYm9vbCBkdW1wUGl4ZWxzRm9yQ3VycmVu
dFRlc3Q7Ci1zdGF0aWMgaW50IGR1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IGZhbHNlOwotc3RhdGlj
IGludCBkdW1wVHJlZSA9IHRydWU7Ci1zdGF0aWMgaW50IHByaW50U2VwYXJhdG9ycyA9IHRydWU7
Ci1zdGF0aWMgaW50IHVzZVRpbWVvdXRXYXRjaGRvZyA9IHRydWU7Ci0KLXN0YXRpYyBTdHJpbmcg
ZHVtcEZyYW1lc0FzVGV4dChFdmFzX09iamVjdCogZnJhbWUpCi17Ci0gICAgaWYgKCFmcmFtZSkK
LSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBjb25z
dCBjaGFyKiBmcmFtZUNvbnRlbnRzID0gZXdrX2ZyYW1lX3BsYWluX3RleHRfZ2V0KGZyYW1lKTsK
LQotICAgIGlmICghZnJhbWVDb250ZW50cykKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0g
ICAgaWYgKGJyb3dzZXItPm1haW5GcmFtZSgpICE9IGZyYW1lKSB7Ci0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIlxuLS0tLS0tLS1cbkZyYW1lOiAnIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoU3Ry
aW5nOjpmcm9tVVRGOChld2tfZnJhbWVfbmFtZV9nZXQoZnJhbWUpKSk7Ci0gICAgICAgIHJlc3Vs
dC5hcHBlbmQoIidcbi0tLS0tLS0tXG4iKTsKLSAgICB9Ci0KLSAgICByZXN1bHQuYXBwZW5kKFN0
cmluZzo6ZnJvbVVURjgoZnJhbWVDb250ZW50cykpOwotICAgIHJlc3VsdC5hcHBlbmQoIlxuIik7
Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoZnJhbWVDb250ZW50cyk7Ci0KLSAgICBpZiAoZ1Rl
c3RSdW5uZXItPmR1bXBDaGlsZEZyYW1lc0FzVGV4dCgpKSB7Ci0gICAgICAgIEVpbmFfTGlzdCog
Y2hpbGRyZW4gPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZyYW1lQ2hpbGRyZW4oZnJhbWUp
OwotICAgICAgICB2b2lkKiBpdGVyYXRvcjsKLQotICAgICAgICBFSU5BX0xJU1RfRlJFRShjaGls
ZHJlbiwgaXRlcmF0b3IpIHsKLSAgICAgICAgICAgIEV2YXNfT2JqZWN0KiBjdXJyZW50RnJhbWUg
PSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCo+KGl0ZXJhdG9yKTsKLSAgICAgICAgICAgIFN0cmlu
ZyB0ZW1wVGV4dChkdW1wRnJhbWVzQXNUZXh0KGN1cnJlbnRGcmFtZSkpOwotCi0gICAgICAgICAg
ICBpZiAodGVtcFRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRlbXBUZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGR1bXBGcmFtZVNjcm9sbFBvc2l0
aW9uKEV2YXNfT2JqZWN0KiBmcmFtZSkKLXsKLSAgICBpbnQgeCwgeTsKLSAgICBld2tfZnJhbWVf
c2Nyb2xsX3Bvc19nZXQoZnJhbWUsICZ4LCAmeSk7Ci0gICAgaWYgKGFicyh4KSA+IDAgfHwgYWJz
KHkpID4gMCkgewotICAgICAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLQotICAgICAgICBFdmFz
X09iamVjdCogcGFyZW50ID0gZXZhc19vYmplY3Rfc21hcnRfcGFyZW50X2dldChmcmFtZSk7Ci0K
LSAgICAgICAgLy8gc21hcnQgcGFyZW50IG9mIG1haW4gZnJhbWUgaXMgdmlldyBvYmplY3QuCi0g
ICAgICAgIGlmIChwYXJlbnQgIT0gYnJvd3Nlci0+bWFpblZpZXcoKSkgewotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgiZnJhbWUgJyIpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChld2tf
ZnJhbWVfbmFtZV9nZXQoZnJhbWUpKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIicgIik7
Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuYXBwZW5kKCJzY3JvbGxlZCB0byAiKTsKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZChXVEY6OlN0cmluZzo6bnVtYmVyKHgpKTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgiLCIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKFdURjo6U3RyaW5nOjpudW1i
ZXIoeSkpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCJcbiIpOwotCi0gICAgICAgIHByaW50Zigi
JXMiLCByZXN1bHQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBpZiAo
Z1Rlc3RSdW5uZXItPmR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zKCkpIHsKLSAgICAgICAg
RWluYV9MaXN0KiBjaGlsZHJlbiA9IER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVDaGls
ZHJlbihmcmFtZSk7Ci0gICAgICAgIHZvaWQqIGl0ZXJhdG9yOwotCi0gICAgICAgIEVJTkFfTElT
VF9GUkVFKGNoaWxkcmVuLCBpdGVyYXRvcikgewotICAgICAgICAgICAgRXZhc19PYmplY3QqIGN1
cnJlbnRGcmFtZSA9IHN0YXRpY19jYXN0PEV2YXNfT2JqZWN0Kj4oaXRlcmF0b3IpOwotICAgICAg
ICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oY3VycmVudEZyYW1lKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkTG9nRnJhbWVMb2FkRGVsZWdhdGVzKGNvbnN0
IFN0cmluZyYgcGF0aE9yVVJMKQotewotICAgIHJldHVybiBwYXRoT3JVUkwuY29udGFpbnMoImxv
YWRpbmcvIik7Ci19Ci0KLXN0YXRpYyBib29sIHNob3VsZER1bXBBc1RleHQoY29uc3QgU3RyaW5n
JiBwYXRoT3JVUkwpCi17Ci0gICAgcmV0dXJuIHBhdGhPclVSTC5jb250YWlucygiZHVtcEFzVGV4
dC8iKTsKLX0KLQotc3RhdGljIHZvaWQgc2VuZFBpeGVsUmVzdWx0c0VPRigpCi17Ci0gICAgcHV0
cygiI0VPRiIpOwotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIGZmbHVzaChzdGRlcnIpOwotfQot
Ci1ib29sIHNob3VsZFNldFdhaXRUb0R1bXBXYXRjaGRvZygpCi17Ci0gICAgcmV0dXJuICF3YWl0
VG9EdW1wV2F0Y2hkb2cgJiYgdXNlVGltZW91dFdhdGNoZG9nOwotfQotCi1zdGF0aWMgdm9pZCBp
bnZhbGlkYXRlQW55UHJldmlvdXNXYWl0VG9EdW1wV2F0Y2hkb2coKQotewotICAgIGlmICh3YWl0
VG9EdW1wV2F0Y2hkb2cpIHsKLSAgICAgICAgZWNvcmVfdGltZXJfZGVsKHdhaXRUb0R1bXBXYXRj
aGRvZyk7Ci0gICAgICAgIHdhaXRUb0R1bXBXYXRjaGRvZyA9IDA7Ci0gICAgfQotICAgIHdhaXRG
b3JQb2xpY3kgPSBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgb25FY29yZUV2YXNSZXNpemUoRWNv
cmVfRXZhcyogZWNvcmVFdmFzKQotewotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotCi0gICAgZWNv
cmVfZXZhc19nZW9tZXRyeV9nZXQoZWNvcmVFdmFzLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwot
ICAgIGV2YXNfb2JqZWN0X21vdmUoYnJvd3Nlci0+bWFpblZpZXcoKSwgMCwgMCk7Ci0gICAgZXZh
c19vYmplY3RfcmVzaXplKGJyb3dzZXItPm1haW5WaWV3KCksIHdpZHRoLCBoZWlnaHQpOwotfQot
Ci1zdGF0aWMgdm9pZCBvbkNsb3NlV2luZG93KEVjb3JlX0V2YXMqKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgdXNlTG9uZ1J1bm5pbmdTZXJ2ZXJNb2Rl
KGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICByZXR1cm4gKGFyZ2MgPT0gb3B0aW5kICsg
MSAmJiAhc3RyY21wKGFyZ3Zbb3B0aW5kXSwgIi0iKSk7Ci19Ci0KLXN0YXRpYyBib29sIHBhcnNl
Q29tbWFuZExpbmVPcHRpb25zKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBzdGF0aWMg
Y29uc3Qgb3B0aW9uIG9wdGlvbnNbXSA9IHsKLSAgICAgICAgeyJub3RyZWUiLCBub19hcmd1bWVu
dCwgJmR1bXBUcmVlLCBmYWxzZX0sCi0gICAgICAgIHsicGl4ZWwtdGVzdHMiLCBub19hcmd1bWVu
dCwgJmR1bXBQaXhlbHNGb3JBbGxUZXN0cywgdHJ1ZX0sCi0gICAgICAgIHsidHJlZSIsIG5vX2Fy
Z3VtZW50LCAmZHVtcFRyZWUsIHRydWV9LAotICAgICAgICB7Im5vLXRpbWVvdXQiLCBub19hcmd1
bWVudCwgJnVzZVRpbWVvdXRXYXRjaGRvZywgZmFsc2V9LAotICAgICAgICB7MCwgMCwgMCwgMH0K
LSAgICB9OwotCi0gICAgaW50IG9wdGlvbjsKLSAgICB3aGlsZSAoKG9wdGlvbiA9IGdldG9wdF9s
b25nKGFyZ2MsIChjaGFyKiBjb25zdCopYXJndiwgIiIsIG9wdGlvbnMsIDApKSAhPSAtMSkgewot
ICAgICAgICBzd2l0Y2ggKG9wdGlvbikgewotICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgY2Fz
ZSAnOic6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlzR2xvYmFsSGlzdG9yeVRl
c3QoY29uc3QgU3RyaW5nJiBjVGVzdFBhdGhPclVSTCkKLXsKLSAgICByZXR1cm4gY1Rlc3RQYXRo
T3JVUkwuY29udGFpbnMoIi9nbG9iYWxoaXN0b3J5LyIpOwotfQotCi1zdGF0aWMgdm9pZCBjcmVh
dGVUZXN0UnVubmVyKGNvbnN0IFN0cmluZyYgdGVzdFVSTCwgY29uc3QgU3RyaW5nJiBleHBlY3Rl
ZFBpeGVsSGFzaCkKLXsKLSAgICBnVGVzdFJ1bm5lciA9Ci0gICAgICAgIFRlc3RSdW5uZXI6OmNy
ZWF0ZShzdGQ6OnN0cmluZyh0ZXN0VVJMLnV0ZjgoKS5kYXRhKCkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nKGV4cGVjdGVkUGl4ZWxIYXNoLnV0Zjgo
KS5kYXRhKCkpKTsKLQotICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7Ci0gICAgZG9uZSA9IGZhbHNl
OwotCi0gICAgZ1Rlc3RSdW5uZXItPnNldEljb25EYXRhYmFzZUVuYWJsZWQoZmFsc2UpOwotCi0g
ICAgaWYgKHNob3VsZExvZ0ZyYW1lTG9hZERlbGVnYXRlcyh0ZXN0VVJMKSkKLSAgICAgICAgZ1Rl
c3RSdW5uZXItPnNldER1bXBGcmFtZUxvYWRDYWxsYmFja3ModHJ1ZSk7Ci0KLSAgICBnVGVzdFJ1
bm5lci0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCh0cnVlKTsKLQotICAgIGdUZXN0UnVubmVy
LT5zZXREdW1wSGlzdG9yeURlbGVnYXRlQ2FsbGJhY2tzKGlzR2xvYmFsSGlzdG9yeVRlc3QodGVz
dFVSTCkpOwotCi0gICAgaWYgKHNob3VsZER1bXBBc1RleHQodGVzdFVSTCkpIHsKLSAgICAgICAg
Z1Rlc3RSdW5uZXItPnNldER1bXBBc1RleHQodHJ1ZSk7Ci0gICAgICAgIGdUZXN0UnVubmVyLT5z
ZXRHZW5lcmF0ZVBpeGVsUmVzdWx0cyhmYWxzZSk7Ci0gICAgfQotfQotCi1zdGF0aWMgU3RyaW5n
IGdldEZpbmFsVGVzdFVSTChjb25zdCBTdHJpbmcmIHRlc3RVUkwpCi17Ci0gICAgaWYgKCF0ZXN0
VVJMLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKSAmJiAhdGVzdFVSTC5zdGFydHNXaXRoKCJodHRwczov
LyIpKSB7Ci0gICAgICAgIGNoYXIqIGNGaWxlUGF0aCA9IGVjb3JlX2ZpbGVfcmVhbHBhdGgodGVz
dFVSTC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgY29uc3QgU3RyaW5nIGZpbGVQYXRoID0gU3Ry
aW5nOjpmcm9tVVRGOChjRmlsZVBhdGgpOwotICAgICAgICBmcmVlKGNGaWxlUGF0aCk7Ci0KLSAg
ICAgICAgaWYgKGVjb3JlX2ZpbGVfZXhpc3RzKGZpbGVQYXRoLnV0ZjgoKS5kYXRhKCkpKQotICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygiZmlsZTovLyIpICsgZmlsZVBhdGg7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRlc3RVUkw7Ci19Ci0KLXN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3QgY2hhciog
aW5wdXRMaW5lKQotewotICAgIFRlc3RDb21tYW5kIGNvbW1hbmQgPSBwYXJzZUlucHV0TGluZShp
bnB1dExpbmUpOwotICAgIGNvbnN0IFN0cmluZyB0ZXN0UGF0aE9yVVJMKGNvbW1hbmQucGF0aE9y
VVJMLmNfc3RyKCkpOwotICAgIEFTU0VSVCghdGVzdFBhdGhPclVSTC5pc0VtcHR5KCkpOwotICAg
IGR1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGNvbW1hbmQuc2hvdWxkRHVtcFBpeGVscyB8fCBk
dW1wUGl4ZWxzRm9yQWxsVGVzdHM7Ci0gICAgY29uc3QgU3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNo
KGNvbW1hbmQuZXhwZWN0ZWRQaXhlbEhhc2guY19zdHIoKSk7Ci0KLSAgICAvLyBDb252ZXJ0IHRo
ZSBwYXRoIGludG8gYSBmdWxsIGZpbGUgVVJMIGlmIGl0IGRvZXMgbm90IGxvb2sKLSAgICAvLyBs
aWtlIGFuIEhUVFAvUyBVUkwgKGRvZXNuJ3Qgc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8v
KS4KLSAgICBjb25zdCBTdHJpbmcgdGVzdFVSTCA9IGdldEZpbmFsVGVzdFVSTCh0ZXN0UGF0aE9y
VVJMKTsKLQotICAgIGJyb3dzZXItPnJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsK
LSAgICBjcmVhdGVUZXN0UnVubmVyKHRlc3RVUkwsIGV4cGVjdGVkUGl4ZWxIYXNoKTsKLQotICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNsZWFyKCk7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+
c2V0RnJvemVuKGZhbHNlKTsKLQotICAgIGNvbnN0IGJvb2wgaXNTVkdXM0NUZXN0ID0gdGVzdFVS
TC5jb250YWlucygic3ZnL1czQy1TVkctMS4xIik7Ci0gICAgY29uc3QgaW50IHdpZHRoID0gaXNT
VkdXM0NUZXN0ID8gVGVzdFJ1bm5lcjo6dzNjU1ZHVmlld1dpZHRoIDogVGVzdFJ1bm5lcjo6dmll
d1dpZHRoOwotICAgIGNvbnN0IGludCBoZWlnaHQgPSBpc1NWR1czQ1Rlc3QgPyBUZXN0UnVubmVy
Ojp3M2NTVkdWaWV3SGVpZ2h0IDogVGVzdFJ1bm5lcjo6dmlld0hlaWdodDsKLSAgICBldmFzX29i
amVjdF9yZXNpemUoYnJvd3Nlci0+bWFpblZpZXcoKSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBp
ZiAocHJldlRlc3RCRkl0ZW0pCi0gICAgICAgIGV3a19oaXN0b3J5X2l0ZW1fZnJlZShwcmV2VGVz
dEJGSXRlbSk7Ci0gICAgY29uc3QgRXdrX0hpc3RvcnkqIGhpc3RvcnkgPSBld2tfdmlld19oaXN0
b3J5X2dldChicm93c2VyLT5tYWluVmlldygpKTsKLSAgICBwcmV2VGVzdEJGSXRlbSA9IGV3a19o
aXN0b3J5X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldChoaXN0b3J5KTsKLQotICAgIGV2YXNfb2Jq
ZWN0X2ZvY3VzX3NldChicm93c2VyLT5tYWluVmlldygpLCBFSU5BX1RSVUUpOwotICAgIGV3a192
aWV3X3VyaV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdGVzdFVSTC51dGY4KCkuZGF0YSgpKTsK
LQotICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwotCi0gICAgZ1Rlc3RSdW5uZXItPmNsb3Nl
V2ViSW5zcGVjdG9yKCk7Ci0gICAgZ1Rlc3RSdW5uZXItPnNldERldmVsb3BlckV4dHJhc0VuYWJs
ZWQoZmFsc2UpOwotCi0gICAgYnJvd3Nlci0+Y2xlYXJFeHRyYVZpZXdzKCk7Ci0KLSAgICAvLyBG
SVhNRTogTW92ZSB0byBEUlRDaHJvbWU6OnJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMo
KSBhZnRlciBidWcgODUyMDkgbGFuZHMuCi0gICAgV2ViQ29yZVRlc3RTdXBwb3J0OjpyZXNldElu
dGVybmFsc09iamVjdChEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6Omdsb2JhbENvbnRleHRSZWZG
b3JGcmFtZShicm93c2VyLT5tYWluRnJhbWUoKSkpOwotCi0gICAgZXdrX3ZpZXdfdXJpX3NldChi
cm93c2VyLT5tYWluVmlldygpLCAiYWJvdXQ6YmxhbmsiKTsKLQotICAgIGdUZXN0UnVubmVyLmNs
ZWFyKCk7Ci0gICAgc2VuZFBpeGVsUmVzdWx0c0VPRigpOwotfQotCi1zdGF0aWMgdm9pZCBydW5U
ZXN0aW5nU2VydmVyTG9vcCgpCi17Ci0gICAgY2hhciBmaWxlbmFtZVtQQVRIX01BWF07Ci0KLSAg
ICB3aGlsZSAoZmdldHMoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksIHN0ZGluKSkgewotICAg
ICAgICBjaGFyKiBuZXdMaW5lID0gc3RycmNocihmaWxlbmFtZSwgJ1xuJyk7Ci0gICAgICAgIGlm
IChuZXdMaW5lKQotICAgICAgICAgICAgKm5ld0xpbmUgPSAnXDAnOwotCi0gICAgICAgIGlmIChm
aWxlbmFtZVswXSAhPSAnXDAnKQotICAgICAgICAgICAgcnVuVGVzdChmaWxlbmFtZSk7Ci0gICAg
fQotfQotCi1zdGF0aWMgdm9pZCBhZGp1c3RPdXRwdXRUeXBlQnlNaW1lVHlwZShjb25zdCBFdmFz
X09iamVjdCogZnJhbWUpCi17Ci0gICAgY29uc3QgU3RyaW5nIHJlc3BvbnNlTWltZVR5cGUoRHVt
cFJlbmRlclRyZWVTdXBwb3J0RWZsOjpyZXNwb25zZU1pbWVUeXBlKGZyYW1lKSk7Ci0gICAgaWYg
KHJlc3BvbnNlTWltZVR5cGUgPT0gInRleHQvcGxhaW4iKSB7Ci0gICAgICAgIGdUZXN0UnVubmVy
LT5zZXREdW1wQXNUZXh0KHRydWUpOwotICAgICAgICBnVGVzdFJ1bm5lci0+c2V0R2VuZXJhdGVQ
aXhlbFJlc3VsdHMoZmFsc2UpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgZHVtcEZyYW1lQ29u
dGVudHNBc1RleHQoRXZhc19PYmplY3QqIGZyYW1lKQotewotICAgIFN0cmluZyByZXN1bHQ7Ci0g
ICAgaWYgKGdUZXN0UnVubmVyLT5kdW1wQXNUZXh0KCkpCi0gICAgICAgIHJlc3VsdCA9IGR1bXBG
cmFtZXNBc1RleHQoZnJhbWUpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpyZW5kZXJUcmVlRHVtcChmcmFtZSk7Ci0KLSAgICBwcmludGYoIiVz
IiwgcmVzdWx0LnV0ZjgoKS5kYXRhKCkpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGREdW1wRnJh
bWVTY3JvbGxQb3NpdGlvbigpCi17Ci0gICAgcmV0dXJuICFnVGVzdFJ1bm5lci0+ZHVtcEFzVGV4
dCgpICYmICFnVGVzdFJ1bm5lci0+ZHVtcERPTUFzV2ViQXJjaGl2ZSgpICYmICFnVGVzdFJ1bm5l
ci0+ZHVtcFNvdXJjZUFzV2ViQXJjaGl2ZSgpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGREdW1w
UGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZCgpCi17Ci0gICAgcmV0dXJuIGR1bXBQaXhlbHNG
b3JDdXJyZW50VGVzdCAmJiBnVGVzdFJ1bm5lci0+Z2VuZXJhdGVQaXhlbFJlc3VsdHMoKSAmJiAh
Z1Rlc3RSdW5uZXItPmR1bXBET01Bc1dlYkFyY2hpdmUoKSAmJiAhZ1Rlc3RSdW5uZXItPmR1bXBT
b3VyY2VBc1dlYkFyY2hpdmUoKTsKLX0KLQotc3RhdGljIGJvb2wgc2hvdWxkRHVtcEJhY2tGb3J3
YXJkTGlzdCgpCi17Ci0gICAgcmV0dXJuIGdUZXN0UnVubmVyLT5kdW1wQmFja0ZvcndhcmRMaXN0
KCk7Ci19Ci0KLXN0YXRpYyBib29sIGluaXRFZmwoKQotewotICAgIGlmICghZWNvcmVfZXZhc19p
bml0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWVjb3JlX2ZpbGVfaW5pdCgp
KSB7Ci0gICAgICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBpZiAoIWVkamVfaW5pdCgpKSB7Ci0gICAgICAgIGVjb3JlX2ZpbGVfc2h1
dGRvd24oKTsKLSAgICAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmICghZXdrX2luaXQoKSkgewotICAgICAgICBlZGplX3NodXRk
b3duKCk7Ci0gICAgICAgIGVjb3JlX2ZpbGVfc2h1dGRvd24oKTsKLSAgICAgICAgZWNvcmVfZXZh
c19zaHV0ZG93bigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHNodXRkb3duRWZsKCkKLXsKLSAgICBld2tfc2h1dGRv
d24oKTsKLSAgICBlZGplX3NodXRkb3duKCk7Ci0gICAgZWNvcmVfZmlsZV9zaHV0ZG93bigpOwot
ICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKLX0KLQotdm9pZCBkaXNwbGF5V2ViVmlldygpCi17
Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpmb3JjZUxheW91dChicm93c2VyLT5tYWlu
RnJhbWUoKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRUcmFja3NSZXBhaW50
cyhicm93c2VyLT5tYWluRnJhbWUoKSwgdHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0
RWZsOjpyZXNldFRyYWNrZWRSZXBhaW50cyhicm93c2VyLT5tYWluRnJhbWUoKSk7Ci19Ci0KLXZv
aWQgZHVtcCgpCi17Ci0gICAgRXZhc19PYmplY3QqIGZyYW1lID0gYnJvd3Nlci0+bWFpbkZyYW1l
KCk7Ci0KLSAgICBpbnZhbGlkYXRlQW55UHJldmlvdXNXYWl0VG9EdW1wV2F0Y2hkb2coKTsKLQot
ICAgIGlmIChkdW1wVHJlZSkgewotICAgICAgICBhZGp1c3RPdXRwdXRUeXBlQnlNaW1lVHlwZShm
cmFtZSk7Ci0gICAgICAgIGR1bXBGcmFtZUNvbnRlbnRzQXNUZXh0KGZyYW1lKTsKLQotICAgICAg
ICBpZiAoc2hvdWxkRHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oKSkKLSAgICAgICAgICAgIGR1bXBG
cmFtZVNjcm9sbFBvc2l0aW9uKGZyYW1lKTsKLQotICAgICAgICBpZiAoc2hvdWxkRHVtcEJhY2tG
b3J3YXJkTGlzdCgpKQotICAgICAgICAgICAgZHVtcEJhY2tGb3J3YXJkTGlzdEZvcldlYlZpZXdz
KCk7Ci0KLSAgICAgICAgaWYgKHByaW50U2VwYXJhdG9ycykgewotICAgICAgICAgICAgcHV0cygi
I0VPRiIpOwotICAgICAgICAgICAgZnB1dHMoIiNFT0ZcbiIsIHN0ZGVycik7Ci0gICAgICAgICAg
ICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgICAgIGZmbHVzaChzdGRlcnIpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKHNob3VsZER1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVk
KCkpCi0gICAgICAgIGR1bXBXZWJWaWV3QXNQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKGdU
ZXN0UnVubmVyLT5leHBlY3RlZFBpeGVsSGFzaCgpKTsKLQotICAgIGRvbmUgPSB0cnVlOwotICAg
IGVjb3JlX21haW5fbG9vcF9xdWl0KCk7Ci19Ci0KLXN0YXRpYyBFY29yZV9FdmFzKiBpbml0RWNv
cmVFdmFzKCkKLXsKLSAgICBFY29yZV9FdmFzKiBlY29yZUV2YXMgPSAwOwotI2lmIGRlZmluZWQo
SEFWRV9FQ09SRV9YKQotICAgIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfbmV3KCJvcGVuZ2xfeDEx
IiwgMCwgMCwgODAwLCA2MDAsIDApOwotICAgIGlmICghZWNvcmVFdmFzKQotI2VuZGlmCi0gICAg
ZWNvcmVFdmFzID0gZWNvcmVfZXZhc19uZXcoMCwgMCwgMCwgODAwLCA2MDAsIDApOwotICAgIGlm
ICghZWNvcmVFdmFzKSB7Ci0gICAgICAgIHNodXRkb3duRWZsKCk7Ci0gICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAgICBlY29yZV9ldmFzX3RpdGxlX3NldChlY29yZUV2YXMs
ICJFRkwgRHVtcFJlbmRlclRyZWUiKTsKLSAgICBlY29yZV9ldmFzX2NhbGxiYWNrX3Jlc2l6ZV9z
ZXQoZWNvcmVFdmFzLCBvbkVjb3JlRXZhc1Jlc2l6ZSk7Ci0gICAgZWNvcmVfZXZhc19jYWxsYmFj
a19kZWxldGVfcmVxdWVzdF9zZXQoZWNvcmVFdmFzLCBvbkNsb3NlV2luZG93KTsKLSAgICBlY29y
ZV9ldmFzX3Nob3coZWNvcmVFdmFzKTsKLQotICAgIHJldHVybiBlY29yZUV2YXM7Ci19Ci0KLWlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLSAgICBpZiAoIXBhcnNlQ29tbWFuZExp
bmVPcHRpb25zKGFyZ2MsIGFyZ3YpKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotCi0g
ICAgaWYgKCFpbml0RWZsKCkpCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0KLSAgICBX
VEZJbnN0YWxsUmVwb3J0QmFja3RyYWNlT25DcmFzaEhvb2soKTsKLQotICAgIEVmbFVuaXF1ZVB0
cjxFY29yZV9FdmFzPiBlY29yZUV2YXMoaW5pdEVjb3JlRXZhcygpKTsKLSAgICBicm93c2VyID0g
RHVtcFJlbmRlclRyZWVDaHJvbWU6OmNyZWF0ZShlY29yZV9ldmFzX2dldChlY29yZUV2YXMuZ2V0
KCkpKTsKLSAgICBhZGRGb250c1RvRW52aXJvbm1lbnQoKTsKLQotICAgIGlmICh1c2VMb25nUnVu
bmluZ1NlcnZlck1vZGUoYXJnYywgYXJndikpIHsKLSAgICAgICAgcHJpbnRTZXBhcmF0b3JzID0g
dHJ1ZTsKLSAgICAgICAgcnVuVGVzdGluZ1NlcnZlckxvb3AoKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBwcmludFNlcGFyYXRvcnMgPSAob3B0aW5kIDwgYXJnYyAtIDEgfHwgKGR1bXBQaXhlbHNG
b3JDdXJyZW50VGVzdCAmJiBkdW1wVHJlZSkpOwotICAgICAgICBmb3IgKGludCBpID0gb3B0aW5k
OyBpICE9IGFyZ2M7ICsraSkKLSAgICAgICAgICAgIHJ1blRlc3QoYXJndltpXSk7Ci0gICAgfQot
Ci0gICAgZWNvcmVFdmFzID0gbnVsbHB0cjsKLQotICAgIHNodXRkb3duRWZsKCk7Ci0gICAgcmV0
dXJuIEVYSVRfU1VDQ0VTUzsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Vm
bC9EdW1wUmVuZGVyVHJlZUNocm9tZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVt
cFJlbmRlclRyZWVDaHJvbWUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDE1
OTIxOWNmMTc2NDdjNDEwM2YyZGY2MDNjMjQ3NDFmOWZlZDg0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1w
UmVuZGVyVHJlZUNocm9tZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NTUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcwotICogQ29w
eXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIElUUyBDT05UUklCVVRPUlMK
LSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi0gKiBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBIT0xE
RVJTIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlQ2hyb21lLmgi
Ci0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVl
Vmlldy5oIgotI2luY2x1ZGUgIkVkaXRpbmdDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJFdmVudFNl
bmRlci5oIgotI2luY2x1ZGUgIkdDQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkpTUmV0YWluUHRy
LmgiCi0jaW5jbHVkZSAiVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNs
dWRlICJUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgotI2luY2x1
ZGUgIldlYkNvcmVUZXN0U3VwcG9ydC5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZS5oIgotI2luY2x1
ZGUgImV3a19wcml2YXRlLmgiIC8vIEZJWE1FOiBjcmVhdGUgc29tZSBXZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZS5jcHAgaW5zdGVhZAotCi0jaW5jbHVkZSA8RVdlYktpdC5oPgotI2luY2x1
ZGUgPEVjb3JlLmg+Ci0jaW5jbHVkZSA8RWluYS5oPgotI2luY2x1ZGUgPEV2YXMuaD4KLSNpbmNs
dWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi0jaWYg
SEFWRShBQ0NFU1NJQklMSVRZKQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgi
Ci0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLUhhc2hNYXA8dW5zaWduZWQg
bG9uZywgQ1N0cmluZz4gRHVtcFJlbmRlclRyZWVDaHJvbWU6Om1fZHVtcEFzc2lnbmVkVXJsczsK
LUV2YXNfT2JqZWN0KiBEdW1wUmVuZGVyVHJlZUNocm9tZTo6bV9wcm92aXNpb25hbExvYWRGYWls
ZWRGcmFtZSA9IDA7Ci0KLVBhc3NPd25QdHI8RHVtcFJlbmRlclRyZWVDaHJvbWU+IER1bXBSZW5k
ZXJUcmVlQ2hyb21lOjpjcmVhdGUoRXZhcyogZXZhcykKLXsKLSAgICBPd25QdHI8RHVtcFJlbmRl
clRyZWVDaHJvbWU+IGNocm9tZSA9IGFkb3B0UHRyKG5ldyBEdW1wUmVuZGVyVHJlZUNocm9tZShl
dmFzKSk7Ci0KLSAgICBpZiAoIWNocm9tZS0+aW5pdGlhbGl6ZSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBjaHJvbWUucmVsZWFzZSgpOwotfQotCi1EdW1wUmVuZGVy
VHJlZUNocm9tZTo6RHVtcFJlbmRlclRyZWVDaHJvbWUoRXZhcyogZXZhcykKLSAgICA6IG1fbWFp
blZpZXcoMCkKLSAgICAsIG1fbWFpbkZyYW1lKDApCi0gICAgLCBtX2V2YXMoZXZhcykKLSAgICAs
IG1fZ2NDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBHQ0NvbnRyb2xsZXIpKQotI2lmIEhBVkUoQUND
RVNTSUJJTElUWSkKLSAgICAsIG1fYXhDb250cm9sbGVyKGFkb3B0UHRyKG5ldyBBY2Nlc3NpYmls
aXR5Q29udHJvbGxlcikpCi0jZW5kaWYKLXsKLX0KLQotRHVtcFJlbmRlclRyZWVDaHJvbWU6On5E
dW1wUmVuZGVyVHJlZUNocm9tZSgpCi17Ci19Ci0KLUV2YXNfT2JqZWN0KiBEdW1wUmVuZGVyVHJl
ZUNocm9tZTo6Y3JlYXRlTmV3V2luZG93KCkKLXsKLSAgICBFdmFzX09iamVjdCogbmV3VmlldyA9
IGNyZWF0ZVZpZXcoKTsKLQotICAgIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fb3Blbl93
aW5kb3dzX3NldChuZXdWaWV3LCBFSU5BX1RSVUUpOwotICAgIGV3a192aWV3X3NldHRpbmdfc2Ny
aXB0c19jYW5fY2xvc2Vfd2luZG93c19zZXQobmV3VmlldywgRUlOQV9UUlVFKTsKLQotICAgIG1f
ZXh0cmFWaWV3cy5hcHBlbmQobmV3Vmlldyk7Ci0KLSAgICByZXR1cm4gbmV3VmlldzsKLX0KLQot
RXZhc19PYmplY3QqIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpjcmVhdGVWaWV3KCkgY29uc3QKLXsK
LSAgICBFdmFzX09iamVjdCogdmlldyA9IGRydFZpZXdBZGQobV9ldmFzKTsKLSAgICBpZiAoIXZp
ZXcpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KHZpZXcsIFRF
U1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiKTsKLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCh2aWV3LCAiZG93bmxvYWQscmVxdWVzdCIsIG9uRG93bmxvYWRSZXF1ZXN0LCAw
KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQodmlldywgImxvYWQscmVzb3Vy
Y2UsZmFpbGVkIiwgb25SZXNvdXJjZUxvYWRGYWlsZWQsIDApOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZCh2aWV3LCAibG9hZCxyZXNvdXJjZSxmaW5pc2hlZCIsIG9uUmVzb3Vy
Y2VMb2FkRmluaXNoZWQsIDApOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh2
aWV3LCAibG9hZCxzdGFydGVkIiwgb25Mb2FkU3RhcnRlZCwgMCk7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJ3aW5kb3csb2JqZWN0LGNsZWFyZWQiLCBvbldpbmRv
d09iamVjdENsZWFyZWQsIG1fZ2NDb250cm9sbGVyLmdldCgpKTsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQodmlldywgInN0YXR1c2Jhcix0ZXh0LHNldCIsIG9uU3RhdHVzYmFy
VGV4dFNldCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJs
b2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgb25Eb2N1bWVudExvYWRGaW5pc2hlZCwgMCk7Ci0gICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJyZXNvdXJjZSxyZXF1ZXN0LG5l
dyIsIG9uTmV3UmVzb3VyY2VSZXF1ZXN0LCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19hZGQodmlldywgInJlc291cmNlLHJlcXVlc3Qsd2lsbHNlbmQiLCBvbldpbGxTZW5kUmVx
dWVzdCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJyZXNv
dXJjZSxyZXNwb25zZSxyZWNlaXZlZCIsIG9uUmVzcG9uc2VSZWNlaXZlZCwgMCk7Ci0gICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJvbmxvYWQsZXZlbnQiLCBvbldlYlZp
ZXdPbmxvYWRFdmVudCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZp
ZXcsICJtaXhlZGNvbnRlbnQscnVuIiwgb25JbnNlY3VyZUNvbnRlbnRSdW4sIDApOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh2aWV3LCAibWl4ZWRjb250ZW50LGRpc3BsYXll
ZCIsIG9uSW5zZWN1cmVDb250ZW50RGlzcGxheWVkLCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQodmlldywgImZyYW1lLGNyZWF0ZWQiLCBvbkZyYW1lQ3JlYXRlZCwgMCk7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJuYXZpZ2F0ZSx3aXRo
LGRhdGEiLCBvbldlYlZpZXdOYXZpZ2F0ZWRXaXRoRGF0YSwgMCk7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJwZXJmb3JtLHNlcnZlcixyZWRpcmVjdCIsIG9uV2Vi
Vmlld1NlcnZlclJlZGlyZWN0LCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQodmlldywgInBlcmZvcm0sY2xpZW50LHJlZGlyZWN0Iiwgb25XZWJWaWV3Q2xpZW50UmVkaXJl
Y3QsIDApOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh2aWV3LCAicG9wdWxh
dGUsdmlzaXRlZCxsaW5rcyIsIG9uV2ViVmlld1BvcHVsYXRlVmlzaXRlZExpbmtzLCAwKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQodmlldywgImluc3BlY3Rvcix2aWV3LGNy
ZWF0ZSIsIG9uSW5zcGVjdG9yVmlld0NyZWF0ZSwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHZpZXcsICJpbnNwZWN0b3IsdmlldyxjbG9zZSIsIG9uSW5zcGVjdG9yVmll
d0Nsb3NlLCAwKTsKLQotICAgIGNvbm5lY3RFZGl0aW5nQ2FsbGJhY2tzKHZpZXcpOwotCi0gICAg
RXZhc19PYmplY3QqIG1haW5GcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KHZpZXcpOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChtYWluRnJhbWUsICJpY29uLGNoYW5n
ZWQiLCBvbkZyYW1lSWNvbkNoYW5nZWQsIDApOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZChtYWluRnJhbWUsICJsb2FkLHByb3Zpc2lvbmFsIiwgb25GcmFtZVByb3Zpc2lvbmFs
TG9hZCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1haW5GcmFtZSwg
ImxvYWQscHJvdmlzaW9uYWwsZmFpbGVkIiwgb25GcmFtZVByb3Zpc2lvbmFsTG9hZEZhaWxlZCwg
MCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1haW5GcmFtZSwgImxvYWQs
Y29tbWl0dGVkIiwgb25GcmFtZUxvYWRDb21taXR0ZWQsIDApOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZChtYWluRnJhbWUsICJsb2FkLGZpbmlzaGVkIiwgb25GcmFtZUxvYWRG
aW5pc2hlZCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1haW5GcmFt
ZSwgImxvYWQsZXJyb3IiLCBvbkZyYW1lTG9hZEVycm9yLCAwKTsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQobWFpbkZyYW1lLCAicmVkaXJlY3QsY2FuY2VsbGVkIiwgb25GcmFt
ZVJlZGlyZWN0Q2FuY2VsbGVkLCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQobWFpbkZyYW1lLCAicmVkaXJlY3QsbG9hZCxwcm92aXNpb25hbCIsIG9uRnJhbWVSZWRpcmVj
dEZvclByb3Zpc2lvbmFsTG9hZCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKG1haW5GcmFtZSwgInJlZGlyZWN0LHJlcXVlc3RlZCIsIG9uRnJhbWVSZWRpcmVjdFJlcXVl
c3RlZCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKG1haW5GcmFtZSwg
InRpdGxlLGNoYW5nZWQiLCBvbkZyYW1lVGl0bGVDaGFuZ2VkLCAwKTsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQobWFpbkZyYW1lLCAieHNzLGRldGVjdGVkIiwgb25EaWREZXRl
Y3RYU1MsIDApOwotCi0gICAgcmV0dXJuIHZpZXc7Ci19Ci0KLUV2YXNfT2JqZWN0KiBEdW1wUmVu
ZGVyVHJlZUNocm9tZTo6Y3JlYXRlSW5zcGVjdG9yVmlldygpCi17Ci0gICAgRXZhc19PYmplY3Qq
IGluc3BlY3RvclZpZXcgPSBkcnRWaWV3QWRkKG1fZXZhcyk7Ci0gICAgaWYgKCFpbnNwZWN0b3JW
aWV3KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEluc3BlY3Rvci1yZWxhdGVkIHZpZXdz
IGFyZSBub3QgZXhwZWN0ZWQgdG8gaGF2ZSB0aGVpciBvdXRwdXQgbG9nZ2VkLgotICAgIGNvbnN0
IGJvb2wgaWdub3JlTWVzc2FnZXMgPSB0cnVlOwotICAgIGV2YXNfb2JqZWN0X2RhdGFfc2V0KGlu
c3BlY3RvclZpZXcsICJpZ25vcmUtY29uc29sZS1tZXNzYWdlcyIsICZpZ25vcmVNZXNzYWdlcyk7
Ci0KLSAgICBld2tfdmlld190aGVtZV9zZXQoaW5zcGVjdG9yVmlldywgVEVTVF9USEVNRV9ESVIg
Ii9kZWZhdWx0LmVkaiIpOwotCi0gICAgRXZhc19PYmplY3QqIG1haW5GcmFtZSA9IGV3a192aWV3
X2ZyYW1lX21haW5fZ2V0KGluc3BlY3RvclZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZChtYWluRnJhbWUsICJsb2FkLGZpbmlzaGVkIiwgb25JbnNwZWN0b3JGcmFtZUxv
YWRGaW5pc2hlZCwgMCk7Ci0KLSAgICBldmFzX29iamVjdF9yZXNpemUoaW5zcGVjdG9yVmlldywg
VGVzdFJ1bm5lcjo6dmlld1dpZHRoLCBUZXN0UnVubmVyOjp2aWV3SGVpZ2h0KTsKLSAgICBldmFz
X29iamVjdF9zaG93KGluc3BlY3RvclZpZXcpOwotICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldChp
bnNwZWN0b3JWaWV3LCB0cnVlKTsKLQotICAgIHJldHVybiBpbnNwZWN0b3JWaWV3OwotfQotCi12
b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpyZW1vdmVJbnNwZWN0b3JWaWV3KCkKLXsKLSAgICBF
dmFzX09iamVjdCogaW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2luc3BlY3Rvcl92aWV3X2dldCht
YWluVmlldygpKTsKLSAgICBpZiAoIWluc3BlY3RvclZpZXcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEV2YXNfT2JqZWN0KiBtYWluRnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChpbnNw
ZWN0b3JWaWV3KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwobWFpbkZyYW1l
LCAibG9hZCxmaW5pc2hlZCIsIG9uSW5zcGVjdG9yRnJhbWVMb2FkRmluaXNoZWQpOwotCi0gICAg
ZXZhc19vYmplY3RfZGVsKGluc3BlY3RvclZpZXcpOwotICAgIGV3a192aWV3X2luc3BlY3Rvcl92
aWV3X3NldChtYWluVmlldygpLCAwKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6
d2FpdEluc3BlY3RvckxvYWRGaW5pc2hlZCgpCi17Ci0gICAgLy8gV2FpdHMgdW50aWwgdGhlIHBh
Z2UgaGFzIGZpbmlzaGVkIGxvYWRpbmcuCi0gICAgLy8gQmVjYXVzZSBpdCBjYW4ndCBjb21wbGV0
ZSBsb2FkaW5nIGluc3BlY3Rvci5odG1sIGJlZm9yZSBsb2FkaW5nIHRlc3RVUkwuCi0gICAgRXZh
c19PYmplY3QqIGluc3BlY3RvclZpZXcgPSBld2tfdmlld19pbnNwZWN0b3Jfdmlld19nZXQobWFp
blZpZXcoKSk7Ci0gICAgaWYgKGluc3BlY3RvclZpZXcpCi0gICAgICAgIGVjb3JlX21haW5fbG9v
cF9iZWdpbigpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpyZW1vdmVXaW5kb3co
RXZhc19PYmplY3QqIHZpZXcpCi17Ci0gICAgY29uc3Qgc2l6ZV90IHBvcyA9IG1fZXh0cmFWaWV3
cy5maW5kKHZpZXcpOwotCi0gICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9leHRyYVZpZXdzLnJlbW92ZShwb3MpOwotICAgIGV2YXNfb2JqZWN0X2RlbCh2
aWV3KTsKLX0KLQotYm9vbCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6aW5pdGlhbGl6ZSgpCi17Ci0g
ICAgLy8gTm90aWZpZXMgdGhhdCBEUlQgaXMgcnVubmluZyBmb3IgZXdrVmlldyB0byBjcmVhdGUg
dGVzdGFibGUgb2JqZWN0cy4KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldER1bXBS
ZW5kZXJUcmVlTW9kZUVuYWJsZWQodHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQodHJ1ZSk7Ci0KLSAgICBtX21haW5WaWV3ID0gY3Jl
YXRlVmlldygpOwotICAgIGlmICghbV9tYWluVmlldykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgZXdrX3ZpZXdfdGhlbWVfc2V0KG1fbWFpblZpZXcsIFRFU1RfVEhFTUVfRElSICIvZGVm
YXVsdC5lZGoiKTsKLQotICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KG1fbWFpblZpZXcsICJtX21h
aW5WaWV3Iik7Ci0gICAgZXZhc19vYmplY3RfbW92ZShtX21haW5WaWV3LCAwLCAwKTsKLSAgICBl
dmFzX29iamVjdF9yZXNpemUobV9tYWluVmlldywgVGVzdFJ1bm5lcjo6dmlld1dpZHRoLCBUZXN0
UnVubmVyOjp2aWV3SGVpZ2h0KTsKLSAgICBldmFzX29iamVjdF9sYXllcl9zZXQobV9tYWluVmll
dywgRVZBU19MQVlFUl9NQVgpOwotICAgIGV2YXNfb2JqZWN0X3Nob3cobV9tYWluVmlldyk7Ci0g
ICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KG1fbWFpblZpZXcsIEVJTkFfVFJVRSk7Ci0KLSAgICBt
X21haW5GcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG1fbWFpblZpZXcpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWNvbnN0IFZlY3RvcjxFdmFzX09iamVjdCo+JiBEdW1wUmVuZGVy
VHJlZUNocm9tZTo6ZXh0cmFWaWV3cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZXh0cmFWaWV3
czsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6Y2xlYXJFeHRyYVZpZXdzKCkKLXsK
LSAgICBWZWN0b3I8RXZhc19PYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2V4dHJhVmlld3MuYmVn
aW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gbV9leHRyYVZpZXdzLmVuZCgpOyArK2l0KQotICAgICAg
ICBldmFzX29iamVjdF9kZWwoKml0KTsKLSAgICBtX2V4dHJhVmlld3MuY2xlYXIoKTsKLX0KLQot
RXZhc19PYmplY3QqIER1bXBSZW5kZXJUcmVlQ2hyb21lOjptYWluRnJhbWUoKSBjb25zdAotewot
ICAgIHJldHVybiBtX21haW5GcmFtZTsKLX0KLQotRXZhc19PYmplY3QqIER1bXBSZW5kZXJUcmVl
Q2hyb21lOjptYWluVmlldygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbWFpblZpZXc7Ci19Ci0K
LXZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6OnJlc2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1
ZXMoKQotewotICAgIGV3a19zZXR0aW5nc19pY29uX2RhdGFiYXNlX2NsZWFyKCk7Ci0gICAgZXdr
X3NldHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0aF9zZXQoMCk7Ci0KLSAgICBld2tfd2ViX2RhdGFi
YXNlX3JlbW92ZV9hbGwoKTsKLSAgICBld2tfc2V0dGluZ3Nfd2ViX2RhdGFiYXNlX2RlZmF1bHRf
cXVvdGFfc2V0KDUgKiAxMDI0ICogMTAyNCk7Ci0KLSAgICBld2tfc2V0dGluZ3NfbWVtb3J5X2Nh
Y2hlX2NsZWFyKCk7Ci0gICAgZXdrX3NldHRpbmdzX2FwcGxpY2F0aW9uX2NhY2hlX2NsZWFyKCk7
Ci0gICAgZXdrX3NldHRpbmdzX3NoYWRvd19kb21fZW5hYmxlX3NldChFSU5BX1RSVUUpOwotCi0g
ICAgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChtYWluVmlldygpLCBFSU5B
X0ZBTFNFKTsKLSAgICBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQobWFp
blZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVf
ZmxhdHRlbmluZ19zZXQobWFpblZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgZXdrX3ZpZXdfc2V0
dGluZ19hcHBsaWNhdGlvbl9jYWNoZV9zZXQobWFpblZpZXcoKSwgRUlOQV9UUlVFKTsKLSAgICBl
d2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRzX3NldChtYWluVmlldygpLCBFSU5BX1RSVUUp
OwotICAgIGV3a192aWV3X2ZvbnRfZmFtaWx5X25hbWVfc2V0KG1haW5WaWV3KCksIEVXS19GT05U
X0ZBTUlMWV9TVEFOREFSRCwgIlRpbWVzIik7Ci0gICAgZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFt
ZV9zZXQobWFpblZpZXcoKSwgRVdLX0ZPTlRfRkFNSUxZX01PTk9TUEFDRSwgIkNvdXJpZXIiKTsK
LSAgICBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChtYWluVmlldygpLCBFV0tfRk9OVF9G
QU1JTFlfU0VSSUYsICJUaW1lcyIpOwotICAgIGV3a192aWV3X2ZvbnRfZmFtaWx5X25hbWVfc2V0
KG1haW5WaWV3KCksIEVXS19GT05UX0ZBTUlMWV9TQU5TX1NFUklGLCAiSGVsdmV0aWNhIik7Ci0g
ICAgZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9zZXQobWFpblZpZXcoKSwgRVdLX0ZPTlRfRkFN
SUxZX0NVUlNJVkUsICJjdXJzaXZlIik7Ci0gICAgZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9z
ZXQobWFpblZpZXcoKSwgRVdLX0ZPTlRfRkFNSUxZX0ZBTlRBU1ksICJmYW50YXN5Iik7Ci0gICAg
ZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9zZXQobWFpblZpZXcoKSwgMTYpOwot
ICAgIGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9zZXQobWFpblZpZXcoKSwg
MTMpOwotICAgIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX3NpemVfc2V0KG1haW5WaWV3
KCksIDApOwotICAgIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3Npbmdfc2V0KG1haW5WaWV3
KCksIEVJTkFfRkFMU0UpOwotICAgIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQobWFp
blZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19y
ZXNpemVfd2luZG93X3NldChtYWluVmlldygpLCBFSU5BX1RSVUUpOwotICAgIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KG1haW5WaWV3KCksIEVJTkFfVFJVRSk7Ci0gICAgZXdr
X3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9vcGVuX3dpbmRvd3Nfc2V0KG1haW5WaWV3KCksIEVJ
TkFfVFJVRSk7Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dz
X3NldChtYWluVmlldygpLCBFSU5BX1RSVUUpOwotICAgIGV3a192aWV3X3NldHRpbmdfYXV0b19s
b2FkX2ltYWdlc19zZXQobWFpblZpZXcoKSwgRUlOQV9UUlVFKTsKLSAgICBld2tfdmlld19zZXR0
aW5nX3VzZXJfc3R5bGVzaGVldF9zZXQobWFpblZpZXcoKSwgMCk7Ci0gICAgZXdrX3ZpZXdfc2V0
dGluZ19lbmFibGVfeHNzX2F1ZGl0b3Jfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIEVJTkFfVFJV
RSk7Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfd2ViZ2xfc2V0KG1haW5WaWV3KCksIEVJ
TkFfVFJVRSk7Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfaHlwZXJsaW5rX2F1ZGl0aW5n
X3NldChtYWluVmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBld2tfdmlld19zZXR0aW5nX2luY2x1
ZGVfbGlua3NfaW5fZm9jdXNfY2hhaW5fc2V0KG1haW5WaWV3KCksIEVJTkFfRkFMU0UpOwotICAg
IGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fYWNjZXNzX2NsaXBib2FyZF9zZXQobWFpblZp
ZXcoKSwgRUlOQV9UUlVFKTsKLSAgICBld2tfdmlld19zZXR0aW5nX2FsbG93X3VuaXZlcnNhbF9h
Y2Nlc3NfZnJvbV9maWxlX3VybHNfc2V0KG1haW5WaWV3KCksIEVJTkFfVFJVRSk7Ci0gICAgZXdr
X3ZpZXdfc2V0dGluZ19hbGxvd19maWxlX2FjY2Vzc19mcm9tX2ZpbGVfdXJsc19zZXQobWFpblZp
ZXcoKSwgRUlOQV9UUlVFKTsKLSAgICBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJl
YXNfc2V0KG1haW5WaWV3KCksIEVJTkFfVFJVRSk7Ci0KLSAgICBld2tfdmlld196b29tX3NldCht
YWluVmlldygpLCAxLjAsIDAsIDApOwotICAgIGV3a192aWV3X3NjYWxlX3NldChtYWluVmlldygp
LCAxLjAsIDAsIDApOwotICAgIGV3a192aWV3X3RleHRfem9vbV9zZXQobWFpblZpZXcoKSwgMS4w
KTsKLSAgICBld2tfdmlld192aXNpYmlsaXR5X3N0YXRlX3NldChtYWluVmlldygpLCBFV0tfUEFH
RV9WSVNJQklMSVRZX1NUQVRFX1ZJU0lCTEUsIHRydWUpOwotICAgIGV3a192aWV3X3RleHRfZGly
ZWN0aW9uX3NldChtYWluVmlldygpLCBFV0tfVEVYVF9ESVJFQ1RJT05fREVGQVVMVCk7Ci0KLSAg
ICBld2tfaGlzdG9yeV9jbGVhcihld2tfdmlld19oaXN0b3J5X2dldChtYWluVmlldygpKSk7Ci0K
LSAgICBld2tfZnJhbWVfZmVlZF9mb2N1c19pbihtYWluRnJhbWUoKSk7Ci0KLSAgICBld2tfY29v
a2llc19jbGVhcigpOwotICAgIGV3a19jb29raWVzX3BvbGljeV9zZXQoRVdLX0NPT0tJRV9KQVJf
QUNDRVBUX05PX1RISVJEX1BBUlRZKTsKLQotICAgIGV3a19zZWN1cml0eV9wb2xpY3lfd2hpdGVs
aXN0X29yaWdpbl9yZXNldCgpOwotCi0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGJyb3dz
ZXItPmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKCktPnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoKTsK
LSNlbmRpZgotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjbGVhckZyYW1lTmFtZSht
YWluRnJhbWUoKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjbGVhck9wZW5lciht
YWluRnJhbWUoKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjbGVhclVzZXJTY3Jp
cHRzKG1haW5WaWV3KCkpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6Y2xlYXJVc2Vy
U3R5bGVTaGVldHMobWFpblZpZXcoKSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpy
ZXNldEdlb2xvY2F0aW9uQ2xpZW50TW9jayhtYWluVmlldygpKTsKLSAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKG1haW5WaWV3
KCksIHRydWUpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0VmFsaWRhdGlvbk1l
c3NhZ2VUaW1lck1hZ25pZmljYXRpb24obWFpblZpZXcoKSwgLTEpOwotICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEVmbDo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQobWFpblZpZXcoKSwg
dHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXREZWZlcnNMb2FkaW5nKG1h
aW5WaWV3KCksIGZhbHNlKTsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldExvYWRz
U2l0ZUljb25zSWdub3JpbmdJbWFnZUxvYWRpbmdTZXR0aW5nKG1haW5WaWV3KCksIGZhbHNlKTsK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcyhmYWxz
ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRNaW5pbXVtTG9naWNhbEZvbnRT
aXplKG1haW5WaWV3KCksIDkpOwotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0Q1NT
UmVnaW9uc0VuYWJsZWQobWFpblZpZXcoKSwgdHJ1ZSk7Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyhmYWxzZSk7Ci0gICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0RWZsOjpzZXRUcmFja3NSZXBhaW50cyhtYWluRnJhbWUoKSwgZmFsc2UpOwot
ICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0V2ViQXVkaW9FbmFibGVkKG1haW5WaWV3
KCksIGZhbHNlKTsKLQotICAgIC8vIFJlc2V0IGNhcGFjaXRpZXMgZm9yIHRoZSBtZW1vcnkgY2Fj
aGUgZm9yIGRlYWQgb2JqZWN0cy4KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2FjaGVUb3Rh
bENhcGFjaXR5ID0gIDgxOTIgKiAxMDI0OwotICAgIGV3a19zZXR0aW5nc19vYmplY3RfY2FjaGVf
Y2FwYWNpdHlfc2V0KDAsIGNhY2hlVG90YWxDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsK
LSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9u
SW50ZXJ2YWwoMCk7Ci0gICAgZXdrX3NldHRpbmdzX3BhZ2VfY2FjaGVfY2FwYWNpdHlfc2V0KDMp
OwotCi0gICAgcG9saWN5RGVsZWdhdGVFbmFibGVkID0gZmFsc2U7Ci0gICAgcG9saWN5RGVsZWdh
dGVQZXJtaXNzaXZlID0gZmFsc2U7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgcGF0aFN1aXRhYmxlRm9y
VGVzdFJlc3VsdChjb25zdCBjaGFyKiB1cmlTdHJpbmcpCi17Ci0gICAgVVJMIHVyaSA9IFVSTChQ
YXJzZWRVUkxTdHJpbmcsIHVyaVN0cmluZyk7Ci0gICAgaWYgKHVyaS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiAiKG51bGwpIjsKLQotICAgIGlmICghdXJpLmlzTG9jYWxGaWxlKCkpCi0gICAg
ICAgIHJldHVybiB1cmkuc3RyaW5nKCk7Ci0KLSAgICBVUkwgbWFpbkZyYW1lVVJMID0gVVJMKFBh
cnNlZFVSTFN0cmluZywgZXdrX2ZyYW1lX3VyaV9nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpKTsK
LSAgICBpZiAobWFpbkZyYW1lVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgbWFpbkZyYW1lVVJMID0g
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpwcm92aXNpb25hbFVSTChicm93c2VyLT5tYWluRnJh
bWUoKSk7Ci0KLSAgICBTdHJpbmcgbWFpbkZyYW1lVXJsUGF0aFN0cmluZyA9IG1haW5GcmFtZVVS
TC5wYXRoKCk7Ci0gICAgU3RyaW5nIHBhdGhTdHJpbmcgPSB1cmkucGF0aCgpOwotICAgIFN0cmlu
ZyBiYXNlUGF0aCA9IG1haW5GcmFtZVVybFBhdGhTdHJpbmcuc3Vic3RyaW5nKDAsIG1haW5GcmFt
ZVVybFBhdGhTdHJpbmcucmV2ZXJzZUZpbmQoJy8nKSArIDEpOwotCi0gICAgaWYgKCFiYXNlUGF0
aC5pc0VtcHR5KCkgJiYgcGF0aFN0cmluZy5zdGFydHNXaXRoKGJhc2VQYXRoKSkKLSAgICAgICAg
cmV0dXJuIHBhdGhTdHJpbmcuc3Vic3RyaW5nKGJhc2VQYXRoLmxlbmd0aCgpKTsKLQotICAgIHJl
dHVybiB1cmkubGFzdFBhdGhDb21wb25lbnQoKTsKLX0KLQotc3RhdGljIENTdHJpbmcgZGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqIHJl
cXVlc3QpCi17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgIGJ1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiPE5TVVJMUmVxdWVzdCBVUkwgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQocGF0aFN1
aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LT51cmwpKTsKLSAgICBidWlsZGVyLmFwcGVuZExp
dGVyYWwoIiwgbWFpbiBkb2N1bWVudCBVUkwgIik7Ci0gICAgYnVpbGRlci5hcHBlbmQocGF0aFN1
aXRhYmxlRm9yVGVzdFJlc3VsdChyZXF1ZXN0LT5maXJzdF9wYXJ0eSkpOwotICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiLCBodHRwIG1ldGhvZCAiKTsKLQotICAgIGlmIChyZXF1ZXN0LT5odHRw
X21ldGhvZCkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nKHJlcXVlc3QtPmh0dHBfbWV0
aG9kKSk7Ci0gICAgZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIihub25lKSIp
OwotCi0gICAgYnVpbGRlci5hcHBlbmQoJz4nKTsKLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpLnV0ZjgoKTsKLX0KLQotc3RhdGljIENTdHJpbmcgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQoY29uc3QgRXdrX0ZyYW1lX1Jlc291cmNlX1Jlc3BvbnNlKiByZXNwb25zZSkKLXsK
LSAgICBpZiAoIXJlc3BvbnNlKQotICAgICAgICByZXR1cm4gQ1N0cmluZygiKG51bGwpIik7Ci0K
LSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCI8
TlNVUkxSZXNwb25zZSAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHJlc3BvbnNlLT51cmwpKTsKLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgaHR0
cCBzdGF0dXMgY29kZSAiKTsKLSAgICBidWlsZGVyLmFwcGVuZChTdHJpbmc6Om51bWJlcihyZXNw
b25zZS0+c3RhdHVzX2NvZGUpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgnPicpOwotICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpOwotfQotCi1zdGF0aWMgQ1N0cmluZyBkZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJyb3IpCi17
Ci0gICAgY29uc3QgY2hhciogZXJyb3JEb21haW4gPSBlcnJvci0+ZG9tYWluOwotICAgIGludCBl
cnJvckNvZGUgPSBlcnJvci0+Y29kZTsKLQotICAgIC8vIFdlIG5lZWQgdG8gZG8gc29tZSBlcnJv
ciBtYXBwaW5nIGhlcmUgdG8gbWF0Y2gKLSAgICAvLyB0aGUgdGVzdCBleHBlY3RhdGlvbnMuCi0g
ICAgaWYgKCFzdHJjbXAoZXJyb3ItPmRvbWFpbiwgIldlYktpdE5ldHdvcmtFcnJvciIpKSB7Ci0g
ICAgICAgIGVycm9yRG9tYWluID0gIk5TVVJMRXJyb3JEb21haW4iOwotICAgICAgICBlcnJvckNv
ZGUgPSAtOTk5OwotICAgIH0KLQotICAgIGlmICghc3RyY21wKGVycm9yRG9tYWluLCAiV2ViS2l0
UG9saWN5RXJyb3IiKSkKLSAgICAgICAgZXJyb3JEb21haW4gPSAiV2ViS2l0RXJyb3JEb21haW4i
OwotCi0gICAgU3RyaW5nIHJldCA9IG1ha2VTdHJpbmcoIjxOU0Vycm9yIGRvbWFpbiAiLCBlcnJv
ckRvbWFpbiwgIiwgY29kZSAiLCBTdHJpbmc6Om51bWJlcihlcnJvckNvZGUpKTsKLSAgICBpZiAo
ZXJyb3ItPmZhaWxpbmdfdXJsICYmICplcnJvci0+ZmFpbGluZ191cmwgIT0gJ1wwJykKLSAgICAg
ICAgcmV0ID0gbWFrZVN0cmluZyhyZXQsICIsIGZhaWxpbmcgVVJMIFwiIiwgZXJyb3ItPmZhaWxp
bmdfdXJsLCAiXCIiKTsKLSAgICByZXQgPSBtYWtlU3RyaW5nKHJldCwgIj4iKTsKLQotICAgIHJl
dHVybiByZXQudXRmOCgpOwotfQotCi0vLyBTbWFydCBDYWxsYmFja3MKLS8vIC0tLS0tLS0tLS0t
LS0tLQotCi12b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldpbmRvd09iamVjdENsZWFyZWQo
dm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIEV3
a19XaW5kb3dfT2JqZWN0X0NsZWFyZWRfRXZlbnQqIG9iamVjdENsZWFyZWRJbmZvID0gc3RhdGlj
X2Nhc3Q8RXdrX1dpbmRvd19PYmplY3RfQ2xlYXJlZF9FdmVudCo+KGV2ZW50SW5mbyk7Ci0gICAg
SlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEFTU0VSVChnVGVzdFJ1bm5lcik7Ci0KLSNp
ZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0gICAgYnJvd3Nlci0+YWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIoKS0+bWFrZVdpbmRvd09iamVjdChvYmplY3RDbGVhcmVkSW5mby0+Y29udGV4dCwgb2JqZWN0
Q2xlYXJlZEluZm8tPndpbmRvd09iamVjdCwgJmV4Y2VwdGlvbik7Ci0gICAgQVNTRVJUKCFleGNl
cHRpb24pOwotI2VuZGlmCi0KLSAgICBHQ0NvbnRyb2xsZXIqIGdjQ29udHJvbGxlciA9IHN0YXRp
Y19jYXN0PEdDQ29udHJvbGxlcio+KHVzZXJEYXRhKTsKLSAgICBBU1NFUlQoZ2NDb250cm9sbGVy
KTsKLQotICAgIGdUZXN0UnVubmVyLT5tYWtlV2luZG93T2JqZWN0KG9iamVjdENsZWFyZWRJbmZv
LT5jb250ZXh0LCBvYmplY3RDbGVhcmVkSW5mby0+d2luZG93T2JqZWN0LCAmZXhjZXB0aW9uKTsK
LSAgICBBU1NFUlQoIWV4Y2VwdGlvbik7Ci0KLSAgICBnY0NvbnRyb2xsZXItPm1ha2VXaW5kb3dP
YmplY3Qob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJbmZvLT53aW5k
b3dPYmplY3QsICZleGNlcHRpb24pOwotICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKLQotICAgIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjb250cm9sbGVyTmFtZShBZG9wdCwgSlNTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoImV2ZW50U2VuZGVyIikpOwotICAgIEpTT2JqZWN0U2V0UHJvcGVy
dHkob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQsIG9iamVjdENsZWFyZWRJbmZvLT53aW5kb3dP
YmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTmFtZS5nZXQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1ha2VFdmVudFNlbmRlcihvYmplY3RDbGVhcmVkSW5mby0+
Y29udGV4dCwgIUR1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZnJhbWVQYXJlbnQob2JqZWN0Q2xl
YXJlZEluZm8tPmZyYW1lKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlLCAwKTsKLQot
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0ZXh0SW5wdXRDb250cm9sbGVyTmFtZShBZG9w
dCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInRleHRJbnB1dENvbnRyb2xsZXIiKSk7
Ci0gICAgSlNPYmplY3RTZXRQcm9wZXJ0eShvYmplY3RDbGVhcmVkSW5mby0+Y29udGV4dCwgb2Jq
ZWN0Q2xlYXJlZEluZm8tPndpbmRvd09iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHRJbnB1dENvbnRyb2xsZXJOYW1lLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgbWFr
ZVRleHRJbnB1dENvbnRyb2xsZXIob2JqZWN0Q2xlYXJlZEluZm8tPmNvbnRleHQpLAotICAgICAg
ICAgICAgICAgICAgICAgICAga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSwgMCk7Ci0KLSAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6Omlu
amVjdEludGVybmFsc09iamVjdChvYmplY3RDbGVhcmVkSW5mby0+Y29udGV4dCk7Ci19Ci0KLXZv
aWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uTG9hZFN0YXJ0ZWQodm9pZCosIEV2YXNfT2JqZWN0
KiB2aWV3LCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXZhc19PYmplY3QqIGZyYW1lID0gc3Rh
dGljX2Nhc3Q8RXZhc19PYmplY3QqPihldmVudEluZm8pOwotCi0gICAgLy8gTWFrZSBzdXJlIHdl
IG9ubHkgc2V0IHRoaXMgb25jZSBwZXIgdGVzdC4gSWYgaXQgZ2V0cyBjbGVhcmVkLCBhbmQgdGhl
biBzZXQgYWdhaW4sIHdlIG1pZ2h0Ci0gICAgLy8gZW5kIHVwIGRvaW5nIHR3byBkdW1wcyBmb3Ig
b25lIHRlc3QuCi0gICAgaWYgKCF0b3BMb2FkaW5nRnJhbWUgJiYgIWRvbmUpCi0gICAgICAgIHRv
cExvYWRpbmdGcmFtZSA9IGZyYW1lOwotfQotCi1FaW5hX0Jvb2wgRHVtcFJlbmRlclRyZWVDaHJv
bWU6OnByb2Nlc3NXb3JrKHZvaWQqKQotewotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5w
cm9jZXNzV29yaygpICYmICFnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQotICAgICAgICBkdW1w
KCk7Ci0KLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOwotfQotCi12b2lkIER1bXBS
ZW5kZXJUcmVlQ2hyb21lOjp0b3BMb2FkaW5nRnJhbWVMb2FkRmluaXNoZWQoKQotewotICAgIHRv
cExvYWRpbmdGcmFtZSA9IDA7Ci0KLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4o
dHJ1ZSk7Ci0gICAgaWYgKGdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQotICAgICAgICBlY29y
ZV9pZGxlcl9hZGQocHJvY2Vzc1dvcmssIDAgLypmcmFtZSovKTsKLSAgICBlbHNlCi0gICAgICAg
IGR1bXAoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25TdGF0dXNiYXJUZXh0
U2V0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBpZiAoIWdU
ZXN0UnVubmVyLT5kdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNvbnN0IGNoYXIqIHN0YXR1c2JhclRleHQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZXZl
bnRJbmZvKTsKLSAgICBwcmludGYoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3Rh
dHVzVGV4dDolc1xuIiwgc3RhdHVzYmFyVGV4dCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVD
aHJvbWU6Om9uRnJhbWVJY29uQ2hhbmdlZCh2b2lkKiwgRXZhc19PYmplY3QqIGZyYW1lLCB2b2lk
KikKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBJY29uQ2hhbmdlcygpKSB7
Ci0gICAgICAgIGNvbnN0IFN0cmluZyBmcmFtZU5hbWUoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpzdWl0YWJsZURSVEZyYW1lTmFtZShmcmFtZSkpOwotICAgICAgICBwcmludGYoIiVzIC0gZGlk
Q2hhbmdlSWNvbnNcbiIsIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJhbWVUaXRsZUNoYW5nZWQodm9pZCosIEV2YXNf
T2JqZWN0KiBmcmFtZSwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIGNvbnN0IEV3a19UZXh0X1dp
dGhfRGlyZWN0aW9uKiB0aXRsZVRleHQgPSBzdGF0aWNfY2FzdDxjb25zdCBFd2tfVGV4dF9XaXRo
X0RpcmVjdGlvbio+KGV2ZW50SW5mbyk7Ci0KLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXIt
PmR1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVO
YW1lKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUp
KTsKLSAgICAgICAgcHJpbnRmKCIlcyAtIGRpZFJlY2VpdmVUaXRsZTogJXNcbiIsIGZyYW1lTmFt
ZS51dGY4KCkuZGF0YSgpLCAodGl0bGVUZXh0ICYmIHRpdGxlVGV4dC0+c3RyaW5nKSA/IHRpdGxl
VGV4dC0+c3RyaW5nIDogIiIpOwotICAgIH0KLQotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5l
ci0+ZHVtcFRpdGxlQ2hhbmdlcygpKQotICAgICAgICBwcmludGYoIlRJVExFIENIQU5HRUQ6ICcl
cydcbiIsICh0aXRsZVRleHQgJiYgdGl0bGVUZXh0LT5zdHJpbmcpID8gdGl0bGVUZXh0LT5zdHJp
bmcgOiAiIik7Ci0KLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBIaXN0b3J5RGVs
ZWdhdGVDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJXZWJWaWV3IHVwZGF0ZWQgdGhlIHRp
dGxlIGZvciBoaXN0b3J5IFVSTCBcIiVzXCIgdG8gXCIlc1wiLlxuIiwgZXdrX2ZyYW1lX3VyaV9n
ZXQoZnJhbWUpCi0gICAgICAgICAgICAgICAsICh0aXRsZVRleHQgJiYgdGl0bGVUZXh0LT5zdHJp
bmcpID8gdGl0bGVUZXh0LT5zdHJpbmcgOiAiIik7Ci0KLSAgICBnVGVzdFJ1bm5lci0+c2V0VGl0
bGVUZXh0RGlyZWN0aW9uKHRpdGxlVGV4dC0+ZGlyZWN0aW9uID09IEVXS19URVhUX0RJUkVDVElP
Tl9MRUZUX1RPX1JJR0hUID8gImx0ciIgOiAicnRsIik7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRy
ZWVDaHJvbWU6Om9uRG9jdW1lbnRMb2FkRmluaXNoZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCogZXZlbnRJbmZvKQotewotICAgIGNvbnN0IEV2YXNfT2JqZWN0KiBmcmFtZSA9IHN0YXRpY19j
YXN0PEV2YXNfT2JqZWN0Kj4oZXZlbnRJbmZvKTsKLSAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1l
KER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsK
LQotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygp
KQotICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWVcbiIs
IGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBlbHNlIGlmICghZG9uZSkgewotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMgPSBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnBlbmRpbmdVbmxvYWRFdmVudENvdW50KGZyYW1lKTsKLSAgICAgICAgaWYg
KHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cykKLSAgICAgICAgICAgIHByaW50ZigiJXMgLSBoYXMg
JXUgb251bmxvYWQgaGFuZGxlcihzKVxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCksIHBlbmRp
bmdGcmFtZVVubG9hZEV2ZW50cyk7Ci0gICAgfQotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlQ2hy
b21lOjpvbldpbGxTZW5kUmVxdWVzdCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudElu
Zm8pCi17Ci0gICAgRXdrX0ZyYW1lX1Jlc291cmNlX01lc3NhZ2VzKiBtZXNzYWdlcyA9IHN0YXRp
Y19jYXN0PEV3a19GcmFtZV9SZXNvdXJjZV9NZXNzYWdlcyo+KGV2ZW50SW5mbyk7Ci0KLSAgICBp
ZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKLSAg
ICAgICAgcHJpbnRmKCIlcyAtIHdpbGxTZW5kUmVxdWVzdCAlcyByZWRpcmVjdFJlc3BvbnNlICVz
XG4iLAotICAgICAgICAgICAgICAgbV9kdW1wQXNzaWduZWRVcmxzLmNvbnRhaW5zKG1lc3NhZ2Vz
LT5yZXF1ZXN0LT5pZGVudGlmaWVyKSA/IG1fZHVtcEFzc2lnbmVkVXJscy5nZXQobWVzc2FnZXMt
PnJlcXVlc3QtPmlkZW50aWZpZXIpLmRhdGEoKSA6ICI8dW5rbm93bj4iLAotICAgICAgICAgICAg
ICAgZGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQobWVzc2FnZXMtPnJlcXVlc3QpLmRh
dGEoKSwKLSAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KG1l
c3NhZ2VzLT5yZWRpcmVjdF9yZXNwb25zZSkuZGF0YSgpKTsKLQotICAgIGlmICghZG9uZSAmJiBn
VGVzdFJ1bm5lci0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwoKSkgewotICAgICAgICAvLyBB
cyByZXF1ZXN0ZWQgYnkgdGhlIFRlc3RSdW5uZXIsIGRvbid0IHBlcmZvcm0gdGhlIHJlcXVlc3Qu
Ci0gICAgICAgIG1lc3NhZ2VzLT5yZXF1ZXN0LT51cmwgPSAwOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT53aWxsU2VuZFJlcXVlc3RSZXR1
cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiBtZXNzYWdlcy0+cmVkaXJlY3RfcmVzcG9uc2UpIHsKLSAg
ICAgICAgcHJpbnRmKCJSZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7Ci0gICAg
ICAgIG1lc3NhZ2VzLT5yZXF1ZXN0LT51cmwgPSAwOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgVVJMIHVybCA9IFVSTChQYXJzZWRVUkxTdHJpbmcsIG1lc3NhZ2VzLT5yZXF1ZXN0LT51
cmwpOwotCi0gICAgaWYgKHVybC5pc1ZhbGlkKCkKLSAgICAgICAgJiYgdXJsLnByb3RvY29sSXNJ
bkhUVFBGYW1pbHkoKQotICAgICAgICAmJiB1cmwuaG9zdCgpICE9ICIxMjcuMC4wLjEiCi0gICAg
ICAgICYmIHVybC5ob3N0KCkgIT0gIjI1NS4yNTUuMjU1LjI1NSIKLSAgICAgICAgJiYgdXJsLmhv
c3QoKS5sb3dlcigpICE9ICJsb2NhbGhvc3QiKSB7Ci0gICAgICAgIHByaW50ZigiQmxvY2tlZCBh
Y2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICVzXG4iLCBtZXNzYWdlcy0+cmVxdWVzdC0+dXJsKTsKLSAg
ICAgICAgbWVzc2FnZXMtPnJlcXVlc3QtPnVybCA9IDA7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgZGVzdGluYXRpb24gPSBnVGVzdFJ1bm5lci0+cmVk
aXJlY3Rpb25EZXN0aW5hdGlvbkZvclVSTCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgaWYgKGRlc3RpbmF0aW9uLmxlbmd0aCgpKQotICAgICAgICBtZXNzYWdlcy0+cmVxdWVzdC0+
dXJsID0gc3RyZHVwKGRlc3RpbmF0aW9uLmNfc3RyKCkpOwotfQotCi12b2lkIER1bXBSZW5kZXJU
cmVlQ2hyb21lOjpvbldlYlZpZXdPbmxvYWRFdmVudCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lk
KiBldmVudEluZm8pCi17Ci0gICAgY29uc3QgRXZhc19PYmplY3QqIGZyYW1lID0gc3RhdGljX2Nh
c3Q8RXZhc19PYmplY3QqPihldmVudEluZm8pOwotCi0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nIGZy
YW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZy
YW1lKSk7Ci0gICAgICAgIHByaW50ZigiJXMgLSBkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFt
ZVxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLX0KLQotdm9pZCBEdW1wUmVu
ZGVyVHJlZUNocm9tZTo6b25JbnNlY3VyZUNvbnRlbnRSdW4odm9pZCosIEV2YXNfT2JqZWN0Kiwg
dm9pZCopCi17Ci0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiZGlkUnVuSW5zZWN1cmVDb250ZW50XG4iKTsKLX0K
LQotdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25JbnNlY3VyZUNvbnRlbnREaXNwbGF5ZWQo
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopCi17Ci0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVu
bmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiZGlkRGlzcGxh
eUluc2VjdXJlQ29udGVudFxuIik7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9u
RnJhbWVDcmVhdGVkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAg
ICBFdmFzX09iamVjdCogZnJhbWUgPSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCo+KGV2ZW50SW5m
byk7Ci0KLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoZnJhbWUsICJpY29uLGNo
YW5nZWQiLCBvbkZyYW1lSWNvbkNoYW5nZWQsIDApOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZChmcmFtZSwgImxvYWQscHJvdmlzaW9uYWwiLCBvbkZyYW1lUHJvdmlzaW9uYWxM
b2FkLCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoZnJhbWUsICJsb2Fk
LHByb3Zpc2lvbmFsLGZhaWxlZCIsIG9uRnJhbWVQcm92aXNpb25hbExvYWRGYWlsZWQsIDApOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChmcmFtZSwgImxvYWQsY29tbWl0dGVk
Iiwgb25GcmFtZUxvYWRDb21taXR0ZWQsIDApOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZChmcmFtZSwgImxvYWQsZmluaXNoZWQiLCBvbkZyYW1lTG9hZEZpbmlzaGVkLCAwKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoZnJhbWUsICJsb2FkLGVycm9yIiwg
b25GcmFtZUxvYWRFcnJvciwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KGZyYW1lLCAicmVkaXJlY3QsY2FuY2VsbGVkIiwgb25GcmFtZVJlZGlyZWN0Q2FuY2VsbGVkLCAw
KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoZnJhbWUsICJyZWRpcmVjdCxs
b2FkLHByb3Zpc2lvbmFsIiwgb25GcmFtZVJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkLCAwKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoZnJhbWUsICJyZWRpcmVjdCxyZXF1
ZXN0ZWQiLCBvbkZyYW1lUmVkaXJlY3RSZXF1ZXN0ZWQsIDApOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZChmcmFtZSwgInRpdGxlLGNoYW5nZWQiLCBvbkZyYW1lVGl0bGVDaGFu
Z2VkLCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoZnJhbWUsICJ4c3Ms
ZGV0ZWN0ZWQiLCBvbkRpZERldGVjdFhTUywgMCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVD
aHJvbWU6Om9uV2ViVmlld05hdmlnYXRlZFdpdGhEYXRhKHZvaWQqLCBFdmFzX09iamVjdCosIHZv
aWQqIGV2ZW50SW5mbykKLXsKLSAgICBpZiAoZG9uZSB8fCAhZ1Rlc3RSdW5uZXItPmR1bXBIaXN0
b3J5RGVsZWdhdGVDYWxsYmFja3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGV2
ZW50SW5mbyk7Ci0gICAgY29uc3QgRXdrX1ZpZXdfTmF2aWdhdGlvbl9EYXRhKiBuYXZpZ2F0aW9u
RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X05hdmlnYXRpb25fRGF0YSo+KGV2ZW50SW5mbyk7
Ci0KLSAgICBBU1NFUlQobmF2aWdhdGlvbkRhdGEtPnJlcXVlc3QpOwotICAgIEFTU0VSVChuYXZp
Z2F0aW9uRGF0YS0+cmVzcG9uc2UpOwotCi0gICAgY29uc3QgYm9vbCB3YXNGYWlsdXJlID0gbmF2
aWdhdGlvbkRhdGEtPmhhc19zdWJzdGl0dXRlX2RhdGEgfHwgbmF2aWdhdGlvbkRhdGEtPnJlc3Bv
bnNlLT5zdGF0dXNfY29kZSA+PSA0MDA7Ci0gICAgY29uc3QgYm9vbCB3YXNSZWRpcmVjdGVkID0g
bmF2aWdhdGlvbkRhdGEtPmNsaWVudF9yZWRpcmVjdF9zb3VyY2UgJiYgKihuYXZpZ2F0aW9uRGF0
YS0+Y2xpZW50X3JlZGlyZWN0X3NvdXJjZSk7Ci0KLSAgICBwcmludGYoIldlYlZpZXcgbmF2aWdh
dGVkIHRvIHVybCBcIiVzXCIgd2l0aCB0aXRsZSBcIiVzXCIgd2l0aCBIVFRQIGVxdWl2YWxlbnQg
bWV0aG9kIFwiJXNcIi4gIFRoZSBuYXZpZ2F0aW9uIHdhcyAlcyBhbmQgd2FzICVzJXMuXG4iLAot
ICAgICAgICBuYXZpZ2F0aW9uRGF0YS0+dXJsLAotICAgICAgICBuYXZpZ2F0aW9uRGF0YS0+dGl0
bGUsCi0gICAgICAgIG5hdmlnYXRpb25EYXRhLT5yZXF1ZXN0LT5odHRwX21ldGhvZCwKLSAgICAg
ICAgd2FzRmFpbHVyZT8gImEgZmFpbHVyZSIgOiAic3VjY2Vzc2Z1bCIsCi0gICAgICAgICh3YXNS
ZWRpcmVjdGVkID8gImEgY2xpZW50IHJlZGlyZWN0IGZyb20gIiA6ICJub3QgYSBjbGllbnQgcmVk
aXJlY3QiKSwKLSAgICAgICAgKHdhc1JlZGlyZWN0ZWQgPyBuYXZpZ2F0aW9uRGF0YS0+Y2xpZW50
X3JlZGlyZWN0X3NvdXJjZSA6ICIiKSk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6
Om9uV2ViVmlld1NlcnZlclJlZGlyZWN0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50
SW5mbykKLXsKLSAgICBpZiAoZG9uZSB8fCAhZ1Rlc3RSdW5uZXItPmR1bXBIaXN0b3J5RGVsZWdh
dGVDYWxsYmFja3MoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGV2ZW50SW5mbyk7
Ci0gICAgY29uc3QgRXdrX1ZpZXdfUmVkaXJlY3Rpb25fRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0
PEV3a19WaWV3X1JlZGlyZWN0aW9uX0RhdGEqPihldmVudEluZm8pOwotICAgIHByaW50ZigiV2Vi
VmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIgcmVkaXJlY3QgZnJvbSBcIiVzXCIgdG8gXCIlc1wiLlxu
IiwgZGF0YS0+c291cmNlX3VybCwgZGF0YS0+ZGVzdGluYXRpb25fdXJsKTsKLX0KLQotdm9pZCBE
dW1wUmVuZGVyVHJlZUNocm9tZTo6b25XZWJWaWV3Q2xpZW50UmVkaXJlY3Qodm9pZCosIEV2YXNf
T2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIGlmIChkb25lIHx8ICFnVGVzdFJ1bm5l
ci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBU1NFUlQoZXZlbnRJbmZvKTsKLSAgICBjb25zdCBFd2tfVmlld19SZWRpcmVjdGlvbl9EYXRh
KiBkYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUmVkaXJlY3Rpb25fRGF0YSo+KGV2ZW50SW5m
byk7Ci0gICAgcHJpbnRmKCJXZWJWaWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVjdCBmcm9t
IFwiJXNcIiB0byBcIiVzXCIuXG4iLCBkYXRhLT5zb3VyY2VfdXJsLCBkYXRhLT5kZXN0aW5hdGlv
bl91cmwpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbldlYlZpZXdQb3B1bGF0
ZVZpc2l0ZWRMaW5rcyh2b2lkKiwgRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqKQotewotICAg
IGlmIChkb25lIHx8ICFnVGVzdFJ1bm5lci0+ZHVtcEhpc3RvcnlEZWxlZ2F0ZUNhbGxiYWNrcygp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcmludGYoIkFza2VkIHRvIHBvcHVsYXRlIHZpc2l0
ZWQgbGlua3MgZm9yIFdlYlZpZXcgXCIlc1wiXG4iLCBld2tfdmlld191cmlfZ2V0KGV3a1ZpZXcp
KTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25JbnNwZWN0b3JWaWV3Q3JlYXRl
KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKQotewotICAgIEV2YXNfT2JqZWN0KiBpbnNwZWN0
b3JWaWV3ID0gYnJvd3Nlci0+Y3JlYXRlSW5zcGVjdG9yVmlldygpOwotICAgIGlmIChpbnNwZWN0
b3JWaWV3KQotICAgICAgICBld2tfdmlld19pbnNwZWN0b3Jfdmlld19zZXQoYnJvd3Nlci0+bWFp
blZpZXcoKSwgaW5zcGVjdG9yVmlldyk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6
Om9uSW5zcGVjdG9yVmlld0Nsb3NlKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKQotewotICAg
IGJyb3dzZXItPnJlbW92ZUluc3BlY3RvclZpZXcoKTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJl
ZUNocm9tZTo6b25JbnNwZWN0b3JGcmFtZUxvYWRGaW5pc2hlZCh2b2lkKiwgRXZhc19PYmplY3Qq
LCB2b2lkKikKLXsKLSAgICBFdmFzX09iamVjdCogaW5zcGVjdG9yVmlldyA9IGV3a192aWV3X2lu
c3BlY3Rvcl92aWV3X2dldChicm93c2VyLT5tYWluVmlldygpKTsKLSAgICBpZiAoaW5zcGVjdG9y
VmlldykKLSAgICAgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKLX0KLQotdm9pZCBEdW1wUmVu
ZGVyVHJlZUNocm9tZTo6b25GcmFtZVByb3Zpc2lvbmFsTG9hZCh2b2lkKiwgRXZhc19PYmplY3Qq
IGZyYW1lLCB2b2lkKikKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBGcmFt
ZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKLSAgICAg
ICAgcHJpbnRmKCIlcyAtIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWVcbiIsIGZyYW1l
TmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoIXRvcExvYWRpbmdGcmFtZSAm
JiAhZG9uZSkKLSAgICAgICAgdG9wTG9hZGluZ0ZyYW1lID0gZnJhbWU7Ci0gIAotICAgIGlmICgh
ZG9uZSAmJiBnVGVzdFJ1bm5lci0+c3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcygpKSB7IAotICAg
ICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3Vp
dGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKLSAgICAgICAgcHJpbnRmKCIlcyAtIHN0b3BwaW5n
IGxvYWQgaW4gZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSBjYWxsYmFja1xuIiwgZnJh
bWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBld2tfZnJhbWVfc3RvcChmcmFtZSk7Ci0g
ICAgfSAgIAotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUHJvdmlzaW9u
YWxMb2FkRmFpbGVkKHZvaWQqLCBFdmFzX09iamVjdCogZnJhbWUsIHZvaWQqKQotewotICAgIG1f
cHJvdmlzaW9uYWxMb2FkRmFpbGVkRnJhbWUgPSBmcmFtZTsKLQotICAgIGlmICghZG9uZSAmJiBn
VGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIGNvbnN0IFN0
cmluZyBmcmFtZU5hbWUoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzdWl0YWJsZURSVEZyYW1l
TmFtZShmcmFtZSkpOwotICAgICAgICBwcmludGYoIiVzIC0gZGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZFdpdGhFcnJvclxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLX0KLQotdm9p
ZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25GcmFtZUxvYWRDb21taXR0ZWQodm9pZCosIEV2YXNf
T2JqZWN0KiBmcmFtZSwgdm9pZCopCi17Ci0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5k
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFt
ZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7
Ci0gICAgICAgIHByaW50ZigiJXMgLSBkaWRDb21taXRMb2FkRm9yRnJhbWVcbiIsIGZyYW1lTmFt
ZS51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6
Om9uRnJhbWVMb2FkRmluaXNoZWQodm9pZCosIEV2YXNfT2JqZWN0KiBmcmFtZSwgdm9pZCogZXZl
bnRJbmZvKQotewotICAgIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBlcnJvciA9IHN0YXRp
Y19jYXN0PEV3a19GcmFtZV9Mb2FkX0Vycm9yKj4oZXZlbnRJbmZvKTsKLQotICAgIC8vIEVGTCBw
b3J0IGVtaXRzIGJvdGggImxvYWQsZmluaXNoZWQiIGFuZCAibG9hZCxlcnJvciIgc2lnbmFscyBp
biBlcnJvciBjYXNlLgotICAgIC8vIEVycm9yIGNhc2UgaXMgdGhlcmVmb3JlIGFscmVhZHkgaGFu
ZGxlZCBpbiBvbkZyYW1lTG9hZEVycm9yKCkgYW5kIHdlIGRvbid0IG5lZWQKLSAgICAvLyB0byBo
YW5kbGUgaXQgaGVyZS4KLSAgICBpZiAoZXJyb3IpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpKQot
ICAgICAgICBwcmludGYoInBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uXG4iKTsKLQot
ICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7
Ci0gICAgICAgIGNvbnN0IFN0cmluZyBmcmFtZU5hbWUoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZs
OjpzdWl0YWJsZURSVEZyYW1lTmFtZShmcmFtZSkpOwotICAgICAgICBwcmludGYoIiVzIC0gZGlk
RmluaXNoTG9hZEZvckZyYW1lXG4iLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQot
Ci0gICAgaWYgKGZyYW1lID09IHRvcExvYWRpbmdGcmFtZSkKLSAgICAgICAgdG9wTG9hZGluZ0Zy
YW1lTG9hZEZpbmlzaGVkKCk7Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRnJh
bWVMb2FkRXJyb3Iodm9pZCosIEV2YXNfT2JqZWN0KiBmcmFtZSwgdm9pZCopCi17Ci0gICAgLy8g
SW4gY2FzZSBvZiBwcm92aXNpb25hbCBsb2FkIGVycm9yLCB3ZSByZWNlaXZlIGJvdGggImxvYWQs
ZXJyb3IiIGFuZCAibG9hZCxwcm92aXNpb25hbCxmYWlsZWQiCi0gICAgLy8gc2lnbmFscy4gbV9w
cm92aXNpb25hbExvYWRGYWlsZWRGcmFtZSBpcyB1c2VkIHRvIGF2b2lkIHByaW50aW5nIHR3aWNl
IHRoZSBsb2FkIGVycm9yOiBpbgotICAgIC8vIG9uRnJhbWVQcm92aXNpb25hbExvYWRGYWlsZWQo
KSBhbmQgb25GcmFtZUxvYWRFcnJvcigpLgotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+
ZHVtcEZyYW1lTG9hZENhbGxiYWNrcygpICYmIGZyYW1lICE9IG1fcHJvdmlzaW9uYWxMb2FkRmFp
bGVkRnJhbWUpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnN1aXRhYmxlRFJURnJhbWVOYW1lKGZyYW1lKSk7Ci0gICAgICAgIHByaW50
ZigiJXMgLSBkaWRGYWlsTG9hZFdpdGhFcnJvclxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCkp
OwotICAgIH0KLQotICAgIGlmIChtX3Byb3Zpc2lvbmFsTG9hZEZhaWxlZEZyYW1lICYmIGZyYW1l
ID09IG1fcHJvdmlzaW9uYWxMb2FkRmFpbGVkRnJhbWUpCi0gICAgICAgIG1fcHJvdmlzaW9uYWxM
b2FkRmFpbGVkRnJhbWUgPSAwOwotCi0gICAgaWYgKGZyYW1lID09IHRvcExvYWRpbmdGcmFtZSkK
LSAgICAgICAgdG9wTG9hZGluZ0ZyYW1lTG9hZEZpbmlzaGVkKCk7Ci19Ci0KLXZvaWQgRHVtcFJl
bmRlclRyZWVDaHJvbWU6Om9uRnJhbWVSZWRpcmVjdENhbmNlbGxlZCh2b2lkKiwgRXZhc19PYmpl
Y3QqIGZyYW1lLCB2b2lkKikKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKLSAg
ICAgICAgcHJpbnRmKCIlcyAtIGRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWVcbiIsIGZy
YW1lTmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVD
aHJvbWU6Om9uRnJhbWVSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCh2b2lkKiwgRXZhc19PYmpl
Y3QqIGZyYW1lLCB2b2lkKikKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkgewotICAgICAgICBjb25zdCBTdHJpbmcgZnJhbWVOYW1lKER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c3VpdGFibGVEUlRGcmFtZU5hbWUoZnJhbWUpKTsKLSAg
ICAgICAgcHJpbnRmKCIlcyAtIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lXG4iLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotfQotCi12
b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvbkZyYW1lUmVkaXJlY3RSZXF1ZXN0ZWQodm9pZCos
IEV2YXNfT2JqZWN0KiBmcmFtZSwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIGNvbnN0IGNoYXIq
IHVybCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihldmVudEluZm8pOwotCi0gICAgaWYgKCFk
b25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAg
Y29uc3QgU3RyaW5nIGZyYW1lTmFtZShEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnN1aXRhYmxl
RFJURnJhbWVOYW1lKGZyYW1lKSk7Ci0gICAgICAgIHByaW50ZigiJXMgLSB3aWxsUGVyZm9ybUNs
aWVudFJlZGlyZWN0VG9VUkw6ICVzIFxuIiwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCksIHBhdGhT
dWl0YWJsZUZvclRlc3RSZXN1bHQodXJsKS51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci19Ci0KLXZv
aWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uRGlkRGV0ZWN0WFNTKHZvaWQqLCBFdmFzX09iamVj
dCogdmlldywgdm9pZCopCi17Ci0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiZGlkRGV0ZWN0WFNTXG4iKTsKLX0K
LQotdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25SZXNwb25zZVJlY2VpdmVkKHZvaWQqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBFd2tfRnJhbWVfUmVzb3VyY2Vf
UmVzcG9uc2UqIHJlc3BvbnNlID0gc3RhdGljX2Nhc3Q8RXdrX0ZyYW1lX1Jlc291cmNlX1Jlc3Bv
bnNlKj4oZXZlbnRJbmZvKTsKLQotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcygpKSB7Ci0gICAgICAgIENTdHJpbmcgcmVzcG9uc2VEZXNjcmlw
dGlvbihkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSkpOwotICAgICAg
ICBwcmludGYoIiVzIC0gZGlkUmVjZWl2ZVJlc3BvbnNlICVzXG4iLAotICAgICAgICAgICAgICAg
bV9kdW1wQXNzaWduZWRVcmxzLmNvbnRhaW5zKHJlc3BvbnNlLT5pZGVudGlmaWVyKSA/IG1fZHVt
cEFzc2lnbmVkVXJscy5nZXQocmVzcG9uc2UtPmlkZW50aWZpZXIpLmRhdGEoKSA6ICI8dW5rbm93
bj4iLAotICAgICAgICAgICAgICAgcmVzcG9uc2VEZXNjcmlwdGlvbi5kYXRhKCkpOwotICAgIH0K
LQotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNlUmVzcG9uc2VNSU1F
VHlwZXMoKSkgewotICAgICAgICBwcmludGYoIiVzIGhhcyBNSU1FIHR5cGUgJXNcbiIsCi0gICAg
ICAgICAgICAgICBVUkwoUGFyc2VkVVJMU3RyaW5nLCByZXNwb25zZS0+dXJsKS5sYXN0UGF0aENv
bXBvbmVudCgpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICAgICAgICByZXNwb25zZS0+bWltZV90
eXBlKTsKLSAgICB9Ci19Ci0KLXZvaWQgRHVtcFJlbmRlclRyZWVDaHJvbWU6Om9uUmVzb3VyY2VM
b2FkRmluaXNoZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAg
IHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9ICpzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nKj4o
ZXZlbnRJbmZvKTsKLQotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcFJlc291cmNl
TG9hZENhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIiVzIC0gZGlkRmluaXNoTG9hZGluZ1xu
IiwKLSAgICAgICAgICAgICAgIChtX2R1bXBBc3NpZ25lZFVybHMuY29udGFpbnMoaWRlbnRpZmll
cikgPyBtX2R1bXBBc3NpZ25lZFVybHMudGFrZShpZGVudGlmaWVyKS5kYXRhKCkgOiAiPHVua25v
d24+IikpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpvblJlc291cmNlTG9hZEZh
aWxlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgRXdrX0Zy
YW1lX0xvYWRfRXJyb3IqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXdrX0ZyYW1lX0xvYWRfRXJyb3Iq
PihldmVudEluZm8pOwotCi0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wUmVzb3Vy
Y2VMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiJXMgLSBkaWRGYWlsTG9hZGluZ1dp
dGhFcnJvcjogJXNcbiIsCi0gICAgICAgICAgICAgICAobV9kdW1wQXNzaWduZWRVcmxzLmNvbnRh
aW5zKGVycm9yLT5yZXNvdXJjZV9pZGVudGlmaWVyKSA/IG1fZHVtcEFzc2lnbmVkVXJscy50YWtl
KGVycm9yLT5yZXNvdXJjZV9pZGVudGlmaWVyKS5kYXRhKCkgOiAiPHVua25vd24+IiksCi0gICAg
ICAgICAgICAgICBkZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChlcnJvcikuZGF0YSgp
KTsKLX0KLQotdm9pZCBEdW1wUmVuZGVyVHJlZUNocm9tZTo6b25OZXdSZXNvdXJjZVJlcXVlc3Qo
dm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQotewotICAgIEV3a19GcmFtZV9S
ZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8RXdrX0ZyYW1lX1Jlc291cmNl
X1JlcXVlc3QqPihldmVudEluZm8pOwotCi0gICAgaWYgKCFkb25lKQotICAgICAgICBtX2R1bXBB
c3NpZ25lZFVybHMuYWRkKHJlcXVlc3QtPmlkZW50aWZpZXIsIHBhdGhTdWl0YWJsZUZvclRlc3RS
ZXN1bHQocmVxdWVzdC0+dXJsKS51dGY4KCkpOwotfQotCi12b2lkIER1bXBSZW5kZXJUcmVlQ2hy
b21lOjpvbkRvd25sb2FkUmVxdWVzdCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudElu
Zm8pCi17Ci0gICAgLy8gSW4gY2FzZSBvZiAiZG93bmxvYWQscmVxdWVzdCIsIHRoZSBVUkwgbmVl
ZCB0byBiZSBkb3dubG9hZGVkLCBub3Qgb3BlbmVkIG9uIHRoZSBjdXJyZW50IHZpZXcuCi0gICAg
Ly8gQmVjYXVzZSB0aGVyZSBpcyBubyBkb3dubG9hZCBhZ2VudCBmb3IgdGhlIER1bXBSZW5kZXJU
cmVlLAotICAgIC8vIGNyZWF0ZSBhIG5ldyB2aWV3IGFuZCBsb2FkIHRoZSBVUkwgb24gdGhhdCB2
aWV3IGp1c3QgZm9yIGEgdGVzdC4KLSAgICBFdmFzX09iamVjdCogbmV3VmlldyA9IGJyb3dzZXIt
PmNyZWF0ZVZpZXcoKTsKLSAgICBpZiAoIW5ld1ZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBzdGF0aWNfY2FzdDxFd2tfRG93bmxvYWQqPihldmVu
dEluZm8pOwotICAgIGV3a192aWV3X3RoZW1lX3NldChuZXdWaWV3LCBURVNUX1RIRU1FX0RJUiAi
L2RlZmF1bHQuZWRqIik7Ci0gICAgZXdrX3ZpZXdfdXJpX3NldChuZXdWaWV3LCBkb3dubG9hZC0+
dXJsKTsKLSAKLSAgICBicm93c2VyLT5tX2V4dHJhVmlld3MuYXBwZW5kKG5ld1ZpZXcpOwotfQot
Ci0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIqIER1bXBS
ZW5kZXJUcmVlQ2hyb21lOjphY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fYXhDb250cm9sbGVyLmdldCgpOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuaCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4MzY1OTY1NjE3YzQxMzc1MDNiNGQ1YmQ2ZGJlMjRhYWIxZmNmNjM3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUNocm9tZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5
c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICogUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogSE9MREVSUyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgRHVtcFJlbmRlclRyZWVDaHJvbWVfaAotI2RlZmluZSBE
dW1wUmVuZGVyVHJlZUNocm9tZV9oCi0KLSNpbmNsdWRlICJHQ0NvbnRyb2xsZXIuaCIKLQotI2lu
Y2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRlIDxFdmFzLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLmgiCi0jZW5kaWYKLQotY2xhc3MgRHVtcFJlbmRlclRyZWVDaHJvbWUgewotcHVibGljOgot
ICAgIH5EdW1wUmVuZGVyVHJlZUNocm9tZSgpOwotCi0gICAgc3RhdGljIFBhc3NPd25QdHI8RHVt
cFJlbmRlclRyZWVDaHJvbWU+IGNyZWF0ZShFdmFzKik7Ci0KLSAgICBFdmFzX09iamVjdCogY3Jl
YXRlTmV3V2luZG93KCk7Ci0gICAgdm9pZCByZW1vdmVXaW5kb3coRXZhc19PYmplY3QqKTsKLQot
ICAgIEV2YXNfT2JqZWN0KiBjcmVhdGVJbnNwZWN0b3JWaWV3KCk7Ci0gICAgdm9pZCByZW1vdmVJ
bnNwZWN0b3JWaWV3KCk7Ci0gICAgdm9pZCB3YWl0SW5zcGVjdG9yTG9hZEZpbmlzaGVkKCk7Ci0K
LSAgICBjb25zdCBWZWN0b3I8RXZhc19PYmplY3QqPiYgZXh0cmFWaWV3cygpIGNvbnN0OwotICAg
IHZvaWQgY2xlYXJFeHRyYVZpZXdzKCk7Ci0KLSAgICBFdmFzX09iamVjdCogbWFpbkZyYW1lKCkg
Y29uc3Q7Ci0gICAgRXZhc19PYmplY3QqIG1haW5WaWV3KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJl
c2V0RGVmYXVsdHNUb0NvbnNpc3RlbnRWYWx1ZXMoKTsKLQotcHJpdmF0ZToKLSAgICBEdW1wUmVu
ZGVyVHJlZUNocm9tZShFdmFzKik7Ci0KLSAgICBFdmFzX09iamVjdCogY3JlYXRlVmlldygpIGNv
bnN0OwotICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwotI2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKLSAg
ICBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlciogYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKSBjb25z
dDsKLSAgICBPd25QdHI8QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI+IG1fYXhDb250cm9sbGVyOwot
I2VuZGlmCi0gICAgRXZhc19PYmplY3QqIG1fbWFpbkZyYW1lOwotICAgIEV2YXNfT2JqZWN0KiBt
X21haW5WaWV3OwotICAgIEV2YXMqIG1fZXZhczsKLSAgICBPd25QdHI8R0NDb250cm9sbGVyPiBt
X2djQ29udHJvbGxlcjsKLSAgICBWZWN0b3I8RXZhc19PYmplY3QqPiBtX2V4dHJhVmlld3M7Ci0g
ICAgc3RhdGljIEhhc2hNYXA8dW5zaWduZWQgbG9uZywgQ1N0cmluZz4gbV9kdW1wQXNzaWduZWRV
cmxzOwotICAgIHN0YXRpYyBFdmFzX09iamVjdCogbV9wcm92aXNpb25hbExvYWRGYWlsZWRGcmFt
ZTsKLQotICAgIC8vIFNtYXJ0IGNhbGxiYWNrcwotICAgIHN0YXRpYyB2b2lkIG9uV2luZG93T2Jq
ZWN0Q2xlYXJlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQg
b25Mb2FkU3RhcnRlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0KLSAgICBzdGF0aWMg
RWluYV9Cb29sIHByb2Nlc3NXb3JrKHZvaWQqKTsKLQotICAgIHN0YXRpYyB2b2lkIHRvcExvYWRp
bmdGcmFtZUxvYWRGaW5pc2hlZCgpOwotCi0gICAgc3RhdGljIHZvaWQgb25TdGF0dXNiYXJUZXh0
U2V0KHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKLQotICAgIHN0YXRpYyB2b2lkIG9uRnJh
bWVUaXRsZUNoYW5nZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopOwotCi0gICAgc3RhdGlj
IHZvaWQgb25Eb2N1bWVudExvYWRGaW5pc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7
Ci0KLSAgICBzdGF0aWMgdm9pZCBvbldpbGxTZW5kUmVxdWVzdCh2b2lkKiwgRXZhc19PYmplY3Qq
LCB2b2lkKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBvbldlYlZpZXdPbmxvYWRFdmVudCh2b2lkKiwg
RXZhc19PYmplY3QqLCB2b2lkKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBvbldlYlZpZXdOYXZpZ2F0
ZWRXaXRoRGF0YSh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0KLSAgICBzdGF0aWMgdm9p
ZCBvbldlYlZpZXdTZXJ2ZXJSZWRpcmVjdCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0K
LSAgICBzdGF0aWMgdm9pZCBvbldlYlZpZXdDbGllbnRSZWRpcmVjdCh2b2lkKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBvbldlYlZpZXdQb3B1bGF0ZVZpc2l0ZWRM
aW5rcyh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBvbklu
c2VjdXJlQ29udGVudFJ1bih2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0KLSAgICBzdGF0
aWMgdm9pZCBvbkluc2VjdXJlQ29udGVudERpc3BsYXllZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2
b2lkKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBvbkZyYW1lQ3JlYXRlZCh2b2lkKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKik7Ci0KLSAgICBzdGF0aWMgdm9pZCBvbkluc3BlY3RvclZpZXdDcmVhdGUodm9p
ZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopOwotCi0gICAgc3RhdGljIHZvaWQgb25JbnNwZWN0b3JW
aWV3Q2xvc2Uodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopOwotCi0gICAgc3RhdGljIHZvaWQg
b25JbnNwZWN0b3JGcmFtZUxvYWRGaW5pc2hlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7
Ci0KLSAgICBzdGF0aWMgdm9pZCBvbkZyYW1lSWNvbkNoYW5nZWQodm9pZCosIEV2YXNfT2JqZWN0
Kiwgdm9pZCopOwotCi0gICAgc3RhdGljIHZvaWQgb25GcmFtZVByb3Zpc2lvbmFsTG9hZCh2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgb25GcmFtZVByb3Zpc2lv
bmFsTG9hZEZhaWxlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0KLSAgICBzdGF0aWMg
dm9pZCBvbkZyYW1lTG9hZENvbW1pdHRlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0K
LSAgICBzdGF0aWMgdm9pZCBvbkZyYW1lTG9hZEZpbmlzaGVkKHZvaWQqLCBFdmFzX09iamVjdCos
IHZvaWQqKTsKLQotICAgIHN0YXRpYyB2b2lkIG9uRnJhbWVSZWRpcmVjdENhbmNlbGxlZCh2b2lk
KiwgRXZhc19PYmplY3QqLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgb25GcmFtZVJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxMb2FkKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKLSAgICBzdGF0
aWMgdm9pZCBvbkZyYW1lUmVkaXJlY3RSZXF1ZXN0ZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9p
ZCopOwotCi0gICAgc3RhdGljIHZvaWQgb25GcmFtZUxvYWRFcnJvcih2b2lkKiwgRXZhc19PYmpl
Y3QqLCB2b2lkKik7Ci0gICAgc3RhdGljIHZvaWQgb25EaWREZXRlY3RYU1Modm9pZCosIEV2YXNf
T2JqZWN0Kiwgdm9pZCopOwotCi0gICAgc3RhdGljIHZvaWQgb25SZXNwb25zZVJlY2VpdmVkKHZv
aWQqLCBFdmFzX09iamVjdCosIHZvaWQqKTsKLQotICAgIHN0YXRpYyB2b2lkIG9uUmVzb3VyY2VM
b2FkRmluaXNoZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopOwotCi0gICAgc3RhdGljIHZv
aWQgb25SZXNvdXJjZUxvYWRGYWlsZWQodm9pZCosIEV2YXNfT2JqZWN0Kiwgdm9pZCopOwotCi0g
ICAgc3RhdGljIHZvaWQgb25OZXdSZXNvdXJjZVJlcXVlc3Qodm9pZCosIEV2YXNfT2JqZWN0Kiwg
dm9pZCopOwotCi0gICAgc3RhdGljIHZvaWQgb25Eb3dubG9hZFJlcXVlc3Qodm9pZCosIEV2YXNf
T2JqZWN0Kiwgdm9pZCopOwotfTsKLQotI2VuZGlmIC8vIER1bXBSZW5kZXJUcmVlQ2hyb21lX2gK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZUVmbC5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlRWZsLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViYzVjZDM1YWQ2MjVmOGZjMTBjZjcxNDZlOTk1NTJlNTdk
YzIxNWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlRWZsLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJl
ZGRlZCBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcwot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZCBpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBJVFMgQ09OVFJJQlVUT1JTCi0gKiBgYEFTIElTJycgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSUyBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRHVtcFJlbmRl
clRyZWVFZmxfaAotI2RlZmluZSBEdW1wUmVuZGVyVHJlZUVmbF9oCi0KLSNpbmNsdWRlIDxFY29y
ZS5oPgotI2luY2x1ZGUgPEV2YXMuaD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLWNsYXNz
IER1bXBSZW5kZXJUcmVlQ2hyb21lOwotCi1leHRlcm4gT3duUHRyPER1bXBSZW5kZXJUcmVlQ2hy
b21lPiBicm93c2VyOwotZXh0ZXJuIEV2YXNfT2JqZWN0KiB0b3BMb2FkaW5nRnJhbWU7Ci1leHRl
cm4gYm9vbCB3YWl0Rm9yUG9saWN5OwotZXh0ZXJuIGJvb2wgcG9saWN5RGVsZWdhdGVFbmFibGVk
OwotZXh0ZXJuIGJvb2wgcG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlOwotZXh0ZXJuIEVjb3JlX1Rp
bWVyKiB3YWl0VG9EdW1wV2F0Y2hkb2c7Ci0KLWJvb2wgc2hvdWxkU2V0V2FpdFRvRHVtcFdhdGNo
ZG9nKCk7Ci0KLSNlbmRpZiAvKiBEdW1wUmVuZGVyVHJlZUVmbF9oICovCmRpZmYgLS1naXQgYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVWaWV3LmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2Nzc1NDhiYjIwMzhhMWM5MDVmYTM3MDljMDdjOTI0YjJhMDk2NDBlLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MjM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVk
IFN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkIGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2RlZmluZSBfX1NURENfRk9STUFUX01BQ1JPUwotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlVmlldy5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRl
clRyZWUuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNocm9tZS5oIgotI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlRWZsLmgiCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotI2luY2x1ZGUgPEVX
ZWJLaXQuaD4KLSNpbmNsdWRlIDxFY29yZS5oPgotI2luY2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRl
IDxFdmFzLmg+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVk
ZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyBF
d2tfVmlld19TbWFydF9DbGFzcyBnUGFyZW50U21hcnRDbGFzcyA9IEVXS19WSUVXX1NNQVJUX0NM
QVNTX0lOSVRfTlVMTDsKLQotc3RhdGljIFdURjo6U3RyaW5nIHVybFN1aXRhYmxlRm9yVGVzdFJl
c3VsdChjb25zdCBXVEY6OlN0cmluZyYgdXJpU3RyaW5nKQotewotICAgIGlmICh1cmlTdHJpbmcu
aXNFbXB0eSgpIHx8ICF1cmlTdHJpbmcuc3RhcnRzV2l0aCgiZmlsZTovLyIpKQotICAgICAgICBy
ZXR1cm4gdXJpU3RyaW5nOwotCi0gICAgY29uc3Qgc2l6ZV90IGluZGV4ID0gdXJpU3RyaW5nLnJl
dmVyc2VGaW5kKCcvJyk7Ci0gICAgcmV0dXJuIChpbmRleCA9PSBXVEY6Om5vdEZvdW5kKSA/IHVy
aVN0cmluZyA6IHVyaVN0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLX0KLQotc3RhdGljIHZv
aWQgb25Db25zb2xlTWVzc2FnZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0
IGNoYXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqKQotewotICAg
IEV2YXNfT2JqZWN0KiBldmFzT2JqZWN0ID0gc21hcnREYXRhLT5zZWxmOwotICAgIGlmIChldmFz
X29iamVjdF9kYXRhX2dldChldmFzT2JqZWN0LCAiaWdub3JlLWNvbnNvbGUtbWVzc2FnZXMiKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGVzdHMgZXhwZWN0IG9ubHkgdGhlIGZpbGVuYW1l
IHBhcnQgb2YgbG9jYWwgVVJJcwotICAgIFdURjo6U3RyaW5nIG5ld01lc3NhZ2UgPSBXVEY6OlN0
cmluZzo6ZnJvbVVURjgobWVzc2FnZSk7Ci0gICAgaWYgKCFuZXdNZXNzYWdlLmlzRW1wdHkoKSkg
ewotICAgICAgICBjb25zdCBzaXplX3QgZmlsZVByb3RvY29sID0gbmV3TWVzc2FnZS5maW5kKCJm
aWxlOi8vIik7Ci0gICAgICAgIGlmIChmaWxlUHJvdG9jb2wgIT0gV1RGOjpub3RGb3VuZCkKLSAg
ICAgICAgICAgIG5ld01lc3NhZ2UgPSBuZXdNZXNzYWdlLmxlZnQoZmlsZVByb3RvY29sKSArIHVy
bFN1aXRhYmxlRm9yVGVzdFJlc3VsdChuZXdNZXNzYWdlLnN1YnN0cmluZyhmaWxlUHJvdG9jb2wp
KTsKLSAgICB9Ci0KLSAgICAvLyBJZ25vcmUgc2ltcGxlIHRyYW5zbGF0aW9uLXJlbGF0ZWQgbWVz
c2FnZXMgYW5kIHVubmVjZXNzYXJ5IG1lc3NhZ2VzCi0gICAgaWYgKG5ld01lc3NhZ2UuY29udGFp
bnMoIkxvY2FsaXplZCBzdHJpbmciKSB8fCBuZXdNZXNzYWdlLmNvbnRhaW5zKCJQcm90b2NvbCBF
cnJvcjogdGhlIG1lc3NhZ2UgaXMgZm9yIG5vbi1leGlzdGluZyBkb21haW4gJ1Byb2ZpbGVyJyIp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcmludGYoIkNPTlNPTEUgTUVTU0FHRTogIik7Ci0g
ICAgaWYgKGxpbmVOdW1iZXIpCi0gICAgICAgIHByaW50ZigibGluZSAldTogIiwgbGluZU51bWJl
cik7Ci0gICAgcHJpbnRmKCIlc1xuIiwgbmV3TWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLX0KLQot
c3RhdGljIHZvaWQgb25KYXZhU2NyaXB0QWxlcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSosIEV2YXNf
T2JqZWN0KiwgY29uc3QgY2hhciogbWVzc2FnZSkKLXsKLSAgICBwcmludGYoIkFMRVJUOiAlc1xu
IiwgbWVzc2FnZSk7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wg
b25KYXZhU2NyaXB0Q29uZmlybShFd2tfVmlld19TbWFydF9EYXRhKiwgRXZhc19PYmplY3QqLCBj
b25zdCBjaGFyKiBtZXNzYWdlKQotewotICAgIHByaW50ZigiQ09ORklSTTogJXNcbiIsIG1lc3Nh
Z2UpOwotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgb25CZWZv
cmVVbmxvYWRDb25maXJtKEV3a19WaWV3X1NtYXJ0X0RhdGEqLCBFdmFzX09iamVjdCosIGNvbnN0
IGNoYXIqIG1lc3NhZ2UpCi17Ci0gICAgcHJpbnRmKCJDT05GSVJNIE5BVklHQVRJT046ICVzXG4i
LCBtZXNzYWdlKTsKLSAgICByZXR1cm4gIWdUZXN0UnVubmVyLT5zaG91bGRTdGF5T25QYWdlQWZ0
ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIG9uSmF2YVNj
cmlwdFByb21wdChFd2tfVmlld19TbWFydF9EYXRhKiwgRXZhc19PYmplY3QqLCBjb25zdCBjaGFy
KiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUsIGNvbnN0IGNoYXIqKiB2YWx1ZSkK
LXsKLSAgICBwcmludGYoIlBST01QVDogJXMsIGRlZmF1bHQgdGV4dDogJXNcbiIsIG1lc3NhZ2Us
IGRlZmF1bHRWYWx1ZSk7Ci0gICAgKnZhbHVlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoZGVmYXVs
dFZhbHVlKTsKLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgRXZhc19PYmplY3Qq
IG9uV2luZG93Q3JlYXRlKEV3a19WaWV3X1NtYXJ0X0RhdGEqLCBFaW5hX0Jvb2wsIGNvbnN0IEV3
a19XaW5kb3dfRmVhdHVyZXMqKQotewotICAgIHJldHVybiBnVGVzdFJ1bm5lci0+Y2FuT3Blbldp
bmRvd3MoKSA/IGJyb3dzZXItPmNyZWF0ZU5ld1dpbmRvdygpIDogMDsKLX0KLQotc3RhdGljIEVp
bmFfQm9vbCBvbldpbmRvd0Nsb3NlRGVsYXllZCh2b2lkKiBkYXRhKQotewotICAgIEV2YXNfT2Jq
ZWN0KiB2aWV3ID0gc3RhdGljX2Nhc3Q8RXZhc19PYmplY3QqPihkYXRhKTsKLSAgICBicm93c2Vy
LT5yZW1vdmVXaW5kb3codmlldyk7Ci0gICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci19Ci0KLXN0YXRp
YyB2b2lkIG9uV2luZG93Q2xvc2UoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewot
ICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gc21hcnREYXRhLT5zZWxmOwotICAgIGVjb3JlX2lkbGVy
X2FkZChvbldpbmRvd0Nsb3NlRGVsYXllZCwgdmlldyk7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdCBv
bkV4Y2VlZGVkRGF0YWJhc2VRdW90YShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV2
YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lLCB1aW50NjRfdCBjdXJy
ZW50U2l6ZSwgdWludDY0X3QgZXhwZWN0ZWRTaXplKQotewotICAgIGlmICghZ1Rlc3RSdW5uZXIt
PmR1bXBEYXRhYmFzZUNhbGxiYWNrcygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIEV3a19T
ZWN1cml0eV9PcmlnaW4qIG9yaWdpbiA9IGV3a19mcmFtZV9zZWN1cml0eV9vcmlnaW5fZ2V0KGZy
YW1lKTsKLSAgICBwcmludGYoIlVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRl
ZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp7JXMsICVzLCAlaX0gZGF0YWJhc2U6JXNc
biIsCi0gICAgICAgICAgICBld2tfc2VjdXJpdHlfb3JpZ2luX3Byb3RvY29sX2dldChvcmlnaW4p
LAotICAgICAgICAgICAgZXdrX3NlY3VyaXR5X29yaWdpbl9ob3N0X2dldChvcmlnaW4pLAotICAg
ICAgICAgICAgZXdrX3NlY3VyaXR5X29yaWdpbl9wb3J0X2dldChvcmlnaW4pLAotICAgICAgICAg
ICAgZGF0YWJhc2VOYW1lKTsKLSAgICBld2tfc2VjdXJpdHlfb3JpZ2luX2ZyZWUob3JpZ2luKTsK
LQotICAgIHVpbnQ2NF90IGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKLSAgICBkb3Vi
bGUgdGVzdERlZmF1bHRRdW90YSA9IGdUZXN0UnVubmVyLT5kYXRhYmFzZURlZmF1bHRRdW90YSgp
OwotICAgIGlmICh0ZXN0RGVmYXVsdFF1b3RhID49IDApCi0gICAgICAgIGRlZmF1bHRRdW90YSA9
IHRlc3REZWZhdWx0UXVvdGE7Ci0KLSAgICB1aW50NjRfdCBuZXdRdW90YSA9IGRlZmF1bHRRdW90
YTsKLQotICAgIGRvdWJsZSBtYXhRdW90YSA9IGdUZXN0UnVubmVyLT5kYXRhYmFzZU1heFF1b3Rh
KCk7Ci0gICAgaWYgKG1heFF1b3RhID49IDApIHsKLSAgICAgICAgaWYgKGRlZmF1bHRRdW90YSA8
IGV4cGVjdGVkU2l6ZSAmJiBleHBlY3RlZFNpemUgPD0gbWF4UXVvdGEpIHsKLSAgICAgICAgICAg
IG5ld1F1b3RhID0gZXhwZWN0ZWRTaXplOwotICAgICAgICAgICAgcHJpbnRmKCJVSSBERUxFR0FU
RSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICUiIFBSSXU2NCAiXG4iLCBl
eHBlY3RlZFNpemUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuZXdRdW90YTsKLX0K
LQotc3RhdGljIGludDY0X3Qgb25FeGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVRdW90YShFd2tfVmll
d19TbWFydF9EYXRhKiwgRXdrX1NlY3VyaXR5X09yaWdpbiAqb3JpZ2luLCBpbnQ2NF90IGRlZmF1
bHRPcmlnaW5RdW90YSwgaW50NjRfdCB0b3RhbFNwYWNlTmVlZGVkKQotewotICAgIGlmIChnVGVz
dFJ1bm5lci0+ZHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIC8vIEZvciBleGFtcGxlLCBudW1iZXJzIGZyb20gMzAwMDAgLSAzOTk5OSB3aWxsIG91dHB1
dCBhcyAzMDAwMC4KLSAgICAgICAgLy8gUm91bmRpbmcgdXAgb3IgZG93biBkb2VzIG5vdCByZWFs
bHkgbWF0dGVyIGZvciB0aGVzZSB0ZXN0cy4gSXQncwotICAgICAgICAvLyBzdWZmaWNpZW50IHRv
IGp1c3QgZ2V0IGEgcmFuZ2Ugb2YgMTAwMDAgdG8gZGV0ZXJtaW5lIGlmIHdlIHdlcmUKLSAgICAg
ICAgLy8gYWJvdmUgb3IgYmVsb3cgYSB0aHJlc2hvbGQuCi0gICAgICAgIGludDY0X3QgdHJ1bmNh
dGVkU3BhY2VOZWVkZWQgPSAodG90YWxTcGFjZU5lZWRlZCAvIDEwMDAwKSAqIDEwMDAwOwotICAg
ICAgICBwcmludGYoIlVJIERFTEVHQVRFIEFQUExJQ0FUSU9OIENBQ0hFIENBTExCQUNLOiBleGNl
ZWRlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YUZvclNlY3VyaXR5T3JpZ2luOnslcywgJXMs
ICVpfSB0b3RhbFNwYWNlTmVlZGVkOn4lIiBQUklkNjQgIlxuIiwKLSAgICAgICAgICAgICAgIGV3
a19zZWN1cml0eV9vcmlnaW5fcHJvdG9jb2xfZ2V0KG9yaWdpbiksCi0gICAgICAgICAgICAgICBl
d2tfc2VjdXJpdHlfb3JpZ2luX2hvc3RfZ2V0KG9yaWdpbiksCi0gICAgICAgICAgICAgICBld2tf
c2VjdXJpdHlfb3JpZ2luX3BvcnRfZ2V0KG9yaWdpbiksCi0gICAgICAgICAgICAgICB0cnVuY2F0
ZWRTcGFjZU5lZWRlZCk7Ci0gICAgfQotCi0gICAgaWYgKGdUZXN0UnVubmVyLT5kaXNhbGxvd0lu
Y3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIGRlZmF1bHRPcmlnaW5RdW90YTsKLX0KLQotLy8gVGFrZW4gZnJvbSB0aGUgZmls
ZSAiV2ViS2l0L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCIu
Ci1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG5hdmlnYXRpb25UeXBlVG9TdHJpbmcoY29uc3Qg
RXdrX05hdmlnYXRpb25fVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgRVdLX05BVklHQVRJT05fVFlQRV9MSU5LX0NMSUNLRUQ6Ci0gICAgICAgIHJldHVybiAibGlu
ayBjbGlja2VkIjsKLSAgICBjYXNlIEVXS19OQVZJR0FUSU9OX1RZUEVfRk9STV9TVUJNSVRURUQ6
Ci0gICAgICAgIHJldHVybiAiZm9ybSBzdWJtaXR0ZWQiOwotICAgIGNhc2UgRVdLX05BVklHQVRJ
T05fVFlQRV9CQUNLX0ZPUldBUkQ6Ci0gICAgICAgIHJldHVybiAiYmFjay9mb3J3YXJkIjsKLSAg
ICBjYXNlIEVXS19OQVZJR0FUSU9OX1RZUEVfUkVMT0FEOgotICAgICAgICByZXR1cm4gInJlbG9h
ZCI7Ci0gICAgY2FzZSBFV0tfTkFWSUdBVElPTl9UWVBFX0ZPUk1fUkVTVUJNSVRURUQ6Ci0gICAg
ICAgIHJldHVybiAiZm9ybSByZXN1Ym1pdHRlZCI7Ci0gICAgY2FzZSBFV0tfTkFWSUdBVElPTl9U
WVBFX09USEVSOgotICAgICAgICByZXR1cm4gIm90aGVyIjsKLSAgICB9Ci0gICAgcmV0dXJuICJp
bGxlZ2FsIHZhbHVlIjsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBvbk5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbihFd2tfVmlld19TbWFydF9EYXRhKiwgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3Qq
IHJlcXVlc3QsIEV3a19OYXZpZ2F0aW9uX1R5cGUgbmF2aWdhdGlvblR5cGUpCi17Ci0gICAgaWYg
KCFwb2xpY3lEZWxlZ2F0ZUVuYWJsZWQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcHJp
bnRmKCJQb2xpY3kgZGVsZWdhdGU6IGF0dGVtcHQgdG8gbG9hZCAlcyB3aXRoIG5hdmlnYXRpb24g
dHlwZSAnJXMnXG4iLCB1cmxTdWl0YWJsZUZvclRlc3RSZXN1bHQocmVxdWVzdC0+dXJsKS51dGY4
KCkuZGF0YSgpLAotICAgICAgICAgICBuYXZpZ2F0aW9uVHlwZVRvU3RyaW5nKG5hdmlnYXRpb25U
eXBlKSk7Ci0KLSAgICBpZiAoZ1Rlc3RSdW5uZXIpCi0gICAgICAgIGdUZXN0UnVubmVyLT5ub3Rp
ZnlEb25lKCk7Ci0KLSAgICByZXR1cm4gcG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlOwotfQotCi1z
dGF0aWMgRWluYV9Cb29sIG9uRm9jdXNDYW5DeWNsZShFd2tfVmlld19TbWFydF9EYXRhKiwgRXdr
X0ZvY3VzX0RpcmVjdGlvbikKLXsKLSAgICAvLyBUaGlzIGlzIHRoZSBiZWhhdmlvciBvZiBNYWMg
YW5kIENocm9taXVtIHBvcnRzIGFuZCBpcyBleHBlY3RlZCBieSBzb21lIHRlc3QgY2FzZXMuCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLUV2YXNfT2JqZWN0KiBkcnRWaWV3QWRkKEV2YXMqIGV2YXMp
Ci17Ci0gICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJU
X0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJEUlRfVmlldyIpOwotCi0gICAgaWYgKCFld2tfdmll
d19zbWFydF9zZXQoJmFwaSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKEVJTkFfVU5M
SUtFTFkoIWdQYXJlbnRTbWFydENsYXNzLnNjLmFkZCkpCi0gICAgICAgIGV3a192aWV3X3NtYXJ0
X3NldCgmZ1BhcmVudFNtYXJ0Q2xhc3MpOwotCi0gICAgYXBpLmFkZF9jb25zb2xlX21lc3NhZ2Ug
PSBvbkNvbnNvbGVNZXNzYWdlOwotICAgIGFwaS5ydW5famF2YXNjcmlwdF9hbGVydCA9IG9uSmF2
YVNjcmlwdEFsZXJ0OwotICAgIGFwaS5ydW5famF2YXNjcmlwdF9jb25maXJtID0gb25KYXZhU2Ny
aXB0Q29uZmlybTsKLSAgICBhcGkucnVuX2JlZm9yZV91bmxvYWRfY29uZmlybSA9IG9uQmVmb3Jl
VW5sb2FkQ29uZmlybTsKLSAgICBhcGkucnVuX2phdmFzY3JpcHRfcHJvbXB0ID0gb25KYXZhU2Ny
aXB0UHJvbXB0OwotICAgIGFwaS53aW5kb3dfY3JlYXRlID0gb25XaW5kb3dDcmVhdGU7Ci0gICAg
YXBpLndpbmRvd19jbG9zZSA9IG9uV2luZG93Q2xvc2U7Ci0gICAgYXBpLmV4Y2VlZGVkX2FwcGxp
Y2F0aW9uX2NhY2hlX3F1b3RhID0gb25FeGNlZWRlZEFwcGxpY2F0aW9uQ2FjaGVRdW90YTsKLSAg
ICBhcGkuZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEgPSBvbkV4Y2VlZGVkRGF0YWJhc2VRdW90YTsK
LSAgICBhcGkubmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24gPSBvbk5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbjsKLSAgICBhcGkuZm9jdXNfY2FuX2N5Y2xlID0gb25Gb2N1c0NhbkN5Y2xlOwotCi0g
ICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChldmFzLCBldmFzX3NtYXJ0X2NsYXNzX25l
dygmYXBpLnNjKSk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVt
cFJlbmRlclRyZWVWaWV3LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRy
ZWVWaWV3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZGRhYjU2ZDE1OGQ5OGU3
MzUwYzlkMzY1MWE5ZTA1ODQ3MzFhMDcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlVmll
dy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWQgaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIER1bXBSZW5kZXJUcmVlVmlld19oCi0jZGVmaW5lIER1bXBSZW5k
ZXJUcmVlVmlld19oCi0KLSNpbmNsdWRlIDxFdmFzLmg+Ci0KLUV2YXNfT2JqZWN0KiBkcnRWaWV3
QWRkKEV2YXMqKTsKLQotI2VuZGlmIC8vIER1bXBSZW5kZXJUcmVlVmlld19oCmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRWRpdGluZ0NhbGxiYWNrcy5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvRWRpdGluZ0NhbGxiYWNrcy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDQ3YjkwMmYxMzhjZjZkMzY2MjU2YjZlZTZhOWQ2NTA0ZGEwNGE4ZjAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvZWZsL0VkaXRpbmdDYWxsYmFja3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTg3
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIENvcHly
aWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRWRp
dGluZ0NhbGxiYWNrcy5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWUuaCIKLSNpbmNsdWRl
ICJFZGl0b3JDbGllbnRFZmwuaCIKLSNpbmNsdWRlICJFZGl0b3JJbnNlcnRBY3Rpb24uaCIKLSNp
bmNsdWRlICJOb2RlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJTdHlsZVByb3Bl
cnRpZXMuaCIKLSNpbmNsdWRlICJUZXN0UnVubmVyLmgiCi0jaW5jbHVkZSAiVGV4dEFmZmluaXR5
LmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi1zdGF0aWMgV1RGOjpTdHJpbmcgZHVtcFBhdGgoV2ViQ29yZTo6Tm9kZSog
bm9kZSkKLXsKLSAgICBXZWJDb3JlOjpOb2RlKiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7
Ci0gICAgV1RGOjpTdHJpbmcgc3RyID0gV1RGOjpTdHJpbmc6OmZvcm1hdCgiJXMiLCBub2RlLT5u
b2RlTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChwYXJlbnQpIHsKLSAgICAgICAgc3Ry
LmFwcGVuZCgiID4gIik7Ci0gICAgICAgIHN0ci5hcHBlbmQoZHVtcFBhdGgocGFyZW50KSk7Ci0g
ICAgfQotICAgIHJldHVybiBzdHI7Ci19Ci0KLXN0YXRpYyBXVEY6OlN0cmluZyBkdW1wUmFuZ2Uo
V2ViQ29yZTo6UmFuZ2UqIHJhbmdlKQotewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVy
biAiKG51bGwpIjsKLSAgICByZXR1cm4gV1RGOjpTdHJpbmc6OmZvcm1hdCgicmFuZ2UgZnJvbSAl
ZCBvZiAlcyB0byAlZCBvZiAlcyIsIHJhbmdlLT5zdGFydE9mZnNldCgpLCBkdW1wUGF0aChyYW5n
ZS0+c3RhcnRDb250YWluZXIoKSkudXRmOCgpLmRhdGEoKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBk
dW1wUGF0aChyYW5nZS0+ZW5kQ29udGFpbmVyKCkpLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1zdGF0
aWMgY29uc3QgY2hhciogaW5zZXJ0QWN0aW9uU3RyaW5nKFdlYkNvcmU6OkVkaXRvckluc2VydEFj
dGlvbiBhY3Rpb24pCi17Ci0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIFdlYkNvcmU6
OkVkaXRvckluc2VydEFjdGlvblR5cGVkOgotICAgICAgICByZXR1cm4gIldlYlZpZXdJbnNlcnRB
Y3Rpb25UeXBlZCI7Ci0gICAgY2FzZSBXZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQ6
Ci0gICAgICAgIHJldHVybiAiV2ViVmlld0luc2VydEFjdGlvblBhc3RlZCI7Ci0gICAgY2FzZSBX
ZWJDb3JlOjpFZGl0b3JJbnNlcnRBY3Rpb25Ecm9wcGVkOgotICAgICAgICByZXR1cm4gIldlYlZp
ZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuICJXZWJWaWV3SW5zZXJ0QWN0aW9uVHlwZWQiOwotfQotCi1zdGF0aWMgY29u
c3QgY2hhciogc2VsZWN0aW9uQWZmaW5pdHlTdHJpbmcoV2ViQ29yZTo6RUFmZmluaXR5IGFmZmlu
aXR5KQotewotICAgIHN3aXRjaCAoYWZmaW5pdHkpIHsKLSAgICBjYXNlIFdlYkNvcmU6OlVQU1RS
RUFNOgotICAgICAgICByZXR1cm4gIk5TU2VsZWN0aW9uQWZmaW5pdHlVcHN0cmVhbSI7Ci0gICAg
Y2FzZSBXZWJDb3JlOjpET1dOU1RSRUFNOgotICAgICAgICByZXR1cm4gIk5TU2VsZWN0aW9uQWZm
aW5pdHlEb3duc3RyZWFtIjsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuICJOU1NlbGVjdGlvbkFmZmluaXR5VXBzdHJlYW0iOwotfQotCi12b2lkIHNob3VsZEJl
Z2luRWRpdGluZyh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAg
aWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OlJhbmdlKiByYW5nZSA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OlJhbmdlKj4o
ZXZlbnRJbmZvKTsKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdp
bkVkaXRpbmdJbkRPTVJhbmdlOiVzXG4iLCBkdW1wUmFuZ2UocmFuZ2UpLnV0ZjgoKS5kYXRhKCkp
OwotICAgIH0KLX0KLQotdm9pZCBzaG91bGRFbmRFZGl0aW5nKHZvaWQqLCBFdmFzX09iamVjdCos
IHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlID0gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6UmFuZ2UqPihldmVudEluZm8pOwotICAgICAgICBwcmludGYoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiVzXG4iLCBkdW1wUmFu
Z2UocmFuZ2UpLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLX0KLQotdm9pZCBzaG91bGRJbnNlcnRO
b2RlKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBpZiAoIWRv
bmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgRXdr
X1Nob3VsZF9JbnNlcnRfTm9kZV9FdmVudCogc2hvdWxkSW5zZXJ0Tm9kZUV2ZW50ID0gc3RhdGlj
X2Nhc3Q8RXdrX1Nob3VsZF9JbnNlcnRfTm9kZV9FdmVudCo+KGV2ZW50SW5mbyk7Ci0gICAgICAg
IHByaW50ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZTolcyByZXBsYWNpbmdE
T01SYW5nZTolcyBnaXZlbkFjdGlvbjolc1xuIiwKLSAgICAgICAgICAgICAgIGR1bXBQYXRoKHNo
b3VsZEluc2VydE5vZGVFdmVudC0+bm9kZSkudXRmOCgpLmRhdGEoKSwgZHVtcFJhbmdlKHNob3Vs
ZEluc2VydE5vZGVFdmVudC0+cmFuZ2UpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICAgICAgICBp
bnNlcnRBY3Rpb25TdHJpbmcoc2hvdWxkSW5zZXJ0Tm9kZUV2ZW50LT5hY3Rpb24pKTsKLSAgICB9
Ci19Ci0KLXZvaWQgc2hvdWxkSW5zZXJ0VGV4dCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKiBl
dmVudEluZm8pCi17Ci0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1wRWRpdGluZ0Nh
bGxiYWNrcygpKSB7Ci0gICAgICAgIEV3a19TaG91bGRfSW5zZXJ0X1RleHRfRXZlbnQqIHNob3Vs
ZEluc2VydFRleHRFdmVudCA9IHN0YXRpY19jYXN0PEV3a19TaG91bGRfSW5zZXJ0X1RleHRfRXZl
bnQqPihldmVudEluZm8pOwotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEluc2VydFRleHQ6JXMgcmVwbGFjaW5nRE9NUmFuZ2U6JXMgZ2l2ZW5BY3Rpb246JXNcbiIsCi0g
ICAgICAgICAgICAgICAgc2hvdWxkSW5zZXJ0VGV4dEV2ZW50LT50ZXh0LCBkdW1wUmFuZ2Uoc2hv
dWxkSW5zZXJ0VGV4dEV2ZW50LT5yYW5nZSkudXRmOCgpLmRhdGEoKSwgaW5zZXJ0QWN0aW9uU3Ry
aW5nKHNob3VsZEluc2VydFRleHRFdmVudC0+YWN0aW9uKSk7Ci0gICAgfQotfQotCi12b2lkIHNo
b3VsZERlbGV0ZVJhbmdlKHZvaWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsK
LSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsK
LSAgICAgICAgV2ViQ29yZTo6UmFuZ2UqIHJhbmdlID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmFu
Z2UqPihldmVudEluZm8pOwotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZERlbGV0ZURPTVJhbmdlOiVzXG4iLCBkdW1wUmFuZ2UocmFuZ2UpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIH0KLX0KLQotdm9pZCBzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5uZXIt
PmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgRXdrX1Nob3VsZF9DaGFuZ2VfU2Vs
ZWN0ZWRfUmFuZ2VfRXZlbnQqIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2VFdmVudCA9IHN0YXRp
Y19jYXN0PEV3a19TaG91bGRfQ2hhbmdlX1NlbGVjdGVkX1JhbmdlX0V2ZW50Kj4oZXZlbnRJbmZv
KTsKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRDaGFuZ2VTZWxlY3Rl
ZERPTVJhbmdlOiVzIHRvRE9NUmFuZ2U6JXMgYWZmaW5pdHk6JXMgc3RpbGxTZWxlY3Rpbmc6JXNc
biIsCi0gICAgICAgICAgICAgICBkdW1wUmFuZ2Uoc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZUV2
ZW50LT5mcm9tUmFuZ2UpLnV0ZjgoKS5kYXRhKCksIGR1bXBSYW5nZShzaG91bGRDaGFuZ2VTZWxl
Y3RlZFJhbmdlRXZlbnQtPnRvUmFuZ2UpLnV0ZjgoKS5kYXRhKCksCi0gICAgICAgICAgICAgICBz
ZWxlY3Rpb25BZmZpbml0eVN0cmluZyhzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlRXZlbnQtPmFm
ZmluaXR5KSwgc2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZUV2ZW50LT5zdGlsbFNlbGVjdGluZyA/
ICJUUlVFIiA6ICJGQUxTRSIpOwotICAgIH0KLX0KLQotdm9pZCBzaG91bGRBcHBseVN0eWxlKHZv
aWQqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBpZiAoIWRvbmUgJiYg
Z1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKLSAgICAgICAgRXdrX1Nob3Vs
ZF9BcHBseV9TdHlsZV9FdmVudCogc2hvdWxkQXBwbHlTdHlsZUV2ZW50ID0gc3RhdGljX2Nhc3Q8
RXdrX1Nob3VsZF9BcHBseV9TdHlsZV9FdmVudCo+KGV2ZW50SW5mbyk7Ci0gICAgICAgIHByaW50
ZigiRURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZTolcyB0b0VsZW1lbnRzSW5ET01S
YW5nZTolc1xuIiwKLSAgICAgICAgICAgICAgICBzaG91bGRBcHBseVN0eWxlRXZlbnQtPnN0eWxl
LT5hc1RleHQoKS51dGY4KCkuZGF0YSgpLCBkdW1wUmFuZ2Uoc2hvdWxkQXBwbHlTdHlsZUV2ZW50
LT5yYW5nZSkudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotfQotCi12b2lkIGVkaXRpbmdCZWdhbih2
b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKikKLXsKLSAgICBpZiAoIWRvbmUgJiYgZ1Rlc3RSdW5u
ZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50ZigiRURJVElORyBERUxF
R0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzpXZWJWaWV3RGlkQmVnaW5FZGl0aW5nTm90aWZp
Y2F0aW9uXG4iKTsKLX0KLQotdm9pZCB1c2VyQ2hhbmdlZENvbnRlbnRzKHZvaWQqLCBFdmFzX09i
amVjdCosIHZvaWQqKQotewotICAgIGlmICghZG9uZSAmJiBnVGVzdFJ1bm5lci0+ZHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkKLSAgICAgICAgcHJpbnRmKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3
RGlkQ2hhbmdlOldlYlZpZXdEaWRDaGFuZ2VOb3RpZmljYXRpb25cbiIpOwotfQotCi12b2lkIGVk
aXRpbmdFbmRlZCh2b2lkKiwgRXZhc19PYmplY3QqLCB2b2lkKikKLXsKLSAgICBpZiAoIWRvbmUg
JiYgZ1Rlc3RSdW5uZXItPmR1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCi0gICAgICAgIHByaW50Zigi
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6V2ViVmlld0RpZEVuZEVkaXRp
bmdOb3RpZmljYXRpb25cbiIpOwotfQotCi12b2lkIHNlbGVjdGlvbkNoYW5nZWQodm9pZCosIEV2
YXNfT2JqZWN0Kiwgdm9pZCopCi17Ci0gICAgaWYgKCFkb25lICYmIGdUZXN0UnVubmVyLT5kdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQotICAgICAgICBwcmludGYoIkVESVRJTkcgREVMRUdBVEU6IHdl
YlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246V2ViVmlld0RpZENoYW5nZVNlbGVjdGlvbk5vdGlmaWNh
dGlvblxuIik7Ci19Ci0KLXZvaWQgY29ubmVjdEVkaXRpbmdDYWxsYmFja3MoRXZhc19PYmplY3Qq
IHdlYlZpZXcpCi17Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcs
ICJlZGl0b3JjbGllbnQsZWRpdGluZyxiZWdpbiIsIHNob3VsZEJlZ2luRWRpdGluZywgMCk7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcsICJlZGl0b3JjbGllbnQs
ZWRpdGluZyxlbmQiLCBzaG91bGRFbmRFZGl0aW5nLCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQod2ViVmlldywgImVkaXRvcmNsaWVudCxub2RlLGluc2VydCIsIHNob3Vs
ZEluc2VydE5vZGUsIDApOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJW
aWV3LCAiZWRpdG9yY2xpZW50LHRleHQsaW5zZXJ0Iiwgc2hvdWxkSW5zZXJ0VGV4dCwgMCk7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcsICJlZGl0b3JjbGllbnQs
cmFuZ2UsZGVsZXRlIiwgc2hvdWxkRGVsZXRlUmFuZ2UsIDApOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3LCAiZWRpdG9yY2xpZW50LHNlbGVjdGVkLHJhbmdlLGNo
YW5nZSIsIHNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UsIDApOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3LCAiZWRpdG9yY2xpZW50LHN0eWxlLGFwcGx5Iiwgc2hv
dWxkQXBwbHlTdHlsZSwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdl
YlZpZXcsICJlZGl0b3JjbGllbnQsZWRpdGluZyxiZWdhbiIsIGVkaXRpbmdCZWdhbiwgMCk7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcsICJlZGl0b3JjbGllbnQs
Y29udGVudHMsY2hhbmdlZCIsIHVzZXJDaGFuZ2VkQ29udGVudHMsIDApOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3LCAiZWRpdG9yY2xpZW50LGVkaXRpbmcsZW5k
ZWQiLCBlZGl0aW5nRW5kZWQsIDApOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Fk
ZCh3ZWJWaWV3LCAiZWRpdG9yY2xpZW50LHNlbGVjdGlvbixjaGFuZ2VkIiwgc2VsZWN0aW9uQ2hh
bmdlZCwgMCk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRWRpdGlu
Z0NhbGxiYWNrcy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0VkaXRpbmdDYWxsYmFja3Mu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNjZjU3MjgxNmE2NDk3MTA4ZTFiMzY3
ZTZlZmNkZTMzY2RiZmU4ZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRWRpdGluZ0NhbGxiYWNrcy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2Fs
aWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRWRpdGluZ0Nh
bGxiYWNrc19oCi0jZGVmaW5lIEVkaXRpbmdDYWxsYmFja3NfaAotCi0jaW5jbHVkZSA8RXZhcy5o
PgotCi12b2lkIGNvbm5lY3RFZGl0aW5nQ2FsbGJhY2tzKEV2YXNfT2JqZWN0Kik7Ci0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0V2ZW50U2VuZGVyLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9FdmVudFNlbmRlci5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDU5MzczZWQyY2JhYTIwZWRkYzNkY2RiOTI3MmNiMjRmZDhmNmQ0NDQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0V2ZW50U2VuZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMzUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5k
b2JlcnNla0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICogQ29weXJp
Z2h0IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV2ZW50
U2VuZGVyLmgiCi0KLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIkR1bXBS
ZW5kZXJUcmVlQ2hyb21lLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRlICJKU1N0
cmluZ1V0aWxzLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybUV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsLmgiCi0jaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxFV2ViS2l0Lmg+
Ci0jaW5jbHVkZSA8RWNvcmVfSW5wdXQuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU09i
amVjdFJlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9PcGFxdWVKU1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+Ci0jaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1z
dGF0aWMgYm9vbCBnRHJhZ01vZGU7Ci1zdGF0aWMgaW50IGdUaW1lT2Zmc2V0ID0gMDsKLQotc3Rh
dGljIGludCBnTGFzdE1vdXNlUG9zaXRpb25YOwotc3RhdGljIGludCBnTGFzdE1vdXNlUG9zaXRp
b25ZOwotc3RhdGljIGludCBnTGFzdENsaWNrUG9zaXRpb25YOwotc3RhdGljIGludCBnTGFzdENs
aWNrUG9zaXRpb25ZOwotc3RhdGljIGludCBnTGFzdENsaWNrVGltZU9mZnNldDsKLXN0YXRpYyBp
bnQgZ0xhc3RDbGlja0J1dHRvbjsKLXN0YXRpYyBpbnQgZ0J1dHRvbkN1cnJlbnRseURvd247Ci1z
dGF0aWMgaW50IGdDbGlja0NvdW50OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgem9vbU11bHRpcGxp
ZXJSYXRpbyA9IDEuMmY7Ci0KLS8vIEtleSBldmVudCBsb2NhdGlvbiBjb2RlIGRlZmluZWQgaW4g
RE9NIExldmVsIDMuCi1lbnVtIEtleUxvY2F0aW9uQ29kZSB7Ci0gICAgRG9tS2V5TG9jYXRpb25T
dGFuZGFyZCwKLSAgICBEb21LZXlMb2NhdGlvbkxlZnQsCi0gICAgRG9tS2V5TG9jYXRpb25SaWdo
dCwKLSAgICBEb21LZXlMb2NhdGlvbk51bXBhZAotfTsKLQotZW51bSBFdmFzS2V5TW9kaWZpZXIg
ewotICAgIEV2YXNLZXlNb2RpZmllck5vbmUgICAgPSAwLAotICAgIEV2YXNLZXlNb2RpZmllckNv
bnRyb2wgPSAxIDw8IDAsCi0gICAgRXZhc0tleU1vZGlmaWVyU2hpZnQgICA9IDEgPDwgMSwKLSAg
ICBFdmFzS2V5TW9kaWZpZXJBbHQgICAgID0gMSA8PCAyLAotICAgIEV2YXNLZXlNb2RpZmllck1l
dGEgICAgPSAxIDw8IDMKLX07Ci0KLWVudW0gRXZhc01vdXNlQnV0dG9uIHsKLSAgICBFdmFzTW91
c2VCdXR0b25Ob25lLAotICAgIEV2YXNNb3VzZUJ1dHRvbkxlZnQsCi0gICAgRXZhc01vdXNlQnV0
dG9uTWlkZGxlLAotICAgIEV2YXNNb3VzZUJ1dHRvblJpZ2h0Ci19OwotCi1lbnVtIEV2YXNNb3Vz
ZUV2ZW50IHsKLSAgICBFdmFzTW91c2VFdmVudE5vbmUgICAgICAgID0gMCwKLSAgICBFdmFzTW91
c2VFdmVudERvd24gICAgICAgID0gMSA8PCAwLAotICAgIEV2YXNNb3VzZUV2ZW50VXAgICAgICAg
ICAgPSAxIDw8IDEsCi0gICAgRXZhc01vdXNlRXZlbnRNb3ZlICAgICAgICA9IDEgPDwgMiwKLSAg
ICBFdmFzTW91c2VFdmVudFNjcm9sbFVwICAgID0gMSA8PCAzLAotICAgIEV2YXNNb3VzZUV2ZW50
U2Nyb2xsRG93biAgPSAxIDw8IDQsCi0gICAgRXZhc01vdXNlRXZlbnRTY3JvbGxMZWZ0ICA9IDEg
PDwgNSwKLSAgICBFdmFzTW91c2VFdmVudFNjcm9sbFJpZ2h0ID0gMSA8PCA2LAotICAgIEV2YXNN
b3VzZUV2ZW50Q2xpY2sgICAgICAgPSBFdmFzTW91c2VFdmVudE1vdmUgfCBFdmFzTW91c2VFdmVu
dERvd24gfCBFdmFzTW91c2VFdmVudFVwLAotfTsKLQotZW51bSBab29tRXZlbnQgewotICAgIFpv
b21JbiwKLSAgICBab29tT3V0Ci19OwotCi1lbnVtIEV2ZW50UXVldWVTdHJhdGVneSB7Ci0gICAg
RmVlZFF1ZXVlZEV2ZW50cywKLSAgICBEb05vdEZlZWRRdWV1ZWRFdmVudHMKLX07Ci0KLXN0cnVj
dCBLZXlFdmVudEluZm8gewotICAgIEtleUV2ZW50SW5mbyhjb25zdCBDU3RyaW5nJiBrZXlOYW1l
LCB1bnNpZ25lZCBtb2RpZmllcnMsIGNvbnN0IENTdHJpbmcmIGtleVN0cmluZyA9IENTdHJpbmco
KSkKLSAgICAgICAgOiBrZXlOYW1lKGtleU5hbWUpCi0gICAgICAgICwga2V5U3RyaW5nKGtleVN0
cmluZykKLSAgICAgICAgLCBtb2RpZmllcnMobW9kaWZpZXJzKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBjb25zdCBDU3RyaW5nIGtleU5hbWU7Ci0gICAgY29uc3QgQ1N0cmluZyBrZXlTdHJpbmc7Ci0g
ICAgdW5zaWduZWQgbW9kaWZpZXJzOwotfTsKLQotc3RydWN0IE1vdXNlRXZlbnRJbmZvIHsKLSAg
ICBNb3VzZUV2ZW50SW5mbyhFdmFzTW91c2VFdmVudCBldmVudCwgdW5zaWduZWQgbW9kaWZpZXJz
ID0gRXZhc0tleU1vZGlmaWVyTm9uZSwgRXZhc01vdXNlQnV0dG9uIGJ1dHRvbiA9IEV2YXNNb3Vz
ZUJ1dHRvbk5vbmUsIGludCBob3Jpem9udGFsRGVsdGEgPSAwLCBpbnQgdmVydGljYWxEZWx0YSA9
IDApCi0gICAgICAgIDogZXZlbnQoZXZlbnQpCi0gICAgICAgICwgbW9kaWZpZXJzKG1vZGlmaWVy
cykKLSAgICAgICAgLCBidXR0b24oYnV0dG9uKQotICAgICAgICAsIGhvcml6b250YWxEZWx0YSho
b3Jpem9udGFsRGVsdGEpCi0gICAgICAgICwgdmVydGljYWxEZWx0YSh2ZXJ0aWNhbERlbHRhKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBFdmFzTW91c2VFdmVudCBldmVudDsKLSAgICB1bnNpZ25lZCBt
b2RpZmllcnM7Ci0gICAgRXZhc01vdXNlQnV0dG9uIGJ1dHRvbjsKLSAgICBpbnQgaG9yaXpvbnRh
bERlbHRhOwotICAgIGludCB2ZXJ0aWNhbERlbHRhOwotfTsKLQotc3RydWN0IERlbGF5ZWRFdmVu
dCB7Ci0gICAgRGVsYXllZEV2ZW50KE1vdXNlRXZlbnRJbmZvKiBldmVudEluZm8sIHVuc2lnbmVk
IGxvbmcgZGVsYXkgPSAwKQotICAgICAgICA6IGV2ZW50SW5mbyhldmVudEluZm8pCi0gICAgICAg
ICwgZGVsYXkoZGVsYXkpCi0gICAgewotICAgIH0KLQotICAgIE1vdXNlRXZlbnRJbmZvKiBldmVu
dEluZm87Ci0gICAgdW5zaWduZWQgbG9uZyBkZWxheTsKLX07Ci0KLXN0cnVjdCBUb3VjaEV2ZW50
SW5mbyB7Ci0gICAgVG91Y2hFdmVudEluZm8oaW50IGlkLCBFdmFzX1RvdWNoX1BvaW50X1N0YXRl
IHN0YXRlLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCi0gICAgICAgIDogc3RhdGUo
c3RhdGUpCi0gICAgICAgICwgcG9pbnQocG9pbnQpCi0gICAgICAgICwgaWQoaWQpCi0gICAgewot
ICAgIH0KLQotICAgIGludCBpZDsKLSAgICBFdmFzX1RvdWNoX1BvaW50X1N0YXRlIHN0YXRlOwot
ICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50OwotfTsKLQotc3RhdGljIHVuc2lnbmVkIHRvdWNo
TW9kaWZpZXJzOwotCi1XVEY6OlZlY3RvcjxUb3VjaEV2ZW50SW5mbz4mIHRvdWNoUG9pbnRMaXN0
KCkKLXsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoV1RGOjpWZWN0b3I8VG91
Y2hFdmVudEluZm8+LCBzdGF0aWNUb3VjaFBvaW50TGlzdCwgKCkpOwotICAgIHJldHVybiBzdGF0
aWNUb3VjaFBvaW50TGlzdDsKLX0KLQotV1RGOjpWZWN0b3I8RGVsYXllZEV2ZW50PiYgZGVsYXll
ZEV2ZW50UXVldWUoKQotewotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChXVEY6
OlZlY3RvcjxEZWxheWVkRXZlbnQ+LCBzdGF0aWNEZWxheWVkRXZlbnRRdWV1ZSwgKCkpOwotICAg
IHJldHVybiBzdGF0aWNEZWxheWVkRXZlbnRRdWV1ZTsKLX0KLQotCi1zdGF0aWMgdm9pZCBmZWVk
T3JRdWV1ZU1vdXNlRXZlbnQoTW91c2VFdmVudEluZm8qLCBFdmVudFF1ZXVlU3RyYXRlZ3kpOwot
c3RhdGljIHZvaWQgZmVlZE1vdXNlRXZlbnQoTW91c2VFdmVudEluZm8qKTsKLXN0YXRpYyB2b2lk
IGZlZWRRdWV1ZWRNb3VzZUV2ZW50cygpOwotCi1zdGF0aWMgdm9pZCBzZXRFdmFzTW9kaWZpZXJz
KEV2YXMqIGV2YXMsIHVuc2lnbmVkIG1vZGlmaWVycykKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogbW9kaWZpZXJOYW1lc1tdID0geyAiQ29udHJvbCIsICJTaGlmdCIsICJBbHQiLCAiU3VwZXIi
IH07Ci0gICAgZm9yICh1bnNpZ25lZCBtb2RpZmllciA9IDA7IG1vZGlmaWVyIDwgNDsgKyttb2Rp
ZmllcikgewotICAgICAgICBpZiAobW9kaWZpZXJzICYgKDEgPDwgbW9kaWZpZXIpKQotICAgICAg
ICAgICAgZXZhc19rZXlfbW9kaWZpZXJfb24oZXZhcywgbW9kaWZpZXJOYW1lc1ttb2RpZmllcl0p
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBldmFzX2tleV9tb2RpZmllcl9vZmYoZXZhcywg
bW9kaWZpZXJOYW1lc1ttb2RpZmllcl0pOwotICAgIH0KLX0KLQotc3RhdGljIEV2YXNNb3VzZUJ1
dHRvbiB0cmFuc2xhdGVNb3VzZUJ1dHRvbk51bWJlcihpbnQgZXZlbnRTZW5kZXJCdXR0b25OdW1i
ZXIpCi17Ci0gICAgc3RhdGljIGNvbnN0IEV2YXNNb3VzZUJ1dHRvbiB0cmFuc2xhdGlvblRhYmxl
W10gPSB7Ci0gICAgICAgIEV2YXNNb3VzZUJ1dHRvbkxlZnQsCi0gICAgICAgIEV2YXNNb3VzZUJ1
dHRvbk1pZGRsZSwKLSAgICAgICAgRXZhc01vdXNlQnV0dG9uUmlnaHQsCi0gICAgICAgIEV2YXNN
b3VzZUJ1dHRvbk1pZGRsZSAvLyBmYXN0L2V2ZW50cy9tb3VzZS1jbGljay1ldmVudHMgZXhwZWN0
cyB0aGUgNHRoIGJ1dHRvbiB0byBiZSB0cmVhdGVkIGFzIHRoZSBtaWRkbGUgYnV0dG9uCi0gICAg
fTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdHJhbnNsYXRpb25UYWJsZVNpemUgPSBzaXpl
b2YodHJhbnNsYXRpb25UYWJsZSkgLyBzaXplb2YodHJhbnNsYXRpb25UYWJsZVswXSk7Ci0KLSAg
ICBpZiAoZXZlbnRTZW5kZXJCdXR0b25OdW1iZXIgPCB0cmFuc2xhdGlvblRhYmxlU2l6ZSkKLSAg
ICAgICAgcmV0dXJuIHRyYW5zbGF0aW9uVGFibGVbZXZlbnRTZW5kZXJCdXR0b25OdW1iZXJdOwot
Ci0gICAgcmV0dXJuIEV2YXNNb3VzZUJ1dHRvbkxlZnQ7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wg
c2VuZENsaWNrKHZvaWQqKQotewotICAgIE1vdXNlRXZlbnRJbmZvKiBldmVudEluZm8gPSBuZXcg
TW91c2VFdmVudEluZm8oRXZhc01vdXNlRXZlbnRDbGljaywgRXZhc0tleU1vZGlmaWVyTm9uZSwg
RXZhc01vdXNlQnV0dG9uTGVmdCk7Ci0gICAgZmVlZE9yUXVldWVNb3VzZUV2ZW50KGV2ZW50SW5m
bywgRmVlZFF1ZXVlZEV2ZW50cyk7Ci0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNFTDsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2NoZWR1bGVBc3luY2hyb25vdXNDbGlja0NhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBlY29yZV9pZGxlcl9hZGQoc2Vu
ZENsaWNrLCAwKTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHVwZGF0ZUNsaWNrQ291bnQoaW50IGJ1dHRvbikKLXsKLSAgICBpZiAo
Z0xhc3RDbGlja1Bvc2l0aW9uWCAhPSBnTGFzdE1vdXNlUG9zaXRpb25YCi0gICAgICAgIHx8IGdM
YXN0Q2xpY2tQb3NpdGlvblkgIT0gZ0xhc3RNb3VzZVBvc2l0aW9uWQotICAgICAgICB8fCBnTGFz
dENsaWNrQnV0dG9uICE9IGJ1dHRvbgotICAgICAgICB8fCBnVGltZU9mZnNldCAtIGdMYXN0Q2xp
Y2tUaW1lT2Zmc2V0ID49IDEpCi0gICAgICAgIGdDbGlja0NvdW50ID0gMTsKLSAgICBlbHNlCi0g
ICAgICAgIGdDbGlja0NvdW50Kys7Ci19Ci0KLXN0YXRpYyBFdmFzS2V5TW9kaWZpZXIgbW9kaWZp
ZXJGcm9tSlNWYWx1ZShKU0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgSlNWYWx1ZVJlZiB2YWx1
ZSkKLXsKLSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNLZXlWYWx1ZShBZG9wdCwgSlNW
YWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCB2YWx1ZSwgMCkpOwotCi0gICAgaWYgKGVxdWFscyhq
c0tleVZhbHVlLCAiY3RybEtleSIpIHx8IGVxdWFscyhqc0tleVZhbHVlLCAiYWRkU2VsZWN0aW9u
S2V5IikpCi0gICAgICAgIHJldHVybiBFdmFzS2V5TW9kaWZpZXJDb250cm9sOwotICAgIGlmIChl
cXVhbHMoanNLZXlWYWx1ZSwgInNoaWZ0S2V5IikgfHwgZXF1YWxzKGpzS2V5VmFsdWUsICJyYW5n
ZVNlbGVjdGlvbktleSIpKQotICAgICAgICByZXR1cm4gRXZhc0tleU1vZGlmaWVyU2hpZnQ7Ci0g
ICAgaWYgKGVxdWFscyhqc0tleVZhbHVlLCAiYWx0S2V5IikpCi0gICAgICAgIHJldHVybiBFdmFz
S2V5TW9kaWZpZXJBbHQ7Ci0gICAgaWYgKGVxdWFscyhqc0tleVZhbHVlLCAibWV0YUtleSIpKQot
ICAgICAgICByZXR1cm4gRXZhc0tleU1vZGlmaWVyTWV0YTsKLQotICAgIHJldHVybiBFdmFzS2V5
TW9kaWZpZXJOb25lOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbW9kaWZpZXJzRnJvbUpTVmFsdWUo
SlNDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IEpTVmFsdWVSZWYgbW9kaWZpZXJzKQotewotICAg
IC8vIFRoZSB2YWx1ZSBtYXkgZWl0aGVyIGJlIGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgbW9kaWZp
ZXIgb3IgYW4gYXJyYXkgb2YgbW9kaWZpZXJzLgotICAgIGlmIChKU1ZhbHVlSXNTdHJpbmcoY29u
dGV4dCwgbW9kaWZpZXJzKSkKLSAgICAgICAgcmV0dXJuIG1vZGlmaWVyRnJvbUpTVmFsdWUoY29u
dGV4dCwgbW9kaWZpZXJzKTsKLQotICAgIEpTT2JqZWN0UmVmIG1vZGlmaWVyc0FycmF5ID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIG1vZGlmaWVycywgMCk7Ci0gICAgaWYgKCFtb2RpZmllcnNB
cnJheSkKLSAgICAgICAgcmV0dXJuIEV2YXNLZXlNb2RpZmllck5vbmU7Ci0KLSAgICB1bnNpZ25l
ZCBtb2RpZmllciA9IEV2YXNLZXlNb2RpZmllck5vbmU7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGxlbmd0aFByb3BlcnR5KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygibGVuZ3RoIikpOwotICAgIGludCBtb2RpZmllcnNDb3VudCA9IEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG1vZGlmaWVyc0FycmF5LCBsZW5n
dGhQcm9wZXJ0eS5nZXQoKSwgMCksIDApOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbW9kaWZp
ZXJzQ291bnQ7ICsraSkKLSAgICAgICAgbW9kaWZpZXIgfD0gbW9kaWZpZXJGcm9tSlNWYWx1ZShj
b250ZXh0LCBKU09iamVjdEdldFByb3BlcnR5QXRJbmRleChjb250ZXh0LCBtb2RpZmllcnNBcnJh
eSwgaSwgMCkpOwotICAgIHJldHVybiBtb2RpZmllcjsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
Z2V0TWVudUl0ZW1UaXRsZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIEV3a19Db250ZXh0X01lbnVfSXRlbSogaXRlbSA9IHN0YXRpY19jYXN0PEV3a19D
b250ZXh0X01lbnVfSXRlbSo+KEpTT2JqZWN0R2V0UHJpdmF0ZShvYmplY3QpKTsKLSAgICBDU3Ry
aW5nIGxhYmVsOwotICAgIGlmIChld2tfY29udGV4dF9tZW51X2l0ZW1fdHlwZV9nZXQoaXRlbSkg
PT0gRVdLX1NFUEFSQVRPUl9UWVBFKQotICAgICAgICBsYWJlbCA9ICI8c2VwYXJhdG9yPiI7Ci0g
ICAgZWxzZQotICAgICAgICBsYWJlbCA9IGV3a19jb250ZXh0X21lbnVfaXRlbV90aXRsZV9nZXQo
aXRlbSk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VTdHJpbmcoY29udGV4dCwgSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcobGFiZWwuZGF0YSgpKSk7Ci19Ci0KLXN0YXRpYyBib29sIHNl
dE1lbnVJdGVtVGl0bGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
b2JqZWN0LCBKU1N0cmluZ1JlZiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIEpTVmFs
dWVSZWYgbWVudUl0ZW1DbGlja0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0gPSBzdGF0aWNfY2FzdDxFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIGV3
a19jb250ZXh0X21lbnVfaXRlbV9zZWxlY3QoZXdrX2NvbnRleHRfbWVudV9pdGVtX3BhcmVudF9n
ZXQoaXRlbSksIGl0ZW0pOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLX0KLQotc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljTWVudUl0ZW1GdW5jdGlvbnNb
XSA9IHsKLSAgICB7ICJjbGljayIsIG1lbnVJdGVtQ2xpY2tDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAg
IHsgMCwgMCwgMCB9Ci19OwotCi1zdGF0aWMgSlNTdGF0aWNWYWx1ZSBzdGF0aWNNZW51SXRlbVZh
bHVlc1tdID0gewotICAgIHsgInRpdGxlIiwgZ2V0TWVudUl0ZW1UaXRsZUNhbGxiYWNrLCBzZXRN
ZW51SXRlbVRpdGxlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlTm9uZSB9LAotICAgIHsg
MCwgMCwgMCwgMCB9Ci19OwotCi1zdGF0aWMgSlNDbGFzc1JlZiBnZXRNZW51SXRlbUNsYXNzKCkK
LXsKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiBtZW51SXRlbUNsYXNzID0gMDsKLQotICAgIGlmICgh
bWVudUl0ZW1DbGFzcykgewotICAgICAgICBKU0NsYXNzRGVmaW5pdGlvbiBjbGFzc0RlZmluaXRp
b24gPSB7Ci0gICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAotICAgICAgICAgICAgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07Ci0gICAgICAgIGNsYXNzRGVmaW5pdGlvbi5zdGF0
aWNGdW5jdGlvbnMgPSBzdGF0aWNNZW51SXRlbUZ1bmN0aW9uczsKLSAgICAgICAgY2xhc3NEZWZp
bml0aW9uLnN0YXRpY1ZhbHVlcyA9IHN0YXRpY01lbnVJdGVtVmFsdWVzOwotCi0gICAgICAgIG1l
bnVJdGVtQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOwotICAgIH0KLQot
ICAgIHJldHVybiBtZW51SXRlbUNsYXNzOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjb250ZXh0
Q2xpY2tDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgRXZhc19P
YmplY3QqIHZpZXcgPSBld2tfZnJhbWVfdmlld19nZXQoYnJvd3Nlci0+bWFpbkZyYW1lKCkpOwot
ICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwotCi0gICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHZpZXcpOwotICAg
IGlmICghZXZhcykKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotCi0gICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duIG1vdXNlRG93bjsKLSAgICBtb3VzZURvd24u
YnV0dG9uID0gMzsKLSAgICBtb3VzZURvd24ub3V0cHV0LnggPSBnTGFzdE1vdXNlUG9zaXRpb25Y
OwotICAgIG1vdXNlRG93bi5vdXRwdXQueSA9IGdMYXN0TW91c2VQb3NpdGlvblk7Ci0gICAgbW91
c2VEb3duLmNhbnZhcy54ID0gZ0xhc3RNb3VzZVBvc2l0aW9uWDsKLSAgICBtb3VzZURvd24uY2Fu
dmFzLnkgPSBnTGFzdE1vdXNlUG9zaXRpb25ZOwotICAgIG1vdXNlRG93bi5kYXRhID0gMDsKLSAg
ICBtb3VzZURvd24ubW9kaWZpZXJzID0gY29uc3RfY2FzdDxFdmFzX01vZGlmaWVyKj4oZXZhc19r
ZXlfbW9kaWZpZXJfZ2V0KGV2YXMpKTsKLSAgICBtb3VzZURvd24ubG9ja3MgPSBjb25zdF9jYXN0
PEV2YXNfTG9jayo+KGV2YXNfa2V5X2xvY2tfZ2V0KGV2YXMpKTsKLSAgICBtb3VzZURvd24uZmxh
Z3MgPSBFVkFTX0JVVFRPTl9OT05FOwotICAgIG1vdXNlRG93bi50aW1lc3RhbXAgPSBlY29yZV9s
b29wX3RpbWVfZ2V0KCk7Ci0gICAgbW91c2VEb3duLmV2ZW50X2ZsYWdzID0gRVZBU19FVkVOVF9G
TEFHX05PTkU7Ci0gICAgbW91c2VEb3duLmRldiA9IDA7Ci0KLSAgICBld2tfdmlld19jb250ZXh0
X21lbnVfZm9yd2FyZF9ldmVudCh2aWV3LCAmbW91c2VEb3duKTsKLSAgICBFd2tfQ29udGV4dF9N
ZW51KiBld2tNZW51ID0gZXdrX3ZpZXdfY29udGV4dF9tZW51X2dldCh2aWV3KTsKLQotICAgIEpT
VmFsdWVSZWYgdmFsdWVSZWYgPSBKU09iamVjdE1ha2VBcnJheShjb250ZXh0LCAwLCAwLCAwKTsK
LSAgICBpZiAoZXdrTWVudSkgewotICAgICAgICBjb25zdCBFaW5hX0xpc3QqIGV3a01lbnVJdGVt
cyA9IGV3a19jb250ZXh0X21lbnVfaXRlbV9saXN0X2dldChld2tNZW51KTsKLSAgICAgICAgSlNW
YWx1ZVJlZiBhcnJheVZhbHVlc1tlaW5hX2xpc3RfY291bnQoZXdrTWVudUl0ZW1zKV07Ci0KLSAg
ICAgICAgY29uc3QgRWluYV9MaXN0KiBsaXN0SXRlcmF0b3I7Ci0gICAgICAgIHZvaWQqIGRhdGE7
Ci0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIEVJTkFfTElTVF9GT1JFQUNIKGV3a01l
bnVJdGVtcywgbGlzdEl0ZXJhdG9yLCBkYXRhKQotICAgICAgICAgICAgYXJyYXlWYWx1ZXNbaW5k
ZXgrK10gPSBKU09iamVjdE1ha2UoY29udGV4dCwgZ2V0TWVudUl0ZW1DbGFzcygpLCBkYXRhKTsK
LQotICAgICAgICBpZiAoaW5kZXgpCi0gICAgICAgICAgICB2YWx1ZVJlZiA9IEpTT2JqZWN0TWFr
ZUFycmF5KGNvbnRleHQsIGluZGV4IC0gMSwgYXJyYXlWYWx1ZXMsIDApOwotICAgIH0KLQotICAg
IHJldHVybiB2YWx1ZVJlZjsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbW91c2VEb3duQ2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGludCBidXR0b24gPSAwOwot
ICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpIHsKLSAgICAgICAgYnV0dG9uID0gc3RhdGljX2Nh
c3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24p
KTsKLQotICAgICAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0gICAgfQotCi0gICAgYnV0dG9u
ID0gdHJhbnNsYXRlTW91c2VCdXR0b25OdW1iZXIoYnV0dG9uKTsKLSAgICAvLyBJZiB0aGUgc2Ft
ZSBtb3VzZSBidXR0b24gaXMgYWxyZWFkeSBpbiB0aGUgZG93biBwb3NpdGlvbiBkb24ndCBzZW5k
IGFub3RoZXIgZXZlbnQgYXMgaXQgbWF5IGNvbmZ1c2UgWHZmYi4KLSAgICBpZiAoZ0J1dHRvbkN1
cnJlbnRseURvd24gPT0gYnV0dG9uKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Ci0KLSAgICB1cGRhdGVDbGlja0NvdW50KGJ1dHRvbik7Ci0KLSAgICB1bnNp
Z25lZCBtb2RpZmllcnMgPSBhcmd1bWVudENvdW50ID49IDIgPyBtb2RpZmllcnNGcm9tSlNWYWx1
ZShjb250ZXh0LCBhcmd1bWVudHNbMV0pIDogRXZhc0tleU1vZGlmaWVyTm9uZTsKLSAgICBNb3Vz
ZUV2ZW50SW5mbyogZXZlbnRJbmZvID0gbmV3IE1vdXNlRXZlbnRJbmZvKEV2YXNNb3VzZUV2ZW50
RG93biwgbW9kaWZpZXJzLCBzdGF0aWNfY2FzdDxFdmFzTW91c2VCdXR0b24+KGJ1dHRvbikpOwot
ICAgIGZlZWRPclF1ZXVlTW91c2VFdmVudChldmVudEluZm8sIEZlZWRRdWV1ZWRFdmVudHMpOwot
ICAgIGdCdXR0b25DdXJyZW50bHlEb3duID0gYnV0dG9uOwotICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgbW91c2VVcENhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpbnQgYnV0dG9uID0gMDsK
LSAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKSB7Ci0gICAgICAgIGJ1dHRvbiA9IHN0YXRpY19j
YXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KSk7Ci0gICAgICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBnTGFzdENs
aWNrUG9zaXRpb25YID0gZ0xhc3RNb3VzZVBvc2l0aW9uWDsKLSAgICBnTGFzdENsaWNrUG9zaXRp
b25ZID0gZ0xhc3RNb3VzZVBvc2l0aW9uWTsKLSAgICBnTGFzdENsaWNrQnV0dG9uID0gZ0J1dHRv
bkN1cnJlbnRseURvd247Ci0gICAgZ0xhc3RDbGlja1RpbWVPZmZzZXQgPSBnVGltZU9mZnNldDsK
LSAgICBnQnV0dG9uQ3VycmVudGx5RG93biA9IDA7Ci0KLSAgICB1bnNpZ25lZCBtb2RpZmllcnMg
PSBhcmd1bWVudENvdW50ID49IDIgPyBtb2RpZmllcnNGcm9tSlNWYWx1ZShjb250ZXh0LCBhcmd1
bWVudHNbMV0pIDogRXZhc0tleU1vZGlmaWVyTm9uZTsKLSAgICBNb3VzZUV2ZW50SW5mbyogZXZl
bnRJbmZvID0gbmV3IE1vdXNlRXZlbnRJbmZvKEV2YXNNb3VzZUV2ZW50VXAsIG1vZGlmaWVycywg
dHJhbnNsYXRlTW91c2VCdXR0b25OdW1iZXIoYnV0dG9uKSk7Ci0gICAgZmVlZE9yUXVldWVNb3Vz
ZUV2ZW50KGV2ZW50SW5mbywgRmVlZFF1ZXVlZEV2ZW50cyk7Ci0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBtb3VzZU1vdmVU
b0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0
KTsKLQotICAgIGdMYXN0TW91c2VQb3NpdGlvblggPSBzdGF0aWNfY2FzdDxpbnQ+KEpTVmFsdWVU
b051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIGlmIChleGNl
cHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotICAgIGdMYXN0TW91c2VQb3NpdGlvblkgPSBzdGF0aWNfY2FzdDxpbnQ+KEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOwotICAgIGlm
IChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTW91c2VFdmVudEluZm8qIGV2ZW50SW5mbyA9IG5ldyBN
b3VzZUV2ZW50SW5mbyhFdmFzTW91c2VFdmVudE1vdmUpOwotICAgIGZlZWRPclF1ZXVlTW91c2VF
dmVudChldmVudEluZm8sIERvTm90RmVlZFF1ZXVlZEV2ZW50cyk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBsZWFwRm9y
d2FyZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA+IDApIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBsZWFwRm9yd2Fy
ZERlbGF5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KTsKLSAgICAgICAgaWYgKGRlbGF5ZWRFdmVudFF1ZXVlKCkuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgZGVsYXllZEV2ZW50UXVldWUoKS5hcHBlbmQoRGVsYXllZEV2ZW50KDAsIGxlYXBGb3J3YXJk
RGVsYXkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsYXllZEV2ZW50UXVldWUoKS5s
YXN0KCkuZGVsYXkgPSBsZWFwRm9yd2FyZERlbGF5OwotICAgICAgICBnVGltZU9mZnNldCArPSBs
ZWFwRm9yd2FyZERlbGF5OwotICAgIH0KLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEV2YXNNb3VzZUV2ZW50IGV2YXNNb3VzZUV2ZW50RnJv
bUhvcml6b250YWxBbmRWZXJ0aWNhbE9mZnNldHMoaW50IGhvcml6b250YWxPZmZzZXQsIGludCB2
ZXJ0aWNhbE9mZnNldCkKLXsKLSAgICB1bnNpZ25lZCBtb3VzZUV2ZW50ID0gMDsKLQotICAgIGlm
ICh2ZXJ0aWNhbE9mZnNldCA+IDApCi0gICAgICAgIG1vdXNlRXZlbnQgfD0gRXZhc01vdXNlRXZl
bnRTY3JvbGxVcDsKLSAgICBlbHNlIGlmICh2ZXJ0aWNhbE9mZnNldCA8IDApCi0gICAgICAgIG1v
dXNlRXZlbnQgfD0gRXZhc01vdXNlRXZlbnRTY3JvbGxEb3duOwotCi0gICAgaWYgKGhvcml6b250
YWxPZmZzZXQgPiAwKQotICAgICAgICBtb3VzZUV2ZW50IHw9IEV2YXNNb3VzZUV2ZW50U2Nyb2xs
UmlnaHQ7Ci0gICAgZWxzZSBpZiAoaG9yaXpvbnRhbE9mZnNldCA8IDApCi0gICAgICAgIG1vdXNl
RXZlbnQgfD0gRXZhc01vdXNlRXZlbnRTY3JvbGxMZWZ0OwotCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PEV2YXNNb3VzZUV2ZW50Pihtb3VzZUV2ZW50KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
bW91c2VTY3JvbGxCeUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLQotICAgIC8vIFdlIG5lZWQgdG8gaW52ZXJ0IHNjcm9sbGluZyB2YWx1
ZXMgc2luY2UgaW4gRUZMIG5lZ2F0aXZlIHogdmFsdWUgbWVhbnMgdGhhdAotICAgIC8vIGNhbnZh
cyBpcyBzY3JvbGxpbmcgZG93bgotICAgIGNvbnN0IGludCBob3Jpem9udGFsID0gLShzdGF0aWNf
Y2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bikpKTsKLSAgICBpZiAoZXhjZXB0aW9uICYmICpleGNlcHRpb24pCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICBjb25zdCBpbnQgdmVydGljYWwgPSAt
KHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwg
ZXhjZXB0aW9uKSkpOwotICAgIGlmIChleGNlcHRpb24gJiYgKmV4Y2VwdGlvbikKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgTW91c2VFdmVudElu
Zm8qIGV2ZW50SW5mbyA9IG5ldyBNb3VzZUV2ZW50SW5mbyhldmFzTW91c2VFdmVudEZyb21Ib3Jp
em9udGFsQW5kVmVydGljYWxPZmZzZXRzKGhvcml6b250YWwsIHZlcnRpY2FsKSwgRXZhc0tleU1v
ZGlmaWVyTm9uZSwgRXZhc01vdXNlQnV0dG9uTm9uZSwgaG9yaXpvbnRhbCwgdmVydGljYWwpOwot
ICAgIGZlZWRPclF1ZXVlTW91c2VFdmVudChldmVudEluZm8sIEZlZWRRdWV1ZWRFdmVudHMpOwot
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpT
VmFsdWVSZWYgY29udGludW91c01vdXNlU2Nyb2xsQnlDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVf
dCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVm
KiBleGNlcHRpb24pCi17Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQp
OwotfQotCi1zdGF0aWMgS2V5RXZlbnRJbmZvKiBrZXlQYWROYW1lRnJvbUpTVmFsdWUoSlNTdHJp
bmdSZWYgY2hhcmFjdGVyLCB1bnNpZ25lZCBtb2RpZmllcnMpCi17Ci0gICAgaWYgKGVxdWFscyhj
aGFyYWN0ZXIsICJsZWZ0QXJyb3ciKSkKLSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudEluZm8o
IktQX0xlZnQiLCBtb2RpZmllcnMpOwotICAgIGlmIChlcXVhbHMoY2hhcmFjdGVyLCAicmlnaHRB
cnJvdyIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiS1BfUmlnaHQiLCBtb2Rp
ZmllcnMpOwotICAgIGlmIChlcXVhbHMoY2hhcmFjdGVyLCAidXBBcnJvdyIpKQotICAgICAgICBy
ZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiS1BfVXAiLCBtb2RpZmllcnMpOwotICAgIGlmIChlcXVh
bHMoY2hhcmFjdGVyLCAiZG93bkFycm93IikpCi0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJ
bmZvKCJLUF9Eb3duIiwgbW9kaWZpZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJhY3RlciwgInBh
Z2VVcCIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiS1BfUHJpb3IiLCBtb2Rp
ZmllcnMpOwotICAgIGlmIChlcXVhbHMoY2hhcmFjdGVyLCAicGFnZURvd24iKSkKLSAgICAgICAg
cmV0dXJuIG5ldyBLZXlFdmVudEluZm8oIktQX05leHQiLCBtb2RpZmllcnMpOwotICAgIGlmIChl
cXVhbHMoY2hhcmFjdGVyLCAiaG9tZSIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5m
bygiS1BfSG9tZSIsIG1vZGlmaWVycyk7Ci0gICAgaWYgKGVxdWFscyhjaGFyYWN0ZXIsICJlbmQi
KSkKLSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudEluZm8oIktQX0VuZCIsIG1vZGlmaWVycyk7
Ci0gICAgaWYgKGVxdWFscyhjaGFyYWN0ZXIsICJpbnNlcnQiKSkKLSAgICAgICAgcmV0dXJuIG5l
dyBLZXlFdmVudEluZm8oIktQX0luc2VydCIsIG1vZGlmaWVycyk7Ci0gICAgaWYgKGVxdWFscyhj
aGFyYWN0ZXIsICJkZWxldGUiKSkKLSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudEluZm8oIktQ
X0RlbGV0ZSIsIG1vZGlmaWVycyk7Ci0KLSAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbyhjaGFy
YWN0ZXItPnN0cmluZygpLnV0ZjgoKSwgbW9kaWZpZXJzLCBjaGFyYWN0ZXItPnN0cmluZygpLnV0
ZjgoKSk7Ci19Ci0KLXN0YXRpYyBLZXlFdmVudEluZm8qIGtleU5hbWVGcm9tSlNWYWx1ZShKU1N0
cmluZ1JlZiBjaGFyYWN0ZXIsIHVuc2lnbmVkIG1vZGlmaWVycykKLXsKLSAgICBpZiAoZXF1YWxz
KGNoYXJhY3RlciwgImxlZnRBcnJvdyIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5m
bygiTGVmdCIsIG1vZGlmaWVycyk7Ci0gICAgaWYgKGVxdWFscyhjaGFyYWN0ZXIsICJyaWdodEFy
cm93IikpCi0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJSaWdodCIsIG1vZGlmaWVy
cyk7Ci0gICAgaWYgKGVxdWFscyhjaGFyYWN0ZXIsICJ1cEFycm93IikpCi0gICAgICAgIHJldHVy
biBuZXcgS2V5RXZlbnRJbmZvKCJVcCIsIG1vZGlmaWVycyk7Ci0gICAgaWYgKGVxdWFscyhjaGFy
YWN0ZXIsICJkb3duQXJyb3ciKSkKLSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudEluZm8oIkRv
d24iLCBtb2RpZmllcnMpOwotICAgIGlmIChlcXVhbHMoY2hhcmFjdGVyLCAicGFnZVVwIikpCi0g
ICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJQcmlvciIsIG1vZGlmaWVycyk7Ci0gICAg
aWYgKGVxdWFscyhjaGFyYWN0ZXIsICJwYWdlRG93biIpKQotICAgICAgICByZXR1cm4gbmV3IEtl
eUV2ZW50SW5mbygiTmV4dCIsIG1vZGlmaWVycyk7Ci0gICAgaWYgKGVxdWFscyhjaGFyYWN0ZXIs
ICJob21lIikpCi0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJIb21lIiwgbW9kaWZp
ZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJhY3RlciwgImVuZCIpKQotICAgICAgICByZXR1cm4g
bmV3IEtleUV2ZW50SW5mbygiRW5kIiwgbW9kaWZpZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJh
Y3RlciwgImluc2VydCIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiSW5zZXJ0
IiwgbW9kaWZpZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJhY3RlciwgImRlbGV0ZSIpKQotICAg
ICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiRGVsZXRlIiwgbW9kaWZpZXJzKTsKLSAgICBp
ZiAoZXF1YWxzKGNoYXJhY3RlciwgInByaW50U2NyZWVuIikpCi0gICAgICAgIHJldHVybiBuZXcg
S2V5RXZlbnRJbmZvKCJQcmludCIsIG1vZGlmaWVycyk7Ci0gICAgaWYgKGVxdWFscyhjaGFyYWN0
ZXIsICJtZW51IikpCi0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJNZW51IiwgbW9k
aWZpZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJhY3RlciwgImxlZnRDb250cm9sIikpCi0gICAg
ICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJDb250cm9sX0wiLCBtb2RpZmllcnMpOwotICAg
IGlmIChlcXVhbHMoY2hhcmFjdGVyLCAicmlnaHRDb250cm9sIikpCi0gICAgICAgIHJldHVybiBu
ZXcgS2V5RXZlbnRJbmZvKCJDb250cm9sX1IiLCBtb2RpZmllcnMpOwotICAgIGlmIChlcXVhbHMo
Y2hhcmFjdGVyLCAibGVmdFNoaWZ0IikpCi0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZv
KCJTaGlmdF9MIiwgbW9kaWZpZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJhY3RlciwgInJpZ2h0
U2hpZnQiKSkKLSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudEluZm8oIlNoaWZ0X1IiLCBtb2Rp
ZmllcnMpOwotICAgIGlmIChlcXVhbHMoY2hhcmFjdGVyLCAibGVmdEFsdCIpKQotICAgICAgICBy
ZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiQWx0X0wiLCBtb2RpZmllcnMpOwotICAgIGlmIChlcXVh
bHMoY2hhcmFjdGVyLCAicmlnaHRBbHQiKSkKLSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudElu
Zm8oIkFsdF9SIiwgbW9kaWZpZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJhY3RlciwgIkYxIikp
Ci0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJGMSIsIG1vZGlmaWVycyk7Ci0gICAg
aWYgKGVxdWFscyhjaGFyYWN0ZXIsICJGMiIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50
SW5mbygiRjIiLCBtb2RpZmllcnMpOwotICAgIGlmIChlcXVhbHMoY2hhcmFjdGVyLCAiRjMiKSkK
LSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudEluZm8oIkYzIiwgbW9kaWZpZXJzKTsKLSAgICBp
ZiAoZXF1YWxzKGNoYXJhY3RlciwgIkY0IikpCi0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJ
bmZvKCJGNCIsIG1vZGlmaWVycyk7Ci0gICAgaWYgKGVxdWFscyhjaGFyYWN0ZXIsICJGNSIpKQot
ICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiRjUiLCBtb2RpZmllcnMpOwotICAgIGlm
IChlcXVhbHMoY2hhcmFjdGVyLCAiRjYiKSkKLSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudElu
Zm8oIkY2IiwgbW9kaWZpZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJhY3RlciwgIkY3IikpCi0g
ICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJGNyIsIG1vZGlmaWVycyk7Ci0gICAgaWYg
KGVxdWFscyhjaGFyYWN0ZXIsICJGOCIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5m
bygiRjgiLCBtb2RpZmllcnMpOwotICAgIGlmIChlcXVhbHMoY2hhcmFjdGVyLCAiRjkiKSkKLSAg
ICAgICAgcmV0dXJuIG5ldyBLZXlFdmVudEluZm8oIkY5IiwgbW9kaWZpZXJzKTsKLSAgICBpZiAo
ZXF1YWxzKGNoYXJhY3RlciwgIkYxMCIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5m
bygiRjEwIiwgbW9kaWZpZXJzKTsKLSAgICBpZiAoZXF1YWxzKGNoYXJhY3RlciwgIkYxMSIpKQot
ICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiRjExIiwgbW9kaWZpZXJzKTsKLSAgICBp
ZiAoZXF1YWxzKGNoYXJhY3RlciwgIkYxMiIpKQotICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50
SW5mbygiRjEyIiwgbW9kaWZpZXJzKTsKLQotICAgIGludCBjaGFyQ29kZSA9IEpTU3RyaW5nR2V0
Q2hhcmFjdGVyc1B0cihjaGFyYWN0ZXIpWzBdOwotICAgIGlmIChjaGFyQ29kZSA9PSAnXG4nIHx8
IGNoYXJDb2RlID09ICdccicpCi0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJSZXR1
cm4iLCBtb2RpZmllcnMsICJcciIpOwotICAgIGlmIChjaGFyQ29kZSA9PSAnXHQnKQotICAgICAg
ICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbygiVGFiIiwgbW9kaWZpZXJzLCAiXHQiKTsKLSAgICBp
ZiAoY2hhckNvZGUgPT0gJ1x4OCcpCi0gICAgICAgIHJldHVybiBuZXcgS2V5RXZlbnRJbmZvKCJC
YWNrU3BhY2UiLCBtb2RpZmllcnMsICJceDgiKTsKLSAgICBpZiAoY2hhckNvZGUgPT0gJyAnKQot
ICAgICAgICByZXR1cm4gbmV3IEtleUV2ZW50SW5mbygic3BhY2UiLCBtb2RpZmllcnMsICIgIik7
Ci0gICAgaWYgKGNoYXJDb2RlID09ICdceDFCJykKLSAgICAgICAgcmV0dXJuIG5ldyBLZXlFdmVu
dEluZm8oIkVzY2FwZSIsIG1vZGlmaWVycywgIlx4MUIiKTsKLQotICAgIGlmICgoY2hhcmFjdGVy
LT5sZW5ndGgoKSA9PSAxKSAmJiAoY2hhckNvZGUgPj0gJ0EnICYmIGNoYXJDb2RlIDw9ICdaJykp
Ci0gICAgICAgIG1vZGlmaWVycyB8PSBFdmFzS2V5TW9kaWZpZXJTaGlmdDsKLQotICAgIHJldHVy
biBuZXcgS2V5RXZlbnRJbmZvKGNoYXJhY3Rlci0+c3RyaW5nKCkudXRmOCgpLCBtb2RpZmllcnMs
IGNoYXJhY3Rlci0+c3RyaW5nKCkudXRmOCgpKTsKLX0KLQotc3RhdGljIEtleUV2ZW50SW5mbyog
Y3JlYXRlS2V5RXZlbnRJbmZvKEpTQ29udGV4dFJlZiBjb250ZXh0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQotewotICAgIGlmICghZXdrX2ZyYW1lX3ZpZXdfZ2V0KGJyb3dzZXItPm1haW5GcmFtZSgpKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgLy8gaGFuZGxlIGxvY2F0aW9uIGFyZ3VtZW50LgotICAgIGludCBs
b2NhdGlvbiA9IERvbUtleUxvY2F0aW9uU3RhbmRhcmQ7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQg
PiAyKQotICAgICAgICBsb2NhdGlvbiA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVy
KGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0KLSAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gY2hhcmFjdGVyKEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgaWYgKGV4Y2VwdGlvbiAmJiAqZXhjZXB0
aW9uKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHVuc2lnbmVkIG1vZGlmaWVycyA9IEV2YXNL
ZXlNb2RpZmllck5vbmU7Ci0gICAgaWYgKGFyZ3VtZW50Q291bnQgPj0gMikKLSAgICAgICAgbW9k
aWZpZXJzID0gbW9kaWZpZXJzRnJvbUpTVmFsdWUoY29udGV4dCwgYXJndW1lbnRzWzFdKTsKLQot
ICAgIHJldHVybiAobG9jYXRpb24gPT0gRG9tS2V5TG9jYXRpb25OdW1wYWQpID8ga2V5UGFkTmFt
ZUZyb21KU1ZhbHVlKGNoYXJhY3Rlci5nZXQoKSwgbW9kaWZpZXJzKSA6IGtleU5hbWVGcm9tSlNW
YWx1ZShjaGFyYWN0ZXIuZ2V0KCksIG1vZGlmaWVycyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlbmRL
ZXlEb3duKEV2YXMqIGV2YXMsIEtleUV2ZW50SW5mbyoga2V5RXZlbnRJbmZvKQotewotICAgIGlm
ICgha2V5RXZlbnRJbmZvKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBjaGFyKiBrZXlO
YW1lID0ga2V5RXZlbnRJbmZvLT5rZXlOYW1lLmRhdGEoKTsKLSAgICBjb25zdCBjaGFyKiBrZXlT
dHJpbmcgPSBrZXlFdmVudEluZm8tPmtleVN0cmluZy5kYXRhKCk7Ci0gICAgdW5zaWduZWQgbW9k
aWZpZXJzID0ga2V5RXZlbnRJbmZvLT5tb2RpZmllcnM7Ci0KLSAgICBEdW1wUmVuZGVyVHJlZVN1
cHBvcnRFZmw6OmxheW91dEZyYW1lKGJyb3dzZXItPm1haW5GcmFtZSgpKTsKLQotICAgIEFTU0VS
VChldmFzKTsKLQotICAgIGludCBldmVudEluZGV4ID0gMDsKLSAgICAvLyBNaW1pYyB0aGUgZW1h
Y3MgY3RybC1vIGJpbmRpbmcgYnkgaW5zZXJ0aW5nIGEgcGFyYWdyYXBoCi0gICAgLy8gc2VwYXJh
dG9yIGFuZCB0aGVuIHB1dHRpbmcgdGhlIGN1cnNvciBiYWNrIHRvIGl0cyBvcmlnaW5hbAotICAg
IC8vIHBvc2l0aW9uLiBBbGxvd3MgdXMgdG8gcGFzcyBlbWFjcy1jdHJsLW8uaHRtbAotICAgIGlm
ICgobW9kaWZpZXJzICYgRXZhc0tleU1vZGlmaWVyQ29udHJvbCkgJiYgIXN0cmNtcChrZXlOYW1l
LCAibyIpKSB7Ci0gICAgICAgIHNldEV2YXNNb2RpZmllcnMoZXZhcywgRXZhc0tleU1vZGlmaWVy
Tm9uZSk7Ci0gICAgICAgIGV2YXNfZXZlbnRfZmVlZF9rZXlfZG93bihldmFzLCAiUmV0dXJuIiwg
IlJldHVybiIsICJcciIsIDAsIGV2ZW50SW5kZXgrKywgMCk7Ci0gICAgICAgIGV2YXNfZXZlbnRf
ZmVlZF9rZXlfdXAoZXZhcywgIlJldHVybiIsICJSZXR1cm4iLCAiXHIiLCAwLCBldmVudEluZGV4
KyssIDApOwotCi0gICAgICAgIG1vZGlmaWVycyA9IEV2YXNLZXlNb2RpZmllck5vbmU7Ci0gICAg
ICAgIGtleU5hbWUgPSAiTGVmdCI7Ci0gICAgICAgIGtleVN0cmluZyA9IDA7Ci0gICAgfQotCi0g
ICAgc2V0RXZhc01vZGlmaWVycyhldmFzLCBtb2RpZmllcnMpOwotICAgIGV2YXNfZXZlbnRfZmVl
ZF9rZXlfZG93bihldmFzLCBrZXlOYW1lLCBrZXlOYW1lLCBrZXlTdHJpbmcsIDAsIGV2ZW50SW5k
ZXgrKywgMCk7Ci0gICAgZXZhc19ldmVudF9mZWVkX2tleV91cChldmFzLCBrZXlOYW1lLCBrZXlO
YW1lLCBrZXlTdHJpbmcsIDAsIGV2ZW50SW5kZXgrKywgMCk7Ci0gICAgc2V0RXZhc01vZGlmaWVy
cyhldmFzLCBFdmFzS2V5TW9kaWZpZXJOb25lKTsKLQotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEVmbDo6ZGVsaXZlckFsbE11dGF0aW9uc0lmTmVjZXNzYXJ5KCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIGtleURvd25DYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0g
ICAgT3duUHRyPEtleUV2ZW50SW5mbz4ga2V5RXZlbnRJbmZvID0gYWRvcHRQdHIoY3JlYXRlS2V5
RXZlbnRJbmZvKGNvbnRleHQsIGFyZ3VtZW50Q291bnQsIGFyZ3VtZW50cywgZXhjZXB0aW9uKSk7
Ci0gICAgc2VuZEtleURvd24oZXZhc19vYmplY3RfZXZhc19nZXQoYnJvd3Nlci0+bWFpbkZyYW1l
KCkpLCBrZXlFdmVudEluZm8uZ2V0KCkpOwotCi0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBzY2FsZVBhZ2VCeUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDMpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAg
IEV2YXNfT2JqZWN0KiB2aWV3ID0gZXdrX2ZyYW1lX3ZpZXdfZ2V0KGJyb3dzZXItPm1haW5GcmFt
ZSgpKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLQotICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKLSAgICBmbG9hdCB4ID0gSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKLSAgICBmbG9hdCB5ID0g
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKTsKLSAgICBl
d2tfdmlld19zY2FsZV9zZXQodmlldywgc2NhbGVGYWN0b3IsIHgsIHkpOwotCi0gICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgdm9pZCB0ZXh0Wm9v
bShab29tRXZlbnQgem9vbUV2ZW50KQotewotICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gZXdrX2Zy
YW1lX3ZpZXdfZ2V0KGJyb3dzZXItPm1haW5GcmFtZSgpKTsKLSAgICBpZiAoIXZpZXcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGZsb2F0IHpvb21GYWN0b3IgPSBld2tfdmlld190ZXh0X3pvb21f
Z2V0KHZpZXcpOwotICAgIGlmICh6b29tRXZlbnQgPT0gWm9vbUluKQotICAgICAgICB6b29tRmFj
dG9yICo9IHpvb21NdWx0aXBsaWVyUmF0aW87Ci0gICAgZWxzZQotICAgICAgICB6b29tRmFjdG9y
IC89IHpvb21NdWx0aXBsaWVyUmF0aW87Ci0KLSAgICBld2tfdmlld190ZXh0X3pvb21fc2V0KHZp
ZXcsIHpvb21GYWN0b3IpOwotfQotCi1zdGF0aWMgdm9pZCBwYWdlWm9vbShab29tRXZlbnQgem9v
bUV2ZW50KQotewotICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gZXdrX2ZyYW1lX3ZpZXdfZ2V0KGJy
b3dzZXItPm1haW5GcmFtZSgpKTsKLSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGZsb2F0IHpvb21GYWN0b3IgPSBld2tfdmlld19wYWdlX3pvb21fZ2V0KHZpZXcpOwotICAg
IGlmICh6b29tRXZlbnQgPT0gWm9vbUluKQotICAgICAgICB6b29tRmFjdG9yICo9IHpvb21NdWx0
aXBsaWVyUmF0aW87Ci0gICAgZWxzZQotICAgICAgICB6b29tRmFjdG9yIC89IHpvb21NdWx0aXBs
aWVyUmF0aW87Ci0KLSAgICBld2tfdmlld19wYWdlX3pvb21fc2V0KHZpZXcsIHpvb21GYWN0b3Ip
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB0ZXh0Wm9vbUluQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIHRleHRab29tKFpvb21Jbik7Ci0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiB0ZXh0
Wm9vbU91dENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlv
biwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpT
VmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICB0ZXh0
Wm9vbShab29tT3V0KTsKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHpvb21QYWdlSW5DYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCi17Ci0gICAgcGFnZVpvb20oWm9vbUluKTsKLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHpvb21Q
YWdlT3V0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIHBhZ2Va
b29tKFpvb21PdXQpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LX0KLQotc3RhdGljIEVpbmFfQm9vbCBzZW5kQXN5bmNocm9ub3VzS2V5RG93bih2b2lkKiB1c2Vy
RGF0YSkKLXsKLSAgICBPd25QdHI8S2V5RXZlbnRJbmZvPiBrZXlFdmVudEluZm8gPSBhZG9wdFB0
cihzdGF0aWNfY2FzdDxLZXlFdmVudEluZm8qPih1c2VyRGF0YSkpOwotICAgIHNlbmRLZXlEb3du
KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGJyb3dzZXItPm1haW5GcmFtZSgpKSwga2V5RXZlbnRJbmZv
LmdldCgpKTsKLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfQ0FOQ0VMOwotfQotCi1zdGF0aWMg
SlNWYWx1ZVJlZiBzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd25DYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgS2V5RXZlbnRJbmZvKiBrZXlFdmVudEluZm8gPSBj
cmVhdGVLZXlFdmVudEluZm8oY29udGV4dCwgYXJndW1lbnRDb3VudCwgYXJndW1lbnRzLCBleGNl
cHRpb24pOwotICAgIGVjb3JlX2lkbGVyX2FkZChzZW5kQXN5bmNocm9ub3VzS2V5RG93biwgc3Rh
dGljX2Nhc3Q8dm9pZCo+KGtleUV2ZW50SW5mbykpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIHZvaWQgc2VuZFRvdWNoRXZlbnQoRXdrX1Rv
dWNoX0V2ZW50X1R5cGUgdHlwZSkKLXsKLSAgICBFaW5hX0xpc3QqIGV2ZW50TGlzdCA9IDA7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG91Y2hQb2ludExpc3QoKS5zaXplKCk7ICsr
aSkgewotICAgICAgICBFd2tfVG91Y2hfUG9pbnQqIGV2ZW50ID0gbmV3IEV3a19Ub3VjaF9Qb2lu
dDsKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSB0b3VjaFBvaW50TGlzdCgpLmF0
KGkpLnBvaW50OwotICAgICAgICBldmVudC0+aWQgPSB0b3VjaFBvaW50TGlzdCgpLmF0KGkpLmlk
OwotICAgICAgICBldmVudC0+eCA9IHBvaW50LngoKTsKLSAgICAgICAgZXZlbnQtPnkgPSBwb2lu
dC55KCk7Ci0gICAgICAgIGV2ZW50LT5zdGF0ZSA9IHRvdWNoUG9pbnRMaXN0KCkuYXQoaSkuc3Rh
dGU7Ci0gICAgICAgIGV2ZW50TGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQoZXZlbnRMaXN0LCBldmVu
dCk7Ci0gICAgfQotCi0gICAgZXdrX2ZyYW1lX2ZlZWRfdG91Y2hfZXZlbnQoYnJvd3Nlci0+bWFp
bkZyYW1lKCksIHR5cGUsIGV2ZW50TGlzdCwgdG91Y2hNb2RpZmllcnMpOwotCi0gICAgdm9pZCog
bGlzdERhdGE7Ci0gICAgRUlOQV9MSVNUX0ZSRUUoZXZlbnRMaXN0LCBsaXN0RGF0YSkgewotICAg
ICAgICBFd2tfVG91Y2hfUG9pbnQqIGV2ZW50ID0gc3RhdGljX2Nhc3Q8RXdrX1RvdWNoX1BvaW50
Kj4obGlzdERhdGEpOwotICAgICAgICBkZWxldGUgZXZlbnQ7Ci0gICAgfQotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdWNoUG9pbnRMaXN0KCkuc2l6ZSgpOyApIHsKLSAgICAgICAg
aWYgKHRvdWNoUG9pbnRMaXN0KCkuYXQoaSkuc3RhdGUgPT0gRVZBU19UT1VDSF9QT0lOVF9VUCkK
LSAgICAgICAgICAgIHRvdWNoUG9pbnRMaXN0KCkucmVtb3ZlKGkpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHRvdWNoUG9pbnRMaXN0KCkuYXQoaSkuc3RhdGUgPSBFVkFTX1RPVUNIX1BP
SU5UX1NUSUxMOwotICAgICAgICAgICAgKytpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0
aWMgSlNWYWx1ZVJlZiBhZGRUb3VjaFBvaW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50ICE9IDIpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGludCB4ID0gc3RhdGljX2Nhc3Q8
aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsK
LSAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0gICAgaW50IHkgPSBzdGF0
aWNfY2FzdDxpbnQ+KEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2Vw
dGlvbikpOwotICAgIEFTU0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKLQotICAgIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50KHgsIHkpOwotICAgIGNvbnN0IHVuc2lnbmVkIGlk
ID0gdG91Y2hQb2ludExpc3QoKS5pc0VtcHR5KCkgPyAwIDogdG91Y2hQb2ludExpc3QoKS5sYXN0
KCkuaWQgKyAxOwotICAgIFRvdWNoRXZlbnRJbmZvIGV2ZW50SW5mbyhpZCwgRVZBU19UT1VDSF9Q
T0lOVF9ET1dOLCBwb2ludCk7Ci0gICAgdG91Y2hQb2ludExpc3QoKS5hcHBlbmQoZXZlbnRJbmZv
KTsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3Rh
dGljIEpTVmFsdWVSZWYgdG91Y2hTdGFydENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKLXsKLSAgICBzZW5kVG91Y2hFdmVudChFV0tfVE9VQ0hfU1RBUlQpOwotICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYg
dXBkYXRlVG91Y2hQb2ludENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsK
LSAgICBpZiAoYXJndW1lbnRDb3VudCAhPSAzKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBpbnQgaW5kZXggPSBzdGF0aWNfY2FzdDxpbnQ+KEpT
VmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIEFT
U0VSVCghZXhjZXB0aW9uIHx8ICEqZXhjZXB0aW9uKTsKLSAgICBpbnQgeCA9IHN0YXRpY19jYXN0
PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwotICAgIGludCB5ID0gc3Rh
dGljX2Nhc3Q8aW50PihKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNl
cHRpb24pKTsKLSAgICBBU1NFUlQoIWV4Y2VwdGlvbiB8fCAhKmV4Y2VwdGlvbik7Ci0KLSAgICBp
ZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRvdWNoUG9pbnRMaXN0KCkuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBXZWJDb3JlOjpJ
bnRQb2ludCYgcG9pbnQgPSB0b3VjaFBvaW50TGlzdCgpLmF0KGluZGV4KS5wb2ludDsKLSAgICBw
b2ludC5zZXRYKHgpOwotICAgIHBvaW50LnNldFkoeSk7Ci0gICAgdG91Y2hQb2ludExpc3QoKS5h
dChpbmRleCkuc3RhdGUgPSBFVkFTX1RPVUNIX1BPSU5UX01PVkU7Ci0KLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHRvdWNo
TW92ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBzZW5kVG91
Y2hFdmVudChFV0tfVE9VQ0hfTU9WRSk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBjYW5jZWxUb3VjaFBvaW50Q2FsbGJh
Y2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50
ICE9IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQot
ICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQs
IGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpl
eGNlcHRpb24pOwotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdG91Y2hQb2ludExpc3Qo
KS5zaXplKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LQotICAgIHRvdWNoUG9pbnRMaXN0KCkuYXQoaW5kZXgpLnN0YXRlID0gRVZBU19UT1VDSF9QT0lO
VF9DQU5DRUw7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQot
Ci1zdGF0aWMgSlNWYWx1ZVJlZiB0b3VjaENhbmNlbENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKLXsKLSAgICBzZW5kVG91Y2hFdmVudChFV0tfVE9VQ0hfQ0FOQ0VMKTsKLSAg
ICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1Zh
bHVlUmVmIHJlbGVhc2VUb3VjaFBvaW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50ICE9IDEpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGludCBpbmRleCA9IHN0YXRpY19jYXN0
PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7
Ci0gICAgQVNTRVJUKCFleGNlcHRpb24gfHwgISpleGNlcHRpb24pOwotICAgIGlmIChpbmRleCA8
IDAgfHwgaW5kZXggPj0gdG91Y2hQb2ludExpc3QoKS5zaXplKCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIHRvdWNoUG9pbnRMaXN0KCkuYXQo
aW5kZXgpLnN0YXRlID0gRVZBU19UT1VDSF9QT0lOVF9VUDsKLSAgICByZXR1cm4gSlNWYWx1ZU1h
a2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIHRvdWNoRW5kQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIHNlbmRUb3VjaEV2ZW50
KEVXS19UT1VDSF9FTkQpOwotICAgIHRvdWNoTW9kaWZpZXJzID0gMDsKLSAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGNsZWFy
VG91Y2hQb2ludHNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAg
dG91Y2hQb2ludExpc3QoKS5jbGVhcigpOwotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2V0VG91Y2hNb2RpZmllckNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3Vu
dCAhPSAyKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0K
LSAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNNb2RpZmllcihBZG9wdCwgSlNWYWx1ZVRv
U3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOwotICAgIHVuc2ln
bmVkIG1hc2sgPSAwOwotCi0gICAgaWYgKGVxdWFscyhqc01vZGlmaWVyLCAiYWx0IikpCi0gICAg
ICAgIG1hc2sgfD0gRUNPUkVfRVZFTlRfTU9ESUZJRVJfQUxUOwotICAgIGVsc2UgaWYgKGVxdWFs
cyhqc01vZGlmaWVyLCAiY3RybCIpKQotICAgICAgICBtYXNrIHw9IEVDT1JFX0VWRU5UX01PRElG
SUVSX0NUUkw7Ci0gICAgZWxzZSBpZiAoZXF1YWxzKGpzTW9kaWZpZXIsICJtZXRhIikpCi0gICAg
ICAgIG1hc2sgfD0gRUNPUkVfRVZFTlRfTU9ESUZJRVJfV0lOOwotICAgIGVsc2UgaWYgKGVxdWFs
cyhqc01vZGlmaWVyLCAic2hpZnQiKSkKLSAgICAgICAgbWFzayB8PSBFQ09SRV9FVkVOVF9NT0RJ
RklFUl9TSElGVDsKLQotICAgIGlmIChKU1ZhbHVlVG9Cb29sZWFuKGNvbnRleHQsIGFyZ3VtZW50
c1sxXSkpCi0gICAgICAgIHRvdWNoTW9kaWZpZXJzIHw9IG1hc2s7Ci0gICAgZWxzZQotICAgICAg
ICB0b3VjaE1vZGlmaWVycyAmPSB+bWFzazsKLQotICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVm
aW5lZChjb250ZXh0KTsKLX0KLQotc3RhdGljIEpTU3RhdGljRnVuY3Rpb24gc3RhdGljRnVuY3Rp
b25zW10gPSB7Ci0gICAgeyAiY29udGV4dENsaWNrIiwgY29udGV4dENsaWNrQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICB7ICJtb3VzZVNjcm9sbEJ5IiwgbW91c2VTY3JvbGxCeUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCi0gICAgeyAiY29udGludW91c01vdXNlU2Nyb2xsQnkiLCBjb250aW51b3VzTW91c2VTY3Jv
bGxCeUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAibW91c2VEb3duIiwgbW91c2VEb3duQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKLSAgICB7ICJtb3VzZVVwIiwgbW91c2VVcENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0g
ICAgeyAibW91c2VNb3ZlVG8iLCBtb3VzZU1vdmVUb0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAi
bGVhcEZvcndhcmQiLCBsZWFwRm9yd2FyZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAia2V5RG93
biIsIGtleURvd25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInNjaGVkdWxlQXN5bmNocm9ub3Vz
Q2xpY2siLCBzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNrQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7
ICJzY2hlZHVsZUFzeW5jaHJvbm91c0tleURvd24iLCBzY2hlZHVsZUFzeW5jaHJvbm91c0tleURv
d25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInNjYWxlUGFnZUJ5Iiwgc2NhbGVQYWdlQnlDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAotICAgIHsgInRleHRab29tSW4iLCB0ZXh0Wm9vbUluQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKLSAgICB7ICJ0ZXh0Wm9vbU91dCIsIHRleHRab29tT3V0Q2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
LSAgICB7ICJ6b29tUGFnZUluIiwgem9vbVBhZ2VJbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAi
em9vbVBhZ2VPdXQiLCB6b29tUGFnZU91dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAiYWRkVG91
Y2hQb2ludCIsIGFkZFRvdWNoUG9pbnRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInRvdWNoU3Rh
cnQiLCB0b3VjaFN0YXJ0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJ1cGRhdGVUb3VjaFBvaW50
IiwgdXBkYXRlVG91Y2hQb2ludENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAidG91Y2hNb3ZlIiwg
dG91Y2hNb3ZlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJyZWxlYXNlVG91Y2hQb2ludCIsIHJl
bGVhc2VUb3VjaFBvaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJ0b3VjaEVuZCIsIHRvdWNo
RW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJjYW5jZWxUb3VjaFBvaW50IiwgY2FuY2VsVG91
Y2hQb2ludENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAidG91Y2hDYW5jZWwiLCB0b3VjaENhbmNl
bENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAiY2xlYXJUb3VjaFBvaW50cyIsIGNsZWFyVG91Y2hQ
b2ludHNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsgInNldFRvdWNoTW9kaWZpZXIiLCBzZXRUb3Vj
aE1vZGlmaWVyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7IDAsIDAsIDAgfQotfTsKLQotc3RhdGlj
IEpTU3RhdGljVmFsdWUgc3RhdGljVmFsdWVzW10gPSB7Ci0gICAgeyAwLCAwLCAwLCAwIH0KLX07
Ci0KLXN0YXRpYyBKU0NsYXNzUmVmIGdldENsYXNzKEpTQ29udGV4dFJlZiBjb250ZXh0KQotewot
ICAgIHN0YXRpYyBKU0NsYXNzUmVmIGV2ZW50U2VuZGVyQ2xhc3MgPSAwOwotCi0gICAgaWYgKCFl
dmVudFNlbmRlckNsYXNzKSB7Ci0gICAgICAgIEpTQ2xhc3NEZWZpbml0aW9uIGNsYXNzRGVmaW5p
dGlvbiA9IHsKLSAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAotICAgICAgICAgICAg
ICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB9OwotICAgICAgICBjbGFzc0RlZmlu
aXRpb24uc3RhdGljRnVuY3Rpb25zID0gc3RhdGljRnVuY3Rpb25zOwotICAgICAgICBjbGFzc0Rl
ZmluaXRpb24uc3RhdGljVmFsdWVzID0gc3RhdGljVmFsdWVzOwotCi0gICAgICAgIGV2ZW50U2Vu
ZGVyQ2xhc3MgPSBKU0NsYXNzQ3JlYXRlKCZjbGFzc0RlZmluaXRpb24pOwotICAgIH0KLQotICAg
IHJldHVybiBldmVudFNlbmRlckNsYXNzOwotfQotCi1KU09iamVjdFJlZiBtYWtlRXZlbnRTZW5k
ZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgaXNUb3BGcmFtZSkKLXsKLSAgICBpZiAoaXNU
b3BGcmFtZSkgewotICAgICAgICBnRHJhZ01vZGUgPSB0cnVlOwotCi0gICAgICAgIC8vIEZseSBm
b3J3YXJkIGluIHRpbWUgb25lIHNlY29uZCB3aGVuIHRoZSBtYWluIGZyYW1lIGxvYWRzLiBUaGlz
IHdpbGwKLSAgICAgICAgLy8gZW5zdXJlIHRoYXQgd2hlbiBhIHRlc3QgYmVnaW5zIGNsaWNraW5n
IGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzCi0gICAgICAgIC8vIGEgcHJldmlvdXMgdGVzdCwgdGhv
c2UgY2xpY2tzIHdvbid0IGJlIGludGVycHJldGVkIGFzIGNvbnRpbnVhdGlvbnMKLSAgICAgICAg
Ly8gb2YgdGhlIHByZXZpb3VzIHRlc3QncyBjbGljayBzZXF1ZW5jZXMuCi0gICAgICAgIGdUaW1l
T2Zmc2V0ICs9IDEwMDA7Ci0KLSAgICAgICAgZ0xhc3RNb3VzZVBvc2l0aW9uWCA9IGdMYXN0TW91
c2VQb3NpdGlvblkgPSAwOwotICAgICAgICBnTGFzdENsaWNrUG9zaXRpb25YID0gZ0xhc3RDbGlj
a1Bvc2l0aW9uWSA9IDA7Ci0gICAgICAgIGdMYXN0Q2xpY2tUaW1lT2Zmc2V0ID0gMDsKLSAgICAg
ICAgZ0xhc3RDbGlja0J1dHRvbiA9IDA7Ci0gICAgICAgIGdCdXR0b25DdXJyZW50bHlEb3duID0g
MDsKLSAgICAgICAgZ0NsaWNrQ291bnQgPSAwOwotICAgIH0KLQotICAgIHJldHVybiBKU09iamVj
dE1ha2UoY29udGV4dCwgZ2V0Q2xhc3MoY29udGV4dCksIDApOwotfQotCi1zdGF0aWMgdm9pZCBm
ZWVkT3JRdWV1ZU1vdXNlRXZlbnQoTW91c2VFdmVudEluZm8qIGV2ZW50SW5mbywgRXZlbnRRdWV1
ZVN0cmF0ZWd5IHN0cmF0ZWd5KQotewotICAgIGlmICghZGVsYXllZEV2ZW50UXVldWUoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgaWYgKGRlbGF5ZWRFdmVudFF1ZXVlKCkubGFzdCgpLmV2ZW50SW5m
bykKLSAgICAgICAgICAgIGRlbGF5ZWRFdmVudFF1ZXVlKCkuYXBwZW5kKERlbGF5ZWRFdmVudChl
dmVudEluZm8pKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZGVsYXllZEV2ZW50UXVldWUo
KS5sYXN0KCkuZXZlbnRJbmZvID0gZXZlbnRJbmZvOwotCi0gICAgICAgIGlmIChzdHJhdGVneSA9
PSBGZWVkUXVldWVkRXZlbnRzKQotICAgICAgICAgICAgZmVlZFF1ZXVlZE1vdXNlRXZlbnRzKCk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGZlZWRNb3VzZUV2ZW50KGV2ZW50SW5mbyk7Ci19Ci0KLXN0
YXRpYyB2b2lkIGZlZWRNb3VzZUV2ZW50KE1vdXNlRXZlbnRJbmZvKiBldmVudEluZm8pCi17Ci0g
ICAgaWYgKCFldmVudEluZm8pCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIHRpbWVT
dGFtcCA9IDA7Ci0gICAgRXZhc19PYmplY3QqIG1haW5GcmFtZSA9IGJyb3dzZXItPm1haW5GcmFt
ZSgpOwotICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChtYWluRnJhbWUpOwot
ICAgIEV2YXNNb3VzZUV2ZW50IGV2ZW50ID0gZXZlbnRJbmZvLT5ldmVudDsKLQotICAgIHNldEV2
YXNNb2RpZmllcnMoZXZhcywgZXZlbnRJbmZvLT5tb2RpZmllcnMpOwotCi0gICAgRXZhc19CdXR0
b25fRmxhZ3MgZmxhZ3MgPSBFVkFTX0JVVFRPTl9OT05FOwotCi0gICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gcGFzcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHdpdGggb3VyIGV2ZW50cywgc28gdGhh
dAotICAgIC8vIHdlIGNvdWxkIGNvbnN0cnVjdCBjb3JyZWN0IFBsYXRmb3JtV2hlZWxFdmVudC4g
QXQgdGhlIG1vbWVudCwgbWF4IG51bWJlcgotICAgIC8vIG9mIGNsaWNrcyBpcyAzCi0gICAgaWYg
KGdDbGlja0NvdW50ID09IDMpCi0gICAgICAgIGZsYWdzID0gRVZBU19CVVRUT05fVFJJUExFX0NM
SUNLOwotICAgIGVsc2UgaWYgKGdDbGlja0NvdW50ID09IDIpCi0gICAgICAgIGZsYWdzID0gRVZB
U19CVVRUT05fRE9VQkxFX0NMSUNLOwotCi0gICAgaWYgKGV2ZW50ICYgRXZhc01vdXNlRXZlbnRN
b3ZlKQotICAgICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2VfbW92ZShldmFzLCBnTGFzdE1vdXNl
UG9zaXRpb25YLCBnTGFzdE1vdXNlUG9zaXRpb25ZLCB0aW1lU3RhbXArKywgMCk7Ci0gICAgaWYg
KGV2ZW50ICYgRXZhc01vdXNlRXZlbnREb3duKQotICAgICAgICBldmFzX2V2ZW50X2ZlZWRfbW91
c2VfZG93bihldmFzLCBldmVudEluZm8tPmJ1dHRvbiwgZmxhZ3MsIHRpbWVTdGFtcCsrLCAwKTsK
LSAgICBpZiAoZXZlbnQgJiBFdmFzTW91c2VFdmVudFVwKQotICAgICAgICBldmFzX2V2ZW50X2Zl
ZWRfbW91c2VfdXAoZXZhcywgZXZlbnRJbmZvLT5idXR0b24sIGZsYWdzLCB0aW1lU3RhbXArKywg
MCk7Ci0gICAgaWYgKGV2ZW50ICYgRXZhc01vdXNlRXZlbnRTY3JvbGxMZWZ0IHwgZXZlbnQgJiBF
dmFzTW91c2VFdmVudFNjcm9sbFJpZ2h0KQotICAgICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2Vf
d2hlZWwoZXZhcywgMSwgZXZlbnRJbmZvLT5ob3Jpem9udGFsRGVsdGEsIHRpbWVTdGFtcCwgMCk7
Ci0gICAgaWYgKGV2ZW50ICYgRXZhc01vdXNlRXZlbnRTY3JvbGxVcCB8IGV2ZW50ICYgRXZhc01v
dXNlRXZlbnRTY3JvbGxEb3duKQotICAgICAgICBldmFzX2V2ZW50X2ZlZWRfbW91c2Vfd2hlZWwo
ZXZhcywgMCwgZXZlbnRJbmZvLT52ZXJ0aWNhbERlbHRhLCB0aW1lU3RhbXAsIDApOwotCi0gICAg
c2V0RXZhc01vZGlmaWVycyhldmFzLCBFdmFzS2V5TW9kaWZpZXJOb25lKTsKLQotICAgIGRlbGV0
ZSBldmVudEluZm87Ci19Ci0KLXN0YXRpYyB2b2lkIGZlZWRRdWV1ZWRNb3VzZUV2ZW50cygpCi17
Ci0gICAgV1RGOjpWZWN0b3I8RGVsYXllZEV2ZW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkZWxh
eWVkRXZlbnRRdWV1ZSgpLmJlZ2luKCk7Ci0gICAgZm9yICg7IGl0ICE9IGRlbGF5ZWRFdmVudFF1
ZXVlKCkuZW5kKCk7IGl0KyspIHsKLSAgICAgICAgRGVsYXllZEV2ZW50IGRlbGF5ZWRFdmVudCA9
ICppdDsKLSAgICAgICAgaWYgKGRlbGF5ZWRFdmVudC5kZWxheSkKLSAgICAgICAgICAgIHVzbGVl
cChkZWxheWVkRXZlbnQuZGVsYXkgKiAxMDAwKTsKLSAgICAgICAgZmVlZE1vdXNlRXZlbnQoZGVs
YXllZEV2ZW50LmV2ZW50SW5mbyk7Ci0gICAgfQotICAgIGRlbGF5ZWRFdmVudFF1ZXVlKCkuY2xl
YXIoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9FdmVudFNlbmRl
ci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0V2ZW50U2VuZGVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDU5ZmY5MzNhOWViM2RjOTAwNDZlNTBiNGNmMTY2MDk2MjJlODI2
ZjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0V2ZW50U2VuZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcwotICog
Q29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRXZlbnRTZW5kZXJfaAotI2RlZmlu
ZSBFdmVudFNlbmRlcl9oCi0KLXR5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpTQ29udGV4dCog
SlNDb250ZXh0UmVmOwotdHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNWYWx1ZSogSlNPYmplY3RSZWY7
Ci0KLS8vIFRoZSBib29sZWFuIHBhcmFtZXRlciByZWZlcnMgdG8gd2hldGhlciB0aGlzIGlzIGJl
aW5nIGNhbGxlZCBmcm9tIGEgdG9wLWxldmVsIGZyYW1lLgotSlNPYmplY3RSZWYgbWFrZUV2ZW50
U2VuZGVyKEpTQ29udGV4dFJlZiwgYm9vbCk7Ci0KLSNlbmRpZiAvLyBFdmVudFNlbmRlcl9oCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZWVlMjZkMTQxM2RiMmNhOTNkZmU3MGNkNTllMTM1Mzk3YWE4MmEz
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVk
IFN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udE1hbmFnZW1l
bnQuaCIKLQotI2luY2x1ZGUgPEVjb3JlX0ZpbGUuaD4KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5j
bHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+Ci0KLXN0YXRpYyBDU3RyaW5nIGJ1aWxkUGF0aChjb25zdCBjaGFyKiBiYXNlLCBj
b25zdCBjaGFyKiBmaXJzdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXA7Ci0gICAgU3RyaW5nQnVp
bGRlciByZXN1bHQ7Ci0gICAgcmVzdWx0LmFwcGVuZChiYXNlKTsKLQotICAgIGlmIChjb25zdCBj
aGFyKiBjdXJyZW50ID0gZmlyc3QpIHsKLSAgICAgICAgdmFfc3RhcnQoYXAsIGZpcnN0KTsKLSAg
ICAgICAgZG8gewotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChjdXJyZW50KTsKLSAgICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSB2YV9h
cmcoYXAsIGNvbnN0IGNoYXIqKSkpOwotICAgICAgICB2YV9lbmQoYXApOwotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQudG9TdHJpbmcoKS51dGY4KCk7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8Q1N0
cmluZz4gZ2V0Q29yZUZvbnRGaWxlcygpCi17Ci0gICAgVmVjdG9yPENTdHJpbmc+IGZvbnRGaWxl
UGF0aHM7Ci0KLSAgICAvLyBBaGVtIGlzIHVzZWQgYnkgbWFueSBsYXlvdXQgdGVzdHMuCi0gICAg
Zm9udEZpbGVQYXRocy5hcHBlbmQoQ1N0cmluZyhGT05UU19DT05GX0RJUiAiL0FIRU1fX19fLlRU
RiIpKTsKLSAgICAvLyBBIGZvbnQgd2l0aCBubyB2YWxpZCBGb250Y29uZmlnIGVuY29kaW5nIHRv
IHRlc3QgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDUyCi0gICAg
Zm9udEZpbGVQYXRocy5hcHBlbmQoQ1N0cmluZyhGT05UU19DT05GX0RJUiAiL0ZvbnRXaXRoTm9W
YWxpZEVuY29kaW5nLmZvbiIpKTsKLQotICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDk7IGkrKykg
ewotICAgICAgICBjaGFyIGZvbnRQYXRoW0VJTkFfUEFUSF9NQVhdOwotICAgICAgICBzbnByaW50
Zihmb250UGF0aCwgRUlOQV9QQVRIX01BWCAtIDEsIEZPTlRTX0NPTkZfRElSICIvLi4vLi4vZm9u
dHMvV2ViS2l0V2VpZ2h0V2F0Y2hlciVpMDAudHRmIiwgaSk7Ci0gICAgICAgIGZvbnRGaWxlUGF0
aHMuYXBwZW5kKENTdHJpbmcoZm9udFBhdGgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZm9udEZp
bGVQYXRoczsKLX0KLQotc3RhdGljIHZvaWQgYWRkRm9udERpcmVjdG9yeShjb25zdCBDU3RyaW5n
JiBmb250RGlyZWN0b3J5LCBGY0NvbmZpZyogY29uZmlnKQotewotICAgIGNvbnN0IGNoYXIqIGZv
bnRQYXRoID0gZm9udERpcmVjdG9yeS5kYXRhKCk7Ci0gICAgaWYgKCFmb250UGF0aCB8fCAhRmND
b25maWdBcHBGb250QWRkRGlyKGNvbmZpZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4
Kj4oZm9udFBhdGgpKSkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWRkIGZv
bnQgZGlyZWN0b3J5ICVzIVxuIiwgZm9udFBhdGgpOwotfQotCi1zdGF0aWMgdm9pZCBhZGRGb250
RmlsZXMoY29uc3QgVmVjdG9yPENTdHJpbmc+JiBmb250RmlsZXMsIEZjQ29uZmlnKiBjb25maWcp
Ci17Ci0gICAgVmVjdG9yPENTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCwgZW5kID0gZm9udEZp
bGVzLmVuZCgpOwotICAgIGZvciAoaXQgPSBmb250RmlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZpbGVQYXRoID0gKCppdCkuZGF0YSgpOwotICAg
ICAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoY29uZmlnLCByZWludGVycHJldF9jYXN0
PGNvbnN0IEZjQ2hhcjgqPihmaWxlUGF0aCkpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVzIVxuIiwgZmlsZVBhdGgpOwotICAgIH0KLX0KLQot
c3RhdGljIENTdHJpbmcgZ2V0Q3VzdG9tQnVpbGREaXIoKQotewotICAgIGlmIChjb25zdCBjaGFy
KiB1c2VyQ2hvc2VuQnVpbGREaXIgPSBnZXRlbnYoIldFQktJVF9PVVRQVVRESVIiKSkgewotICAg
ICAgICBpZiAoZWNvcmVfZmlsZV9pc19kaXIodXNlckNob3NlbkJ1aWxkRGlyKSkKLSAgICAgICAg
ICAgIHJldHVybiB1c2VyQ2hvc2VuQnVpbGREaXI7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi
V0VCS0lUX09VVFBVVERJUiBzZXQgdG8gJyVzJywgYnV0IHBhdGggZG9lc24ndCBleGlzdC5cbiIs
IHVzZXJDaG9zZW5CdWlsZERpcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIENTdHJpbmcoKTsKLX0K
LQotc3RhdGljIENTdHJpbmcgZ2V0UGxhdGZvcm1Gb250c1BhdGgoKQotewotICAgIENTdHJpbmcg
Y3VzdG9tQnVpbGREaXIgPSBnZXRDdXN0b21CdWlsZERpcigpOwotICAgIGlmICghY3VzdG9tQnVp
bGREaXIuaXNOdWxsKCkpIHsKLSAgICAgICAgQ1N0cmluZyBmb250c1BhdGggPSBidWlsZFBhdGgo
Y3VzdG9tQnVpbGREaXIuZGF0YSgpLCAiRGVwZW5kZW5jaWVzIiwgIlJvb3QiLCAid2Via2l0Z3Rr
LXRlc3QtZm9udHMiLCAwKTsKLSAgICAgICAgaWYgKCFlY29yZV9maWxlX2V4aXN0cyhmb250c1Bh
dGguZGF0YSgpKSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0VCS0lUX09VVFBVVERJ
UiBzZXQgdG8gJyVzJywgYnV0IGNvdWxkIG5vdCBsb2NhbCB0ZXN0IGZvbnRzLlxuIiwgY3VzdG9t
QnVpbGREaXIuZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIGZvbnRzUGF0aDsKLSAgICB9Ci0KLSAg
ICBDU3RyaW5nIGZvbnRzUGF0aCA9IENTdHJpbmcoRE9XTkxPQURFRF9GT05UU19ESVIpOwotICAg
IGlmIChlY29yZV9maWxlX2V4aXN0cyhmb250c1BhdGguZGF0YSgpKSkKLSAgICAgICAgcmV0dXJu
IGZvbnRzUGF0aDsKLQotICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGxvY2F0ZSB0ZXN0
cyBmb250cywgdHJ5IHNldHRpbmcgV0VCS0lUX09VVFBVVERJUi5cbiIpOwotICAgIHJldHVybiBD
U3RyaW5nKCk7Ci19Ci0KLXZvaWQgYWRkRm9udHNUb0Vudmlyb25tZW50KCkKLXsKLSAgICBGY0lu
aXQoKTsKLQotICAgIC8vIExvYWQgb3VyIGNvbmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggc2V0cyB1
cCBwcm9wZXIgYWxpYXNlcyBmb3IgZmFtaWx5Ci0gICAgLy8gbmFtZXMgbGlrZSBzYW5zLCBzZXJp
ZiBhbmQgbW9ub3NwYWNlLgotICAgIEZjQ29uZmlnKiBjb25maWcgPSBGY0NvbmZpZ0NyZWF0ZSgp
OwotICAgIGNvbnN0IGNoYXIqIGZvbnRDb25maWdGaWxlbmFtZSA9IEZPTlRTX0NPTkZfRElSICIv
Zm9udHMuY29uZiI7Ci0gICAgaWYgKCFGY0NvbmZpZ1BhcnNlQW5kTG9hZChjb25maWcsIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRDb25maWdGaWxlbmFtZSksIHRydWUpKSB7
Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgbG9hZCBmb250IGNvbmZpZ3VyYXRp
b24gZmlsZSBmcm9tOiAlc1xuIiwgZm9udENvbmZpZ0ZpbGVuYW1lKTsKLSAgICAgICAgZXhpdCgx
KTsKLSAgICB9Ci0KLSAgICBhZGRGb250RmlsZXMoZ2V0Q29yZUZvbnRGaWxlcygpLCBjb25maWcp
OwotICAgIGFkZEZvbnREaXJlY3RvcnkoZ2V0UGxhdGZvcm1Gb250c1BhdGgoKSwgY29uZmlnKTsK
LQotICAgIGlmICghRmNDb25maWdTZXRDdXJyZW50KGNvbmZpZykpIHsKLSAgICAgICAgZnByaW50
ZihzdGRlcnIsICJDb3VsZCBub3Qgc2V0IHRoZSBjdXJyZW50IGZvbnQgY29uZmlndXJhdGlvbiFc
biIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0ZvbnRNYW5hZ2VtZW50LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvRm9udE1hbmFnZW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ5NzUx
M2FlZGMxMzk5ZjQ2ZmMwYjkxZGQ0ZjQyODU1N2Q3NDFhMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRm9udE1h
bmFnZW1lbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEZvbnRNYW5hZ2Vt
ZW50X2gKLSNkZWZpbmUgRm9udE1hbmFnZW1lbnRfaAotCi12b2lkIGFkZEZvbnRzVG9FbnZpcm9u
bWVudCgpOwotCi0jZW5kaWYgLy8gRm9udE1hbmFnZW1lbnRfaApkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL0dDQ29udHJvbGxlckVmbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvR0NDb250cm9sbGVyRWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZDQwNDc0NWUwMjA0YzhmZDRjYjQwMjUzNzlmODM0ZDMyN2Q1NDkyNi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9l
ZmwvR0NDb250cm9sbGVyRWZsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
R0NDb250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmwuaCIKLSNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgotCi12b2lkIEdDQ29udHJv
bGxlcjo6Y29sbGVjdCgpIGNvbnN0Ci17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpn
YXJiYWdlQ29sbGVjdG9yQ29sbGVjdCgpOwotfQotCi12b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVj
dE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVudGlsRG9uZSkgY29uc3QKLXsKLSAgICBEdW1w
UmVuZGVyVHJlZVN1cHBvcnRFZmw6OmdhcmJhZ2VDb2xsZWN0b3JDb2xsZWN0T25BbHRlcm5hdGVU
aHJlYWQod2FpdFVudGlsRG9uZSk7Ci19Ci0KLXNpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpTT2Jq
ZWN0Q291bnQoKSBjb25zdAotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OmphdmFTY3JpcHRPYmplY3RzQ291bnQoKTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9KU1N0cmluZ1V0aWxzLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9K
U1N0cmluZ1V0aWxzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTljYTU1NzM2
NGVkNmRlOGZjYTc0OTBkZDgzNTUyNDQxZGQ0OWNkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSlNTdHJpbmdV
dGlscy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIElUUyBDT05UUklCVVRP
UlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi0gKiBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBI
T0xERVJTIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTU3RyaW5nVXRpbHMuaCIKLQot
Ym9vbCBlcXVhbHMoSlNTdHJpbmdSZWYganNTdHJpbmcsIGNvbnN0IGNoYXIqIGNTdHJpbmcpCi17
Ci0gICAgcmV0dXJuIEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoanNTdHJpbmcsIGNTdHJp
bmcpOwotfQotCi1ib29sIGVxdWFscyhKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNTdHJpbmcs
IGNvbnN0IGNoYXIqIGNTdHJpbmcpCi17Ci0gICAgcmV0dXJuIGVxdWFscyhqc1N0cmluZy5nZXQo
KSwgY1N0cmluZyk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSlNT
dHJpbmdVdGlscy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0pTU3RyaW5nVXRpbHMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRkN2UwODEyN2I0ZWJlNDYyMTM4NWE0MzY1
MGJkZDM2YzFlOGYwNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvSlNTdHJpbmdVdGlscy5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04g
RW1iZWRkZWQgU3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBJVFMgQ09OVFJJQlVUT1JTCi0gKiBgYEFTIElTJycgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogSE9MREVSUyBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBKU1N0
cmluZ1V0aWxzX2gKLSNkZWZpbmUgSlNTdHJpbmdVdGlsc19oCi0KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1JldGFpblB0ci5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmLmg+Ci0KLWJvb2wgZXF1YWxzKEpTU3RyaW5nUmVmLCBjb25zdCBjaGFyKik7Ci1ib29sIGVx
dWFscyhKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4sIGNvbnN0IGNoYXIqKTsKLQotI2VuZGlmIC8v
IEpTU3RyaW5nVXRpbHNfaAotCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwv
UGl4ZWxEdW1wU3VwcG9ydEVmbC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvUGl4ZWxE
dW1wU3VwcG9ydEVmbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYmY3M2I5
YTc0MWMzYTI4NjdjZjAzN2Y0YzhkOWZkZGJkZmU2ODYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1BpeGVsRHVt
cFN1cHBvcnRFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBQ
cm9GVVNJT04gRW1iZWRkZWQgU3lzdGVtcwotICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcg
RWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlLmgi
Ci0jaW5jbHVkZSAiRHVtcFJlbmRlclRyZWVDaHJvbWUuaCIKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
Ci0jaW5jbHVkZSAiUGl4ZWxEdW1wU3VwcG9ydENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fp
cm8uaCIKLSNpbmNsdWRlICJSZWZQdHJFZmwuaCIKLSNpbmNsdWRlICJXZWJDb3JlU3VwcG9ydC9E
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuaCIKLSNpbmNsdWRlICJld2tfdmlldy5oIgotCi1QYXNz
UmVmUHRyPEJpdG1hcENvbnRleHQ+IGNyZWF0ZUJpdG1hcENvbnRleHRGcm9tV2ViVmlldyhib29s
LCBib29sLCBib29sLCBib29sIGRyYXdTZWxlY3Rpb25SZWN0KQotewotICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihl
dmFzX29iamVjdF9zbWFydF9kYXRhX2dldChicm93c2VyLT5tYWluVmlldygpKSk7Ci0gICAgRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2YXRlRGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1By
aXZhdGVfRGF0YSo+KHNtYXJ0RGF0YS0+X3ByaXYpOwotICAgIGNvbnN0IEV2YXNfT2JqZWN0KiBt
YWluRnJhbWUgPSBicm93c2VyLT5tYWluRnJhbWUoKTsKLQotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6Zm9yY2VQYWludChicm93c2VyLT5tYWluVmlldygpKTsKLQotICAgIGludCB4LCB5
LCB3aWR0aCwgaGVpZ2h0OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChicm93c2VyLT5t
YWluRnJhbWUoKSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwotICAgIGNvbnN0IEVpbmFfUmVj
dGFuZ2xlIHJlY3QgPSB7IHgsIHksIHdpZHRoLCBoZWlnaHQgfTsKLQotICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LncsIHJlY3QuaCkpOwotICAgIFJlZlB0cjxjYWly
b190PiBjb250ZXh0ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UuZ2V0KCkpKTsKLQot
ICAgIFJlZlB0cjxFdmFzX09iamVjdD4gc2NyZWVuc2hvdCA9IGV3a192aWV3X3NjcmVlbnNob3Rf
Y29udGVudHNfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCksICZyZWN0KTsKLSAgICBpZiAoIXNjcmVl
bnNob3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgdWludDhfdCogcGl4ZWxzID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHNjcmVlbnNob3QuZ2V0
KCksIGZhbHNlKSk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc291cmNlU3VyZmFjZSA9
IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHBpeGVscywgQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgcmVjdC53LCByZWN0LmgsIHJlY3QudyAqIDQpKTsKLSAgICBjYWly
b19zZXRfc291cmNlX3N1cmZhY2UoY29udGV4dC5nZXQoKSwgc291cmNlU3VyZmFjZS5nZXQoKSwg
MCwgMCk7Ci0KLSAgICBpZiAoRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjppc1RyYWNraW5nUmVw
YWludHMobWFpbkZyYW1lKSkgewotICAgICAgICBjYWlyb19wdXNoX2dyb3VwKGNvbnRleHQuZ2V0
KCkpOwotCi0gICAgICAgIC8vIFBhaW50IHRoZSBncmF5IG1hc2sgb3ZlciB0aGUgb3JpZ2luYWwg
aW1hZ2UuCi0gICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LmdldCgpLCAwLCAw
LCAwLCAwLjY2KTsKLSAgICAgICAgY2Fpcm9fcGFpbnQoY29udGV4dC5nZXQoKSk7Ci0KLSAgICAg
ICAgLy8gUGFpbnQgdHJhbnNwYXJlbnQgcmVjdGFuZ2xlcyBvdmVyIHRoZSBtYXNrIHRvIHNob3cg
dGhlIHJlcGFpbnRlZCByZWdpb25zLgotICAgICAgICBjYWlyb19zZXRfc291cmNlX3JnYmEoY29u
dGV4dC5nZXQoKSwgMCwgMCwgMCwgMCk7Ci0gICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250
ZXh0LmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotCi0gICAgICAgIEVpbmFfTGlzdCog
cmVwYWludFJlY3RzID0gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjp0cmFja2VkUmVwYWludFJl
Y3RzKG1haW5GcmFtZSk7Ci0gICAgICAgIHZvaWQqIGl0ZXIgPSAwOwotICAgICAgICBFSU5BX0xJ
U1RfRlJFRShyZXBhaW50UmVjdHMsIGl0ZXIpIHsKLSAgICAgICAgICAgIEVpbmFfUmVjdGFuZ2xl
KiByZWN0ID0gc3RhdGljX2Nhc3Q8RWluYV9SZWN0YW5nbGUqPihpdGVyKTsKLQotICAgICAgICAg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNvbnRleHQuZ2V0KCksIHJlY3QtPngsIHJlY3QtPnksIHJlY3Qt
PncsIHJlY3QtPmgpOwotICAgICAgICAgICAgY2Fpcm9fZmlsbChjb250ZXh0LmdldCgpKTsKLQot
ICAgICAgICAgICAgZWluYV9yZWN0YW5nbGVfZnJlZShyZWN0KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UoY29udGV4dC5nZXQoKSk7Ci0gICAgICAgIGNh
aXJvX3BhaW50KGNvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGlmIChkcmF3U2VsZWN0aW9u
UmVjdCkgewotICAgICAgICBjb25zdCBXZWJDb3JlOjpJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNlbGVjdGlvblJlY3RhbmdsZShtYWluRnJhbWUpOwot
Ci0gICAgICAgIGlmICghc2VsZWN0aW9uUmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGNh
aXJvX3NldF9saW5lX3dpZHRoKGNvbnRleHQuZ2V0KCksIDEuMCk7Ci0gICAgICAgICAgICBjYWly
b19yZWN0YW5nbGUoY29udGV4dC5nZXQoKSwgc2VsZWN0aW9uUmVjdC54KCksIHNlbGVjdGlvblJl
Y3QueSgpLCBzZWxlY3Rpb25SZWN0LndpZHRoKCksIHNlbGVjdGlvblJlY3QuaGVpZ2h0KCkpOwot
ICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2JhKGNvbnRleHQuZ2V0KCksIDEuMCwgMC4w
LCAwLjAsIDEuMCk7Ci0gICAgICAgICAgICBjYWlyb19zdHJva2UoY29udGV4dC5nZXQoKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gQml0bWFwQ29udGV4dDo6Y3JlYXRlQnlBZG9w
dGluZ0JpdG1hcEFuZENvbnRleHQoMCwgY29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpKTsKLX0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXN0UnVubmVyRWZsLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXN0UnVubmVyRWZsLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWZmN2JmZDE0MTUxZDg4ODFhMThhNjJmNjllMDRlNmY5NzBkMzdj
MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
MzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgPGVy
aWNAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256byA8am1hbG9uem9AZ21haWwuY29tPgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTEgQ29sbGFib3JhIEx0ZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEx
IFByb0ZVU0lPTiBFbWJlZGRlZCBTeXN0ZW1zCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3Vu
ZyBFbGVjdHJvbmljcwotICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgotCi0jaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWUuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNocm9tZS5oIgotI2luY2x1ZGUgIkpTU3Ry
aW5nVXRpbHMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIldlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgotI2luY2x1ZGUgIldvcmtRdWV1
ZS5oIgotI2luY2x1ZGUgIldvcmtRdWV1ZUl0ZW0uaCIKLSNpbmNsdWRlICJld2tfcHJpdmF0ZS5o
IgotI2luY2x1ZGUgPEVXZWJLaXQuaD4KLSNpbmNsdWRlIDxFY29yZV9GaWxlLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU1N0cmluZ1JlZi5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8VVJMLmg+Ci0jaW5jbHVkZSA8ZWRpdGluZy9GaW5kT3B0aW9ucy5oPgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLS8v
IFNhbWUgYXMgTWFjIGNhY2hlIG1vZGVsIGVudW0gaW4gU291cmNlL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlcy5oLgotZW51bSB7Ci0gICAgV2ViQ2FjaGVNb2RlbERvY3VtZW50Vmll
d2VyID0gMCwKLSAgICBXZWJDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyID0gMSwKLSAgICBXZWJD
YWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXIgPSAyCi19OwotCi1UZXN0UnVubmVyOjp+VGVzdFJ1
bm5lcigpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6YWRkRGlzYWxsb3dlZFVSTChKU1N0cmlu
Z1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmNs
ZWFyQmFja0ZvcndhcmRMaXN0KCkKLXsKLSAgICBFd2tfSGlzdG9yeSogaGlzdG9yeSA9IGV3a192
aWV3X2hpc3RvcnlfZ2V0KGJyb3dzZXItPm1haW5WaWV3KCkpOwotICAgIGlmICghaGlzdG9yeSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IGV3a19oaXN0
b3J5X2hpc3RvcnlfaXRlbV9jdXJyZW50X2dldChoaXN0b3J5KTsKLSAgICBld2tfaGlzdG9yeV9j
bGVhcihoaXN0b3J5KTsKLSAgICBld2tfaGlzdG9yeV9oaXN0b3J5X2l0ZW1fYWRkKGhpc3Rvcnks
IGl0ZW0pOwotICAgIGV3a19oaXN0b3J5X2hpc3RvcnlfaXRlbV9zZXQoaGlzdG9yeSwgaXRlbSk7
Ci0gICAgZXdrX2hpc3RvcnlfaXRlbV9mcmVlKGl0ZW0pOwotfQotCi1KU1N0cmluZ1JlZiBUZXN0
UnVubmVyOjpjb3B5RGVjb2RlZEhvc3ROYW1lKEpTU3RyaW5nUmVmKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUpTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OmNv
cHlFbmNvZGVkSG9zdE5hbWUoSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdMb2Fk
UmVxdWVzdHMoKQotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgZm9yIHRlc3RpbmcgZml4IGZv
ciA2NzI3NDk1Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpk
aXNwbGF5KCkKLXsKLSAgICBkaXNwbGF5V2ViVmlldygpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6
OmtlZXBXZWJIaXN0b3J5KCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldFNo
b3VsZFRyYWNrVmlzaXRlZExpbmtzKHRydWUpOwotfQotCi1zaXplX3QgVGVzdFJ1bm5lcjo6d2Vi
SGlzdG9yeUl0ZW1Db3VudCgpCi17Ci0gICAgY29uc3QgRXdrX0hpc3RvcnkqIGhpc3RvcnkgPSBl
d2tfdmlld19oaXN0b3J5X2dldChicm93c2VyLT5tYWluVmlldygpKTsKLSAgICBpZiAoIWhpc3Rv
cnkpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHJldHVybiBld2tfaGlzdG9yeV9iYWNrX2xp
c3RfbGVuZ3RoKGhpc3RvcnkpICsgZXdrX2hpc3RvcnlfZm9yd2FyZF9saXN0X2xlbmd0aChoaXN0
b3J5KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKLXsKLSAgICBpZiAobV93
YWl0VG9EdW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNv
dW50KCkpCi0gICAgICAgIGR1bXAoKTsKLSAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKLSAgICB3
YWl0Rm9yUG9saWN5ID0gZmFsc2U7Ci19Ci0KLUpTU3RyaW5nUmVmIFRlc3RSdW5uZXI6OnBhdGhU
b0xvY2FsUmVzb3VyY2UoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHVybCkKLXsK
LSAgICBTdHJpbmcgcmVxdWVzdGVkVXJsKHVybC0+Y2hhcmFjdGVycygpLCB1cmwtPmxlbmd0aCgp
KTsKLSAgICBTdHJpbmcgcmVzb3VyY2VSb290OwotICAgIFN0cmluZyByZXF1ZXN0ZWRSb290Owot
Ci0gICAgaWYgKHJlcXVlc3RlZFVybC5maW5kKCJMYXlvdXRUZXN0cyIpICE9IG5vdEZvdW5kKSB7
Ci0gICAgICAgIC8vIElmIHRoZSBVUkwgY29udGFpbnMgTGF5b3V0VGVzdHMgd2UgbmVlZCB0byBy
ZW1hcCB0aGF0IHRvCi0gICAgICAgIC8vIExPQ0FMX1JFU09VUkNFX1JPT1Qgd2hpY2ggaXMgdGhl
IHBhdGggb2YgdGhlIExheW91dFRlc3RzIGRpcmVjdG9yeQotICAgICAgICAvLyB3aXRoaW4gdGhl
IFdlYktpdCBzb3VyY2UgdHJlZS4KLSAgICAgICAgcmVxdWVzdGVkUm9vdCA9ICIvdG1wL0xheW91
dFRlc3RzIjsKLSAgICAgICAgcmVzb3VyY2VSb290ID0gZ2V0ZW52KCJMT0NBTF9SRVNPVVJDRV9S
T09UIik7Ci0gICAgfSBlbHNlIGlmIChyZXF1ZXN0ZWRVcmwuZmluZCgidG1wIikgIT0gbm90Rm91
bmQpIHsKLSAgICAgICAgLy8gSWYgdGhlIFVSTCBpcyBhIGNoaWxkIG9mIC90bXAgd2UgbmVlZCB0
byBjb252ZXJ0IGl0IHRvIGJlIGEgY2hpbGQKLSAgICAgICAgLy8gRFVNUFJFTkRFUlRSRUVfVEVN
UCByZXBsYWNlIHRtcCB3aXRoIERVTVBSRU5ERVJUUkVFX1RFTVAKLSAgICAgICAgcmVxdWVzdGVk
Um9vdCA9ICIvdG1wIjsKLSAgICAgICAgcmVzb3VyY2VSb290ID0gZ2V0ZW52KCJEVU1QUkVOREVS
VFJFRV9URU1QIik7Ci0gICAgfQotCi0gICAgc2l6ZV90IGluZGV4T2ZSb290U3RhcnQgPSByZXF1
ZXN0ZWRVcmwucmV2ZXJzZUZpbmQocmVxdWVzdGVkUm9vdCk7Ci0gICAgc2l6ZV90IGluZGV4T2ZT
ZXBhcmF0b3JBZnRlclJvb3QgPSBpbmRleE9mUm9vdFN0YXJ0ICsgcmVxdWVzdGVkUm9vdC5sZW5n
dGgoKTsKLSAgICBTdHJpbmcgZnVsbFBhdGhUb1VybCA9ICJmaWxlOi8vIiArIHJlc291cmNlUm9v
dCArIHJlcXVlc3RlZFVybC5zdWJzdHJpbmcoaW5kZXhPZlNlcGFyYXRvckFmdGVyUm9vdCk7Ci0K
LSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZnVsbFBhdGhUb1VybC51
dGY4KCkuZGF0YSgpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdS
ZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCi17Ci0gICAgV2ViQ29yZTo6VVJMIGJhc2VVUkwo
V2ViQ29yZTo6VVJMKCksIFN0cmluZzo6ZnJvbVVURjgoZXdrX2ZyYW1lX3VyaV9nZXQoYnJvd3Nl
ci0+bWFpbkZyYW1lKCkpKSk7Ci0gICAgV2ViQ29yZTo6VVJMIGFic29sdXRlVVJMKGJhc2VVUkws
IHVybC0+c3RyaW5nKCkpOwotCi0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzQWJzb2x1
dGVVUkwoCi0gICAgICAgIEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhhYnNv
bHV0ZVVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7Ci0KLSAgICBXb3JrUXVldWU6OnNoYXJl
ZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oanNBYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBhY2NlcHRzRWRpdGlu
ZykKLXsKLSAgICBld2tfdmlld19lZGl0YWJsZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgYWNj
ZXB0c0VkaXRpbmcpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tp
ZXMoYm9vbCBhbHdheXNBY2NlcHRDb29raWVzKQotewotICAgIGV3a19jb29raWVzX3BvbGljeV9z
ZXQoYWx3YXlzQWNjZXB0Q29va2llcyA/IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVMgOiBF
V0tfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVIpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldEN1
c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQotewotICAg
IHBvbGljeURlbGVnYXRlRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgcG9saWN5RGVsZWdhdGVQZXJt
aXNzaXZlID0gcGVybWlzc2l2ZTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9yUG9saWN5
RGVsZWdhdGUoKQotewotICAgIHNldEN1c3RvbVBvbGljeURlbGVnYXRlKHRydWUsIGZhbHNlKTsK
LSAgICB3YWl0Rm9yUG9saWN5ID0gdHJ1ZTsKLSAgICBzZXRXYWl0VG9EdW1wKHRydWUpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OnNldFNjcm9sbGJhclBvbGljeShKU1N0cmluZ1JlZiwgSlNTdHJp
bmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjph
ZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpT
U3RyaW5nUmVmIHByb3RvY29sLCBKU1N0cmluZ1JlZiBob3N0LCBib29sIGluY2x1ZGVTdWJkb21h
aW5zKQotewotICAgIFdlYkNvcmU6OlVSTCBrdXJsOwotICAgIGt1cmwuc2V0UHJvdG9jb2woU3Ry
aW5nKHByb3RvY29sLT5jaGFyYWN0ZXJzKCksIHByb3RvY29sLT5sZW5ndGgoKSkpOwotICAgIGt1
cmwuc2V0SG9zdChTdHJpbmcoaG9zdC0+Y2hhcmFjdGVycygpLCBob3N0LT5sZW5ndGgoKSkpOwot
Ci0gICAgZXdrX3NlY3VyaXR5X3BvbGljeV93aGl0ZWxpc3Rfb3JpZ2luX2FkZChzb3VyY2VPcmln
aW4tPnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGt1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
aW5jbHVkZVN1YmRvbWFpbnMpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFj
Y2Vzc1doaXRlbGlzdEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYg
cHJvdG9jb2wsIEpTU3RyaW5nUmVmIGhvc3QsIGJvb2wgaW5jbHVkZVN1YmRvbWFpbnMpCi17Ci0g
ICAgV2ViQ29yZTo6VVJMIGt1cmw7Ci0gICAga3VybC5zZXRQcm90b2NvbChTdHJpbmcocHJvdG9j
b2wtPmNoYXJhY3RlcnMoKSwgcHJvdG9jb2wtPmxlbmd0aCgpKSk7Ci0gICAga3VybC5zZXRIb3N0
KFN0cmluZyhob3N0LT5jaGFyYWN0ZXJzKCksIGhvc3QtPmxlbmd0aCgpKSk7Ci0KLSAgICBld2tf
c2VjdXJpdHlfcG9saWN5X3doaXRlbGlzdF9vcmlnaW5fZGVsKHNvdXJjZU9yaWdpbi0+c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwga3VybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpbmNsdWRlU3Vi
ZG9tYWlucyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3Bv
bmRlcihib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGJvb2wpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VEYXNoYm9hcmRDb21wYXRpYmls
aXR5TW9kZShib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyBDU3Ry
aW5nIGdVc2VyU3R5bGVTaGVldDsKLXN0YXRpYyBib29sIGdVc2VyU3R5bGVTaGVldEVuYWJsZWQg
PSB0cnVlOwotCi12b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5hYmxlZChib29s
IGZsYWcpCi17Ci0gICAgZ1VzZXJTdHlsZVNoZWV0RW5hYmxlZCA9IGZsYWc7Ci0gICAgZXdrX3Zp
ZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcg
PyBnVXNlclN0eWxlU2hlZXQuZGF0YSgpIDogMCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBwYXRoKQotewotICAgIGdVc2VyU3R5
bGVTaGVldCA9IHBhdGgtPnN0cmluZygpLnV0ZjgoKTsKLQotICAgIGlmIChnVXNlclN0eWxlU2hl
ZXRFbmFibGVkKQotICAgICAgICBzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQodHJ1ZSk7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U1ZhbHVlUmVmIG5vZGVPYmplY3QsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6c2V0VmFsdWVGb3JVc2VyKGNvbnRleHQsIG5vZGVPYmplY3QsIHZh
bHVlLT5zdHJpbmcoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0Vmlld01vZGVNZWRpYUZl
YXR1cmUoSlNTdHJpbmdSZWYgbW9kZSkKLXsKLSNpZiBFTkFCTEUoVklFV19NT0RFX0NTU19NRURJ
QSkKLSAgICBFdmFzX09iamVjdCogdmlldyA9IGJyb3dzZXItPm1haW5WaWV3KCk7Ci0gICAgaWYg
KCF2aWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZXF1YWxzKG1vZGUsICJ3aW5kb3dl
ZCIpKQotICAgICAgICBld2tfdmlld19tb2RlX3NldCh2aWV3LCBFV0tfVklFV19NT0RFX1dJTkRP
V0VEKTsKLSAgICBlbHNlIGlmIChlcXVhbHMobW9kZSwgImZsb2F0aW5nIikpCi0gICAgICAgIGV3
a192aWV3X21vZGVfc2V0KHZpZXcsIEVXS19WSUVXX01PREVfRkxPQVRJTkcpOwotICAgIGVsc2Ug
aWYgKGVxdWFscyhtb2RlLCAiZnVsbHNjcmVlbiIpKQotICAgICAgICBld2tfdmlld19tb2RlX3Nl
dCh2aWV3LCBFV0tfVklFV19NT0RFX0ZVTExTQ1JFRU4pOwotICAgIGVsc2UgaWYgKGVxdWFscyht
b2RlLCAibWF4aW1pemVkIikpCi0gICAgICAgIGV3a192aWV3X21vZGVfc2V0KHZpZXcsIEVXS19W
SUVXX01PREVfTUFYSU1JWkVEKTsKLSAgICBlbHNlIGlmIChlcXVhbHMobW9kZSwgIm1pbmltaXpl
ZCIpKQotICAgICAgICBld2tfdmlld19tb2RlX3NldCh2aWV3LCBFV0tfVklFV19NT0RFX01JTklN
SVpFRCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShtb2RlKTsKLSNlbmRpZgotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCB3YWl0VG9EdW1wV2F0Y2hkb2dGaXJlZCh2b2lkKikK
LXsKLSAgICB3YWl0VG9EdW1wV2F0Y2hkb2cgPSAwOwotICAgIGdUZXN0UnVubmVyLT53YWl0VG9E
dW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7Ci0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0NBTkNF
TDsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRXYWl0VG9EdW1wKGJvb2wgd2FpdFVudGlsRG9u
ZSkKLXsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIHRpbWVvdXRTZWNvbmRzID0gMzA7Ci0KLSAg
ICBtX3dhaXRUb0R1bXAgPSB3YWl0VW50aWxEb25lOwotICAgIGlmIChtX3dhaXRUb0R1bXAgJiYg
c2hvdWxkU2V0V2FpdFRvRHVtcFdhdGNoZG9nKCkpCi0gICAgICAgIHdhaXRUb0R1bXBXYXRjaGRv
ZyA9IGVjb3JlX3RpbWVyX2FkZCh0aW1lb3V0U2Vjb25kcywgd2FpdFRvRHVtcFdhdGNoZG9nRmly
ZWQsIDApOwotfQotCi1pbnQgVGVzdFJ1bm5lcjo6d2luZG93Q291bnQoKQotewotICAgIHJldHVy
biBicm93c2VyLT5leHRyYVZpZXdzKCkuc2l6ZSgpICsgMTsgLy8gKyAxIGZvciB0aGUgbWFpbiB2
aWV3LgotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9v
bCBmbGFnKQotewotICAgIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93c2luZ19zZXQoYnJv
d3Nlci0+bWFpblZpZXcoKSwgZmxhZyk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0SmF2YVNj
cmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpCi17Ci0gICAgZXdrX3ZpZXdfc2V0dGlu
Z19zY3JpcHRzX2Nhbl9hY2Nlc3NfY2xpcGJvYXJkX3NldChicm93c2VyLT5tYWluVmlldygpLCBm
bGFnKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGZs
YWcpCi17Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfeHNzX2F1ZGl0b3Jfc2V0KGJyb3dz
ZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldFNwYXRpYWxO
YXZpZ2F0aW9uRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19zcGF0
aWFsX25hdmlnYXRpb25fc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotCi12b2lk
IFRlc3RSdW5uZXI6OnNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZmxh
ZykKLXsKLSAgICBld2tfdmlld19zZXR0aW5nX2FsbG93X3VuaXZlcnNhbF9hY2Nlc3NfZnJvbV9m
aWxlX3VybHNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotIAotdm9pZCBUZXN0
UnVubmVyOjpzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBmbGFnKQotewotICAg
IGV3a192aWV3X3NldHRpbmdfYWxsb3dfZmlsZV9hY2Nlc3NfZnJvbV9maWxlX3VybHNfc2V0KGJy
b3dzZXItPm1haW5WaWV3KCksIGZsYWcpOwotfQotIAotdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVT
dXBwb3J0RWZsOjpzZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChicm93c2VyLT5tYWluVmll
dygpLCBmbGFnKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b24oYm9vbCwgZG91YmxlLCBib29sLCBkb3VibGUsIGJvb2wsIGRvdWJsZSkKLXsKLSAgICAvLyBG
SVhNRTogSW1wbGVtZW50IGZvciBEZXZpY2VPcmllbnRhdGlvbiBsYXlvdXQgdGVzdHMuCi0gICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDMzNS4KLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFj
Y3VyYWN5LCBib29sIGNhblByb3ZpZGVBbHRpdHVkZSwgZG91YmxlIGFsdGl0dWRlLCBib29sIGNh
blByb3ZpZGVBbHRpdHVkZUFjY3VyYWN5LCBkb3VibGUgYWx0aXR1ZGVBY2N1cmFjeSwgYm9vbCBj
YW5Qcm92aWRlSGVhZGluZywgZG91YmxlIGhlYWRpbmcsIGJvb2wgY2FuUHJvdmlkZVNwZWVkLCBk
b3VibGUgc3BlZWQpCi17Ci0gICAgRXZhc19PYmplY3QqIHZpZXcgPSBicm93c2VyLT5tYWluVmll
dygpOwotICAgIGlmIChicm93c2VyLT5leHRyYVZpZXdzKCkuc2l6ZSgpID4gMCkKLSAgICAgICAg
dmlldyA9IGJyb3dzZXItPmV4dHJhVmlld3MoKS5sYXN0KCk7Ci0KLSAgICBEdW1wUmVuZGVyVHJl
ZVN1cHBvcnRFZmw6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKHZpZXcsIGxhdGl0dWRlLCBs
b25naXR1ZGUsIGFjY3VyYWN5LCBjYW5Qcm92aWRlQWx0aXR1ZGUsIGFsdGl0dWRlLCBjYW5Qcm92
aWRlQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgY2FuUHJvdmlkZUhlYWRpbmcs
IGhlYWRpbmcsIGNhblByb3ZpZGVTcGVlZCwgc3BlZWQpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6
OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBt
ZXNzYWdlKQotewotICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gYnJvd3Nlci0+bWFpblZpZXcoKTsK
LSAgICBpZiAoYnJvd3Nlci0+ZXh0cmFWaWV3cygpLnNpemUoKSA+IDApCi0gICAgICAgIHZpZXcg
PSBicm93c2VyLT5leHRyYVZpZXdzKCkubGFzdCgpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBw
b3J0RWZsOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3Iodmlldywg
bWVzc2FnZS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGJvb2wgYWxsb3cpCi17Ci0gICAgc2V0R2VvbG9jYXRp
b25QZXJtaXNzaW9uQ29tbW9uKGFsbG93KTsKLSAgICBFdmFzX09iamVjdCogdmlldyA9IGJyb3dz
ZXItPm1haW5WaWV3KCk7Ci0gICAgaWYgKGJyb3dzZXItPmV4dHJhVmlld3MoKS5zaXplKCkgPiAw
KQotICAgICAgICB2aWV3ID0gYnJvd3Nlci0+ZXh0cmFWaWV3cygpLmxhc3QoKTsKLQotICAgIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2V0TW9ja0dlb2xvY2F0aW9uUGVybWlzc2lvbih2aWV3
LCBhbGxvdyk7Ci19Ci0KLWludCBUZXN0UnVubmVyOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0cygpCi17Ci0gICAgRXZhc19PYmplY3QqIHZpZXcgPSBicm93c2Vy
LT5tYWluVmlldygpOwotICAgIGlmIChicm93c2VyLT5leHRyYVZpZXdzKCkuc2l6ZSgpID4gMCkK
LSAgICAgICAgdmlldyA9IGJyb3dzZXItPmV4dHJhVmlld3MoKS5sYXN0KCk7Ci0KLSAgICByZXR1
cm4gRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpudW1iZXJPZlBlbmRpbmdHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0cyh2aWV3KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphZGRNb2NrU3Bl
ZWNoSW5wdXRSZXN1bHQoSlNTdHJpbmdSZWYsIGRvdWJsZSwgSlNTdHJpbmdSZWYpCi17Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4KLSAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja1NwZWVjaElu
cHV0RHVtcFJlY3QoYm9vbCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGZvciBzcGVlY2gg
aW5wdXQgbGF5b3V0IHRlc3RzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyOjpzdGFydFNwZWVjaElucHV0KEpTQ29udGV4dFJlZiBpbnB1dEVsZW1lbnQpCi17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBmb3Igc3BlZWNoIGlucHV0IGxheW91dCB0ZXN0cy4K
LSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1
LgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0SWNvbkRh
dGFiYXNlRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgZXdrX3NldHRpbmdzX2ljb25fZGF0
YWJhc2VfcGF0aF9zZXQoMCk7Ci0KLSAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFN0cmluZyBkYXRhYmFzZVBhdGg7Ci0gICAgY29uc3QgY2hhciogdGVtcERpciA9IGdl
dGVudigiVE1QRElSIik7Ci0KLSAgICBpZiAodGVtcERpcikKLSAgICAgICAgZGF0YWJhc2VQYXRo
ID0gU3RyaW5nOjpmcm9tVVRGOCh0ZW1wRGlyKTsKLSAgICBlbHNlIGlmICh0ZW1wRGlyID0gZ2V0
ZW52KCJURU1QIikpCi0gICAgICAgIGRhdGFiYXNlUGF0aCA9IFN0cmluZzo6ZnJvbVVURjgodGVt
cERpcik7Ci0gICAgZWxzZQotICAgICAgICBkYXRhYmFzZVBhdGggPSBTdHJpbmc6OmZyb21VVEY4
KCIvdG1wIik7Ci0KLSAgICBkYXRhYmFzZVBhdGguYXBwZW5kKCIvRHVtcFJlbmRlclRyZWUvSWNv
bkRhdGFiYXNlIik7Ci0KLSAgICBpZiAoZWNvcmVfZmlsZV9ta3BhdGgoZGF0YWJhc2VQYXRoLnV0
ZjgoKS5kYXRhKCkpKQotICAgICAgICBld2tfc2V0dGluZ3NfaWNvbl9kYXRhYmFzZV9wYXRoX3Nl
dChkYXRhYmFzZVBhdGgudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0
UG9wdXBCbG9ja2luZ0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGV3a192aWV3X3NldHRpbmdf
c2NyaXB0c19jYW5fb3Blbl93aW5kb3dzX3NldChicm93c2VyLT5tYWluVmlldygpLCAhZmxhZyk7
Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQoYm9vbCBmbGFnKQotewot
ICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KGJyb3dzZXItPm1haW5WaWV3
KCksIGZsYWcpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVm
IG5hbWUsIEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVm
bDo6ZXhlY3V0ZUNvcmVDb21tYW5kQnlOYW1lKGJyb3dzZXItPm1haW5WaWV3KCksIG5hbWUtPnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIHZhbHVlLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLX0K
LQotYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0
cmluZ1JlZiB0YXJnZXQsIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSkKLXsKLSAgICBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwotICAgIEpTVmFsdWVSZWYgbGVuZ3RoVmFsdWUg
PSBKU09iamVjdEdldFByb3BlcnR5KGNvbnRleHQsIG9wdGlvbnNBcnJheSwgbGVuZ3RoUHJvcGVy
dHlOYW1lLmdldCgpLCAwKTsKLSAgICBpZiAoIUpTVmFsdWVJc051bWJlcihjb250ZXh0LCBsZW5n
dGhWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkNvcmU6OkZpbmRPcHRp
b25zIG9wdGlvbnMgPSAwOwotCi0gICAgY29uc3Qgc2l6ZV90IGxlbmd0aCA9IHN0YXRpY19jYXN0
PHNpemVfdD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGxlbmd0aFZhbHVlLCAwKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlUmVm
IHZhbHVlID0gSlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgoY29udGV4dCwgb3B0aW9uc0FycmF5
LCBpLCAwKTsKLSAgICAgICAgaWYgKCFKU1ZhbHVlSXNTdHJpbmcoY29udGV4dCwgdmFsdWUpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IG9wdGlvbk5hbWUoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgdmFsdWUsIDAp
KTsKLQotICAgICAgICBpZiAoZXF1YWxzKG9wdGlvbk5hbWUsICJDYXNlSW5zZW5zaXRpdmUiKSkK
LSAgICAgICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6Q2FzZUluc2Vuc2l0aXZlOwotICAgICAg
ICBlbHNlIGlmIChlcXVhbHMob3B0aW9uTmFtZSwgIkF0V29yZFN0YXJ0cyIpKQotICAgICAgICAg
ICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpBdFdvcmRTdGFydHM7Ci0gICAgICAgIGVsc2UgaWYgKGVx
dWFscyhvcHRpb25OYW1lLCAiVHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQiKSkKLSAgICAg
ICAgICAgIG9wdGlvbnMgfD0gV2ViQ29yZTo6VHJlYXRNZWRpYWxDYXBpdGFsQXNXb3JkU3RhcnQ7
Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1lLCAiQmFja3dhcmRzIikpCi0gICAg
ICAgICAgICBvcHRpb25zIHw9IFdlYkNvcmU6OkJhY2t3YXJkczsKLSAgICAgICAgZWxzZSBpZiAo
ZXF1YWxzKG9wdGlvbk5hbWUsICJXcmFwQXJvdW5kIikpCi0gICAgICAgICAgICBvcHRpb25zIHw9
IFdlYkNvcmU6OldyYXBBcm91bmQ7Ci0gICAgICAgIGVsc2UgaWYgKGVxdWFscyhvcHRpb25OYW1l
LCAiU3RhcnRJblNlbGVjdGlvbiIpKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBXZWJDb3JlOjpT
dGFydEluU2VsZWN0aW9uOwotICAgIH0KLQotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmw6OmZpbmRTdHJpbmcoYnJvd3Nlci0+bWFpblZpZXcoKSwgdGFyZ2V0LT5zdHJpbmcoKSwg
b3B0aW9ucyk7Ci19Ci0KLWJvb2wgVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmlu
Z1JlZiBuYW1lKQotewotICAgIHJldHVybiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmlzQ29t
bWFuZEVuYWJsZWQoYnJvd3Nlci0+bWFpblZpZXcoKSwgbmFtZS0+c3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQgY2FjaGVNb2Rl
bCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgY2FjaGVUb3RhbENhcGFjaXR5OwotICAgIHVuc2lnbmVk
IGludCBjYWNoZU1pbkRlYWRDYXBhY2l0eTsKLSAgICB1bnNpZ25lZCBpbnQgY2FjaGVNYXhEZWFk
Q2FwYWNpdHk7Ci0gICAgZG91YmxlIGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWw7Ci0g
ICAgdW5zaWduZWQgaW50IHBhZ2VDYWNoZUNhcGFjaXR5OwotCi0gICAgLy8gVGhlc2UgY29uc3Rh
bnRzIGFyZSBkZXJpdmVkIGZyb20gdGhlIE1hYyBjYWNoZSBtb2RlbCBlbnVtIGluIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMuaC4KLSAgICBzd2l0Y2ggKGNhY2hlTW9k
ZWwpIHsKLSAgICBjYXNlIFdlYkNhY2hlTW9kZWxEb2N1bWVudFZpZXdlcjoKLSAgICAgICAgcGFn
ZUNhY2hlQ2FwYWNpdHkgPSAwOwotICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHkgPSAwOwotICAg
ICAgICBjYWNoZU1pbkRlYWRDYXBhY2l0eSA9IDA7Ci0gICAgICAgIGNhY2hlTWF4RGVhZENhcGFj
aXR5ID0gMDsKLSAgICAgICAgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCA9IDA7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViQ2FjaGVNb2RlbERvY3VtZW50QnJvd3NlcjoKLSAg
ICAgICAgcGFnZUNhY2hlQ2FwYWNpdHkgPSAyOwotICAgICAgICBjYWNoZVRvdGFsQ2FwYWNpdHkg
PSAxNiAqIDEwMjQgKiAxMDI0OwotICAgICAgICBjYWNoZU1pbkRlYWRDYXBhY2l0eSA9IGNhY2hl
VG90YWxDYXBhY2l0eSAvIDg7Ci0gICAgICAgIGNhY2hlTWF4RGVhZENhcGFjaXR5ID0gY2FjaGVU
b3RhbENhcGFjaXR5IC8gNDsKLSAgICAgICAgZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZh
bCA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgV2ViQ2FjaGVNb2RlbFByaW1hcnlXZWJC
cm93c2VyOgotICAgICAgICBwYWdlQ2FjaGVDYXBhY2l0eSA9IDM7Ci0gICAgICAgIGNhY2hlVG90
YWxDYXBhY2l0eSA9IDMyICogMTAyNCAqIDEwMjQ7Ci0gICAgICAgIGNhY2hlTWluRGVhZENhcGFj
aXR5ID0gY2FjaGVUb3RhbENhcGFjaXR5IC8gNDsKLSAgICAgICAgY2FjaGVNYXhEZWFkQ2FwYWNp
dHkgPSBjYWNoZVRvdGFsQ2FwYWNpdHkgLyAyOwotICAgICAgICBkZWFkRGVjb2RlZERhdGFEZWxl
dGlvbkludGVydmFsID0gNjA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IGZwcmludGYoc3RkZXJyLCAidHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHZhbHVlICVkIGZvciB0
aGUgQ2FjaGUgbW9kZWwuIiwgY2FjaGVNb2RlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBld2tfc2V0dGluZ3Nfb2JqZWN0X2NhY2hlX2NhcGFjaXR5X3NldChjYWNoZU1pbkRlYWRD
YXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7Ci0gICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVy
dmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIGV3a19zZXR0aW5nc19w
YWdlX2NhY2hlX2NhcGFjaXR5X3NldChwYWdlQ2FjaGVDYXBhY2l0eSk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0UGVyc2lzdGVudFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYp
Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbGVhclBl
cnNpc3RlbnRVc2VyU3R5bGVTaGVldCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCkKLXsKLSAgICBld2tf
c2V0dGluZ3NfYXBwbGljYXRpb25fY2FjaGVfY2xlYXIoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVy
OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oT3BhcXVlSlNTdHJpbmcqIHVybCkKLXsK
LSAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4gPSBld2tfc2VjdXJpdHlfb3JpZ2luX25l
d19mcm9tX3N0cmluZyh1cmwtPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGV3a19zZWN1
cml0eV9vcmlnaW5fYXBwbGljYXRpb25fY2FjaGVfY2xlYXIob3JpZ2luKTsKLSAgICBld2tfc2Vj
dXJpdHlfb3JpZ2luX2ZyZWUob3JpZ2luKTsKLX0KLQotbG9uZyBsb25nIFRlc3RSdW5uZXI6Omxv
Y2FsU3RvcmFnZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1JlZikKLXsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRvIHN1cHBvcnQgZ2V0dGluZyBkaXNrIHVzYWdlIGluIGJ5dGVzIGZvciBh
biBvcmlnaW4uCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSlNW
YWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSlNDb250ZXh0
UmVmIGNvbnRleHQpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0byBnZXQgb3JpZ2lucyB0
aGF0IGNvbnRhaW4gYXBwbGljYXRpb24gY2FjaGVzLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1sb25nIGxvbmcg
VGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdpbihKU1N0cmluZ1Jl
ZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKLXsKLSAgICBld2tfd2ViX2RhdGFiYXNlX3Jl
bW92ZV9hbGwoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVuc2ln
bmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSAgICBFd2tfU2VjdXJpdHlfT3JpZ2luKiBvcmlnaW4g
PSBld2tfZnJhbWVfc2VjdXJpdHlfb3JpZ2luX2dldChicm93c2VyLT5tYWluRnJhbWUoKSk7Ci0g
ICAgZXdrX3NlY3VyaXR5X29yaWdpbl93ZWJfZGF0YWJhc2VfcXVvdGFfc2V0KG9yaWdpbiwgcXVv
dGEpOwotICAgIGV3a19zZWN1cml0eV9vcmlnaW5fZnJlZShvcmlnaW4pOwotfQotCi1KU1ZhbHVl
UmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoTG9jYWxTdG9yYWdlKEpTQ29udGV4dFJlZiBjb250
ZXh0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmRlbGV0ZUFsbExvY2FsU3Rv
cmFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpk
ZWxldGVMb2NhbFN0b3JhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpvYnNlcnZlU3RvcmFnZVRyYWNrZXJOb3Rp
ZmljYXRpb25zKHVuc2lnbmVkKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6c3luY0xvY2FsU3RvcmFnZSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpCi17Ci0gICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0RWZsOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2No
ZW1lKGZvcmJpZGRlbiwgc2NoZW1lLT5zdHJpbmcoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6
Z29CYWNrKCkKLXsKLSAgICBld2tfZnJhbWVfYmFjayhicm93c2VyLT5tYWluRnJhbWUoKSk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIGRlZmVycykKLXsKLSAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OnNldERlZmVyc0xvYWRpbmcoYnJvd3Nlci0+bWFp
blZpZXcoKSwgZGVmZXJzKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGlt
dW1TaXplKHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplKQotewotICAgIGV3a19zZXR0aW5nc19hcHBs
aWNhdGlvbl9jYWNoZV9tYXhfcXVvdGFfc2V0KHNpemUpOwotfQotCi1zdGF0aWMgaW5saW5lIGJv
b2wgdG9Cb29sKEpTU3RyaW5nUmVmIHZhbHVlKQotewotICAgIHJldHVybiBlcXVhbHModmFsdWUs
ICJ0cnVlIikgfHwgZXF1YWxzKHZhbHVlLCAiMSIpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0
b0ludChKU1N0cmluZ1JlZiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYXRvaSh2YWx1ZS0+c3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVmZXJl
bmNlKEpTU3RyaW5nUmVmIGtleSwgSlNTdHJpbmdSZWYgdmFsdWUpCi17Ci0gICAgaWYgKGVxdWFs
cyhrZXksICJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIpKQotICAgICAgICBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9zY3JpcHRzX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUp
KTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0RGVmYXVsdEZvbnRTaXplIikpCi0g
ICAgICAgIGV3a192aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KGJyb3dzZXItPm1h
aW5WaWV3KCksIHRvSW50KHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktp
dE1pbmltdW1Gb250U2l6ZSIpKQotICAgICAgICBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11
bV9zaXplX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0ludCh2YWx1ZSkpOwotICAgIGVsc2Ug
aWYgKGVxdWFscyhrZXksICJXZWJLaXRQbHVnaW5zRW5hYmxlZCIpKQotICAgICAgICBld2tfdmll
d19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wo
dmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0V2ViR0xFbmFibGVkIikp
Ci0gICAgICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3dlYmdsX3NldChicm93c2VyLT5tYWlu
VmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0
RW5hYmxlQ2FyZXRCcm93c2luZyIpKQotICAgICAgICBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jy
b3dzaW5nX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNl
IGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0VXNlc1BhZ2VDYWNoZVByZWZlcmVuY2VLZXkiKSkKLSAg
ICAgICAgZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX3NldChicm93c2VyLT5tYWluVmlldygp
LCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2ViS2l0SHlwZXJs
aW5rQXVkaXRpbmdFbmFibGVkIikpCi0gICAgICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2h5
cGVybGlua19hdWRpdGluZ19zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7
Ci0gICAgZWxzZSBpZiAoZXF1YWxzKGtleSwgIldlYktpdFRhYlRvTGlua3NQcmVmZXJlbmNlS2V5
IikpCi0gICAgICAgIGV3a192aWV3X3NldHRpbmdfaW5jbHVkZV9saW5rc19pbl9mb2N1c19jaGFp
bl9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAo
ZXF1YWxzKGtleSwgIldlYktpdE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCIpKQot
ICAgICAgICBld2tfdmlld19zZXR0aW5nX2FwcGxpY2F0aW9uX2NhY2hlX3NldChicm93c2VyLT5t
YWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAgICBlbHNlIGlmIChlcXVhbHMoa2V5LCAiV2Vi
S2l0TG9hZFNpdGVJY29uc0tleSIpKQotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnNldExvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFnZUxvYWRpbmdTZXR0aW5nKGJyb3dzZXItPm1h
aW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJL
aXRDU1NSZWdpb25zRW5hYmxlZCIpKQotICAgICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnNldENTU1JlZ2lvbnNFbmFibGVkKGJyb3dzZXItPm1haW5WaWV3KCksIHRvQm9vbCh2YWx1ZSkp
OwotICAgIGVsc2UgaWYgKGVxdWFscyhrZXksICJXZWJLaXRXZWJBdWRpb0VuYWJsZWQiKSkKLSAg
ICAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZXRXZWJBdWRpb0VuYWJsZWQoYnJvd3Nl
ci0+bWFpblZpZXcoKSwgdG9Cb29sKHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoZXF1YWxzKGtleSwg
IldlYktpdERpc3BsYXlJbWFnZXNLZXkiKSkKLSAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19hdXRv
X2xvYWRfaW1hZ2VzX3NldChicm93c2VyLT5tYWluVmlldygpLCB0b0Jvb2wodmFsdWUpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVm
ZXJlbmNlIHRyaWVkIHRvIG92ZXJyaWRlIHVua25vd24gcHJlZmVyZW5jZSAnJXMnLlxuIiwgdmFs
dWUtPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZFVz
ZXJTY3JpcHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJh
bWVzKQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6YWRkVXNlclNjcmlwdChicm93
c2VyLT5tYWluVmlldygpLCBzb3VyY2UtPnN0cmluZygpLCBydW5BdFN0YXJ0LCBhbGxGcmFtZXMp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0KEpTU3RyaW5nUmVmIHNv
dXJjZSwgYm9vbCBhbGxGcmFtZXMpCi17Ci0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjph
ZGRVc2VyU3R5bGVTaGVldChicm93c2VyLT5tYWluVmlldygpLCBzb3VyY2UtPnN0cmluZygpLCBh
bGxGcmFtZXMpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNldERldmVsb3BlckV4dHJhc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQotewotICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Bl
cl9leHRyYXNfc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGVuYWJsZWQpOwotfQotCi12b2lkIFRl
c3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoKQotewotICAgIGV3a192aWV3X2luc3BlY3Rvcl9z
aG93KGJyb3dzZXItPm1haW5WaWV3KCkpOwotICAgIGJyb3dzZXItPndhaXRJbnNwZWN0b3JMb2Fk
RmluaXNoZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3RvcigpCi17
Ci0gICAgZXdrX3ZpZXdfaW5zcGVjdG9yX2Nsb3NlKGJyb3dzZXItPm1haW5WaWV3KCkpOwotfQot
Ci12b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoSlNTdHJpbmdSZWYgc2Ny
aXB0KQotewotICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6ZXZhbHVhdGVJbldlYkluc3Bl
Y3Rvcihicm93c2VyLT5tYWluVmlldygpLCBzY3JpcHQtPnN0cmluZygpKTsKLX0KLQotdm9pZCBU
ZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVu
c2lnbmVkLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1
bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNj
cmlwdCkKLXsKLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKGJyb3dzZXItPm1haW5GcmFtZSgpLCB3b3JsZElELCBnbG9iYWxPYmplY3Qs
IHNjcmlwdC0+c3RyaW5nKCkpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFZpc2l0
ZWRMaW5rcygpCi17Ci0gICAgRXdrX0hpc3RvcnkqIGhpc3RvcnkgPSBld2tfdmlld19oaXN0b3J5
X2dldChicm93c2VyLT5tYWluVmlldygpKTsKLSAgICBpZiAoIWhpc3RvcnkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGV3a19oaXN0b3J5X2NsZWFyKGhpc3RvcnkpOwotfQotCi1ib29sIFRlc3RS
dW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCi17Ci0gICAgcmV0dXJuIER1bXBSZW5k
ZXJUcmVlU3VwcG9ydEVmbDo6Y2FsbFNob3VsZENsb3NlT25XZWJWaWV3KGJyb3dzZXItPm1haW5G
cmFtZSgpKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjphcGlUZXN0TmV3V2luZG93RGF0YUxvYWRC
YXNlVVJMKEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFwaVRlc3RHb1RvQ3VycmVudEJhY2tGb3J3YXJkSXRl
bSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRX
ZWJWaWV3RWRpdGFibGUoYm9vbCkKLXsKLSAgICBld2tfZnJhbWVfZWRpdGFibGVfc2V0KGJyb3dz
ZXItPm1haW5GcmFtZSgpLCBFSU5BX1RSVUUpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmF1dGhl
bnRpY2F0ZVNlc3Npb24oSlNTdHJpbmdSZWYsIEpTU3RyaW5nUmVmLCBKU1N0cmluZ1JlZikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmFib3J0TW9kYWwo
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6c2V0U2Vy
aWFsaXplSFRUUExvYWRzKGJvb2wgc2VyaWFsaXplKQotewotICAgIER1bXBSZW5kZXJUcmVlU3Vw
cG9ydEVmbDo6c2V0U2VyaWFsaXplSFRUUExvYWRzKHNlcmlhbGl6ZSk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rpb24pCi17Ci0gICAg
RXdrX1RleHRfRGlyZWN0aW9uIGV3a0RpcmVjdGlvbjsKLSAgICBpZiAoSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhkaXJlY3Rpb24sICJhdXRvIikpCi0gICAgICAgIGV3a0RpcmVjdGlvbiA9
IEVXS19URVhUX0RJUkVDVElPTl9ERUZBVUxUOwotICAgIGVsc2UgaWYgKEpTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcoZGlyZWN0aW9uLCAicnRsIikpCi0gICAgICAgIGV3a0RpcmVjdGlvbiA9
IEVXS19URVhUX0RJUkVDVElPTl9SSUdIVF9UT19MRUZUOwotICAgIGVsc2UgaWYgKEpTU3RyaW5n
SXNFcXVhbFRvVVRGOENTdHJpbmcoZGlyZWN0aW9uLCAibHRyIikpCi0gICAgICAgIGV3a0RpcmVj
dGlvbiA9IEVXS19URVhUX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hUOwotICAgIGVsc2UgewotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24gY2FsbGVk
IHdpdGggdW5rbm93biBkaXJlY3Rpb246ICclcycuXG4iLCBkaXJlY3Rpb24tPnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZXdrX3ZpZXdfdGV4
dF9kaXJlY3Rpb25fc2V0KGJyb3dzZXItPm1haW5WaWV3KCksIGV3a0RpcmVjdGlvbik7Ci19Ci0K
LXZvaWQgVGVzdFJ1bm5lcjo6YWRkQ2hyb21lSW5wdXRGaWVsZCgpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRlc3RSdW5uZXI6OmZvY3VzV2Vi
VmlldygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpz
ZXRCYWNraW5nU2NhbGVGYWN0b3IoZG91YmxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEpTU3Ry
aW5nUmVmIG9yaWdpbikKLXsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpkZW55V2ViTm90aWZpY2F0
aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBqc09yaWdpbikKLXsKLX0KLQotdm9pZCBUZXN0UnVu
bmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpCi17Ci19Ci0KLXZvaWQg
VGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhKU1ZhbHVlUmVmIGpzTm90
aWZpY2F0aW9uKQotewotfQotCi12b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlTGVnYWN5V2ViTm90
aWZpY2F0aW9uQ2xpY2soSlNTdHJpbmdSZWYgdGl0bGUpCi17Ci19Ci0KLXZvaWQgVGVzdFJ1bm5l
cjo6cmVzZXRQYWdlVmlzaWJpbGl0eSgpCi17Ci0gICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0
ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRVdLX1BBR0VfVklTSUJJTElUWV9TVEFURV9WSVNJ
QkxFLCB0cnVlKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlzaWJpbGl0eShjb25z
dCBjaGFyKiB2aXNpYmlsaXR5KQotewotICAgIFN0cmluZyBuZXdWaXNpYmlsaXR5KHZpc2liaWxp
dHkpOwotICAgIGlmIChuZXdWaXNpYmlsaXR5ID09ICJ2aXNpYmxlIikKLSAgICAgICAgZXdrX3Zp
ZXdfdmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJvd3Nlci0+bWFpblZpZXcoKSwgRVdLX1BBR0VfVklT
SUJJTElUWV9TVEFURV9WSVNJQkxFLCBmYWxzZSk7Ci0gICAgZWxzZSBpZiAobmV3VmlzaWJpbGl0
eSA9PSAiaGlkZGVuIikKLSAgICAgICAgZXdrX3ZpZXdfdmlzaWJpbGl0eV9zdGF0ZV9zZXQoYnJv
d3Nlci0+bWFpblZpZXcoKSwgRVdLX1BBR0VfVklTSUJJTElUWV9TVEFURV9ISURERU4sIGZhbHNl
KTsKLSAgICBlbHNlIGlmIChuZXdWaXNpYmlsaXR5ID09ICJwcmVyZW5kZXIiKQotICAgICAgICBl
d2tfdmlld192aXNpYmlsaXR5X3N0YXRlX3NldChicm93c2VyLT5tYWluVmlldygpLCBFV0tfUEFH
RV9WSVNJQklMSVRZX1NUQVRFX1BSRVJFTkRFUiwgZmFsc2UpOwotfQotCi12b2lkIFRlc3RSdW5u
ZXI6OnNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXN0UnVubmVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxl
SW50ZXJ2YWwoZG91YmxlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGVz
dFJ1bm5lcjo6Y2xvc2VJZGxlTG9jYWxTdG9yYWdlRGF0YWJhc2VzKCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJ
bnB1dENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENv
bnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmI2ZDZiZTgzYTBj
YmVjNmE5MTE5YWFkM2MzYjdjOWYxNTVlOThkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250
cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVGV4dElucHV0Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiRHVtcFJl
bmRlclRyZWUuaCIKLSNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZUNocm9tZS5oIgotI2luY2x1ZGUg
IldlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbC5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNS
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5nLmg+Ci0KLXN0YXRpYyBKU1ZhbHVl
UmVmIHNldE1hcmtlZFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17
Ci0gICAgaWYgKCFicm93c2VyLT5tYWluVmlldygpIHx8IGFyZ3VtZW50Q291bnQgPCAzKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci0KLSAgICBKU1N0cmlu
Z1JlZiBzdHJpbmcgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFyZ3VtZW50c1swXSwg
ZXhjZXB0aW9uKTsKLQotICAgIHNpemVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVt
VVRGOENTdHJpbmdTaXplKHN0cmluZyk7Ci0gICAgY2hhciogdGV4dCA9IG5ldyBjaGFyW2J1ZmZl
clNpemVdOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyaW5nLCB0ZXh0LCBidWZmZXJT
aXplKTsKLSAgICBKU1N0cmluZ1JlbGVhc2Uoc3RyaW5nKTsKLQotICAgIGludCBzdGFydCA9IHN0
YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhj
ZXB0aW9uKSk7Ci0gICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKSk7Ci0KLSAgICBEdW1wUmVuZGVy
VHJlZVN1cHBvcnRFZmw6OnNldENvbXBvc2l0aW9uKGJyb3dzZXItPm1haW5WaWV3KCksIHRleHQs
IHN0YXJ0LCBsZW5ndGgpOwotCi0gICAgZGVsZXRlW10gdGV4dDsKLSAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGhhc01hcmtl
ZFRleHRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKCFi
cm93c2VyLT5tYWluVmlldygpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci0KLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VCb29sZWFuKGNvbnRleHQsIER1bXBS
ZW5kZXJUcmVlU3VwcG9ydEVmbDo6aGFzQ29tcG9zaXRpb24oYnJvd3Nlci0+bWFpblZpZXcoKSkp
OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBtYXJrZWRSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoIWJyb3dzZXItPm1haW5WaWV3KCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGludCBzdGFy
dCwgbGVuZ3RoOwotICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb21wb3NpdGlv
blJhbmdlKGJyb3dzZXItPm1haW5WaWV3KCksICZzdGFydCwgJmxlbmd0aCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTVmFsdWVSZWYgYXJy
YXlWYWx1ZXNbMl07Ci0gICAgYXJyYXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0LCBzdGFydCk7Ci0gICAgYXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250
ZXh0LCBsZW5ndGgpOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtl
QXJyYXkoY29udGV4dCwgMiwgYXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIGFy
cmF5T2JqZWN0OwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBpbnNlcnRUZXh0Q2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXco
KSB8fCBhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotCi0gICAgSlNTdHJpbmdSZWYgc3RyaW5nID0gSlNWYWx1ZVRvU3RyaW5n
Q29weShjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7Ci0KLSAgICBzaXplX3QgYnVm
ZmVyU2l6ZSA9IEpTU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmcpOwotICAg
IGNoYXIqIHRleHQgPSBuZXcgY2hhcltidWZmZXJTaXplXTsKLSAgICBKU1N0cmluZ0dldFVURjhD
U3RyaW5nKHN0cmluZywgdGV4dCwgYnVmZmVyU2l6ZSk7Ci0gICAgSlNTdHJpbmdSZWxlYXNlKHN0
cmluZyk7Ci0KLSAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmNvbmZpcm1Db21wb3NpdGlv
bihicm93c2VyLT5tYWluVmlldygpLCB0ZXh0KTsKLQotICAgIGRlbGV0ZVtdIHRleHQ7Ci0gICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1
ZVJlZiB1bm1hcmtUZXh0Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIGlmICghYnJvd3Nlci0+bWFpblZpZXcoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
VW5kZWZpbmVkKGNvbnRleHQpOwotCi0gICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpjb25m
aXJtQ29tcG9zaXRpb24oYnJvd3Nlci0+bWFpblZpZXcoKSwgMCk7Ci0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCi1zdGF0aWMgSlNWYWx1ZVJlZiBmaXJzdFJl
Y3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
LXsKLSAgICBpZiAoIWJyb3dzZXItPm1haW5WaWV3KCkgfHwgYXJndW1lbnRDb3VudCA8IDIpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGludCBs
b2NhdGlvbiA9IHN0YXRpY19jYXN0PGludD4oSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKSk7Ci0gICAgaW50IGxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4o
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7Ci0KLSAg
ICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QgPSBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6OmZpcnN0
UmVjdEZvckNoYXJhY3RlclJhbmdlKGJyb3dzZXItPm1haW5WaWV3KCksIGxvY2F0aW9uLCBsZW5n
dGgpOwotCi0gICAgSlNWYWx1ZVJlZiBhcnJheVZhbHVlc1s0XTsKLSAgICBhcnJheVZhbHVlc1sw
XSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHJlY3QueCgpKTsKLSAgICBhcnJheVZhbHVl
c1sxXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHJlY3QueSgpKTsKLSAgICBhcnJheVZh
bHVlc1syXSA9IEpTVmFsdWVNYWtlTnVtYmVyKGNvbnRleHQsIHJlY3Qud2lkdGgoKSk7Ci0gICAg
YXJyYXlWYWx1ZXNbM10gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0LCByZWN0LmhlaWdodCgp
KTsKLSAgICBKU09iamVjdFJlZiBhcnJheU9iamVjdCA9IEpTT2JqZWN0TWFrZUFycmF5KGNvbnRl
eHQsIDQsIGFycmF5VmFsdWVzLCBleGNlcHRpb24pOwotICAgIHJldHVybiBhcnJheU9iamVjdDsK
LX0KLQotc3RhdGljIEpTVmFsdWVSZWYgc2VsZWN0ZWRSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoIWJyb3dzZXItPm1haW5WaWV3KCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIGludCBzdGFy
dCwgbGVuZ3RoOwotICAgIGlmICghRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsOjpzZWxlY3RlZFJh
bmdlKGJyb3dzZXItPm1haW5WaWV3KCksICZzdGFydCwgJmxlbmd0aCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLQotICAgIEpTVmFsdWVSZWYgYXJyYXlW
YWx1ZXNbMl07Ci0gICAgYXJyYXlWYWx1ZXNbMF0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
LCBzdGFydCk7Ci0gICAgYXJyYXlWYWx1ZXNbMV0gPSBKU1ZhbHVlTWFrZU51bWJlcihjb250ZXh0
LCBsZW5ndGgpOwotICAgIEpTT2JqZWN0UmVmIGFycmF5T2JqZWN0ID0gSlNPYmplY3RNYWtlQXJy
YXkoY29udGV4dCwgMiwgYXJyYXlWYWx1ZXMsIGV4Y2VwdGlvbik7Ci0gICAgcmV0dXJuIGFycmF5
T2JqZWN0OwotfQotCi1zdGF0aWMgSlNTdGF0aWNGdW5jdGlvbiBzdGF0aWNGdW5jdGlvbnNbXSA9
IHsKLSAgICB7ICJzZXRNYXJrZWRUZXh0Iiwgc2V0TWFya2VkVGV4dENhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgeyAiaGFzTWFya2VkVGV4dCIsIGhhc01hcmtlZFRleHRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgIHsgIm1hcmtlZFJhbmdlIiwgbWFya2VkUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgIHsg
Imluc2VydFRleHQiLCBpbnNlcnRUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICB7ICJ1bm1hcmtU
ZXh0IiwgdW5tYXJrVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgeyAiZmlyc3RSZWN0Rm9yQ2hh
cmFjdGVyUmFuZ2UiLCBmaXJzdFJlY3RGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
Ci0gICAgeyAic2VsZWN0ZWRSYW5nZSIsIHNlbGVjdGVkUmFuZ2VDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAot
ICAgIHsgMCwgMCwgMCB9Ci19OwotCi1zdGF0aWMgSlNDbGFzc1JlZiBnZXRDbGFzcyhKU0NvbnRl
eHRSZWYgY29udGV4dCkKLXsKLSAgICBzdGF0aWMgSlNDbGFzc1JlZiB0ZXh0SW5wdXRDb250cm9s
bGVyQ2xhc3MgPSAwOwotCi0gICAgaWYgKCF0ZXh0SW5wdXRDb250cm9sbGVyQ2xhc3MpIHsKLSAg
ICAgICAgSlNDbGFzc0RlZmluaXRpb24gY2xhc3NEZWZpbml0aW9uID0gewotICAgICAgICAgICAg
ICAgIDAsIDAsIDAsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMH07Ci0gICAgICAgIGNsYXNzRGVmaW5pdGlvbi5zdGF0aWNGdW5jdGlvbnMg
PSBzdGF0aWNGdW5jdGlvbnM7Ci0KLSAgICAgICAgdGV4dElucHV0Q29udHJvbGxlckNsYXNzID0g
SlNDbGFzc0NyZWF0ZSgmY2xhc3NEZWZpbml0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGV4
dElucHV0Q29udHJvbGxlckNsYXNzOwotfQotCi1KU09iamVjdFJlZiBtYWtlVGV4dElucHV0Q29u
dHJvbGxlcihKU0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICByZXR1cm4gSlNPYmplY3RNYWtl
KGNvbnRleHQsIGdldENsYXNzKGNvbnRleHQpLCAwKTsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2VmbC9UZXh0SW5wdXRDb250cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDVlZTI3MTk4MzQwYzU3MmI1ZmU3MWY5MzA0M2ExMGM3ZTdjYzg1MjYuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZWZsL1RleHRJbnB1dENvbnRyb2xsZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgVGV4dElucHV0Q29udHJvbGxlcl9oCi0jZGVmaW5lIFRleHRJbnB1dENvbnRyb2xs
ZXJfaAotCi10eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVKU0NvbnRleHQqIEpTQ29udGV4dFJl
ZjsKLXR5cGVkZWYgc3RydWN0IE9wYXF1ZUpTVmFsdWUqIEpTT2JqZWN0UmVmOwotCi1KU09iamVj
dFJlZiBtYWtlVGV4dElucHV0Q29udHJvbGxlcihKU0NvbnRleHRSZWYpOwotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9Xb3JrUXVldWVJdGVtRWZsLmNwcCBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9Xb3JrUXVldWVJdGVtRWZsLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNWZmZWMyOTY5NWFiNDk4NjA0MTc0Mzk0MzkzNjI2OTZkNGIz
Njk2Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvV29ya1F1ZXVlSXRlbUVmbC5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxw
QGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5
c3RlbXMKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCi0KLSNpbmNsdWRlICJEdW1w
UmVuZGVyVHJlZS5oIgotI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlQ2hyb21lLmgiCi0KLSNpbmNs
dWRlIDxFV2ViS2l0Lmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotYm9v
bCBMb2FkSXRlbTo6aW52b2tlKCkgY29uc3QKLXsKLSAgICBFdmFzX09iamVjdCogdGFyZ2V0RnJh
bWU7Ci0KLSAgICBpZiAoIW1fdGFyZ2V0LT5sZW5ndGgoKSkKLSAgICAgICAgdGFyZ2V0RnJhbWUg
PSBicm93c2VyLT5tYWluRnJhbWUoKTsKLSAgICBlbHNlCi0gICAgICAgIHRhcmdldEZyYW1lID0g
ZXdrX2ZyYW1lX2NoaWxkX2ZpbmQoYnJvd3Nlci0+bWFpbkZyYW1lKCksIG1fdGFyZ2V0LT5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIGV3a19mcmFtZV91cmlfc2V0KHRhcmdldEZyYW1l
LCBtX3VybC0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBMb2FkSFRNTFN0cmluZ0l0ZW06Omludm9rZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X3VucmVhY2hhYmxlVVJMLT5sZW5ndGgoKSkKLSAgICAgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3Nl
dChicm93c2VyLT5tYWluRnJhbWUoKSwgbV9jb250ZW50LT5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCAwLCAwLCAwLCBtX2Jhc2VVUkwtPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGVsc2UK
LSAgICAgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX2FsdGVybmF0ZV9zZXQoYnJvd3Nlci0+bWFpbkZy
YW1lKCksIG1fY29udGVudC0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgMCwgMCwgMCwgbV9iYXNl
VVJMLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtX3VucmVhY2hhYmxlVVJMLT5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbG9hZEl0ZW06
Omludm9rZSgpIGNvbnN0Ci17Ci0gICAgZXdrX3ZpZXdfcmVsb2FkKGJyb3dzZXItPm1haW5WaWV3
KCkpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNjcmlwdEl0ZW06Omludm9rZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZShicm93c2VyLT5tYWlu
RnJhbWUoKSwgbV9zY3JpcHQtPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29sIEJh
Y2tGb3J3YXJkSXRlbTo6aW52b2tlKCkgY29uc3QKLXsKLSAgICBpZiAobV9ob3dGYXIgPT0gMSkK
LSAgICAgICAgZXdrX3ZpZXdfZm9yd2FyZChicm93c2VyLT5tYWluVmlldygpKTsKLSAgICBlbHNl
IGlmIChtX2hvd0ZhciA9PSAtMSkKLSAgICAgICAgZXdrX3ZpZXdfYmFjayhicm93c2VyLT5tYWlu
VmlldygpKTsKLSAgICBlbHNlCi0gICAgICAgIGV3a192aWV3X25hdmlnYXRlKGJyb3dzZXItPm1h
aW5WaWV3KCksIG1faG93RmFyKTsKLQotICAgIHJldHVybiB0cnVlOwotfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvRVdlYkxhdW5jaGVyL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvRVdlYkxhdW5jaGVyL0NN
YWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTI2NmFkYWY2NmMw
ZTUyZTRlNDhjZTIzNzYxZjViMzhjYWVjZDNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0VXZWJMYXVuY2hlci9DTWFrZUxpc3RzLnR4dAorKysg
L2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLXNldChFV2ViTGF1bmNoZXJfU09VUkNFUwotICAg
ICR7VE9PTFNfRElSfS9FV2ViTGF1bmNoZXIvdXJsX2Jhci5jCi0gICAgJHtUT09MU19ESVJ9L0VX
ZWJMYXVuY2hlci91cmxfdXRpbHMuYwotICAgICR7VE9PTFNfRElSfS9FV2ViTGF1bmNoZXIvbWFp
bi5jCi0pCi0KLXNldChFV2ViTGF1bmNoZXJfTElCUkFSSUVTCi0gICAgSmF2YVNjcmlwdENvcmUK
LSAgICBXZWJDb3JlCi0gICAgV2ViS2l0Ci0gICAgJHtDQUlST19MSUJSQVJJRVN9Ci0gICAgJHtF
Q09SRV9MSUJSQVJJRVN9Ci0gICAgJHtFQ09SRV9FVkFTX0xJQlJBUklFU30KLSAgICAke0VDT1JF
X0ZJTEVfTElCUkFSSUVTfQotICAgICR7RUNPUkVfWF9MSUJSQVJJRVN9Ci0gICAgJHtFREpFX0xJ
QlJBUklFU30KLSAgICAke0VJTkFfTElCUkFSSUVTfQotICAgICR7RU9fTElCUkFSSUVTfQotICAg
ICR7RVZBU19MSUJSQVJJRVN9Ci0gICAgJHtMSUJYTUwyX0xJQlJBUklFU30KLSAgICAke0xJQlhT
TFRfTElCUkFSSUVTfSAtbG0KLSAgICAke1NRTElURV9MSUJSQVJJRVN9Ci0gICAgJHtHTElCX0xJ
QlJBUklFU30KLSAgICAke0xJQlNPVVBfTElCUkFSSUVTfQotKQotCi1zZXQoRVdlYkxhdW5jaGVy
X0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAiJHtXRUJLSVRfRElSfS9lZmwvZXdrIgotICAgICR7
Q0FJUk9fSU5DTFVERV9ESVJTfQotICAgICR7RUNPUkVfSU5DTFVERV9ESVJTfQotICAgICR7RUNP
UkVfRVZBU19JTkNMVURFX0RJUlN9Ci0gICAgJHtFQ09SRV9GSUxFX0lOQ0xVREVfRElSU30KLSAg
ICAke0VDT1JFX1hfSU5DTFVERV9ESVJTfQotICAgICR7RURKRV9JTkNMVURFX0RJUlN9Ci0gICAg
JHtFSU5BX0lOQ0xVREVfRElSU30KLSAgICAke0VPX0lOQ0xVREVfRElSU30KLSAgICAke0VWQVNf
SU5DTFVERV9ESVJTfQotICAgICR7R0xJQl9JTkNMVURFX0RJUlN9Ci0gICAgJHtMSUJTT1VQX0lO
Q0xVREVfRElSU30KLSkKLQotaW5jbHVkZV9kaXJlY3Rvcmllcygke0VXZWJMYXVuY2hlcl9JTkNM
VURFX0RJUkVDVE9SSUVTfSkKLWFkZF9leGVjdXRhYmxlKEVXZWJMYXVuY2hlciAke0VXZWJMYXVu
Y2hlcl9TT1VSQ0VTfSkKLXRhcmdldF9saW5rX2xpYnJhcmllcyhFV2ViTGF1bmNoZXIgJHtFV2Vi
TGF1bmNoZXJfTElCUkFSSUVTfSkKLXNldF90YXJnZXRfcHJvcGVydGllcyhFV2ViTGF1bmNoZXIg
UFJPUEVSVElFUyBGT0xERVIgIlRvb2xzIikKLQotYWRkX2RlcGVuZGVuY2llcyhFV2ViTGF1bmNo
ZXIgQ29udHJvbFRoZW1lKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRVdlYkxhdW5jaGVyL0NvbnRyb2xU
aGVtZS9DTWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0VXZWJMYXVuY2hlci9Db250cm9sVGhlbWUvQ01h
a2VMaXN0cy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyZWY3MmUzMjQ1ZGJh
MzJiN2I1N2NiOTdlYTIwZThjMmI4MjgwZGUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRVdlYkxhdW5jaGVyL0NvbnRyb2xUaGVtZS9DTWFrZUxp
c3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLXNldChDb250cm9sVGhlbWVf
RElSICIke1RPT0xTX0RJUn0vRVdlYkxhdW5jaGVyL0NvbnRyb2xUaGVtZSIpCi0KLWFkZF9jdXN0
b21fY29tbWFuZCgKLSAgICBPVVRQVVQgJHtUSEVNRV9CSU5BUllfRElSfS9lbnRyeS5lZGoKLSAg
ICBDT01NQU5EICR7RURKRV9DQ19FWEVDVVRBQkxFfSAtdiAke0NvbnRyb2xUaGVtZV9ESVJ9L2Vu
dHJ5LmVkYyAke1RIRU1FX0JJTkFSWV9ESVJ9L2VudHJ5LmVkagotICAgIERFUEVORFMKLSAgICAg
ICAgJHtDb250cm9sVGhlbWVfRElSfS9lbnRyeS5lZGMKLSAgICBWRVJCQVRJTQotKQotCi1hZGRf
Y3VzdG9tX3RhcmdldChDb250cm9sVGhlbWUgREVQRU5EUyAke1RIRU1FX0JJTkFSWV9ESVJ9L2Vu
dHJ5LmVkaikKZGlmZiAtLWdpdCBhL1Rvb2xzL0VXZWJMYXVuY2hlci9Db250cm9sVGhlbWUvZW50
cnkuZWRjIGIvVG9vbHMvRVdlYkxhdW5jaGVyL0NvbnRyb2xUaGVtZS9lbnRyeS5lZGMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhMWE1ZjczOWI4MGQ4N2E2MmI3NDdhNzBmYTI3MmU5
OTg2NWY2MzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
VG9vbHMvRVdlYkxhdW5jaGVyL0NvbnRyb2xUaGVtZS9lbnRyeS5lZGMKKysrIC9kZXYvbnVsbApA
QCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVsZWN0
cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotY29sbGVjdGlvbnMgewotICAgZ3JvdXAgewotICAgICAgbmFtZTogImNv
bnRyb2wvZW50cnkvYmFzZS9kZWZhdWx0IjsKLSAgICAgIHN0eWxlcyB7Ci0gICAgICAgICBzdHls
ZSB7Ci0gICAgICAgICAgICBuYW1lOiAiZW50cnlfdGV4dGJsb2NrX3N0eWxlIjsKLSAgICAgICAg
ICAgIGJhc2U6ICJmb250PVJvbWFuIGZvbnRfc2l6ZT0xNCBjb2xvcj0jMDAwMDAwIHdyYXA9bWl4
ZWQiOwotICAgICAgICAgfQotICAgICAgfQotICAgICAgcGFydHMgewotICAgICAgICAgcGFydCB7
Ci0gICAgICAgICAgICBuYW1lOiAidXJsLnRleHQiOwotICAgICAgICAgICAgdHlwZTogVEVYVEJM
T0NLOwotICAgICAgICAgICAgbW91c2VfZXZlbnRzOiAxOwotICAgICAgICAgICAgc2NhbGU6IDE7
Ci0gICAgICAgICAgICBlbnRyeV9tb2RlOiBFRElUQUJMRTsKLSAgICAgICAgICAgIG11bHRpbGlu
ZTogMDsKLSAgICAgICAgICAgIHNvdXJjZTogImNvbnRyb2wvZW50cnkvc2VsZWN0aW9uL2RlZmF1
bHQiOyAvLyBzZWxlY3Rpb24gdW5kZXIKLSAgICAgICAgICAgIHNvdXJjZTQ6ICJjb250cm9sL2Vu
dHJ5L2N1cnNvci9kZWZhdWx0IjsgLy8gY3Vyc29yIG92ZXIKLSAgICAgICAgICAgIGRlc2NyaXB0
aW9uIHsKLSAgICAgICAgICAgICAgIHN0YXRlOiAiZGVmYXVsdCIgMC4wOwotICAgICAgICAgICAg
ICAgZml4ZWQ6IDEgMDsKLSAgICAgICAgICAgICAgIHRleHQgewotICAgICAgICAgICAgICAgICAg
c3R5bGU6ICJlbnRyeV90ZXh0YmxvY2tfc3R5bGUiOwotICAgICAgICAgICAgICAgICAgbWluOiAw
IDE7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBwcm9ncmFtcyB7Ci0gICAgICAgICBwcm9ncmFtIHsKLSAgICAgICAgICAgIG5hbWU6
ICJmb2N1cyI7Ci0gICAgICAgICAgICBzaWduYWw6ICJsb2FkIjsKLSAgICAgICAgICAgIHNvdXJj
ZTogIiI7Ci0gICAgICAgICAgICBhY3Rpb246IEZPQ1VTX1NFVDsKLSAgICAgICAgICAgIHRhcmdl
dDogInVybC50ZXh0IjsKLSAgICAgICAgIH0KLSAgICAgIH0KLSAgIH0KLQotICAgZ3JvdXAgewot
ICAgICAgbmFtZTogImNvbnRyb2wvZW50cnkvY3Vyc29yL2RlZmF1bHQiOwotICAgICAgcGFydHMg
ewotICAgICAgICAgcGFydCB7Ci0gICAgICAgICAgICBuYW1lOiAiY2xpcCI7Ci0gICAgICAgICAg
ICB0eXBlOiBSRUNUOwotICAgICAgICAgICAgbW91c2VfZXZlbnRzOiAwOwotICAgICAgICAgICAg
c2NhbGU6IDE7Ci0gICAgICAgICAgICBkZXNjcmlwdGlvbiB7Ci0gICAgICAgICAgICAgICBzdGF0
ZTogImRlZmF1bHQiIDAuMDsKLSAgICAgICAgICAgICAgIHJlbDEub2Zmc2V0OiAtMTAgMDsKLSAg
ICAgICAgICAgICAgIHJlbDIub2Zmc2V0OiA5IDk7Ci0gICAgICAgICAgICAgICB2aXNpYmxlOiAw
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzY3JpcHRpb24gewotICAgICAgICAgICAg
ICAgc3RhdGU6ICJmb2N1c2VkIiAwLjA7Ci0gICAgICAgICAgICAgICBpbmhlcml0OiAiZGVmYXVs
dCIgMC4wOwotICAgICAgICAgICAgICAgdmlzaWJsZTogMTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgIH0KLSAgICAgICAgIHBhcnQgewotICAgICAgICAgICAgbmFtZTogImN1cnNvciI7Ci0gICAg
ICAgICAgICB0eXBlOiBSRUNUOwotICAgICAgICAgICAgbW91c2VfZXZlbnRzOiAwOwotICAgICAg
ICAgICAgc2NhbGU6IDE7Ci0gICAgICAgICAgICBjbGlwX3RvOiAiY2xpcCI7Ci0gICAgICAgICAg
ICBkZXNjcmlwdGlvbiB7Ci0gICAgICAgICAgICAgICBzdGF0ZTogImRlZmF1bHQiIDAuMDsKLSAg
ICAgICAgICAgICAgIG1pbjogMSAwOwotICAgICAgICAgICAgICAgZml4ZWQ6IDEgMDsKLSAgICAg
ICAgICAgICAgIGFsaWduOiAwLjUgMC41OwotICAgICAgICAgICAgICAgdmlzaWJsZTogMTsKLSAg
ICAgICAgICAgICAgIHJlbDEgewotICAgICAgICAgICAgICAgICAgcmVsYXRpdmU6IDAuMCAgMC4w
OwotICAgICAgICAgICAgICAgICAgb2Zmc2V0OiAwIDI7Ci0gICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICByZWwyIHsKLSAgICAgICAgICAgICAgICAgIHJlbGF0aXZlOiAwLjAgIDEuMDsK
LSAgICAgICAgICAgICAgICAgIG9mZnNldDogMCAtMjsKLSAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgIGNvbG9yOiAwIDAgMCAyNTU7IC8vIGN1cnNvciBjb2xvcgotICAgICAgICAgICAg
fQotICAgICAgICAgfQotICAgICAgfQotICAgICAgcHJvZ3JhbXMgewotICAgICAgICAgcHJvZ3Jh
bSB7Ci0gICAgICAgICAgICBuYW1lOiAiZm9jdXNlZCI7Ci0gICAgICAgICAgICBzaWduYWw6ICJl
bnRyeSxhY3Rpb24sZm9jdXMiOwotICAgICAgICAgICAgc291cmNlOiAiZW50cnkiOwotICAgICAg
ICAgICAgYWN0aW9uOiBTVEFURV9TRVQgImZvY3VzZWQiIDAuMDsKLSAgICAgICAgICAgIHRhcmdl
dDogImNsaXAiOwotICAgICAgICAgfQotICAgICAgICAgcHJvZ3JhbSB7Ci0gICAgICAgICAgICBu
YW1lOiAidW5mb2N1c2VkIjsKLSAgICAgICAgICAgIHNpZ25hbDogImVudHJ5LGFjdGlvbix1bmZv
Y3VzIjsKLSAgICAgICAgICAgIHNvdXJjZTogImVudHJ5IjsKLSAgICAgICAgICAgIGFjdGlvbjog
U1RBVEVfU0VUICJkZWZhdWx0IiAwLjA7Ci0gICAgICAgICAgICB0YXJnZXQ6ICJjbGlwIjsKLSAg
ICAgICAgIH0KLSAgICAgIH0KLSAgIH0KLQotICAgZ3JvdXAgewotICAgICAgbmFtZTogImNvbnRy
b2wvZW50cnkvc2VsZWN0aW9uL2RlZmF1bHQiOwotICAgICAgcGFydHMgewotICAgICAgICAgcGFy
dCB7Ci0gICAgICAgICAgICBuYW1lOiAiYmciOwotICAgICAgICAgICAgdHlwZTogUkVDVDsKLSAg
ICAgICAgICAgIHNjYWxlOiAxOwotICAgICAgICAgICAgbW91c2VfZXZlbnRzOiAwOwotICAgICAg
ICAgICAgZGVzY3JpcHRpb24gewotICAgICAgICAgICAgICAgc3RhdGU6ICJkZWZhdWx0IiAwLjA7
Ci0gICAgICAgICAgICAgICBjb2xvcjogMTM4IDE4MyAyMjMgMTI4OwotICAgICAgICAgICAgfQot
ICAgICAgICAgfQotICAgICAgfQotICAgfQotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRVdlYkxhdW5j
aGVyL21haW4uYyBiL1Rvb2xzL0VXZWJMYXVuY2hlci9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGVmOWY4Y2EyZTRhOWJmZjk1ZGY5YWIwNGYzNWZlMDczOTRiZmUzOWEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRVdlYkxh
dW5jaGVyL21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEwMDIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBJTmRUIC0gSW5zdGl0dXRvIE5va2lhIGRlIFRlY25vbG9naWEKLSAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotICog
Q29weXJpZ2h0IChDKSAyMDA5LTIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcwotICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgIkVX
ZWJLaXQuaCIKLQotI2luY2x1ZGUgInVybF9iYXIuaCIKLSNpbmNsdWRlICJ1cmxfdXRpbHMuaCIK
LSNpbmNsdWRlIDxFY29yZS5oPgotI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KLSNpbmNsdWRlIDxF
Y29yZV9GaWxlLmg+Ci0jaW5jbHVkZSA8RWNvcmVfR2V0b3B0Lmg+Ci0jaW5jbHVkZSA8RWNvcmVf
WC5oPgotI2luY2x1ZGUgPEVkamUuaD4KLSNpbmNsdWRlIDxFdmFzLmg+Ci0jaW5jbHVkZSA8Y3R5
cGUuaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0j
aW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLQotI2RlZmluZSBERUZBVUxUX1dJRFRIICAgICAgODAwCi0jZGVmaW5lIERFRkFV
TFRfSEVJR0hUICAgICA2MDAKLSNkZWZpbmUgREVGQVVMVF9aT09NX0lOSVQgIDEuMAotCi0jZGVm
aW5lIGluZm8oZm9ybWF0LCBhcmdzLi4uKSAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICh2ZXJib3NlKSAgICAgICAgICAgICAgICBcCi0g
ICAgICAgICAgICBwcmludGYoZm9ybWF0IlxuIiwgIyNhcmdzKTsgXAotICAgIH0gd2hpbGUgKDAp
Ci0KLSNkZWZpbmUgTUlOX1pPT01fTEVWRUwgMAotI2RlZmluZSBERUZBVUxUX1pPT01fTEVWRUwg
NQotI2RlZmluZSBNQVhfWk9PTV9MRVZFTCAxMwotCi1zdGF0aWMgaW50IGN1cnJlbnRab29tTGV2
ZWwgPSBERUZBVUxUX1pPT01fTEVWRUw7Ci1zdGF0aWMgZmxvYXQgY3VycmVudFpvb20gPSAxLjA7
Ci0KLS8vIHRoZSB6b29tIHZhbHVlcyBhcmUgY2hvc2VuIHRvIGJlIGxpa2UgaW4gTW96aWxsYSBG
aXJlZm94IDMKLXN0YXRpYyBpbnQgem9vbUxldmVsc1tdID0gezMwLCA1MCwgNjcsIDgwLCA5MCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMTEwLCAxMjAsIDEzMywgMTUwLCAxNzAsIDIwMCwgMjQwLCAzMDB9OwotCi1zdGF0aWMg
aW50IHZlcmJvc2UgPSAwOwotCi1zdGF0aWMgRWluYV9MaXN0ICp3aW5kb3dzID0gTlVMTDsKLQot
c3RhdGljIGNoYXIgKnRoZW1lUGF0aCA9IE5VTEw7Ci0KLXR5cGVkZWYgc3RydWN0IF9XaW5kb3df
UHJvcGVydGllcyB7Ci0gICAgRWluYV9Cb29sIHRvb2xiYXJzVmlzaWJsZToxOwotICAgIEVpbmFf
Qm9vbCBzdGF0dXNiYXJWaXNpYmxlOjE7Ci0gICAgRWluYV9Cb29sIHNjcm9sbGJhcnNWaXNpYmxl
OjE7Ci0gICAgRWluYV9Cb29sIG1lbnViYXJWaXNpYmxlOjE7Ci19IFdpbmRvd19Qcm9wZXJ0aWVz
OwotCi1XaW5kb3dfUHJvcGVydGllcyB3aW5kb3dQcm9wZXJ0aWVzID0geyAvKiBQcmV0ZW5kIHdl
IGhhdmUgdGhlbSBhbmQgdGhleSBhcmUgaW5pdGlhbGx5IHZpc2libGUgKi8KLSAgICBFSU5BX1RS
VUUsCi0gICAgRUlOQV9UUlVFLAotICAgIEVJTkFfVFJVRSwKLSAgICBFSU5BX1RSVUUKLX07Ci0K
LXN0YXRpYyBjb25zdCBFY29yZV9HZXRvcHQgb3B0aW9ucyA9IHsKLSAgICAiRVdlYkxhdW5jaGVy
IiwKLSAgICAiJXByb2cgW29wdGlvbnNdIFt1cmxdIiwKLSAgICAiMC4wLjEiLAotICAgICIoQyky
MDA4IElOZFQgKFRoZSBOb2tpYSBUZWNobm9sb2d5IEluc3RpdHV0ZSlcbiIKLSAgICAiKEMpMjAw
OSwgMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtc1xuIgotICAgICIoQykyMDA5LTIwMTQg
U2Ftc3VuZyBFbGVjdHJvbmljc1xuIgotICAgICIoQykyMDEyIEludGVsIENvcnBvcmF0aW9uXG4i
LAotICAgICJHUEwiLAotICAgICJUZXN0IFdlYiBCcm93c2VyIHVzaW5nIHRoZSBFbmxpZ2h0ZW5t
ZW50IEZvdW5kYXRpb24gTGlicmFyaWVzIG9mIFdlYktpdCIsCi0gICAgRUlOQV9UUlVFLCB7Ci0g
ICAgICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9TVFIKLSAgICAgICAgICAgICgnZScsICJlbmdpbmUi
LCAiZWNvcmUtZXZhcyBlbmdpbmUgdG8gdXNlLiIpLAotICAgICAgICBFQ09SRV9HRVRPUFRfQ0FM
TEJBQ0tfTk9BUkdTCi0gICAgICAgICAgICAoJ0UnLCAibGlzdC1lbmdpbmVzIiwgImxpc3QgZWNv
cmUtZXZhcyBlbmdpbmVzLiIsCi0gICAgICAgICAgICAgZWNvcmVfZ2V0b3B0X2NhbGxiYWNrX2Vj
b3JlX2V2YXNfbGlzdF9lbmdpbmVzLCBOVUxMKSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1NUT1JF
X0RPVUJMRQotICAgICAgICAgICAgKCdyJywgImRldmljZS1waXhlbC1yYXRpbyIsICJSYXRpbyBi
ZXR3ZWVuIHRoZSBDU1MgdW5pdHMgYW5kIGRldmljZSBwaXhlbHMuIiksCi0gICAgICAgIEVDT1JF
X0dFVE9QVF9TVE9SRV9ERUZfQk9PTAotICAgICAgICAgICAgKCdjJywgImVuY29kaW5nLWRldGVj
dG9yIiwgImVuYWJsZS9kaXNhYmxlIGVuY29kaW5nIGRldGVjdG9yIiwgMCksCi0gICAgICAgIEVD
T1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAotICAgICAgICAgICAgKCdmJywgImZsYXR0ZW5pbmci
LCAiZnJhbWUgZmxhdHRlbmluZy4iLCAwKSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1NUT1JFX0RF
Rl9CT09MCi0gICAgICAgICAgICAoJ0YnLCAiZnVsbHNjcmVlbiIsICJmdWxsc2NyZWVuIG1vZGUu
IiwgMCksCi0gICAgICAgIEVDT1JFX0dFVE9QVF9DQUxMQkFDS19BUkdTCi0gICAgICAgICAgICAo
J2cnLCAiZ2VvbWV0cnkiLCAiZ2VvbWV0cnkgdG8gdXNlIGluIHg6eTp3OmggZm9ybS4iLCAiWDpZ
Olc6SCIsCi0gICAgICAgICAgICAgZWNvcmVfZ2V0b3B0X2NhbGxiYWNrX2dlb21ldHJ5X3BhcnNl
LCBOVUxMKSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1NUT1JFX1NUUgotICAgICAgICAgICAgKCd0
JywgInRoZW1lIiwgInBhdGggdG8gcmVhZCB0aGUgdGhlbWUgZmlsZSBmcm9tLiIpLAotICAgICAg
ICBFQ09SRV9HRVRPUFRfU1RPUkVfU1RSCi0gICAgICAgICAgICAoJ1UnLCAidXNlci1hZ2VudCIs
ICJjdXN0b20gdXNlciBhZ2VudCBzdHJpbmcgdG8gdXNlLiIpLAotICAgICAgICBFQ09SRV9HRVRP
UFRfQ09VTlQKLSAgICAgICAgICAgICgndicsICJ2ZXJib3NlIiwgImJlIG1vcmUgdmVyYm9zZS4i
KSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1ZFUlNJT04KLSAgICAgICAgICAgICgnVicsICJ2ZXJz
aW9uIiksCi0gICAgICAgIEVDT1JFX0dFVE9QVF9DT1BZUklHSFQKLSAgICAgICAgICAgICgnUics
ICJjb3B5cmlnaHQiKSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX0xJQ0VOU0UKLSAgICAgICAgICAg
ICgnTCcsICJsaWNlbnNlIiksCi0gICAgICAgIEVDT1JFX0dFVE9QVF9IRUxQCi0gICAgICAgICAg
ICAoJ2gnLCAiaGVscCIpLAotICAgICAgICBFQ09SRV9HRVRPUFRfU0VOVElORUwKLSAgICB9Ci19
OwotCi10eXBlZGVmIHN0cnVjdCBfVXNlcl9Bcmd1bWVudHMgewotICAgIGNoYXIgKmVuZ2luZTsK
LSAgICBFaW5hX0Jvb2wgcXVpdE9wdGlvbjsKLSAgICBkb3VibGUgZGV2aWNlX3BpeGVsX3JhdGlv
OwotICAgIEVpbmFfQm9vbCBlbmFibGVFbmNvZGluZ0RldGVjdG9yOwotICAgIEVpbmFfQm9vbCBp
c0ZsYXR0ZW5pbmc7Ci0gICAgRWluYV9Cb29sIGlzRnVsbHNjcmVlbjsKLSAgICBFaW5hX1JlY3Rh
bmdsZSBnZW9tZXRyeTsKLSAgICBjaGFyICp0aGVtZTsKLSAgICBjaGFyICp1c2VyQWdlbnQ7Ci0g
ICAgY2hhciAqZGF0YWJhc2VQYXRoOwotfSBVc2VyX0FyZ3VtZW50czsKLQotdHlwZWRlZiBzdHJ1
Y3QgX0VMYXVuY2hlciB7Ci0gICAgRWNvcmVfRXZhcyAqZWU7Ci0gICAgRXZhcyAqZXZhczsKLSAg
ICBFdmFzX09iamVjdCAqYnJvd3NlcjsKLSAgICBVcmxfQmFyICp1cmxfYmFyOwotICAgIFVzZXJf
QXJndW1lbnRzICp1c2VyQXJnczsKLX0gRUxhdW5jaGVyOwotCi1zdGF0aWMgdm9pZCB3aW5kb3dE
ZXN0cm95KEVjb3JlX0V2YXMgKmVlKTsKLXN0YXRpYyB2b2lkIGNsb3NlV2luZG93KEVjb3JlX0V2
YXMgKmVlKTsKLXN0YXRpYyBpbnQgYnJvd3NlckNyZWF0ZShjb25zdCBjaGFyICp1cmwsIFVzZXJf
QXJndW1lbnRzICp1c2VyQXJncyk7Ci1zdGF0aWMgaW50IHdlYkluc3BlY3RvckNyZWF0ZShFTGF1
bmNoZXIgKmFwcEJyb3dzZXIpOwotc3RhdGljIEVMYXVuY2hlciAqd2luZG93Q3JlYXRlKFVzZXJf
QXJndW1lbnRzICp1c2VyQXJncyk7Ci0KLXN0YXRpYyBFTGF1bmNoZXIgKgotZmluZF9hcHBfZnJv
bV9lZShFY29yZV9FdmFzICplZSkKLXsKLSAgICBFaW5hX0xpc3QgKmw7Ci0gICAgdm9pZCAqZGF0
YTsKLQotICAgIEVJTkFfTElTVF9GT1JFQUNIKHdpbmRvd3MsIGwsIGRhdGEpCi0gICAgewotICAg
ICAgICBFTGF1bmNoZXIgKmFwcCA9IChFTGF1bmNoZXIgKikgZGF0YTsKLSAgICAgICAgaWYgKGFw
cC0+ZWUgPT0gZWUpCi0gICAgICAgICAgICByZXR1cm4gYXBwOwotICAgIH0KLSAgICByZXR1cm4g
TlVMTDsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X2hpc3RvcnkoRWluYV9MaXN0ICpsaXN0LCBF
dmFzICplKQotewotICAgIEVpbmFfTGlzdCAqbDsKLSAgICB2b2lkICpkOwotCi0gICAgaWYgKCF2
ZXJib3NlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcmludGYoIlNlc3Npb24gaGlzdG9yeSBj
b250YWluczpcbiIpOwotCi0gICAgRUlOQV9MSVNUX0ZPUkVBQ0gobGlzdCwgbCwgZCkgewotICAg
ICAgICBFd2tfSGlzdG9yeV9JdGVtICppdGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWQ7Ci0gICAg
ICAgIEV2YXNfT2JqZWN0ICppY29uID0gZXdrX2hpc3RvcnlfaXRlbV9pY29uX29iamVjdF9hZGQo
aXRlbSwgZSk7Ci0gICAgICAgIGNoYXIgYnVmW1BBVEhfTUFYXTsKLSAgICAgICAgaW50IHMgPSBz
bnByaW50ZihidWYsIHNpemVvZihidWYpLCAiL3RtcC9mYXZpY29uLSVzLnBuZyIsIGV3a19oaXN0
b3J5X2l0ZW1fdXJpX29yaWdpbmFsX2dldChpdGVtKSk7Ci0gICAgICAgIGZvciAocy0tOyBzID49
IChpbnQpc2l6ZW9mKCIvdG1wL2Zhdmljb24tIik7IHMtLSkgewotICAgICAgICAgICAgaWYgKCFp
c2FsbnVtKGJ1ZltzXSkgJiYgYnVmW3NdICE9ICcuJykKLSAgICAgICAgICAgICAgICBidWZbc10g
PSAnXyc7Ci0gICAgICAgIH0KLQotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9zYXZlKGljb24s
IGJ1ZiwgTlVMTCwgTlVMTCk7Ci0KLSAgICAgICAgcHJpbnRmKCIqICclcycgdGl0bGU9JyVzJyBp
Y29uPSclcydcbiIsIGV3a19oaXN0b3J5X2l0ZW1fdXJpX29yaWdpbmFsX2dldChpdGVtKSwgZXdr
X2hpc3RvcnlfaXRlbV90aXRsZV9nZXQoaXRlbSksIGJ1Zik7Ci0gICAgfQotfQotCi1zdGF0aWMg
aW50Ci1uZWFyZXN0X3pvb21fbGV2ZWxfZ2V0KGZsb2F0IGZhY3RvcikKLXsKLSAgICBpbnQgaSwg
aW50RmFjdG9yID0gKGludCkoZmFjdG9yICogMTAwLjApOwotICAgIGZvciAoaSA9IDA7IHpvb21M
ZXZlbHNbaV0gPD0gaW50RmFjdG9yOyBpKyspIHsgfQotICAgIHByaW50ZigiZmFjdG9yPSVmLCBp
bnRGYWN0b3I9JWQsIHpvb21MZXZlbHNbJWRdPSVkLCB6b29tTGV2ZWxzWyVkXT0lZFxuIiwKLSAg
ICAgICAgICAgZmFjdG9yLCBpbnRGYWN0b3IsIGktMSwgem9vbUxldmVsc1tpLTFdLCBpLCB6b29t
TGV2ZWxzW2ldKTsKLSAgICBpZiAoaW50RmFjdG9yIC0gem9vbUxldmVsc1tpLTFdIDwgem9vbUxl
dmVsc1tpXSAtIGludEZhY3RvcikKLSAgICAgICAgcmV0dXJuIGkgLSAxOwotICAgIHJldHVybiBp
OwotfQotCi1zdGF0aWMgRWluYV9Cb29sCi16b29tX2xldmVsX3NldChFdmFzX09iamVjdCAqd2Vi
dmlldywgaW50IGxldmVsKQotewotICAgIGZsb2F0IGZhY3RvciA9ICgoZmxvYXQpIHpvb21MZXZl
bHNbbGV2ZWxdKSAvIDEwMC4wOwotICAgIEV2YXNfQ29vcmQgb3gsIG95LCBteCwgbXksIGN4LCBj
eTsKLSAgICBldmFzX3BvaW50ZXJfY2FudmFzX3h5X2dldChldmFzX29iamVjdF9ldmFzX2dldCh3
ZWJ2aWV3KSwgJm14LCAmbXkpOwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldCh3ZWJ2aWV3
LCAmb3gsICZveSwgTlVMTCwgTlVMTCk7Ci0gICAgY3ggPSBteCAtIG94OwotICAgIGN5ID0gbXkg
LSBveTsKLSAgICByZXR1cm4gZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQod2VidmlldywgZmFj
dG9yLCAwLjUsIGN4LCBjeSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9icm93c2VyX2Vjb3JlX2V2
YXNfcmVzaXplKEVjb3JlX0V2YXMgKmVlKQotewotICAgIEVMYXVuY2hlciAqYXBwOwotICAgIEV2
YXNfT2JqZWN0ICp3ZWJ2aWV3OwotICAgIGludCB3LCBoOwotCi0gICAgZWNvcmVfZXZhc19nZW9t
ZXRyeV9nZXQoZWUsIE5VTEwsIE5VTEwsICZ3LCAmaCk7Ci0KLSAgICAvKiBSZXNpemUgVVJMIGJh
ciAqLwotICAgIGFwcCA9IGZpbmRfYXBwX2Zyb21fZWUoZWUpOwotICAgIHVybF9iYXJfd2lkdGhf
c2V0KGFwcC0+dXJsX2Jhciwgdyk7Ci0KLSAgICB3ZWJ2aWV3ID0gZXZhc19vYmplY3RfbmFtZV9m
aW5kKGVjb3JlX2V2YXNfZ2V0KGVlKSwgImJyb3dzZXIiKTsKLSAgICBldmFzX29iamVjdF9tb3Zl
KHdlYnZpZXcsIDAsIFVSTF9CQVJfSEVJR0hUKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUod2Vi
dmlldywgdywgaCAtIFVSTF9CQVJfSEVJR0hUKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2luc3Bl
Y3Rvcl9lY29yZV9ldmFzX3Jlc2l6ZShFY29yZV9FdmFzICplZSkKLXsKLSAgICBFdmFzX09iamVj
dCAqd2VidmlldzsKLSAgICBpbnQgdywgaDsKLQotICAgIGVjb3JlX2V2YXNfZ2VvbWV0cnlfZ2V0
KGVlLCBOVUxMLCBOVUxMLCAmdywgJmgpOwotCi0gICAgd2VidmlldyA9IGV2YXNfb2JqZWN0X25h
bWVfZmluZChlY29yZV9ldmFzX2dldChlZSksICJpbnNwZWN0b3IiKTsKLSAgICBldmFzX29iamVj
dF9tb3ZlKHdlYnZpZXcsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZSh3ZWJ2aWV3LCB3
LCBoKTsKLX0KLQotc3RhdGljIHZvaWQKLXRpdGxlX3NldChFY29yZV9FdmFzICplZSwgY29uc3Qg
RXdrX1RleHRfV2l0aF9EaXJlY3Rpb24gKnRpdGxlLCBpbnQgcHJvZ3Jlc3MpCi17Ci0gICAgY29u
c3QgY2hhciAqYXBwbmFtZSA9ICJFRkwgVGVzdCBMYXVuY2hlciI7Ci0gICAgY29uc3QgY2hhciAq
c2VwYXJhdG9yID0gIiAtICI7Ci0gICAgY2hhciBsYWJlbFs0MDk2XTsKLSAgICBpbnQgc2l6ZTsK
LQotICAgIGlmICghdGl0bGUgfHwgIXRpdGxlLT5zdHJpbmcgfHwgIXN0cmNtcCh0aXRsZS0+c3Ry
aW5nLCAiIikpIHsKLSAgICAgICAgZWNvcmVfZXZhc190aXRsZV9zZXQoZWUsIGFwcG5hbWUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKHByb2dyZXNzIDwgMTAwKQotICAgICAg
ICBzaXplID0gc25wcmludGYobGFiZWwsIHNpemVvZihsYWJlbCksICIlcyAoJWQlJSklcyVzIiwg
dGl0bGUtPnN0cmluZywgcHJvZ3Jlc3MsIHNlcGFyYXRvciwgYXBwbmFtZSk7Ci0gICAgZWxzZQot
ICAgICAgICBzaXplID0gc25wcmludGYobGFiZWwsIHNpemVvZihsYWJlbCksICIlcyAlcyVzIiwg
dGl0bGUtPnN0cmluZywgc2VwYXJhdG9yLCBhcHBuYW1lKTsKLQotICAgIGlmIChzaXplID49IChp
bnQpc2l6ZW9mKGxhYmVsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWNvcmVfZXZhc190aXRs
ZV9zZXQoZWUsIGxhYmVsKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3RpdGxlX2NoYW5nZWQodm9p
ZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqd2Vidmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsK
LSAgICBFTGF1bmNoZXIgKmFwcCA9IChFTGF1bmNoZXIgKil1c2VyX2RhdGE7Ci0gICAgY29uc3Qg
RXdrX1RleHRfV2l0aF9EaXJlY3Rpb24gKnRpdGxlID0gKGNvbnN0IEV3a19UZXh0X1dpdGhfRGly
ZWN0aW9uICopZXZlbnRfaW5mbzsKLQotICAgIHRpdGxlX3NldChhcHAtPmVlLCB0aXRsZSwgMTAw
KTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3Byb2dyZXNzKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19P
YmplY3QgKndlYnZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICAgRUxhdW5jaGVyICphcHAg
PSAoRUxhdW5jaGVyICopdXNlcl9kYXRhOwotICAgIGRvdWJsZSAqcHJvZ3Jlc3MgPSAoZG91Ymxl
ICopZXZlbnRfaW5mbzsKLQotICAgIHRpdGxlX3NldChhcHAtPmVlLCBld2tfdmlld190aXRsZV9n
ZXQoYXBwLT5icm93c2VyKSwgKnByb2dyZXNzICogMTAwKTsKLX0KLQotc3RhdGljIHZvaWQKLW9u
X2xvYWRfZmluaXNoZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqd2Vidmlldywgdm9p
ZCAqZXZlbnRfaW5mbykKLXsKLSAgICBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciAqZXJyID0g
KGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yICopZXZlbnRfaW5mbzsKLQotICAgIGlmICghZXJy
KQotICAgICAgICBpbmZvKCJTdWNjZWVkZWQgbG9hZGluZyBwYWdlLiIpOwotICAgIGVsc2UgaWYg
KGVyci0+aXNfY2FuY2VsbGF0aW9uKQotICAgICAgICBpbmZvKCJMb2FkIHdhcyBjYW5jZWxsZWQu
Iik7Ci0gICAgZWxzZQotICAgICAgICBpbmZvKCJGYWlsZWQgbG9hZGluZyBwYWdlOiAlZCAlcyBc
IiVzXCIsIHVybD0lcyIsCi0gICAgICAgICAgICAgZXJyLT5jb2RlLCBlcnItPmRvbWFpbiwgZXJy
LT5kZXNjcmlwdGlvbiwgZXJyLT5mYWlsaW5nX3VybCk7Ci0KLSAgICBjdXJyZW50Wm9vbSA9IGV3
a192aWV3X3pvb21fZ2V0KHdlYnZpZXcpOwotICAgIGN1cnJlbnRab29tTGV2ZWwgPSBuZWFyZXN0
X3pvb21fbGV2ZWxfZ2V0KGN1cnJlbnRab29tKTsKLSAgICBpbmZvKCJXZWJDb3JlIFpvb209JWYs
IGN1cnJlbnRab29tTGV2ZWw9JWQiLCBjdXJyZW50Wm9vbSwgY3VycmVudFpvb21MZXZlbCk7Ci19
Ci0KLXN0YXRpYyB2b2lkCi1vbl9sb2FkX2Vycm9yKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmpl
Y3QgKndlYnZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICAgY29uc3QgRXdrX0ZyYW1lX0xv
YWRfRXJyb3IgKmVyciA9IChjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciAqKWV2ZW50X2luZm87
Ci0gICAgY2hhciBtZXNzYWdlWzEwMjRdOwotICAgIHNucHJpbnRmKG1lc3NhZ2UsIDEwMjQsICI8
aHRtbD48Ym9keT48ZGl2IHN0eWxlPVwiY29sb3I6I2ZmMDAwMFwiPkVSUk9SITwvZGl2Pjxicj48
ZGl2PkNvZGU6ICVkPGJyPkRvbWFpbjogJXM8YnI+RGVzY3JpcHRpb246ICVzPGJyPlVSTDogJXM8
L2Rpdj48L2JvZHk8L2h0bWw+IiwKLSAgICAgICAgICAgICBlcnItPmNvZGUsIGVyci0+ZG9tYWlu
LCBlcnItPmRlc2NyaXB0aW9uLCBlcnItPmZhaWxpbmdfdXJsKTsKLSAgICBld2tfZnJhbWVfY29u
dGVudHNfc2V0KGVyci0+ZnJhbWUsIG1lc3NhZ2UsIDAsICJ0ZXh0L2h0bWwiLCAiVVRGLTgiLCBl
cnItPmZhaWxpbmdfdXJsKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX3Rvb2xiYXJzX3Zpc2libGVf
c2V0KHZvaWQqIHVzZXJfZGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2ZW50X2lu
Zm8pCi17Ci0gICAgRWluYV9Cb29sICp2aXNpYmxlID0gKEVpbmFfQm9vbCAqKWV2ZW50X2luZm87
Ci0gICAgaWYgKCp2aXNpYmxlKSB7Ci0gICAgICAgIGluZm8oIlRvb2xiYXJzIHZpc2libGUgY2hh
bmdlZDogc2hvdyIpOwotICAgICAgICB3aW5kb3dQcm9wZXJ0aWVzLnRvb2xiYXJzVmlzaWJsZSA9
IEVJTkFfVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbmZvKCJUb29sYmFycyB2aXNpYmxl
IGNoYW5nZWQ6IGhpZGUiKTsKLSAgICAgICAgd2luZG93UHJvcGVydGllcy50b29sYmFyc1Zpc2li
bGUgPSBFSU5BX0ZBTFNFOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLW9uX3Rvb2xiYXJzX3Zp
c2libGVfZ2V0KHZvaWQqIHVzZXJfZGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2
ZW50X2luZm8pCi17Ci0gICAgRWluYV9Cb29sICp2aXNpYmxlID0gKEVpbmFfQm9vbCAqKWV2ZW50
X2luZm87Ci0gICAgKnZpc2libGUgPSB3aW5kb3dQcm9wZXJ0aWVzLnRvb2xiYXJzVmlzaWJsZTsK
LX0KLQotc3RhdGljIHZvaWQKLW9uX3N0YXR1c2Jhcl92aXNpYmxlX3NldCh2b2lkKiB1c2VyX2Rh
dGEsIEV2YXNfT2JqZWN0KiB3ZWJ2aWV3LCB2b2lkKiBldmVudF9pbmZvKQotewotICAgIEVpbmFf
Qm9vbCAqdmlzaWJsZSA9IChFaW5hX0Jvb2wgKilldmVudF9pbmZvOwotICAgIGlmICgqdmlzaWJs
ZSkgewotICAgICAgICBpbmZvKCJTdGF0dXNiYXIgdmlzaWJsZSBjaGFuZ2VkOiBzaG93Iik7Ci0g
ICAgICAgIHdpbmRvd1Byb3BlcnRpZXMuc3RhdHVzYmFyVmlzaWJsZSA9IEVJTkFfVFJVRTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpbmZvKCJTdGF0dXNiYXIgdmlzaWJsZSBjaGFuZ2VkOiBoaWRl
Iik7Ci0gICAgICAgIHdpbmRvd1Byb3BlcnRpZXMuc3RhdHVzYmFyVmlzaWJsZSA9IEVJTkFfRkFM
U0U7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZAotb25fc3RhdHVzYmFyX3Zpc2libGVfZ2V0KHZv
aWQqIHVzZXJfZGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2ZW50X2luZm8pCi17
Ci0gICAgRWluYV9Cb29sICp2aXNpYmxlID0gKEVpbmFfQm9vbCAqKWV2ZW50X2luZm87Ci0gICAg
KnZpc2libGUgPSB3aW5kb3dQcm9wZXJ0aWVzLnN0YXR1c2JhclZpc2libGU7Ci19Ci0KLXN0YXRp
YyB2b2lkCi1vbl9zY3JvbGxiYXJzX3Zpc2libGVfc2V0KHZvaWQqIHVzZXJfZGF0YSwgRXZhc19P
YmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2ZW50X2luZm8pCi17Ci0gICAgRWluYV9Cb29sICp2aXNp
YmxlID0gKEVpbmFfQm9vbCAqKWV2ZW50X2luZm87Ci0gICAgaWYgKCp2aXNpYmxlKSB7Ci0gICAg
ICAgIGluZm8oIlNjcm9sbGJhcnMgdmlzaWJsZSBjaGFuZ2VkOiBzaG93Iik7Ci0gICAgICAgIHdp
bmRvd1Byb3BlcnRpZXMuc2Nyb2xsYmFyc1Zpc2libGUgPSBFSU5BX1RSVUU7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgaW5mbygiU2Nyb2xsYmFycyB2aXNpYmxlIGNoYW5nZWQ6IGhpZGUiKTsKLSAg
ICAgICAgd2luZG93UHJvcGVydGllcy5zY3JvbGxiYXJzVmlzaWJsZSA9IEVJTkFfRkFMU0U7Ci0g
ICAgfQotfQotCi1zdGF0aWMgdm9pZAotb25fc2Nyb2xsYmFyc192aXNpYmxlX2dldCh2b2lkKiB1
c2VyX2RhdGEsIEV2YXNfT2JqZWN0KiB3ZWJ2aWV3LCB2b2lkKiBldmVudF9pbmZvKQotewotICAg
IEVpbmFfQm9vbCAqdmlzaWJsZSA9IChFaW5hX0Jvb2wgKilldmVudF9pbmZvOwotICAgICp2aXNp
YmxlID0gd2luZG93UHJvcGVydGllcy5zY3JvbGxiYXJzVmlzaWJsZTsKLX0KLQotc3RhdGljIHZv
aWQKLW9uX21lbnViYXJfdmlzaWJsZV9zZXQodm9pZCogdXNlcl9kYXRhLCBFdmFzX09iamVjdCog
d2Vidmlldywgdm9pZCogZXZlbnRfaW5mbykKLXsKLSAgICBFaW5hX0Jvb2wgKnZpc2libGUgPSAo
RWluYV9Cb29sICopZXZlbnRfaW5mbzsKLSAgICBpZiAoKnZpc2libGUpIHsKLSAgICAgICAgaW5m
bygiTWVudWJhciB2aXNpYmxlIGNoYW5nZWQ6IHNob3ciKTsKLSAgICAgICAgd2luZG93UHJvcGVy
dGllcy5tZW51YmFyVmlzaWJsZSA9IEVJTkFfVFJVRTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
bmZvKCJNZW51YmFyIHZpc2libGUgY2hhbmdlZDogaGlkZSIpOwotICAgICAgICB3aW5kb3dQcm9w
ZXJ0aWVzLm1lbnViYXJWaXNpYmxlID0gRUlOQV9GQUxTRTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2
b2lkCi1vbl9tZW51YmFyX3Zpc2libGVfZ2V0KHZvaWQqIHVzZXJfZGF0YSwgRXZhc19PYmplY3Qq
IHdlYnZpZXcsIHZvaWQqIGV2ZW50X2luZm8pCi17Ci0gICAgRWluYV9Cb29sICp2aXNpYmxlID0g
KEVpbmFfQm9vbCAqKWV2ZW50X2luZm87Ci0gICAgKnZpc2libGUgPSB3aW5kb3dQcm9wZXJ0aWVz
Lm1lbnViYXJWaXNpYmxlOwotfQotCi1zdGF0aWMgdm9pZAotb25fdG9vbHRpcF90ZXh0X3NldCh2
b2lkKiB1c2VyX2RhdGEsIEV2YXNfT2JqZWN0KiB3ZWJ2aWV3LCB2b2lkKiBldmVudF9pbmZvKQot
ewotICAgIGNvbnN0IGNoYXIgKnRleHQgPSAoY29uc3QgY2hhciAqKWV2ZW50X2luZm87Ci0gICAg
aW5mbygiVG9vbHRpcCBpcyBzZXQ6ICVzIiwgdGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl90
b29sdGlwX3RleHRfdW5zZXQodm9pZCogdXNlcl9kYXRhLCBFdmFzX09iamVjdCogd2Vidmlldywg
dm9pZCogZXZlbnRfaW5mbykKLXsKLSAgICBpbmZvKCJUb29sdGlwIGlzIHVuc2V0Iik7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1vbl9pbnB1dG1ldGhvZF9jaGFuZ2VkKHZvaWQqIHVzZXJfZGF0YSwgRXZh
c19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2ZW50X2luZm8pCi17Ci0gICAgRWluYV9Cb29sIGFj
dGl2ZSA9IChFaW5hX0Jvb2wpKGxvbmcpZXZlbnRfaW5mbzsKLSAgICB1bnNpZ25lZCBpbnQgaW1o
OwotICAgIGluZm8oIktleWJvYXJkIGNoYW5nZWQ6ICVkIiwgYWN0aXZlKTsKLQotICAgIGlmICgh
YWN0aXZlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbWggPSBld2tfdmlld19pbWhfZ2V0KHdl
YnZpZXcpOwotICAgIGluZm8oIiAgICBLZXlib2FyZCBmbGFnczogJSMuMngiLCBpbWgpOwotCi19
Ci0KLXN0YXRpYyB2b2lkCi1vbl91cmxfY2hhbmdlZCh2b2lkKiB1c2VyX2RhdGEsIEV2YXNfT2Jq
ZWN0KiB3ZWJ2aWV3LCB2b2lkKiBldmVudF9pbmZvKQotewotICAgIEVMYXVuY2hlciAqYXBwID0g
KEVMYXVuY2hlciAqKXVzZXJfZGF0YTsKLSAgICB1cmxfYmFyX3VybF9zZXQoYXBwLT51cmxfYmFy
LCBld2tfdmlld191cmlfZ2V0KGFwcC0+YnJvd3NlcikpOwotfQotCi1zdGF0aWMgdm9pZAotb25f
bW91c2VfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogd2Vidmlldywgdm9p
ZCogZXZlbnRfaW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24gKmV2ID0gKEV2YXNf
RXZlbnRfTW91c2VfRG93biAqKWV2ZW50X2luZm87Ci0KLSAgICBpZiAoZXYtPmJ1dHRvbiA9PSAx
KQotICAgICAgICBldmFzX29iamVjdF9mb2N1c19zZXQod2VidmlldywgRUlOQV9UUlVFKTsKLSAg
ICBlbHNlIGlmIChldi0+YnV0dG9uID09IDIpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3Nl
dCh3ZWJ2aWV3LCAhZXZhc19vYmplY3RfZm9jdXNfZ2V0KHdlYnZpZXcpKTsKLX0KLQotc3RhdGlj
IHZvaWQKLW9uX2ZvY3VzX291dCh2b2lkICpkYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqb2Jq
LCB2b2lkICpldmVudF9pbmZvKQotewotICAgIGluZm8oInRoZSB3ZWJ2aWV3IGxvc3Qga2V5Ym9h
cmQgZm9jdXMiKTsKLX0KLQotc3RhdGljIHZvaWQKLW9uX2ZvY3VzX2luKHZvaWQgKmRhdGEsIEV2
YXMgKmUsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCi17Ci0gICAgaW5mbygi
dGhlIHdlYnZpZXcgZ2FpbmVkIGtleWJvYXJkIGZvY3VzIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1v
bl9rZXlfZG93bih2b2lkICpkYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpl
dmVudF9pbmZvKQotewotICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24gKmV2ID0gKEV2YXNfRXZlbnRf
S2V5X0Rvd24qKSBldmVudF9pbmZvOwotICAgIEVMYXVuY2hlciAqYXBwID0gZGF0YTsKLSAgICBz
dGF0aWMgY29uc3QgY2hhciAqZW5jb2RpbmdzW10gPSB7Ci0gICAgICAgICJJU08tODg1OS0xIiwK
LSAgICAgICAgIlVURi04IiwKLSAgICAgICAgTlVMTAotICAgIH07Ci0gICAgc3RhdGljIGludCBj
dXJyZW50RW5jb2RpbmcgPSAtMTsKLSAgICBjb25zdCBFdmFzX01vZGlmaWVyICptb2QgPSBldmFz
X2tleV9tb2RpZmllcl9nZXQoZSk7Ci0gICAgRWluYV9Cb29sIGN0cmxQcmVzc2VkID0gZXZhc19r
ZXlfbW9kaWZpZXJfaXNfc2V0KG1vZCwgIkNvbnRyb2wiKTsKLSAgICBFaW5hX0Jvb2wgYWx0UHJl
c3NlZCA9IGV2YXNfa2V5X21vZGlmaWVyX2lzX3NldChtb2QsICJBbHQiKTsKLQotICAgIGlmICgh
c3RyY21wKGV2LT5rZXksICJFc2NhcGUiKSkgewotICAgICAgICBjbG9zZVdpbmRvdyhhcHAtPmVl
KTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgIkxlZnQiKSAmJiBhbHRQcmVzc2Vk
KSB7Ci0gICAgICAgIGluZm8oIkJhY2sgKEFsdCtMZWZ0KSB3YXMgcHJlc3NlZCIpOwotICAgICAg
ICBpZiAoZXdrX3ZpZXdfYmFja19wb3NzaWJsZShvYmopKSB7Ci0gICAgICAgICAgICBFd2tfSGlz
dG9yeSAqaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KG9iaik7Ci0gICAgICAgICAgICBF
aW5hX0xpc3QgKmxpc3QgPSBld2tfaGlzdG9yeV9iYWNrX2xpc3RfZ2V0KGhpc3RvcnkpOwotICAg
ICAgICAgICAgcHJpbnRfaGlzdG9yeShsaXN0LCBlKTsKLSAgICAgICAgICAgIGV3a19oaXN0b3J5
X2l0ZW1fbGlzdF9mcmVlKGxpc3QpOwotICAgICAgICAgICAgZXdrX3ZpZXdfYmFjayhvYmopOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8oIkJhY2sgaWdub3JlZDogTm8gYmFjayBo
aXN0b3J5Iik7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGV2LT5rZXksICJSaWdodCIpICYmIGFs
dFByZXNzZWQpIHsKLSAgICAgICAgaW5mbygiRm9yd2FyZCAoQWx0K1JpZ2h0KSB3YXMgcHJlc3Nl
ZCIpOwotICAgICAgICBpZiAoZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShvYmopKSB7Ci0gICAg
ICAgICAgICBFd2tfSGlzdG9yeSAqaGlzdG9yeSA9IGV3a192aWV3X2hpc3RvcnlfZ2V0KG9iaik7
Ci0gICAgICAgICAgICBFaW5hX0xpc3QgKmxpc3QgPSBld2tfaGlzdG9yeV9mb3J3YXJkX2xpc3Rf
Z2V0KGhpc3RvcnkpOwotICAgICAgICAgICAgcHJpbnRfaGlzdG9yeShsaXN0LCBlKTsKLSAgICAg
ICAgICAgIGV3a19oaXN0b3J5X2l0ZW1fbGlzdF9mcmVlKGxpc3QpOwotICAgICAgICAgICAgZXdr
X3ZpZXdfZm9yd2FyZChvYmopOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGluZm8oIkZv
cndhcmQgaWdub3JlZDogTm8gZm9yd2FyZCBoaXN0b3J5Iik7Ci0gICAgfSBlbHNlIGlmICghc3Ry
Y21wKGV2LT5rZXksICJGMyIpKSB7Ci0gICAgICAgIGN1cnJlbnRFbmNvZGluZysrOwotICAgICAg
ICBjdXJyZW50RW5jb2RpbmcgJT0gKHNpemVvZihlbmNvZGluZ3MpIC8gc2l6ZW9mKGVuY29kaW5n
c1swXSkpOwotICAgICAgICBpbmZvKCJTZXQgZW5jb2RpbmcgKEYzKSBwcmVzc2VkLiBOZXcgZW5j
b2RpbmcgdG8gJXMiLCBlbmNvZGluZ3NbY3VycmVudEVuY29kaW5nXSk7Ci0gICAgICAgIGV3a192
aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX3NldChvYmosIGVuY29kaW5nc1tjdXJyZW50RW5j
b2RpbmddKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgIkY0IikpIHsKLSAgICAg
ICAgRXZhc19PYmplY3QgKmZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQob2JqKTsKLSAg
ICAgICAgRXZhc19Db29yZCB4LCB5OwotICAgICAgICBFd2tfSGl0X1Rlc3QgKmh0OwotCi0gICAg
ICAgIGV2YXNfcG9pbnRlcl9jYW52YXNfeHlfZ2V0KGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG9iaiks
ICZ4LCAmeSk7Ci0gICAgICAgIGh0ID0gZXdrX2ZyYW1lX2hpdF90ZXN0X25ldyhmcmFtZSwgeCwg
eSk7Ci0gICAgICAgIGlmICghaHQpCi0gICAgICAgICAgICBwcmludGYoIk5vIGhpdCB0ZXN0IHJl
dHVybmVkIGZvciBwb2ludCAlZCwlZFxuIiwgeCwgeSk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgcHJpbnRmKCJIaXQgdGVzdCBmb3IgcG9pbnQgJWQsJWRcbiIKLSAgICAgICAgICAgICAg
ICAgICAiICBwb3M9JTNkLCUzZFxuIgotICAgICAgICAgICAgICAgICAgICIgIGJvdW5kaW5nX2Jv
eD0lZCwlZCArICVkeCVkXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgdGl0bGU9JyVzJ1xuIgot
ICAgICAgICAgICAgICAgICAgICIgIGFsdGVybmF0ZV90ZXh0PSclcydcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICBmcmFtZT0lcCAoJXMpXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgbGluayB7
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICB0ZXh0PSclcydcbiIKLSAgICAgICAgICAgICAg
ICAgICAiICAgIHVybD0nJXMnXG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICB0aXRsZT0nJXMn
XG4iCi0gICAgICAgICAgICAgICAgICAgIiAgICB0YXJnZXQgZnJhbWU9JXAgKCVzKVxuIgotICAg
ICAgICAgICAgICAgICAgICIgIH1cbiIKLSAgICAgICAgICAgICAgICAgICAiY29udGV4dDpcbiIK
LSAgICAgICAgICAgICAgICAgICAiJXMiCi0gICAgICAgICAgICAgICAgICAgIiVzIgotICAgICAg
ICAgICAgICAgICAgICIlcyIKLSAgICAgICAgICAgICAgICAgICAiJXMiCi0gICAgICAgICAgICAg
ICAgICAgIiVzXG4iLAotICAgICAgICAgICAgICAgICAgIHgsIHksCi0gICAgICAgICAgICAgICAg
ICAgaHQtPngsIGh0LT55LAotICAgICAgICAgICAgICAgICAgIGh0LT5ib3VuZGluZ19ib3gueCwg
aHQtPmJvdW5kaW5nX2JveC55LCBodC0+Ym91bmRpbmdfYm94LncsIGh0LT5ib3VuZGluZ19ib3gu
aCwKLSAgICAgICAgICAgICAgICAgICBodC0+dGl0bGUuc3RyaW5nLAotICAgICAgICAgICAgICAg
ICAgIGh0LT5hbHRlcm5hdGVfdGV4dCwKLSAgICAgICAgICAgICAgICAgICBodC0+ZnJhbWUsIGV2
YXNfb2JqZWN0X25hbWVfZ2V0KGh0LT5mcmFtZSksCi0gICAgICAgICAgICAgICAgICAgaHQtPmxp
bmsudGV4dCwKLSAgICAgICAgICAgICAgICAgICBodC0+bGluay51cmwsCi0gICAgICAgICAgICAg
ICAgICAgaHQtPmxpbmsudGl0bGUsCi0gICAgICAgICAgICAgICAgICAgaHQtPmxpbmsudGFyZ2V0
X2ZyYW1lLCBldmFzX29iamVjdF9uYW1lX2dldChodC0+bGluay50YXJnZXRfZnJhbWUpLAotICAg
ICAgICAgICAgICAgICAgIGh0LT5jb250ZXh0ICYgRVdLX0hJVF9URVNUX1JFU1VMVF9DT05URVhU
X0xJTksgPyAiICBMSU5LXG4iIDogIiIsCi0gICAgICAgICAgICAgICAgICAgaHQtPmNvbnRleHQg
JiBFV0tfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfSU1BR0UgPyAiICBJTUFHRVxuIiA6ICIiLAot
ICAgICAgICAgICAgICAgICAgIGh0LT5jb250ZXh0ICYgRVdLX0hJVF9URVNUX1JFU1VMVF9DT05U
RVhUX01FRElBID8gIiAgIE1FRElBXG4iIDogIiIsCi0gICAgICAgICAgICAgICAgICAgaHQtPmNv
bnRleHQgJiBFV0tfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfU0VMRUNUSU9OID8gIiAgU0VMRUNU
SU9OXG4iIDogIiIsCi0gICAgICAgICAgICAgICAgICAgaHQtPmNvbnRleHQgJiBFV0tfSElUX1RF
U1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEUgPyAiICBFRElUQUJMRSIgOiAiIik7Ci0gICAgICAg
ICAgICBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShodCk7Ci0gICAgICAgIH0KLQotICAgIH0gZWxz
ZSBpZiAoIXN0cmNtcChldi0+a2V5LCAiRjUiKSkgewotICAgICAgICBpbmZvKCJSZWxvYWQgKEY1
KSB3YXMgcHJlc3NlZCwgcmVsb2FkaW5nLiIpOwotICAgICAgICBld2tfdmlld19yZWxvYWQob2Jq
KTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgIkY2IikpIHsKLSAgICAgICAgaW5m
bygiU3RvcCAoRjYpIHdhcyBwcmVzc2VkLCBzdG9wIGxvYWRpbmcuIik7Ci0gICAgICAgIGV3a192
aWV3X3N0b3Aob2JqKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgIkYxMiIpKSB7
Ci0gICAgICAgIEVpbmFfQm9vbCBzdGF0dXMgPSBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2
aWdhdGlvbl9nZXQob2JqKTsKLSAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmln
YXRpb25fc2V0KG9iaiwgIXN0YXR1cyk7Ci0gICAgICAgIGluZm8oIkNvbW1hbmQ6OmtleWJvYXJk
IG5hdmlnYXRpb24gdG9nZ2xlIik7Ci0gICAgfSBlbHNlIGlmICgoIXN0cmNtcChldi0+a2V5LCAi
bWludXMiKSB8fCAhc3RyY21wKGV2LT5rZXksICJLUF9TdWJ0cmFjdCIpKSAmJiBjdHJsUHJlc3Nl
ZCkgewotICAgICAgICBpZiAoY3VycmVudFpvb21MZXZlbCA+IE1JTl9aT09NX0xFVkVMICYmIHpv
b21fbGV2ZWxfc2V0KG9iaiwgY3VycmVudFpvb21MZXZlbCAtIDEpKQotICAgICAgICAgICAgY3Vy
cmVudFpvb21MZXZlbC0tOwotICAgICAgICBpbmZvKCJab29tIG91dCAoQ3RybCArICctJykgd2Fz
IHByZXNzZWQsIHpvb20gbGV2ZWwgYmVjYW1lICUuMmYiLCB6b29tTGV2ZWxzW2N1cnJlbnRab29t
TGV2ZWxdIC8gMTAwLjApOwotICAgIH0gZWxzZSBpZiAoKCFzdHJjbXAoZXYtPmtleSwgImVxdWFs
IikgfHwgIXN0cmNtcChldi0+a2V5LCAiS1BfQWRkIikpICYmIGN0cmxQcmVzc2VkKSB7Ci0gICAg
ICAgIGlmIChjdXJyZW50Wm9vbUxldmVsIDwgTUFYX1pPT01fTEVWRUwgJiYgem9vbV9sZXZlbF9z
ZXQob2JqLCBjdXJyZW50Wm9vbUxldmVsICsgMSkpCi0gICAgICAgICAgICBjdXJyZW50Wm9vbUxl
dmVsKys7Ci0gICAgICAgIGluZm8oIlpvb20gaW4gKEN0cmwgKyAnKycpIHdhcyBwcmVzc2VkLCB6
b29tIGxldmVsIGJlY2FtZSAlLjJmIiwgem9vbUxldmVsc1tjdXJyZW50Wm9vbUxldmVsXSAvIDEw
MC4wKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgIjAiKSAmJiBjdHJsUHJlc3Nl
ZCkgewotICAgICAgICBpZiAoem9vbV9sZXZlbF9zZXQob2JqLCBERUZBVUxUX1pPT01fTEVWRUwp
KQotICAgICAgICAgICAgY3VycmVudFpvb21MZXZlbCA9IERFRkFVTFRfWk9PTV9MRVZFTDsKLSAg
ICAgICAgaW5mbygiWm9vbSB0byBkZWZhdWx0IChDdHJsICsgJzAnKSB3YXMgcHJlc3NlZCwgem9v
bSBsZXZlbCBiZWNhbWUgJS4yZiIsIHpvb21MZXZlbHNbY3VycmVudFpvb21MZXZlbF0gLyAxMDAu
MCk7Ci0gICAgfSBlbHNlIGlmICghc3RyY21wKGV2LT5rZXksICJuIikgJiYgY3RybFByZXNzZWQp
IHsKLSAgICAgICAgaW5mbygiQ3JlYXRlIG5ldyB3aW5kb3cgKEN0cmwrbikgd2FzIHByZXNzZWQu
Iik7Ci0gICAgICAgIGJyb3dzZXJDcmVhdGUoImh0dHA6Ly93d3cuZ29vZ2xlLmNvbSIsIGFwcC0+
dXNlckFyZ3MpOwotICAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5LCAiZCIpICYmIGN0cmxQ
cmVzc2VkKSB7Ci0gICAgICAgIGluZm8oIlJlbmRlciBzdXNwZW5kZWQiKTsKLSAgICAgICAgZXdr
X3ZpZXdfZGlzYWJsZV9yZW5kZXIob2JqKTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtl
eSwgImUiKSAmJiBjdHJsUHJlc3NlZCkgewotICAgICAgICBpbmZvKCJSZW5kZXIgcmVzdW1lZCIp
OwotICAgICAgICBld2tfdmlld19lbmFibGVfcmVuZGVyKG9iaik7Ci0gICAgfSBlbHNlIGlmICgh
c3RyY21wKGV2LT5rZXksICJzIikgJiYgY3RybFByZXNzZWQpIHsKLSAgICAgICAgRXZhc19PYmpl
Y3QgKmZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQob2JqKTsKLSAgICAgICAgRXdrX1Nl
Y3VyaXR5X09yaWdpbiAqb3JpZ2luID0gZXdrX2ZyYW1lX3NlY3VyaXR5X29yaWdpbl9nZXQoZnJh
bWUpOwotICAgICAgICBwcmludGYoIlNlY3VyaXR5IG9yaWdpbiBpbmZvcm1hdGlvbjpcbiIKLSAg
ICAgICAgICAgICAgICIgIHByb3RvY29sPSVzXG4iCi0gICAgICAgICAgICAgICAiICBob3N0PSVz
XG4iCi0gICAgICAgICAgICAgICAiICBwb3J0PSVkXG4iCi0gICAgICAgICAgICAgICAiICB3ZWIg
ZGF0YWJhc2UgcXVvdGE9JSIgUFJJdTY0ICJcbiIsCi0gICAgICAgICAgICAgICBld2tfc2VjdXJp
dHlfb3JpZ2luX3Byb3RvY29sX2dldChvcmlnaW4pLAotICAgICAgICAgICAgICAgZXdrX3NlY3Vy
aXR5X29yaWdpbl9ob3N0X2dldChvcmlnaW4pLAotICAgICAgICAgICAgICAgZXdrX3NlY3VyaXR5
X29yaWdpbl9wb3J0X2dldChvcmlnaW4pLAotICAgICAgICAgICAgICAgZXdrX3NlY3VyaXR5X29y
aWdpbl93ZWJfZGF0YWJhc2VfcXVvdGFfZ2V0KG9yaWdpbikpOwotCi0gICAgICAgIEVpbmFfTGlz
dCAqZGF0YWJhc2VMaXN0ID0gZXdrX3NlY3VyaXR5X29yaWdpbl93ZWJfZGF0YWJhc2VfZ2V0X2Fs
bChvcmlnaW4pOwotICAgICAgICBFaW5hX0xpc3QgKmxpc3RJdGVyYXRvciA9IDA7Ci0gICAgICAg
IEV3a19XZWJfRGF0YWJhc2UgKmRhdGFiYXNlOwotICAgICAgICBFSU5BX0xJU1RfRk9SRUFDSChk
YXRhYmFzZUxpc3QsIGxpc3RJdGVyYXRvciwgZGF0YWJhc2UpCi0gICAgICAgICAgICBwcmludGYo
IkRhdGFiYXNlIGluZm9ybWF0aW9uOlxuIgotICAgICAgICAgICAgICAgICAgICIgIG5hbWU9JXNc
biIKLSAgICAgICAgICAgICAgICAgICAiICBkaXNwbGF5IG5hbWU9JXNcbiIKLSAgICAgICAgICAg
ICAgICAgICAiICBmaWxlbmFtZT0lc1xuIgotICAgICAgICAgICAgICAgICAgICIgIGV4cGVjdGVk
IHNpemU9JSIgUFJJdTY0ICJcbiIKLSAgICAgICAgICAgICAgICAgICAiICBzaXplPSUiIFBSSXU2
NCAiXG4iLAotICAgICAgICAgICAgICAgICAgIGV3a193ZWJfZGF0YWJhc2VfbmFtZV9nZXQoZGF0
YWJhc2UpLAotICAgICAgICAgICAgICAgICAgIGV3a193ZWJfZGF0YWJhc2VfZGlzcGxheV9uYW1l
X2dldChkYXRhYmFzZSksCi0gICAgICAgICAgICAgICAgICAgZXdrX3dlYl9kYXRhYmFzZV9maWxl
bmFtZV9nZXQoZGF0YWJhc2UpLAotICAgICAgICAgICAgICAgICAgIGV3a193ZWJfZGF0YWJhc2Vf
ZXhwZWN0ZWRfc2l6ZV9nZXQoZGF0YWJhc2UpLAotICAgICAgICAgICAgICAgICAgIGV3a193ZWJf
ZGF0YWJhc2Vfc2l6ZV9nZXQoZGF0YWJhc2UpKTsKLQotICAgICAgICBld2tfc2VjdXJpdHlfb3Jp
Z2luX2ZyZWUob3JpZ2luKTsKLSAgICAgICAgZXdrX3dlYl9kYXRhYmFzZV9saXN0X2ZyZWUoZGF0
YWJhc2VMaXN0KTsKLSAgICB9IGVsc2UgaWYgKCFzdHJjbXAoZXYtPmtleSwgImkiKSAmJiBjdHJs
UHJlc3NlZCkgewotICAgICAgICBFdmFzX09iamVjdCAqaW5zcGVjdG9yX3ZpZXcgPSBld2tfdmll
d19pbnNwZWN0b3Jfdmlld19nZXQob2JqKTsKLSAgICAgICAgaWYgKGluc3BlY3Rvcl92aWV3KSB7
Ci0gICAgICAgICAgICBpbmZvKCJXZWIgSW5zcGVjdG9yIGNsb3NlIik7Ci0gICAgICAgICAgICBl
d2tfdmlld19pbnNwZWN0b3JfY2xvc2Uob2JqKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGluZm8oIldlYiBJbnNwZWN0b3Igc2hvdyIpOwotICAgICAgICAgICAgZXdrX3ZpZXdfaW5z
cGVjdG9yX3Nob3cob2JqKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIHZvaWQKLW9u
X2Jyb3dzZXJfZGVsKHZvaWQgKmRhdGEsIEV2YXMgKmV2YXMsIEV2YXNfT2JqZWN0ICpicm93c2Vy
LCB2b2lkICpldmVudCkKLXsKLSAgICBFTGF1bmNoZXIgKmFwcCA9IChFTGF1bmNoZXIqKSBkYXRh
OwotCi0gICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKGFwcC0+YnJvd3NlciwgRVZB
U19DQUxMQkFDS19LRVlfRE9XTiwgb25fa2V5X2Rvd24pOwotICAgIGV2YXNfb2JqZWN0X2V2ZW50
X2NhbGxiYWNrX2RlbChhcHAtPmJyb3dzZXIsIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwgb25f
bW91c2VfZG93bik7Ci0gICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKGFwcC0+YnJv
d3NlciwgRVZBU19DQUxMQkFDS19GT0NVU19JTiwgb25fZm9jdXNfaW4pOwotICAgIGV2YXNfb2Jq
ZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChhcHAtPmJyb3dzZXIsIEVWQVNfQ0FMTEJBQ0tfRk9DVVNf
T1VULCBvbl9mb2N1c19vdXQpOwotICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbChh
cHAtPmJyb3dzZXIsIEVWQVNfQ0FMTEJBQ0tfREVMLCBvbl9icm93c2VyX2RlbCk7Ci19Ci0KLXN0
YXRpYyB2b2lkCi1vbl9pbnNwZWN0b3Jfdmlld19jcmVhdGUodm9pZCAqdXNlcl9kYXRhLCBFdmFz
X09iamVjdCAqd2Vidmlldywgdm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgICBFTGF1bmNoZXIgKmFw
cF9icm93c2VyID0gKEVMYXVuY2hlciAqKXVzZXJfZGF0YTsKLQotICAgIHdlYkluc3BlY3RvckNy
ZWF0ZShhcHBfYnJvd3Nlcik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vbl9pbnNwZWN0b3Jfdmlld19j
bG9zZSh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICp3ZWJ2aWV3LCB2b2lkICpldmVudF9p
bmZvKQotewotICAgIEVpbmFfTGlzdCAqbDsKLSAgICB2b2lkICphcHA7Ci0gICAgRUxhdW5jaGVy
ICphcHBfYnJvd3NlciA9IChFTGF1bmNoZXIgKil1c2VyX2RhdGE7Ci0gICAgRXZhc19PYmplY3Qg
Kmluc3BlY3Rvcl92aWV3ID0gKEV2YXNfT2JqZWN0ICopZXZlbnRfaW5mbzsKLQotICAgIGV3a192
aWV3X2luc3BlY3Rvcl92aWV3X3NldChhcHBfYnJvd3Nlci0+YnJvd3NlciwgTlVMTCk7Ci0KLSAg
ICBFSU5BX0xJU1RfRk9SRUFDSCh3aW5kb3dzLCBsLCBhcHApCi0gICAgICAgIGlmICgoKEVMYXVu
Y2hlciAqKWFwcCktPmJyb3dzZXIgPT0gaW5zcGVjdG9yX3ZpZXcpCi0gICAgICAgICAgICBicmVh
azsKLQotICAgIHdpbmRvd3MgPSBlaW5hX2xpc3RfcmVtb3ZlKHdpbmRvd3MsIGFwcCk7Ci0gICAg
d2luZG93RGVzdHJveSgoKEVMYXVuY2hlciAqKWFwcCktPmVlKTsKLSAgICBmcmVlKGFwcCk7Ci19
Ci0KLXN0YXRpYyB2b2lkCi1vbl9pbnNwZWN0b3Jfdmlld19kZXN0cm95ZWQoRWNvcmVfRXZhcyAq
ZWUpCi17Ci0gICAgRUxhdW5jaGVyICphcHA7Ci0KLSAgICBhcHAgPSBmaW5kX2FwcF9mcm9tX2Vl
KGVlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGFwcC0+YnJvd3Nlciwg
Imluc3BlY3Rvcix2aWV3LGRlc3Ryb3kiLCBOVUxMKTsKLX0KLQotc3RhdGljIGludAotcXVpdChF
aW5hX0Jvb2wgc3VjY2VzcywgY29uc3QgY2hhciAqbXNnKQotewotICAgIGVkamVfc2h1dGRvd24o
KTsKLSAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7Ci0gICAgZWNvcmVfZmlsZV9zaHV0ZG93bigp
OwotCi0gICAgaWYgKG1zZykKLSAgICAgICAgZnB1dHMobXNnLCAoc3VjY2VzcykgPyBzdGRvdXQg
OiBzdGRlcnIpOwotCi0gICAgaWYgKHRoZW1lUGF0aCkgewotICAgICAgICBmcmVlKHRoZW1lUGF0
aCk7Ci0gICAgICAgIHRoZW1lUGF0aCA9IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFzdWNjZXNz
KQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotCi0gICAgcmV0dXJuIEVYSVRfU1VDQ0VT
UzsKLX0KLQotc3RhdGljIGludAotYnJvd3NlckNyZWF0ZShjb25zdCBjaGFyICp1cmwsIFVzZXJf
QXJndW1lbnRzICp1c2VyQXJncykKLXsKLSAgICBFTGF1bmNoZXIgKmFwcEJyb3dzZXIgPSB3aW5k
b3dDcmVhdGUodXNlckFyZ3MpOwotICAgIGlmICghYXBwQnJvd3NlcikKLSAgICAgICAgcmV0dXJu
IHF1aXQoRUlOQV9GQUxTRSwgIkVSUk9SOiBjb3VsZCBub3QgY3JlYXRlIGEgYnJvd3NlciB3aW5k
b3dcbiIpOwotCi0gICAgZWNvcmVfZXZhc190aXRsZV9zZXQoYXBwQnJvd3Nlci0+ZWUsICJFRkwg
VGVzdCBMYXVuY2hlciIpOwotICAgIGVjb3JlX2V2YXNfY2FsbGJhY2tfcmVzaXplX3NldChhcHBC
cm93c2VyLT5lZSwgb25fYnJvd3Nlcl9lY29yZV9ldmFzX3Jlc2l6ZSk7Ci0gICAgZWNvcmVfZXZh
c19jYWxsYmFja19kZWxldGVfcmVxdWVzdF9zZXQoYXBwQnJvd3Nlci0+ZWUsIGNsb3NlV2luZG93
KTsKLQotICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KGFwcEJyb3dzZXItPmJyb3dzZXIsICJicm93
c2VyIik7Ci0KLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwQnJvd3Nlci0+
YnJvd3NlciwgImlucHV0bWV0aG9kLGNoYW5nZWQiLCBvbl9pbnB1dG1ldGhvZF9jaGFuZ2VkLCBh
cHBCcm93c2VyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwQnJvd3Nl
ci0+YnJvd3NlciwgImluc3BlY3Rvcix2aWV3LGNsb3NlIiwgb25faW5zcGVjdG9yX3ZpZXdfY2xv
c2UsIGFwcEJyb3dzZXIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHBC
cm93c2VyLT5icm93c2VyLCAiaW5zcGVjdG9yLHZpZXcsY3JlYXRlIiwgb25faW5zcGVjdG9yX3Zp
ZXdfY3JlYXRlLCBhcHBCcm93c2VyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQoYXBwQnJvd3Nlci0+YnJvd3NlciwgImxvYWQsZXJyb3IiLCBvbl9sb2FkX2Vycm9yLCBhcHBC
cm93c2VyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwQnJvd3Nlci0+
YnJvd3NlciwgImxvYWQsZmluaXNoZWQiLCBvbl9sb2FkX2ZpbmlzaGVkLCBhcHBCcm93c2VyKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwQnJvd3Nlci0+YnJvd3Nlciwg
ImxvYWQscHJvZ3Jlc3MiLCBvbl9wcm9ncmVzcywgYXBwQnJvd3Nlcik7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFwcEJyb3dzZXItPmJyb3dzZXIsICJtZW51YmFyLHZpc2li
bGUsZ2V0Iiwgb25fbWVudWJhcl92aXNpYmxlX2dldCwgYXBwQnJvd3Nlcik7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFwcEJyb3dzZXItPmJyb3dzZXIsICJtZW51YmFyLHZp
c2libGUsc2V0Iiwgb25fbWVudWJhcl92aXNpYmxlX3NldCwgYXBwQnJvd3Nlcik7Ci0gICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFwcEJyb3dzZXItPmJyb3dzZXIsICJzY3JvbGxi
YXJzLHZpc2libGUsZ2V0Iiwgb25fc2Nyb2xsYmFyc192aXNpYmxlX2dldCwgYXBwQnJvd3Nlcik7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFwcEJyb3dzZXItPmJyb3dzZXIs
ICJzY3JvbGxiYXJzLHZpc2libGUsc2V0Iiwgb25fc2Nyb2xsYmFyc192aXNpYmxlX3NldCwgYXBw
QnJvd3Nlcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFwcEJyb3dzZXIt
PmJyb3dzZXIsICJzdGF0dXNiYXIsdmlzaWJsZSxnZXQiLCBvbl9zdGF0dXNiYXJfdmlzaWJsZV9n
ZXQsIGFwcEJyb3dzZXIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHBC
cm93c2VyLT5icm93c2VyLCAic3RhdHVzYmFyLHZpc2libGUsc2V0Iiwgb25fc3RhdHVzYmFyX3Zp
c2libGVfc2V0LCBhcHBCcm93c2VyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQoYXBwQnJvd3Nlci0+YnJvd3NlciwgInRpdGxlLGNoYW5nZWQiLCBvbl90aXRsZV9jaGFuZ2Vk
LCBhcHBCcm93c2VyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwQnJv
d3Nlci0+YnJvd3NlciwgInRvb2xiYXJzLHZpc2libGUsZ2V0Iiwgb25fdG9vbGJhcnNfdmlzaWJs
ZV9nZXQsIGFwcEJyb3dzZXIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChh
cHBCcm93c2VyLT5icm93c2VyLCAidG9vbGJhcnMsdmlzaWJsZSxzZXQiLCBvbl90b29sYmFyc192
aXNpYmxlX3NldCwgYXBwQnJvd3Nlcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKGFwcEJyb3dzZXItPmJyb3dzZXIsICJ0b29sdGlwLHRleHQsc2V0Iiwgb25fdG9vbHRpcF90
ZXh0X3NldCwgYXBwQnJvd3Nlcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KGFwcEJyb3dzZXItPmJyb3dzZXIsICJ0b29sdGlwLHRleHQsdW5zZXQiLCBvbl90b29sdGlwX3Rl
eHRfdW5zZXQsIGFwcEJyb3dzZXIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Fk
ZChhcHBCcm93c2VyLT5icm93c2VyLCAidXJpLGNoYW5nZWQiLCBvbl91cmxfY2hhbmdlZCwgYXBw
QnJvd3Nlcik7Ci0KLSAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoYXBwQnJvd3Nl
ci0+YnJvd3NlciwgRVZBU19DQUxMQkFDS19ERUwsIG9uX2Jyb3dzZXJfZGVsLCBhcHBCcm93c2Vy
KTsKLSAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoYXBwQnJvd3Nlci0+YnJvd3Nl
ciwgRVZBU19DQUxMQkFDS19GT0NVU19JTiwgb25fZm9jdXNfaW4sIGFwcEJyb3dzZXIpOwotICAg
IGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChhcHBCcm93c2VyLT5icm93c2VyLCBFVkFT
X0NBTExCQUNLX0ZPQ1VTX09VVCwgb25fZm9jdXNfb3V0LCBhcHBCcm93c2VyKTsKLSAgICBldmFz
X29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoYXBwQnJvd3Nlci0+YnJvd3NlciwgRVZBU19DQUxM
QkFDS19LRVlfRE9XTiwgb25fa2V5X2Rvd24sIGFwcEJyb3dzZXIpOwotICAgIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2FkZChhcHBCcm93c2VyLT5icm93c2VyLCBFVkFTX0NBTExCQUNLX01P
VVNFX0RPV04sIG9uX21vdXNlX2Rvd24sIGFwcEJyb3dzZXIpOwotCi0gICAgZXdrX3ZpZXdfc2V0
dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQoYXBwQnJvd3Nlci0+YnJvd3NlciwgRUlO
QV9UUlVFKTsKLQotICAgIGFwcEJyb3dzZXItPnVybF9iYXIgPSB1cmxfYmFyX2FkZChhcHBCcm93
c2VyLT5icm93c2VyLCBERUZBVUxUX1dJRFRIKTsKLQotICAgIGV2YXNfb2JqZWN0X21vdmUoYXBw
QnJvd3Nlci0+YnJvd3NlciwgMCwgVVJMX0JBUl9IRUlHSFQpOwotICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShhcHBCcm93c2VyLT5icm93c2VyLCB1c2VyQXJncy0+Z2VvbWV0cnkudywgdXNlckFyZ3Mt
Pmdlb21ldHJ5LmggLSBVUkxfQkFSX0hFSUdIVCk7Ci0KLSAgICBld2tfdmlld191cmlfc2V0KGFw
cEJyb3dzZXItPmJyb3dzZXIsIHVybCk7Ci0KLSAgICBldmFzX29iamVjdF9zaG93KGFwcEJyb3dz
ZXItPmJyb3dzZXIpOwotICAgIGVjb3JlX2V2YXNfc2hvdyhhcHBCcm93c2VyLT5lZSk7Ci0KLSAg
ICBldmFzX29iamVjdF9mb2N1c19zZXQoYXBwQnJvd3Nlci0+YnJvd3NlciwgRUlOQV9UUlVFKTsK
LQotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgaW50Ci13ZWJJbnNwZWN0b3JDcmVhdGUoRUxh
dW5jaGVyICphcHBCcm93c2VyKQotewotICAgIEVMYXVuY2hlciAqYXBwSW5zcGVjdG9yID0gd2lu
ZG93Q3JlYXRlKGFwcEJyb3dzZXItPnVzZXJBcmdzKTsKLSAgICBpZiAoIWFwcEluc3BlY3RvcikK
LSAgICAgICAgcmV0dXJuIHF1aXQoRUlOQV9GQUxTRSwgIkVSUk9SOiBjb3VsZCBub3QgY3JlYXRl
IGFuIGluc3BlY3RvciB3aW5kb3dcbiIpOwotCi0gICAgZWNvcmVfZXZhc190aXRsZV9zZXQoYXBw
SW5zcGVjdG9yLT5lZSwgIldlYiBJbnNwZWN0b3IiKTsKLSAgICBlY29yZV9ldmFzX2NhbGxiYWNr
X3Jlc2l6ZV9zZXQoYXBwSW5zcGVjdG9yLT5lZSwgb25faW5zcGVjdG9yX2Vjb3JlX2V2YXNfcmVz
aXplKTsKLSAgICBlY29yZV9ldmFzX2NhbGxiYWNrX2RlbGV0ZV9yZXF1ZXN0X3NldChhcHBJbnNw
ZWN0b3ItPmVlLCBvbl9pbnNwZWN0b3Jfdmlld19kZXN0cm95ZWQpOwotCi0gICAgZXZhc19vYmpl
Y3RfbmFtZV9zZXQoYXBwSW5zcGVjdG9yLT5icm93c2VyLCAiaW5zcGVjdG9yIik7Ci0KLSAgICBl
dmFzX29iamVjdF9tb3ZlKGFwcEluc3BlY3Rvci0+YnJvd3NlciwgMCwgMCk7Ci0gICAgZXZhc19v
YmplY3RfcmVzaXplKGFwcEluc3BlY3Rvci0+YnJvd3NlciwgYXBwSW5zcGVjdG9yLT51c2VyQXJn
cy0+Z2VvbWV0cnkudywgYXBwSW5zcGVjdG9yLT51c2VyQXJncy0+Z2VvbWV0cnkuaCk7Ci0KLSAg
ICBldmFzX29iamVjdF9zaG93KGFwcEluc3BlY3Rvci0+YnJvd3Nlcik7Ci0gICAgZWNvcmVfZXZh
c19zaG93KGFwcEluc3BlY3Rvci0+ZWUpOwotCi0gICAgZXZhc19vYmplY3RfZm9jdXNfc2V0KGFw
cEluc3BlY3Rvci0+YnJvd3NlciwgRUlOQV9UUlVFKTsKLQotICAgIGV3a192aWV3X2luc3BlY3Rv
cl92aWV3X3NldChhcHBCcm93c2VyLT5icm93c2VyLCBhcHBJbnNwZWN0b3ItPmJyb3dzZXIpOwot
Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBFTGF1bmNoZXIgKgotd2luZG93Q3JlYXRlKFVz
ZXJfQXJndW1lbnRzICp1c2VyQXJncykKLXsKLSAgICBFTGF1bmNoZXIgKmFwcCA9IChFTGF1bmNo
ZXIgKiltYWxsb2Moc2l6ZW9mKEVMYXVuY2hlcikpOwotICAgIGlmICghYXBwKSB7Ci0gICAgICAg
IHF1aXQoRUlOQV9GQUxTRSwgIkVSUk9SOiBjb3VsZCBub3QgY3JlYXRlIGFuIEVMYXVuY2hlclxu
Iik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotI2lmIGRlZmluZWQoSEFWRV9FQ09S
RV9YKQotICAgIGlmICh1c2VyQXJncy0+ZW5naW5lKQotI2VuZGlmCi0gICAgICAgIGFwcC0+ZWUg
PSBlY29yZV9ldmFzX25ldyh1c2VyQXJncy0+ZW5naW5lLCAwLCAwLCB1c2VyQXJncy0+Z2VvbWV0
cnkudywgdXNlckFyZ3MtPmdlb21ldHJ5LmgsIE5VTEwpOwotI2lmIGRlZmluZWQoSEFWRV9FQ09S
RV9YKQotICAgIGVsc2UgewotICAgICAgICBjb25zdCBjaGFyKiBlbmdpbmUgPSAib3BlbmdsX3gx
MSI7Ci0gICAgICAgIGFwcC0+ZWUgPSBlY29yZV9ldmFzX25ldyhlbmdpbmUsIDAsIDAsIHVzZXJB
cmdzLT5nZW9tZXRyeS53LCB1c2VyQXJncy0+Z2VvbWV0cnkuaCwgTlVMTCk7Ci0gICAgfQotI2Vu
ZGlmCi0gICAgaWYgKCFhcHAtPmVlKSB7Ci0gICAgICAgIHF1aXQoRUlOQV9GQUxTRSwgIkVSUk9S
OiBjb3VsZCBub3QgY29uc3RydWN0IGV2YXMtZWNvcmVcbiIpOwotICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICB9Ci0KLSAgICBpZiAodXNlckFyZ3MtPmlzRnVsbHNjcmVlbikKLSAgICAgICAgZWNv
cmVfZXZhc19mdWxsc2NyZWVuX3NldChhcHAtPmVlLCBFSU5BX1RSVUUpOwotCi0gICAgYXBwLT5l
dmFzID0gZWNvcmVfZXZhc19nZXQoYXBwLT5lZSk7Ci0gICAgaWYgKCFhcHAtPmV2YXMpIHsKLSAg
ICAgICAgcXVpdChFSU5BX0ZBTFNFLCAiRVJST1I6IGNvdWxkIG5vdCBnZXQgZXZhcyBmcm9tIGV2
YXMtZWNvcmVcbiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBhcHAtPmJy
b3dzZXIgPSBld2tfdmlld19hZGQoYXBwLT5ldmFzKTsKLQotICAgIGV3a192aWV3X3RoZW1lX3Nl
dChhcHAtPmJyb3dzZXIsIHRoZW1lUGF0aCk7Ci0gICAgaWYgKHVzZXJBcmdzLT51c2VyQWdlbnQp
Ci0gICAgICAgIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQoYXBwLT5icm93c2VyLCB1
c2VyQXJncy0+dXNlckFnZW50KTsKLQotICAgIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFn
ZV9kYXRhYmFzZV9wYXRoX3NldChhcHAtPmJyb3dzZXIsIHVzZXJBcmdzLT5kYXRhYmFzZVBhdGgp
OwotICAgIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KGFwcC0+
YnJvd3NlciwgdXNlckFyZ3MtPmlzRmxhdHRlbmluZyk7Ci0gICAgZXdrX3ZpZXdfc2V0dGluZ19l
bmNvZGluZ19kZXRlY3Rvcl9zZXQoYXBwLT5icm93c2VyLCB1c2VyQXJncy0+ZW5hYmxlRW5jb2Rp
bmdEZXRlY3Rvcik7Ci0gICAgZXdrX3ZpZXdfZGV2aWNlX3BpeGVsX3JhdGlvX3NldChhcHAtPmJy
b3dzZXIsIHVzZXJBcmdzLT5kZXZpY2VfcGl4ZWxfcmF0aW8pOwotCi0gICAgYXBwLT51c2VyQXJn
cyA9IHVzZXJBcmdzOwotICAgIGFwcC0+dXJsX2JhciA9IE5VTEw7Ci0KLSAgICB3aW5kb3dzID0g
ZWluYV9saXN0X2FwcGVuZCh3aW5kb3dzLCBhcHApOwotCi0gICAgcmV0dXJuIGFwcDsKLX0KLQot
c3RhdGljIHZvaWQKLXdpbmRvd0Rlc3Ryb3koRWNvcmVfRXZhcyAqZWUpCi17Ci0gICAgZWNvcmVf
ZXZhc19mcmVlKGVlKTsKLSAgICBpZiAoIWVpbmFfbGlzdF9jb3VudCh3aW5kb3dzKSkKLSAgICAg
ICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKLX0KLQotc3RhdGljIHZvaWQKLWNsb3NlV2luZG93
KEVjb3JlX0V2YXMgKmVlKQotewotICAgIEVMYXVuY2hlciAqYXBwOwotCi0gICAgYXBwID0gZmlu
ZF9hcHBfZnJvbV9lZShlZSk7Ci0gICAgZXdrX3ZpZXdfaW5zcGVjdG9yX2Nsb3NlKGFwcC0+YnJv
d3Nlcik7Ci0KLSAgICB3aW5kb3dzID0gZWluYV9saXN0X3JlbW92ZSh3aW5kb3dzLCBhcHApOwot
ICAgIHVybF9iYXJfZGVsKGFwcC0+dXJsX2Jhcik7Ci0gICAgd2luZG93RGVzdHJveShlZSk7Ci0g
ICAgZnJlZShhcHApOwotfQotCi1zdGF0aWMgRWluYV9Cb29sCi1tYWluX3NpZ25hbF9leGl0KHZv
aWQgKmRhdGEsIGludCBldl90eXBlLCB2b2lkICpldikKLXsKLSAgICBFTGF1bmNoZXIgKmFwcDsK
LSAgICB3aGlsZSAod2luZG93cykgewotICAgICAgICBhcHAgPSAoRUxhdW5jaGVyKikgZWluYV9s
aXN0X2RhdGFfZ2V0KHdpbmRvd3MpOwotICAgICAgICBld2tfdmlld19pbnNwZWN0b3JfY2xvc2Uo
YXBwLT5icm93c2VyKTsKLQotICAgICAgICBlY29yZV9ldmFzX2ZyZWUoYXBwLT5lZSk7Ci0gICAg
ICAgIHdpbmRvd3MgPSBlaW5hX2xpc3RfcmVtb3ZlKHdpbmRvd3MsIGFwcCk7Ci0gICAgfQotICAg
IGlmICghZWluYV9saXN0X2NvdW50KHdpbmRvd3MpKQotICAgICAgICBlY29yZV9tYWluX2xvb3Bf
cXVpdCgpOwotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyBjaGFyICoKLWZpbmRU
aGVtZVBhdGgoY29uc3QgY2hhciAqdGhlbWUpCi17Ci0gICAgY29uc3QgY2hhciAqZGVmYXVsdF90
aGVtZSA9IFRFU1RfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiOwotICAgIGNoYXIgKnJwYXRoOwot
ICAgIHN0cnVjdCBzdGF0IHN0OwotCi0gICAgaWYgKCF0aGVtZSkKLSAgICAgICAgdGhlbWUgPSBk
ZWZhdWx0X3RoZW1lOwotCi0gICAgcnBhdGggPSBlY29yZV9maWxlX3JlYWxwYXRoKHRoZW1lKTsK
LQotICAgIGlmICghc3RybGVuKHJwYXRoKSB8fCBzdGF0KHJwYXRoLCAmc3QpKSB7Ci0gICAgICAg
IGZyZWUocnBhdGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
cnBhdGg7Ci19Ci0KLWludAotcGFyc2VVc2VyQXJndW1lbnRzKGludCBhcmdjLCBjaGFyICphcmd2
W10sIFVzZXJfQXJndW1lbnRzICp1c2VyQXJncykKLXsKLSAgICBpbnQgYXJnczsKLQotICAgIHVz
ZXJBcmdzLT5lbmdpbmUgPSBOVUxMOwotICAgIHVzZXJBcmdzLT5xdWl0T3B0aW9uID0gRUlOQV9G
QUxTRTsKLSAgICB1c2VyQXJncy0+ZGV2aWNlX3BpeGVsX3JhdGlvID0gMS4wOwotICAgIHVzZXJB
cmdzLT5lbmFibGVFbmNvZGluZ0RldGVjdG9yID0gRUlOQV9GQUxTRTsKLSAgICB1c2VyQXJncy0+
aXNGbGF0dGVuaW5nID0gRUlOQV9GQUxTRTsKLSAgICB1c2VyQXJncy0+aXNGdWxsc2NyZWVuID0g
RUlOQV9GQUxTRTsKLSAgICB1c2VyQXJncy0+Z2VvbWV0cnkueCA9IDA7Ci0gICAgdXNlckFyZ3Mt
Pmdlb21ldHJ5LnkgPSAwOwotICAgIHVzZXJBcmdzLT5nZW9tZXRyeS53ID0gMDsKLSAgICB1c2Vy
QXJncy0+Z2VvbWV0cnkuaCA9IDA7Ci0gICAgdXNlckFyZ3MtPnRoZW1lID0gTlVMTDsKLSAgICB1
c2VyQXJncy0+dXNlckFnZW50ID0gTlVMTDsKLQotICAgIEVjb3JlX0dldG9wdF9WYWx1ZSB2YWx1
ZXNbXSA9IHsKLSAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1NUUih1c2VyQXJncy0+ZW5naW5l
KSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0wodXNlckFyZ3MtPnF1aXRPcHRpb24p
LAotICAgICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfRE9VQkxFKHVzZXJBcmdzLT5kZXZpY2VfcGl4
ZWxfcmF0aW8pLAotICAgICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTCh1c2VyQXJncy0+ZW5h
YmxlRW5jb2RpbmdEZXRlY3RvciksCi0gICAgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09MKHVz
ZXJBcmdzLT5pc0ZsYXR0ZW5pbmcpLAotICAgICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTCh1
c2VyQXJncy0+aXNGdWxsc2NyZWVuKSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1BUUl9D
QVNUKHVzZXJBcmdzLT5nZW9tZXRyeSksCi0gICAgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9TVFIo
dXNlckFyZ3MtPnRoZW1lKSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1NUUih1c2VyQXJn
cy0+dXNlckFnZW50KSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0lOVCh2ZXJib3NlKSwK
LSAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0wodXNlckFyZ3MtPnF1aXRPcHRpb24pLAot
ICAgICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTCh1c2VyQXJncy0+cXVpdE9wdGlvbiksCi0g
ICAgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09MKHVzZXJBcmdzLT5xdWl0T3B0aW9uKSwKLSAg
ICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0wodXNlckFyZ3MtPnF1aXRPcHRpb24pLAotICAg
ICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfTk9ORQotICAgIH07Ci0KLSAgICBlY29yZV9hcHBfYXJn
c19zZXQoYXJnYywgKGNvbnN0IGNoYXIqKikgYXJndik7Ci0gICAgYXJncyA9IGVjb3JlX2dldG9w
dF9wYXJzZSgmb3B0aW9ucywgdmFsdWVzLCBhcmdjLCBhcmd2KTsKLQotICAgIHRoZW1lUGF0aCA9
IGZpbmRUaGVtZVBhdGgodXNlckFyZ3MtPnRoZW1lKTsKLQotICAgIGlmICgodXNlckFyZ3MtPmdl
b21ldHJ5LncgPD0gMCkgfHwgKHVzZXJBcmdzLT5nZW9tZXRyeS5oIDw9IDApKSB7Ci0gICAgICAg
IHVzZXJBcmdzLT5nZW9tZXRyeS53ID0gREVGQVVMVF9XSURUSDsKLSAgICAgICAgdXNlckFyZ3Mt
Pmdlb21ldHJ5LmggPSBERUZBVUxUX0hFSUdIVDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXJnczsK
LX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgY29uc3QgY2hh
ciAqZGVmYXVsdF91cmwgPSAiaHR0cDovL3d3dy5nb29nbGUuY29tLyI7Ci0gICAgY29uc3QgY2hh
ciAqdG1wOwotICAgIGNvbnN0IGNoYXIgKnByb3h5VXJpOwotICAgIGNoYXIgcGF0aFtQQVRIX01B
WF07Ci0gICAgaW50IGFyZ3M7Ci0KLSAgICBVc2VyX0FyZ3VtZW50cyB1c2VyQXJnczsKLQotICAg
IGlmICghZXdrX2luaXQoKSkKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLQotICAgIGlm
ICghZWNvcmVfZmlsZV9pbml0KCkpIHsKLSAgICAgICAgZXdrX3NodXRkb3duKCk7Ci0gICAgICAg
IHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgYXJncyA9IHBhcnNlVXNlckFyZ3Vt
ZW50cyhhcmdjLCBhcmd2LCAmdXNlckFyZ3MpOwotICAgIGlmIChhcmdzIDwgMCkKLSAgICAgICBy
ZXR1cm4gcXVpdChFSU5BX0ZBTFNFLCAiRVJST1I6IGNvdWxkIG5vdCBwYXJzZSBvcHRpb25zLlxu
Iik7Ci0KLSAgICBpZiAodXNlckFyZ3MucXVpdE9wdGlvbikKLSAgICAgICAgcmV0dXJuIHF1aXQo
RUlOQV9UUlVFLCBOVUxMKTsKLQotICAgIGlmICghdGhlbWVQYXRoKQotICAgICAgICByZXR1cm4g
cXVpdChFSU5BX0ZBTFNFLCAiRVJST1I6IGNvdWxkIG5vdCBmaW5kIHRoZW1lLlxuIik7Ci0KLSAg
ICB0bXAgPSBnZXRlbnYoIlRNUERJUiIpOwotICAgIGlmICghdG1wKQotICAgICAgICB0bXAgPSAi
L3RtcCI7Ci0gICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvLmV3ZWJraXQtJXUi
LCB0bXAsIGdldHVpZCgpKTsKLSAgICBpZiAoIWVjb3JlX2ZpbGVfbWtwYXRoKHBhdGgpKQotICAg
ICAgICByZXR1cm4gcXVpdChFSU5BX0ZBTFNFLCAiRVJST1I6IGNvdWxkIG5vdCBjcmVhdGUgc2V0
dGluZ3MgZGF0YWJhc2UgZGlyZWN0b3J5LlxuIik7Ci0KLSAgICB1c2VyQXJncy5kYXRhYmFzZVBh
dGggPSBwYXRoOwotCi0gICAgZXdrX3NldHRpbmdzX2ljb25fZGF0YWJhc2VfcGF0aF9zZXQocGF0
aCk7Ci0gICAgZXdrX3NldHRpbmdzX3dlYl9kYXRhYmFzZV9wYXRoX3NldChwYXRoKTsKLQotICAg
IHByb3h5VXJpID0gZ2V0ZW52KCJodHRwX3Byb3h5Iik7Ci0gICAgaWYgKHByb3h5VXJpKQotICAg
ICAgICBld2tfbmV0d29ya19wcm94eV91cmlfc2V0KHByb3h5VXJpKTsKLQotICAgIGlmIChhcmdz
IDwgYXJnYykgewotICAgICAgICBjaGFyICp1cmwgPSB1cmxfZnJvbV91c2VyX2lucHV0KGFyZ3Zb
YXJnc10pOwotICAgICAgICBicm93c2VyQ3JlYXRlKHVybCwgJnVzZXJBcmdzKTsKLSAgICAgICAg
ZnJlZSh1cmwpOwotICAgIH0gZWxzZQotICAgICAgICBicm93c2VyQ3JlYXRlKGRlZmF1bHRfdXJs
LCAmdXNlckFyZ3MpOwotCi0gICAgZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQoRUNPUkVfRVZFTlRf
U0lHTkFMX0VYSVQsIG1haW5fc2lnbmFsX2V4aXQsICZ3aW5kb3dzKTsKLQotICAgIGVjb3JlX21h
aW5fbG9vcF9iZWdpbigpOwotCi0gICAgZWNvcmVfZmlsZV9zaHV0ZG93bigpOwotICAgIGV3a19z
aHV0ZG93bigpOwotCi0gICAgcmV0dXJuIHF1aXQoRUlOQV9UUlVFLCBOVUxMKTsKLX0KZGlmZiAt
LWdpdCBhL1Rvb2xzL0VXZWJMYXVuY2hlci91cmxfYmFyLmMgYi9Ub29scy9FV2ViTGF1bmNoZXIv
dXJsX2Jhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTIwMmZhNWQxZjI4YzFk
Yzg0YmY3YjI5NGVhOWY0NGQ0ZjEyN2E4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0VXZWJMYXVuY2hlci91cmxfYmFyLmMKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBTYW1zdW5nIEVs
ZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgInVybF9iYXIuaCIKLSNpbmNsdWRlICJ1cmxfdXRp
bHMuaCIKLQotI2luY2x1ZGUgPEVkamUuaD4KLSNpbmNsdWRlIDxFY29yZV9FdmFzLmg+Ci0KLSNk
ZWZpbmUgUEFERElOR19TSVpFIDUKLQotc3RhdGljIGNoYXIgKgotX3VybF9iYXJfdXJsX2dldF93
aXRoX3Byb3RvY29sKFVybF9CYXIgKnVybEJhcikKLXsKLSAgICBjb25zdCBjaGFyICp1cmwgPSBl
ZGplX29iamVjdF9wYXJ0X3RleHRfZ2V0KHVybEJhci0+ZW50cnksICJ1cmwudGV4dCIpOwotCi0g
ICAgcmV0dXJuIHVybF9mcm9tX3VzZXJfaW5wdXQodXJsKTsKLX0KLQotc3RhdGljIHZvaWQKLW9u
X3VybGJhcl9rZXlfZG93bih2b2lkICpkYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqb2JqLCB2
b2lkICpldmVudF9pbmZvKQotewotICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24gKmV2ID0gZXZlbnRf
aW5mbzsKLSAgICBVcmxfQmFyICp1cmxCYXIgPSAoVXJsX0JhciAqKWRhdGE7Ci0KLSAgICBpZiAo
IWV2LT5rZXkgfHwgc3RyY21wKGV2LT5rZXksICJSZXR1cm4iKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY2hhciAqdXJsID0gX3VybF9iYXJfdXJsX2dldF93aXRoX3Byb3RvY29sKHVybEJhcik7
Ci0gICAgaWYgKHVybCkgewotICAgICAgICBld2tfdmlld191cmlfc2V0KHVybEJhci0+d2ViVmll
dywgdXJsKTsKLSAgICAgICAgZnJlZSh1cmwpOwotICAgIH0KLSAgICBldmFzX29iamVjdF9mb2N1
c19zZXQodXJsQmFyLT53ZWJWaWV3LCBFSU5BX1RSVUUpOwotfQotCi1zdGF0aWMgdm9pZAotb25f
dXJsYmFyX21vdXNlX2Rvd24odm9pZCAqZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKm9iaiwg
dm9pZCAqZXZlbnRfaW5mbykKLXsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24gKmV2ID0gZXZl
bnRfaW5mbzsKLSAgICBVcmxfQmFyICp1cmxCYXIgPSAoVXJsX0JhciAqKWRhdGE7Ci0KLSAgICBp
ZiAoZXYtPmJ1dHRvbiA9PSAxKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ZvY3VzX3NldCh1cmxC
YXItPmVudHJ5LCBFSU5BX1RSVUUpOwotICAgICAgICBlZGplX29iamVjdF9zaWduYWxfZW1pdCh1
cmxCYXItPmVudHJ5LCAiZW50cnksYWN0aW9uLGZvY3VzIiwgImVudHJ5Iik7Ci0gICAgfQotfQot
Ci1zdGF0aWMgdm9pZAotb25fdXJsYmFyX2ZvY3VzX291dCh2b2lkICpkYXRhLCBFdmFzICplLCBF
dmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQotewotICAgIFVybF9CYXIgKnVybEJh
ciA9IChVcmxfQmFyICopZGF0YTsKLQotICAgIGVkamVfb2JqZWN0X3NpZ25hbF9lbWl0KHVybEJh
ci0+ZW50cnksICJlbnRyeSxhY3Rpb24sdW5mb2N1cyIsICJlbnRyeSIpOwotfQotCi12b2lkCi11
cmxfYmFyX3dpZHRoX3NldChVcmxfQmFyICp1cmxCYXIsIGludCB3aWR0aCkKLXsKLSAgICBldmFz
X29iamVjdF9tb3ZlKHVybEJhci0+YXJlYSwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXpl
KHVybEJhci0+YXJlYSwgd2lkdGgsIFVSTF9CQVJfSEVJR0hUKTsKLQotICAgIGV2YXNfb2JqZWN0
X21vdmUodXJsQmFyLT5lbnRyeSwgUEFERElOR19TSVpFLCBQQURESU5HX1NJWkUpOwotICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZSh1cmxCYXItPmVudHJ5LCB3aWR0aCAtIFBBRERJTkdfU0laRSAqIDIs
IFVSTF9CQVJfSEVJR0hUIC0gUEFERElOR19TSVpFICogMik7Ci19Ci0KLVVybF9CYXIgKgotdXJs
X2Jhcl9hZGQoRXZhc19PYmplY3QgKndlYlZpZXcsIGludCB3aWR0aCkKLXsKLSAgICBFdmFzICpl
dmFzOwotICAgIFVybF9CYXIgKnVybF9iYXI7Ci0gICAgaWYgKCF3ZWJWaWV3KQotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQod2ViVmlldyk7Ci0K
LSAgICB1cmxfYmFyID0gKFVybF9CYXIgKiltYWxsb2Moc2l6ZW9mKFVybF9CYXIpKTsKLSAgICB1
cmxfYmFyLT53ZWJWaWV3ID0gd2ViVmlldzsKLQotICAgIHVybF9iYXItPmFyZWEgPSBldmFzX29i
amVjdF9yZWN0YW5nbGVfYWRkKGV2YXMpOwotICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KHVybF9i
YXItPmFyZWEsICJ1cmxfYmFyQXJlYSIpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldCh1cmxf
YmFyLT5hcmVhLCAyNTUsIDI1NSwgMjU1LCAyNTUpOwotCi0gICAgdXJsX2Jhci0+ZW50cnkgPSBl
ZGplX29iamVjdF9hZGQoZXZhcyk7Ci0gICAgRWluYV9Cb29sIHJldCA9IGVkamVfb2JqZWN0X2Zp
bGVfc2V0KHVybF9iYXItPmVudHJ5LCBURVNUX1RIRU1FX0RJUiAiL2VudHJ5LmVkaiIsICJjb250
cm9sL2VudHJ5L2Jhc2UvZGVmYXVsdCIpOwotICAgIGlmICghcmV0KSB7Ci0gICAgICAgIGV2YXNf
b2JqZWN0X2RlbCh1cmxfYmFyLT5hcmVhKTsKLQotICAgICAgICBmcmVlKHVybF9iYXIpOwotICAg
ICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBlZGplX29iamVjdF9wYXJ0X3RleHRfc2V0
KHVybF9iYXItPmVudHJ5LCAidXJsLnRleHQiLCAiIik7Ci0KLSAgICAvKiBTZXQgVVJMIGJhciBk
aW1lbnNpb25zIGFuZCBzaG93IGl0ICovCi0gICAgdXJsX2Jhcl93aWR0aF9zZXQodXJsX2Jhciwg
d2lkdGgpOwotICAgIGV2YXNfb2JqZWN0X3Nob3codXJsX2Jhci0+YXJlYSk7Ci0gICAgZXZhc19v
YmplY3Rfc2hvdyh1cmxfYmFyLT5lbnRyeSk7Ci0KLSAgICBldmFzX29iamVjdF9ldmVudF9jYWxs
YmFja19hZGQodXJsX2Jhci0+ZW50cnksIEVWQVNfQ0FMTEJBQ0tfTU9VU0VfRE9XTiwgb25fdXJs
YmFyX21vdXNlX2Rvd24sIHVybF9iYXIpOwotICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNr
X2FkZCh1cmxfYmFyLT5lbnRyeSwgRVZBU19DQUxMQkFDS19LRVlfRE9XTiwgb25fdXJsYmFyX2tl
eV9kb3duLCB1cmxfYmFyKTsKLSAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQodXJs
X2Jhci0+ZW50cnksIEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VULCBvbl91cmxiYXJfZm9jdXNfb3V0
LCB1cmxfYmFyKTsKLQotICAgIHJldHVybiB1cmxfYmFyOwotfQotCi12b2lkCi11cmxfYmFyX2Rl
bChVcmxfQmFyICp1cmxCYXIpCi17Ci0gICAgaWYgKCF1cmxCYXIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2RlbCh1cmxCYXItPmVudHJ5LCBFVkFT
X0NBTExCQUNLX0tFWV9ET1dOLCBvbl91cmxiYXJfa2V5X2Rvd24pOwotICAgIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2RlbCh1cmxCYXItPmVudHJ5LCBFVkFTX0NBTExCQUNLX01PVVNFX0RP
V04sIG9uX3VybGJhcl9tb3VzZV9kb3duKTsKLSAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFj
a19kZWwodXJsQmFyLT5lbnRyeSwgRVZBU19DQUxMQkFDS19GT0NVU19PVVQsIG9uX3VybGJhcl9m
b2N1c19vdXQpOwotCi0gICAgZXZhc19vYmplY3RfZGVsKHVybEJhci0+YXJlYSk7Ci0gICAgZXZh
c19vYmplY3RfZGVsKHVybEJhci0+ZW50cnkpOwotICAgIGZyZWUodXJsQmFyKTsKLX0KLQotdm9p
ZAotdXJsX2Jhcl91cmxfc2V0KFVybF9CYXIgKnVybEJhciwgY29uc3QgY2hhciAqdXJsKQotewot
ICAgIGlmICghdXJsQmFyIHx8ICF1cmwpCi0gICAgICAgIHJldHVybjsKLQotICAgIGVkamVfb2Jq
ZWN0X3BhcnRfdGV4dF9zZXQodXJsQmFyLT5lbnRyeSwgInVybC50ZXh0IiwgdXJsKTsKLX0KZGlm
ZiAtLWdpdCBhL1Rvb2xzL0VXZWJMYXVuY2hlci91cmxfYmFyLmggYi9Ub29scy9FV2ViTGF1bmNo
ZXIvdXJsX2Jhci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmQ3NzkzYjVmMmY4
Yjk2OGRhMGFiMDU2NjQyM2I1YzU1ZGQyZjMyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1Rvb2xzL0VXZWJMYXVuY2hlci91cmxfYmFyLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcg
RWxlY3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIHVybF9iYXJfaAotI2RlZmluZSB1cmxfYmFyX2gK
LQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi0jaW5jbHVkZSA8
RXZhcy5oPgotCi0jZGVmaW5lIFVSTF9CQVJfSEVJR0hUIDMwCi0KLXR5cGVkZWYgc3RydWN0IF9V
cmxfQmFyIHsKLSAgICBFdmFzX09iamVjdCAqd2ViVmlldzsKLSAgICBFdmFzX09iamVjdCAqYXJl
YTsKLSAgICBFdmFzX09iamVjdCAqZW50cnk7Ci19IFVybF9CYXI7Ci0KLVVybF9CYXIgKnVybF9i
YXJfYWRkKEV2YXNfT2JqZWN0KiB3ZWJ2aWV3LCBpbnQgd2lkdGgpOwotdm9pZCB1cmxfYmFyX2Rl
bChVcmxfQmFyICp1cmxCYXIpOwotdm9pZCB1cmxfYmFyX3VybF9zZXQoVXJsX0JhciAqdXJsQmFy
LCBjb25zdCBjaGFyICp1cmwpOwotdm9pZCB1cmxfYmFyX3dpZHRoX3NldChVcmxfQmFyICp1cmxC
YXIsIGludCB3aWR0aCk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYg
Ly8gdXJsX2Jhcl9oCmRpZmYgLS1naXQgYS9Ub29scy9FV2ViTGF1bmNoZXIvdXJsX3V0aWxzLmMg
Yi9Ub29scy9FV2ViTGF1bmNoZXIvdXJsX3V0aWxzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQ4Y2Y3Y2I0OThhNzlkZWU2ODZhOWQ2MzQzNDZiODc1NTU1OGU1ZjIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRVdlYkxhdW5jaGVy
L3VybF91dGlscy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgInVybF91dGlscy5oIgotCi0jaW5jbHVkZSA8RWNvcmVfRmlsZS5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0KLUVpbmFf
Qm9vbAotaGFzX3NjaGVtZShjb25zdCBjaGFyICp1cmwpCi17Ci0gICAgcmV0dXJuICEhc3Ryc3Ry
KHVybCwgIjovLyIpOwotfQotCi1jaGFyICoKLXVybF9mcm9tX3VzZXJfaW5wdXQoY29uc3QgY2hh
ciAqYXJnKQotewotICAgIC8qIElmIGl0IGlzIGFscmVhZHkgYSBVUkwsIHJldHVybiB0aGUgYXJn
dW1lbnQgYXMgaXMuICovCi0gICAgaWYgKGhhc19zY2hlbWUoYXJnKSB8fCAhc3RyY2FzZWNtcChh
cmcsICJhYm91dDpibGFuayIpKQotICAgICAgICByZXR1cm4gc3RyZHVwKGFyZyk7Ci0KLSAgICBF
aW5hX1N0cmJ1ZiAqYnVmID0gZWluYV9zdHJidWZfbWFuYWdlX25ldyhlaW5hX2ZpbGVfcGF0aF9z
YW5pdGl6ZShhcmcpKTsKLQotICAgIC8qIENoZWNrIGlmIHRoZSBwYXRoIGV4aXN0cy4gKi8KLSAg
ICBpZiAoZWNvcmVfZmlsZV9leGlzdHMoZWluYV9zdHJidWZfc3RyaW5nX2dldChidWYpKSkgewot
ICAgICAgICAvKiBGaWxlIGV4aXN0cywgY29udmVydCBsb2NhbCBwYXRoIHRvIGEgVVJMLiAqLwot
ICAgICAgICBlaW5hX3N0cmJ1Zl9wcmVwZW5kKGJ1ZiwgImZpbGU6Ly8iKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICAvKiBUaGUgcGF0aCBkb2VzIG5vdCBleGlzdCwgY29udmVydCBpdCB0byBhIFVS
TCBieQotICAgICAgICAgICBwcmVwZW5kaW5nIGh0dHA6Ly8gc2NoZW1lOgotICAgICAgICAgICB3
d3cuZ29vZ2xlLmNvbSAtPiBodHRwOi8vd3d3Lmdvb2dsZS5jb20gKi8KLSAgICAgICAgIGVpbmFf
c3RyYnVmX3N0cmluZ19mcmVlKGJ1Zik7Ci0gICAgICAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJp
bnRmKGJ1ZiwgImh0dHA6Ly8lcyIsIGFyZyk7Ci0gICAgfQotICAgIGNoYXIgKnVybCA9IGVpbmFf
c3RyYnVmX3N0cmluZ19zdGVhbChidWYpOwotICAgIGVpbmFfc3RyYnVmX2ZyZWUoYnVmKTsKLQot
ICAgIHJldHVybiB1cmw7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9FV2ViTGF1bmNoZXIvdXJsX3V0
aWxzLmggYi9Ub29scy9FV2ViTGF1bmNoZXIvdXJsX3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJkM2MxYTA1NzcxNWU5MmRkMzIwMDhiNDEzNmYzNzFiMTYzYzRkMDguLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvRVdlYkxh
dW5jaGVyL3VybF91dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmbmRlZiB1cmxfdXRpbHNfaAotI2RlZmluZSB1cmxfdXRpbHNfaAot
Ci0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpbmNsdWRlIDxF
aW5hLmg+Ci0KLUVpbmFfQm9vbCBoYXNfc2NoZW1lKGNvbnN0IGNoYXIgKnVybCk7Ci1jaGFyICp1
cmxfZnJvbV91c2VyX2lucHV0KGNvbnN0IGNoYXIgKmFyZyk7Ci0KLSNpZmRlZiBfX2NwbHVzcGx1
cwotfQotI2VuZGlmCi0KLSNlbmRpZiAvLyB1cmxfdXRpbHNfaApkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvRm9udE1hbmFnZW1lbnQuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvRm9udE1hbmFnZW1lbnQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmVlZTI2ZDE0MTNkYjJjYTkzZGZlNzBjZDU5ZTEzNTM5N2FhODJhMzkK
LS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2VmbC9Gb250TWFuYWdlbWVudC5jcHAKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgUHJvRlVTSU9OIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRm9udE1hbmFnZW1lbnQuaCIKKworI2luY2x1ZGUgPEVjb3JlX0Zp
bGUuaD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmln
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK3N0YXRpYyBDU3RyaW5n
IGJ1aWxkUGF0aChjb25zdCBjaGFyKiBiYXNlLCBjb25zdCBjaGFyKiBmaXJzdCwgLi4uKQorewor
ICAgIHZhX2xpc3QgYXA7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgcmVzdWx0LmFw
cGVuZChiYXNlKTsKKworICAgIGlmIChjb25zdCBjaGFyKiBjdXJyZW50ID0gZmlyc3QpIHsKKyAg
ICAgICAgdmFfc3RhcnQoYXAsIGZpcnN0KTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnLycpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjdXJyZW50KTsKKyAg
ICAgICAgfSB3aGlsZSAoKGN1cnJlbnQgPSB2YV9hcmcoYXAsIGNvbnN0IGNoYXIqKSkpOworICAg
ICAgICB2YV9lbmQoYXApOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKS51
dGY4KCk7Cit9CisKK3N0YXRpYyBWZWN0b3I8Q1N0cmluZz4gZ2V0Q29yZUZvbnRGaWxlcygpCit7
CisgICAgVmVjdG9yPENTdHJpbmc+IGZvbnRGaWxlUGF0aHM7CisKKyAgICAvLyBBaGVtIGlzIHVz
ZWQgYnkgbWFueSBsYXlvdXQgdGVzdHMuCisgICAgZm9udEZpbGVQYXRocy5hcHBlbmQoQ1N0cmlu
ZyhGT05UU19DT05GX0RJUiAiL0FIRU1fX19fLlRURiIpKTsKKyAgICAvLyBBIGZvbnQgd2l0aCBu
byB2YWxpZCBGb250Y29uZmlnIGVuY29kaW5nIHRvIHRlc3QgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ3NDUyCisgICAgZm9udEZpbGVQYXRocy5hcHBlbmQoQ1N0cmlu
ZyhGT05UU19DT05GX0RJUiAiL0ZvbnRXaXRoTm9WYWxpZEVuY29kaW5nLmZvbiIpKTsKKworICAg
IGZvciAoaW50IGkgPSAxOyBpIDw9IDk7IGkrKykgeworICAgICAgICBjaGFyIGZvbnRQYXRoW0VJ
TkFfUEFUSF9NQVhdOworICAgICAgICBzbnByaW50Zihmb250UGF0aCwgRUlOQV9QQVRIX01BWCAt
IDEsIEZPTlRTX0NPTkZfRElSICIvLi4vLi4vZm9udHMvV2ViS2l0V2VpZ2h0V2F0Y2hlciVpMDAu
dHRmIiwgaSk7CisgICAgICAgIGZvbnRGaWxlUGF0aHMuYXBwZW5kKENTdHJpbmcoZm9udFBhdGgp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZm9udEZpbGVQYXRoczsKK30KKworc3RhdGljIHZvaWQg
YWRkRm9udERpcmVjdG9yeShjb25zdCBDU3RyaW5nJiBmb250RGlyZWN0b3J5LCBGY0NvbmZpZyog
Y29uZmlnKQoreworICAgIGNvbnN0IGNoYXIqIGZvbnRQYXRoID0gZm9udERpcmVjdG9yeS5kYXRh
KCk7CisgICAgaWYgKCFmb250UGF0aCB8fCAhRmNDb25maWdBcHBGb250QWRkRGlyKGNvbmZpZywg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZm9udFBhdGgpKSkKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJDb3VsZCBub3QgYWRkIGZvbnQgZGlyZWN0b3J5ICVzIVxuIiwgZm9udFBh
dGgpOworfQorCitzdGF0aWMgdm9pZCBhZGRGb250RmlsZXMoY29uc3QgVmVjdG9yPENTdHJpbmc+
JiBmb250RmlsZXMsIEZjQ29uZmlnKiBjb25maWcpCit7CisgICAgVmVjdG9yPENTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCwgZW5kID0gZm9udEZpbGVzLmVuZCgpOworICAgIGZvciAoaXQgPSBm
b250RmlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IGNoYXIq
IGZpbGVQYXRoID0gKCppdCkuZGF0YSgpOworICAgICAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFk
ZEZpbGUoY29uZmlnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmaWxlUGF0aCkp
KQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgbG9hZCBmb250IGF0ICVz
IVxuIiwgZmlsZVBhdGgpOworICAgIH0KK30KKworc3RhdGljIENTdHJpbmcgZ2V0Q3VzdG9tQnVp
bGREaXIoKQoreworICAgIGlmIChjb25zdCBjaGFyKiB1c2VyQ2hvc2VuQnVpbGREaXIgPSBnZXRl
bnYoIldFQktJVF9PVVRQVVRESVIiKSkgeworICAgICAgICBpZiAoZWNvcmVfZmlsZV9pc19kaXIo
dXNlckNob3NlbkJ1aWxkRGlyKSkKKyAgICAgICAgICAgIHJldHVybiB1c2VyQ2hvc2VuQnVpbGRE
aXI7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiV0VCS0lUX09VVFBVVERJUiBzZXQgdG8gJyVz
JywgYnV0IHBhdGggZG9lc24ndCBleGlzdC5cbiIsIHVzZXJDaG9zZW5CdWlsZERpcik7CisgICAg
fQorCisgICAgcmV0dXJuIENTdHJpbmcoKTsKK30KKworc3RhdGljIENTdHJpbmcgZ2V0UGxhdGZv
cm1Gb250c1BhdGgoKQoreworICAgIENTdHJpbmcgY3VzdG9tQnVpbGREaXIgPSBnZXRDdXN0b21C
dWlsZERpcigpOworICAgIGlmICghY3VzdG9tQnVpbGREaXIuaXNOdWxsKCkpIHsKKyAgICAgICAg
Q1N0cmluZyBmb250c1BhdGggPSBidWlsZFBhdGgoY3VzdG9tQnVpbGREaXIuZGF0YSgpLCAiRGVw
ZW5kZW5jaWVzIiwgIlJvb3QiLCAid2Via2l0Z3RrLXRlc3QtZm9udHMiLCAwKTsKKyAgICAgICAg
aWYgKCFlY29yZV9maWxlX2V4aXN0cyhmb250c1BhdGguZGF0YSgpKSkKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiV0VCS0lUX09VVFBVVERJUiBzZXQgdG8gJyVzJywgYnV0IGNvdWxkIG5v
dCBsb2NhbCB0ZXN0IGZvbnRzLlxuIiwgY3VzdG9tQnVpbGREaXIuZGF0YSgpKTsKKyAgICAgICAg
cmV0dXJuIGZvbnRzUGF0aDsKKyAgICB9CisKKyAgICBDU3RyaW5nIGZvbnRzUGF0aCA9IENTdHJp
bmcoRE9XTkxPQURFRF9GT05UU19ESVIpOworICAgIGlmIChlY29yZV9maWxlX2V4aXN0cyhmb250
c1BhdGguZGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIGZvbnRzUGF0aDsKKworICAgIGZwcmludGYo
c3RkZXJyLCAiQ291bGQgbm90IGxvY2F0ZSB0ZXN0cyBmb250cywgdHJ5IHNldHRpbmcgV0VCS0lU
X09VVFBVVERJUi5cbiIpOworICAgIHJldHVybiBDU3RyaW5nKCk7Cit9CisKK3ZvaWQgYWRkRm9u
dHNUb0Vudmlyb25tZW50KCkKK3sKKyAgICBGY0luaXQoKTsKKworICAgIC8vIExvYWQgb3VyIGNv
bmZpZ3VyYXRpb24gZmlsZSwgd2hpY2ggc2V0cyB1cCBwcm9wZXIgYWxpYXNlcyBmb3IgZmFtaWx5
CisgICAgLy8gbmFtZXMgbGlrZSBzYW5zLCBzZXJpZiBhbmQgbW9ub3NwYWNlLgorICAgIEZjQ29u
ZmlnKiBjb25maWcgPSBGY0NvbmZpZ0NyZWF0ZSgpOworICAgIGNvbnN0IGNoYXIqIGZvbnRDb25m
aWdGaWxlbmFtZSA9IEZPTlRTX0NPTkZfRElSICIvZm9udHMuY29uZiI7CisgICAgaWYgKCFGY0Nv
bmZpZ1BhcnNlQW5kTG9hZChjb25maWcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+
KGZvbnRDb25maWdGaWxlbmFtZSksIHRydWUpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
Q291bGRuJ3QgbG9hZCBmb250IGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tOiAlc1xuIiwgZm9udENv
bmZpZ0ZpbGVuYW1lKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBhZGRGb250Rmls
ZXMoZ2V0Q29yZUZvbnRGaWxlcygpLCBjb25maWcpOworICAgIGFkZEZvbnREaXJlY3RvcnkoZ2V0
UGxhdGZvcm1Gb250c1BhdGgoKSwgY29uZmlnKTsKKworICAgIGlmICghRmNDb25maWdTZXRDdXJy
ZW50KGNvbmZpZykpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgc2V0IHRo
ZSBjdXJyZW50IGZvbnQgY29uZmlndXJhdGlvbiFcbiIpOworICAgICAgICBleGl0KDEpOworICAg
IH0KK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9lZmwvRm9udE1hbmFnZW1lbnQuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ5NzUxM2FlZGMxMzk5ZjQ2
ZmMwYjkxZGQ0ZjQyODU1N2Q3NDFhMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL0ZvbnRNYW5hZ2VtZW50LmgKQEAgLTAsMCArMSwz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04gRW1iZWRkZWQgU3lzdGVt
cworICogQ29weXJpZ2h0IChDKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRm9udE1hbmFnZW1lbnRfaAorI2RlZmluZSBGb250TWFuYWdlbWVudF9oCisKK3Zv
aWQgYWRkRm9udHNUb0Vudmlyb25tZW50KCk7CisKKyNlbmRpZiAvLyBGb250TWFuYWdlbWVudF9o
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtRWZsLmNtYWtlIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAyYjhmODUxYzM2
YTMyZDcxNWNkODQ0MjhiMzdjNzQ5ZDM3NzRkY2FiLi4xODczMjc5YTc3YTNhZjdmM2NiNWNkOGVm
YjIxZjBhMGVjZDM1NWMyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRm
b3JtRWZsLmNtYWtlCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTIwLDcgKzIwLDYgQEAgbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1bm5lcl9JTkNMVURF
X0RJUkVDVE9SSUVTCiAKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL0MvZWZsCiAK
LSAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUvZWZsLwogICAgICR7V0VCS0lUMl9ESVJ9
L1VJUHJvY2Vzcy9BUEkvZWZsCiAgICAgIiR7V1RGX0RJUn0vd3RmL2dvYmplY3QiCiAgICAgJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vbmV0d29yay9zb3VwCkBAIC02NSwxMyArNjQsMTIgQEAgaWYg
KEVOQUJMRV9FQ09SRV9YKQogZW5kaWYgKCkKIAogbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1bm5l
ckluamVjdGVkQnVuZGxlX1NPVVJDRVMKLSAgICAke1RPT0xTX0RJUn0vRHVtcFJlbmRlclRyZWUv
ZWZsL0ZvbnRNYW5hZ2VtZW50LmNwcAotCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9JTkpFQ1RF
REJVTkRMRV9ESVJ9L2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKICAgICAke1dF
QktJVF9URVNUUlVOTkVSX0lOSkVDVEVEQlVORExFX0RJUn0vYXRrL0FjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyQXRrLmNwcAogICAgICR7V0VCS0lUX1RFU1RSVU5ORVJfSU5KRUNURURC
VU5ETEVfRElSfS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKIAogICAgICR7V0VC
S0lUX1RFU1RSVU5ORVJfSU5KRUNURURCVU5ETEVfRElSfS9lZmwvQWN0aXZhdGVGb250c0VmbC5j
cHAKKyAgICAke1dFQktJVF9URVNUUlVOTkVSX0lOSkVDVEVEQlVORExFX0RJUn0vZWZsL0ZvbnRN
YW5hZ2VtZW50LmNwcAogICAgICR7V0VCS0lUX1RFU1RSVU5ORVJfSU5KRUNURURCVU5ETEVfRElS
fS9lZmwvSW5qZWN0ZWRCdW5kbGVFZmwuY3BwCiAgICAgJHtXRUJLSVRfVEVTVFJVTk5FUl9JTkpF
Q1RFREJVTkRMRV9ESVJ9L2VmbC9UZXN0UnVubmVyRWZsLmNwcAogKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>