<?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>125961</bug_id>
          
          <creation_ts>2013-12-18 16:27:11 -0800</creation_ts>
          <short_desc>[EFL] Remove ewk_view_tiled</short_desc>
          <delta_ts>2014-01-22 01:44:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>127214</blocked>
    
    <blocked>127417</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>961167</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2013-12-18 16:27:11 -0800</bug_when>
    <thetext>ewk_view_tiled was introduced for faster scrolling.

But we didn&apos;t use ewk_view_tiled very long time while we focused webkit2/efl.
Indeed, there are many bugs and we don&apos;t have plan to fix them.
(Tizen 1.0 has some fixes but we didn&apos;t take care of them)
Nowadays, We can use WebCore&apos;s TiledBackingStore with ewk_view_single and it looks more stable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>961174</commentid>
    <comment_count>1</comment_count>
      <attachid>219586</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2013-12-18 16:36:09 -0800</bug_when>
    <thetext>Created attachment 219586
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963260</commentid>
    <comment_count>2</comment_count>
      <attachid>219586</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-12-29 16:49:18 -0800</bug_when>
    <thetext>Comment on attachment 219586
Patch

Though you notify this bug to webkit-efl mailing list, there wasn&apos;t any opinion. Go ahead !</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963263</commentid>
    <comment_count>3</comment_count>
      <attachid>219586</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-29 17:20:20 -0800</bug_when>
    <thetext>Comment on attachment 219586
Patch

Clearing flags on attachment: 219586

Committed r161134: &lt;http://trac.webkit.org/changeset/161134&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963264</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-29 17:20:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219586</attachid>
            <date>2013-12-18 16:36:09 -0800</date>
            <delta_ts>2013-12-29 17:20:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125961-20131219093607.patch</filename>
            <type>text/plain</type>
            <size>169002</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYwODAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY4NDJhYTU2OWQyM2Q4Zjdi
YjhlMDhmNDczNjQyOGY4ZGYwMWViOTkuLmJmMGEzMjg0ZDM0ZDU4NzQ4Nzc3MDYxZjA0ZmVmYjUw
YjU3YWVkMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTMtMTItMTggIFJ5dWFuIENo
b2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIFJlbW92ZSBld2tf
dmlld190aWxlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI1OTYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUVmbC5jbWFrZTogUmVtb3ZlZCBld2tfdmlld190aWxlZCByZWxhdGVkIGZp
bGVzLgorCiAyMDEzLTEyLTE4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgW1dpbkNhaXJvXSBQcmVwYXJhdGlvbiBmb3IgR1N0cmVhbWVyIG9u
IFdpbmRvd3MuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggYjU4MDNjMDc3YzQzZDgzMWFiMDJiNDliMzBl
MzkzYjg2ZDAzMTFhMi4uN2E4Yjc0NDJhYjY1MDYzM2EwYzk0ZDczZDExZTExYzYzOGUwOTM0ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDEzLTEyLTE4ICBSeXVhbiBDaG9p
ICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBSZW1vdmUgZXdrX3Zp
ZXdfdGlsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNTk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlIGRpZG4ndCB1c2UgZXdrX3ZpZXdfdGlsZWQgdmVyeSBsb25nIHRpbWUgd2hpbGUgd2UgZm9j
dXNlZCB3ZWJraXQyL2VmbC4KKyAgICAgICAgVGhlcmUgYXJlIG1hbnkgYnVncyBhbmQgd2UgZG9u
J3QgaGF2ZSBwbGFuIHRvIGZpeCB0aGVtLgorICAgICAgICBJbnN0ZWFkLCBXZSB3aWxsIHVzZSBX
ZWJDb3JlJ3MgVGlsZWRCYWNraW5nU3RvcmUgYW5kIGl0IGxvb2tzIG1vcmUgc3RhYmxlLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZv
ck5ld1BhZ2UpOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByaXZhdGUuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21hdHJpeC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogZXdrL2V3a190aWxlZF9tYXRyaXhfcHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGV3ay9ld2tfdGlsZWRfbW9kZWwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGV3ay9ld2tf
dGlsZWRfbW9kZWxfcHJpdmF0ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGV3ay9ld2tfdmlldy5j
cHA6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6CisgICAgICAgICogZXdrL2V3a192aWV3X3By
aXZhdGUuaDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXdfdGlsZWQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHRlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3BwOgorICAgICAgICAoRVdL
VW5pdFRlc3RzOjpFV0tUZXN0Vmlldzo6aW5pdCk6CisKIDIwMTMtMTItMTEgIEpvc2VwaCBQZWNv
cmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBQdXNo
IE1vcmUgSW5zcGVjdG9yIFJlcXVpcmVkIENsYXNzZXMgRG93biBpbnRvIEphdmFTY3JpcHRDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCAyYWI5ZDJlZGRmMGZlMzdhMzQ3MzBiNjk3MmFm
OTRjNDNiMmQ3MmFhLi4xNjBkM2UzNGIxY2Y0OWU5ZjlhNmNhNDkzNTZiZjQ2OTA4ZTc1MGM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTE0MCwxMyArMTQwLDkgQEAgbGlzdChBUFBFTkQg
V2ViS2l0X1NPVVJDRVMKICAgICBlZmwvZXdrL2V3a19zZWN1cml0eV9vcmlnaW4uY3BwCiAgICAg
ZWZsL2V3ay9ld2tfc2VjdXJpdHlfcG9saWN5LmNwcAogICAgIGVmbC9ld2svZXdrX3NldHRpbmdz
LmNwcAotICAgIGVmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCi0gICAgZWZsL2V3
ay9ld2tfdGlsZWRfbWF0cml4LmNwcAotICAgIGVmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcAog
ICAgIGVmbC9ld2svZXdrX3RvdWNoX2V2ZW50LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXcuY3Bw
CiAgICAgZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCi0gICAgZWZsL2V3ay9ld2tfdmlld190
aWxlZC5jcHAKICAgICBlZmwvZXdrL2V3a193ZWJfZGF0YWJhc2UuY3BwCiAgICAgZWZsL2V3ay9l
d2tfd2luZG93X2ZlYXR1cmVzLmNwcAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCmluZGV4IDg4MjEzZjQz
ZTRjNTgxMmUxZTdjNGUwNGQyMGEyODY0MTMwNzc1NmIuLjIwNGMwNWY1NmYzZmQyNDVhYmEzZmYz
Y2RmZmY2ZGQ1MzdkNTdhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKQEAgLTEwMjYsMTAgKzEwMjYs
OCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JO
ZXdQYWdlKCkKIAogICAgIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhtX2ZyYW1lLCBt
X3ZpZXcpOwogCi0gICAgaWYgKGlzTG9hZGluZ01haW5GcmFtZSgpKSB7Ci0gICAgICAgIGV3a192
aWV3X2ZyYW1lX3ZpZXdfY3JlYXRpb25fbm90aWZ5KG1fdmlldyk7CisgICAgaWYgKGlzTG9hZGlu
Z01haW5GcmFtZSgpKQogICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2NsZWFyZWQobV92aWV3
KTsKLSAgICB9CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpZFNhdmVUb1BhZ2VD
YWNoZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0
b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MzZjFkNzk2NTE4MmNjYzkz
ZjFhMGQwYjNlODgzNjc3OGIxYWI4OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTkzNiArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCi0jaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9tYXRyaXhfcHJpdmF0ZS5o
IgotI2luY2x1ZGUgImV3a190aWxlZF9tb2RlbF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RWNvcmUu
aD4KLSNpbmNsdWRlIDxFaW5hLmg+Ci0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGVy
cm5vLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgotCi10eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhOwotdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0gRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbTsKLXR5cGVkZWYg
c3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0OwotCi1zdHJ1Y3QgX0V3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gewotICAgIEVJTkFfSU5MSVNUOwotICAgIEV3a19UaWxlKiB0
aWxlOwotICAgIEV2YXNfQ29vcmRfUmVjdGFuZ2xlIGdlb21ldHJ5OwotICAgIGJvb2wgc21vb3Ro
U2NhbGU7Ci19OwotCi1zdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UmVxdWVzdCB7Ci0gICAgRUlOQV9JTkxJU1Q7Ci0gICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJv
dzsKLSAgICBmbG9hdCB6b29tOwotfTsKLQotc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhIHsKLSAgICBFdmFzX09iamVjdF9TbWFydF9DbGlwcGVkX0RhdGEgYmFzZTsKLSAgICBF
dmFzX09iamVjdCogc2VsZjsKLSAgICBFdmFzX09iamVjdCogY29udGVudHNDbGlwcGVyOwotICAg
IHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfSW5saXN0KiogaXRlbXM7Ci0gICAgICAgIEV2YXNfQ29v
cmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCBy
b3dzOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVp
Z2h0OwotICAgICAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgICAgIGJvb2wgem9vbVdlYWtT
bW9vdGhTY2FsZSA6IDE7Ci0gICAgICAgICAgICBib29sIGhhc0FscGhhIDogMTsKLSAgICAgICAg
fSB0aWxlOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgICAgICAgICB9IGN1cnJlbnQsIG9sZCwgYmFz
ZSwgem9vbUNlbnRlcjsKLSAgICAgICAgfSBvZmZzZXQ7Ci0gICAgICAgIGJvb2wgdmlzaWJsZSA6
IDE7Ci0gICAgfSB2aWV3OwotICAgIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNwYWNlOwotICAgIHN0
cnVjdCB7Ci0gICAgICAgIEV3a19UaWxlX01hdHJpeCogbWF0cml4OwotICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJvdzsKLSAgICAgICAgfSBiYXNl
OwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCBy
b3dzOwotICAgICAgICB9IGN1cnJlbnQsIG9sZDsKLSAgICAgICAgRXZhc19Db29yZCB3aWR0aCwg
aGVpZ2h0OwotICAgIH0gbW9kZWw7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgYm9vbCAoKmNhbGxi
YWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFy
ZWEpOwotICAgICAgICB2b2lkKiBkYXRhOwotICAgICAgICBFaW5hX0lubGlzdCogcHJlUmVuZGVy
UmVxdWVzdHM7Ci0gICAgICAgIEVjb3JlX0lkbGVyKiBpZGxlcjsKLSAgICAgICAgYm9vbCBkaXNh
YmxlZDsKLSAgICAgICAgYm9vbCBzdXNwZW5kIDogMTsKLSAgICB9IHJlbmRlcjsKLSAgICBzdHJ1
Y3QgewotICAgICAgICB2b2lkKiAoKnByZUNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFdmFzX09iamVj
dCogZXdrQmFja2luZ1N0b3JlKTsKLSAgICAgICAgdm9pZCogcHJlRGF0YTsKLSAgICAgICAgdm9p
ZCogKCpwb3N0Q2FsbGJhY2spKHZvaWQqIGRhdGEsIHZvaWQqIHByZURhdGEsIEV2YXNfT2JqZWN0
KiBld2tCYWNraW5nU3RvcmUpOwotICAgICAgICB2b2lkKiBwb3N0RGF0YTsKLSAgICB9IHByb2Nl
c3M7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgYm9vbCBhbnkgOiAxOwotICAgICAgICBib29sIHBv
c2l0aW9uIDogMTsKLSAgICAgICAgYm9vbCBzaXplIDogMTsKLSAgICAgICAgYm9vbCBtb2RlbCA6
IDE7Ci0gICAgICAgIGJvb2wgb2Zmc2V0IDogMTsKLSAgICAgICAgYm9vbCBjb250ZW50c1NpemUg
OiAxOwotICAgIH0gY2hhbmdlZDsKLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBFY29yZV9F
dmVudF9IYW5kbGVyKiBzaWduYWxVc2VyOwotI2VuZGlmCi19OwotCi1zdGF0aWMgRXZhc19TbWFy
dF9DbGFzcyBfcGFyZW50X3NjID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7Ci0KLSNkZWZp
bmUgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4ob2JqLCBwdHIsIC4uLikgXAotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvYmopKTsgXAotICAgIGlm
ICghcHRyKSB7IFwKLSAgICAgICAgQ1JJVElDQUwoIm5vIHByaXZhdGUgZGF0YSBpbiBvYmo9JXAi
LCBvYmopOyBcCi0gICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgXAotICAgIH0KLQotc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYpOwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYp
OwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYpOwotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYpCi17Ci0gICAgLyogRG8gbm90IHByb2Nlc3MgdXBkYXRlcy4gTm90ZSB0aGF0IHdlIHN0aWxs
IHdhbnQgdG8gZ2V0IHVwZGF0ZXMgcmVxdWVzdHMKLSAgICAgKiBpbiB0aGUgcXVldWUgaW4gb3Jk
ZXIgdG8gbm90IG1pc3MgYW55IHVwZGF0ZXMgYWZ0ZXIgdGhlIHJlbmRlciBpcwotICAgICAqIHJl
c3VtZWQuCi0gICAgICovCi0gICAgaWYgKHByaXYtPnJlbmRlci5zdXNwZW5kIHx8ICFwcml2LT52
aWV3LnZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHZvaWQqIGRhdGEgPSBwcml2LT5w
cm9jZXNzLnByZUNhbGxiYWNrID8gcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayhwcml2LT5wcm9j
ZXNzLnByZURhdGEsIHByaXYtPnNlbGYpIDogMDsKLQotICAgIGV3a190aWxlX21hdHJpeF91cGRh
dGVzX3Byb2Nlc3MocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNz
LnBvc3RDYWxsYmFjaykKLSAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2socHJpdi0+
cHJvY2Vzcy5wb3N0RGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkKiBkYXRhKQotewotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKj4oZGF0YSk7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlZFVu
dXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKLQotICAgIGlmICh0aWxlZFVudXNlZENhY2hlKSB7Ci0gICAgICAgIERCRygiZmx1
c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7Ci0gICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9h
dXRvX2ZsdXNoKHRpbGVkVW51c2VkQ2FjaGUpOwotICAgIH0gZWxzZQotICAgICAgICBFUlIoIm5v
IGNhY2hlPyEiKTsKLX0KLQotc3RhdGljIEV3a19UaWxlKiBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9uZXcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgdW5zaWduZWQg
bG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQotewotICAgIEV2YXMq
IGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwcml2LT5zZWxmKTsKLSAgICBpZiAoIWV2YXMp
IHsKLSAgICAgICAgQ1JJVElDQUwoImV2YXNfb2JqZWN0X2V2YXNfZ2V0IGZhaWxlZCEiKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgRXdrX1RpbGUqIHRpbGUgPSBld2tfdGlsZV9t
YXRyaXhfdGlsZV9uZXcocHJpdi0+bW9kZWwubWF0cml4LCBldmFzLCBjb2x1bW4sIHJvdywgem9v
bSk7Ci0gICAgaWYgKCF0aWxlKSB7Ci0gICAgICAgIENSSVRJQ0FMKCJld2tfdGlsZV9tYXRyaXhf
dGlsZV9uZXcgZmFpbGVkISIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdGlsZTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
bW92ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSkKLXsKLSAgICBpdGVtLT5nZW9tZXRyeS54ID0geDsKLSAgICBpdGVtLT5nZW9t
ZXRyeS55ID0geTsKLQotICAgIGlmIChpdGVtLT50aWxlKQotICAgICAgICBldmFzX29iamVjdF9t
b3ZlKGl0ZW0tPnRpbGUtPmltYWdlLCB4LCB5KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0ZW0sIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIGl0ZW0t
Pmdlb21ldHJ5LncgPSB3aWR0aDsKLSAgICBpdGVtLT5nZW9tZXRyeS5oID0gaGVpZ2h0OwotCi0g
ICAgaWYgKCFpdGVtLT50aWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBldmFzX29iamVjdF9y
ZXNpemUoaXRlbS0+dGlsZS0+aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2ZpbGxfc2V0KGl0ZW0tPnRpbGUtPmltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsK
LX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRl
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlKiB0aWxlLCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtKQotewotICAgIGlmIChpdGVtLT50aWxlKQot
ICAgICAgICBDUklUSUNBTCgiaXRlbS0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0
ZW0tPnRpbGUpOwotCi0gICAgaXRlbS0+dGlsZSA9IHRpbGU7Ci0gICAgZXZhc19vYmplY3RfbW92
ZShpdGVtLT50aWxlLT5pbWFnZSwgaXRlbS0+Z2VvbWV0cnkueCwgaXRlbS0+Z2VvbWV0cnkueSk7
Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKGl0ZW0tPnRpbGUtPmltYWdlLCBpdGVtLT5nZW9tZXRy
eS53LCBpdGVtLT5nZW9tZXRyeS5oKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChp
dGVtLT50aWxlLT5pbWFnZSwgMCwgMCwgaXRlbS0+Z2VvbWV0cnkudywgaXRlbS0+Z2VvbWV0cnku
aCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdGVtLT50aWxlLT5p
bWFnZSwgaXRlbS0+c21vb3RoU2NhbGUpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3Nl
dChpdGVtLT50aWxlLT5pbWFnZSwgcHJpdi0+dmlldy50aWxlLmhhc0FscGhhKTsKLQotICAgIGlm
ICghZXdrX3RpbGVfdmlzaWJsZV9nZXQodGlsZSkpCi0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X21lbWJlcl9hZGQodGlsZS0+aW1hZ2UsIHByaXYtPnNlbGYpOwotCi0gICAgZXdrX3RpbGVfc2hv
dyh0aWxlKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCBkb3VibGUgbGFzdFVzZWQpCi17Ci0gICAgZXdrX3Rp
bGVfaGlkZShpdGVtLT50aWxlKTsKLSAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0ZW0t
PnRpbGUpKQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGl0ZW0tPnRpbGUt
PmltYWdlKTsKLQotICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChwcml2LT5tb2RlbC5tYXRy
aXgsIGl0ZW0tPnRpbGUsIGxhc3RVc2VkKTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1v
ZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godGlsZVVu
dXNlZENhY2hlKTsKLQotICAgIGl0ZW0tPnRpbGUgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2KQotewotICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29w
X3RpbWVfZ2V0KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBwcml2LT52
aWV3LnJvd3M7ICsraSkgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBp
dGVtOwotICAgICAgICBFaW5hX0lubGlzdCogbGlzdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07Ci0g
ICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobGlzdCwgaXRlbSkgewotICAgICAgICAgICAgaWYg
KGl0ZW0tPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgdW5zaWdu
ZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQotewotICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdCA9IG5ldyBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Q7Ci0KLSAgICBwcml2LT5y
ZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQocHJpdi0+cmVuZGVy
LnByZVJlbmRlclJlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVzdCkpOwotCi0gICAgcmVx
dWVzdC0+Y29sdW1uID0gY29sdW1uOwotICAgIHJlcXVlc3QtPnJvdyA9IHJvdzsKLSAgICByZXF1
ZXN0LT56b29tID0gem9vbTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
UHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0KQotewotICAgIHByaXYtPnJlbmRlci5wcmVSZW5k
ZXJSZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3JlbW92ZShwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVx
dWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7Ci0gICAgZGVsZXRlIHJlcXVlc3Q7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1
ZXN0KiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNv
bnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCi17Ci0gICAgcmV0dXJuIEVJ
TkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzLCBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwotfQotCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3QqKiBw
cmVSZW5kZXJMaXN0ID0gJnByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0czsKLSAgICB3aGls
ZSAoKnByZVJlbmRlckxpc3QpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0OwotICAgICAgICByZXF1ZXN0ID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKLSAgICAgICAgKnBy
ZVJlbmRlckxpc3QgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnByZVJlbmRlckxpc3QsICpwcmVSZW5k
ZXJMaXN0KTsKLSAgICAgICAgZGVsZXRlIHJlcXVlc3Q7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3QqKiBwcmVS
ZW5kZXJMaXN0ID0gJnByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0czsKLSAgICBFaW5hX0lu
bGlzdCogaXRlciA9ICpwcmVSZW5kZXJMaXN0OwotICAgIHdoaWxlIChpdGVyKSB7Ci0gICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdCA9IEVJ
TkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoaXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0KTsKLSAgICAgICAgRWluYV9Jbmxpc3QqIG5leHQgPSBpdGVyLT5uZXh0
OwotICAgICAgICAqcHJlUmVuZGVyTGlzdCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcHJlUmVuZGVy
TGlzdCwgaXRlcik7Ci0gICAgICAgIGl0ZXIgPSBuZXh0OwotICAgICAgICBkZWxldGUgcmVxdWVz
dDsKLSAgICB9Ci19Ci0KLS8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayB3YXMg
Y2FsbGVkIGlmIHJlcXVpcmVkISAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2KQotewotICAgIEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCA9IHBy
aXYtPm1vZGVsLm1hdHJpeDsKLSAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1l
X2dldCgpOwotCi0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0
KiByZXF1ZXN0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9m
aXJzdChwcml2KTsKLSAgICBpZiAoIXJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVu
c2lnbmVkIGxvbmcgY29sdW1uID0gcmVxdWVzdC0+Y29sdW1uOwotICAgIHVuc2lnbmVkIGxvbmcg
cm93ID0gcmVxdWVzdC0+cm93OwotICAgIGZsb2F0IHpvb20gPSByZXF1ZXN0LT56b29tOwotCi0g
ICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0aWxlTWF0cml4LCBjb2x1
bW4sIHJvdywgem9vbSkpIHsKLSAgICAgICAgREJHKCJubyBwcmUtcmVuZGVyIHJlcXVpcmVkIGZv
ciB0aWxlICVsdSwlbHUgQCAlZi4iLCBjb2x1bW4sIHJvdywgem9vbSk7Ci0gICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHByaXYsIHJlcXVlc3Qp
OwotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEV3a19UaWxlKiB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfbmV3KHByaXYsIGNvbHVtbiwgcm93LCB6b29tKTsKLSAgICBpZiAoIXRpbGUpIHsKLSAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwocHJp
diwgcmVxdWVzdCk7Ci0gICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRWluYV9SZWN0YW5nbGUgYXJlYTsKLSAgICBFSU5B
X1JFQ1RBTkdMRV9TRVQoJmFyZWEsIDAsIDAsIHByaXYtPnZpZXcudGlsZS53aWR0aCwgcHJpdi0+
dmlldy50aWxlLmhlaWdodCk7Ci0KLSAgICBwcml2LT5yZW5kZXIuY2FsbGJhY2socHJpdi0+cmVu
ZGVyLmRhdGEsIHRpbGUsICZhcmVhKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0
ZV9hZGQodGlsZS0+aW1hZ2UsIGFyZWEueCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7Ci0gICAg
ZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0aWxlTWF0cml4LCB0aWxlKTsKLQot
ICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0aWxlTWF0cml4LCB0aWxlLCBsYXN0X3VzZWQp
OwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3By
b2Nlc3NfaWRsZXJfY2Iodm9pZCogZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+
KGRhdGEpOwotCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucHJlQ2FsbGJhY2spCi0gICAgICAgIGRh
dGEgPSBwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNrKHByaXYtPnByb2Nlc3MucHJlRGF0YSwgcHJp
di0+c2VsZik7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X3Byb2Nlc3Nfc2luZ2xlKHByaXYpOwotCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdENh
bGxiYWNrKQotICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjayhwcml2LT5wcm9jZXNz
LnBvc3REYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKLQotICAgIGlmICghcHJpdi0+cmVuZGVyLnBy
ZVJlbmRlclJlcXVlc3RzKSB7Ci0gICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9IDA7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJf
c3RvcChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQotewotICAgIGlmICghcHJp
di0+cmVuZGVyLmlkbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBlY29yZV9pZGxlcl9kZWwo
cHJpdi0+cmVuZGVyLmlkbGVyKTsKLSAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOwotfQotCi1z
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQotewotICAgIGlm
IChwcml2LT5yZW5kZXIuaWRsZXIgfHwgIXByaXYtPnZpZXcudmlzaWJsZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gZWNvcmVfaWRsZXJfYWRkKF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2IsIHByaXYpOwotfQotCi1zdGF0
aWMgYm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKLXsKLSAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3Bl
bmQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcHJpdi0+cmVuZGVyLnN1c3BlbmQgPSB0
cnVlOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rv
cChwcml2KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSog
cHJpdikKLXsKLSAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gZmFsc2U7Ci0KLSAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7Ci0gICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQg
bG9uZyByb3cpCi17Ci0gICAgaWYgKCFwcml2LT52aWV3LnZpc2libGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGxvbmcgY3VycmVudENvbHVtbiA9IHByaXYtPm1vZGVs
LmJhc2UuY29sdW1uICsgY29sdW1uOwotICAgIHVuc2lnbmVkIGxvbmcgY3VycmVudFJvdyA9IHBy
aXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OwotICAgIGRvdWJsZSBsYXN0VXNlZCA9IGVjb3JlX2xv
b3BfdGltZV9nZXQoKTsKLQotICAgIGlmIChjdXJyZW50Q29sdW1uID49IHByaXYtPm1vZGVsLmN1
cnJlbnQuY29sdW1ucyB8fCBjdXJyZW50Um93ID49IHByaXYtPm1vZGVsLmN1cnJlbnQucm93cykg
ewotICAgICAgICBpZiAoaXRlbS0+dGlsZSkKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdFVzZWQpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHpvb20gPSBwcml2LT52aWV3LnRpbGUuem9vbTsKLQot
ICAgICAgICBpZiAoaXRlbS0+dGlsZSkgewotICAgICAgICAgICAgRXdrX1RpbGUqIG9sZCA9IGl0
ZW0tPnRpbGU7Ci0gICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gY3VycmVudFJvdyB8fCBvbGQt
PmNvbHVtbiAhPSBjdXJyZW50Q29sdW1uIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRl
bSwgbGFzdFVzZWQpOwotICAgICAgICAgICAgZWxzZSBpZiAob2xkLT5yb3cgPT0gY3VycmVudFJv
dyAmJiBvbGQtPmNvbHVtbiA9PSBjdXJyZW50Q29sdW1uICYmIG9sZC0+em9vbSA9PSB6b29tKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgRXdrX1Rp
bGUqIHRpbGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0
cml4LCBjdXJyZW50Q29sdW1uLCBjdXJyZW50Um93LCB6b29tKTsKLSAgICAgICAgaWYgKCF0aWxl
KSB7Ci0gICAgICAgICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXRlbS0+dGls
ZSB3YXMgc2V0ISAqLwotICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpIHsKLSAgICAgICAgICAg
ICAgICBDUklUSUNBTCgiaXRlbS0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0ZW0t
PnRpbGUpOwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rp
c3NvY2lhdGUocHJpdiwgaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VkKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLyogRG8gbm90IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLwot
ICAgICAgICAgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgewotICAgICAgICAgICAgICAg
IHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY3VycmVudENv
bHVtbiwgY3VycmVudFJvdywgem9vbSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aWxlKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRpbGUsIGl0ZW0pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHRpbGUgIT0gaXRlbS0+dGlsZSkgewotICAgICAg
ICAgICAgaWYgKGl0ZW0tPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwgbGFzdFVzZWQpOwotICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRpbGUsIGl0
ZW0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgdW5zaWduZWQgbG9uZyBj
b2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93KQotewotICAgIERCRygiZXdrQmFja2luZ1N0b3JlPSVw
IiwgcHJpdi0+c2VsZik7Ci0KLSAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcu
dGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0OwotICAgIEV2YXNfQ29vcmQgeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIHBy
aXYtPnZpZXcueCArIHRpbGVXaWR0aCAqIGNvbHVtbjsKLSAgICBFdmFzX0Nvb3JkIHkgPSBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3LnkgKyB0aWxlSGVpZ2h0ICogcm93Owot
Ci0gICAgT3duUHRyPEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0+IGl0ZW0gPSBhZG9wdFB0
cihuZXcgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgaXRlbS0+dGlsZSA9IDA7
Ci0gICAgaXRlbS0+c21vb3RoU2NhbGUgPSBwcml2LT52aWV3LnRpbGUuem9vbVdlYWtTbW9vdGhT
Y2FsZTsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbS5nZXQo
KSwgeCwgeSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0ZW0u
Z2V0KCksIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7Ci0gICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0uZ2V0KCksIGNvbHVtbiwgcm93KSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gaXRlbS5sZWFrUHRyKCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtKQotewot
ICAgIGlmIChpdGVtLT50aWxlKSB7Ci0gICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9s
b29wX3RpbWVfZ2V0KCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rp
c3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKLSAgICB9Ci0KLSAgICBkZWxldGUgaXRl
bTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3Ro
X3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCBib29sIHNtb290
aFNjYWxlKQotewotICAgIGlmIChpdGVtLT5zbW9vdGhTY2FsZSA9PSBzbW9vdGhTY2FsZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGl0ZW0tPnRpbGUpCi0gICAgICAgIGV2YXNfb2JqZWN0
X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXRlbS0+dGlsZS0+aW1hZ2UsIHNtb290aFNjYWxlKTsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2Vk
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCi17Ci0gICAgaWYgKHByaXYtPmNo
YW5nZWQuYW55KQotICAgICAgICByZXR1cm47Ci0KLSAgICBldmFzX29iamVjdF9zbWFydF9jaGFu
Z2VkKHByaXYtPnNlbGYpOwotICAgIHByaXYtPmNoYW5nZWQuYW55ID0gdHJ1ZTsKLX0KLQotc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiogcm93TGlzdCwgdW5z
aWduZWQgbG9uZyBjb3VudCkKLXsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBFaW5hX0lubGlzdCogbmV4dEl0ZW0gPSAoKnJvd0xpc3QpLT5sYXN0OwotICAgIGZvciAo
dW5zaWduZWQgbG9uZyBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKLSAgICAgICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NP
TlRBSU5FUl9HRVQobmV4dEl0ZW0sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAg
ICAgICBuZXh0SXRlbSA9IG5leHRJdGVtLT5wcmV2OwotICAgICAgICAqcm93TGlzdCA9IGVpbmFf
aW5saXN0X3JlbW92ZSgqcm93TGlzdCwgRUlOQV9JTkxJU1RfR0VUKGl0ZW0pKTsKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0ZW0pOwotICAgIH0KLX0K
LQotc3RhdGljIGJvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRk
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiogcm93TGlz
dCwgdW5zaWduZWQgbG9uZyBiYXNlQ29sdW1uLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotICAg
IGNvbnN0IHVuc2lnbmVkIGxvbmcgcm93ID0gcm93TGlzdCAtIHByaXYtPnZpZXcuaXRlbXM7Ci0K
LSAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2Jhc2VDb2x1
bW4pIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlQ29sdW1uLCByb3cpOwotICAg
ICAgICBpZiAoIWl0ZW0pIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRkIGNv
bHVtbiAlbHUgb2YgJWx1IGluIHJvdyAlbHUuIiwgaSwgY291bnQsIHJvdyk7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcm93TGlz
dCwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAq
cm93TGlzdCA9IGVpbmFfaW5saXN0X2FwcGVuZCgqcm93TGlzdCwgRUlOQV9JTkxJU1RfR0VUKGl0
ZW0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgRWluYV9Jbmxpc3QqIHJvdykKLXsKLSAgICB3aGlsZSAocm93KSB7Ci0gICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0gPSBFSU5BX0lOTElTVF9DT05UQUlO
RVJfR0VUKHJvdywgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgICAgIHJvdyA9
IHJvdy0+bmV4dDsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHBy
aXYsIGl0ZW0pOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRWluYV9Jbmxpc3QqKiBzdGFydCwgRWluYV9Jbmxpc3QqKiBlbmQpCi17Ci0gICAgZm9yICg7
IHN0YXJ0IDwgZW5kOyArK3N0YXJ0KSB7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Jvd19kZWwocHJpdiwgKnN0YXJ0KTsKLSAgICAgICAgKnN0YXJ0ID0gMDsKLSAgICB9
Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxs
X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQotewotICAgIEVpbmFfSW5s
aXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIEVpbmFfSW5saXN0KiogZW5kID0g
cHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKLSAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFydCwgZW5kKTsKLQotICAgIGZy
ZWUocHJpdi0+dmlldy5pdGVtcyk7Ci0gICAgcHJpdi0+dmlldy5pdGVtcyA9IDA7Ci0gICAgcHJp
di0+dmlldy5jb2x1bW5zID0gMDsKLSAgICBwcml2LT52aWV3LnJvd3MgPSAwOwotfQotCi1zdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyKHZvaWQqIGRhdGEsIEV3a19U
aWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKLXsKLSAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSo+KGRhdGEpOwotCi0gICAgSU5GTygiVE9ETyAlcCAodmlzaWJsZT8gJWQpIFsl
bHUsJWx1XSAlZCwlZCArICVkeCVkIiwKLSAgICAgICAgdGlsZSwgdGlsZS0+dmlzaWJsZSwgdGls
ZS0+Y29sdW1uLCB0aWxlLT5yb3csIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgp
OwotCi0gICAgaWYgKCF0aWxlLT52aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
cHJpdi0+dmlldy50aWxlLndpZHRoICE9IHRpbGUtPndpZHRoIHx8IHByaXYtPnZpZXcudGlsZS5o
ZWlnaHQgIT0gdGlsZS0+aGVpZ2h0KQotICAgICAgICByZXR1cm47IC8vIHRvZG86IHJlbW92ZSBt
ZSBsYXRlciwgZG9uJ3QgZXZlbiBmbGFnIGFzIGRpcnR5IQotCi0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4ocHJpdi0+cmVuZGVyLmNhbGxiYWNrKTsKLSAgICBpZiAoIXByaXYtPnJlbmRl
ci5jYWxsYmFjayhwcml2LT5yZW5kZXIuZGF0YSwgdGlsZSwgYXJlYSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCh0aWxlLT5pbWFnZSwg
YXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVV
bnVzZWRDYWNoZSkKLXsKLSAgICBpZiAocHJpdi0+bW9kZWwubWF0cml4KSB7Ci0gICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChwcml2KTsKLQotICAgICAg
ICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IGZhbHNlOwotICAgICAgICBwcml2LT5jaGFuZ2VkLnNp
emUgPSB0cnVlOwotCi0gICAgICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1h
dHJpeCk7Ci0gICAgfQotCi0gICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVfbWF0cml4
X25ldyh0aWxlVW51c2VkQ2FjaGUsIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywgcHJpdi0+
bW9kZWwuY3VycmVudC5yb3dzLCBwcml2LT52aWV3LnRpbGUuem9vbSwgcHJpdi0+Y29sb3JTcGFj
ZSwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJpdik7Ci19Ci0KLXN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNfT2JqZWN0
KiBld2tCYWNraW5nU3RvcmUsIEV2YXNfT2JqZWN0KiBtZW1iZXIpCi17Ci0gICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLSAgICBpZiAoIXByaXYtPmNv
bnRlbnRzQ2xpcHBlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZhc19vYmplY3RfY2xpcF91
bnNldChtZW1iZXIpOwotICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29u
dGVudHNDbGlwcGVyKSkKLSAgICAgICAgZXZhc19vYmplY3RfaGlkZShwcml2LT5jb250ZW50c0Ns
aXBwZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
bWVtYmVyX2FkZChFdmFzX09iamVjdCogZXdrQmFja2luZ1N0b3JlLCBFdmFzX09iamVjdCogbWVt
YmVyKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a0JhY2tpbmdTdG9yZSwgcHJp
dik7Ci0gICAgaWYgKCFwcml2LT5jb250ZW50c0NsaXBwZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29udGVudHNDbGlwcGVyKTsK
LSAgICBpZiAocHJpdi0+dmlldy52aXNpYmxlKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHBy
aXYtPmNvbnRlbnRzQ2xpcHBlcik7Ci19Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYpCi17Ci0gICAgc3RhdGljIHVuc2lnbmVkIHJ1biA9IDA7Ci0KLSAg
ICArK3J1bjsKLQotICAgIHByaW50ZigiXG4tLS0gQkVHSU4gREVCVUcgVElMRUQgQkFDS0lORyBT
VE9SRSBNRU1PUlkgWyVkXSAtLVxuIgotICAgICAgICAgICAidGlsZT0lMC4yZiwgb2JqPSVwLCBw
cml2PSVwLCB2aWV3Lml0ZW1zPSVwLCBtYXRyaXg9JXBcbiIsCi0gICAgICAgICAgIHJ1biwgZWNv
cmVfbG9vcF90aW1lX2dldCgpLAotICAgICAgICAgICBwcml2LT5zZWxmLCBwcml2LCBwcml2LT52
aWV3Lml0ZW1zLCBwcml2LT5tb2RlbC5tYXRyaXgpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X2Ri
Zyhwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX2FjY291bnRpbmdfZGJnKCk7Ci0K
LSAgICBwcmludGYoIi0tLSBFTkQgREVCVUcgVElMRUQgQkFDS0lORyBTVE9SRSBNRU1PUlkgWyVk
XSAtLVxuXG4iLCBydW4pOwotfQotCi1zdGF0aWMgYm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc2lnX3Vzcih2b2lkKiBkYXRhLCBpbnQgdHlwZSwgdm9pZCogZXZlbnQpCi17Ci0gICAgRWNv
cmVfRXZlbnRfU2lnbmFsX1VzZXIqIHNpZ25hbFVzZXIgPSBzdGF0aWNfY2FzdDxFY29yZV9FdmVu
dF9TaWduYWxfVXNlcio+KGV2ZW50KTsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEp
OwotCi0gICAgaWYgKHNpZ25hbFVzZXItPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2F1dG9fZmx1c2godGlsZVVudXNlZENhY2hlKTsKLSAgICB9Ci0KLSAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19kYmcocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX21lbV9kYmcocHJpdik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi1zdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBl
d2tCYWNraW5nU3RvcmUpCi17Ci0gICAgREJHKCJld2tCYWNraW5nU3RvcmU9JXAiLCBld2tCYWNr
aW5nU3RvcmUpOwotCi0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0
YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9m
KCpwcml2KSkpOwotICAgIGlmICghcHJpdikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJpdi0+
c2VsZiA9IGV3a0JhY2tpbmdTdG9yZTsKLSAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsK
LSAgICBwcml2LT52aWV3LnRpbGUud2lkdGggPSBkZWZhdWx0VGlsZVdpZHRoOwotICAgIHByaXYt
PnZpZXcudGlsZS5oZWlnaHQgPSBkZWZhdWx0VGlsZUhlaWd0aDsKLSAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXJyZW50LnggPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueSA9IDA7
Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC55ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwotICAgIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7Ci0KLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9
IDA7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAwOwotICAgIHByaXYtPm1vZGVsLmN1cnJl
bnQuY29sdW1ucyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzID0gMTsKLSAgICBw
cml2LT5tb2RlbC5vbGQuY29sdW1ucyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAw
OwotICAgIHByaXYtPm1vZGVsLndpZHRoID0gMDsKLSAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAw
OwotICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gZmFsc2U7Ci0gICAgcHJpdi0+Y29sb3JTcGFj
ZSA9IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4ODsgLy8gVE9ETzogZGV0ZWN0IGl0LgotCi0gICAg
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLSAgICBf
cGFyZW50X3NjLmFkZChld2tCYWNraW5nU3RvcmUpOwotCi0gICAgcHJpdi0+Y29udGVudHNDbGlw
cGVyID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZCgKLSAgICAgICAgZXZhc19vYmplY3RfZXZh
c19nZXQoZXdrQmFja2luZ1N0b3JlKSk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250
ZW50c0NsaXBwZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50
c0NsaXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2
LT5tb2RlbC5oZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChwcml2LT5jb250ZW50
c0NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhwcml2
LT5jb250ZW50c0NsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJp
di0+Y29udGVudHNDbGlwcGVyLCBld2tCYWNraW5nU3RvcmUpOwotCi0gICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUocHJpdiwgMCk7Ci0gICAgZXZhc19vYmpl
Y3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHBy
aXYtPmNvbnRlbnRzQ2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsKLQotI2lmZGVmIERFQlVH
X01FTV9MRUFLUwotICAgIHByaXYtPnNpZ25hbFVzZXIgPSBlY29yZV9ldmVudF9oYW5kbGVyX2Fk
ZAotICAgICAgICAgICAgICAgICAgICAgICAgKEVDT1JFX0VWRU5UX1NJR05BTF9VU0VSLCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7Ci0jZW5kaWYKLX0KLQotc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdr
QmFja2luZ1N0b3JlKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a0JhY2tpbmdT
dG9yZSwgcHJpdik7Ci0gICAgREJHKCJld2tCYWNraW5nU3RvcmU9JXAiLCBld2tCYWNraW5nU3Rv
cmUpOwotCi0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUgPSBld2tf
dGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0aWxlVW51c2VkQ2FjaGUpOwotCi0gICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHByaXYpOwotCi0gICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0b3AocHJpdik7Ci0gICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHByaXYpOwotCi0jaWZkZWYg
REVCVUdfTUVNX0xFQUtTCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcocHJp
dik7Ci0gICAgaWYgKHByaXYtPnNpZ191c3IpCi0gICAgICAgIGVjb3JlX2V2ZW50X2hhbmRsZXJf
ZGVsKHByaXYtPnNpZ191c3IpOwotI2VuZGlmCi0KLSAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShw
cml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJp
di0+Y29udGVudHNDbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHND
bGlwcGVyKTsKLQotICAgIF9wYXJlbnRfc2MuZGVsKGV3a0JhY2tpbmdTdG9yZSk7Ci0KLSNpZmRl
ZiBERUJVR19NRU1fTEVBS1MKLSAgICBwcmludGYoIlxuSU1QT1JUQU5UOiBUSUxFRCBCQUNLSU5H
IFNUT1JFIERFTEVURUQgKG1heSBiZSByZWFsIGxlYWtzKVxuIik7Ci0gICAgZXdrX3RpbGVfYWNj
b3VudGluZ19kYmcoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdrQmFja2luZ1N0b3JlLCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSkKLXsKLSAgICBEQkcoImV3a0JhY2tpbmdTdG9yZT0lcCwgbmV3
IHBvczogJWR4JWQiLCBld2tCYWNraW5nU3RvcmUsIHgsIHkpOwotCi0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLQotICAgIGlmIChwcml2LT5jaGFu
Z2VkLnBvc2l0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJpdi0+dmlldy54ID09
IHggJiYgcHJpdi0+dmlldy55ID09IHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByaXYtPmNo
YW5nZWQucG9zaXRpb24gPSB0cnVlOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFu
Z2VkKHByaXYpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUsIEV2YXNfQ29vcmQgd2lkdGgs
IEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIERCRygiZXdrQmFja2luZ1N0b3JlPSVwLCBuZXcg
c2l6ZTogJWR4JWQiLCBld2tCYWNraW5nU3RvcmUsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLQotICAgIGlmIChw
cml2LT5jaGFuZ2VkLnNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT52aWV3
LndpZHRoID09IHdpZHRoICYmIHByaXYtPnZpZXcuaGVpZ2h0ID09IGhlaWdodCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gdHJ1ZTsKLSAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Nob3coRXZhc19PYmplY3QqIGV3a0JhY2tpbmdTdG9yZSkK
LXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNraW5nU3RvcmUsIHByaXYpOwot
Ci0gICAgcHJpdi0+dmlldy52aXNpYmxlID0gdHJ1ZTsKLSAgICBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9lbmFibGVfcmVuZGVyKGV3a0JhY2tpbmdTdG9yZSk7Ci0gICAgX3BhcmVudF9zYy5zaG93
KGV3a0JhY2tpbmdTdG9yZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9oaWRlKEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUpCi17Ci0gICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLQotICAgIHByaXYt
PnZpZXcudmlzaWJsZSA9IGZhbHNlOwotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2Fi
bGVfcmVuZGVyKGV3a0JhY2tpbmdTdG9yZSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfZGlzc29jaWF0ZV9hbGwocHJpdik7Ci0gICAgX3BhcmVudF9zYy5oaWRlKGV3a0JhY2tp
bmdTdG9yZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNh
bGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29v
cmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgRXZhc19D
b29yZCB0aWxlSGVpZ2h0KQotewotICAgIElORk8oImV3a0JhY2tpbmdTdG9yZT0lcCwgbmV3IHNp
emU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICB1bnNpZ25lZCBs
b25nIGNvbHVtbnMgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oY2VpbCh3aWR0aCAv
IHN0YXRpY19jYXN0PGZsb2F0Pih0aWxlV2lkdGgpKSk7Ci0gICAgdW5zaWduZWQgbG9uZyByb3dz
ID0gMSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGNlaWwoaGVpZ2h0IC8gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHRpbGVIZWlnaHQpKSk7Ci0KLSAgICBJTkZPKCJld2tCYWNraW5nU3RvcmU9JXAg
bmV3IGdyaWQgc2l6ZSBjb2x1bW5zOiAlbHUsIHJvd3M6ICVsdSwgd2FzICVsdSwgJWx1IiwgcHJp
di0+c2VsZiwgY29sdW1ucywgcm93cywgcHJpdi0+dmlldy5jb2x1bW5zLCBwcml2LT52aWV3LnJv
d3MpOwotCi0gICAgaWYgKHByaXYtPnZpZXcuY29sdW1ucyA9PSBjb2x1bW5zICYmIHByaXYtPnZp
ZXcucm93cyA9PSByb3dzKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBsb25nIG9s
ZENvbHMgPSBwcml2LT52aWV3LmNvbHVtbnM7Ci0gICAgdW5zaWduZWQgbG9uZyBvbGRSb3dzID0g
cHJpdi0+dmlldy5yb3dzOwotCi0gICAgaWYgKHJvd3MgPCBvbGRSb3dzKSB7Ci0gICAgICAgIEVp
bmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKLSAgICAgICAgRWlu
YV9Jbmxpc3QqKiBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsKLSAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJpdiwgc3RhcnQsIGVu
ZCk7Ci0gICAgfQotCi0gICAgdm9pZCogbmV3SXRlbXMgPSByZWFsbG9jKHByaXYtPnZpZXcuaXRl
bXMsIHNpemVvZihFaW5hX0lubGlzdCopICogcm93cyk7Ci0gICAgaWYgKCFuZXdJdGVtcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcHJpdi0+dmlldy5pdGVtcyA9IHN0YXRpY19jYXN0PEVpbmFf
SW5saXN0Kio+KG5ld0l0ZW1zKTsKLSAgICBwcml2LT52aWV3LnJvd3MgPSByb3dzOwotICAgIHBy
aXYtPnZpZXcuY29sdW1ucyA9IGNvbHVtbnM7Ci0gICAgaWYgKHJvd3MgPiBvbGRSb3dzKSB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsK
LSAgICAgICAgRWluYV9Jbmxpc3QqKiBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKLSAg
ICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyArK3N0YXJ0KSB7Ci0gICAgICAgICAgICAqc3RhcnQg
PSAwOwotICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19jb2xzX2VuZF9hZGQocHJpdiwgc3RhcnQsIDAsIGNvbHVtbnMpOwotICAgICAgICAgICAg
aWYgKCFyZXN1bHQpIHsKLSAgICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9j
YXRlICVsZCBjb2x1bW5zIiwgY29sdW1ucyk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJpdiwgcHJpdi0+dmlldy5pdGVtcyAr
IG9sZFJvd3MsIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRS
b3dzOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmIChjb2x1bW5zICE9IG9sZENvbHMpIHsKLSAgICAgICAgbG9uZyB0b2Rv
ID0gY29sdW1ucyAtIG9sZENvbHM7Ci0gICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2
LT52aWV3Lml0ZW1zOwotICAgICAgICBFaW5hX0lubGlzdCoqIGVuZCA9IHN0YXJ0ICsgc3RkOjpt
aW4ob2xkUm93cywgcm93cyk7Ci0gICAgICAgIGlmICh0b2RvID4gMCkgewotICAgICAgICAgICAg
Zm9yICg7IHN0YXJ0IDwgZW5kOyArK3N0YXJ0KSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1
bHQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQocHJpdiwgc3Rh
cnQsIG9sZENvbHMsIHRvZG8pOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNvbHVtbnMh
IiwgdG9kbyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFydC0tOyBzdGFydCA+PSBw
cml2LT52aWV3Lml0ZW1zOyAtLXN0YXJ0KQotICAgICAgICAgICAgICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiBvbGRSb3dzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVs
KHByaXYsIHN0YXJ0LCB0b2RvKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgaWYgKHRvZG8gPCAwKSB7Ci0gICAgICAgICAgICB0b2RvID0gLXRvZG87Ci0gICAg
ICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7ICsrc3RhcnQpCi0gICAgICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2Rv
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxs
X3JlbmRlcmVycyhwcml2KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQotewotICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgcHJp
di0+dmlldy53aWR0aCA9IHdpZHRoOwotICAgIHByaXYtPnZpZXcuaGVpZ2h0ID0gaGVpZ2h0Owot
Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwgd2lk
dGgsIGhlaWdodCwgcHJpdi0+dmlldy50aWxlLndpZHRoLCBwcml2LT52aWV3LnRpbGUuaGVpZ2h0
KTsKLX0KLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotLy8gVE9ETzogcmVtb3ZlIG1lIGxhdGVy
Lgotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhj
b25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQotewotICAgIHByaW50Zigi
dGlsZXM9JTJsZCwlMmxkICBtb2RlbD0lMmxkLCUybGQgWyVkeCVkXSBiYXNlPSUrM2xkLCUrNGxk
IG9mZnNldD0lKzRkLCUrNGQgb2xkPSUrNGQsJSs0ZCBiYXNlPSUrM2QsJSszZFxuIiwKLSAgICAg
ICAgICAgcHJpdi0+dmlldy5jb2x1bW5zLCBwcml2LT52aWV3LnJvd3MsCi0gICAgICAgICAgIHBy
aXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzLAotICAg
ICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0LAotICAgICAgICAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCi0gICAgICAg
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VycmVu
dC55LAotICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnksCi0gICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55KTsKLQotICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3
Lml0ZW1zOwotICAgIEVpbmFfSW5saXN0KiogZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYt
PnZpZXcucm93czsKLSAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7ICsrc3RhcnQpIHsKLSAgICAgICAg
Y29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKLQotICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKCpzdGFydCwgaXRlbSkgewotICAgICAgICAgICAgcHJpbnRmKCIgJSs0
ZCwlKzRkICIsIGl0ZW0tPmdlb21ldHJ5LngsIGl0ZW0tPmdlb21ldHJ5LnkpOwotCi0gICAgICAg
ICAgICBpZiAoIWl0ZW0tPnRpbGUpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAgICAg
ICA7Iik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIlOHAgJWx1
LCVsdTsiLCBpdGVtLT50aWxlLCBpdGVtLT50aWxlLT5jb2x1bW4sIGl0ZW0tPnRpbGUtPnJvdyk7
Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgIH0KLSAgICBwcmludGYoIi0t
LVxuIik7Ci19Ci0jZW5kaWYKLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgdG9wIHJvdyBk
b3duIGFzIGxhc3QuCi0gKgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2Ft
ZSwgYnV0IGxvZ2ljYWxseSB0aGUgdG9wIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBu
b3cgYXQgYm90dG9tIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCi0gKgotICogVGhp
cyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCi0gKiBwcml2
LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4
IHNvIGl0Ci0gKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KLSAqCi0gKiBAcGFy
YW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCi0gKi8K
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0gICAgdW5zaWduZWQgbG9uZyBsYXN0Um93ID0gcHJp
di0+dmlldy5yb3dzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcu
dGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0OwotICAgIEV2YXNfQ29vcmQgb2Zmc2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSArIGNvdW50ICogdGlsZUhlaWdodDsKLSAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSB5
ICsgKGxhc3RSb3cgLSBjb3VudCArIDEpICogdGlsZUhlaWdodCArIG9mZnNldFk7Ci0gICAgRXZh
c19Db29yZCBvcmlnaW5YID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLQotICAgIEVp
bmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIEVpbmFfSW5saXN0Kiog
ZW5kID0gc3RhcnQgKyBsYXN0Um93OwotCi0gICAgZm9yICg7IGNvdW50ID4gMDsgLS1jb3VudCkg
ewotICAgICAgICBFaW5hX0lubGlzdCoqIGl0OwotICAgICAgICBFaW5hX0lubGlzdCogdGVtcCA9
ICpzdGFydDsKLQotICAgICAgICBmb3IgKGl0ID0gc3RhcnQ7IGl0IDwgZW5kOyArK2l0KQotICAg
ICAgICAgICAgKml0ID0gKihpdCArIDEpOwotICAgICAgICAqaXQgPSB0ZW1wOwotCi0gICAgICAg
ICsrcHJpdi0+bW9kZWwuYmFzZS5yb3c7Ci0KLSAgICAgICAgRXZhc19Db29yZCB0aWxlUG9zaXRp
b25YID0gb3JpZ2luWDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4gPSAwOwotICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOwotICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKHRlbXAsIGl0ZW0pIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX21vdmUoaXRlbSwgdGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7Ci0gICAg
ICAgICAgICB0aWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsKLSAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgY29sdW1uLCBsYXN0Um93KTsK
LSAgICAgICAgICAgICsrY29sdW1uOwotICAgICAgICB9Ci0gICAgICAgIHRpbGVQb3NpdGlvblkg
Kz0gdGlsZUhlaWdodDsKLSAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2Zm
c2V0WTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgYm90dG9tIHJvdyB1cCBhcyBm
aXJzdC4KLSAqCi0gKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQg
bG9naWNhbGx5IHRoZSBib3R0b20gdGhhdAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBh
dCB0b3AgYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdv
cnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcu
cm93cywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQK
LSAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3Vu
dCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNp
Z25lZCBsb25nIGNvdW50KQotewotICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmll
dy50aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGls
ZS5oZWlnaHQ7Ci0gICAgRXZhc19Db29yZCBvZmZzZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55IC0gY291bnQgKiB0aWxlSGVpZ2h0OwotICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9
IHkgKyBvZmZzZXRZICsgKGNvdW50IC0gMSkgKiB0aWxlSGVpZ2h0OwotICAgIEV2YXNfQ29vcmQg
b3JpZ2luWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBFaW5hX0lubGlz
dCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93cyAtIDE7Ci0gICAg
RWluYV9Jbmxpc3QqKiBlbmQgPSBwcml2LT52aWV3Lml0ZW1zOwotCi0gICAgZm9yICg7IGNvdW50
ID4gMDsgLS1jb3VudCkgewotICAgICAgICBFaW5hX0lubGlzdCoqIGl0OwotICAgICAgICBFaW5h
X0lubGlzdCogdGVtcCA9ICpzdGFydDsKLSAgICAgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25Y
ID0gb3JpZ2luWDsKLQotICAgICAgICBmb3IgKGl0ID0gc3RhcnQ7IGl0ID4gZW5kOyAtLWl0KQot
ICAgICAgICAgICAgKml0ID0gKihpdCAtIDEpOwotICAgICAgICAqaXQgPSB0ZW1wOwotCi0gICAg
ICAgIC0tcHJpdi0+bW9kZWwuYmFzZS5yb3c7Ci0KLSAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1
bW4gPSAwOwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOwotICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRlbXAsIGl0ZW0pIHsKLSAgICAgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgdGlsZVBvc2l0aW9uWCwgdGlsZVBv
c2l0aW9uWSk7Ci0gICAgICAgICAgICB0aWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsKLSAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgY29s
dW1uLCAwKTsKLSAgICAgICAgICAgICsrY29sdW1uOwotICAgICAgICB9Ci0gICAgICAgIHRpbGVQ
b3NpdGlvblkgLT0gdGlsZUhlaWdodDsKLSAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55ID0gb2Zmc2V0WTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgbGVmdC1tb3N0
IChmaXJzdCkgY29sdW1uIHJpZ2h0IGFzIGxhc3QgKHJpZ2h0LW1vc3QpLgotICoKLSAqIFRoZSBm
aW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGZpcnN0
IGNvbHVtbiB0aGF0Ci0gKiB3ZW50IG91dCBvZiBzY3JlZW4gaXMgbm93IGF0IGxhc3QgYW5kIGZp
bGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hl
biBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcuY29sdW1ucywgYWZ0
ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKLSAqIGlzIGJl
dHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3VudCB0aGUgbnVt
YmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBsb25n
IGNvdW50KQotewotICAgIHVuc2lnbmVkIGxvbmcgbGFzdENvbHVtbiA9IHByaXYtPnZpZXcuY29s
dW1ucyAtIDE7Ci0gICAgRXZhc19Db29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lk
dGg7Ci0gICAgRXZhc19Db29yZCB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
LSAgICBFdmFzX0Nvb3JkIG9mZnNldFggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBjb3Vu
dCAqIHRpbGVXaWR0aDsKLSAgICBFdmFzX0Nvb3JkIG9mZnNldFkgPSB5ICsgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55OwotCi0gICAgdW5zaWduZWQgbG9uZyBiYXNlQ29sdW1uID0gbGFzdENvbHVt
biAtIGNvdW50ICsgMTsKLSAgICBFdmFzX0Nvb3JkIG9yaWdpblggPSB4ICsgYmFzZUNvbHVtbiAq
IHRpbGVXaWR0aCArIG9mZnNldFg7Ci0KLSAgICBFaW5hX0lubGlzdCoqIGl0ID0gcHJpdi0+dmll
dy5pdGVtczsKLSAgICBFaW5hX0lubGlzdCoqIGVuZCA9IGl0ICsgcHJpdi0+dmlldy5yb3dzOwot
Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gKz0gY291bnQ7Ci0KLSAgICBmb3IgKHVuc2ln
bmVkIGxvbmcgcm93ID0gMDsgaXQgPCBlbmQ7ICsraXQsICsrcm93KSB7Ci0gICAgICAgIEV2YXNf
Q29vcmQgdGlsZVBvc2l0aW9uWCA9IG9yaWdpblg7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY29s
dW1uID0gYmFzZUNvbHVtbjsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkg
PCBjb3VudDsgKytpLCArK2NvbHVtbiwgdGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGgpIHsKLSAg
ICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0gPSBFSU5BX0lOTElT
VF9DT05UQUlORVJfR0VUKCppdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAg
ICAgICAgICAqaXQgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0LCAqaXQpOwotCi0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHRpbGVQb3NpdGlvblgs
IG9mZnNldFkpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdGVtLCBjb2x1bW4sIHJvdyk7Ci0gICAgICAgIH0KLSAgICAgICAgb2Zmc2V0WSAr
PSB0aWxlSGVpZ2h0OwotICAgIH0KLQotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9m
ZnNldFg7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBNb3ZlIHJpZ2h0LW1vc3QgKGxhc3Qp
IGNvbHVtbiBsZWZ0IGFzIGZpcnN0IChsZWZ0LW1vc3QpLgotICoKLSAqIFRoZSBmaW5hbCByZXN1
bHQgaXMgdmlzdWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGxhc3QgY29sdW1uIHRo
YXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgZmlyc3QgYW5kIGZpbGxlZCB3aXRo
IG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3Vu
dCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcuY29sdW1ucywgYWZ0ZXIgdGhhdCBv
bmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKLSAqIGlzIGJldHRlciB0byB0
cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRp
bWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgbG9uZyBjb3VudCkK
LXsKLSAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAg
ICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2
YXNfQ29vcmQgb2Zmc2V0WCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50ICogdGls
ZVdpZHRoOwotICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHkgKyBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnk7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGJhc2VDb2x1bW4gPSBjb3VudCAtIDE7
Ci0gICAgRXZhc19Db29yZCBvcmlnaW5YID0geCArIGJhc2VDb2x1bW4gKiB0aWxlV2lkdGggKyBv
ZmZzZXRYOwotCi0gICAgRWluYV9Jbmxpc3QqKiBpdCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAg
RWluYV9Jbmxpc3QqKiBlbmQgPSBpdCArIHByaXYtPnZpZXcucm93czsKLQotICAgIHByaXYtPm1v
ZGVsLmJhc2UuY29sdW1uIC09IGNvdW50OwotCi0gICAgZm9yICh1bnNpZ25lZCBsb25nIHJvdyA9
IDA7IGl0IDwgZW5kOyArK2l0LCArK3JvdykgewotICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3Np
dGlvblggPSBvcmlnaW5YOwotICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbiA9IGJhc2VDb2x1
bW47Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgY291bnQ7ICsraSwg
LS1jb2x1bW4sIHRpbGVQb3NpdGlvblggLT0gdGlsZVdpZHRoKSB7Ci0gICAgICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VCgoKml0KS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgICAgICAg
ICAqaXQgPSBlaW5hX2lubGlzdF9wcm9tb3RlKCppdCwgKCppdCktPmxhc3QpOwotCi0gICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHRpbGVQb3NpdGlv
blgsIHRpbGVQb3NpdGlvblkpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fZmlsbChwcml2LCBpdGVtLCBjb2x1bW4sIHJvdyk7Ci0gICAgICAgIH0KLSAgICAgICAg
dGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwotICAgIH0KLQotICAgIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueCA9IG9mZnNldFg7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBYLCBpbnQgc3RlcFkpCi17Ci0gICAg
ZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIHgsIHkpOwotCi0gICAgRXZhc19D
b29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0
aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLQotICAgIEV2YXNfQ29vcmQgYmFz
ZVRpbGVQb3NpdGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgIEV2YXNf
Q29vcmQgdGlsZVBvc2l0aW9uWSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0KLSAg
ICBFaW5hX0lubGlzdCoqIGl0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBFaW5hX0lubGlzdCoq
IGVuZCA9IGl0ICsgcHJpdi0+dmlldy5yb3dzOwotCi0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1
bW4gLT0gc3RlcFg7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0gc3RlcFk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGxvbmcgcm93ID0gMDsgaXQgPCBlbmQ7ICsraXQsICsrcm93KSB7Ci0gICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07Ci0gICAgICAgIEV2YXNfQ29v
cmQgbmV3VGlsZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9zaXRpb25YOwotICAgICAgICB1bnNpZ25l
ZCBsb25nIGNvbHVtbiA9IDA7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0LCBpdGVt
KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYs
IGl0ZW0sIGNvbHVtbiwgcm93KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXRlbSwgbmV3VGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7Ci0gICAg
ICAgICAgICArK2NvbHVtbjsKLSAgICAgICAgICAgIG5ld1RpbGVQb3NpdGlvblggKz0gdGlsZVdp
ZHRoOwotICAgICAgICB9Ci0gICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19h
cHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSkKLXsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwg
eCwgeSk7Ci0KLSAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0
aDsKLSAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owot
Ci0gICAgRXZhc19Db29yZCBiYXNlVGlsZVBvc2l0aW9uWCA9IHggKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLng7Ci0gICAgRXZhc19Db29yZCBiYXNlVGlsZVBvc2l0aW9uWSA9IHkgKyBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnk7Ci0KLSAgICBFaW5hX0lubGlzdCoqIGl0ID0gcHJpdi0+dmlldy5p
dGVtczsKLSAgICBFaW5hX0lubGlzdCoqIGVuZCA9IGl0ICsgcHJpdi0+dmlldy5yb3dzOwotICAg
IGZvciAoOyBpdCA8IGVuZDsgKytpdCkgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKiBpdGVtOwotICAgICAgICBFdmFzX0Nvb3JkIG9mZnNldFggPSBiYXNlVGlsZVBvc2l0
aW9uWDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXQsIGl0ZW0pIHsKLSAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgb2Zmc2V0WCwgYmFz
ZVRpbGVQb3NpdGlvblkpOwotICAgICAgICAgICAgb2Zmc2V0WCArPSB0aWxlV2lkdGg7Ci0gICAg
ICAgIH0KLSAgICAgICAgYmFzZVRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKLSAgICB9Ci19
Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVf
b2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCi17Ci0gICAg
RXZhc19Db29yZCBkZWx0YVggPSBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50LnggLSBwcml2LT52
aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFzX0Nvb3JkIGRlbHRhWSA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1cnJlbnQueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwotCi0gICAgSU5GTygiZXdr
QmFja2luZ1N0b3JlPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAg
ICAgcHJpdi0+c2VsZiwgZGVsdGFYLCBkZWx0YVksIHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQu
eCwgcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC55KTsKLQotICAgIEV2YXNfQ29vcmQgdGlsZVdp
ZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGlsZUhlaWdodCA9
IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0KLSAgICB1bnNpZ25lZCBsb25nIG5ld0NvbHVtbiA9
IC1wcml2LT52aWV3Lm9mZnNldC5jdXJyZW50LnggLyB0aWxlV2lkdGg7Ci0gICAgaW50IHN0ZXBY
ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLSBuZXdDb2x1bW47Ci0gICAgdW5zaWduZWQgbG9u
ZyBuZXdSb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC55IC8gdGlsZUhlaWdodDsKLSAg
ICBpbnQgc3RlcFkgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld1JvdzsKLQotICAgIHByaXYt
PnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC54OwotICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC55OwotICAg
IGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNDbGlwcGVyLCBwcml2LT52aWV3Lm9mZnNl
dC5jdXJyZW50LnggKyBwcml2LT52aWV3LngsIHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueSAr
IHByaXYtPnZpZXcueSk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZGVsdGFY
IC0gc3RlcFggKiB0aWxlV2lkdGg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGRl
bHRhWSAtIHN0ZXBZICogdGlsZUhlaWdodDsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3JlZmlsbChwcml2LCBwcml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcFgsIHN0
ZXBZKTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgRXZhc19Db29yZCBkZWx0YVggPSBwcml2LT52
aWV3Lm9mZnNldC5jdXJyZW50LnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFz
X0Nvb3JkIGRlbHRhWSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueSAtIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC55OwotCi0gICAgSU5GTygiZXdrQmFja2luZ1N0b3JlPSVwLCBvZmZzZXQ6ICUr
NGQsICUrNGQgKCUrNGQsICUrNGQpIiwgcHJpdi0+c2VsZiwgZGVsdGFYLCBkZWx0YVksIHByaXYt
PnZpZXcub2Zmc2V0LmN1cnJlbnQueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC55KTsKLQot
ICAgIGlmICghZGVsdGFYICYmICFkZWx0YVkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEV2YXNf
Q29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQg
dGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0KLSAgICBsb25nIG5ld0NvbCA9
IC1wcml2LT52aWV3Lm9mZnNldC5jdXJyZW50LnggLyB0aWxlV2lkdGg7Ci0gICAgbG9uZyBzdGVw
WCA9IHByaXYtPm1vZGVsLmJhc2UuY29sdW1uIC0gbmV3Q29sOwotICAgIGxvbmcgbmV3Um93ID0g
LXByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueSAvIHRpbGVIZWlnaHQ7Ci0gICAgbG9uZyBzdGVw
WSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3Um93OwotCi0gICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50Lng7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50Lnk7Ci0gICAgZXZhc19vYmpl
Y3RfbW92ZShwcml2LT5jb250ZW50c0NsaXBwZXIsIHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQu
eCArIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC55ICsgcHJpdi0+dmll
dy55KTsKLQotICAgIGlmICgoc3RlcFggPCAwICYmIHN0ZXBYIDw9IC1zdGF0aWNfY2FzdDxsb25n
Pihwcml2LT52aWV3LmNvbHVtbnMpKQotICAgICAgICB8fCAoc3RlcFggPiAwICYmIHN0ZXBYID49
IHN0YXRpY19jYXN0PGxvbmc+KHByaXYtPnZpZXcuY29sdW1ucykpCi0gICAgICAgIHx8IChzdGVw
WSA8IDAgJiYgc3RlcFkgPD0gLXN0YXRpY19jYXN0PGxvbmc+KHByaXYtPnZpZXcucm93cykpCi0g
ICAgICAgIHx8IChzdGVwWSA+IDAgJiYgc3RlcFkgPj0gc3RhdGljX2Nhc3Q8bG9uZz4ocHJpdi0+
dmlldy5yb3dzKSkpIHsKLQotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZGVs
dGFYIC0gc3RlcFggKiB0aWxlV2lkdGg7Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSArPSBkZWx0YVkgLSBzdGVwWSAqIHRpbGVIZWlnaHQ7Ci0KLSAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55
LCBzdGVwWCwgc3RlcFkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ICs9IGRlbHRhWDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
Kz0gZGVsdGFZOwotCi0gICAgaWYgKHN0ZXBZIDwgMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfd3JhcF91cChwcml2LCB4LCB5LCAtc3RlcFkpOwotICAgIGVsc2UgaWYg
KHN0ZXBZID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9k
b3duKHByaXYsIHgsIHksIHN0ZXBZKTsKLQotICAgIGlmIChzdGVwWCA8IDApCi0gICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChwcml2LCB4LCB5LCAtc3RlcFgp
OwotICAgIGVsc2UgaWYgKHN0ZXBYID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9yaWdodChwcml2LCB4LCB5LCBzdGVwWCk7Ci0KLSAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQot
ewotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5
KTsKLSAgICBwcml2LT52aWV3LnggPSB4OwotICAgIHByaXYtPnZpZXcueSA9IHk7Ci0gICAgZXZh
c19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c0NsaXBwZXIsIHByaXYtPnZpZXcub2Zmc2V0LmN1
cnJlbnQueCArIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC55ICsgcHJp
di0+dmlldy55KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zp
bGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCi17Ci0gICAg
Zm9yICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyArK2kpIHsKLSAg
ICAgICAgRWluYV9Jbmxpc3QqIGxpc3QgPSBwcml2LT52aWV3Lml0ZW1zW2ldOwotCi0gICAgICAg
IHVuc2lnbmVkIGxvbmcgaiA9IDA7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0qIGl0ZW07Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobGlzdCwgaXRlbSkKLSAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgaisr
LCBpKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a0JhY2tpbmdTdG9yZSkKLXsKLSAgICBFdmFz
X0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7Ci0KLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9n
ZXQoZXdrQmFja2luZ1N0b3JlLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7Ci0gICAgREJHKCJl
d2tCYWNraW5nU3RvcmU9JXAgYXQgJWQsJWQgKyAlZHglZCIsIGV3a0JhY2tpbmdTdG9yZSwgeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNr
aW5nU3RvcmUsIHByaXYpOwotCi0gICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBmYWxzZTsKLQotICAg
IGV3a190aWxlX21hdHJpeF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmIChw
cml2LT5jaGFuZ2VkLmNvbnRlbnRzU2l6ZSkKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X2ludmFs
aWRhdGUocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3Bl
bmQgJiYgKHByaXYtPmNoYW5nZWQubW9kZWwgfHwgcHJpdi0+Y2hhbmdlZC5jb250ZW50c1NpemUp
KSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY29sdW1ucyA9IHByaXYtPm1vZGVsLndpZHRoIC8g
cHJpdi0+dmlldy50aWxlLndpZHRoICsgMTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByb3dzID0g
cHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmhlaWdodCArIDE7Ci0KLSAgICAg
ICAgcHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPSBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnM7
Ci0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VycmVudC5yb3dz
OwotICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgPSBjb2x1bW5zOwotICAgICAg
ICBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MgPSByb3dzOwotICAgICAgICBpZiAocHJpdi0+bW9k
ZWwub2xkLmNvbHVtbnMgPiBjb2x1bW5zKQotICAgICAgICAgICAgY29sdW1ucyA9IHByaXYtPm1v
ZGVsLm9sZC5jb2x1bW5zOwotICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLnJvd3MgPiByb3dz
KQotICAgICAgICAgICAgcm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dzOwotICAgICAgICBld2tf
dGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29sdW1ucywgcm93cyk7Ci0g
ICAgfQotCi0gICAgaWYgKHByaXYtPmNoYW5nZWQucG9zaXRpb24gJiYgKHByaXYtPnZpZXcueCAh
PSB4IHx8IHByaXYtPnZpZXcueSAhPSB5KSkgewotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX3Bvcyhwcml2LCB4LCB5KTsKLSAgICAgICAgcHJpdi0+Y2hh
bmdlZC5wb3NpdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgICBpZiAocHJpdi0+Y2hhbmdlZC5vZmZz
ZXQpIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9v
ZmZzZXQocHJpdiwgeCwgeSk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGlm
ICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgKHByaXYtPmNoYW5nZWQubW9kZWwgfHwgcHJpdi0+
Y2hhbmdlZC5jb250ZW50c1NpemUpKSB7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9maWxsX3JlbmRlcmVycyhwcml2KTsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShw
cml2LT5tb2RlbC5tYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+
bW9kZWwuY3VycmVudC5jb2x1bW5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
aXYtPm1vZGVsLmN1cnJlbnQucm93cyk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBm
YWxzZTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwg
cHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKHByaXYpOwotCi0g
ICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbWlzcyBhbnkgaW1wb3J0YW50IHJlcGFpbnQg
YnkKLSAgICAgICAgICogcmVwYWludGluZyB0aGUgd2hvbGUgdmlld3BvcnQgKi8KLSAgICAgICAg
Y29uc3QgRWluYV9SZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgsIHBy
aXYtPm1vZGVsLmhlaWdodCB9OwotICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYt
Pm1vZGVsLm1hdHJpeCwgJnJlY3QsIHByaXYtPnZpZXcudGlsZS56b29tKTsKLQotICAgICAgICBw
cml2LT5jaGFuZ2VkLmNvbnRlbnRzU2l6ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIGV3a190aWxl
X21hdHJpeF90aGF3KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwotCi0gICAgaWYgKHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueCA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0g
cHJpdi0+dmlldy50aWxlLndpZHRoCi0gICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55IDw9IC0gcHJpdi0+dmll
dy50aWxlLmhlaWdodCkgewotICAgICAgICBFUlIoImluY29ycmVjdCBiYXNlIG9mZnNldCAlKzRk
LCUrNGQsIHRpbGU9JWR4JWQsIGN1cnJlbnQ9JSs0ZCwlKzRkXG4iLAotICAgICAgICAgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnksCi0gICAgICAg
ICAgICBwcml2LT52aWV3LnRpbGUud2lkdGgsIHByaXYtPnZpZXcudGlsZS5oZWlnaHQsCi0gICAg
ICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50LngsIHByaXYtPnZpZXcub2Zmc2V0LmN1
cnJlbnQueSk7Ci0gICAgfQotfQotCi1FdmFzX09iamVjdCogZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfYWRkKEV2YXMqIGNhbnZhcykKLXsKLSAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAw
OwotCi0gICAgaWYgKCFzbWFydCkgewotICAgICAgICBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBz
YyA9Ci0gICAgICAgICAgICBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKCJFd2tf
VGlsZWRfQmFja2luZ19TdG9yZSIpOwotCi0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NsaXBw
ZWRfc21hcnRfc2V0KCZzYyk7Ci0gICAgICAgIF9wYXJlbnRfc2MgPSBzYzsKLQotICAgICAgICBz
Yy5hZGQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkOwotICAgICAgICBzYy5k
ZWwgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsOwotICAgICAgICBzYy5yZXNp
emUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVzaXplOwotICAgICAgICBzYy5t
b3ZlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21vdmU7Ci0gICAgICAgIHNjLnNo
b3cgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfc2hvdzsKLSAgICAgICAgc2MuaGlk
ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9oaWRlOwotICAgICAgICBzYy5jYWxj
dWxhdGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlOwotICAgICAg
ICBzYy5tZW1iZXJfYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9h
ZGQ7Ci0gICAgICAgIHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfbWVtYmVyX2RlbDsKLQotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZz
Yyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNt
YXJ0KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2
YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUsIGJvb2wgKCpjYWxsYmFjaykodm9pZCogZGF0YSwg
RXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKSwgY29uc3Qgdm9pZCog
ZGF0YSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjYWxsYmFjayk7Ci0gICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLQotICAgIHBy
aXYtPnJlbmRlci5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIHByaXYtPnJlbmRlci5kYXRhID0g
Y29uc3RfY2FzdDx2b2lkKj4oZGF0YSk7Ci19Ci0KLUV3a19UaWxlX1VudXNlZF9DYWNoZSogZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tCYWNraW5nU3RvcmUpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdr
QmFja2luZ1N0b3JlLCBwcml2LCAwKTsKLQotICAgIHJldHVybiBld2tfdGlsZV9tYXRyaXhfdW51
c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotfQotCi12b2lkIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdrQmFja2lu
Z1N0b3JlLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKLXsKLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNraW5nU3RvcmUsIHByaXYpOwotCi0gICAgaWYg
KGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCkgPT0g
dGlsZVVudXNlZENhY2hlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCB0aWxlVW51c2VkQ2FjaGUpOwotfQot
Ci1zdGF0aWMgYm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0
X3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSkKLXsKLSAgICAvKiBUT0RPOiBjaGVjayBvZmZzZXQgZ28gb3V0
IG9mIGJvdW5kcywgY2xhbXAgKi8KLSAgICBpZiAocHJpdi0+cmVuZGVyLmRpc2FibGVkKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50LnggPSB4
OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueSA9IHk7Ci0KLSAgICBwcml2LT5jaGFu
Z2VkLm9mZnNldCA9IHRydWU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQo
cHJpdik7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIERCRygiZXdrQmFja2luZ1N0b3Jl
PSVwLCB4PSVkLCB5PSVkIiwgZXdrQmFja2luZ1N0b3JlLCB4LCB5KTsKLQotICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKGV3a0JhY2tpbmdTdG9yZSwgcHJpdiwgZmFsc2UpOwotICAgIGlmICh4
ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0
LmN1cnJlbnQueSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwocHJpdiwgeCwg
eSk7Ci19Ci0KLWJvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0
X2FkZChFdmFzX09iamVjdCogZXdrQmFja2luZ1N0b3JlLCBFdmFzX0Nvb3JkIGRlbHRhWCwgRXZh
c19Db29yZCBkZWx0YVkpCi17Ci0gICAgREJHKCJld2tCYWNraW5nU3RvcmU9JXAsIGRlbHRhWD0l
ZCwgZGVsdGFZPSVkIiwgZXdrQmFja2luZ1N0b3JlLCBkZWx0YVgsIGRlbHRhWSk7Ci0KLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNraW5nU3RvcmUsIHByaXYsIGZhbHNlKTsKLSAg
ICBpZiAoIWRlbHRhWCAmJiAhZGVsdGFZKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJl
dHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRl
cm5hbChwcml2LCBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50LnggKyBkZWx0YVgsIHByaXYtPnZp
ZXcub2Zmc2V0LmN1cnJlbnQueSArIGRlbHRhWSk7Ci19Ci0KLXN0YXRpYyBib29sIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2LCBmbG9hdCogem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19Db29y
ZCBjdXJyZW50WSwgRXZhc19Db29yZCogb2Zmc2V0WCwgRXZhc19Db29yZCogb2Zmc2V0WSkKLXsK
LSAgICAqb2Zmc2V0WCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueDsKLSAgICAqb2Zmc2V0
WSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueTsKLQotICAgIGlmIChmYWJzZihwcml2LT52
aWV3LnRpbGUuem9vbSAtICp6b29tKSA8IHpvb21TdGVwTWluaW11bSkgewotICAgICAgICBEQkco
Imlnbm9yZWQgYXMgem9vbSBkaWZmZXJlbmNlIGlzIDwgJWY6ICVmIiwKLSAgICAgICAgICAgIChk
b3VibGUpem9vbVN0ZXBNaW5pbXVtLCBmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29t
KSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLQotICAgICp6b29tID0g
Uk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgKnpvb20pOwotCi0gICAgRXZhc19D
b29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0
aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLQotICAgIGZsb2F0IHNjYWxlID0g
Knpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgIHByaXYtPnZpZXcudGlsZS56b29t
ID0gKnpvb207Ci0gICAgLy8gdG9kbzogY2hlY2sgY3VycmVudFggWzAsIHddLi4uCi0gICAgcHJp
di0+dmlldy5vZmZzZXQuem9vbUNlbnRlci54ID0gY3VycmVudFg7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuem9vbUNlbnRlci55ID0gY3VycmVudFk7Ci0KLSAgICB1bnNpZ25lZCBsb25nIGNvbHVt
bnMsIHJvd3M7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3NpemVfZ2V0KHByaXYtPm1vZGVsLm1hdHJp
eCwgJmNvbHVtbnMsICZyb3dzKTsKLSAgICBpZiAoIWV3a190aWxlX21hdHJpeF96b29tX2xldmVs
X3NldChwcml2LT5tb2RlbC5tYXRyaXgsICp6b29tKSkKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4
X2VudHJ5X25ldyhwcml2LT5tb2RlbC5tYXRyaXgsICp6b29tKTsKLSAgICBld2tfdGlsZV9tYXRy
aXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29sdW1ucywgcm93cyk7Ci0KLSAgICBpZiAo
IXByaXYtPnZpZXcud2lkdGggfHwgIXByaXYtPnZpZXcuaGVpZ2h0KSB7Ci0gICAgICAgIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIEV2YXNfQ29vcmQgbmV3
WCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueCAtIGN1cnJlbnRYKSAq
IHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3WSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zm
c2V0LmN1cnJlbnQueSAtIGN1cnJlbnRZKSAqIHNjYWxlOwotCi0gICAgRXZhc19Db29yZCBtb2Rl
bFdpZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVs
SGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7Ci0KLSAgICBpZiAobW9kZWxXaWR0
aCA8IHByaXYtPnZpZXcud2lkdGggfHwgbmV3WCA+PSAwKQotICAgICAgICBuZXdYID0gMDsKLSAg
ICBlbHNlIGlmICgtbmV3WCArIHByaXYtPnZpZXcud2lkdGggPj0gbW9kZWxXaWR0aCkKLSAgICAg
ICAgbmV3WCA9IC1tb2RlbFdpZHRoICsgcHJpdi0+dmlldy53aWR0aDsKLQotICAgIGlmIChtb2Rl
bEhlaWdodCA8IHByaXYtPnZpZXcuaGVpZ2h0IHx8IG5ld1kgPj0gMCkKLSAgICAgICAgbmV3WSA9
IDA7Ci0gICAgZWxzZSBpZiAoLW5ld1kgKyBwcml2LT52aWV3LmhlaWdodCA+PSBtb2RlbEhlaWdo
dCkKLSAgICAgICAgbmV3WSA9IC1tb2RlbEhlaWdodCArIHByaXYtPnZpZXcuaGVpZ2h0OwotCi0g
ICAgRXZhc19Db29yZCBiYXNlWCA9IG5ld1ggJSB0aWxlV2lkdGg7Ci0gICAgRXZhc19Db29yZCBi
YXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OwotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0g
LW5ld1ggLyB0aWxlV2lkdGg7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRp
bGVIZWlnaHQ7Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSB0cnVlOwotICAgIHByaXYtPmNo
YW5nZWQubW9kZWwgPSB0cnVlOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2Vk
KHByaXYpOwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC54ID0gbmV3WDsKLSAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXJyZW50LnkgPSBuZXdZOwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueCA9IGJhc2VYOwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJhc2VZOwot
Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50
Lng7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXJy
ZW50Lnk7Ci0gICAgKm9mZnNldFggPSBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50Lng7Ci0gICAg
Km9mZnNldFkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50Lnk7Ci0KLSAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgbmV3WCArIHByaXYtPnZpZXcueCwgbmV3WSAr
IHByaXYtPnZpZXcueSk7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5k
ZXJlcnMocHJpdik7Ci0KLSAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZhc19Db29yZCBiYXNlVGlsZVBv
c2l0aW9uWCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLQotICAg
IEVpbmFfSW5saXN0KiogaXQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIEVpbmFfSW5saXN0Kiog
ZW5kID0gaXQgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAgZm9yICg7IGl0IDwgZW5kOyArK2l0KSB7
Ci0gICAgICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9zaXRpb25YOwot
ICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKiBpdGVtOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXRl
bSkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVt
LCB0aWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdGVtLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwot
ICAgICAgICAgICAgdGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGg7Ci0gICAgICAgIH0KLSAgICAg
ICAgdGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0
KiBld2tCYWNraW5nU3RvcmUsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFz
X0Nvb3JkIGN1cnJlbnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZ
KQotewotICAgIERCRygiZXdrQmFja2luZ1N0b3JlPSVwLCB6b29tPSVmIiwgZXdrQmFja2luZ1N0
b3JlLCAqem9vbSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNraW5nU3Rv
cmUsIHByaXYsIGZhbHNlKTsKLQotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
em9vbV9zZXRfaW50ZXJuYWwocHJpdiwgem9vbSwgY3VycmVudFgsIGN1cnJlbnRZLCBvZmZzZXRY
LCBvZmZzZXRZKTsKLX0KLQotYm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtf
c2V0KEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQg
Y3VycmVudFgsIEV2YXNfQ29vcmQgY3VycmVudFkpCi17Ci0gICAgREJHKCJld2tCYWNraW5nU3Rv
cmU9JXAsIHpvb209JWYiLCBld2tCYWNraW5nU3RvcmUsIHpvb20pOwotICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKGV3a0JhY2tpbmdTdG9yZSwgcHJpdiwgZmFsc2UpOwotICAgIGlmICghcHJp
di0+dmlldy53aWR0aCB8fCAhcHJpdi0+dmlldy5oZWlnaHQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGJvb2wgcmVDYWxjdWxhdGUgPSBmYWxzZTsKLQotICAgIGZsb2F0IHNjYWxlID0g
em9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwotCi0gICAgRXZhc19Db29yZCB0aWxlV2lkdGgg
PSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHNjYWxlKTsKLSAgICBz
Y2FsZSA9IFRJTEVfWk9PTV9BVF9TSVpFKHRpbGVXaWR0aCwgcHJpdi0+dmlldy50aWxlLndpZHRo
KTsKLSAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52
aWV3LnRpbGUuaGVpZ2h0LCBzY2FsZSk7Ci0gICAgem9vbSA9IHNjYWxlICogcHJpdi0+dmlldy50
aWxlLnpvb207Ci0KLSAgICBFdmFzX0Nvb3JkIG1vZGVsV2lkdGggPSBwcml2LT5tb2RlbC53aWR0
aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxIZWlnaHQgPSBwcml2LT5tb2RlbC5oZWln
aHQgKiBzY2FsZTsKLQotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c0NsaXBw
ZXIsIG1vZGVsV2lkdGgsIG1vZGVsSGVpZ2h0KTsKLQotICAgIHVuc2lnbmVkIGxvbmcgdnJvd3Mg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihjZWlsKHByaXYtPnZpZXcuaGVpZ2h0IC9zdGF0
aWNfY2FzdDxmbG9hdD4odGlsZUhlaWdodCkpICsgMSk7Ci0gICAgdW5zaWduZWQgbG9uZyB2Y29s
cyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KGNlaWwocHJpdi0+dmlldy53aWR0aCAvIHN0
YXRpY19jYXN0PGZsb2F0Pih0aWxlV2lkdGgpKSArIDEpOwotICAgIEV2YXNfQ29vcmQgbmV3WCA9
IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueCAtIGN1cnJlbnRYKSAqIHNj
YWxlOwotICAgIEV2YXNfQ29vcmQgbmV3WSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zmc2V0
LmN1cnJlbnQueSAtIGN1cnJlbnRZKSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgYmFzZVggPSBu
ZXdYICUgdGlsZVdpZHRoOwotICAgIEV2YXNfQ29vcmQgYmFzZVkgPSBuZXdZICUgdGlsZUhlaWdo
dDsKLSAgICB1bnNpZ25lZCBsb25nIGJhc2VSb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7Ci0gICAg
dW5zaWduZWQgbG9uZyBiYXNlQ29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7Ci0KLSAgICBpZiAo
YmFzZVJvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlQ29sdW1uICE9IHByaXYtPm1v
ZGVsLmJhc2UuY29sdW1uKSB7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gYmFzZVJv
dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSBiYXNlQ29sdW1uOwotICAgICAg
ICByZUNhbGN1bGF0ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKHZyb3dzID4gcHJpdi0+dmll
dy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2x1bW5zKQotICAgICAgICByZUNhbGN1bGF0
ZSA9IHRydWU7Ci0KLSAgICBpZiAocmVDYWxjdWxhdGUpIHsKLSAgICAgICAgRXZhc19Db29yZCB3
aWR0aCwgaGVpZ2h0OwotICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrQmFja2lu
Z1N0b3JlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3aWR0aCwgaGVpZ2h0LCB0aWxlV2lkdGgs
IHRpbGVIZWlnaHQpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5k
ZXJlcnMocHJpdik7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3By
b2Nlc3MocHJpdik7Ci0gICAgfQotCi0gICAgRXZhc19Db29yZCBiYXNlVGlsZVBvc2l0aW9uWCA9
IGJhc2VYICsgcHJpdi0+dmlldy54OwotICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IGJh
c2VZICsgcHJpdi0+dmlldy55OwotCi0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50
c0NsaXBwZXIsIG5ld1ggKyBwcml2LT52aWV3LngsIG5ld1kgKyBwcml2LT52aWV3LnkpOwotCi0g
ICAgRWluYV9Jbmxpc3QqKiBpdCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgRWluYV9Jbmxpc3Qq
KiBlbmQgPSBpdCArIHByaXYtPnZpZXcucm93czsKLSAgICBmb3IgKDsgaXQgPCBlbmQ7ICsraXQp
IHsKLSAgICAgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25YID0gYmFzZVRpbGVQb3NpdGlvblg7
Ci0gICAgICAgIEVpbmFfSW5saXN0KiBsaXN0ID0gKml0OwotICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdGVtOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxpc3Qs
IGl0ZW0pIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUo
aXRlbSwgdGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7Ci0gICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0
KTsKLSAgICAgICAgICAgIHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwotICAgICAgICB9Ci0g
ICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFz
X09iamVjdCogZXdrQmFja2luZ1N0b3JlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhl
aWdodCkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNraW5nU3RvcmUsIHBy
aXYpOwotCi0gICAgRXZhc19Db29yZCBuZXdYID0gcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC54
OwotICAgIEV2YXNfQ29vcmQgbmV3WSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1cnJlbnQueTsKLSAg
ICBFdmFzX0Nvb3JkIGJhc2VYID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgIEV2YXNf
Q29vcmQgYmFzZVkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRXZhc19Db29yZCB0
aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aWxlSGVp
Z2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLQotICAgIGlmICgtbmV3WCA+IHdpZHRoKSB7
Ci0gICAgICAgIG5ld1ggPSAtd2lkdGg7Ci0gICAgICAgIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0
aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsK
LSAgICB9Ci0KLSAgICBpZiAoLW5ld1kgPiBoZWlnaHQpIHsKLSAgICAgICAgbmV3WSA9IC1oZWln
aHQ7Ci0gICAgICAgIGJhc2VZID0gbmV3WSAlIHRpbGVIZWlnaHQ7Ci0gICAgICAgIHByaXYtPm1v
ZGVsLmJhc2Uucm93ID0gLW5ld1kgLyB0aWxlSGVpZ2h0OwotICAgIH0KLQotICAgIGlmIChiYXNl
WCA+PSAwIHx8IGJhc2VYIDw9IC0yICogcHJpdi0+dmlldy50aWxlLndpZHRoKSB7Ci0gICAgICAg
IGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1
bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKLSAgICB9Ci0KLSAgICBpZiAoYmFzZVkgPj0gMCB8fCBi
YXNlWSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpIHsKLSAgICAgICAgYmFzZVkgPSBu
ZXdZICUgdGlsZUhlaWdodDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAv
IHRpbGVIZWlnaHQ7Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC54ID0g
bmV3WDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXJyZW50LnkgPSBuZXdZOwotICAgIHByaXYt
PnZpZXcub2Zmc2V0Lm9sZC54ID0gbmV3WDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9
IG5ld1k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYmFzZVg7Ci0gICAgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55ID0gYmFzZVk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5j
b250ZW50c0NsaXBwZXIsIG5ld1ggKyBwcml2LT52aWV3LngsIG5ld1kgKyBwcml2LT52aWV3Lnkp
OwotCi0gICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55ICsgcHJpdi0+dmlldy55OwotICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlvblggPSBw
cml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBFaW5hX0lubGlz
dCoqIGl0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBFaW5hX0lubGlzdCoqIGVuZCA9IGl0ICsg
cHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAoOyBpdCA8IGVuZDsgKytpdCkgewotICAgICAgICBF
dmFzX0Nvb3JkIHRpbGVQb3NpdGlvblggPSBiYXNlVGlsZVBvc2l0aW9uWDsKLSAgICAgICAgRWlu
YV9Jbmxpc3QqIGxzdCA9ICppdDsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXRlbTsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0ZW0pIHsKLSAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgdGlsZVBvc2l0
aW9uWCwgdGlsZVBvc2l0aW9uWSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKLSAgICAgICAgICAg
IHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwotICAgICAgICB9Ci0gICAgICAgIHRpbGVQb3Np
dGlvblkgKz0gdGlsZUhlaWdodDsKLSAgICB9Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a0JhY2tpbmdT
dG9yZSwgYm9vbCBzbW9vdGhTY2FsZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihl
d2tCYWNraW5nU3RvcmUsIHByaXYpOwotCi0gICAgRWluYV9Jbmxpc3QqKiBpdCA9IHByaXYtPnZp
ZXcuaXRlbXM7Ci0gICAgRWluYV9Jbmxpc3QqKiBlbmQgPSBpdCArIHByaXYtPnZpZXcucm93czsK
LSAgICBwcml2LT52aWV3LnRpbGUuem9vbVdlYWtTbW9vdGhTY2FsZSA9IHNtb290aFNjYWxlOwot
Ci0gICAgZm9yICg7IGl0PCBlbmQ7ICsraXQpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSogaXRlbTsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXQsIGl0ZW0p
Ci0gICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9zbW9vdGhfc2NhbGVfc2V0KGl0ZW0sIHNtb290aFNjYWxlKTsK
LSAgICB9Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWxwaGFfc2V0KEV2YXNf
T2JqZWN0KiBld2tCYWNraW5nU3RvcmUsIGJvb2wgaGFzQWxwaGEpCi17Ci0gICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLSAgICBwcml2LT52aWV3LnRp
bGUuaGFzQWxwaGEgPSBoYXNBbHBoYTsKLX0KLQotYm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGUoRXZhc19PYmplY3QqIGV3a0JhY2tpbmdTdG9yZSwgY29uc3QgRWluYV9SZWN0YW5n
bGUqIHVwZGF0ZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNraW5nU3Rv
cmUsIHByaXYsIGZhbHNlKTsKLQotICAgIGlmIChwcml2LT5yZW5kZXIuZGlzYWJsZWQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHBy
aXYtPm1vZGVsLm1hdHJpeCwgdXBkYXRlLCBwcml2LT52aWV3LnRpbGUuem9vbSk7Ci19Ci0KLXZv
aWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19P
YmplY3QqIGV3a0JhY2tpbmdTdG9yZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXZh
c19PYmplY3QgKmV3a0JhY2tpbmdTdG9yZSksIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLSAgICBwcml2LT5w
cm9jZXNzLnByZUNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wcmVEYXRh
ID0gY29uc3RfY2FzdDx2b2lkKj4oZGF0YSk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3Rv
cmUsIHZvaWQqICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIHZvaWQqIHByZURhdGEsIEV2YXNfT2Jq
ZWN0ICpld2tCYWNraW5nU3RvcmUpLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKGV3a0JhY2tpbmdTdG9yZSwgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vz
cy5wb3N0Q2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICBwcml2LT5wcm9jZXNzLnBvc3REYXRhID0g
Y29uc3RfY2FzdDx2b2lkKj4oZGF0YSk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19wcm9jZXNzKEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUpCi17Ci0gICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLSAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwotfQotCi12b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfY2xlYXIoRXZhc19PYmplY3QqIGV3a0JhY2tp
bmdTdG9yZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNraW5nU3RvcmUs
IHByaXYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIocHJpdi0+bW9kZWwu
bWF0cml4KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNp
emUoRXZhc19PYmplY3QqIGV3a0JhY2tpbmdTdG9yZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19D
b29yZCBoZWlnaHQpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0
b3JlLCBwcml2KTsKLQotICAgIGlmICh3aWR0aCA9PSBwcml2LT5tb2RlbC53aWR0aCAmJiBoZWln
aHQgPT0gcHJpdi0+bW9kZWwuaGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5t
b2RlbC53aWR0aCA9IHdpZHRoOwotICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IGhlaWdodDsKLSAg
ICBwcml2LT5jaGFuZ2VkLmNvbnRlbnRzU2l6ZSA9IHRydWU7Ci0KLSAgICBEQkcoIncsaD0lZCwg
JWQiLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdl
ZChwcml2KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRh
dGVfc2V0KEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUsIGJvb2wgdmFsdWUpCi17Ci0gICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLQotICAgIGlm
ICh2YWx1ZSAhPSBwcml2LT5yZW5kZXIuZGlzYWJsZWQpCi0gICAgICAgIHByaXYtPnJlbmRlci5k
aXNhYmxlZCA9IHZhbHVlOwotfQotCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNo
KEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2KTsKLQotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
cnJlbnQueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VycmVudC55ID0gMDsKLSAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkg
PSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9IDA7Ci0gICAg
cHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAwOwotICAgIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1u
cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzID0gMTsKLSAgICBwcml2LT5tb2Rl
bC5vbGQuY29sdW1ucyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAwOwotICAgIHBy
aXYtPm1vZGVsLndpZHRoID0gMDsKLSAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAwOwotICAgIHBy
aXYtPmNoYW5nZWQuc2l6ZSA9IHRydWU7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBw
cmludGYoIlxuRkxVU0hFRCBCQUNLSU5HIFNUT1JFLCBTVEFUVVMgQkVGT1JFIERFTEVUSU5HIFRJ
TEUgTUFUUklYOlxuIik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcocHJp
dik7Ci0jZW5kaWYKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfZmx1c2gocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZV9hbGwocHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2Vk
Q2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0aWxlVW51c2VkQ2FjaGUpOwot
Ci0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgcHJpbnRmKCJcbkZMVVNIRUQgQkFDS0lORyBT
VE9SRSwgU1RBVFVTIEFGVEVSIFJFQ1JFQVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKLSAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKLSNlbmRpZgotfQotCi1ib29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfdGlsZV9hZGQoRXZhc19PYmplY3QqIGV3
a0JhY2tpbmdTdG9yZSwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBm
bG9hdCB6b29tKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a0JhY2tpbmdTdG9y
ZSwgcHJpdiwgZmFsc2UpOwotCi0gICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4
aXN0cyhwcml2LT5tb2RlbC5tYXRyaXgsIGNvbHVtbiwgcm93LCB6b29tKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2FkZChwcml2LCBjb2x1bW4sIHJvdywgem9vbSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfc3BpcmFsX3F1ZXVlKEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUs
IEVpbmFfUmVjdGFuZ2xlKiB2aWV3UmVjdCwgRWluYV9SZWN0YW5nbGUqIHJlbmRlclJlY3QsIGlu
dCBtYXhNZW1vcnksIGZsb2F0IHpvb20pCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
ZXdrQmFja2luZ1N0b3JlLCBwcml2LCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHZpZXdSZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHJlbmRlclJlY3QsIGZhbHNlKTsKLQotICAgIGNvbnN0IGludCB0aWxlV2lkdGggPSBw
cml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgY29uc3QgaW50IHRpbGVIZWlnaHQgPSBwcml2LT52
aWV3LnRpbGUuaGVpZ2h0OwotCi0gICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHZpZXdTbGljZXI7
Ci0gICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnZpZXdTbGljZXIsIHZpZXdS
ZWN0LT54LCB2aWV3UmVjdC0+eSwgdmlld1JlY3QtPncsIHZpZXdSZWN0LT5oLCB0aWxlV2lkdGgs
IHRpbGVIZWlnaHQpKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgdmlld1Ns
aWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0lZHglZCIsIHZpZXdSZWN0LT54LCB2aWV3UmVjdC0+
eSwgdmlld1JlY3QtPncsIHZpZXdSZWN0LT5oLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHJl
bmRlclNsaWNlcjsKLSAgICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmcmVuZGVy
U2xpY2VyLCByZW5kZXJSZWN0LT54LCByZW5kZXJSZWN0LT55LCByZW5kZXJSZWN0LT53LCByZW5k
ZXJSZWN0LT5oLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpKSB7Ci0gICAgICAgIEVSUigiY291bGQg
bm90IHNldHVwIGdyaWQgUmVuZGVyU2xpY2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwg
cmVuZGVyUmVjdC0+eSwgcmVuZGVyUmVjdC0+eSwgcmVuZGVyUmVjdC0+dywgcmVuZGVyUmVjdC0+
aCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIC8vIHNldCBsaW1pdHMgb2YgdGhlIGxvb3AuCi0gICAgaW50IG1lbW9yeUxpbWl0cyA9
IG1heE1lbW9yeSAvIChFV0tfQVJHQl9CWVRFU19TSVpFICogdGlsZVdpZHRoICogdGlsZUhlaWdo
dCk7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBtYXhWaWV3U2lkZUxlbmd0aCA9IHN0ZDo6bWF4
KHZpZXdTbGljZXIuY29sMiAtIHZpZXdTbGljZXIuY29sMSwgdmlld1NsaWNlci5yb3cyIC0gdmll
d1NsaWNlci5yb3cxKTsKLSAgICBjb25zdCB1bnNpZ25lZCBsb25nIG1heFJlbmRlclNpZGVMZW5n
dGggPSBzdGQ6Om1heChyZW5kZXJTbGljZXIuY29sMiAtIHJlbmRlclNsaWNlci5jb2wxLCByZW5k
ZXJTbGljZXIucm93MiAtIHJlbmRlclNsaWNlci5yb3cxKTsKLSAgICBjb25zdCB1bnNpZ25lZCBs
b25nIG1heExvb3BDb3VudCA9IG1heFZpZXdTaWRlTGVuZ3RoICsgbWF4UmVuZGVyU2lkZUxlbmd0
aDsKLQotICAgIC8vIHNwaXJlIHN0YXJ0cyBmcm9tIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXcgYXJl
YS4KLSAgICB1bnNpZ25lZCBsb25nIGNlbnRlckNvbHVtbiA9ICh2aWV3U2xpY2VyLmNvbDEgKyB2
aWV3U2xpY2VyLmNvbDIpIC8gMjsKLSAgICB1bnNpZ25lZCBsb25nIGNlbnRlclJvdyA9ICh2aWV3
U2xpY2VyLnJvdzEgKyB2aWV3U2xpY2VyLnJvdzIpIC8gMjsKLQotICAgIHVuc2lnbmVkIGxvbmcg
c3RlcCA9IDE7Ci0gICAgY29uc3QgdW5zaWduZWQgc3F1YXJlU2lkZSA9IDQ7Ci0gICAgZm9yICh1
bnNpZ25lZCBsb29wID0gMDsgbG9vcCA8IG1heExvb3BDb3VudDsgKytsb29wKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgbG9uZyBpID0gMTsgaSA8IHN0ZXAgKiBzcXVhcmVTaWRlICsgMTsgKytp
KSB7Ci0gICAgICAgICAgICBpZiAobWVtb3J5TGltaXRzIDw9IDApCi0gICAgICAgICAgICAgICAg
Z290byBtZW1vcnlMaW1pdHNSZWFjaGVkOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgIHRo
aXMgY29kZSBtZWFucyB0aGUgbG9vcCBydW5zIGxpa2Ugc3BpcmFsLiAoaS5nLiBsZWZ0LT5kb3du
LT5yaWdodC0+dXApCi0gICAgICAgICAgICB3aGVuIGl0IG1vdmVzIGJhY2sgdG8gb3JpZ2luYWwg
cGxhY2UgYW5kIHRoZW4gd2FsayAxIHRpbGUgbGVmdCBhbmQgdXAuCi0gICAgICAgICAgICB0aGUg
bG9vcCBrZWVwcyBvbiBkb2luZyB0aGlzIHVudGlsIGl0IHJlYWNoZXMgbWF4IG1lbW9yeSB0byBk
cmF3IHRpbGVzLgotICAgICAgICAgICAgZS5nLiApCi0gICAgICAgICAgICAgICAgICAgICAgICAg
MzMzMzMzCi0gICAgICAgICAgICAgICAgICAgICAgICAgMzIyMjIzCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgMzIxMTIzCi0gICAgICAgICAgICAgICAgICAgICAgICAgMzIxMTIzCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgMzIyMjIzCi0gICAgICAgICAgICAgICAgICAgICAgICAgMzMzMzMz
Ci0gICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKGkgPiAwICYmIGkgPD0gc3RlcCkKLSAg
ICAgICAgICAgICAgICArK2NlbnRlckNvbHVtbjsgLy8gbW92ZSBsZWZ0LgotICAgICAgICAgICAg
ZWxzZSBpZiAoaSA+IHN0ZXAgJiYgaSA8PSBzdGVwICogMikKLSAgICAgICAgICAgICAgICArK2Nl
bnRlclJvdzsgLy8gbW92ZSBkb3duLgotICAgICAgICAgICAgZWxzZSBpZiAoaSA+IHN0ZXAgKiAy
ICYmIGkgPD0gc3RlcCAqIDMpCi0gICAgICAgICAgICAgICAgLS1jZW50ZXJDb2x1bW47IC8vIG1v
dmUgcmlnaHQuCi0gICAgICAgICAgICBlbHNlIGlmIChpID4gc3RlcCAqIDMgJiYgaSA8PSBzdGVw
ICogNCkKLSAgICAgICAgICAgICAgICAtLWNlbnRlclJvdzsgLy8gbW92ZSB1cC4KLSAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICBFUlIoIkVSUk9SIDogb3V0IG9mIGJvdW5kc1xyXG4i
KTsKLQotICAgICAgICAgICAgLy8gc2tpcCBpbiB2aWV3IHBvcnQgYXJlYS4KLSAgICAgICAgICAg
IGlmICh2aWV3U2xpY2VyLmNvbDEgPCBjZW50ZXJDb2x1bW4KLSAgICAgICAgICAgICAgICAmJiB2
aWV3U2xpY2VyLmNvbDIgPiBjZW50ZXJDb2x1bW4KLSAgICAgICAgICAgICAgICAmJiB2aWV3U2xp
Y2VyLnJvdzEgPCBjZW50ZXJSb3cKLSAgICAgICAgICAgICAgICAmJiB2aWV3U2xpY2VyLnJvdzIg
PiBjZW50ZXJSb3cpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGlm
IChyZW5kZXJTbGljZXIuY29sMSA8PSBjZW50ZXJDb2x1bW4KLSAgICAgICAgICAgICAgICAmJiBy
ZW5kZXJTbGljZXIuY29sMiA+PSBjZW50ZXJDb2x1bW4KLSAgICAgICAgICAgICAgICAmJiByZW5k
ZXJTbGljZXIucm93MSA8PSBjZW50ZXJSb3cKLSAgICAgICAgICAgICAgICAmJiByZW5kZXJTbGlj
ZXIucm93MiA+PSBjZW50ZXJSb3cpIHsKLQotICAgICAgICAgICAgICAgIGlmICghZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl90aWxlX2FkZChld2tCYWNraW5nU3RvcmUsIGNlbnRl
ckNvbHVtbiwgY2VudGVyUm93LCB6b29tKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgREJHKCJSPlslbHUgJWx1XSAiLCBjZW50ZXJDb2x1bW4sIGNlbnRl
clJvdyk7Ci0gICAgICAgICAgICAgICAgLS1tZW1vcnlMaW1pdHM7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgLS1jZW50ZXJSb3c7Ci0gICAgICAgIC0tY2VudGVyQ29sdW1uOwot
ICAgICAgICBzdGVwICs9IDI7Ci0gICAgfQotCi1tZW1vcnlMaW1pdHNSZWFjaGVkOgotICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogZXdrQmFja2luZ1N0b3JlLCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0
IHpvb20pCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBw
cml2LCBmYWxzZSk7Ci0KLSAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGls
ZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVp
Z2h0OwotICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29t
KTsKLQotICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7Ci0gICAgbWVtc2V0KCZzbGlj
ZXIsIDAsIHNpemVvZihFaW5hX1RpbGVfR3JpZF9TbGljZXIpKTsKLQotICAgIGlmICghZWluYV90
aWxlX2dyaWRfc2xpY2VyX3NldHVwKCZzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRpbGVX
aWR0aCwgdGlsZUhlaWdodCkpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0dXAgZ3JpZCBz
bGljZXIgZm9yICVkLCVkKyVkeCVkIHRpbGU9JWR4JWQiLAotICAgICAgICAgICAgeCwgeSwgd2lk
dGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8qIGdyaWRJbmZvOwotICAg
IHdoaWxlIChlaW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmZ3JpZEluZm8pKSB7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29sdW1uID0gZ3JpZEluZm8tPmNvbDsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyByb3cgPSBncmlkSW5mby0+cm93OwotICAgICAgICBp
ZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKHByaXYs
IGNvbHVtbiwgcm93LCB6b29tKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0K
LSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21h
dHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0aWxlVW51c2VkQ2FjaGUsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHpvb20pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIGV3a0JhY2tp
bmdTdG9yZSwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCi17Ci0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2LCBmYWxzZSk7Ci0KLSAgICBJTkZPKCJw
cml2LT5tb2RlbC5iYXNlLnJvdyA9JWxkLCBuPSV1IHByaXYtPnZpZXcucm93cz0lbHUiLCBwcml2
LT5tb2RlbC5iYXNlLnJvdywgbiwgcHJpdi0+dmlldy5yb3dzKTsKLSAgICB1bnNpZ25lZCBsb25n
IHN0YXJ0Um93ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuOwotICAgIHVuc2lnbmVkIGxvbmcg
c3RhcnRDb2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiAtIG47Ci0gICAgdW5zaWduZWQgbG9u
ZyBlbmRSb3cgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MgLSAxLCBwcml2LT5t
b2RlbC5iYXNlLnJvdyArIHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKLSAgICB1bnNpZ25lZCBs
b25nIGVuZENvbCA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyAtIDEsIHBy
aXYtPm1vZGVsLmJhc2UuY29sdW1uICsgcHJpdi0+dmlldy5jb2x1bW5zICsgbiAtIDEpOwotCi0g
ICAgSU5GTygic3RhcnRSb3c9JWx1LCBlbmRSb3c9JWx1LCBzdGFydENvbD0lbHUsIGVuZENvbD0l
bHUiLCBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sKTsKLQotICAgIHpvb20gPSBS
T1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKLQotICAgIGZvciAodW5z
aWduZWQgbG9uZyBpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyArK2kpCi0gICAgICAgIGZvciAo
dW5zaWduZWQgbG9uZyBqID0gc3RhcnRDb2w7IGogPD0gZW5kQ29sOyArK2opCi0gICAgICAgICAg
ICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKHBy
aXYsIGosIGksIHpvb20pKQotICAgICAgICAgICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsK
LQotc3RhcnRfcHJvY2Vzc2luZzoKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9w
cm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwotCi0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5t
b2RlbC5tYXRyaXgpOwotICAgIHVuc2lnbmVkIGxvbmcgaGVpZ2h0ID0gKGVuZFJvdyAtIHN0YXJ0
Um93ICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29t
KTsKLSAgICB1bnNpZ25lZCBsb25nIHdpZHRoID0gKGVuZENvbCAtIHN0YXJ0Q29sICsgMSkgKiBU
SUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpvb20pOwotICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2
LT52aWV3LnRpbGUud2lkdGgsIHpvb20pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhcnRSb3cgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0
LCB6b29tKSwgd2lkdGgsIGhlaWdodCwgem9vbSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVj
dCogZXdrQmFja2luZ1N0b3JlKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a0Jh
Y2tpbmdTdG9yZSwgcHJpdik7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZXF1ZXN0X2NsZWFyKHByaXYpOwotCi0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5t
b2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0aWxl
VW51c2VkQ2FjaGUpOwotfQotCi1ib29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVf
cmVuZGVyKEV2YXNfT2JqZWN0KiBld2tCYWNraW5nU3RvcmUpCi17Ci0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrQmFja2luZ1N0b3JlLCBwcml2LCBmYWxzZSk7Ci0KLSAgICByZXR1cm4g
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHByaXYpOwotfQotCi1ib29s
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXZhc19PYmplY3QqIGV3a0Jh
Y2tpbmdTdG9yZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tCYWNraW5nU3Rv
cmUsIHByaXYsIGZhbHNlKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChw
cml2KTsKLQotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRl
cihwcml2KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAx
NTM2MmQwMGQ5MjkyZjgzYWJlODQxMTMzZTk2YmEyN2RjYTU4YmVkLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAs
MCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNz
Ci0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMK
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0q
LwotCi0jaWZuZGVmIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByaXZhdGVfaAotI2RlZmluZSBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcml2YXRlX2gKLQotI2luY2x1ZGUgIkVXZWJLaXQuaCIK
LSNpbmNsdWRlIDxFdmFzLmg+Ci0KLS8qIEVuYWJsZSBhY2NvdW50aW5nIG9mIHJlbmRlciB0aW1l
IGluIHRpbGUgc3RhdGlzdGljcyAqLwotLy8gI2RlZmluZSBUSUxFX1NUQVRTX0FDQ09VTlRfUkVO
REVSX1RJTUUKLQotLyogSWYgZGVmaW5lIGV3ayB3aWxsIGRvIG1vcmUgYWNjb3VudGluZyB0byBj
aGVjayBmb3IgbWVtb3J5IGxlYWtzCi0gKiB0cnkgImtpbGwgLVVTUjEgJFBJRCIgdG8gZ2V0IGlu
c3RhbnRhbmVvdXMgZGVidWcKLSAqIHRyeSAia2lsbCAtVVNSMiAkUElEIiB0byBnZXQgaW5zdGFu
dGFuZW91cyBkZWJ1ZyBhbmQgZm9yY2UgZmx1c2ggb2YgY2FjaGUKLSAqLwotI3VuZGVmIERFQlVH
X01FTV9MRUFLUwotCi1zdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlV2lkdGggPSAyNTY7Ci1z
dGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlSGVpZ3RoID0gMjU2OwotCi1zdGF0aWMgY29uc3Qg
ZmxvYXQgem9vbVN0ZXBNaW5pbXVtID0gMC4wMTsKLQotI2RlZmluZSBUSUxFX1NJWkVfQVRfWk9P
TShTSVpFLCBaT09NKSAoKGludClyb3VuZGYoKFNJWkUpICogKFpPT00pKSkKLSNkZWZpbmUgVElM
RV9aT09NX0FUX1NJWkUoU0laRSwgT1JJR19USUxFKSAoKGZsb2F0KShTSVpFKSAvIChmbG9hdCko
T1JJR19USUxFKSkKLSNkZWZpbmUgUk9VTkRFRF9aT09NKFNJWkUsIFpPT00pICgoZmxvYXQpKFNJ
WkUpIC8gKGZsb2F0KSgoKGludClyb3VuZGYoKFNJWkUpIC8gKFpPT00pKSkpKQotCi10eXBlZGVm
IHN0cnVjdCBfRXdrX1RpbGUgICAgICAgICAgICAgICAgICAgICBFd2tfVGlsZTsKLXR5cGVkZWYg
c3RydWN0IF9Fd2tfVGlsZV9TdGF0cyAgICAgICAgICAgICAgIEV3a19UaWxlX1N0YXRzOwotdHlw
ZWRlZiBzdHJ1Y3QgX0V3a19UaWxlX01hdHJpeCAgICAgICAgICAgICAgRXdrX1RpbGVfTWF0cml4
OwotCi1zdHJ1Y3QgX0V3a19UaWxlX1N0YXRzIHsKLSAgICBkb3VibGUgbGFzdF91c2VkOyAgICAg
ICAgLyoqPCB0aW1lIG9mIGxhc3QgdXNlICovCi0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JF
TkRFUl9USU1FCi0gICAgZG91YmxlIHJlbmRlcl90aW1lOyAgICAgIC8qKjwgYW1vdW50IG9mIHRp
bWUgdGhpcyB0aWxlIHRvb2sgdG8gcmVuZGVyICovCi0jZW5kaWYKLSAgICB1bnNpZ25lZCBpbnQg
YXJlYTsgICAgICAgLyoqPCBjYWNoZSBmb3IgKHcgKiBoKSAqLwotICAgIHVuc2lnbmVkIGludCBt
aXNzZXM7ICAgICAvKio8IG51bWJlciBvZiB0aW1lcyBpdCBiZWNhbWUgZGlydHkgYnV0IG5vdAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZXBhaW50ZWQgYXQgYWxsIHNpbmNlIGl0
IHdhcyBub3QgdmlzaWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAg
Ym9vbCBmdWxsX3VwZGF0ZSA6IDE7IC8qKjwgdGlsZSByZXF1aXJlcyBmdWxsIHNpemUgdXBkYXRl
ICovCi19OwotCi1zdHJ1Y3QgX0V3a19UaWxlIHsKLSAgICBFaW5hX1RpbGVyKiB1cGRhdGVzOyAg
ICAvKio8IHVwZGF0ZWQvZGlydHkgYXJlYXMgKi8KLSAgICBFd2tfVGlsZV9TdGF0cyBzdGF0czsg
ICAgICAgLyoqPCB0aWxlIHVzYWdlIHN0YXRpc3RpY3MgKi8KLSAgICB1bnNpZ25lZCBsb25nIGNv
bHVtbiwgcm93OyAvKio8IHRpbGUgdGlsZSBwb3NpdGlvbiAqLwotICAgIEV2YXNfQ29vcmQgeCwg
eTsgICAgICAgIC8qKjwgdGlsZSBjb29yZGluYXRlIHBvc2l0aW9uICovCi0KLSAgICAvKiogTmV2
ZXIgZXZlciBjaGFuZ2UgdGhvc2UgYWZ0ZXIgdGlsZSBpcyBjcmVhdGVkIChyZXNwZWN0IGNvbnN0
ISkgKi8KLSAgICBjb25zdCBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7ICAgICAgICAvKio8IHRp
bGUgc2l6ZSAoc2VlIFRJTEVfU0laRV9BVF9aT09NKCkpICovCi0gICAgY29uc3QgRXZhc19Db2xv
cnNwYWNlIGNzcGFjZTsgLyoqPCBjb2xvcnNwYWNlICovCi0gICAgY29uc3QgZmxvYXQgem9vbTsg
ICAgICAgICAgICAgLyoqPCB6b29tIGxldmVsIGNvbnRlbnRzIHdlcmUgcmVuZGVyZWQgYXQgKi8K
LSAgICBjb25zdCBzaXplX3QgYnl0ZXM7ICAgICAgICAgICAvKio8IGJ5dGVzIHVzZWQgaW4gcGl4
ZWxzLiBrZWVwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYmVmb3JlIHBp
eGVscyB0byBndWFyYW50ZWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBh
bGlnbmVtZW50IQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgIGlu
dCB2aXNpYmxlOyAgICAgICAgICAgICAgICAgIC8qKjwgdmlzaWJpbGl0eSBjb3VudGVyIG9mIHRo
aXMgdGlsZSAqLwotICAgIEV2YXNfT2JqZWN0KiBpbWFnZTsgICAgICAgICAgIC8qKjwgRXZhcyBJ
bWFnZSwgdGhlIHRpbGUgdG8gYmUgcmVuZGVyZWQgKi8KLX07Ci0KLS8qIHZpZXcgKi8KLUV2YXNf
T2JqZWN0KiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoRXZhcyogZSk7Ci0KLXZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldChFdmFzX09iamVjdCogbywgYm9vbCAo
KmNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEp
LCBjb25zdCB2b2lkKiBkYXRhKTsKLQotYm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3Jv
bGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSk7Ci1ib29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9h
ZGQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHkpOwotYm9vbCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfaW5uZXJfb2Zmc2V0X2FkZChFdmFzX09iamVj
dCogbywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29yZCB4LCBFdmFzX0Nv
b3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKTsKLQotYm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV96b29tX3NldChFdmFzX09iamVjdCogbywgZmxvYXQqIHpvb20sIEV2YXNfQ29v
cmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQqIG9mZngsIEV2YXNfQ29vcmQqIG9mZnkp
OwotYm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0
KiBvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KTsKLXZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29v
cmQgdywgRXZhc19Db29yZCBoKTsKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93
ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIG8sIGJvb2wgc21vb3RoX3NjYWxlKTsK
LXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWxwaGFfc2V0KEV2YXNfT2JqZWN0KiBvLCBi
b29sIGhhc19hbHBoYSk7Ci1ib29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFz
X09iamVjdCogbywgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSk7Ci12b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0KiBvLCB2
b2lkKiAoKmNiKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbyksIGNvbnN0IHZvaWQqIGRhdGEp
Owotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQo
RXZhc19PYmplY3QqIG8sIHZvaWQqICgqY2IpKHZvaWQqIGRhdGEsIHZvaWQqIHByZV9kYXRhLCBF
dmFzX09iamVjdCogbyksIGNvbnN0IHZvaWQqIGRhdGEpOwotdm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QqIG8pOwotdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0KiBvKTsKLXZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nv
b3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCk7Ci12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoRXZhc19PYmplY3QqIG8sIGJvb2wgdmFsdWUpOwotdm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCogbyk7Ci12b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9zY2FsZV9zZXQoRXZhc19PYmplY3QqIG8sIGJv
b2wgdmFsdWUpOwotCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogbyk7Ci12b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCog
bywgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMpOwotCi1ib29sIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pOwotYm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFz
X09iamVjdCogbywgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pOwotYm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3NwaXJhbF9xdWV1ZShFdmFzX09iamVjdCogbywgRWlu
YV9SZWN0YW5nbGUqIHZpZXdfcmVjdCwgRWluYV9SZWN0YW5nbGUqIHJlbmRlcl9yZWN0LCBpbnQg
bWF4X21lbW9yeSwgZmxvYXQgem9vbSk7Ci12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBvKTsKLQotYm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7Ci1ib29sIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXZhc19PYmplY3QqIG8pOwotCi0jZW5kaWYgLy8g
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a190aWxlZF9tYXRyaXguY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxl
ZF9tYXRyaXguY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmFiZjc4ZjhkNzBh
MWI5MTI5ZWVjN2QxMDRhYTBhNmYxOWU2YTEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY5NyArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0g
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNkZWZpbmUgX19TVERDX0ZPUk1B
VF9NQUNST1MKLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgImV3a19wcml2YXRlLmgi
Ci0jaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJpdmF0ZS5oIgotI2luY2x1ZGUg
ImV3a190aWxlZF9tYXRyaXhfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9tb2RlbF9w
cml2YXRlLmgiCi0jaW5jbHVkZSA8RWluYS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVk
ZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+Ci0KLXN0cnVjdCBFd2tfVGlsZV9NYXRyaXhfRW50cnkgewotICAgIEVJ
TkFfSU5MSVNUOwotICAgIGZsb2F0IHpvb207Ci0gICAgdW5zaWduZWQgbG9uZyBjb3VudDsKLSAg
ICBFaW5hX01hdHJpeHNwYXJzZSogbWF0cml4OwotfTsKLQotc3RydWN0IF9Fd2tfVGlsZV9NYXRy
aXggewotICAgIEVpbmFfTWF0cml4c3BhcnNlKiBtYXRyaXg7Ci0gICAgRWluYV9Jbmxpc3QqIG1h
dHJpY2VzOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwotICAg
IEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAoKmNh
bGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUq
IHVwZGF0ZSk7Ci0gICAgICAgIHZvaWQqIGRhdGE7Ci0gICAgfSByZW5kZXI7Ci0gICAgdW5zaWdu
ZWQgaW50IGZyb3plbjsKLSAgICBFaW5hX0xpc3QqIHVwZGF0ZXM7Ci0gICAgc3RydWN0IHsKLSAg
ICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwotICAgIH0gdGlsZTsKLSNpZmRlZiBERUJV
R19NRU1fTEVBS1MKLSAgICBzdHJ1Y3QgewotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAg
dWludDY0X3QgYWxsb2NhdGVkLCBmcmVlZDsKLSAgICAgICAgfSB0aWxlcywgYnl0ZXM7Ci0gICAg
fSBzdGF0czsKLSNlbmRpZgotfTsKLQotLy8gRGVmYXVsdCA0MCBNQiBzaXplIG9mIG5ld2x5IGNy
ZWF0ZWQgY2FjaGUKLXN0YXRpYyBjb25zdCBzaXplX3QgREVGQVVMVF9DQUNIRV9TSVpFID0gNDAg
KiAxMDI0ICogMTAyNDsKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotc3RhdGljIHVpbnQ2NF90
IHRpbGVzX2xlYWtlZCA9IDA7Ci1zdGF0aWMgdWludDY0X3QgYnl0ZXNfbGVha2VkID0gMDsKLSNl
bmRpZgotCi1zdGF0aWMgRXdrX1RpbGVfTWF0cml4X0VudHJ5KiBld2tfdGlsZV9tYXRyaXhfZW50
cnlfZ2V0KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgZmxvYXQgem9vbSkKLXsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgMCk7Ci0KLSAgICBFd2tf
VGlsZV9NYXRyaXhfRW50cnkqIGl0OwotICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godGlsZU1hdHJp
eC0+bWF0cmljZXMsIGl0KSB7Ci0gICAgICAgIGlmIChpdC0+em9vbSA9PSB6b29tKQotICAgICAg
ICAgICAgcmV0dXJuIGl0OwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi0vKiBjYWxsZWQg
d2hlbiBtYXRyaXhzcGFyc2UgaXMgcmVzaXplZCBvciBmcmVlZCAqLwotc3RhdGljIHZvaWQgX2V3
a190aWxlX21hdHJpeF9jZWxsX2ZyZWUodm9pZCogdXNlckRhdGEsIHZvaWQqIGNlbGxEYXRhKQot
ewotICAgIEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCA9IHN0YXRpY19jYXN0PEV3a19UaWxl
X01hdHJpeCo+KHVzZXJEYXRhKTsKLSAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3
a19UaWxlKj4oY2VsbERhdGEpOwotCi0gICAgaWYgKCF0aWxlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnRpbGVVbnVzZWRD
YWNoZSk7Ci0KLSAgICBpZiAodGlsZS0+dXBkYXRlcyB8fCB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0
ZSkKLSAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodGlsZU1h
dHJpeC0+dXBkYXRlcywgdGlsZSk7Ci0KLSAgICBpZiAodGlsZS0+dmlzaWJsZSkKLSAgICAgICAg
RVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0aWxl
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dl
dCh0aWxlTWF0cml4LT50aWxlVW51c2VkQ2FjaGUsIHRpbGUpKSB7Ci0gICAgICAgICAgICBEQkco
InRpbGUgY2VsbCBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdGlsZSk7Ci0j
aWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy5ieXRl
cy5mcmVlZCArPSB0aWxlLT5ieXRlczsKLSAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRp
bGVzLmZyZWVkKys7Ci0jZW5kaWYKLSAgICAgICAgICAgIEV3a19UaWxlX01hdHJpeF9FbnRyeSog
ZW50cnkgPSBld2tfdGlsZV9tYXRyaXhfZW50cnlfZ2V0KHRpbGVNYXRyaXgsIHRpbGUtPnpvb20p
OwotICAgICAgICAgICAgaWYgKCFlbnRyeSkKLSAgICAgICAgICAgICAgICBFUlIoImNhbid0IGZp
bmQgbWF0cml4IGZvciB6b29tICUwLjNmIiwgdGlsZS0+em9vbSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgLS1lbnRyeS0+Y291bnQ7Ci0KLSAgICAgICAgICAgIGV3a190aWxl
X2ZyZWUodGlsZSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgRVJSKCJ0aWxlICVwIHdh
cyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0aWxlLCB0aWxlTWF0cml4LT50aWxlVW51
c2VkQ2FjaGUpOwotICAgIH0KLQotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVN
YXRyaXgtPnRpbGVVbnVzZWRDYWNoZSk7Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIGNhY2hlIG9mIHVu
dXNlZCB0aWxlIGlzIGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGls
ZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQotewotICAgIEV3a19UaWxlX01hdHJp
eCogdGlsZU1hdHJpeCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGRhdGEpOwotCi0g
ICAgRXdrX1RpbGVfTWF0cml4X0VudHJ5KiBlbnRyeSA9IGV3a190aWxlX21hdHJpeF9lbnRyeV9n
ZXQodGlsZU1hdHJpeCwgdGlsZS0+em9vbSk7Ci0gICAgaWYgKCFlbnRyeSkgewotICAgICAgICBF
UlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIGFueSBtYXRyaXg/IExlYWtpbmcu
Li4iLCB0aWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEVpbmFfTWF0cml4c3Bh
cnNlX0NlbGwqIGNlbGw7Ci0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQo
ZW50cnktPm1hdHJpeCwgdGlsZS0+cm93LCB0aWxlLT5jb2x1bW4sICZjZWxsKSkgewotICAgICAg
ICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtp
bmcuLi4iLCB0aWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghY2VsbCkg
ewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRy
aXg/IExlYWtpbmcuLi4iLCB0aWxlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlm
ICh0aWxlLT51cGRhdGVzIHx8IHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0aWxl
TWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0aWxlTWF0cml4LT51cGRhdGVzLCB0
aWxlKTsKLQotICAgIC8qIHNldCB0byBudWxsIHRvIGF2b2lkIGRvdWJsZSBmcmVlICovCi0gICAg
ZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwgMCwgMCk7Ci0gICAgZWlu
YV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihjZWxsKTsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZ
KCEhdGlsZS0+dmlzaWJsZSkpIHsKLSAgICAgICAgRVJSKCJjYWNoZSBvZiB1bnVzZWQgdGlsZXMg
cmVxdWVzdGluZyBkZWxldGlvbiBvZiB1c2VkIHRpbGUgJXA/ICIKLSAgICAgICAgICAgICJMZWFr
aW5nLi4uIiwgdGlsZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZmRlZiBERUJVR19N
RU1fTEVBS1MKLSAgICB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0aWxlLT5ieXRl
czsKLSAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCsrOwotI2VuZGlmCi0KLSAgICAt
LWVudHJ5LT5jb3VudDsKLSAgICBpZiAoIWVudHJ5LT5jb3VudCAmJiBlbnRyeS0+bWF0cml4ICE9
IHRpbGVNYXRyaXgtPm1hdHJpeCkgewotICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKGVu
dHJ5LT5tYXRyaXgpOwotICAgICAgICB0aWxlTWF0cml4LT5tYXRyaWNlcyA9IGVpbmFfaW5saXN0
X3JlbW92ZSh0aWxlTWF0cml4LT5tYXRyaWNlcywgRUlOQV9JTkxJU1RfR0VUKGVudHJ5KSk7Ci0g
ICAgICAgIGRlbGV0ZSBlbnRyeTsKLSAgICB9Ci0KLSAgICBld2tfdGlsZV9mcmVlKHRpbGUpOwot
fQotCi0vKioKLSAqIENyZWF0ZXMgYSBuZXcgbWF0cml4IG9mIHRpbGVzLgotICoKLSAqIFRoZSB0
aWxlIG1hdHJpeCBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0aWxlcyBhcm91bmQgYW5kCi0g
KiBwcm92aWRpbmcgZmFzdCBhY2Nlc3MgdG8gdGhlbS4gT25lIGNhbiB1c2UgaXQgdG8gcmV0cmll
dmUgbmV3IG9yCi0gKiBleGlzdGluZyB0aWxlcyBhbmQgZ2l2ZSB0aGVtIGJhY2ssIGFsbG93aW5n
IHRoZW0gdG8gYmUKLSAqIGZyZWVkL3JlcGxhY2VkIGJ5IHRoZSBjYWNoZS4KLSAqCi0gKiBAcGFy
YW0gdGlsZVVudXNlZENhY2hlIGNhY2hlIG9mIHVudXNlZCB0aWxlcyBvciBAYyAwIHRvIGNyZWF0
ZSBvbmUKLSAqICAgICAgICBhdXRvbWF0aWNhbGx5LgotICogQHBhcmFtIGNvbHVtbnMgbnVtYmVy
IG9mIGNvbHVtbnMgaW4gdGhlIG1hdHJpeC4KLSAqIEBwYXJhbSByb3dzIG51bWJlciBvZiByb3dz
IGluIHRoZSBtYXRyaXguCi0gKiBAcGFyYW0gem9vbUxldmVsIHpvb20gbGV2ZWwgZm9yIHRoZSBt
YXRyaXguCi0gKiBAcGFyYW0gY3NwYWNlIHRoZSBjb2xvciBzcGFjZSB1c2VkIHRvIGNyZWF0ZSB0
aWxlcyBpbiB0aGlzIG1hdHJpeC4KLSAqIEBwYXJhbSByZW5kZXJfY2IgZnVuY3Rpb24gdXNlZCB0
byByZW5kZXIgZ2l2ZW4gdGlsZSB1cGRhdGUuCi0gKiBAcGFyYW0gcmVuZGVyX2RhdGEgY29udGV4
dCB0byBnaXZlIGJhY2sgdG8gQGEgcmVuZGVyX2NiLgotICoKLSAqIEByZXR1cm4gbmV3bHkgYWxs
b2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KLSAqLwotRXdrX1Rp
bGVfTWF0cml4KiBld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGls
ZVVudXNlZENhY2hlLCB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHVuc2lnbmVkIGxvbmcgcm93cywg
ZmxvYXQgem9vbUxldmVsLCBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZSwgdm9pZCAoKnJlbmRl
ckNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5n
bGUqIHVwZGF0ZSksIGNvbnN0IHZvaWQqIHJlbmRlckRhdGEpCi17Ci0gICAgT3duUHRyPEV3a19U
aWxlX01hdHJpeD4gdGlsZU1hdHJpeCA9IGFkb3B0UHRyKG5ldyBFd2tfVGlsZV9NYXRyaXgpOwot
Ci0gICAgdGlsZU1hdHJpeC0+bWF0cmljZXMgPSAwOwotICAgIGlmICghZXdrX3RpbGVfbWF0cml4
X3pvb21fbGV2ZWxfc2V0KHRpbGVNYXRyaXguZ2V0KCksIHpvb21MZXZlbCkpCi0gICAgICAgIGV3
a190aWxlX21hdHJpeF9lbnRyeV9uZXcodGlsZU1hdHJpeC5nZXQoKSwgem9vbUxldmVsKTsKLSAg
ICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHRpbGVNYXRyaXguZ2V0KCksIGNvbHVtbnMsIHJvd3Mp
OwotCi0gICAgaWYgKHRpbGVVbnVzZWRDYWNoZSkKLSAgICAgICAgdGlsZU1hdHJpeC0+dGlsZVVu
dXNlZENhY2hlID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZih0aWxlVW51c2VkQ2FjaGUpOwot
ICAgIGVsc2UgewotICAgICAgICB0aWxlTWF0cml4LT50aWxlVW51c2VkQ2FjaGUgPSBld2tfdGls
ZV91bnVzZWRfY2FjaGVfbmV3KERFRkFVTFRfQ0FDSEVfU0laRSk7Ci0gICAgICAgIGlmICghdGls
ZU1hdHJpeC0+dGlsZVVudXNlZENhY2hlKSB7Ci0gICAgICAgICAgICBFUlIoIm5vIGNhY2hlIG9m
IHVudXNlZCB0aWxlISIpOwotICAgICAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0aWxl
TWF0cml4LT5tYXRyaXgpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICB0aWxlTWF0cml4LT5jc3BhY2UgPSBjb2xvclNwYWNlOwotICAgIHRpbGVNYXRyaXgt
PnJlbmRlci5jYWxsYmFjayA9IHJlbmRlckNhbGxiYWNrOwotICAgIHRpbGVNYXRyaXgtPnJlbmRl
ci5kYXRhID0gKHZvaWQqKXJlbmRlckRhdGE7Ci0gICAgdGlsZU1hdHJpeC0+dGlsZS53aWR0aCA9
IGRlZmF1bHRUaWxlV2lkdGg7Ci0gICAgdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQgPSBkZWZhdWx0
VGlsZUhlaWd0aDsKLSAgICB0aWxlTWF0cml4LT5mcm96ZW4gPSAwOwotICAgIHRpbGVNYXRyaXgt
PnVwZGF0ZXMgPSAwOwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdGlsZU1hdHJpeC0+
c3RhdHMudGlsZXMuYWxsb2NhdGVkID0gMDsKLSAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5m
cmVlZCA9IDA7Ci0gICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkID0gMDsKLSAg
ICB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5mcmVlZCA9IDA7Ci0jZW5kaWYKLSAgICByZXR1cm4g
dGlsZU1hdHJpeC5sZWFrUHRyKCk7Ci19Ci0KLS8qKgotICogRmluZCB0aGUgbWF0cml4IHdpdGgg
dGhlIHNhbWUgem9vbSBhbmQgc2V0IGl0IGFzIGN1cnJlbnQgbWF0cml4LgotICoKLSAqIEBwYXJh
bSB0aWxlTWF0cml4IHRpbGUgbWF0cml4IHRvIHNlYXJjaCB0aGUgbWF0cml4IGluLgotICogQHBh
cmFtIHpvb20gem9vbSBmYWN0b3IgdG8gZmluZCB0aGUgc2FtZSBtYXRyaXggd2l0aCBpdCBpbiBt
YXRyaWNlcy4KLSAqCi0gKiBAcmV0dXJuIEBjIHRydWUgaWYgZm91bmQsIEBjIGZhbHNlIG90aGVy
d2lzZS4KLSAqLwotYm9vbCBld2tfdGlsZV9tYXRyaXhfem9vbV9sZXZlbF9zZXQoRXdrX1RpbGVf
TWF0cml4KiB0aWxlTWF0cml4LCBmbG9hdCB6b29tKQotewotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCBmYWxzZSk7Ci0KLSAgICBFd2tfVGlsZV9NYXRyaXhf
RW50cnkqIGl0OwotICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godGlsZU1hdHJpeC0+bWF0cmljZXMs
IGl0KSB7Ci0gICAgICAgIGlmIChpdC0+em9vbSA9PSB6b29tKSB7Ci0gICAgICAgICAgICB0aWxl
TWF0cml4LT5tYXRyaWNlcyA9IGVpbmFfaW5saXN0X3Byb21vdGUodGlsZU1hdHJpeC0+bWF0cmlj
ZXMsIEVJTkFfSU5MSVNUX0dFVChpdCkpOwotICAgICAgICAgICAgdGlsZU1hdHJpeC0+bWF0cml4
ID0gaXQtPm1hdHJpeDsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIGV3a190aWxlX21hdHJpeF9lbnRyeV9u
ZXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBmbG9hdCB6b29tKQotewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOwotCi0gICAgT3duUHRyPEV3a19UaWxl
X01hdHJpeF9FbnRyeT4gZW50cnkgPSBhZG9wdFB0cihuZXcgRXdrX1RpbGVfTWF0cml4X0VudHJ5
KTsKLSAgICBlbnRyeS0+em9vbSA9IHpvb207Ci0gICAgZW50cnktPmNvdW50ID0gMDsKLSAgICBl
bnRyeS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KDEsIDEsIF9ld2tfdGlsZV9tYXRy
aXhfY2VsbF9mcmVlLCB0aWxlTWF0cml4KTsKLSAgICBpZiAoIWVudHJ5LT5tYXRyaXgpIHsKLSAg
ICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBtYXRyaXguIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgdGlsZU1hdHJpeC0+bWF0cml4ID0gZW50cnktPm1hdHJpeDsKLSAg
ICB0aWxlTWF0cml4LT5tYXRyaWNlcyA9IGVpbmFfaW5saXN0X3ByZXBlbmQodGlsZU1hdHJpeC0+
bWF0cmljZXMsIEVJTkFfSU5MSVNUX0dFVChlbnRyeS5sZWFrUHRyKCkpKTsKLX0KLQotdm9pZCBl
d2tfdGlsZV9tYXRyaXhfaW52YWxpZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCi17
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1hdHJpeCk7Ci0KLSAgICBFaW5h
X0lubGlzdCogbWF0cml4TGlzdCA9IHRpbGVNYXRyaXgtPm1hdHJpY2VzOwotICAgIHdoaWxlICht
YXRyaXhMaXN0KSB7Ci0gICAgICAgIEV3a19UaWxlX01hdHJpeF9FbnRyeSogaXQgPSBFSU5BX0lO
TElTVF9DT05UQUlORVJfR0VUKG1hdHJpeExpc3QsIEV3a19UaWxlX01hdHJpeF9FbnRyeSk7Ci0g
ICAgICAgIEVpbmFfSW5saXN0KiBuZXh0ID0gbWF0cml4TGlzdC0+bmV4dDsKLQotICAgICAgICBp
ZiAoaXQtPm1hdHJpeCAhPSB0aWxlTWF0cml4LT5tYXRyaXgpIHsKLSAgICAgICAgICAgIGVpbmFf
bWF0cml4c3BhcnNlX2ZyZWUoaXQtPm1hdHJpeCk7Ci0gICAgICAgICAgICB0aWxlTWF0cml4LT5t
YXRyaWNlcyA9IGVpbmFfaW5saXN0X3JlbW92ZSh0aWxlTWF0cml4LT5tYXRyaWNlcywgbWF0cml4
TGlzdCk7Ci0gICAgICAgICAgICBkZWxldGUgaXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBtYXRy
aXhMaXN0ID0gbmV4dDsKLSAgICB9Ci19Ci0KLS8qKgotICogRGVzdHJveXMgdGlsZXMgbWF0cml4
LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KLSAqCi0gKiBUaGUgY2FjaGUgaW5zdGFuY2UgaXMg
dW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgotICovCi12b2lkIGV3a190aWxlX21h
dHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKLXsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsKLQotICAgIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9mcmVlemUodGlsZU1hdHJpeC0+dGlsZVVudXNlZENhY2hlKTsKLSAgICBld2tfdGlsZV9tYXRy
aXhfaW52YWxpZGF0ZSh0aWxlTWF0cml4KTsKLSAgICBFd2tfVGlsZV9NYXRyaXhfRW50cnkqIGVu
dHJ5ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCh0aWxlTWF0cml4LT5tYXRyaWNlcywgRXdr
X1RpbGVfTWF0cml4X0VudHJ5KTsKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKGVudHJ5LT5t
YXRyaXgpOwotICAgIHRpbGVNYXRyaXgtPm1hdHJpY2VzID0gZWluYV9pbmxpc3RfcmVtb3ZlKHRp
bGVNYXRyaXgtPm1hdHJpY2VzLCByZWludGVycHJldF9jYXN0PEVpbmFfSW5saXN0Kj4oZW50cnkp
KTsKLSAgICB0aWxlTWF0cml4LT5tYXRyaWNlcyA9IDA7Ci0gICAgZGVsZXRlIGVudHJ5OwotCi0g
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dGlsZVVudXNlZENhY2hl
KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dGlsZVVudXNl
ZENhY2hlKTsKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHVpbnQ2NF90IHRpbGVzID0g
dGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxsb2NhdGVkIC0gdGlsZU1hdHJpeC0+c3RhdHMudGls
ZXMuZnJlZWQ7Ci0gICAgdWludDY0X3QgYnl0ZXMgPSB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5h
bGxvY2F0ZWQgLSB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5mcmVlZDsKLQotICAgIHRpbGVzX2xl
YWtlZCArPSB0aWxlczsKLSAgICBieXRlc19sZWFrZWQgKz0gYnl0ZXM7Ci0KLSAgICBpZiAodGls
ZXMgfHwgYnl0ZXMpCi0gICAgICAgIEVSUigidGlsZWQgbWF0cml4IGxlYWtlZDogdGlsZXNbKyUi
IFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1NjQgIl0gIgotICAgICAgICAgICAgImJ5dGVz
WyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdIiwKLSAgICAgICAgICAgIHRp
bGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMu
ZnJlZWQsIHRpbGVzLAotICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2Nh
dGVkLCB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5mcmVlZCwgYnl0ZXMpOwotICAgIGVsc2UgaWYg
KHRpbGVzX2xlYWtlZCB8fCBieXRlc19sZWFrZWQpCi0gICAgICAgIFdBUk4oInRpbGVkIG1hdHJp
eCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICJdICIKLSAgICAg
ICAgICAgICJieXRlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiXSwgYnV0IHNvbWUgb3RoZXIg
bGVha2VkICIKLSAgICAgICAgICAgICIlIiBQUkl1NjQgIiB0aWxlcyAoJSIgUFJJdTY0ICIgYnl0
ZXMpIiwKLSAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdGls
ZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQsCi0gICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0
cy5ieXRlcy5hbGxvY2F0ZWQsIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkLAotICAgICAg
ICAgICAgdGlsZXNfbGVha2VkLCBieXRlc19sZWFrZWQpOwotICAgIGVsc2UKLSAgICAgICAgSU5G
TygidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1
NjQgIl0gIgotICAgICAgICAgICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICJdIiwK
LSAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdGlsZU1hdHJp
eC0+c3RhdHMudGlsZXMuZnJlZWQsCi0gICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy5ieXRl
cy5hbGxvY2F0ZWQsIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkKTsKLSNlbmRpZgotCi0g
ICAgZGVsZXRlIHRpbGVNYXRyaXg7Ci19Ci0KLS8qKgotICogUmVzaXplIG1hdHJpeCB0byBnaXZl
biBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucy4KLSAqLwotdm9pZCBld2tfdGlsZV9tYXRyaXhf
cmVzaXplKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2xzLCB1
bnNpZ25lZCBsb25nIHJvd3MpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGls
ZU1hdHJpeCk7Ci0KLSAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX3NldCh0aWxlTWF0cml4LT5t
YXRyaXgsIHJvd3MsIGNvbHMpOwotfQotCi12b2lkIGV3a190aWxlX21hdHJpeF9zaXplX2dldChF
d2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcqIGNvbHVtbnMsIHVuc2ln
bmVkIGxvbmcqIHJvd3MpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1h
dHJpeCk7Ci0KLSAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX2dldCh0aWxlTWF0cml4LT5tYXRy
aXgsIHJvd3MsIGNvbHVtbnMpOwotfQotCi0vKioKLSAqIEdldCB0aGUgY2FjaGUgb2YgdW51c2Vk
IHRpbGVzIGluIHVzZSBieSBnaXZlbiBtYXRyaXguCi0gKgotICogTm8gcmVmZXJlbmNlIGlzIHRh
a2VuIHRvIHRoZSBjYWNoZS4KLSAqLwotRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgp
Ci17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIDApOwot
Ci0gICAgcmV0dXJuIHRpbGVNYXRyaXgtPnRpbGVVbnVzZWRDYWNoZTsKLX0KLQotLyoqCi0gKiBH
ZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4KLSAqCi0g
KiBJZiB0aGUgdGlsZS53aWR0aGFzIHVudXNlZCB0aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBj
YWNoZS4KLSAqCi0gKiBBZnRlciB1c2FnZSwgcGxlYXNlIGdpdmUgaXQgYmFjayB1c2luZwotICog
ZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkuIElmIHlvdSBqdXN0IHdhbnQgdG8gY2hlY2sgaWYg
aXQgZXhpc3RzLAotICogdGhlbiB1c2UgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3Rz
KCkuCi0gKgotICogQHBhcmFtIHRpbGVNYXRyaXggdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxl
IGZyb20uCi0gKiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHJv
dyB0aGUgcm93IG51bWJlci4KLSAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4K
LSAqCi0gKiBAcmV0dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIDAgaWYgbm9uZSBpcyBmb3Vu
ZC4gSWYgdGhlIHRpbGUKLSAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2ls
bCBiZSBAYiByZW1vdmVkICh0aHVzCi0gKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9u
ZSBzaG91bGQgZ2l2ZSBpdCBiYWNrIHdpdGgKLSAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Rp
bGVfcHV0KCkgYWZ0ZXJ3YXJkcy4KLSAqCi0gKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4
YWN0X2dldCgpCi0gKi8KLUV3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQo
RXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWdu
ZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCi17Ci0gICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNf
Y2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0aWxlTWF0cml4
LT5tYXRyaXgsIHJvdywgY29sdW1uKSk7Ci0gICAgaWYgKCF0aWxlKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmICh0aWxlLT56b29tICE9IHpvb20pCi0gICAgICAgIHJldHVybiAwOwotCi0j
aWZuZGVmIE5ERUJVRwotICAgIGlmICghdGlsZS0+dmlzaWJsZSkgewotICAgICAgICBpZiAoIWV3
a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxlTWF0cml4LT50aWxlVW51c2VkQ2FjaGUs
IHRpbGUpKQotICAgICAgICAgICAgV0FSTigiRXdrX1RpbGUgd2FzIHVudXNlZCBidXQgbm90IGlu
IGNhY2hlPyBidWchIik7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gdGlsZTsKLX0KLQot
LyoqCi0gKiBDaGVja3MgaWYgdGlsZSBvZiBnaXZlbiB6b29tIGV4aXN0cyBpbiBtYXRyaXguCi0g
KgotICogQHBhcmFtIHRpbGVNYXRyaXggdGhlIHRpbGUgbWF0cml4IHRvIGNoZWNrIHRpbGUgZXhp
c3RlbmNlLgotICogQHBhcmFtIGNvbHVtbiB0aGUgY29sdW1uIG51bWJlci4KLSAqIEBwYXJhbSBy
b3cgdGhlIHJvdyBudW1iZXIuCi0gKiBAcGFyYW0gem9vbSB0aGUgZXhhY3Qgem9vbSB0byBxdWVy
eS4KLSAqCi0gKiBAcmV0dXJuIEBjIHRydWUgaWYgZm91bmQsIEBjIGZhbHNlIG90aGVyd2lzZS4K
LSAqCi0gKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpCi0gKi8KLWJvb2wg
ZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01hdHJpeCogdGlsZU1h
dHJpeCwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29t
KQotewotICAgIHJldHVybiBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQodGlsZU1hdHJp
eCwgY29sdW1uLCByb3csIHpvb20pOwotfQotCi0vKioKLSAqIENyZWF0ZSBhIG5ldyB0aWxlIGF0
IGdpdmVuIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsIGluIHRoZSBtYXRyaXguCi0gKgotICogVGhl
IG5ld2x5IGNyZWF0ZWQgdGlsZSBpcyBjb25zaWRlcmVkIGluIHVzZSBhbmQgbm90IHB1dCBpbnRv
IGNhY2hlCi0gKiBvZiB1bnVzZWQgdGlsZXMuIEFmdGVyIGl0IGlzIHVzZWQgb25lIHNob3VsZCBj
YWxsCi0gKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKSB0byBnaXZlIGl0IGJhY2sgdG8gbWF0
cml4LgotICoKLSAqIEBwYXJhbSB0aWxlTWF0cml4IHRoZSB0aWxlIG1hdHJpeCB0byBjcmVhdGUg
dGlsZSBvbi4KLSAqIEBwYXJhbSBjb2x1bW4gdGhlIGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0g
cm93IHRoZSByb3cgbnVtYmVyLgotICogQHBhcmFtIHpvb20gdGhlIGxldmVsIHRvIGNyZWF0ZSB0
aWxlLCB1c2VkIHRvIGRldGVybWluZSB0aWxlIHNpemUuCi0gKi8KLUV3a19UaWxlKiBld2tfdGls
ZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFdmFzKiBjYW52
YXMsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkK
LXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgMCk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6b29tID4gMC4wLCAwKTsKLQotICAg
IEV3a19UaWxlX01hdHJpeF9FbnRyeSogZW50cnkgPSBld2tfdGlsZV9tYXRyaXhfZW50cnlfZ2V0
KHRpbGVNYXRyaXgsIHpvb20pOwotICAgIGlmICghZW50cnkpIHsKLSAgICAgICAgRVJSKCJjb3Vs
ZCBub3QgZ2V0IG1hdHJpeCBhdCB6b29tICVmIGZvciB0aWxlIiwgem9vbSk7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICArK2VudHJ5LT5jb3VudDsKLQotICAgIEV2YXNfQ29vcmQgdGls
ZVdpZHRoID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRpbGVIZWln
aHQgPSB0aWxlTWF0cml4LT50aWxlLmhlaWdodDsKLQotICAgIEV3a19UaWxlKiB0aWxlID0gZXdr
X3RpbGVfbmV3KGNhbnZhcywgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCB6b29tLCB0aWxlTWF0cml4
LT5jc3BhY2UpOwotICAgIGlmICghdGlsZSkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVh
dGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCAo
ZG91YmxlKXpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLQotICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfc2V0KHRpbGVNYXRyaXgt
Pm1hdHJpeCwgcm93LCBjb2x1bW4sIHRpbGUpKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IHNl
dCBtYXRyaXggY2VsbCwgcm93L2NvbCBvdXRzaWRlIG1hdHJpeCBkaW1lbnNpb25zISIpOwotICAg
ICAgICBld2tfdGlsZV9mcmVlKHRpbGUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICB0aWxlLT5jb2x1bW4gPSBjb2x1bW47Ci0gICAgdGlsZS0+cm93ID0gcm93OwotICAgIHRpbGUt
PnggPSBjb2x1bW4gKiB0aWxlV2lkdGg7Ci0gICAgdGlsZS0+eSA9IHJvdyAqIHRpbGVIZWlnaHQ7
Ci0gICAgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUgPSB0cnVlOwotICAgIHRpbGVNYXRyaXgtPnVw
ZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwotCi0j
aWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2Nh
dGVkICs9IHRpbGUtPmJ5dGVzOwotICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFsbG9jYXRl
ZCsrOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdGlsZTsKLX0KLQotLyoqCi0gKiBHaXZlcyBiYWNr
IHRoZSB0aWxlIHRvIHRoZSB0aWxlIG1hdHJpeC4KLSAqCi0gKiBUaGlzIHdpbGwgcmVwb3J0IHRo
ZSB0aWxlIGlzIG5vIGxvbmdlciBpbiB1c2UgYnkgdGhlIG9uZSB0aGF0IGdvdAotICogaXQgd2l0
aCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKS4KLSAqCi0gKiBBbnkgcHJldmlvdXMg
cmVmZXJlbmNlIHRvIHRpbGUgc2hvdWxkIGJlIHJlbGVhc2VkCi0gKiAoZXdrX3RpbGUuaGVpZ2h0
aWRlKCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvIGl0IHdpbGwKLSAqIGJlIGtu
b3duIGlmIGl0IGlzIG5vdCB2aXNpYmlsZSBhbnltb3JlIGFuZCB0aHVzIGNhbiBiZSBwdXQgaW50
byB0aGUKLSAqIHVudXNlZCBjYWNoZS4KLSAqCi0gKiBAcGFyYW0gdGlsZU1hdHJpeCB0aGUgdGls
ZSBtYXRyaXggdG8gcmV0dXJuIHRpbGUgdG8uCi0gKiBAcGFyYW0gdGlsZSB0aGUgdGlsZSBpbnN0
YW5jZSB0byByZXR1cm4sIG11c3QgQGIgbm90IGJlIEBjIDAuCi0gKiBAcGFyYW0gbGFzdF91c2Vk
IHRpbWUgaW4gd2hpY2ggdGlsZS53aWR0aGFzIGxhc3QgdXNlZC4KLSAqCi0gKiBAcmV0dXJuICN0
cnVlIG9uIHN1Y2Nlc3Mgb3IgI2ZhbHNlIG9uIGZhaWx1cmUuCi0gKi8KLWJvb2wgZXdrX3RpbGVf
bWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXdrX1RpbGUqIHRp
bGUsIGRvdWJsZSBsYXN0VXNlZCkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwodGlsZU1hdHJpeCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh0aWxlLCBmYWxzZSk7Ci0KLSAgICBpZiAodGlsZS0+dmlzaWJsZSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICB0aWxlLT5zdGF0cy5sYXN0X3VzZWQgPSBsYXN0VXNlZDsKLSAgICByZXR1
cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KHRpbGVNYXRyaXgtPnRpbGVVbnVzZWRD
YWNoZSwgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRpbGVNYXRyaXgpOwotfQot
Ci12b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4
KiB0aWxlTWF0cml4LCBFd2tfVGlsZSogdGlsZSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0aWxlTWF0cml4KTsKLQotICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+
c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV3a190aWxlX3VwZGF0
ZXNfY2xlYXIodGlsZSk7Ci0gICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1v
dmUodGlsZU1hdHJpeC0+dXBkYXRlcywgdGlsZSk7Ci19Ci0KLXN0YXRpYyBib29sIF9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29uc3Qg
RWluYV9SZWN0YW5nbGUqIGFyZWEsIGZsb2F0IHpvb20sIEVpbmFfVGlsZV9HcmlkX1NsaWNlciog
c2xpY2VyKQotewotICAgIFVOVVNFRF9QQVJBTSh6b29tKTsKLSAgICBpZiAoYXJlYS0+dyA8PSAw
IHx8IGFyZWEtPmggPD0gMCkgewotICAgICAgICBXQVJOKCJpbnZhbGlkIGFyZWEgcmVnaW9uOiAl
ZCwlZCslZHglZC4iLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEV2YXNfQ29vcmQgeCA9IGFyZWEtPng7Ci0g
ICAgRXZhc19Db29yZCB5ID0gYXJlYS0+eTsKLSAgICBFdmFzX0Nvb3JkIHdpZHRoID0gYXJlYS0+
dzsKLSAgICBFdmFzX0Nvb3JkIGhlaWdodCA9IGFyZWEtPmg7Ci0KLSAgICBFdmFzX0Nvb3JkIHRp
bGVXaWR0aCA9IHRpbGVNYXRyaXgtPnRpbGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aWxlSGVp
Z2h0ID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7Ci0KLSAgICAvLyBjcm9wcGluZyBhcmVhIHJl
Z2lvbiB0byBmaXQgbWF0cml4Ci0gICAgdW5zaWduZWQgbG9uZyByb3dzLCBjb2xzOwotICAgIGVp
bmFfbWF0cml4c3BhcnNlX3NpemVfZ2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgJnJvd3MsICZjb2xz
KTsKLSAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgd2lkdGggKz0geDsKLSAgICAgICAgeCA9IDA7
Ci0gICAgfQotICAgIGlmICh5IDwgMCkgewotICAgICAgICBoZWlnaHQgKz0geTsKLSAgICAgICAg
eSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHkgKyBoZWlnaHQgLSAxID4gc3RhdGljX2Nhc3Q8bG9u
Zz4ocm93cyAqIHRpbGVIZWlnaHQpKQotICAgICAgICBoZWlnaHQgPSByb3dzICogdGlsZUhlaWdo
dCAtIHk7Ci0gICAgaWYgKHggKyB3aWR0aCAtIDEgPiBzdGF0aWNfY2FzdDxsb25nPihjb2xzICog
dGlsZVdpZHRoKSkKLSAgICAgICAgd2lkdGggPSBjb2xzICogdGlsZVdpZHRoIC0geDsKLQotICAg
IHJldHVybiBlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwotfQotCi0KLWJvb2wgZXdrX3RpbGVfbWF0
cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlKiB1cGRhdGUsIGZsb2F0IHpvb20pCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHRpbGVNYXRyaXgsIGZhbHNlKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodXBkYXRlLCBmYWxzZSk7Ci0KLSAgICBpZiAodXBkYXRlLT53IDwgMSB8fCB1cGRhdGUt
PmggPCAxKSB7Ci0gICAgICAgIERCRygiV2h5IHdlIGdldCB1cGRhdGVzIHdpdGggZW1wdHkgYXJl
YXM/ICVkLCVkKyVkeCVkIGF0IHpvb20gJWYiLCB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRl
LT53LCB1cGRhdGUtPmgsIHpvb20pOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwotICAgIGlmICghX2V3a190aWxlX21hdHJp
eF9zbGljZXJfc2V0dXAodGlsZU1hdHJpeCwgdXBkYXRlLCB6b29tLCAmc2xpY2VyKSkgewotICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBzZXR1cCBzbGljZXIgZm9yIHVwZGF0ZSAlZCwlZCslZHglZCBh
dCB6b29tICVmIiwgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywgdXBkYXRlLT5oLCB6
b29tKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNvbnN0IEVpbmFfVGls
ZV9HcmlkX0luZm8qIGluZm87Ci0gICAgd2hpbGUgKGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9uZXh0
KCZzbGljZXIsICZpbmZvKSkgewotICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0
PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRpbGVNYXRyaXgtPm1h
dHJpeCwgaW5mby0+cm93LCBpbmZvLT5jb2wpKTsKLSAgICAgICAgaWYgKCF0aWxlKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCF0aWxlLT51cGRhdGVzICYmICF0aWxlLT5z
dGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSBlaW5h
X2xpc3RfYXBwZW5kKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwotICAgICAgICBpZiAoaW5m
by0+ZnVsbCkKLSAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHRpbGUpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0aWxlLCAmaW5mby0+cmVj
dCk7Ci0gICAgfQotCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBld2tfdGlsZV9tYXRy
aXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKLXsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsKLQotICAgIC8vIHByb2Nlc3Mg
dXBkYXRlcywgdW5mbGFnIHRpbGVzCi0gICAgRWluYV9MaXN0KiBsaXN0LCAqbGlzdE5leHQ7Ci0g
ICAgdm9pZCogaXRlbTsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRpbGVNYXRyaXgtPnVw
ZGF0ZXMsIGxpc3QsIGxpc3ROZXh0LCBpdGVtKSB7Ci0gICAgICAgIEV3a19UaWxlKiB0aWxlID0g
c3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihpdGVtKTsKLSAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19w
cm9jZXNzKHRpbGUsIHRpbGVNYXRyaXgtPnJlbmRlci5jYWxsYmFjaywgdGlsZU1hdHJpeC0+cmVu
ZGVyLmRhdGEpOwotICAgICAgICBpZiAodGlsZS0+dmlzaWJsZSkgewotICAgICAgICAgICAgZXdr
X3RpbGVfdXBkYXRlc19jbGVhcih0aWxlKTsKLSAgICAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0
ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZU1hdHJpeC0+dXBkYXRlcywgbGlzdCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIo
RXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHRpbGVNYXRyaXgpOwotCi0gICAgdm9pZCogaXRlbTsKLSAgICBFSU5BX0xJU1RfRlJF
RSh0aWxlTWF0cml4LT51cGRhdGVzLCBpdGVtKQotICAgICAgICBld2tfdGlsZV91cGRhdGVzX2Ns
ZWFyKHN0YXRpY19jYXN0PEV3a19UaWxlKj4oaXRlbSkpOwotICAgIHRpbGVNYXRyaXgtPnVwZGF0
ZXMgPSAwOwotfQotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0vLyByZW1vdmUgbWUgbGF0ZXIh
Ci12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0
cml4KQotewotICAgIEVpbmFfSXRlcmF0b3IqIGl0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0
b3JfY29tcGxldGVfbmV3KHRpbGVNYXRyaXgtPm1hdHJpeCk7Ci0gICAgRWluYV9NYXRyaXhzcGFy
c2VfQ2VsbCogY2VsbDsKLSAgICBib29sIHdhc1ByZXZpb3VzRW1wdHkgPSBmYWxzZTsKLQotICAg
IHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAi
OiUiIFBSSXU2NCAiXSAiCi0gICAgICAgICAgICJieXRlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2
NCAiOiUiIFBSSXU2NCAiXVxuIiwKLSAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMu
YWxsb2NhdGVkLCB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCwKLSAgICAgICAgICAgdGls
ZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxsb2NhdGVkIC0gdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMu
ZnJlZWQsCi0gICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdGls
ZU1hdHJpeC0+c3RhdHMuYnl0ZXMuZnJlZWQsCi0gICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRz
LmJ5dGVzLmFsbG9jYXRlZCAtIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkKTsKLQotICAg
IEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwgY2VsbCkgewotICAgICAgICB1bnNpZ25lZCBsb25n
IHJvdywgY29sdW1uOwotICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dl
dChjZWxsLCAmcm93LCAmY29sdW1uKTsKLQotICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7
Ci0gICAgICAgIGlmICghdGlsZSkgewotICAgICAgICAgICAgaWYgKCF3YXNQcmV2aW91c0VtcHR5
KSB7Ci0gICAgICAgICAgICAgICAgd2FzUHJldmlvdXNFbXB0eSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgcHJpbnRmKCJFbXB0eToiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50
ZigiIFslbHUsJWx1XSIsIGNvbHVtbiwgcm93KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmICh3YXNQcmV2aW91c0VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgd2FzUHJldmlvdXNF
bXB0eSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHByaW50ZigiJTNsdSwlM2x1ICUxMHA6IiwgY29sdW1uLCByb3csIHRp
bGUpOwotICAgICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2ZdJWMi
LCB0aWxlLT5jb2x1bW4sIHRpbGUtPnJvdywgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCwgdGls
ZS0+em9vbSwgdGlsZS0+dmlzaWJsZSA/ICcqJyA6ICcgJyk7Ci0gICAgICAgICAgICBwcmludGYo
IlxuIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHdhc1ByZXZpb3VzRW1wdHkpCi0gICAg
ICAgIHByaW50ZigiXG4iKTsKLSAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOwotCi0gICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0aWxlTWF0cml4LT50aWxlVW51c2VkQ2FjaGUpOwotfQot
I2VuZGlmCi0KLS8qKgotICogRnJlZXplIG1hdHJpeCB0byBub3QgZG8gbWFpbnRlbmFuY2UgdGFz
a3MuCi0gKgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgdXNhZ2UsIGJ1dCBtYXliZSB3
ZSBrbm93IHdlIHNob3VsZCBob2xkCi0gKiBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9w
ZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0
aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3Ro
YXcoKQotICovCi12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4KiB0
aWxlTWF0cml4KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgp
OwotCi0gICAgaWYgKCF0aWxlTWF0cml4LT5mcm96ZW4pCi0gICAgICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dGlsZVVudXNlZENhY2hlKTsKLSAgICArK3RpbGVN
YXRyaXgtPmZyb3plbjsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3Mu
Ci0gKgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4g
bWFpbnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3
a190aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKLXsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsKLQotICAgIGlmICghdGlsZU1h
dHJpeC0+ZnJvemVuKSB7Ci0gICAgICAgIEVSUigidGhhd2luZyBtb3JlIHRoYW4gZnJlZXppbmch
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAtLXRpbGVNYXRyaXgtPmZyb3plbjsK
LSAgICBpZiAoIXRpbGVNYXRyaXgtPmZyb3plbikKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RoYXcodGlsZU1hdHJpeC0+dGlsZVVudXNlZENhY2hlKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4X3ByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4X3ByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOTlhOTVkNGU5OWE1YTc3OGUwZDE3NTE4OTE0ZTEyZTQ1MjcxYTY4Yy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeF9wcml2YXRlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw2MCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQg
c3lzdGVtcwotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLSovCi0KLSNpZm5kZWYgZXdrX3RpbGVkX21hdHJpeF9wcml2YXRlX2gKLSNkZWZpbmUg
ZXdrX3RpbGVkX21hdHJpeF9wcml2YXRlX2gKLQotI2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJld2tfdGlsZWRfbWF0cml4X3ByaXZhdGUuaCIK
LQotI2luY2x1ZGUgPEV2YXMuaD4KLQotLyogbWF0cml4IG9mIHRpbGVzICovCi1Fd2tfVGlsZV9N
YXRyaXgqIGV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMsIHVu
c2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzLCBmbG9hdCB6b29tX2xldmVsLCBF
dmFzX0NvbG9yc3BhY2UgY29sb3Jfc3BhY2UsIHZvaWQgKCpyZW5kZXJfY2FsbGJhY2spKHZvaWQq
IGRhdGEsIEV3a19UaWxlKiB0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKSwgY29uc3Qg
dm9pZCogcmVuZGVyX2RhdGEpOwotdm9pZCBld2tfdGlsZV9tYXRyaXhfZW50cnlfbmV3KEV3a19U
aWxlX01hdHJpeCogdG0sIGZsb2F0IHpvb20pOwotdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZShF
d2tfVGlsZV9NYXRyaXgqIHRtKTsKLQotdm9pZCBld2tfdGlsZV9tYXRyaXhfcmVzaXplKEV3a19U
aWxlX01hdHJpeCogdG0sIHVuc2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzKTsK
LXZvaWQgZXdrX3RpbGVfbWF0cml4X3NpemVfZ2V0KEV3a19UaWxlX01hdHJpeCogdG0sIHVuc2ln
bmVkIGxvbmcqIGNvbHMsIHVuc2lnbmVkIGxvbmcqIHJvd3MpOwotYm9vbCBld2tfdGlsZV9tYXRy
aXhfem9vbV9sZXZlbF9zZXQoRXdrX1RpbGVfTWF0cml4KiB0bSwgZmxvYXQgem9vbSk7Ci12b2lk
IGV3a190aWxlX21hdHJpeF9pbnZhbGlkYXRlKEV3a19UaWxlX01hdHJpeCogdG0pOwotCi1Fd2tf
VGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0
IEV3a19UaWxlX01hdHJpeCogdG0pOwotCi1Fd2tfVGlsZSogZXdrX3RpbGVfbWF0cml4X3RpbGVf
ZXhhY3RfZ2V0KEV3a19UaWxlX01hdHJpeCogdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25l
ZCBsb25nIHJvdywgZmxvYXQgem9vbSk7Ci1ib29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0
X2V4aXN0cyhFd2tfVGlsZV9NYXRyaXgqIHRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20pOwotRXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX25l
YXJlc3RfZ2V0KEV3a19UaWxlX01hdHJpeCogdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25l
ZCBsb25nIHJvdywgZmxvYXQgem9vbSk7Ci1Fd2tfVGlsZSogZXdrX3RpbGVfbWF0cml4X3RpbGVf
bmV3KEV3a19UaWxlX01hdHJpeCogdG0sIEV2YXMqIGV2YXMsIHVuc2lnbmVkIGxvbmcgY29sLCB1
bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSk7Ci1ib29sIGV3a190aWxlX21hdHJpeF90aWxl
X3B1dChFd2tfVGlsZV9NYXRyaXgqIHRtLCBFd2tfVGlsZSogdCwgZG91YmxlIGxhc3RfdXNlZCk7
Ci0KLXZvaWQgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRy
aXgqIHRtLCBFd2tfVGlsZSogdCk7Ci0KLWJvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tf
VGlsZV9NYXRyaXgqIHRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlLCBmbG9hdCB6b29t
KTsKLXZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXgq
IHRtKTsKLXZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4
KiB0bSk7Ci12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4KiB0bSk7
Ci12b2lkIGV3a190aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCogdG0pOwotCi0vLyBy
ZW1vdmUgbWUhCi12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4
KiB0bSk7Ci12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0dWMpOwotdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOwotCi0jZW5k
aWYgLy8gZXdrX3RpbGVkX21hdHJpeF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tb2RlbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmZGY2M2Zm
NGExOWNlMzI3YTI5MjAyMzJmZDdjNjJjMzVlZGM1MTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9t
b2RlbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NTkgKzAsMCBAQAotLyoKLSAgICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
LQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
Ci0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jZGVmaW5lIF9fU1REQ19G
T1JNQVRfTUFDUk9TCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJld2tfcHJpdmF0
ZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByaXZhdGUuaCIKLSNpbmNs
dWRlICJld2tfdGlsZWRfbW9kZWxfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4K
LSNpbmNsdWRlIDxFaW5hLmg+Ci0jaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+Ci0jaW5j
bHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRF
Ul9USU1FCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jZGVmaW5lIElEWChjb2ws
IHJvdywgcm93c3BhbikgKGNvbCArIChyb3dpZHRoICogcm93c3BhbikpCi0KLSNpZmRlZiBERUJV
R19NRU1fTEVBS1MKLXN0YXRpYyB1aW50NjRfdCB0aWxlc19hbGxvY2F0ZWQgPSAwOwotc3RhdGlj
IHVpbnQ2NF90IHRpbGVzX2ZyZWVkID0gMDsKLXN0YXRpYyB1aW50NjRfdCBieXRlc19hbGxvY2F0
ZWQgPSAwOwotc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2ZyZWVkID0gMDsKLQotc3RydWN0IHRpbGVf
YWNjb3VudCB7Ci0gICAgRXZhc19Db29yZCBzaXplOwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHVp
bnQ2NF90IGFsbG9jYXRlZDsKLSAgICAgICAgdWludDY0X3QgZnJlZWQ7Ci0gICAgfSB0aWxlcywg
Ynl0ZXM7Ci19OwotCi1zdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsKLXN0YXRpYyBz
dHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2NvdW50aW5nID0gMDsKLQotc3RhdGljIGlubGluZSBzdHJ1
Y3QgdGlsZV9hY2NvdW50KiBfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUqIHRp
bGUpCi17Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCogYWNjOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhY2NvdW50aW5nX2xlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChhY2NvdW50aW5n
W2ldLnNpemUgPT0gdGlsZS0+d2lkdGgpCi0gICAgICAgICAgICByZXR1cm4gYWNjb3VudGluZyAr
IGk7Ci0gICAgfQotCi0gICAgYWNjb3VudGluZyA9IHN0YXRpY19jYXN0PHN0cnVjdCB0aWxlX2Fj
Y291bnQqPihyZWFsbG9jKGFjY291bnRpbmcsIHNpemVvZihzdHJ1Y3QgdGlsZV9hY2NvdW50KSAq
IChhY2NvdW50aW5nX2xlbiArIDEpKSk7Ci0KLSAgICBhY2MgPSBhY2NvdW50aW5nICsgYWNjb3Vu
dGluZ19sZW47Ci0gICAgYWNjLT5zaXplID0gdGlsZS0+d2lkdGg7Ci0gICAgYWNjLT50aWxlcy5h
bGxvY2F0ZWQgPSAwOwotICAgIGFjYy0+dGlsZXMuZnJlZWQgPSAwOwotICAgIGFjYy0+Ynl0ZXMu
YWxsb2NhdGVkID0gMDsKLSAgICBhY2MtPmJ5dGVzLmZyZWVkID0gMDsKLQotICAgIGFjY291bnRp
bmdfbGVuKys7Ci0KLSAgICByZXR1cm4gYWNjOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlKiB0aWxlKQotewotICAgIHN0
cnVjdCB0aWxlX2FjY291bnQqIGFjYyA9IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0aWxlKTsKLSAg
ICBpZiAoIWFjYykKLSAgICAgICAgcmV0dXJuOwotICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkICs9
IHRpbGUtPmJ5dGVzOwotICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkKys7Ci0KLSAgICBieXRlc19h
bGxvY2F0ZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgdGlsZXNfYWxsb2NhdGVkKys7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSog
dGlsZSkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2MgPSBfZXdrX3RpbGVfYWNjb3Vu
dF9nZXQodGlsZSk7Ci0gICAgaWYgKCFhY2MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGFjYy0+
Ynl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgYWNjLT50aWxlcy5mcmVlZCsrOwotCi0g
ICAgYnl0ZXNfZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgdGlsZXNfZnJlZWQrKzsKLX0KLQot
dm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpCi17Ci0gICAgc3RydWN0IHRpbGVfYWNjb3Vu
dCogYWNjOwotICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjY19lbmQ7Ci0KLSAgICBwcmludGYo
IlRJTEUgQkFMQU5DRTogdGlsZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1NjQg
Il0gIgotICAgICAgICAgICAiYnl0ZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1
NjQgIl1cbiIsCi0gICAgICAgICAgIHRpbGVzX2FsbG9jYXRlZCwgdGlsZXNfZnJlZWQsIHRpbGVz
X2FsbG9jYXRlZCAtIHRpbGVzX2ZyZWVkLAotICAgICAgICAgICBieXRlc19hbGxvY2F0ZWQsIGJ5
dGVzX2ZyZWVkLCBieXRlc19hbGxvY2F0ZWQgLSBieXRlc19mcmVlZCk7Ci0KLSAgICBpZiAoIWFj
Y291bnRpbmdfbGVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhY2MgPSBhY2NvdW50aW5nOwot
ICAgIGFjY19lbmQgPSBhY2MgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBwcmludGYoIkJFR0lOOiBU
SUxFIEJBTEFOQ0UgREVUQUlMUyAoVE8gVEhJUyBNT01FTlQhKTpcbiIpOwotICAgIGZvciAoOyBh
Y2MgPCBhY2NfZW5kOyBhY2MrKykgewotICAgICAgICB1aW50NjRfdCB0aWxlcywgYnl0ZXM7Ci0K
LSAgICAgICAgdGlsZXMgPSBhY2MtPnRpbGVzLmFsbG9jYXRlZCAtIGFjYy0+dGlsZXMuZnJlZWQ7
Ci0gICAgICAgIGJ5dGVzID0gYWNjLT5ieXRlcy5hbGxvY2F0ZWQgLSBhY2MtPmJ5dGVzLmZyZWVk
OwotCi0gICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1srJTQiIFBSSXU2NCAiLC0lNCIgUFJJ
dTY0ICI6JTQiIFBSSXU2NCAiXSAiCi0gICAgICAgICAgICAgICAiYnl0ZXNbKyU4IiBQUkl1NjQg
IiwtJTgiIFBSSXU2NCAiOiU4IiBQUkl1NjQgIl0lc1xuIiwKLSAgICAgICAgICAgICAgIGFjYy0+
c2l6ZSwKLSAgICAgICAgICAgICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkLCBhY2MtPnRpbGVzLmZy
ZWVkLCB0aWxlcywKLSAgICAgICAgICAgICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkLCBhY2MtPmJ5
dGVzLmZyZWVkLCBieXRlcywKLSAgICAgICAgICAgICAgIChieXRlcyB8fCB0aWxlcykgPyAiIFBP
U1NJQkxFIExFQUsiIDogIiIpOwotICAgIH0KLSAgICBwcmludGYoIkVORDogVElMRSBCQUxBTkNF
IERFVEFJTFMgKFRPIFRISVMgTU9NRU5UISk6XG4iKTsKLX0KLSNlbHNlCi0KLXN0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUqKSB7IH0K
LXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGls
ZSopIHsgfQotCi12b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKCkKLXsKLSAgICBwcmludGYo
ImNvbXBpbGUgd2Via2l0IHdpdGggREVCVUdfTUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKLX0KLSNl
bmRpZgotCi0vKioKLSAqIENyZWF0ZSBhIG5ldyB0aWxlIG9mIGdpdmVuIHNpemUsIHpvb20gbGV2
ZWwgYW5kIGNvbG9yc3BhY2UuCi0gKgotICogQWZ0ZXIgY3JlYXRlZCB0aGVzZSBwcm9wZXJ0aWVz
IGFyZSBpbW11dGFibGUgYXMgdGhleSdyZSB0aGUgYmFzaWMKLSAqIGNoYXJhY3RlcmlzdGljIG9m
IHRoZSB0aWxlIGFuZCBhbnkgY2hhbmdlIHdpbGwgbGVhZCB0byBpbnZhbGlkCi0gKiBtZW1vcnkg
YWNjZXNzLgotICoKLSAqIE90aGVyIG1lbWJlcnMgYXJlIG9mIGZyZWUtYWNjZXNzIGFuZCBubyBn
ZXR0ZXJzL3NldHRlcnMgYXJlCi0gKiBwcm92aWRlZCBpbiBvcmRlcnIgdG8gYXZvaWQgZXhwZW5z
aXZlIG9wZXJhdGlvbnMgb24gdGhvc2UsIGhvd2V2ZXIKLSAqIHNvbWUgYXJlIGJldHRlciBtYW5p
cHVsYXRlZCB3aXRoIHByb3ZpZGVkIGZ1bmN0aW9ucywgc3VjaCBhcwotICogZXdrX3RpbGVfc2hv
dygpIGFuZCBld2tfdGlsZV9oaWRlKCkgdG8gY2hhbmdlCi0gKiBAYyB2aXNpYmxlIG9yIGV3a190
aWxlX3VwZGF0ZV9mdWxsKCksIGV3a190aWxlX3VwZGF0ZV9hcmVhKCksCi0gKiBld2tfdGlsZV91
cGRhdGVzX2NsZWFyKCkgdG8gY2hhbmdlIEBjIHN0YXRzLm1pc3NlcywKLSAqIEBjIHN0YXRzLmZ1
bGxfdXBkYXRlIGFuZCBAYyB1cGRhdGVzLgotICovCi1Fd2tfVGlsZSogZXdrX3RpbGVfbmV3KEV2
YXMqIGV2YXMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29t
LCBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBFdmFzX0Nvb3JkKiBldmFzQ29v
cmQ7Ci0gICAgRXZhc19Db2xvcnNwYWNlKiBldmFzQ29sb3JTcGFjZTsKLSAgICBmbG9hdCogdGls
ZVpvb207Ci0gICAgc2l6ZV90KiB0aWxlU2l6ZTsKLSAgICBFd2tfVGlsZSogdGlsZTsKLSAgICB1
bnNpZ25lZCBpbnQgYXJlYTsKLSAgICBzaXplX3QgYnl0ZXM7Ci0gICAgRWNvcmVfRXZhcyogZWNv
cmVFdmFzOwotICAgIGNvbnN0IGNoYXIqIGVuZ2luZTsKLQotICAgIGFyZWEgPSB3aWR0aCAqIGhl
aWdodDsKLQotICAgIGlmIChjb2xvclNwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkK
LSAgICAgICAgYnl0ZXMgPSBhcmVhICogNDsKLSAgICBlbHNlIGlmIChjb2xvclNwYWNlID09IEVW
QVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKQotICAgICAgICBieXRlcyA9IGFyZWEgKiAyOwotICAg
IGVsc2UgewotICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3BhY2U6ICVkIiwgY29sb3JTcGFj
ZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIERCRygic2l6ZTogJWR4JWQgKCVk
KSwgem9vbTogJWYsIGNzcGFjZT0lZCIsIHdpZHRoLCBoZWlnaHQsIGFyZWEsIChkb3VibGUpem9v
bSwgY29sb3JTcGFjZSk7Ci0KLSAgICB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihtYWxs
b2Moc2l6ZW9mKEV3a19UaWxlKSkpOwotICAgIGlmICghdGlsZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICB0aWxlLT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChldmFzKTsKLQotICAg
IGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7Ci0gICAgZW5naW5l
ID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQoZWNvcmVFdmFzKTsKLSAgICBpZiAoZW5naW5l
ICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIpKQotICAgICAgICBldmFzX29iamVjdF9p
bWFnZV9jb250ZW50X2hpbnRfc2V0KHRpbGUtPmltYWdlLCBFVkFTX0lNQUdFX0NPTlRFTlRfSElO
VF9EWU5BTUlDKTsKLQotICAgIHRpbGUtPnZpc2libGUgPSAwOwotICAgIHRpbGUtPnVwZGF0ZXMg
PSAwOwotCi0gICAgbWVtc2V0KCZ0aWxlLT5zdGF0cywgMCwgc2l6ZW9mKEV3a19UaWxlX1N0YXRz
KSk7Ci0gICAgdGlsZS0+c3RhdHMuYXJlYSA9IGFyZWE7Ci0KLSAgICAvKiB1Z2x5LCBidXQgbGV0
J3MgYXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2UgKi8KLSAg
ICBldmFzQ29vcmQgPSAoRXZhc19Db29yZCopJnRpbGUtPndpZHRoOwotICAgICpldmFzQ29vcmQg
PSB3aWR0aDsKLQotICAgIGV2YXNDb29yZCA9IChFdmFzX0Nvb3JkKikmdGlsZS0+aGVpZ2h0Owot
ICAgICpldmFzQ29vcmQgPSBoZWlnaHQ7Ci0KLSAgICBldmFzQ29sb3JTcGFjZSA9IChFdmFzX0Nv
bG9yc3BhY2UqKSZ0aWxlLT5jc3BhY2U7Ci0gICAgKmV2YXNDb2xvclNwYWNlID0gY29sb3JTcGFj
ZTsKLQotICAgIHRpbGVab29tID0gKGZsb2F0KikmdGlsZS0+em9vbTsKLSAgICAqdGlsZVpvb20g
PSB6b29tOwotCi0gICAgdGlsZVNpemUgPSAoc2l6ZV90KikmdGlsZS0+Ynl0ZXM7Ci0gICAgKnRp
bGVTaXplID0gYnl0ZXM7Ci0KLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldCh0aWxlLT5p
bWFnZSwgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
Y29sb3JzcGFjZV9zZXQodGlsZS0+aW1hZ2UsIHRpbGUtPmNzcGFjZSk7Ci0gICAgX2V3a190aWxl
X2FjY291bnRfYWxsb2NhdGVkKHRpbGUpOwotCi0gICAgcmV0dXJuIHRpbGU7Ci19Ci0KLS8qKgot
ICogRnJlZSB0aWxlIG1lbW9yeS4KLSAqLwotdm9pZCBld2tfdGlsZV9mcmVlKEV3a19UaWxlKiB0
aWxlKQotewotICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHRpbGUpOwotCi0gICAgaWYgKHRp
bGUtPnVwZGF0ZXMpCi0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlLT51cGRhdGVzKTsKLQot
ICAgIGV2YXNfb2JqZWN0X2RlbCh0aWxlLT5pbWFnZSk7Ci0gICAgZnJlZSh0aWxlKTsKLX0KLQot
LyoqCi0gKiBAaW50ZXJuYWwKLSAqIFJldHVybnMgbWVtb3J5IHNpemUgdXNlZCBieSBnaXZlbiB0
aWxlCi0gKgotICogQHBhcmFtIHQgdGlsZSB0byBzaXplIGNoZWNrCi0gKiBAcmV0dXJuIFJldHVy
bnMgdXNlZCBtZW1vcnkgb3IgemVybyBpZiBvYmplY3QgaXMgTlVMTC4KLSAqLwotc2l6ZV90IGV3
a190aWxlX21lbW9yeV9zaXplX2dldChjb25zdCBFd2tfVGlsZSogdGlsZSkKLXsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZSwgMCk7Ci0gICAgcmV0dXJuIHNpemVvZihF
d2tfVGlsZSkgKyB0aWxlLT5ieXRlczsKLX0KLQotLyoqCi0gKiBNYWtlIHRoZSB0aWxlIHZpc2li
bGUsIGluY3JlbWVudGluZyBpdHMgY291bnRlci4KLSAqLwotdm9pZCBld2tfdGlsZV9zaG93KEV3
a19UaWxlKiB0aWxlKQotewotICAgIHRpbGUtPnZpc2libGUrKzsKLSAgICBldmFzX29iamVjdF9z
aG93KHRpbGUtPmltYWdlKTsKLX0KLQotLyoqCi0gKiBEZWNyZW1lbnQgdGhlIHZpc2liaWxpdHkg
Y291bnRlciwgbWFraW5nIGl0IGludmlzaWJsZSBpZiBuZWNlc3NhcnkuCi0gKi8KLXZvaWQgZXdr
X3RpbGVfaGlkZShFd2tfVGlsZSogdGlsZSkKLXsKLSAgICB0aWxlLT52aXNpYmxlLS07Ci0gICAg
aWYgKCF0aWxlLT52aXNpYmxlKQotICAgICAgICBldmFzX29iamVjdF9oaWRlKHRpbGUtPmltYWdl
KTsKLX0KLQotLyoqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHRpbGUgaXMgdmlzaWJsZSwgZmFs
c2Ugb3RoZXJ3aXNlLgotICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdrX1Rp
bGUqIHRpbGUpCi17Ci0gICAgcmV0dXJuICEhdGlsZS0+dmlzaWJsZTsKLX0KLQotLyoqCi0gKiBN
YXJrIHdob2xlIHRpbGUgYXMgZGlydHkgYW5kIHJlcXVpcmluZyB1cGRhdGUuCi0gKi8KLXZvaWQg
ZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGUqIHRpbGUpCi17Ci0gICAgLyogVE9ETzogbGlz
dCBvZiB0aWxlcyBwZW5kaW5nIHVwZGF0ZXM/ICovCi0gICAgdGlsZS0+c3RhdHMubWlzc2VzKys7
Ci0KLSAgICBpZiAoIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7Ci0gICAgICAgIHRpbGUtPnN0
YXRzLmZ1bGxfdXBkYXRlID0gdHJ1ZTsKLSAgICAgICAgaWYgKHRpbGUtPnVwZGF0ZXMpIHsKLSAg
ICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlLT51cGRhdGVzKTsKLSAgICAgICAgICAgIHRp
bGUtPnVwZGF0ZXMgPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi0vKioKLSAqIE1hcmsgdGhl
IHNwZWNpZmljIHN1YmFyZWEgYXMgZGlydHkgYW5kIHJlcXVpcmluZyB1cGRhdGUuCi0gKi8KLXZv
aWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlKiByZWN0KQotewotICAgIC8qIFRPRE86IGxpc3Qgb2YgdGlsZXMgcGVuZGluZyB1cGRhdGVz
PyAqLwotICAgIHRpbGUtPnN0YXRzLm1pc3NlcysrOwotCi0gICAgaWYgKHRpbGUtPnN0YXRzLmZ1
bGxfdXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlY3QtPnggJiYgIXJlY3Qt
PnkgJiYgcmVjdC0+dyA9PSB0aWxlLT53aWR0aCAmJiByZWN0LT5oID09IHRpbGUtPmhlaWdodCkg
ewotICAgICAgICB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSA9IHRydWU7Ci0gICAgICAgIGlmICh0
aWxlLT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZS0+dXBkYXRl
cyk7Ci0gICAgICAgICAgICB0aWxlLT51cGRhdGVzID0gMDsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF0aWxlLT51cGRhdGVzKSB7Ci0gICAgICAgIHRpbGUt
PnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0KTsKLSAg
ICAgICAgaWYgKCF0aWxlLT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBDUklUSUNBTCgiY291bGQg
bm90IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZWluYV90aWxl
cl9yZWN0X2FkZCh0aWxlLT51cGRhdGVzLCByZWN0KTsKLX0KLQotLyoqCi0gKiBGb3IgZWFjaCB1
cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUgZ2l2ZW4gZnVuY3Rpb24uCi0gKgotICogVGhpcyB3aWxs
IG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcyBvciBjbGVhciB0aGUgcHJvY2Vzc2VkCi0g
KiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBkYXRlc19jbGVhcigpIGZvciB0aGF0LgotICovCi12
b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSogdGlsZSwgdm9pZCAoKmNhbGxi
YWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVw
ZGF0ZSksIGNvbnN0IHZvaWQqIGRhdGEpCi17Ci0gICAgaWYgKHRpbGUtPnN0YXRzLmZ1bGxfdXBk
YXRlKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7Ci0gICAgICAgIHJlY3QueCA9IDA7
Ci0gICAgICAgIHJlY3QueSA9IDA7Ci0gICAgICAgIHJlY3QudyA9IHRpbGUtPndpZHRoOwotICAg
ICAgICByZWN0LmggPSB0aWxlLT5oZWlnaHQ7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JF
TkRFUl9USU1FCi0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWV2OwotICAgICAgICBkb3VibGUg
cmVuZGVyU3RhcnRUaW1lOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAwKTsKLSAgICAg
ICAgcmVuZGVyU3RhcnRUaW1lID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAgICAgICAgICAg
ICAgICAgICAgICAoKChkb3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKTsKLSNlbmRpZgot
ICAgICAgICBjYWxsYmFjaygodm9pZCopZGF0YSwgdGlsZSwgJnJlY3QpOwotI2lmZGVmIFRJTEVf
U1RBVFNfQUNDT1VOVF9SRU5ERVJfVElNRQotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAw
KTsKLSAgICAgICAgdGlsZS0+c3RhdHMucmVuZGVyX3RpbWUgPSAoZG91YmxlKXRpbWV2LnR2X3Nl
YyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3Vz
ZWMpIC8gMTAwMDAwMCkgLSByZW5kZXJTdGFydFRpbWU7Ci0jZW5kaWYKLSAgICB9IGVsc2UgaWYg
KHRpbGUtPnVwZGF0ZXMpIHsKLSAgICAgICAgRWluYV9JdGVyYXRvciogaXRyID0gZWluYV90aWxl
cl9pdGVyYXRvcl9uZXcodGlsZS0+dXBkYXRlcyk7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlKiBy
ZWN0OwotICAgICAgICBpZiAoIWl0cikgewotICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5v
dCBjcmVhdGUgdGlsZXIgaXRlcmF0b3IhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ciwgcmVjdCkKLSAgICAgICAgICAg
IGNhbGxiYWNrKCh2b2lkKilkYXRhLCB0aWxlLCByZWN0KTsKLSAgICAgICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0cik7Ci0gICAgfQotfQotCi0vKioKLSAqIENsZWFyIGFsbCB1cGRhdGVzIGluIHJl
Z2lvbiwgaWYgYW55LgotICoKLSAqIFRoaXMgd2lsbCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGlj
cywgc3BlY2lhbGx5IHplcm8gc3RhdC5taXNzZXMKLSAqIGFuZCB1bnNldCBzdGF0cy5mdWxsX3Vw
ZGF0ZS4gSWYgdGlsZS0+dXBkYXRlcyBleGlzdGVkLCB0aGVuIGl0IHdpbGwgYmUKLSAqIGRlc3Ry
b3llZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGFmdGVyIGV3a190
aWxlX3VwZGF0ZXNfcHJvY2VzcygpIGlzCi0gKiBjYWxsZWQuCi0gKi8KLXZvaWQgZXdrX3RpbGVf
dXBkYXRlc19jbGVhcihFd2tfVGlsZSogdGlsZSkKLXsKLSAgICAvKiBUT0RPOiByZW1vdmUgZnJv
bSBsaXN0IG9mIHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0aWxlLT5zdGF0cy5taXNzZXMgPSAw
OwotCi0gICAgaWYgKHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0aWxlLT5zdGF0
cy5mdWxsX3VwZGF0ZSA9IDA7Ci0gICAgZWxzZSBpZiAodGlsZS0+dXBkYXRlcykgewotICAgICAg
ICBlaW5hX3RpbGVyX2ZyZWUodGlsZS0+dXBkYXRlcyk7Ci0gICAgICAgIHRpbGUtPnVwZGF0ZXMg
PSAwOwotICAgIH0KLX0KLQotdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZV9F
bnRyeSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnk7Ci1zdHJ1Y3QgX0V3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSB7Ci0gICAgRXdrX1RpbGUqIHRpbGU7Ci0gICAgaW50IHdlaWdodDsKLSAg
ICBzdHJ1Y3QgewotICAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxl
KiB0aWxlKTsKLSAgICAgICAgdm9pZCogZGF0YTsKLSAgICB9IHRpbGVfZnJlZTsKLX07Ci0KLXN0
cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlIHsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFaW5h
X0xpc3QqIGxpc3Q7Ci0gICAgICAgIHNpemVfdCBjb3VudDsKLSAgICAgICAgc2l6ZV90IGFsbG9j
YXRlZDsKLSAgICB9IGVudHJpZXM7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgc2l6ZV90IG1heDsg
IC8qKjwgd2F0ZXJtYXJrIChpbiBieXRlcykgdG8gc3RhcnQgZnJlZWluZyB0aWxlcyAqLwotICAg
ICAgICBzaXplX3QgdXNlZDsgLyoqPCBpbiBieXRlcywgbWF5YmUgbW9yZSB0aGFuIG1heC4gKi8K
LSAgICB9IG1lbW9yeTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHdp
ZHRoLCBoZWlnaHQ7Ci0gICAgICAgIGZsb2F0IHpvb207Ci0gICAgICAgIEVpbmFfQm9vbCBsb2Nr
ZWQ7Ci0gICAgfSBsb2NrZWQ7Ci0gICAgaW50IHJlZmVyZW5jZXM7Ci0gICAgdW5zaWduZWQgaW50
IGZyb3plbjsKLX07Ci0KLXN0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FDSEVfQUxM
T0NBVEVfSU5JVElBTCA9IDEyODsKLXN0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FD
SEVfQUxMT0NBVEVfU1RFUCA9IDE2Owotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9D
QUNIRV9NQVhfRlJFRSA9IDMyOwotCi0vKioKLSAqIENhY2hlIG9mIHVudXNlZCB0aWxlcyAodGhv
c2UgdGhhdCBhcmUgbm90IHZpc2libGUpLgotICoKLSAqIFRoZSBjYWNoZSBvZiB1bnVzZWQgdGls
ZXMuCi0gKgotICogQHBhcmFtIG1heCBjYWNoZSBzaXplIGluIGJ5dGVzLgotICoKLSAqIEByZXR1
cm4gbmV3bHkgYWxsb2NhdGVkIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgdXNlCi0gKiAgICAgICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKCkgdG8gcmVsZWFzZSByZXNvdXJjZXMuIElmIG5v
dAotICogICAgICAgICBwb3NzaWJsZSB0byBhbGxvY2F0ZSBtZW1vcnksIEBjIDAgaXMgcmV0dXJu
ZWQuCi0gKi8KLUV3a19UaWxlX1VudXNlZF9DYWNoZSogZXdrX3RpbGVfdW51c2VkX2NhY2hlX25l
dyhzaXplX3QgbWF4KQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENh
Y2hlOwotCi0gICAgdGlsZVVudXNlZENhY2hlID0gbmV3IEV3a19UaWxlX1VudXNlZF9DYWNoZTsK
LSAgICBtZW1zZXQodGlsZVVudXNlZENhY2hlLCAwLCBzaXplb2YoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlKSk7Ci0KLSAgICBEQkcoInRpbGVVbnVzZWRDYWNoZT0lcCIsIHRpbGVVbnVzZWRDYWNoZSk7
Ci0gICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkubWF4ID0gbWF4OwotICAgIHRpbGVVbnVzZWRD
YWNoZS0+cmVmZXJlbmNlcyA9IDE7Ci0gICAgcmV0dXJuIHRpbGVVbnVzZWRDYWNoZTsKLX0KLQot
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdGlsZVVudXNlZENhY2hlLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29y
ZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvb20pCi17Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENhY2hlKTsKLQotICAgIHRpbGVVbnVzZWRDYWNo
ZS0+bG9ja2VkLmxvY2tlZCA9IHRydWU7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueCA9
IHg7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueSA9IHk7Ci0gICAgdGlsZVVudXNlZENh
Y2hlLT5sb2NrZWQud2lkdGggPSB3aWR0aDsKLSAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5o
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuem9vbSA9IHpvb207
Ci19Ci0KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHRpbGVVbnVzZWRDYWNoZSk7Ci0KLSAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5s
b2NrZWQgPSBmYWxzZTsKLX0KLQotLyoqCi0gKiBGcmVlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4K
LSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBieSBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdW5yZWYKLSAqIGZ1bmN0aW9uLiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0
aG91dCBjb25zaWRlcmluZyByZWZlcmVuY2UgY291bnRpbmcKLSAqIG1heSBsZWFkIHRvIHVua25v
d24gcmVzdWx0cy4KLSAqCi0gKiBUaG9zZSB0aWxlcyB0aGF0IGFyZSBzdGlsbCB2aXNpYmxlIHdp
bGwgcmVtYWluIGxpdmUuIFRoZSB1bnVzZWQKLSAqIHRpbGVzIHdpbGwgYmUgZnJlZWQuCi0gKgot
ICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQotICovCi1zdGF0aWMgdm9pZCBf
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51
c2VkQ2FjaGUpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENh
Y2hlKTsKLQotICAgIERCRygidGlsZVVudXNlZENhY2hlPSVwLCAiCi0gICAgICAgICJlbnRyaWVz
PShjb3VudDolemQsIGFsbG9jYXRlZDolemQpLCAiCi0gICAgICAgICJtZW1vcnk9KG1heDolemQs
IHVzZWQ6JXpkKSIsCi0gICAgICAgIHRpbGVVbnVzZWRDYWNoZSwgdGlsZVVudXNlZENhY2hlLT5l
bnRyaWVzLmNvdW50LCB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuYWxsb2NhdGVkLAotICAgICAg
ICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS5tYXgsIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVz
ZWQpOwotCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKHRpbGVVbnVzZWRDYWNoZSk7
Ci0gICAgZGVsZXRlIHRpbGVVbnVzZWRDYWNoZTsKLX0KLQotLyoqCi0gKiBDbGVhciBjYWNoZSBv
ZiB1bnVzZWQgdGlsZXMuCi0gKgotICogQW55IHRpbGVzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSBh
cmUgZnJlZWQuIFRoZSBvbmx5IHRpbGVzIHRoYXQgYXJlCi0gKiBrZXB0IGFyZSB0aG9zZSB0aGF0
IGFyZW4ndCBpbiB0aGUgY2FjaGUgKGkuZS4gdGhhdCBhcmUgdmlzaWJsZSkuCi0gKi8KLXZvaWQg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVu
dXNlZENhY2hlKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVVbnVzZWRD
YWNoZSk7Ci0KLSAgICBpZiAoIXRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5jb3VudCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdm9pZCogaXRlbTsKLSAgICBFSU5BX0xJU1RfRlJFRSh0aWxlVW51
c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgaXRlbSkgewotICAgICAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGVfRW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRy
eSo+KGl0ZW0pOwotICAgICAgICBpdHItPnRpbGVfZnJlZS5jYWxsYmFjayhpdHItPnRpbGVfZnJl
ZS5kYXRhLCBpdHItPnRpbGUpOwotICAgICAgICBkZWxldGUgaXRyOwotICAgIH0KLQotICAgIHRp
bGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgPSAwOwotICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50
cmllcy5jb3VudCA9IDA7Ci19Ci0KLS8qKgotICogSG9sZCByZWZlcmVuY2UgdG8gY2FjaGUuCi0g
KgotICogQHJldHVybiBzYW1lIHBvaW50ZXIgYXMgdGFrZW4uCi0gKgotICogQHNlZSBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5yZWYoKQotICovCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190
aWxlX3VudXNlZF9jYWNoZV9yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2Fj
aGUpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVVbnVzZWRDYWNo
ZSwgMCk7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5yZWZlcmVuY2VzKys7Ci0gICAgcmV0dXJuIHRp
bGVVbnVzZWRDYWNoZTsKLX0KLQotLyoqCi0gKiBSZWxlYXNlIGNhY2hlIHJlZmVyZW5jZSwgZnJl
ZWluZyBpdCBpZiBpdCBkcm9wcyB0byB6ZXJvLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3JlZigpCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKCkKLSAqLwot
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVu
dXNlZENhY2hlKTsKLSAgICB0aWxlVW51c2VkQ2FjaGUtPnJlZmVyZW5jZXMtLTsKLSAgICBpZiAo
IXRpbGVVbnVzZWRDYWNoZS0+cmVmZXJlbmNlcykKLSAgICAgICAgX2V3a190aWxlX3VudXNlZF9j
YWNoZV9mcmVlKHRpbGVVbnVzZWRDYWNoZSk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX21heF9zZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVf
dCBtYXgpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENhY2hl
KTsKLSAgICBzaXplX3Qgb2xkTWF4ID0gdGlsZVVudXNlZENhY2hlLT5tZW1vcnkubWF4OwotICAg
IHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCA9IG1heDsKLSAgICAvKiBDYWNoZSBmbHVzaCB3
aGVuIG5ldyBtYXggaXMgbG93ZXIgdGhlbiBvbGQgb25lICovCi0gICAgaWYgKG9sZE1heCA+IG1h
eCkKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godGlsZVVudXNlZENh
Y2hlKTsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3
a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQotewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTCh0aWxlVW51c2VkQ2FjaGUsIDApOwotICAgIHJldHVybiB0aWxl
VW51c2VkQ2FjaGUtPm1lbW9yeS5tYXg7Ci19Ci0KLXNpemVfdCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUp
Ci17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVVbnVzZWRDYWNoZSwg
MCk7Ci0gICAgcmV0dXJuIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQ7Ci19Ci0KLXNpemVf
dCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxl
VW51c2VkQ2FjaGUsIHNpemVfdCBieXRlcykKLXsKLSAgICBFaW5hX0xpc3QqIGxpc3QsICogbGlz
dE5leHQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVVbnVzZWRDYWNo
ZSwgMCk7Ci0gICAgc2l6ZV90IGRvbmU7Ci0gICAgdW5zaWduZWQgaW50IGNvdW50OwotCi0gICAg
aWYgKCF0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIGlmIChieXRlcyA8IDEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLyoKLSAgICAgKiBO
T1RFOiB0aGUgY2FjaGUgaXMgYSBGSUZPIHF1ZXVlIGN1cnJlbnRseS4KLSAgICAgKiBEb24ndCBu
ZWVkIHRvIHNvcnQgYW55IG1vcmUuCi0gICAgICovCi0KLSAgICB2b2lkKiBpdGVtOwotICAgIGRv
bmUgPSAwOwotICAgIGNvdW50ID0gMDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRpbGVV
bnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0LCBsaXN0TmV4dCwgaXRlbSkgewotICAgICAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxl
X1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwotICAgICAgICBFd2tfVGlsZSogdGlsZSA9IGl0
ci0+dGlsZTsKLSAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBpZiAodGlsZVVudXNlZENhY2hlLT5sb2NrZWQubG9ja2VkCi0gICAgICAgICAgICAm
JiB0aWxlLT54ICsgdGlsZS0+d2lkdGggPiB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54Ci0gICAg
ICAgICAgICAmJiB0aWxlLT55ICsgdGlsZS0+aGVpZ2h0ID4gdGlsZVVudXNlZENhY2hlLT5sb2Nr
ZWQueQotICAgICAgICAgICAgJiYgdGlsZS0+eCA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLngg
KyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53aWR0aAotICAgICAgICAgICAgJiYgdGlsZS0+eSA8
IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnkgKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5oZWln
aHQKLSAgICAgICAgICAgICYmIHRpbGUtPnpvb20gPT0gdGlsZVVudXNlZENhY2hlLT5sb2NrZWQu
em9vbSkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZSAr
PSBld2tfdGlsZV9tZW1vcnlfc2l6ZV9nZXQoaXRyLT50aWxlKTsKLSAgICAgICAgaXRyLT50aWxl
X2ZyZWUuY2FsbGJhY2soaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAg
dGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGls
ZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGxpc3QpOwotICAgICAgICBkZWxldGUgaXRyOwot
ICAgICAgICBjb3VudCsrOwotICAgIH0KLQotICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVz
ZWQgLT0gZG9uZTsKLSAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQgLT0gY291bnQ7
Ci0KLSAgICByZXR1cm4gZG9uZTsKLX0KLQotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0
b19mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKLXsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlVW51c2VkQ2FjaGUpOwotICAgIGlmICh0aWxl
VW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkIDw9IHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCkK
LSAgICAgICAgcmV0dXJuOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0aWxlVW51
c2VkQ2FjaGUsIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgLSB0aWxlVW51c2VkQ2FjaGUt
Pm1lbW9yeS5tYXgpOwotICAgIGlmICh0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkID4gdGls
ZVVudXNlZENhY2hlLT5tZW1vcnkubWF4KQotICAgICAgICBDUklUSUNBTCgiQ2FjaGUgc3RpbGwg
dXNpbmcgdG9vIG11Y2ggbWVtb3J5OiAlemQgS0I7IG1heDogJXpkIEtCIiwKLSAgICAgICAgICAg
ICAgICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCwgdGlsZVVudXNlZENhY2hlLT5tZW1v
cnkubWF4KTsKLX0KLQotLyoqCi0gKiBGcmVlemUgY2FjaGUgdG8gbm90IGRvIG1haW50ZW5hbmNl
IHRhc2tzLgotICoKLSAqIE1haW50ZW5hbmNlIHRhc2tzIG9wdGltaXplIGNhY2hlIHVzYWdlLCBi
dXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQKLSAqIGhvbGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0
aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3ZSBmcmVlemUKLSAqIHdoaWxlIG9wZXJh
dGluZyBhbmQgdGhlbiB0aGF3IHdoZW4gd2UncmUgZG9uZS4KLSAqCi0gKiBAc2VlIGV3a190aWxl
X3VudXNlZF9jYWNoZV90aGF3KCkKLSAqLwotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJl
ZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQotewotICAgIHRpbGVV
bnVzZWRDYWNoZS0+ZnJvemVuKys7Ci19Ci0KLS8qKgotICogVW5mcmVlemVzIG1haW50ZW5hbmNl
IHRhc2tzLgotICoKLSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXpl
LCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCi0gKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KLSAqLwot
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVVbnVzZWRDYWNoZSkKLXsKLSAgICBpZiAoIXRpbGVVbnVzZWRDYWNoZS0+ZnJvemVuKSB7Ci0g
ICAgICAgIEVSUigidGhhd2luZyBtb3JlIHRoYW4gZnJlZXppbmchIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB0aWxlVW51c2VkQ2FjaGUtPmZyb3plbi0tOwotfQotCi0vKioKLSAq
IEdldCB0aWxlIGZyb20gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCByZW1vdmluZyBpdCBmcm9tIHRo
ZSBjYWNoZS4KLSAqCi0gKiBJZiB0aGUgdGlsZSBpcyB1c2VkLCB0aGVuIGl0J3Mgbm90IGluIGNh
Y2hlIG9mIHVudXNlZCB0aWxlcywgc28gaXQKLSAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUg
YW5kIG1heSBiZSBnaXZlbiBiYWNrIHdpdGgKLSAqIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxl
X3B1dCgpLgotICoKLSAqIEBwYXJhbSB0aWxlVW51c2VkQ2FjaGUgY2FjaGUgb2YgdW51c2VkIHRp
bGVzCi0gKiBAcGFyYW0gdGlsZSB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdrX1RpbGVf
VW51c2VkX0NhY2hlLgotICoKLSAqIEByZXR1cm4gI3RydWUgb24gc3VjY2VzcywgI2ZhbHNlIG90
aGVyd2lzZS4KLSAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgRXdrX1RpbGUqIHRpbGUpCi17
Ci0gICAgRWluYV9MaXN0KiBpdGVyYXRlRW50cnk7Ci0gICAgdm9pZCogaXRlbTsKLQotICAgIEVJ
TkFfTElTVF9GT1JFQUNIKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBpdGVyYXRlRW50
cnksIGl0ZW0pIHsKLSAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBlbnRyeSA9
IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwotICAgICAg
ICBpZiAoZW50cnktPnRpbGUgPT0gdGlsZSkgewotICAgICAgICAgICAgdGlsZVVudXNlZENhY2hl
LT5lbnRyaWVzLmNvdW50LS07Ci0gICAgICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51
c2VkIC09IGV3a190aWxlX21lbW9yeV9zaXplX2dldCh0aWxlKTsKLSAgICAgICAgICAgIHRpbGVV
bnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVVbnVz
ZWRDYWNoZS0+ZW50cmllcy5saXN0LCBpdGVyYXRlRW50cnkpOwotICAgICAgICAgICAgZGVsZXRl
IGVudHJ5OwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAiLCB0aWxlLCB0aWxlVW51c2Vk
Q2FjaGUpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiBQdXQgdGlsZSBpbnRvIGNh
Y2hlIG9mIHVudXNlZCB0aWxlcywgYWRkaW5nIGl0IHRvIHRoZSBjYWNoZS4KLSAqCi0gKiBUaGlz
IHNob3VsZCBiZSBjYWxsZWQgd2hlbiBAYyB0aWxlLT52aXNpYmxlIGlzIEBjIDAgYW5kIG5vIG9i
amVjdHMgYXJlCi0gKiB1c2luZyB0aGUgdGlsZSBhbnltb3JlLCBtYWtpbmcgaXQgYXZhaWxhYmxl
IHRvIGJlIGV4cGlyZWQgYW5kIGhhdmUKLSAqIGl0cyBtZW1vcnkgcmVwbGFjZWQuCi0gKgotICog
Tm90ZSB0aGF0IHRpbGVzIGFyZSBub3QgYXV0b21hdGljYWxseSBkZWxldGVkIGlmIGNhY2hlIGlz
IGZ1bGwsCi0gKiBpbnN0ZWFkIHRoZSBjYWNoZSB3aWxsIGhhdmUgbW9yZSBieXRlcyB1c2VkIHRo
YW4gbWF4aW11bSBhbmQgb25lCi0gKiBjYW4gY2FsbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0
b19mbHVzaCgpIHRvIGZyZWUgdGhlbS4gVGhpcyBpcyBkb25lCi0gKiBiZWNhdXNlIHVzdWFsbHkg
d2Ugd2FudCBhIGxhenkgb3BlcmF0aW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0gKgotICog
QHBhcmFtIHRpbGVVbnVzZWRDYWNoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMKLSAqIEBwYXJhbSB0
aWxlIHRpbGUgdG8gYmUgYWRkZWQgdG8gY2FjaGUuCi0gKiBAcGFyYW0gdGlsZUZyZWVDYWxsYmFj
ayBmdW5jdGlvbiB1c2VkIHRvIGZyZWUgdGlsZXMuCi0gKiBAcGFyYW0gZGF0YSBjb250ZXh0IHRv
IGdpdmUgYmFjayB0byBAYSB0aWxlX2ZyZWVfY2IgYXMgZmlyc3QgYXJndW1lbnQuCi0gKgotICog
QHJldHVybiAjdHJ1ZSBvbiBzdWNjZXNzLCAjZmFsc2Ugb3RoZXJ3aXNlLiBJZiBAYyB0aWxlLT52
aXNpYmxlCi0gKiAgICAgICAgIGlzIG5vdCAjZmFsc2UsIHRoZW4gaXQgd2lsbCByZXR1cm4gI2Zh
bHNlLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKQotICov
Ci1FaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNl
ZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBFd2tfVGlsZSogdGlsZSwgdm9pZCAoKiB0aWxlRnJl
ZUNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSksIGNvbnN0IHZvaWQqIGRhdGEp
Ci17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiB1bnVzZWRDYWNoZUVudHJ5Owot
Ci0gICAgaWYgKHRpbGUtPnZpc2libGUpIHsKLSAgICAgICAgRVJSKCJ0aWxlPSVwIGlzIG5vdCB1
bnVzZWQgKHZpc2libGU9JWQpIiwgdGlsZSwgdGlsZS0+dmlzaWJsZSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICB1bnVzZWRDYWNoZUVudHJ5ID0gbmV3IEV3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeTsKLQotICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0g
ZWluYV9saXN0X2FwcGVuZCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgdW51c2VkQ2Fj
aGVFbnRyeSk7Ci0gICAgaWYgKGVpbmFfZXJyb3JfZ2V0KCkpIHsKLSAgICAgICAgRVJSKCJMaXN0
IGFsbG9jYXRpb24gZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICB1bnVzZWRDYWNoZUVudHJ5LT50aWxlID0gdGlsZTsKLSAgICB1bnVzZWRDYWNoZUVudHJ5LT53
ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVmb3JlIHNvcnQgKi8KLSAgICB1bnVzZWRD
YWNoZUVudHJ5LT50aWxlX2ZyZWUuY2FsbGJhY2sgPSB0aWxlRnJlZUNhbGxiYWNrOwotICAgIHVu
dXNlZENhY2hlRW50cnktPnRpbGVfZnJlZS5kYXRhID0gKHZvaWQqKWRhdGE7Ci0KLSAgICB0aWxl
VW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQrKzsKLSAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9y
eS51c2VkICs9IGV3a190aWxlX21lbW9yeV9zaXplX2dldCh0aWxlKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCi17Ci0gICAgdm9pZCogaXRlbTsKLSAgICBF
aW5hX0xpc3QqIGxpc3Q7Ci0gICAgaW50IGNvdW50ID0gMDsKLSAgICBwcmludGYoIkNhY2hlIG9m
IHVudXNlZCB0aWxlczogZW50cmllczogJXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAotICAg
ICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQsIHRpbGVVbnVzZWRDYWNoZS0+
ZW50cmllcy5hbGxvY2F0ZWQsCi0gICAgICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVz
ZWQsIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCk7Ci0KLSAgICBFSU5BX0xJU1RfRk9SRUFD
SCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbGlzdCwgaXRlbSkgewotICAgICAgICBj
b25zdCBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9F
bnRyeSo+KGl0ZW0pLT50aWxlOwotICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQg
QCAlMC4zZl0lYyIsCi0gICAgICAgICAgICAgICB0aWxlLT5jb2x1bW4sIHRpbGUtPnJvdywgdGls
ZS0+d2lkdGgsIHRpbGUtPmhlaWdodCwgdGlsZS0+em9vbSwKLSAgICAgICAgICAgICAgIHRpbGUt
PnZpc2libGUgPyAnKicgOiAnICcpOwotCi0gICAgICAgIGlmICghKGNvdW50ICUgNCkpCi0gICAg
ICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbF9wcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsX3ByaXZhdGUuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzVmNmQ3MjY2NzU0ZDkwZDFmNTRkOGU4ZWM4MzUzODNm
ZTU0OWVjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsX3ByaXZhdGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ft
c3VuZyBFbGVjdHJvbmljcwotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBl
bWJlZGRlZCBzeXN0ZW1zCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotKi8KLQotI2lmbmRlZiBld2tfdGlsZWRfbW9kZWxfcHJpdmF0ZV9oCi0j
ZGVmaW5lIGV3a190aWxlZF9tb2RlbF9wcml2YXRlX2gKLQotI2luY2x1ZGUgImV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByaXZhdGUuaCIKLQotI2luY2x1ZGUgPEV2YXMuaD4KLQotLyogbW9kZWwg
Ki8KLUV3a19UaWxlICpld2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29yZCB3LCBFdmFz
X0Nvb3JkIGgsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpOwotdm9pZCBld2tf
dGlsZV9mcmVlKEV3a19UaWxlICp0KTsKLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFy
KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsKLXZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGls
ZSAqdCk7Ci12b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpOwotc2l6ZV90IGV3a190aWxl
X21lbW9yeV9zaXplX2dldChjb25zdCBFd2tfVGlsZSAqdCk7Ci1FaW5hX0Jvb2wgZXdrX3RpbGVf
dmlzaWJsZV9nZXQoRXdrX1RpbGUgKnQpOwotdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tf
VGlsZSAqdCk7Ci12b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSAqcik7Ci12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGls
ZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0
YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpOwotdm9pZCBld2tfdGlsZV91cGRhdGVz
X2NsZWFyKEV3a19UaWxlICp0KTsKLQotLyogY2FjaGUgb2YgdW51c2VkIHRpbGVzICovCi1Fd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoc2l6ZV90IG1heCk7
Ci12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCwgZmxvYXQgem9vbSk7Ci12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tf
YXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7Ci1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KmV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpOwot
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpOwotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kaXJ0eShFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1Yyk7Ci0KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZShFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7Ci12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKTsKLQotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9j
YWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpOwot
RWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YywgRXdrX1RpbGUgKnQsIHZvaWQgKCogdGlsZV9mcmVlX2NiKSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpOwotCi0jZW5kaWYgLy8gZXdrX3RpbGVk
X21vZGVsX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192
aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggYzJlYzE1
OWU1NWZjYzExZjM2NDlhOGI5NGRjNGNmMjdhYzcwZWEzMi4uZDQ5NjNmNGU3M2RiYmQ2NzQzMTc0
MjNmMGM5MzlhZDMyZDcwZjcyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC0z
NDMxLDIyICszNDMxLDYgQEAgdm9pZCBld2tfdmlld19hZGRfY29uc29sZV9tZXNzYWdlKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnMKICAgICBzbWFydERhdGEt
PmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZShzbWFydERhdGEsIG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZUlEKTsKIH0KIAotLyoqCi0gKiBAaW50ZXJuYWwKLSAqCi0gKiBSZXBvcnRzIHRoYXQg
RnJhbWVWaWV3IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLgotICogQWxsb3dzIHRvIHJlcGFpbnQg
dGhlIGZyYW1lIGNvbXBsZXRlbHkgZXZlbiBpZiB0aGUgYXJlYXMgYXJlIG91dCBvZiB0aGUgc2Ny
ZWVuCi0gKiB3aGVuIEBld2tWaWV3IGlzIGFuIGluc3RhbmNlIG9mIGV3a192aWV3X3RpbGVkLgot
ICoKLSAqIEBwYXJhbSBld2tWaWV3IHZpZXcgb2JqZWN0Ci0gKi8KLXZvaWQgZXdrX3ZpZXdfZnJh
bWVfdmlld19jcmVhdGlvbl9ub3RpZnkoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgRVdL
X1ZJRVdfVFlQRV9DSEVDS19PUl9SRVRVUk4oZXdrVmlldywgZXdrVmlld1RpbGVkTmFtZSk7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwotICAgIGV3
a19mcmFtZV9wYWludF9mdWxsX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHRydWUpOwotfQot
CiBib29sIGV3a192aWV3X2ZvY3VzX2Nhbl9jeWNsZShFdmFzX09iamVjdCogZXdrVmlldywgRXdr
X0ZvY3VzX0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIGRpcmVj
dGlvbj0lZCIsIGV3a1ZpZXcsIGRpcmVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCmlu
ZGV4IGViM2M3NGVhZjg0Mjk2NmVmZGEwYmQ3Nzc4Y2NkZDllOTMwZDJkYjcuLjljOTA4ODY3YTY4
Y2ZkNjBlNWUzNzIyOTVjNWM3NzAwMDdjYWY1ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5o
CkBAIC01MDEsODQgKzUwMSw2IEBAIGVudW0gX0V3a19FZGl0b3JfQ29tbWFuZCB7CiB0eXBlZGVm
IGVudW0gX0V3a19FZGl0b3JfQ29tbWFuZCBFd2tfRWRpdG9yX0NvbW1hbmQ7CiAKIC8qKgotICog
QGJyaWVmIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEBhIF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUu
Ci0gKgotICogQ2FjaGUgKHBvb2wpIHRoYXQgY29udGFpbnMgdW51c2VkIHRpbGVzIGZvciBld2tf
dmlld190aWxlZC4KLSAqCi0gKiBUaGlzIGNhY2hlIHdpbGwgbWFpbnRhaW4gdW51c2VkIHRpbGVz
IGFuZCBmbHVzaCB0aGVtIHdoZW4gdGhlIHRvdGFsCi0gKiBtZW1vcnkgZXhjZWVkcyB0aGUgc2V0
IGFtb3VudCB3aGVuCi0gKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpIG9yIGV4
cGxpY2l0bHkgc2V0IHZhbHVlIHdoZW4KLSAqIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCgp
IGlzIGNhbGxlZC4KLSAqCi0gKiBUaGUgdGlsZSBtYXkgYmUgc2hhcmVkIGFtb25nIGRpZmZlcmVu
dCBld2tfdmlld190aWxlZCBpbnN0YW5jZXMgdG8KLSAqIGdyb3VwIG1heGltdW0gdW51c2VkIG1l
bW9yeSByZXNpZGVudCBpbiB0aGUgc3lzdGVtLgotICovCi10eXBlZGVmIHN0cnVjdCBfRXdrX1Rp
bGVfVW51c2VkX0NhY2hlIEV3a19UaWxlX1VudXNlZF9DYWNoZTsKLQotLyoqCi0gKiBDaGFuZ2Vz
IGNhY2hlIGNhcGFjaXR5IG9mIHVudXNlZCB0aWxlcy4KLSAqCi0gKiBAcGFyYW0gdHVjIGNhY2hl
IG9mIHVudXNlZCB0aWxlcyB0byBzZXQgYSBuZXcgY2FwYWNpdHkgb2YgdW51c2VkIHRpbGVzCi0g
KgotICogQHBhcmFtIG1heCBhIG5ldyBjYXBhY2l0eSBvZiBjYWNoZSwgaW4gYnl0ZXMKLSAqCi0g
KiBAbm90ZSBUaGlzIHdpbGwgbm90IGZsdXNoIGNhY2hlLCB1c2UgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2ZsdXNoKCkgb3IKLSAqIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkgdG8g
ZG8gc28uCi0gKi8KLUVBUEkgdm9pZCAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4KTsKLQotLyoqCi0gKiBSZXRyaWV2
ZXMgbWF4aW11bSBjYWNoZSBjYXBhY2l0eSBvZiB1bnVzZWQgdGlsZXMuCi0gKgotICogQHBhcmFt
IHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgdG8gZ2V0IG1heGltdW0gY2FjaGUgY2FwYWNpdHkg
b2YgdW51c2VkIHRpbGVzCi0gKgotICogQHJldHVybiBtYXhpbXVtIGNhY2hlIGNhcGFjaXR5LCBp
biBieXRlcyBvbiBzdWNjZXNzIG9yIEBjIDAgb24gZmFpbHVyZQotICovCi1FQVBJIHNpemVfdCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1Yyk7Ci0KLS8qKgotICogUmV0cmlldmVzIHRoZSB1c2VkIGNhY2hlIGNhcGFjaXR5IG9mIHVu
dXNlZCB0aWxlcy4KLSAqCi0gKiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcyB0byBn
ZXQgdXNlZCBjYWNoZSBjYXBhY2l0eSBvZiB1bnVzZWQgdGlsZXMKLSAqCi0gKiBAcmV0dXJuIHVz
ZWQgY2FjaGUgY2FwYWNpdHksIGluIGJ5dGVzIG9uIHN1Y2Nlc3Mgb3IgQGMgMCBvbiBmYWlsdXJl
Ci0gKi8KLUVBUEkgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV91c2VkX2dldChjb25zdCBF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7Ci0KLS8qKgotICogRmx1c2hlcyBnaXZlbiBhbW91
bnQgb2YgYnl0ZXMgZnJvbSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCi0gKgotICogQWZ0ZXIgY2Fs
bGluZyB0aGlzIGZ1bmN0aW9uLCBuZWFyIEBhIGJ5dGVzIGFyZSBmcmVlZCBmcm9tIGNhY2hlLiBJ
dAotICogbWF5IGJlIGxlc3MgaWYgY2FjaGUgZGlkIG5vdCBjb250YWluIHRoYXQgYW1vdW50IG9m
IGJ5dGVzIChpZTogYW4KLSAqIGVtcHR5IGNhY2hlIGhhcyBub3RoaW5nIHRvIGZyZWUhKSBvciBt
b3JlIGlmIHRoZSBjYWNoZSBqdXN0Ci0gKiBjb250YWluZWQgb2JqZWN0cyB0aGF0IHdlcmUgbGFy
Z2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBhbW91bnQgKHRoaXMKLSAqIGlzIHVzdWFsbHkgdGhlIGNh
c2UpLgotICoKLSAqIEBwYXJhbSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzIHRvIGZsdXNoIEBi
eXRlcyBmcm9tIGNhY2hlCi0gKiBAcGFyYW0gYnl0ZXMgYW1vdW50IGJ5dGVzIHRvIGZyZWUKLSAq
Ci0gKiBAcmV0dXJuIGFtb3VudCByZWFsbHkgZnJlZWQgYnl0ZXMKLSAqCi0gKiBAc2VlIGV3a190
aWxlX3VudXNlZF9jYWNoZV91c2VkX2dldCgpCi0gKi8KLUVBUEkgc2l6ZV90IGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVz
KTsKLQotLyoqCi0gKiBGbHVzaGVzIGVub3VnaCBieXRlcyB0byBtYWtlIGNhY2hlIG9mIHVudXNl
ZCB0aWxlcyB1c2FnZSBsb3dlciB0aGFuIG1heGltdW0uCi0gKgotICogSnVzdCBsaWtlIGV3a190
aWxlX3VudXNlZF9jYWNoZV9mbHVzaCgpLCBidXQgdGhpcyB3aWxsIG1ha2UgdGhlIGNhY2hlCi0g
KiBmcmVlIGVub3VnaCB0aWxlcyB0byByZXNwZWN0IG1heGltdW0gY2FjaGUgc2l6ZSBhcyBkZWZp
bmVkIHdpdGgKLSAqIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KCkuCi0gKgotICogVGhp
cyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCB3aGVuIHN5c3RlbSBiZWNvbWVzIGlkbGUuIFRo
aXMgd2F5Ci0gKiB3ZSBrZWVwIG1lbW9yeSBsb3cgYnV0IGRvIG5vdCBpbXBhY3QgcGVyZm9ybWFu
Y2Ugd2hlbgotICogY3JlYXRpbmcvZGVsZXRpbmcgdGlsZXMuCi0gKgotICogQHBhcmFtIHR1YyBj
YWNoZSBvZiB1bnVzZWQgdGlsZXMgdG8gZmx1c2ggY2FjaGUgb2YgdW51c2VkIHRpbGVzCi0gKi8K
LUVBUEkgdm9pZCAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjKTsKLQotLyoqCiAgKiBTZXRzIHRoZSBzbWFydCBjbGFzcyBhcGkgd2l0
aG91dCBhbnkgYmFja2luZyBzdG9yZSwgZW5hYmxpbmcgdmlldwogICogdG8gYmUgaW5oZXJpdGVk
LgogICoKQEAgLTU5NSw3ICs1MTcsNiBAQCBFQVBJIHZvaWQgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfYXV0b19mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yyk7CiAgKiAgICAgICAgIHZl
cnNpb24gbWlzbWF0Y2gpCiAgKgogICogQHNlZSBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0KCkK
LSAqIEBzZWUgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KCkKICAqLwogRUFQSSBFaW5hX0Jvb2wg
ICAgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CiAK
QEAgLTYyMCwyNiArNTQxLDYgQEAgRUFQSSBFaW5hX0Jvb2wgICAgZXdrX3ZpZXdfYmFzZV9zbWFy
dF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MgKmFwaSk7CiBFQVBJIEVpbmFfQm9vbCAgICBld2tf
dmlld19zaW5nbGVfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzICphcGkpOwogCiAvKioK
LSAqIFNldHMgdGhlIHNtYXJ0IGNsYXNzIGFwaSB1c2luZyB0aWxlZCBiYWNraW5nIHN0b3JlLCBl
bmFibGluZyB2aWV3Ci0gKiB0byBiZSBpbmhlcml0ZWQuCi0gKgotICogQHBhcmFtIGFwaSBjbGFz
cyBkZWZpbml0aW9uIHRvIHNldCwgYWxsIG1lbWJlcnMgd2l0aCB0aGUKLSAqICAgICAgICBleGNl
cHRpb24gb2YgQGEgRXZhc19TbWFydF9DbGFzcy0+ZGF0YSBtYXkgYmUgb3ZlcnJpZGRlbiwgbXVz
dAotICogICAgICAgIEBiIG5vdCBiZSBAYyBOVUxMCi0gKgotICogQG5vdGUgQGEgRXZhc19TbWFy
dF9DbGFzcy0+ZGF0YSBpcyB1c2VkIHRvIGltcGxlbWVudCB0eXBlIGNoZWNraW5nIGFuZAotICog
ICAgICAgaXMgbm90IHN1cHBvc2VkIHRvIGJlIGNoYW5nZWQvb3ZlcnJpZGRlbi4gSWYgeW91IG5l
ZWQgZXh0cmEKLSAqICAgICAgIGRhdGEgZm9yIHlvdXIgc21hcnQgY2xhc3MgdG8gd29yaywganVz
dCBleHRlbmQKLSAqICAgICAgIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGluc3RlYWQuCi0gKgotICog
QHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3VjY2VzcyBvciBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1
cmUgKHByb2JhYmx5Ci0gKiAgICAgICAgIHZlcnNpb24gbWlzbWF0Y2gpCi0gKgotICogQHNlZSBl
d2tfdmlld19iYXNlX3NtYXJ0X3NldCgpCi0gKi8KLUVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3
X3RpbGVkX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyAqYXBpKTsKLQotLyoqCiAgKiBD
cmVhdGVzIGEgbmV3IEVGTCBXZWJLaXQgVmlldyBvYmplY3QuCiAgKgogICogVmlldyBvYmplY3Rz
IGFyZSB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGRlYWwgd2l0aCBFRkwgV2ViS2l0IGFzIGl0CkBA
IC02NTgsNDcgKzU1OSw2IEBAIEVBUEkgRWluYV9Cb29sICAgIGV3a192aWV3X3RpbGVkX3NtYXJ0
X3NldChFd2tfVmlld19TbWFydF9DbGFzcyAqYXBpKTsKIEVBUEkgRXZhc19PYmplY3QgKmV3a192
aWV3X3NpbmdsZV9hZGQoRXZhcyAqZSk7CiAKIC8qKgotICogQ3JlYXRlcyBhIG5ldyBFRkwgV2Vi
S2l0IFZpZXcgb2JqZWN0IHVzaW5nIHRpbGVkIGJhY2tpbmcgc3RvcmUuCi0gKgotICogVmlldyBv
YmplY3RzIGFyZSB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGRlYWwgd2l0aCBFRkwgV2ViS2l0IGFz
IGl0Ci0gKiBhYnN0cmFjdHMgdGhlIGNvbXBsZXggcGllY2VzIG9mIHRoZSBwcm9jZXNzLgotICoK
LSAqIFRoaXMgb2JqZWN0IGlzIGFsbW9zdCB0aGUgc2FtZSBhcyB0aGUgb25lIHJldHVybmVkIGJ5
IHRoZSBld2tfdmlld19zaW5nbGVfYWRkKCkKLSAqIGZ1bmN0aW9uLCBidXQgaXQgdXNlcyB0aGUg
dGlsZWQgYmFja2luZyBzdG9yZSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0Ci0gKiBiYWNraW5nIHN0
b3JlLgotICoKLSAqIEBwYXJhbSBlIGNhbnZhcyBvYmplY3Qgd2hlcmUgdG8gY3JlYXRlIHRoZSB2
aWV3IG9iamVjdAotICoKLSAqIEByZXR1cm4gdGhlIHZpZXcgb2JqZWN0IG9uIHN1Y2Nlc3Mgb3Ig
QGMgTlVMTCBvbiBmYWlsdXJlCi0gKgotICogQHNlZSBld2tfdmlld191cmlfc2V0KCkKLSAqLwot
RUFQSSBFdmFzX09iamVjdCAqZXdrX3ZpZXdfdGlsZWRfYWRkKEV2YXMgKmUpOwotCi0vKioKLSAq
IEdldHMgdGhlIGNhY2hlIG9iamVjdCBvZiB1bnVzZWQgdGlsZXMgdXNlZCBieSB0aGlzIHZpZXcu
Ci0gKgotICogQHBhcmFtIG8gdGhlIHZpZXcgb2JqZWN0IHRvIGdldCB0aGUgY2FjaGUgb2JqZWN0
Ci0gKgotICogQHJldHVybiB0aGUgY2FjaGUgb2JqZWN0IG9mIHVudXNlZCB0aWxlcyBvciBAYyBO
VUxMIG9uIGZhaWx1cmUKLSAqLwotRUFQSSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a192aWV3
X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwotCi0vKioKLSAq
IFNldHMgdGhlIGNhY2hlIG9iamVjdCBvZiB1bnVzZWQgdGlsZXMgdXNlZCBieSB0aGlzIHZpZXcu
Ci0gKgotICogSXQgY2FuIGJlIHVzZWQgdG8gc2hhcmUgYSBzaW5nbGUgY2FjaGUgYW1vbmdzdCBk
aWZmZXJlbnQgdmlld3MuCi0gKiBUaGUgdGlsZXMgZnJvbSBvbmUgdmlldyB3aWxsIG5vdCBiZSB1
c2VkIGJ5IHRoZSBvdGhlciEKLSAqIFRoaXMgaXMganVzdCB0byBsaW1pdCB0aGUgZ3JvdXAgd2l0
aCBhbW91bnQgb2YgdW51c2VkIG1lbW9yeS4KLSAqCi0gKiBAbm90ZSBJZiBAYyBOVUxMIGlzIHBy
b3ZpZGVkIGFzIGEgQGEgY2FjaGUsIHRoZW4gYSBuZXcgb25lIGlzIGNyZWF0ZWQuCi0gKgotICog
QHBhcmFtIG8gdGhlIHZpZXcgb2JqZWN0IHRvIHNldCB0aGUgY2FjaGUgb2JqZWN0Ci0gKiBAcGFy
YW0gdGhlIGNhY2hlIG9iamVjdCBvZiB1bnVzZWQgdGlsZXMKLSAqLwotRUFQSSB2b2lkICAgICAg
ICAgICAgICAgICAgIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3Qg
Km8sIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqY2FjaGUpOwotCi0vKioKICAqIFNldHMgYSBmaXhl
ZCBsYXlvdXQgc2l6ZSB0byBiZSB1c2VkLCBkaXNzb2NpYXRpbmcgaXQgZnJvbSB2aWV3cG9ydCBz
aXplLgogICoKICAqIFNldHRpbmcgYSB3aWR0aCBkaWZmZXJlbnQgdGhhbiB6ZXJvIGVuYWJsZXMg
Zml4ZWQgbGF5b3V0IG9uIHRoYXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfcHJpdmF0
ZS5oCmluZGV4IDQ0NWMxZGRhZTJjNjMzYTBmMWMyMjEwNjM0MGEwOGJlNDdkYWM0NDEuLjJkZGJj
MjQ3NGFiZTJiZDExYjhiZjQ3YWM4MjE4MTJkMWM1NDliOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlld19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3X3ByaXZhdGUuaApAQCAtMTMwLDcgKzEzMCw2IEBAIHZvaWQgZXdrX3ZpZXdf
ZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKIHZv
aWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09iamVjdCog
ZXdrVmlldyk7CiAKIGJvb2wgZXdrX3ZpZXdfZm9jdXNfY2FuX2N5Y2xlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlvbik7Ci12b2lkIGV3a192aWV3X2Zy
YW1lX3ZpZXdfY3JlYXRpb25fbm90aWZ5KEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKIAogRWluYV9C
b29sIGV3a192aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXdrX1BhaW50
X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKTsKIEVpbmFfQm9v
bCBld2tfdmlld19wYWludF9jb250ZW50cyhFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV3
a19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwIGIvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDNhMWRkZjI4MTc1NGQ5ZWZjMGIyZWRkYmY5YjllZmI2NDA5NjlhNy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAg
QEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwot
ICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0K
LSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgImV3a192aWV3LmgiCi0KLSNpbmNsdWRl
ICJld2tfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByaXZh
dGUuaCIKLSNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCi0jaW5jbHVkZSA8RXZhcy5oPgot
I2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgotCi1zdGF0aWMgRXdrX1ZpZXdfU21hcnRf
Q2xhc3MgX3BhcmVudF9zYyA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKLQotc3Rh
dGljIGJvb2wgX2V3a192aWV3X3RpbGVkX3JlbmRlcl9jYih2b2lkKiBkYXRhLCBFd2tfVGlsZSog
dGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCi17Ci0gICAgRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKj4oZGF0YSk7
Ci0gICAgRWluYV9SZWN0YW5nbGUgcmVjdCA9IHthcmVhLT54ICsgdGlsZS0+eCwgYXJlYS0+eSAr
IHRpbGUtPnksIGFyZWEtPncsIGFyZWEtPmh9OwotCi0gICAgdWludDhfdCogcGl4ZWxzID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHRpbGUtPmltYWdl
LCB0cnVlKSk7Ci0gICAgRXdrX1BhaW50X0NvbnRleHQqIGNvbnRleHQgPSBld2tfcGFpbnRfY29u
dGV4dF9mcm9tX2ltYWdlX2RhdGFfbmV3KHBpeGVscywgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdo
dCwgdGlsZS0+Y3NwYWNlKTsKLQotICAgIGV3a19wYWludF9jb250ZXh0X3RyYW5zbGF0ZShjb250
ZXh0LCAtdGlsZS0+eCwgLXRpbGUtPnkpOwotICAgIGJvb2wgcmVzdWx0ID0gZXdrX3ZpZXdfcGFp
bnRfY29udGVudHMocHJpdiwgY29udGV4dCwgJnJlY3QpOwotICAgIGV3a19wYWludF9jb250ZXh0
X2ZyZWUoY29udGV4dCk7Ci0KLSAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3NldCh0aWxlLT5p
bWFnZSwgcGl4ZWxzKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyB2b2lkKiBf
ZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSh2b2lkKiBkYXRhLCBFdmFzX09iamVj
dCopCi17Ci0gICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhKj4oZGF0YSk7Ci0gICAgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRl
ZF9yZWN1cnNpdmUocHJpdik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBFdmFzX09iamVj
dCogX2V3a192aWV3X3RpbGVkX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBFdmFzX09iamVjdCogYmFja2luZ1N0b3JlID0gZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKLSAgICBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KGJhY2tpbmdTdG9yZSwgX2V3a192aWV3
X3RpbGVkX3JlbmRlcl9jYiwgc21hcnREYXRhLT5fcHJpdik7Ci0gICAgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQKLSAgICAgICAgKGJhY2tpbmdTdG9yZSwg
X2V3a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUsIHNtYXJ0RGF0YS0+X3ByaXYpOwot
ICAgIHJldHVybiBiYWNraW5nU3RvcmU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1fZXdrX3ZpZXdfdGls
ZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0Kiwgdm9p
ZCogZXZlbnRJbmZvKQotewotICAgIEV2YXNfQ29vcmQqIHNpemUgPSBzdGF0aWNfY2FzdDxFdmFz
X0Nvb3JkKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0KLSAgICBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUKLSAgICAgICAgKHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgc2l6ZVswXSwgc2l6ZVsxXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmll
d190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCi17Ci0gICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhOwotCi0gICAgX3BhcmVudF9zYy5zYy5hZGQoZXdrVmlldyk7
Ci0KLSAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZh
c19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrVmlldykpOwotICAgIGlmICghc21hcnREYXRhKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoCi0g
ICAgICAgIHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgImNvbnRlbnRzLHNpemUsY2hhbmdlZCIsCi0g
ICAgICAgIF9ld2tfdmlld190aWxlZF9jb250ZW50c19zaXplX2NoYW5nZWRfY2IsIHNtYXJ0RGF0
YSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3Njcm9sbHNf
cHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAgY29uc3QgV1RG
OjpWZWN0b3I8V2ViQ29yZTo6SW50U2l6ZT4mIHNjcm9sbE9mZnNldCA9IGV3a192aWV3X3Njcm9s
bF9vZmZzZXRzX2dldChzbWFydERhdGEtPl9wcml2KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNjcm9sbE9mZnNldC5zaXplKCk7ICsraSkKLSAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHNj
cm9sbE9mZnNldFtpXS53aWR0aCgpLCBzY3JvbGxPZmZzZXRbaV0uaGVpZ2h0KCkpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0
X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAg
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBwYWludFJlY3QsICogZW5kT2ZwYWludFJlY3Q7Ci0gICAg
c2l6ZV90IGNvdW50OwotICAgIGludCBzY3JvbGxYLCBzY3JvbGxZOwotCi0gICAgZXdrX2ZyYW1l
X3Njcm9sbF9wb3NfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJnNjcm9sbFgsICZzY3JvbGxZ
KTsKLQotICAgIHBhaW50UmVjdCA9IGV3a192aWV3X3JlcGFpbnRzX3BvcChzbWFydERhdGEtPl9w
cml2LCAmY291bnQpOwotICAgIGVuZE9mcGFpbnRSZWN0ID0gcGFpbnRSZWN0ICsgY291bnQ7Ci0g
ICAgZm9yICg7IHBhaW50UmVjdCA8IGVuZE9mcGFpbnRSZWN0OyBwYWludFJlY3QrKykgewotICAg
ICAgICBFaW5hX1JlY3RhbmdsZSByZWN0OwotICAgICAgICByZWN0LnggPSBwYWludFJlY3QtPngg
KyBzY3JvbGxYOwotICAgICAgICByZWN0LnkgPSBwYWludFJlY3QtPnkgKyBzY3JvbGxZOwotICAg
ICAgICByZWN0LncgPSBwYWludFJlY3QtPnc7Ci0gICAgICAgIHJlY3QuaCA9IHBhaW50UmVjdC0+
aDsKLSAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgJnJlY3QpOwotICAgIH0KLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91
cGRhdGVzX3Byb2Nlc3Moc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9jb250ZW50
c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCi17Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKHNt
YXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fc2V0KEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjZW50
ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCi17Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwg
aGVpZ2h0OwotICAgIEVpbmFfQm9vbCByZXN1bHQ7Ci0gICAgcmVzdWx0ID0gZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfem9vbV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmem9vbSwgY2VudGVyWCwgY2VudGVyWSwg
JngsICZ5KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgdHJ1ZSk7Ci0gICAgcmVzdWx0ID0gX3BhcmVudF9zYy56b29tX3NldChzbWFy
dERhdGEsIHpvb20sIGNlbnRlclgsIGNlbnRlclkpOwotICAgIGV3a19mcmFtZV9zY3JvbGxfc2V0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgLXgsIC15KTsKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3Np
emVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IHdpZHRoLCBoZWlnaHQpOwotICAgIGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhzbWFydERhdGEp
OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGN1bGF0ZShzbWFydERhdGEtPmJhY2tpbmdfc3Rv
cmUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGN1bGF0ZShzbWFydERhdGEtPnNlbGYpOwot
ICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlLCBmYWxzZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZh
c19Db29yZCBjZW50ZXJZKQotewotICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96
b29tX3dlYWtfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgem9vbSwgY2VudGVyWCwgY2Vu
dGVyWSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtf
c21vb3RoX3NjYWxlX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEVpbmFfQm9v
bCBzbW9vdGhTY2FsZSkKLXsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtf
c21vb3RoX3NjYWxlX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHNtb290aFNjYWxlKTsK
LX0KLQotc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2JnX2NvbG9yX3NldChFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIHVuc2lnbmVkIGNoYXIgLypyZWQqLywgdW5zaWdu
ZWQgY2hhciAvKmdyZWVuKi8sIHVuc2lnbmVkIGNoYXIgLypibHVlKi8sIHVuc2lnbmVkIGNoYXIg
YWxwaGEpCi17Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWxwaGFfc2V0KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSwgYWxwaGEgPCAyNTUpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewot
ICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9y
ZSk7Ci0gICAgX3BhcmVudF9zYy5mbHVzaChzbWFydERhdGEpOwotfQotCi1zdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3Jk
IHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSkKLXsKLSAgICByZXR1cm4gZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24KLSAgICAgICAgICAgICAgIChz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20pOwotfQot
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlbGF0
aXZlX3JhZGl1cyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIHVuc2lnbmVkIGludCBu
LCBmbG9hdCB6b29tKQotewotICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cwotICAgICAgICAgICAgICAgKHNtYXJ0RGF0YS0+YmFja2lu
Z19zdG9yZSwgbiwgem9vbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9ld2tfdmlld190aWxl
ZF9yZWN0X2NvbGxpc2lvbl9jaGVjayhFaW5hX1JlY3RhbmdsZSBkZXN0aW5hdGlvbiwgRWluYV9S
ZWN0YW5nbGUgc291cmNlKQotewotICAgIGludCBkaXJlY3Rpb24gPSAwOwotICAgIGlmIChkZXN0
aW5hdGlvbi54IDwgc291cmNlLngpCi0gICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8ICgx
IDw8IDApOyAvLyAwIGJpdCBzaGlmdCwgbGVmdAotICAgIGlmIChkZXN0aW5hdGlvbi55IDwgc291
cmNlLnkpCi0gICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8ICgxIDw8IDEpOyAvLyAxIGJp
dCBzaGlmdCwgdG9wCi0gICAgaWYgKGRlc3RpbmF0aW9uLnggKyBkZXN0aW5hdGlvbi53ID4gc291
cmNlLnggKyBzb3VyY2UudykKLSAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uIHwgKDEgPDwg
Mik7IC8vIDIgYml0IHNoaWZ0LCByaWdodAotICAgIGlmIChkZXN0aW5hdGlvbi55ICsgZGVzdGlu
YXRpb24uaCA+IHNvdXJjZS55ICsgc291cmNlLmgpCi0gICAgICAgIGRpcmVjdGlvbiA9IGRpcmVj
dGlvbiB8ICgxIDw8IDMpOyAvLyAzIGJpdCBzaGlmdCwgYm90dG9tCi0gICAgREJHKCJjaGVjayBj
b2xsaXNpb24gJWRcclxuIiwgZGlyZWN0aW9uKTsKLSAgICByZXR1cm4gZGlyZWN0aW9uOwotfQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3X3RpbGVkX3JlY3RfY29sbGlzaW9uX3Jlc29s
dmUoaW50IGRpcmVjdGlvbiwgRWluYV9SZWN0YW5nbGUqIGRlc3RpbmF0aW9uLCBFaW5hX1JlY3Rh
bmdsZSBzb3VyY2UpCi17Ci0gICAgaWYgKGRpcmVjdGlvbiAmICgxIDw8IDApKSAvLyAwIGJpdCBz
aGlmdCwgbGVmdAotICAgICAgICBkZXN0aW5hdGlvbi0+eCA9IHNvdXJjZS54OwotICAgIGlmIChk
aXJlY3Rpb24gJiAoMSA8PCAxKSkgLy8gMSBiaXQgc2hpZnQsIHRvcAotICAgICAgICBkZXN0aW5h
dGlvbi0+eSA9IHNvdXJjZS55OwotICAgIGlmIChkaXJlY3Rpb24gJiAoMSA8PCAyKSkgLy8gMiBi
aXQgc2hpZnQsIHJpZ2h0Ci0gICAgICAgIGRlc3RpbmF0aW9uLT54ID0gZGVzdGluYXRpb24tPngg
LSAoKGRlc3RpbmF0aW9uLT54ICsgZGVzdGluYXRpb24tPncpIC0gKHNvdXJjZS54ICsgc291cmNl
LncpKTsKLSAgICBpZiAoZGlyZWN0aW9uICYgKDEgPDwgMykpIC8vIDMgYml0IHNoaWZ0LCBib3R0
b20KLSAgICAgICAgZGVzdGluYXRpb24tPnkgPSBkZXN0aW5hdGlvbi0+eSAtICgoZGVzdGluYXRp
b24tPnkgKyBkZXN0aW5hdGlvbi0+aCkgLSAoc291cmNlLnkgKyBzb3VyY2UuaCkpOwotfQotCi1z
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3N0YXJ0KEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICBpbnQgY29udGVudFdpZHRoLCBj
b250ZW50SGVpZ2h0OwotICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEt
Pm1haW5fZnJhbWUsICZjb250ZW50V2lkdGgsICZjb250ZW50SGVpZ2h0KTsKLQotICAgIGludCB2
aWV3WCwgdmlld1ksIHZpZXdXaWR0aCwgdmlld0hlaWdodDsKLSAgICBld2tfZnJhbWVfdmlzaWJs
ZV9jb250ZW50X2dlb21ldHJ5X2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsIGZhbHNlLCAmdmll
d1gsICZ2aWV3WSwgJnZpZXdXaWR0aCwgJnZpZXdIZWlnaHQpOwotCi0gICAgaWYgKHZpZXdXaWR0
aCA8PSAwIHx8IHZpZXdIZWlnaHQgPD0gMCB8fCBjb250ZW50V2lkdGggPD0gMCB8fCBjb250ZW50
SGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2aWV3V2lkdGgg
Pj0gY29udGVudFdpZHRoICYmIHZpZXdIZWlnaHQgPj0gY29udGVudEhlaWdodCkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaW50IHByZXZpb3VzVmlld1gsIHByZXZpb3VzVmlld1k7Ci0g
ICAgcHJldmlvdXNWaWV3WCA9IHNtYXJ0RGF0YS0+cHJldmlvdXNWaWV3Lng7Ci0gICAgcHJldmlv
dXNWaWV3WSA9IHNtYXJ0RGF0YS0+cHJldmlvdXNWaWV3Lnk7Ci0KLSAgICBpZiAocHJldmlvdXNW
aWV3WCA8IDAgfHwgcHJldmlvdXNWaWV3WCA+IGNvbnRlbnRXaWR0aCB8fCBwcmV2aW91c1ZpZXdZ
IDwgMCB8fCBwcmV2aW91c1ZpZXdZID4gY29udGVudEhlaWdodCkKLSAgICAgICAgcHJldmlvdXNW
aWV3WCA9IHByZXZpb3VzVmlld1kgPSAwOwotCi0gICAgZmxvYXQgY3VycmVudFZpZXdab29tID0g
ZXdrX3ZpZXdfem9vbV9nZXQoc21hcnREYXRhLT5zZWxmKTsKLQotICAgIC8vIHByZS1yZW5kZXIg
d29ya3Mgd2hlbiB0d28gY29uZGl0aW9ucyBhcmUgbWV0LgotICAgIC8vIHpvb20gaGFzIGJlZW4g
Y2hhbmdlZC4KLSAgICAvLyBhbmQgdGhlIHZpZXcgaGFzIGJlZW4gbW92ZWQgbW9yZSB0aGFuIHRp
bGUgc2l6ZS4KLSAgICBpZiAoYWJzKHByZXZpb3VzVmlld1ggLSB2aWV3WCkgPCBkZWZhdWx0VGls
ZVdpZHRoCi0gICAgICAgICYmIGFicyhwcmV2aW91c1ZpZXdZIC0gdmlld1kpIDwgZGVmYXVsdFRp
bGVIZWlndGgKLSAgICAgICAgJiYgc21hcnREYXRhLT5wcmV2aW91c1ZpZXcuem9vbSA9PSBjdXJy
ZW50Vmlld1pvb20pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIHN0
b3JlIHByZXZpb3VzIHZpZXcgcG9zaXRpb24gYW5kIHpvb20uCi0gICAgc21hcnREYXRhLT5wcmV2
aW91c1ZpZXcueCA9IHZpZXdYOwotICAgIHNtYXJ0RGF0YS0+cHJldmlvdXNWaWV3LnkgPSB2aWV3
WTsKLSAgICBzbWFydERhdGEtPnByZXZpb3VzVmlldy56b29tID0gY3VycmVudFZpZXdab29tOwot
Ci0gICAgLy8gY2FuY2VsbGluZyBwcmV2aW91cyBwcmUtcmVuZGVyaW5nIGxpc3QgaWYgZXhpc3Rz
LgotICAgIGV3a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKHNtYXJ0RGF0YS0+c2VsZik7Ci0KLSAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSA9IGV3a192aWV3X3RpbGVk
X3VudXNlZF9jYWNoZV9nZXQoc21hcnREYXRhLT5zZWxmKTsKLSAgICBpbnQgbWF4TWVtb3J5ID0g
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQodGlsZVVudXNlZENhY2hlKTsKLSAgICBpZiAo
bWF4TWVtb3J5IDw9IHZpZXdXaWR0aCAqIHZpZXdIZWlnaHQgKiBFV0tfQVJHQl9CWVRFU19TSVpF
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFaW5hX1JlY3RhbmdsZSB2aWV3UmVjdCA9
IHt2aWV3WCwgdmlld1ksIHZpZXdXaWR0aCwgdmlld0hlaWdodH07Ci0gICAgRWluYV9SZWN0YW5n
bGUgY29udGVudFJlY3QgPSB7MCwgMCwgY29udGVudFdpZHRoLCBjb250ZW50SGVpZ2h0fTsKLQot
ICAgIC8vIGdldCBhIGJhc2UgcmVuZGVyIHJlY3QuCi0gICAgY29uc3QgaW50IGNvbnRlbnRNZW1v
cnkgPSBjb250ZW50V2lkdGggKiBjb250ZW50SGVpZ2h0ICogRVdLX0FSR0JfQllURVNfU0laRTsK
LQotICAgIC8vIGdldCByZW5kZXIgcmVjdCdzIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgRWluYV9S
ZWN0YW5nbGUgcmVuZGVyUmVjdDsKLSAgICBpZiAobWF4TWVtb3J5ID4gY29udGVudE1lbW9yeSkK
LSAgICAgICAgcmVuZGVyUmVjdCA9IGNvbnRlbnRSZWN0OwotICAgIGVsc2UgewotICAgICAgICAv
LyBNYWtlIGEgYmFzZSByZWN0YW5nbGUgYXMgYmlnIGFzIHBvc3NpYmxlIHdpdGggdXNpbmcgbWF4
TWVtb3J5LgotICAgICAgICAvLyBhbmQgdGhlbiByZXNoYXBlIHRoZSBiYXNlIHJlY3RhbmdsZSB0
byBmaXQgdG8gY29udGVudHMuCi0gICAgICAgIGNvbnN0IGludCBiYXNlU2l6ZSA9IHN0YXRpY19j
YXN0PGludD4oc3FydChtYXhNZW1vcnkgLyA0LjBmKSk7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHdp
ZHRoUmF0ZSA9ICh2aWV3UmVjdC53ICsgKGRlZmF1bHRUaWxlV2lkdGggKiAyKSkgLyBzdGF0aWNf
Y2FzdDxmbG9hdD4oYmFzZVNpemUpOwotICAgICAgICBjb25zdCBmbG9hdCBoZWlnaHRSYXRlID0g
YmFzZVNpemUgLyBzdGF0aWNfY2FzdDxmbG9hdD4oY29udGVudEhlaWdodCk7Ci0gICAgICAgIGNv
bnN0IGZsb2F0IHJlY3RSYXRlID0gc3RkOjptYXgod2lkdGhSYXRlLCBoZWlnaHRSYXRlKTsKLQot
ICAgICAgICByZW5kZXJSZWN0LncgPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VTaXplICogcmVjdFJh
dGUpOwotICAgICAgICByZW5kZXJSZWN0LmggPSBzdGF0aWNfY2FzdDxpbnQ+KGJhc2VTaXplIC8g
cmVjdFJhdGUpOwotICAgICAgICByZW5kZXJSZWN0LnggPSB2aWV3UmVjdC54ICsgKHZpZXdSZWN0
LncgLyAyKSAtIChyZW5kZXJSZWN0LncgLyAyKTsKLSAgICAgICAgcmVuZGVyUmVjdC55ID0gdmll
d1JlY3QueSArICh2aWV3UmVjdC5oIC8gMikgLSAocmVuZGVyUmVjdC5oIC8gMik7Ci0KLSAgICAg
ICAgLy8gcmVwb3NpdGlvbiBvZiByZW5kZXJSZWN0LCBpZiB0aGUgcmVuZGVyUmVjdCBvdmVybGFw
cGVkIHRoZSBjb250ZW50IHJlY3QsIHRoaXMgY29kZSBtb3ZlcyB0aGUgcmVuZGVyUmVjdCBpbnNp
ZGUgdGhlIGNvbnRlbnQgcmVjdC4KLSAgICAgICAgaW50IGNvbGxpc2lvblNpZGUgPSBfZXdrX3Zp
ZXdfdGlsZWRfcmVjdF9jb2xsaXNpb25fY2hlY2socmVuZGVyUmVjdCwgY29udGVudFJlY3QpOwot
ICAgICAgICBpZiAoY29sbGlzaW9uU2lkZSA+IDApCi0gICAgICAgICAgICBfZXdrX3ZpZXdfdGls
ZWRfcmVjdF9jb2xsaXNpb25fcmVzb2x2ZShjb2xsaXNpb25TaWRlLCAmcmVuZGVyUmVjdCwgY29u
dGVudFJlY3QpOwotCi0gICAgICAgIC8vIGNoZWNrIGFibm9ybWFsIHJlbmRlciByZWN0Ci0gICAg
ICAgIGlmIChyZW5kZXJSZWN0LnggPCAwKQotICAgICAgICAgICAgcmVuZGVyUmVjdC54ID0gMDsK
LSAgICAgICAgaWYgKHJlbmRlclJlY3QueSA8IDApCi0gICAgICAgICAgICByZW5kZXJSZWN0Lnkg
PSAwOwotICAgICAgICBpZiAocmVuZGVyUmVjdC53ID4gY29udGVudFdpZHRoKQotICAgICAgICAg
ICAgcmVuZGVyUmVjdC53ID0gY29udGVudFdpZHRoOwotICAgICAgICBpZiAocmVuZGVyUmVjdC5o
ID4gY29udGVudEhlaWdodCkKLSAgICAgICAgICAgIHJlbmRlclJlY3QuaCA9IGNvbnRlbnRIZWln
aHQ7Ci0gICAgfQotCi0gICAgLy8gZW5xdWV1ZSB0aWxlcyBpbnRvIHRpbGVkIGJhY2tpbmcgc3Rv
cmUgaW4gc3BpcmFsIG9yZGVyLgotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfc3BpcmFsX3F1ZXVlKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJnZpZXdSZWN0LCAmcmVu
ZGVyUmVjdCwgbWF4TWVtb3J5LCBjdXJyZW50Vmlld1pvb20pOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNl
bChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCi17Ci0gICAgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKLX0K
LQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9yZW5kZXIo
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQotewotICAgIHJldHVybiBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwot
fQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVy
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKLXsKLSAgICByZXR1cm4gZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwot
fQotCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0Ns
YXNzKiBhcGkpCi17Ci0gICAgaWYgKCFld2tfdmlld19iYXNlX3NtYXJ0X3NldChhcGkpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3BhcmVudF9zYy5z
Yy5hZGQpKSB7Ci0gICAgICAgIF9wYXJlbnRfc2Muc2MubmFtZSA9IGV3a1ZpZXdUaWxlZE5hbWU7
Ci0gICAgICAgIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KCZfcGFyZW50X3NjKTsKLSAgICAgICAg
YXBpLT5zYy5wYXJlbnQgPSByZWludGVycHJldF9jYXN0PEV2YXNfU21hcnRfQ2xhc3MqPigmX3Bh
cmVudF9zYyk7Ci0gICAgfQotCi0gICAgYXBpLT5zYy5hZGQgPSBfZXdrX3ZpZXdfdGlsZWRfc21h
cnRfYWRkOwotCi0gICAgYXBpLT5iYWNraW5nX3N0b3JlX2FkZCA9IF9ld2tfdmlld190aWxlZF9z
bWFydF9iYWNraW5nX3N0b3JlX2FkZDsKLSAgICBhcGktPnNjcm9sbHNfcHJvY2VzcyA9IF9ld2tf
dmlld190aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3M7Ci0gICAgYXBpLT5yZXBhaW50c19wcm9j
ZXNzID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3M7Ci0gICAgYXBpLT5j
b250ZW50c19yZXNpemUgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNfcmVzaXplOwot
ICAgIGFwaS0+em9vbV9zZXQgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9zZXQ7Ci0gICAg
YXBpLT56b29tX3dlYWtfc2V0ID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zZXQ7
Ci0gICAgYXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCA9IF9ld2tfdmlld190aWxlZF9z
bWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldDsKLSAgICBhcGktPmJnX2NvbG9yX3NldCA9
IF9ld2tfdmlld190aWxlZF9zbWFydF9iZ19jb2xvcl9zZXQ7Ci0gICAgYXBpLT5mbHVzaCA9IF9l
d2tfdmlld190aWxlZF9zbWFydF9mbHVzaDsKLSAgICBhcGktPnByZV9yZW5kZXJfcmVnaW9uID0g
X2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9uOwotICAgIGFwaS0+cHJlX3Jl
bmRlcl9yZWxhdGl2ZV9yYWRpdXMgPSBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9y
ZWxhdGl2ZV9yYWRpdXM7Ci0gICAgYXBpLT5wcmVfcmVuZGVyX3N0YXJ0ID0gX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X3ByZV9yZW5kZXJfc3RhcnQ7Ci0gICAgYXBpLT5wcmVfcmVuZGVyX2NhbmNlbCA9
IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNlbDsKLSAgICBhcGktPmRpc2Fi
bGVfcmVuZGVyID0gX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2FibGVfcmVuZGVyOwotICAgIGFw
aS0+ZW5hYmxlX3JlbmRlciA9IF9ld2tfdmlld190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVyOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIF9ld2tfdmll
d190aWxlZF9zbWFydF9jbGFzc19uZXcodm9pZCkKLXsKLSAgICBzdGF0aWMgRXdrX1ZpZXdfU21h
cnRfQ2xhc3MgYXBpID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oZXdr
Vmlld1RpbGVkTmFtZSk7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKLQotICAg
IGlmIChFSU5BX1VOTElLRUxZKCFzbWFydCkpIHsKLSAgICAgICAgZXdrX3ZpZXdfdGlsZWRfc21h
cnRfc2V0KCZhcGkpOwotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZhcGku
c2MpOwotICAgIH0KLQotICAgIHJldHVybiBzbWFydDsKLX0KLQotRXZhc19PYmplY3QqIGV3a192
aWV3X3RpbGVkX2FkZChFdmFzKiBjYW52YXMpCi17Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3Nt
YXJ0X2FkZChjYW52YXMsIF9ld2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXcoKSk7Ci19Ci0K
LUV3a19UaWxlX1VudXNlZF9DYWNoZSogZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKLXsKLSAgICBFV0tfVklFV19UWVBFX0NIRUNLX09S
X1JFVFVSTihld2tWaWV3LCBld2tWaWV3VGlsZWROYW1lLCAwKTsKLSAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChld2tWaWV3KTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLCAwKTsKLSAgICByZXR1
cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSk7Ci19Ci0KLXZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hl
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBjYWNoZSkK
LXsKLSAgICBFV0tfVklFV19UWVBFX0NIRUNLX09SX1JFVFVSTihld2tWaWV3LCBld2tWaWV3VGls
ZWROYW1lKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBld2tfdmlld19z
bWFydF9kYXRhX2dldChld2tWaWV3KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEpOwotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hl
X3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGNhY2hlKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLVGVzdFZpZXcuY3BwIGIvU291
cmNlL1dlYktpdC9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmlldy5jcHAKaW5kZXgg
YTE3YmZhNDMyOThkMDdkZjBmOGYzYThlYzNhM2M5YTgwYWNiYWYxMC4uZWYxNGY2YTE1NDFkMDc0
MmQ2MjM1ZWM4ZjI2ZWQ1YTMzYmQyZGFiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwv
dGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9l
ZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0tUZXN0Vmlldy5jcHAKQEAgLTQyLDE5ICs0MiwxMyBA
QCBib29sIEVXS1Rlc3RWaWV3Ojppbml0KEV3a1ZpZXdUeXBlIHRlc3RWaWV3VHlwZSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQogICAgIGlmICghZXZhcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgc3dpdGNoICh0ZXN0Vmlld1R5cGUpIHsKLSAgICBjYXNlIFNpbmdsZVZpZXc6Ci0gICAg
ICAgIG1fd2ViVmlldyA9IGFkb3B0UmVmKGV3a192aWV3X3NpbmdsZV9hZGQoZXZhcykpOwotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgVGlsZWRWaWV3OgotICAgICAgICBtX3dlYlZpZXcgPSBh
ZG9wdFJlZihld2tfdmlld190aWxlZF9hZGQoZXZhcykpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KKyAgICBtX3dlYlZpZXcgPSBhZG9wdFJlZihld2tfdmlld19zaW5nbGVfYWRkKGV2YXMpKTsK
ICAgICBpZiAoIW1fd2ViVmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKHRl
c3RWaWV3VHlwZSA9PSBUaWxlZFZpZXcpCisgICAgICAgIGV3a192aWV3X3NldHRpbmdfdGlsZWRf
YmFja2luZ19zdG9yZV9lbmFibGVkX3NldChtX3dlYlZpZXcuZ2V0KCksIEVJTkFfVFJVRSk7CisK
ICAgICBld2tfdmlld190aGVtZV9zZXQobV93ZWJWaWV3LmdldCgpLCBDb25maWc6OmRlZmF1bHRU
aGVtZVBhdGgpOwogCiAgICAgZXZhc19vYmplY3RfcmVzaXplKG1fd2ViVmlldy5nZXQoKSwgd2lk
dGgsIGhlaWdodCk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggNDc5ODA1OGI3MjBjMDdlNzBhZWVkOGQzMzY3MWFhZjQwMWE1ZGNkMi4uNzk2MDkx
OTcwNzg2NDI1YzdhYmMxMDFkNDQyNjc1ZTEzMWYxNDAxOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEzLTEyLTE4
ICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBS
ZW1vdmUgZXdrX3ZpZXdfdGlsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNTk2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNw
cDoKKyAgICAgICAgKHNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKToKKyAgICAgICAgTW92ZWQg
ZnJvbSBEdW1wUmVuZGVyVHJlZUNocm9tZSB0byBlbmFibGUgV2ViQ29yZSdzIFRpbGVkQmFja2lu
Z1N0b3JlCisgICAgICAgIGluc3RlYWQgb2Ygc3dpdGNoaW5nIGV3a192aWV3X3RpbGVkLgorICAg
ICAgICAoRHVtcFJlbmRlclRyZWVDaHJvbWU6OmNyZWF0ZVZpZXcpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVyVHJlZVZpZXcuY3BwOgorICAgICAgICAoZHJ0Vmlld0Fk
ZCk6CisgICAgICAgICogRVdlYkxhdW5jaGVyL21haW4uYzogUmVtb3ZlZCBld2tfdmlld190aWxl
ZCBvcHRpb24uCisgICAgICAgICh3aW5kb3dDcmVhdGUpOgorICAgICAgICAocGFyc2VVc2VyQXJn
dW1lbnRzKToKKwogMjAxMy0xMi0xOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtXaW5DYWlyb10gUHJlcGFyYXRpb24gZm9yIEdTdHJlYW1l
ciBvbiBXaW5kb3dzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBS
ZW5kZXJUcmVlQ2hyb21lLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9EdW1wUmVuZGVy
VHJlZUNocm9tZS5jcHAKaW5kZXggNWY4YjRkYzllZTFmMGI5MWY5YzEzNDdkMDVlMDlkZGE2ZDBj
OTk0ZS4uNWJmMzE2YTBmMTk5YzNhNzg1MDdiYTEyNGEyNTg4OTU0YWI1MTdmMiAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5kZXJUcmVlQ2hyb21lLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVDaHJvbWUuY3BwCkBAIC05
NSwxMiArOTUsMjEgQEAgRXZhc19PYmplY3QqIER1bXBSZW5kZXJUcmVlQ2hyb21lOjpjcmVhdGVO
ZXdXaW5kb3coKQogICAgIHJldHVybiBuZXdWaWV3OwogfQogCitzdGF0aWMgYm9vbCBzaG91bGRV
c2VUaWxlZEJhY2tpbmdTdG9yZSgpCit7CisgICAgY29uc3QgY2hhciogdXNlVGlsZWRCYWNraW5n
U3RvcmUgPSBnZXRlbnYoIkRSVF9VU0VfVElMRURfQkFDS0lOR19TVE9SRSIpOworICAgIHJldHVy
biB1c2VUaWxlZEJhY2tpbmdTdG9yZSAmJiAqdXNlVGlsZWRCYWNraW5nU3RvcmUgPT0gJzEnOwor
fQorCiBFdmFzX09iamVjdCogRHVtcFJlbmRlclRyZWVDaHJvbWU6OmNyZWF0ZVZpZXcoKSBjb25z
dAogewogICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gZHJ0Vmlld0FkZChtX2V2YXMpOwogICAgIGlm
ICghdmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAoc2hvdWxkVXNlVGlsZWRCYWNr
aW5nU3RvcmUoKSkKKyAgICAgICAgZXdrX3ZpZXdfc2V0dGluZ190aWxlZF9iYWNraW5nX3N0b3Jl
X2VuYWJsZWRfc2V0KHZpZXcsIEVJTkFfVFJVRSk7CisKICAgICBld2tfdmlld190aGVtZV9zZXQo
dmlldywgVEVTVF9USEVNRV9ESVIgIi9kZWZhdWx0LmVkaiIpOwogCiAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKHZpZXcsICJkb3dubG9hZCxyZXF1ZXN0Iiwgb25Eb3dubG9hZFJl
cXVlc3QsIDApOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0R1bXBSZW5k
ZXJUcmVlVmlldy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVW
aWV3LmNwcAppbmRleCA2ZjNjYzQ5YTVkNTM2YTZjZjQ4ZWI0NjA0MGRkYmU5MGMwM2Y2ZmZlLi40
M2M5ODM2NjI1NjRiOGVmNTdkMjU1MWZmNDMxMWI5NDg2Y2M4YmQ2IDEwMDY0NAotLS0gYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVWaWV3LmNwcAorKysgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9lZmwvRHVtcFJlbmRlclRyZWVWaWV3LmNwcApAQCAtMTcyLDE3ICsxNzIs
NiBAQCBzdGF0aWMgaW50NjRfdCBvbkV4Y2VlZGVkQXBwbGljYXRpb25DYWNoZVF1b3RhKEV3a19W
aWV3X1NtYXJ0X0RhdGEqLCBFd2tfU2VjdXJpdAogICAgIHJldHVybiBkZWZhdWx0T3JpZ2luUXVv
dGE7CiB9CiAKLXN0YXRpYyBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCkKLXsKLSAg
ICBjb25zdCBjaGFyKiB1c2VUaWxlZEJhY2tpbmdTdG9yZSA9IGdldGVudigiRFJUX1VTRV9USUxF
RF9CQUNLSU5HX1NUT1JFIik7Ci0gICAgcmV0dXJuIHVzZVRpbGVkQmFja2luZ1N0b3JlICYmICp1
c2VUaWxlZEJhY2tpbmdTdG9yZSA9PSAnMSc7Ci19Ci0KLXN0YXRpYyBib29sIGNob29zZUFuZElu
aXRpYWxpemVBcHByb3ByaWF0ZVNtYXJ0Q2xhc3MoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkK
LXsKLSAgICByZXR1cm4gIXNob3VsZFVzZVRpbGVkQmFja2luZ1N0b3JlKCkgPyBld2tfdmlld19z
aW5nbGVfc21hcnRfc2V0KGFwaSkgOiBld2tfdmlld190aWxlZF9zbWFydF9zZXQoYXBpKTsKLX0K
LQogLy8gVGFrZW4gZnJvbSB0aGUgZmlsZSAiV2ViS2l0L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1dlYlZpZXdIb3N0LmNwcCIuCiBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIG5hdmln
YXRpb25UeXBlVG9TdHJpbmcoY29uc3QgRXdrX05hdmlnYXRpb25fVHlwZSB0eXBlKQogewpAQCAt
MjI3LDcgKzIxNiw3IEBAIEV2YXNfT2JqZWN0KiBkcnRWaWV3QWRkKEV2YXMqIGV2YXMpCiB7CiAg
ICAgc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIGFwaSA9IEVXS19WSUVXX1NNQVJUX0NMQVNT
X0lOSVRfTkFNRV9WRVJTSU9OKCJEUlRfVmlldyIpOwogCi0gICAgaWYgKCFjaG9vc2VBbmRJbml0
aWFsaXplQXBwcm9wcmlhdGVTbWFydENsYXNzKCZhcGkpKQorICAgIGlmICghZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X3NldCgmYXBpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoRUlOQV9V
TkxJS0VMWSghZ1BhcmVudFNtYXJ0Q2xhc3Muc2MuYWRkKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0VX
ZWJMYXVuY2hlci9tYWluLmMgYi9Ub29scy9FV2ViTGF1bmNoZXIvbWFpbi5jCmluZGV4IDc5ZWI4
MWI3MDU4ZThmNjk3MzdjYTI5OWE0MDNhNmJlNzYzMjA5M2IuLjMwMTkwZTljNWM5OTZmMmRjNTc2
MWZlNjlmNDBlZTg4OWUyMTllZDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0VXZWJMYXVuY2hlci9tYWlu
LmMKKysrIGIvVG9vbHMvRVdlYkxhdW5jaGVyL21haW4uYwpAQCAtMTEzLDggKzExMyw2IEBAIHN0
YXRpYyBjb25zdCBFY29yZV9HZXRvcHQgb3B0aW9ucyA9IHsKICAgICAgICAgRUNPUkVfR0VUT1BU
X0NBTExCQUNLX05PQVJHUwogICAgICAgICAgICAgKCdFJywgImxpc3QtZW5naW5lcyIsICJsaXN0
IGVjb3JlLWV2YXMgZW5naW5lcy4iLAogICAgICAgICAgICAgIGVjb3JlX2dldG9wdF9jYWxsYmFj
a19lY29yZV9ldmFzX2xpc3RfZW5naW5lcywgTlVMTCksCi0gICAgICAgIEVDT1JFX0dFVE9QVF9D
SE9JQ0UKLSAgICAgICAgICAgICgnYicsICJiYWNraW5nLXN0b3JlIiwgImNob29zZSBiYWNraW5n
IHN0b3JlIHRvIHVzZS4iLCBiYWNraW5nU3RvcmVzKSwKICAgICAgICAgRUNPUkVfR0VUT1BUX1NU
T1JFX0RPVUJMRQogICAgICAgICAgICAgKCdyJywgImRldmljZS1waXhlbC1yYXRpbyIsICJSYXRp
byBiZXR3ZWVuIHRoZSBDU1MgdW5pdHMgYW5kIGRldmljZSBwaXhlbHMuIiksCiAgICAgICAgIEVD
T1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTApAQCAtMTQ5LDcgKzE0Nyw2IEBAIHN0YXRpYyBjb25z
dCBFY29yZV9HZXRvcHQgb3B0aW9ucyA9IHsKIHR5cGVkZWYgc3RydWN0IF9Vc2VyX0FyZ3VtZW50
cyB7CiAgICAgY2hhciAqZW5naW5lOwogICAgIEVpbmFfQm9vbCBxdWl0T3B0aW9uOwotICAgIGNo
YXIgKmJhY2tpbmdTdG9yZTsKICAgICBkb3VibGUgZGV2aWNlX3BpeGVsX3JhdGlvOwogICAgIEVp
bmFfQm9vbCBlbmFibGVFbmNvZGluZ0RldGVjdG9yOwogICAgIEVpbmFfQm9vbCBlbmFibGVUaWxl
ZEJhY2tpbmdTdG9yZTsKQEAgLTg0OSwxNSArODQ2LDggQEAgd2luZG93Q3JlYXRlKFVzZXJfQXJn
dW1lbnRzICp1c2VyQXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYg
KHVzZXJBcmdzLT5iYWNraW5nU3RvcmUgJiYgIXN0cmNhc2VjbXAodXNlckFyZ3MtPmJhY2tpbmdT
dG9yZSwgInRpbGVkIikpIHsKLSAgICAgICAgYXBwLT5icm93c2VyID0gZXdrX3ZpZXdfdGlsZWRf
YWRkKGFwcC0+ZXZhcyk7Ci0gICAgICAgIGluZm8oImJhY2tpbmcgc3RvcmU6IHRpbGVkIik7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYXBwLT5icm93c2VyID0gZXdrX3ZpZXdfc2luZ2xlX2FkZChh
cHAtPmV2YXMpOwotICAgICAgICBpbmZvKCJiYWNraW5nIHN0b3JlOiBzaW5nbGUiKTsKLQotICAg
ICAgICBld2tfdmlld19zZXR0aW5nX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlZF9zZXQoYXBw
LT5icm93c2VyLCB1c2VyQXJncy0+ZW5hYmxlVGlsZWRCYWNraW5nU3RvcmUpOwotICAgIH0KKyAg
ICBhcHAtPmJyb3dzZXIgPSBld2tfdmlld19zaW5nbGVfYWRkKGFwcC0+ZXZhcyk7CisgICAgZXdr
X3ZpZXdfc2V0dGluZ190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZWRfc2V0KGFwcC0+YnJvd3Nl
ciwgdXNlckFyZ3MtPmVuYWJsZVRpbGVkQmFja2luZ1N0b3JlKTsKIAogICAgIGV3a192aWV3X3Ro
ZW1lX3NldChhcHAtPmJyb3dzZXIsIHRoZW1lUGF0aCk7CiAgICAgaWYgKHVzZXJBcmdzLT51c2Vy
QWdlbnQpCkBAIC05NDEsNyArOTMxLDYgQEAgcGFyc2VVc2VyQXJndW1lbnRzKGludCBhcmdjLCBj
aGFyICphcmd2W10sIFVzZXJfQXJndW1lbnRzICp1c2VyQXJncykKIAogICAgIHVzZXJBcmdzLT5l
bmdpbmUgPSBOVUxMOwogICAgIHVzZXJBcmdzLT5xdWl0T3B0aW9uID0gRUlOQV9GQUxTRTsKLSAg
ICB1c2VyQXJncy0+YmFja2luZ1N0b3JlID0gKGNoYXIgKiliYWNraW5nU3RvcmVzWzFdOwogICAg
IHVzZXJBcmdzLT5kZXZpY2VfcGl4ZWxfcmF0aW8gPSAxLjA7CiAgICAgdXNlckFyZ3MtPmVuYWJs
ZUVuY29kaW5nRGV0ZWN0b3IgPSBFSU5BX0ZBTFNFOwogICAgIHVzZXJBcmdzLT5lbmFibGVUaWxl
ZEJhY2tpbmdTdG9yZSA9IEVJTkFfRkFMU0U7CkBAIC05NTcsNyArOTQ2LDYgQEAgcGFyc2VVc2Vy
QXJndW1lbnRzKGludCBhcmdjLCBjaGFyICphcmd2W10sIFVzZXJfQXJndW1lbnRzICp1c2VyQXJn
cykKICAgICBFY29yZV9HZXRvcHRfVmFsdWUgdmFsdWVzW10gPSB7CiAgICAgICAgIEVDT1JFX0dF
VE9QVF9WQUxVRV9TVFIodXNlckFyZ3MtPmVuZ2luZSksCiAgICAgICAgIEVDT1JFX0dFVE9QVF9W
QUxVRV9CT09MKHVzZXJBcmdzLT5xdWl0T3B0aW9uKSwKLSAgICAgICAgRUNPUkVfR0VUT1BUX1ZB
TFVFX1NUUih1c2VyQXJncy0+YmFja2luZ1N0b3JlKSwKICAgICAgICAgRUNPUkVfR0VUT1BUX1ZB
TFVFX0RPVUJMRSh1c2VyQXJncy0+ZGV2aWNlX3BpeGVsX3JhdGlvKSwKICAgICAgICAgRUNPUkVf
R0VUT1BUX1ZBTFVFX0JPT0wodXNlckFyZ3MtPmVuYWJsZUVuY29kaW5nRGV0ZWN0b3IpLAogICAg
ICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfQk9PTCh1c2VyQXJncy0+aXNGbGF0dGVuaW5nKSwK
</data>

          </attachment>
      

    </bug>

</bugzilla>