<?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>173630</bug_id>
          
          <creation_ts>2017-06-20 17:40:16 -0700</creation_ts>
          <short_desc>[Curl] ResourceHandleManager violate the class responsibility of ResourceHandle</short_desc>
          <delta_ts>2017-06-29 14:59:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>173629</dependson>
          <blocked>117300</blocked>
    
    <blocked>173963</blocked>
    
    <blocked>173964</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>galpeter</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1321331</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-20 17:40:16 -0700</bug_when>
    <thetext>ResourceHandleManager directly manipulates the ResourceHandle contents, but it should be moved into ResourceHandle and ResourceHandleInternal by themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324094</commentid>
    <comment_count>1</comment_count>
      <attachid>314164</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-29 14:18:20 -0700</bug_when>
    <thetext>Created attachment 314164
Refactoring

This patch is simply move methods and functions from ResourceHandleManager to ResourceHandle if possible. ResourceHandleManager apparently violent the class policy and it takes care of ResourceHandle too much which prevents to improve its own responsibility, which is managing ResourceHandle well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324111</commentid>
    <comment_count>2</comment_count>
      <attachid>314164</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-29 14:58:59 -0700</bug_when>
    <thetext>Comment on attachment 314164
Refactoring

Clearing flags on attachment: 314164

Committed r218962: &lt;http://trac.webkit.org/changeset/218962&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1324112</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-06-29 14:59:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314164</attachid>
            <date>2017-06-29 14:18:20 -0700</date>
            <delta_ts>2017-06-29 14:58:59 -0700</delta_ts>
            <desc>Refactoring</desc>
            <filename>173630-2.diff</filename>
            <type>text/plain</type>
            <size>71143</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1NWNhNmY3NmJkNS4uZmZjYjk5NjllNTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OSBAQAorMjAxNy0wNi0yOSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFJlc291cmNlSGFuZGxlTWFuYWdlciB2aW9sYXRlIHRo
ZSBjbGFzcyByZXNwb25zaWJpbGl0eSBvZiBSZXNvdXJjZUhhbmRsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNjMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlSGFuZGxlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6cGxhdGZvcm1M
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZVdl
YlRpbWluZ0luZm9ybWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVMb2NhbFJlY2Vp
dmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzSHR0cEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6aXNIdHRwUmVkaXJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6aXNIdHRwQXV0aGVudGljYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6aXNIdHRwTm90TW9kaWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNBcHBlbmRhYmxl
SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUxlYWRpbmdBbmRUcmFpbGluZ1F1b3Rl
cyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm90ZWN0aW9uU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6aGVhZGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6cmVhZENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OmdldEZvcm1FbGVtZW50c0NvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OnNldHVwRm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnNl
dHVwUFVUKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzZXR1cFBPU1QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRpc3BhdGNoU3luY2hyb25vdXNKb2IpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmFwcGx5QXV0aGVudGljYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRsZUN1cmxNc2cpOgorICAgICAgICAqIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzdGFydEpvYik6CisgICAgICAgIChX
ZWJDb3JlOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6aXNIdHRwSW5mbyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppc0h0
dHBSZWRpcmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppc0h0dHBBdXRoZW50aWNh
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppc0h0dHBOb3RNb2RpZmllZCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp3cml0ZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmlzQXBwZW5kYWJsZUhlYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpyZW1vdmVMZWFkaW5nQW5kVHJhaWxpbmdRdW90ZXMpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Z2V0UHJvdGVjdGlvblNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmhlYWRlckNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnJlYWRDYWxsYmFj
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpnZXRGb3JtRWxlbWVudHNDb3VudCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpzZXR1cEZvcm1EYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0dXBQVVQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzZXR1cFBPU1QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRGF0YVVSTCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRpc3BhdGNoU3luY2hyb25vdXNKb2Ip
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjphcHBs
eUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
c291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6ZUhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oOgorCiAyMDE3
LTA2LTI5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dlYklETF0g
QWRkIGEgbmV3IGV4dGVuZGVkIGF0dHJpYnV0ZSB0byBtb2RlbCB0aGUgZm9yY2VkIHJldHVybiB2
YWx1ZSBvcHRpbWl6YXRpb24gdXNlZCBvbiBOb2RlIGFuZCBDcnlwdG8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCA5ZmI5NTA5ODUz
Zi4uNTI1YzQ2ZmYwNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VIYW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKQEAgLTY4LDYgKzY4LDEwIEBAIHR5cGVkZWYgc3RydWN0IE9wYXF1
ZUNGSFRUUENvb2tpZVN0b3JhZ2UqIENGSFRUUENvb2tpZVN0b3JhZ2VSZWY7CiB0eXBlZGVmIGNv
bnN0IHN0cnVjdCBfX0NGVVJMU3RvcmFnZVNlc3Npb24qIENGVVJMU3RvcmFnZVNlc3Npb25SZWY7
CiAjZW5kaWYKIAorI2lmIFVTRShDVVJMKQorI2luY2x1ZGUgIkN1cmxKb2JNYW5hZ2VyLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiBjbGFzcyBTY2hlZHVsZVBhaXI7CiB9CkBAIC0xNTIs
MTIgKzE1NiwxMiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0Q2xpZW50Q2VydGlmaWNh
dGUoY29uc3QgU3RyaW5nJiBob3N0LCBDRkRhdGFSZWYpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShXSU4pICYmIFVTRShDVVJMKQorI2lmIE9TKFdJTkRPV1MpICYmIFVTRShDVVJMKQogICAgIHN0
YXRpYyB2b2lkIHNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmluZyYp
OwogICAgIHN0YXRpYyB2b2lkIHNldENsaWVudENlcnRpZmljYXRlSW5mbyhjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
V0lOKSAmJiBVU0UoQ1VSTCkgJiYgVVNFKENGKQorI2lmIE9TKFdJTkRPV1MpICYmIFVTRShDVVJM
KSAmJiBVU0UoQ0YpCiAgICAgc3RhdGljIHZvaWQgc2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3Qg
U3RyaW5nJiBob3N0LCBDRkRhdGFSZWYpOwogI2VuZGlmCiAKQEAgLTE4MSw2ICsxODUsMTIgQEAg
cHVibGljOgogICAgIE1vbm90b25pY1RpbWUgbV9yZXF1ZXN0VGltZTsKICNlbmRpZgogCisjaWYg
VVNFKENVUkwpCisgICAgdm9pZCBpbml0aWFsaXplKCk7CisgICAgdm9pZCBoYW5kbGVEYXRhVVJM
KCk7CisgICAgdm9pZCBoYW5kbGVDdXJsTXNnKENVUkxNc2cqKTsKKyNlbmRpZgorCiAgICAgYm9v
bCBoYXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpIGNvbnN0OwogICAgIHZvaWQgY2xlYXJBdXRo
ZW50aWNhdGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjYW5jZWwoKTsK
QEAgLTI4Miw2ICsyOTIsMTcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHRpbWVvdXRGaXJlZCgpOwog
I2VuZGlmCiAKKyNpZiBVU0UoQ1VSTCkKKyAgICB2b2lkIGRpc3BhdGNoU3luY2hyb25vdXNKb2Io
KTsKKworICAgIHZvaWQgc2V0dXBQT1NUKHN0cnVjdCBjdXJsX3NsaXN0KiopOworICAgIHZvaWQg
c2V0dXBQVVQoc3RydWN0IGN1cmxfc2xpc3QqKik7CisKKyAgICB2b2lkIGFwcGx5QXV0aGVudGlj
YXRpb24oKTsKKworICAgIGNoYXIgbV9jdXJsRXJyb3JCdWZmZXJbQ1VSTF9FUlJPUl9TSVpFXTsK
KyNlbmRpZgorCiAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlSGFuZGxlSW50ZXJuYWw7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlc291cmNlSGFuZGxlSW50ZXJuYWw+IGQ7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3Vy
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5k
bGVDdXJsLmNwcAppbmRleCAzNzJkYTgwODNiMy4uNjdkMjY1MmU5MGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZUN1cmwuY3BwCkBAIC0zMiwxNCArMzIsMTggQEAKIAogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNl
TG9hZGVyLmgiCiAjaW5jbHVkZSAiQ3JlZGVudGlhbFN0b3JhZ2UuaCIKKyNpbmNsdWRlICJDdXJs
Q2FjaGVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKICNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlTWFuYWdlci5oIgogI2luY2x1ZGUgIlNTTEhhbmRsZS5oIgogI2luY2x1
ZGUgIlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzQsNyArNzgsNyBAQCB2b2lkIFJlc291
cmNlSGFuZGxlOjpjYW5jZWwoKQogICAgIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5z
dGFuY2UoKS0+Y2FuY2VsKHRoaXMpOwogfQogCi0jaWYgUExBVEZPUk0oV0lOKQorI2lmIE9TKFdJ
TkRPV1MpCiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldEhvc3RBbGxvd3NBbnlIVFRQU0NlcnRp
ZmljYXRlKGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKQEAgLTkxLDcgKzk1LDcgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGVJbmZvKGNvbnN0IFN0cmluZyYgaG9zdCwg
Y29uc3QgU3RyaW5nJgogCiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENGKQor
I2lmIE9TKFdJTkRPV1MpICYmIFVTRShDRikKIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xp
ZW50Q2VydGlmaWNhdGUoY29uc3QgU3RyaW5nJiwgQ0ZEYXRhUmVmKQogewpAQCAtMTI3LDkgKzEz
MSw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtTG9hZFJlc291cmNlU3luY2hyb25v
dXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4CiAgICAgU3luY2hyb25vdXNMb2FkZXJDbGll
bnQgY2xpZW50OwogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYWRvcHRSZWYo
bmV3IFJlc291cmNlSGFuZGxlKGNvbnRleHQsIHJlcXVlc3QsICZjbGllbnQsIGZhbHNlLCBmYWxz
ZSkpOwogCi0gICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKiBtYW5hZ2VyID0gUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpOwotCi0gICAgbWFuYWdlci0+ZGlzcGF0Y2hTeW5j
aHJvbm91c0pvYihoYW5kbGUuZ2V0KCkpOworICAgIGhhbmRsZS5nZXQoKS0+ZGlzcGF0Y2hTeW5j
aHJvbm91c0pvYigpOwogCiAgICAgZXJyb3IgPSBjbGllbnQuZXJyb3IoKTsKICAgICBkYXRhLnN3
YXAoY2xpZW50Lm11dGFibGVEYXRhKCkpOwpAQCAtMjQxLDYgKzI0Myw4MDcgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZTo6cmVjZWl2ZWRDaGFsbGVuZ2VSZWplY3Rpb24oY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCitjb25zdCBjaGFy
KiBjb25zdCBlcnJvckRvbWFpbkN1cmwgPSAiQ3VybEVycm9yRG9tYWluIjsKKworI2lmIEVOQUJM
RShXRUJfVElNSU5HKQorc3RhdGljIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25z
KFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQpCit7CisgICAgZG91YmxlIHByZVRyYW5zZmVyVGlt
ZSA9IDA7CisgICAgZG91YmxlIGRuc2xvb2t1cFRpbWUgPSAwOworICAgIGRvdWJsZSBjb25uZWN0
VGltZSA9IDA7CisgICAgZG91YmxlIGFwcENvbm5lY3RUaW1lID0gMDsKKworICAgIGN1cmxfZWFz
eV9nZXRpbmZvKGQtPm1faGFuZGxlLCBDVVJMSU5GT19OQU1FTE9PS1VQX1RJTUUsICZkbnNsb29r
dXBUaW1lKTsKKyAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRsZSwgQ1VSTElORk9fQ09O
TkVDVF9USU1FLCAmY29ubmVjdFRpbWUpOworICAgIGN1cmxfZWFzeV9nZXRpbmZvKGQtPm1faGFu
ZGxlLCBDVVJMSU5GT19BUFBDT05ORUNUX1RJTUUsICZhcHBDb25uZWN0VGltZSk7CisgICAgY3Vy
bF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX1BSRVRSQU5TRkVSX1RJTUUsICZw
cmVUcmFuc2ZlclRpbWUpOworCisgICAgZC0+bV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xv
YWRNZXRyaWNzKCkuZG9tYWluTG9va3VwU3RhcnQgPSBTZWNvbmRzKDApOworICAgIGQtPm1fcmVz
cG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpLmRvbWFpbkxvb2t1cEVuZCA9IFNl
Y29uZHMoZG5zbG9va3VwVGltZSk7CisKKyAgICBkLT5tX3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3
b3JrTG9hZE1ldHJpY3MoKS5jb25uZWN0U3RhcnQgPSBTZWNvbmRzKGRuc2xvb2t1cFRpbWUpOwor
ICAgIGQtPm1fcmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpLmNvbm5lY3RF
bmQgPSBTZWNvbmRzKGNvbm5lY3RUaW1lKTsKKworICAgIGQtPm1fcmVzcG9uc2UuZGVwcmVjYXRl
ZE5ldHdvcmtMb2FkTWV0cmljcygpLnJlcXVlc3RTdGFydCA9IFNlY29uZHMoY29ubmVjdFRpbWUp
OworICAgIGQtPm1fcmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpLnJlc3Bv
bnNlU3RhcnQgPSBTZWNvbmRzKHByZVRyYW5zZmVyVGltZSk7CisKKyAgICBpZiAoYXBwQ29ubmVj
dFRpbWUpCisgICAgICAgIGQtPm1fcmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmlj
cygpLnNlY3VyZUNvbm5lY3Rpb25TdGFydCA9IFNlY29uZHMoY29ubmVjdFRpbWUpOworfQorI2Vu
ZGlmCisKK3N0YXRpYyB2b2lkIGhhbmRsZUxvY2FsUmVjZWl2ZVJlc3BvbnNlKENVUkwqIGhhbmRs
ZSwgUmVzb3VyY2VIYW5kbGUqIGpvYiwgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCkKK3sKKyAg
ICAvLyBzaW5jZSB0aGUgY29kZSBpbiBoZWFkZXJDYWxsYmFjayB3aWxsIG5vdCBoYXZlIHJ1biBm
b3IgbG9jYWwgZmlsZXMKKyAgICAvLyB0aGUgY29kZSB0byBzZXQgdGhlIFVSTCBhbmQgZmlyZSBk
aWRSZWNlaXZlUmVzcG9uc2UgaXMgbmV2ZXIgcnVuLAorICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBS
ZXNvdXJjZUxvYWRlcidzIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIFVSTC4KKyAgICAv
LyBSdW4gdGhlIGNvZGUgaGVyZSBmb3IgbG9jYWwgZmlsZXMgdG8gcmVzb2x2ZSB0aGUgaXNzdWUu
CisgICAgLy8gVE9ETzogU2VlIGlmIHRoZXJlIGlzIGEgYmV0dGVyIGFwcHJvYWNoIGZvciBoYW5k
bGluZyB0aGlzLgorICAgIFVSTCB1cmwgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZm
ZWN0aXZlVVJMKGhhbmRsZSk7CisgICAgQVNTRVJUKHVybC5pc1ZhbGlkKCkpOworICAgIGQtPm1f
cmVzcG9uc2Uuc2V0VVJMKHVybCk7CisgICAgaWYgKGQtPmNsaWVudCgpKQorICAgICAgICBkLT5j
bGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGpvYiwgUmVzb3VyY2VSZXNwb25zZShkLT5tX3Jl
c3BvbnNlKSk7CisgICAgZC0+bV9yZXNwb25zZS5zZXRSZXNwb25zZUZpcmVkKHRydWUpOworfQor
CisKKy8vIGNhbGxlZCB3aXRoIGRhdGEgYWZ0ZXIgYWxsIGhlYWRlcnMgaGF2ZSBiZWVuIHByb2Nl
c3NlZCB2aWEgaGVhZGVyQ2FsbGJhY2sKK3N0YXRpYyBzaXplX3Qgd3JpdGVDYWxsYmFjayh2b2lk
KiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCit7CisgICAgUmVz
b3VyY2VIYW5kbGUqIGpvYiA9IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSk7Cisg
ICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBp
ZiAoZC0+bV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gV2Ugc2hvdWxk
IG5ldmVyIGJlIGNhbGxlZCB3aGVuIGRlZmVycmVkIGxvYWRpbmcgaXMgYWN0aXZhdGVkLgorICAg
IEFTU0VSVCghZC0+bV9kZWZlcnNMb2FkaW5nKTsKKworICAgIHNpemVfdCB0b3RhbFNpemUgPSBz
aXplICogbm1lbWI7CisKKyAgICAvLyB0aGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgYnV0IGFw
cGFyZW50bHkgaXMuIENVUkwgd3JpdGVzIHRoZSBkYXRhCisgICAgLy8gb2YgaHRtbCBwYWdlIGV2
ZW4gaWYgaXQgaXMgYSByZWRpcmVjdCB0aGF0IHdhcyBoYW5kbGVkIGludGVybmFsbHkKKyAgICAv
LyBjYW4gYmUgb2JzZXJ2ZWQgZS5nLiBvbiBnbWFpbC5jb20KKyAgICBDVVJMKiBoID0gZC0+bV9o
YW5kbGU7CisgICAgbG9uZyBodHRwQ29kZSA9IDA7CisgICAgQ1VSTGNvZGUgZXJyID0gY3VybF9l
YXN5X2dldGluZm8oaCwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJmh0dHBDb2RlKTsKKyAgICBp
ZiAoQ1VSTEVfT0sgPT0gZXJyICYmIGh0dHBDb2RlID49IDMwMCAmJiBodHRwQ29kZSA8IDQwMCkK
KyAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKKworICAgIGlmICghZC0+bV9yZXNwb25zZS5yZXNw
b25zZUZpcmVkKCkpIHsKKyAgICAgICAgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoaCwgam9i
LCBkKTsKKyAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgaWYgKGQtPm1fbXVsdGlwYXJ0SGFuZGxlKQorICAgICAgICBkLT5tX211
bHRpcGFydEhhbmRsZS0+Y29udGVudFJlY2VpdmVkKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihw
dHIpLCB0b3RhbFNpemUpOworICAgIGVsc2UgaWYgKGQtPmNsaWVudCgpKSB7CisgICAgICAgIGQt
PmNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YShqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpLCB0
b3RhbFNpemUsIDApOworICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRp
ZFJlY2VpdmVEYXRhKCpqb2IsIHN0YXRpY19jYXN0PGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOwor
ICAgIH0KKworICAgIHJldHVybiB0b3RhbFNpemU7Cit9CisKK2lubGluZSBzdGF0aWMgYm9vbCBp
c0h0dHBJbmZvKGludCBzdGF0dXNDb2RlKQoreworICAgIHJldHVybiAxMDAgPD0gc3RhdHVzQ29k
ZSAmJiBzdGF0dXNDb2RlIDwgMjAwOworfQorCitpbmxpbmUgc3RhdGljIGJvb2wgaXNIdHRwUmVk
aXJlY3QoaW50IHN0YXR1c0NvZGUpCit7CisgICAgcmV0dXJuIDMwMCA8PSBzdGF0dXNDb2RlICYm
IHN0YXR1c0NvZGUgPCA0MDAgJiYgc3RhdHVzQ29kZSAhPSAzMDQ7Cit9CisKK2lubGluZSBzdGF0
aWMgYm9vbCBpc0h0dHBBdXRoZW50aWNhdGlvbihpbnQgc3RhdHVzQ29kZSkKK3sKKyAgICByZXR1
cm4gc3RhdHVzQ29kZSA9PSA0MDE7Cit9CisKK2lubGluZSBzdGF0aWMgYm9vbCBpc0h0dHBOb3RN
b2RpZmllZChpbnQgc3RhdHVzQ29kZSkKK3sKKyAgICByZXR1cm4gc3RhdHVzQ29kZSA9PSAzMDQ7
Cit9CisKK3N0YXRpYyBib29sIGlzQXBwZW5kYWJsZUhlYWRlcihjb25zdCBTdHJpbmcgJmtleSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogYXBwZW5kYWJsZUhlYWRlcnNbXSA9IHsKKyAgICAg
ICAgImFjY2Vzcy1jb250cm9sLWFsbG93LWhlYWRlcnMiLAorICAgICAgICAiYWNjZXNzLWNvbnRy
b2wtYWxsb3ctbWV0aG9kcyIsCisgICAgICAgICJhY2Nlc3MtY29udHJvbC1hbGxvdy1vcmlnaW4i
LAorICAgICAgICAiYWNjZXNzLWNvbnRyb2wtZXhwb3NlLWhlYWRlcnMiLAorICAgICAgICAiYWxs
b3ciLAorICAgICAgICAiY2FjaGUtY29udHJvbCIsCisgICAgICAgICJjb25uZWN0aW9uIiwKKyAg
ICAgICAgImNvbnRlbnQtZW5jb2RpbmciLAorICAgICAgICAiY29udGVudC1sYW5ndWFnZSIsCisg
ICAgICAgICJpZi1tYXRjaCIsCisgICAgICAgICJpZi1ub25lLW1hdGNoIiwKKyAgICAgICAgImtl
ZXAtYWxpdmUiLAorICAgICAgICAicHJhZ21hIiwKKyAgICAgICAgInByb3h5LWF1dGhlbnRpY2F0
ZSIsCisgICAgICAgICJwdWJsaWMiLAorICAgICAgICAic2VydmVyIiwKKyAgICAgICAgInNldC1j
b29raWUiLAorICAgICAgICAidGUiLAorICAgICAgICAidHJhaWxlciIsCisgICAgICAgICJ0cmFu
c2Zlci1lbmNvZGluZyIsCisgICAgICAgICJ1cGdyYWRlIiwKKyAgICAgICAgInVzZXItYWdlbnQi
LAorICAgICAgICAidmFyeSIsCisgICAgICAgICJ2aWEiLAorICAgICAgICAid2FybmluZyIsCisg
ICAgICAgICJ3d3ctYXV0aGVudGljYXRlIgorICAgIH07CisKKyAgICAvLyBDdXN0b20gaGVhZGVy
cyBzdGFydCB3aXRoICdYLScsIGFuZCBuZWVkIG5vIGZ1cnRoZXIgY2hlY2tpbmcuCisgICAgaWYg
KGtleS5zdGFydHNXaXRoKCJ4LSIsIC8qIGNhc2VTZW5zaXRpdmUgKi8gZmFsc2UpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIGZvciAoYXV0byYgaGVhZGVyIDogYXBwZW5kYWJsZUhlYWRl
cnMpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2Uoa2V5LCBoZWFkZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgdm9pZCByZW1vdmVMZWFkaW5nQW5kVHJhaWxpbmdRdW90ZXMoU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB2YWx1ZS5sZW5ndGgoKTsKKyAgICBpZiAodmFs
dWUuc3RhcnRzV2l0aCgnIicpICYmIHZhbHVlLmVuZHNXaXRoKCciJykgJiYgbGVuZ3RoID4gMSkK
KyAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgbGVuZ3RoIC0gMik7Cit9CisKK3N0
YXRpYyBib29sIGdldFByb3RlY3Rpb25TcGFjZShDVVJMKiBoLCBjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCit7CisgICAg
Q1VSTGNvZGUgZXJyOworCisgICAgbG9uZyBwb3J0ID0gMDsKKyAgICBlcnIgPSBjdXJsX2Vhc3lf
Z2V0aW5mbyhoLCBDVVJMSU5GT19QUklNQVJZX1BPUlQsICZwb3J0KTsKKyAgICBpZiAoZXJyICE9
IENVUkxFX09LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBsb25nIGF2YWlsYWJsZUF1
dGggPSBDVVJMQVVUSF9OT05FOworICAgIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJ
TkZPX0hUVFBBVVRIX0FWQUlMLCAmYXZhaWxhYmxlQXV0aCk7CisgICAgaWYgKGVyciAhPSBDVVJM
RV9PSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVVJMIHVybCA9IEN1cmxDb250ZXh0
OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVVUkwoaCk7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgaG9zdCA9IHVybC5ob3N0KCk7
CisgICAgU3RyaW5nVmlldyBwcm90b2NvbCA9IHVybC5wcm90b2NvbCgpOworCisgICAgU3RyaW5n
IHJlYWxtOworCisgICAgY29uc3QgU3RyaW5nIGF1dGhIZWFkZXIgPSByZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkF1dGhvcml6YXRpb24pOworICAgIGNvbnN0IFN0cmlu
ZyByZWFsbVN0cmluZyA9ICJyZWFsbT0iOworICAgIGludCByZWFsbVBvcyA9IGF1dGhIZWFkZXIu
ZmluZChyZWFsbVN0cmluZyk7CisgICAgaWYgKHJlYWxtUG9zID4gMCkgeworICAgICAgICByZWFs
bSA9IGF1dGhIZWFkZXIuc3Vic3RyaW5nKHJlYWxtUG9zICsgcmVhbG1TdHJpbmcubGVuZ3RoKCkp
OworICAgICAgICByZWFsbSA9IHJlYWxtLmxlZnQocmVhbG0uZmluZCgnLCcpKTsKKyAgICAgICAg
cmVtb3ZlTGVhZGluZ0FuZFRyYWlsaW5nUXVvdGVzKHJlYWxtKTsKKyAgICB9CisKKyAgICBQcm90
ZWN0aW9uU3BhY2VTZXJ2ZXJUeXBlIHNlcnZlclR5cGUgPSBQcm90ZWN0aW9uU3BhY2VTZXJ2ZXJI
VFRQOworICAgIGlmIChwcm90b2NvbCA9PSAiaHR0cHMiKQorICAgICAgICBzZXJ2ZXJUeXBlID0g
UHJvdGVjdGlvblNwYWNlU2VydmVySFRUUFM7CisKKyAgICBQcm90ZWN0aW9uU3BhY2VBdXRoZW50
aWNhdGlvblNjaGVtZSBhdXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25T
Y2hlbWVVbmtub3duOworCisgICAgaWYgKGF2YWlsYWJsZUF1dGggJiBDVVJMQVVUSF9CQVNJQykK
KyAgICAgICAgYXV0aFNjaGVtZSA9IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1l
SFRUUEJhc2ljOworICAgIGlmIChhdmFpbGFibGVBdXRoICYgQ1VSTEFVVEhfRElHRVNUKQorICAg
ICAgICBhdXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQ
RGlnZXN0OworICAgIGlmIChhdmFpbGFibGVBdXRoICYgQ1VSTEFVVEhfR1NTTkVHT1RJQVRFKQor
ICAgICAgICBhdXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVO
ZWdvdGlhdGU7CisgICAgaWYgKGF2YWlsYWJsZUF1dGggJiBDVVJMQVVUSF9OVExNKQorICAgICAg
ICBhdXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVOVExNOwor
CisgICAgcHJvdGVjdGlvblNwYWNlID0gUHJvdGVjdGlvblNwYWNlKGhvc3QsIHBvcnQsIHNlcnZl
clR5cGUsIHJlYWxtLCBhdXRoU2NoZW1lKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvKgor
KiBUaGlzIGlzIGJlaW5nIGNhbGxlZCBmb3IgZWFjaCBIVFRQIGhlYWRlciBpbiB0aGUgcmVzcG9u
c2UuIFRoaXMgaW5jbHVkZXMgJ1xyXG4nCisqIGZvciB0aGUgbGFzdCBsaW5lIG9mIHRoZSBoZWFk
ZXIuCisqCisqIFdlIHdpbGwgYWRkIGVhY2ggSFRUUCBIZWFkZXIgdG8gdGhlIFJlc291cmNlUmVz
cG9uc2UgYW5kIG9uIHRoZSB0ZXJtaW5hdGlvbgorKiBvZiB0aGUgaGVhZGVyIChcclxuKSB3ZSB3
aWxsIHBhcnNlIENvbnRlbnQtVHlwZSBhbmQgQ29udGVudC1EaXNwb3NpdGlvbiBhbmQKKyogdXBk
YXRlIHRoZSBSZXNvdXJjZVJlc3BvbnNlIGFuZCB0aGVuIHNlbmQgaXQgYXdheS4KKyoKKyovCitz
dGF0aWMgc2l6ZV90IGhlYWRlckNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVf
dCBubWVtYiwgdm9pZCogZGF0YSkKK3sKKyAgICBSZXNvdXJjZUhhbmRsZSogam9iID0gc3RhdGlj
X2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihkYXRhKTsKKyAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOworICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gZGVm
ZXJyZWQgbG9hZGluZyBpcyBhY3RpdmF0ZWQuCisgICAgQVNTRVJUKCFkLT5tX2RlZmVyc0xvYWRp
bmcpOworCisgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IHNpemUgKiBubWVtYjsKKyAgICBSZXNvdXJj
ZUhhbmRsZUNsaWVudCogY2xpZW50ID0gZC0+Y2xpZW50KCk7CisKKyAgICBTdHJpbmcgaGVhZGVy
KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihwdHIpLCB0b3RhbFNpemUpOworCisgICAgLyoKKyAg
ICAqIGEpIFdlIGNhbiBmaW5pc2ggYW5kIHNlbmQgdGhlIFJlc291cmNlUmVzcG9uc2UKKyAgICAq
IGIpIFdlIHdpbGwgYWRkIHRoZSBjdXJyZW50IGhlYWRlciB0byB0aGUgSFRUUEhlYWRlck1hcCBv
ZiB0aGUgUmVzb3VyY2VSZXNwb25zZQorICAgICoKKyAgICAqIFRoZSBIVFRQIHN0YW5kYXJkIHJl
cXVpcmVzIHRvIHVzZSBcclxuIGJ1dCBmb3IgY29tcGF0aWJpbGl0eSBpdCByZWNvbW1lbmRzIHRv
CisgICAgKiBhY2NlcHQgYWxzbyBcbi4KKyAgICAqLworICAgIGlmIChoZWFkZXIgPT0gU3RyaW5n
KCJcclxuIikgfHwgaGVhZGVyID09IFN0cmluZygiXG4iKSkgeworICAgICAgICBDVVJMKiBoID0g
ZC0+bV9oYW5kbGU7CisKKyAgICAgICAgbG9uZyBodHRwQ29kZSA9IDA7CisgICAgICAgIGN1cmxf
ZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZodHRwQ29kZSk7CisKKyAg
ICAgICAgaWYgKCFodHRwQ29kZSkgeworICAgICAgICAgICAgLy8gQ29tZXMgaGVyZSB3aGVuIHJl
Y2VpdmluZyAyMDAgQ29ubmVjdGlvbiBFc3RhYmxpc2hlZC4gSnVzdCByZXR1cm4uCisgICAgICAg
ICAgICByZXR1cm4gdG90YWxTaXplOworICAgICAgICB9CisgICAgICAgIGlmIChpc0h0dHBJbmZv
KGh0dHBDb2RlKSkgeworICAgICAgICAgICAgLy8gSnVzdCByZXR1cm4gd2hlbiByZWNlaXZpbmcg
aHR0cCBpbmZvLCBlLmcuIEhUVFAvMS4xIDEwMCBDb250aW51ZS4KKyAgICAgICAgICAgIC8vIElm
IG5vdCwgdGhlIHJlcXVlc3QgbWlnaHQgYmUgY2FuY2VsbGVkLCBiZWNhdXNlIHRoZSBNSU1FIHR5
cGUgd2lsbCBiZSBlbXB0eSBmb3IgdGhpcyByZXNwb25zZS4KKyAgICAgICAgICAgIHJldHVybiB0
b3RhbFNpemU7CisgICAgICAgIH0KKworICAgICAgICBkb3VibGUgY29udGVudExlbmd0aCA9IDA7
CisgICAgICAgIGN1cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX0NPTlRFTlRfTEVOR1RIX0RP
V05MT0FELCAmY29udGVudExlbmd0aCk7CisgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0RXhwZWN0
ZWRDb250ZW50TGVuZ3RoKHN0YXRpY19jYXN0PGxvbmcgbG9uZyBpbnQ+KGNvbnRlbnRMZW5ndGgp
KTsKKworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChDdXJsQ29udGV4dDo6c2luZ2xldG9u
KCkuZ2V0RWZmZWN0aXZlVVJMKGgpKTsKKworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBT
dGF0dXNDb2RlKGh0dHBDb2RlKTsKKyAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShl
eHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
KEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkp
OworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoZXh0cmFjdENoYXJz
ZXRGcm9tTWVkaWFUeXBlKGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJO
YW1lOjpDb250ZW50VHlwZSkpKTsKKworICAgICAgICBpZiAoZC0+bV9yZXNwb25zZS5pc011bHRp
cGFydCgpKSB7CisgICAgICAgICAgICBTdHJpbmcgYm91bmRhcnk7CisgICAgICAgICAgICBib29s
IHBhcnNlZCA9IE11bHRpcGFydEhhbmRsZTo6ZXh0cmFjdEJvdW5kYXJ5KGQtPm1fcmVzcG9uc2Uu
aHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSksIGJvdW5kYXJ5KTsK
KyAgICAgICAgICAgIGlmIChwYXJzZWQpCisgICAgICAgICAgICAgICAgZC0+bV9tdWx0aXBhcnRI
YW5kbGUgPSBzdGQ6Om1ha2VfdW5pcXVlPE11bHRpcGFydEhhbmRsZT4oam9iLCBib3VuZGFyeSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBIVFRQIHJlZGlyZWN0aW9uCisgICAgICAgIGlmIChp
c0h0dHBSZWRpcmVjdChodHRwQ29kZSkpIHsKKyAgICAgICAgICAgIFN0cmluZyBsb2NhdGlvbiA9
IGQtPm1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpMb2NhdGlvbik7
CisgICAgICAgICAgICBpZiAoIWxvY2F0aW9uLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IFVSTCBuZXdVUkwgPSBVUkwoam9iLT5maXJzdFJlcXVlc3QoKS51cmwoKSwgbG9jYXRpb24pOwor
CisgICAgICAgICAgICAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlZGlyZWN0ZWRSZXF1ZXN0ID0gam9i
LT5maXJzdFJlcXVlc3QoKTsKKyAgICAgICAgICAgICAgICByZWRpcmVjdGVkUmVxdWVzdC5zZXRV
UkwobmV3VVJMKTsKKyAgICAgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlID0g
ZC0+bV9yZXNwb25zZTsKKyAgICAgICAgICAgICAgICBpZiAoY2xpZW50KQorICAgICAgICAgICAg
ICAgICAgICBjbGllbnQtPndpbGxTZW5kUmVxdWVzdChqb2IsIFdURk1vdmUocmVkaXJlY3RlZFJl
cXVlc3QpLCBXVEZNb3ZlKHJlc3BvbnNlKSk7CisKKyAgICAgICAgICAgICAgICBkLT5tX2ZpcnN0
UmVxdWVzdC5zZXRVUkwobmV3VVJMKTsKKworICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbFNp
emU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXNIdHRwQXV0aGVudGljYXRp
b24oaHR0cENvZGUpKSB7CisgICAgICAgICAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNw
YWNlOworICAgICAgICAgICAgaWYgKGdldFByb3RlY3Rpb25TcGFjZShkLT5tX2hhbmRsZSwgZC0+
bV9yZXNwb25zZSwgcHJvdGVjdGlvblNwYWNlKSkgeworICAgICAgICAgICAgICAgIENyZWRlbnRp
YWwgY3JlZGVudGlhbDsKKyAgICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSBj
aGFsbGVuZ2UocHJvdGVjdGlvblNwYWNlLCBjcmVkZW50aWFsLCBkLT5tX2F1dGhGYWlsdXJlQ291
bnQsIGQtPm1fcmVzcG9uc2UsIFJlc291cmNlRXJyb3IoKSk7CisgICAgICAgICAgICAgICAgY2hh
bGxlbmdlLnNldEF1dGhlbnRpY2F0aW9uQ2xpZW50KGpvYik7CisgICAgICAgICAgICAgICAgam9i
LT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY2hhbGxlbmdlKTsKKyAgICAgICAg
ICAgICAgICBkLT5tX2F1dGhGYWlsdXJlQ291bnQrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dG90YWxTaXplOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGNsaWVu
dCkgeworICAgICAgICAgICAgaWYgKGlzSHR0cE5vdE1vZGlmaWVkKGh0dHBDb2RlKSkgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdXJsID0gam9iLT5maXJzdFJlcXVlc3QoKS51cmwo
KS5zdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5z
dGFuY2UoKS5nZXRDYWNoZWRSZXNwb25zZSh1cmwsIGQtPm1fcmVzcG9uc2UpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChkLT5tX2FkZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDAp
OworICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4
dCgiT0siKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGpvYiwgUmVz
b3VyY2VSZXNwb25zZShkLT5tX3Jlc3BvbnNlKSk7CisgICAgICAgICAgICBDdXJsQ2FjaGVNYW5h
Z2VyOjpnZXRJbnN0YW5jZSgpLmRpZFJlY2VpdmVSZXNwb25zZSgqam9iLCBkLT5tX3Jlc3BvbnNl
KTsKKyAgICAgICAgfQorICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFJlc3BvbnNlRmlyZWQodHJ1
ZSk7CisKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgc3BsaXRQb3MgPSBoZWFkZXIuZmluZCgi
OiIpOworICAgICAgICBpZiAoc3BsaXRQb3MgIT0gLTEpIHsKKyAgICAgICAgICAgIFN0cmluZyBr
ZXkgPSBoZWFkZXIubGVmdChzcGxpdFBvcykuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgICAg
ICBTdHJpbmcgdmFsdWUgPSBoZWFkZXIuc3Vic3RyaW5nKHNwbGl0UG9zICsgMSkuc3RyaXBXaGl0
ZVNwYWNlKCk7CisKKyAgICAgICAgICAgIGlmIChpc0FwcGVuZGFibGVIZWFkZXIoa2V5KSkKKyAg
ICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLmFkZEhUVFBIZWFkZXJGaWVsZChrZXksIHZhbHVl
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhU
VFBIZWFkZXJGaWVsZChrZXksIHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmIChoZWFkZXIuc3Rh
cnRzV2l0aCgiSFRUUCIsIGZhbHNlKSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmly
c3QgbGluZSBvZiB0aGUgcmVzcG9uc2UuCisgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBodHRw
IHN0YXR1cyB0ZXh0IGZyb20gdGhpcy4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJ
ZiB0aGUgRk9MTE9XTE9DQVRJT04gb3B0aW9uIGlzIGVuYWJsZWQgZm9yIHRoZSBjdXJsIGhhbmRs
ZSB0aGVuCisgICAgICAgICAgICAvLyBjdXJsIHdpbGwgZm9sbG93IHRoZSByZWRpcmVjdGlvbnMg
aW50ZXJuYWxseS4gVGh1cyB0aGlzIGhlYWRlciBjYWxsYmFjaworICAgICAgICAgICAgLy8gd2ls
bCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uZSB0aW1lIHdpdGggdGhlIGxpbmUgc3RhcnRpbmcgIkhU
VFAiIGZvciBvbmUgam9iLgorICAgICAgICAgICAgbG9uZyBodHRwQ29kZSA9IDA7CisgICAgICAg
ICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRsZSwgQ1VSTElORk9fUkVTUE9OU0VfQ09E
RSwgJmh0dHBDb2RlKTsKKworICAgICAgICAgICAgU3RyaW5nIGh0dHBDb2RlU3RyaW5nID0gU3Ry
aW5nOjpudW1iZXIoaHR0cENvZGUpOworICAgICAgICAgICAgaW50IHN0YXR1c0NvZGVQb3MgPSBo
ZWFkZXIuZmluZChodHRwQ29kZVN0cmluZyk7CisKKyAgICAgICAgICAgIGlmIChzdGF0dXNDb2Rl
UG9zICE9IC0xKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHN0YXR1cyB0ZXh0IGlzIGFmdGVy
IHRoZSBzdGF0dXMgY29kZS4KKyAgICAgICAgICAgICAgICBTdHJpbmcgc3RhdHVzID0gaGVhZGVy
LnN1YnN0cmluZyhzdGF0dXNDb2RlUG9zICsgaHR0cENvZGVTdHJpbmcubGVuZ3RoKCkpOworICAg
ICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoc3RhdHVzLnN0cmlw
V2hpdGVTcGFjZSgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRvdGFsU2l6ZTsKK30KKworLyogVGhpcyBpcyBjYWxsZWQgdG8gb2J0YWluIEhUVFAg
UE9TVCBvciBQVVQgZGF0YS4KK0l0ZXJhdGUgdGhyb3VnaCBGb3JtRGF0YSBlbGVtZW50cyBhbmQg
dXBsb2FkIGZpbGVzLgorQ2FyZWZ1bGx5IHJlc3BlY3QgdGhlIGdpdmVuIGJ1ZmZlciBzaXplIGFu
ZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBkYXRhIGF0IHRoZSBuZXh0IGNhbGxzLgorKi8KK3NpemVf
dCByZWFkQ2FsbGJhY2sodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lk
KiBkYXRhKQoreworICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJj
ZUhhbmRsZSo+KGRhdGEpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdl
dEludGVybmFsKCk7CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVuIGRlZmVycmVkIGxvYWRp
bmcgaXMgYWN0aXZhdGVkLgorICAgIEFTU0VSVCghZC0+bV9kZWZlcnNMb2FkaW5nKTsKKworICAg
IGlmICghc2l6ZSB8fCAhbm1lbWIpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFkLT5t
X2Zvcm1EYXRhU3RyZWFtLmhhc01vcmVFbGVtZW50cygpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHNpemVfdCBzZW50ID0gZC0+bV9mb3JtRGF0YVN0cmVhbS5yZWFkKHB0ciwgc2l6ZSwgbm1l
bWIpOworCisgICAgLy8gU29tZXRoaW5nIHdlbnQgd3Jvbmcgc28gY2FuY2VsIHRoZSBqb2IuCisg
ICAgaWYgKCFzZW50KQorICAgICAgICBqb2ItPmNhbmNlbCgpOworCisgICAgcmV0dXJuIHNlbnQ7
Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGdldEZvcm1FbGVtZW50c0NvdW50KFJlc291cmNl
SGFuZGxlKiBqb2IpCit7CisgICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YSA9IGpvYi0+Zmly
c3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKworICAgIGlmICghZm9ybURhdGEpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLy8gUmVzb2x2ZSB0aGUgYmxvYiBlbGVtZW50cyBzbyB0aGUgZm9ybURh
dGEgY2FuIGNvcnJlY3RseSByZXBvcnQgaXQncyBzaXplLgorICAgIGZvcm1EYXRhID0gZm9ybURh
dGEtPnJlc29sdmVCbG9iUmVmZXJlbmNlcygpOworICAgIHNpemVfdCBzaXplID0gZm9ybURhdGEt
PmVsZW1lbnRzKCkuc2l6ZSgpOworICAgIGpvYi0+Zmlyc3RSZXF1ZXN0KCkuc2V0SFRUUEJvZHko
V1RGTW92ZShmb3JtRGF0YSkpOworCisgICAgcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyB2b2lk
IHNldHVwRm9ybURhdGEoUmVzb3VyY2VIYW5kbGUqIGpvYiwgQ1VSTG9wdGlvbiBzaXplT3B0aW9u
LCBzdHJ1Y3QgY3VybF9zbGlzdCoqIGhlYWRlcnMpCit7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKyAgICBWZWN0b3I8Rm9ybURhdGFFbGVtZW50
PiBlbGVtZW50cyA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKS0+ZWxlbWVudHMoKTsK
KyAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBlbGVtZW50cy5zaXplKCk7CisKKyAgICAvLyBUaGUg
c2l6ZSBvZiBhIGN1cmxfb2ZmX3QgY291bGQgYmUgZGlmZmVyZW50IGluIFdlYktpdCBhbmQgaW4g
Y1VSTCBkZXBlbmRpbmcgb24KKyAgICAvLyBjb21waWxhdGlvbiBmbGFncyBvZiBib3RoLgorICAg
IHN0YXRpYyBpbnQgZXhwZWN0ZWRTaXplT2ZDdXJsT2ZmVCA9IDA7CisgICAgaWYgKCFleHBlY3Rl
ZFNpemVPZkN1cmxPZmZUKSB7CisgICAgICAgIGN1cmxfdmVyc2lvbl9pbmZvX2RhdGEqIGluZm9E
YXRhID0gY3VybF92ZXJzaW9uX2luZm8oQ1VSTFZFUlNJT05fTk9XKTsKKyAgICAgICAgaWYgKGlu
Zm9EYXRhLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9MQVJHRUZJTEUpCisgICAgICAgICAgICBl
eHBlY3RlZFNpemVPZkN1cmxPZmZUID0gc2l6ZW9mKGxvbmcgbG9uZyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGV4cGVjdGVkU2l6ZU9mQ3VybE9mZlQgPSBzaXplb2YoaW50KTsKKyAgICB9
CisKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxPZmZUID0gKDFMTCA8PCAoZXhw
ZWN0ZWRTaXplT2ZDdXJsT2ZmVCAqIDggLSAxKSkgLSAxOworICAgIC8vIE9idGFpbiB0aGUgdG90
YWwgc2l6ZSBvZiB0aGUgZm9ybSBkYXRhCisgICAgY3VybF9vZmZfdCBzaXplID0gMDsKKyAgICBi
b29sIGNodW5rZWRUcmFuc2ZlciA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtRWxlbWVudHM7IGkrKykgeworICAgICAgICBGb3JtRGF0YUVsZW1lbnQgZWxlbWVudCA9IGVs
ZW1lbnRzW2ldOworICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50
OjpUeXBlOjpFbmNvZGVkRmlsZSkgeworICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplUmVz
dWx0OworICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1lbnQubV9maWxlbmFtZSwgZmls
ZVNpemVSZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZpbGVTaXplUmVzdWx0ID4gbWF4
Q3VybE9mZlQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlsZSBzaXplIGlzIHRvbyBiaWcg
Zm9yIHNwZWNpZnlpbmcgaXQgdG8gY1VSTAorICAgICAgICAgICAgICAgICAgICBjaHVua2VkVHJh
bnNmZXIgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgc2l6ZSArPSBmaWxlU2l6ZVJlc3VsdDsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY2h1bmtlZFRyYW5zZmVyID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBzaXplICs9IGVsZW1lbnRzW2ldLm1fZGF0YS5zaXplKCk7CisgICAgfQorCisgICAgLy8g
Y1VSTCBndWVzc2VzIHRoYXQgd2Ugd2FudCBjaHVua2VkIGVuY29kaW5nIGFzIGxvbmcgYXMgd2Ug
c3BlY2lmeSB0aGUgaGVhZGVyCisgICAgaWYgKGNodW5rZWRUcmFuc2ZlcikKKyAgICAgICAgKmhl
YWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZCgqaGVhZGVycywgIlRyYW5zZmVyLUVuY29kaW5nOiBj
aHVua2VkIik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzaXplb2YobG9uZyBsb25nKSA9PSBl
eHBlY3RlZFNpemVPZkN1cmxPZmZUKQorICAgICAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgc2l6ZU9wdGlvbiwgKGxvbmcgbG9uZylzaXplKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgc2l6ZU9wdGlvbiwgKGludClz
aXplKTsKKyAgICB9CisKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BU
X1JFQURGVU5DVElPTiwgcmVhZENhbGxiYWNrKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1JFQUREQVRBLCBqb2IpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxl
OjpzZXR1cFBVVChzdHJ1Y3QgY3VybF9zbGlzdCoqIGhlYWRlcnMpCit7CisgICAgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCogZCA9IGdldEludGVybmFsKCk7CisgICAgY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9VUExPQUQsIFRSVUUpOworICAgIGN1cmxfZWFzeV9zZXRvcHQo
ZC0+bV9oYW5kbGUsIENVUkxPUFRfSU5GSUxFU0laRSwgMCk7CisKKyAgICAvLyBEaXNhYmxlIHRo
ZSBFeHBlY3Q6IDEwMCBjb250aW51ZSBoZWFkZXIKKyAgICAqaGVhZGVycyA9IGN1cmxfc2xpc3Rf
YXBwZW5kKCpoZWFkZXJzLCAiRXhwZWN0OiIpOworCisgICAgc2l6ZV90IG51bUVsZW1lbnRzID0g
Z2V0Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7CisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0dXBGb3JtRGF0YSh0aGlzLCBDVVJMT1BUX0lORklMRVNJWkVf
TEFSR0UsIGhlYWRlcnMpOworfQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpzZXR1cFBPU1Qoc3Ry
dWN0IGN1cmxfc2xpc3QqKiBoZWFkZXJzKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwq
IGQgPSBnZXRJbnRlcm5hbCgpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfUE9TVCwgVFJVRSk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VS
TE9QVF9QT1NURklFTERTSVpFLCAwKTsKKworICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGdldEZv
cm1FbGVtZW50c0NvdW50KHRoaXMpOworICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIERvIG5vdCBzdHJlYW0gZm9yIHNpbXBsZSBQT1NUIGRhdGEKKyAgICBp
ZiAobnVtRWxlbWVudHMgPT0gMSkgeworICAgICAgICBmaXJzdFJlcXVlc3QoKS5odHRwQm9keSgp
LT5mbGF0dGVuKGQtPm1fcG9zdEJ5dGVzKTsKKyAgICAgICAgaWYgKGQtPm1fcG9zdEJ5dGVzLnNp
emUoKSkgeworICAgICAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9Q
VF9QT1NURklFTERTSVpFLCBkLT5tX3Bvc3RCeXRlcy5zaXplKCkpOworICAgICAgICAgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTLCBkLT5tX3Bvc3RC
eXRlcy5kYXRhKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
ZXR1cEZvcm1EYXRhKHRoaXMsIENVUkxPUFRfUE9TVEZJRUxEU0laRV9MQVJHRSwgaGVhZGVycyk7
Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmhhbmRsZURhdGFVUkwoKQoreworICAgIEFTU0VS
VChmaXJzdFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzRGF0YSgpKTsKKyAgICBTdHJpbmcgdXJs
ID0gZmlyc3RSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7CisKKyAgICBBU1NFUlQoY2xpZW50KCkp
OworCisgICAgaW50IGluZGV4ID0gdXJsLmZpbmQoJywnKTsKKyAgICBpZiAoaW5kZXggPT0gLTEp
IHsKKyAgICAgICAgY2xpZW50KCktPmNhbm5vdFNob3dVUkwodGhpcyk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBTdHJpbmcgbWVkaWFUeXBlID0gdXJsLnN1YnN0cmluZyg1LCBpbmRl
eCAtIDUpOworICAgIFN0cmluZyBkYXRhID0gdXJsLnN1YnN0cmluZyhpbmRleCArIDEpOworCisg
ICAgYm9vbCBiYXNlNjQgPSBtZWRpYVR5cGUuZW5kc1dpdGgoIjtiYXNlNjQiLCBmYWxzZSk7Cisg
ICAgaWYgKGJhc2U2NCkKKyAgICAgICAgbWVkaWFUeXBlID0gbWVkaWFUeXBlLmxlZnQobWVkaWFU
eXBlLmxlbmd0aCgpIC0gNyk7CisKKyAgICBpZiAobWVkaWFUeXBlLmlzRW1wdHkoKSkKKyAgICAg
ICAgbWVkaWFUeXBlID0gInRleHQvcGxhaW4iOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gZXh0
cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtZWRpYVR5cGUpOworICAgIFN0cmluZyBjaGFyc2V0
ID0gZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKG1lZGlhVHlwZSk7CisKKyAgICBpZiAoY2hh
cnNldC5pc0VtcHR5KCkpCisgICAgICAgIGNoYXJzZXQgPSAiVVMtQVNDSUkiOworCisgICAgUmVz
b3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICByZXNwb25zZS5zZXRNaW1lVHlwZShtaW1lVHlw
ZSk7CisgICAgcmVzcG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShjaGFyc2V0KTsKKyAgICByZXNw
b25zZS5zZXRVUkwoZmlyc3RSZXF1ZXN0KCkudXJsKCkpOworCisgICAgaWYgKGJhc2U2NCkgewor
ICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEpOworICAgICAgICBj
bGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKHRoaXMsIFdURk1vdmUocmVzcG9uc2UpKTsKKwor
ICAgICAgICAvLyBkaWRSZWNlaXZlUmVzcG9uc2UgbWlnaHQgY2F1c2UgdGhlIGNsaWVudCB0byBi
ZSBkZWxldGVkLgorICAgICAgICBpZiAoY2xpZW50KCkpIHsKKyAgICAgICAgICAgIFZlY3Rvcjxj
aGFyPiBvdXQ7CisgICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEsIG91dCwgQmFzZTY0
SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAwKQorICAgICAgICAgICAg
ICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YSh0aGlzLCBvdXQuZGF0YSgpLCBvdXQuc2l6ZSgp
LCAwKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFRleHRFbmNvZGluZyBlbmNv
ZGluZyhjaGFyc2V0KTsKKyAgICAgICAgZGF0YSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhk
YXRhLCBlbmNvZGluZyk7CisgICAgICAgIGNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhp
cywgV1RGTW92ZShyZXNwb25zZSkpOworCisgICAgICAgIC8vIGRpZFJlY2VpdmVSZXNwb25zZSBt
aWdodCBjYXVzZSB0aGUgY2xpZW50IHRvIGJlIGRlbGV0ZWQuCisgICAgICAgIGlmIChjbGllbnQo
KSkgeworICAgICAgICAgICAgQ1N0cmluZyBlbmNvZGVkRGF0YSA9IGVuY29kaW5nLmVuY29kZShk
YXRhLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICAgICAgaWYg
KGVuY29kZWREYXRhLmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGNsaWVudCgpLT5kaWRSZWNl
aXZlRGF0YSh0aGlzLCBlbmNvZGVkRGF0YS5kYXRhKCksIGVuY29kZWREYXRhLmxlbmd0aCgpLCAw
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChjbGllbnQoKSkKKyAgICAgICAgY2xpZW50
KCktPmRpZEZpbmlzaExvYWRpbmcodGhpcyk7Cit9CisKK3ZvaWQgUmVzb3VyY2VIYW5kbGU6OmRp
c3BhdGNoU3luY2hyb25vdXNKb2IoKQoreworICAgIFVSTCBrdXJsID0gZmlyc3RSZXF1ZXN0KCku
dXJsKCk7CisKKyAgICBpZiAoa3VybC5wcm90b2NvbElzRGF0YSgpKSB7CisgICAgICAgIGhhbmRs
ZURhdGFVUkwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwqIGQgPSBnZXRJbnRlcm5hbCgpOworCisgICAgLy8gSWYgZGVmZXJzTG9hZGluZyBp
cyB0cnVlIGFuZCB3ZSBjYWxsIGN1cmxfZWFzeV9wZXJmb3JtCisgICAgLy8gb24gYSBwYXVzZWQg
aGFuZGxlLCBsaWJjVVJMIHdvdWxkIGRvIHRoZSB0cmFuc2ZlcnQgYW55d2F5CisgICAgLy8gYW5k
IHdlIHdvdWxkIGFzc2VydCBzbyBmb3JjZSBkZWZlcnNMb2FkaW5nIHRvIGJlIGZhbHNlLgorICAg
IGQtPm1fZGVmZXJzTG9hZGluZyA9IGZhbHNlOworCisgICAgaW5pdGlhbGl6ZSgpOworCisgICAg
Ly8gY3VybF9lYXN5X3BlcmZvcm0gYmxvY2tzIHVudGlsIHRoZSB0cmFuc2ZlcnQgaXMgZmluaXNo
ZWQuCisgICAgQ1VSTGNvZGUgcmV0ID0gY3VybF9lYXN5X3BlcmZvcm0oZC0+bV9oYW5kbGUpOwor
CisgICAgaWYgKHJldCAhPSBDVVJMRV9PSykgeworICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9y
KEFTQ0lJTGl0ZXJhbChlcnJvckRvbWFpbkN1cmwpLCByZXQsIGt1cmwsIFN0cmluZyhjdXJsX2Vh
c3lfc3RyZXJyb3IocmV0KSkpOworICAgICAgICBlcnJvci5zZXRTU0xFcnJvcnMoZC0+bV9zc2xF
cnJvcnMpOworICAgICAgICBkLT5jbGllbnQoKS0+ZGlkRmFpbCh0aGlzLCBlcnJvcik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgaWYgKGQtPmNsaWVudCgpKQorICAgICAgICAgICAgZC0+Y2xpZW50
KCktPmRpZFJlY2VpdmVSZXNwb25zZSh0aGlzLCBSZXNvdXJjZVJlc3BvbnNlKGQtPm1fcmVzcG9u
c2UpKTsKKyAgICB9CisKKyNpZiBFTkFCTEUoV0VCX1RJTUlORykKKyAgICBjYWxjdWxhdGVXZWJU
aW1pbmdJbmZvcm1hdGlvbnMoZCk7CisjZW5kaWYKKworICAgIGN1cmxfZWFzeV9jbGVhbnVwKGQt
Pm1faGFuZGxlKTsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRsZTo6YXBwbHlBdXRoZW50aWNhdGlv
bigpCit7CisgICAgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0ID0gZmlyc3RSZXF1ZXN0KCk7Cisg
ICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZvciBp
bnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3Blbigp
LgorICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBnZXRJbnRlcm5hbCgpOworCisgICAg
U3RyaW5nIHBhcnRpdGlvbiA9IHJlcXVlc3QuY2FjaGVQYXJ0aXRpb24oKTsKKworICAgIGlmIChz
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZSgpKSB7CisgICAgICAgIGlmIChkLT5tX3VzZXIuaXNF
bXB0eSgpICYmIGQtPm1fcGFzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIDxyZGFyOi8v
cHJvYmxlbS83MTc0MDUwPiAtIEZvciBVUkxzIHRoYXQgbWF0Y2ggdGhlIHBhdGhzIG9mIHRob3Nl
IHByZXZpb3VzbHkgY2hhbGxlbmdlZCBmb3IgSFRUUCBCYXNpYyBhdXRoZW50aWNhdGlvbiwgCisg
ICAgICAgICAgICAvLyB0cnkgYW5kIHJldXNlIHRoZSBjcmVkZW50aWFsIHByZWVtcHRpdmVseSwg
YXMgYWxsb3dlZCBieSBSRkMgMjYxNy4KKyAgICAgICAgICAgIGQtPm1faW5pdGlhbENyZWRlbnRp
YWwgPSBDcmVkZW50aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuZ2V0KHBh
cnRpdGlvbiwgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LyBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgcHJvdGVjdGlvbiBzcGFjZSBrbm93biBmb3IgdGhlIFVS
TCwgdXBkYXRlIHN0b3JlZCBjcmVkZW50aWFscworICAgICAgICAgICAgLy8gYmVmb3JlIHNlbmRp
bmcgYSByZXF1ZXN0LiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcGxlbWVudCBsb2dvdXQg
Ynkgc2VuZGluZyBhbgorICAgICAgICAgICAgLy8gWE1MSHR0cFJlcXVlc3Qgd2l0aCBrbm93biBp
bmNvcnJlY3QgY3JlZGVudGlhbHMsIGFuZCBhYm9ydGluZyBpdCBpbW1lZGlhdGVseSAoc28gdGhh
dAorICAgICAgICAgICAgLy8gYW4gYXV0aGVudGljYXRpb24gZGlhbG9nIGRvZXNuJ3QgcG9wIHVw
KS4KKyAgICAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0b3Jh
Z2UoKS5zZXQocGFydGl0aW9uLCBDcmVkZW50aWFsKGQtPm1fdXNlciwgZC0+bV9wYXNzLCBDcmVk
ZW50aWFsUGVyc2lzdGVuY2VOb25lKSwgcmVxdWVzdC51cmwoKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBTdHJpbmcgdXNlciA9IGQtPm1fdXNlcjsKKyAgICBTdHJpbmcgcGFzc3dvcmQgPSBk
LT5tX3Bhc3M7CisKKyAgICBpZiAoIWQtPm1faW5pdGlhbENyZWRlbnRpYWwuaXNFbXB0eSgpKSB7
CisgICAgICAgIHVzZXIgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnVzZXIoKTsKKyAgICAgICAg
cGFzc3dvcmQgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3b3JkKCk7CisgICAgICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0JB
U0lDKTsKKyAgICB9CisKKyAgICAvLyBJdCBzZWVtcyB3ZSBuZWVkIHRvIHNldCBDVVJMT1BUX1VT
RVJQV0QgZXZlbiBpZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgaXMgZW1wdHkuCisgICAgLy8gT3Ro
ZXJ3aXNlIGNVUkwgd2lsbCBub3QgYXV0b21hdGljYWxseSBjb250aW51ZSB3aXRoIGEgbmV3IHJl
cXVlc3QgYWZ0ZXIgYSA0MDEgcmVzcG9uc2UuCisKKyAgICAvLyBjdXJsIENVUkxPUFRfVVNFUlBX
RCBleHBlY3RzIHVzZXJuYW1lOnBhc3N3b3JkCisgICAgU3RyaW5nIHVzZXJwYXNzID0gdXNlciAr
ICI6IiArIHBhc3N3b3JkOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxP
UFRfVVNFUlBXRCwgdXNlcnBhc3MudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgUmVzb3VyY2VI
YW5kbGU6OmluaXRpYWxpemUoKQoreworICAgIEN1cmxDb250ZXh0JiBjb250ZXh0ID0gQ3VybENv
bnRleHQ6OnNpbmdsZXRvbigpOworCisgICAgc3RhdGljIGNvbnN0IGludCBhbGxvd2VkUHJvdG9j
b2xzID0gQ1VSTFBST1RPX0ZJTEUgfCBDVVJMUFJPVE9fRlRQIHwgQ1VSTFBST1RPX0ZUUFMgfCBD
VVJMUFJPVE9fSFRUUCB8IENVUkxQUk9UT19IVFRQUzsKKyAgICBVUkwgdXJsID0gZmlyc3RSZXF1
ZXN0KCkudXJsKCk7CisKKyAgICAvLyBSZW1vdmUgYW55IGZyYWdtZW50IHBhcnQsIG90aGVyd2lz
ZSBjdXJsIHdpbGwgc2VuZCBpdCBhcyBwYXJ0IG9mIHRoZSByZXF1ZXN0LgorICAgIHVybC5yZW1v
dmVGcmFnbWVudElkZW50aWZpZXIoKTsKKworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQg
PSBnZXRJbnRlcm5hbCgpOworICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwuc3RyaW5nKCk7CisK
KyAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpIHsKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBxdWVy
eSBwYXJ0IHNlbnQgdG8gYSBsb2NhbCBmaWxlLgorICAgICAgICBpZiAoIXVybC5xdWVyeSgpLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gQnkgc2V0dGluZyB0aGUgcXVlcnkgdG8gYSBudWxs
IHN0cmluZyBpdCdsbCBiZSByZW1vdmVkLgorICAgICAgICAgICAgdXJsLnNldFF1ZXJ5KFN0cmlu
ZygpKTsKKyAgICAgICAgICAgIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIE1JTUUgdHlwZSBiYXNlZCBvbiB0aGUgcGF0aC4KKyAg
ICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1F
VHlwZUZvclBhdGgodXJsKSk7CisgICAgfQorCisgICAgZC0+bV9oYW5kbGUgPSBjdXJsX2Vhc3lf
aW5pdCgpOworCisgICAgaWYgKGQtPm1fZGVmZXJzTG9hZGluZykgeworICAgICAgICBDVVJMY29k
ZSBlcnJvciA9IGN1cmxfZWFzeV9wYXVzZShkLT5tX2hhbmRsZSwgQ1VSTFBBVVNFX0FMTCk7Cisg
ICAgICAgIC8vIElmIHdlIGRpZCBub3QgcGF1c2UgdGhlIGhhbmRsZSwgd2Ugd291bGQgQVNTRVJU
IGluIHRoZQorICAgICAgICAvLyBoZWFkZXIgY2FsbGJhY2suIFNvIGp1c3QgYXNzZXJ0IGhlcmUu
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZXJyb3IsIGVycm9yID09IENVUkxFX09LKTsKKyAgICB9
CisjaWZuZGVmIE5ERUJVRworICAgIGlmIChjb250ZXh0LmlzVmVyYm9zZSgpKQorICAgICAgICBj
dXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1ZFUkJPU0UsIDEpOworICAgIGlm
IChjb250ZXh0LmdldExvZ0ZpbGUoKSkKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9TVERFUlIsIGNvbnRleHQuZ2V0TG9nRmlsZSgpKTsKKyNlbmRpZgorICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDFM
KTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllI
T1NULCAyTCk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUklW
QVRFLCB0aGlzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0VS
Uk9SQlVGRkVSLCBtX2N1cmxFcnJvckJ1ZmZlcik7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZUNhbGxiYWNrKTsKKyAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFREFUQSwgdGhpcyk7CisgICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IRUFERVJGVU5DVElPTiwgaGVh
ZGVyQ2FsbGJhY2spOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRf
V1JJVEVIRUFERVIsIHRoaXMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfQVVUT1JFRkVSRVIsIDEpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUs
IENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfTUFYUkVESVJTLCAxMCk7CisgICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKyAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBDdXJsQ29udGV4dDo6c2luZ2xldG9u
KCkuY3VybFNoYXJlSGFuZGxlKCkpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUs
IENVUkxPUFRfRE5TX0NBQ0hFX1RJTUVPVVQsIDYwICogNSk7IC8vIDUgbWludXRlcworICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPVE9DT0xTLCBhbGxvd2VkUHJv
dG9jb2xzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1JFRElS
X1BST1RPQ09MUywgYWxsb3dlZFByb3RvY29scyk7CisgICAgc2V0U1NMQ2xpZW50Q2VydGlmaWNh
dGUodGhpcyk7CisKKyAgICBpZiAoY29udGV4dC5zaG91bGRJZ25vcmVTU0xFcnJvcnMoKSkKKyAg
ICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVF
UiwgZmFsc2UpOworICAgIGVsc2UKKyAgICAgICAgc2V0U1NMVmVyaWZ5T3B0aW9ucyh0aGlzKTsK
KworICAgIGNvbnN0IGNoYXIqIGNlcnRpZmljYXRlID0gY29udGV4dC5nZXRDZXJ0aWZpY2F0ZVBh
dGgoKTsKKyAgICBpZiAoY2VydGlmaWNhdGUpCisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+
bV9oYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBjZXJ0aWZpY2F0ZSk7CisKKyAgICAvLyBlbmFibGUg
Z3ppcCBhbmQgZGVmbGF0ZSB0aHJvdWdoIEFjY2VwdC1FbmNvZGluZzoKKyAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0VOQ09ESU5HLCAiIik7CisKKyAgICAvLyB1cmwg
bXVzdCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUgcmVxdWVzdAorICAgIEFTU0VSVCghZC0+bV91
cmwpOworCisgICAgLy8gdXJsIGlzIGluIEFTQ0lJIHNvIGxhdGluMSgpIHdpbGwgb25seSBjb252
ZXJ0IGl0IHRvIGNoYXIqIHdpdGhvdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uLgorICAgIGQtPm1f
dXJsID0gZmFzdFN0ckR1cCh1cmxTdHJpbmcubGF0aW4xKCkuZGF0YSgpKTsKKyAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VSTCwgZC0+bV91cmwpOworCisgICAgY29u
c3QgY2hhciogY29va2llSmFyID0gY29udGV4dC5nZXRDb29raWVKYXJGaWxlTmFtZSgpOworICAg
IGlmIChjb29raWVKYXIpCisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfQ09PS0lFSkFSLCBjb29raWVKYXIpOworCisgICAgc3RydWN0IGN1cmxfc2xpc3QqIGhl
YWRlcnMgPSAwOworICAgIGlmIChmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCkuc2l6
ZSgpID4gMCkgeworICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBmaXJzdFJl
cXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7CisKKyAgICAgICAgYm9vbCBoYXNDYWNoZUhlYWRl
cnMgPSBjdXN0b21IZWFkZXJzLmNvbnRhaW5zKEhUVFBIZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2lu
Y2UpIHx8IGN1c3RvbUhlYWRlcnMuY29udGFpbnMoSFRUUEhlYWRlck5hbWU6OklmTm9uZU1hdGNo
KTsKKyAgICAgICAgaWYgKCFoYXNDYWNoZUhlYWRlcnMgJiYgQ3VybENhY2hlTWFuYWdlcjo6Z2V0
SW5zdGFuY2UoKS5pc0NhY2hlZCh1cmwpKSB7CisgICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2Vy
OjpnZXRJbnN0YW5jZSgpLmFkZENhY2hlRW50cnlDbGllbnQodXJsLCB0aGlzKTsKKyAgICAgICAg
ICAgIEhUVFBIZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJzID0gQ3VybENhY2hlTWFuYWdlcjo6Z2V0
SW5zdGFuY2UoKS5yZXF1ZXN0SGVhZGVycyh1cmwpOworCisgICAgICAgICAgICAvLyBhcHBlbmQg
YWRkaXRpb25hbCBjYWNoZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgSFRUUEhlYWRlck1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSByZXF1ZXN0SGVhZGVycy5iZWdpbigpOworICAgICAgICAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmVxdWVzdEhlYWRlcnMuZW5kKCk7
CisgICAgICAgICAgICB3aGlsZSAoaXQgIT0gZW5kKSB7CisgICAgICAgICAgICAgICAgY3VzdG9t
SGVhZGVycy5zZXQoaXQtPmtleSwgaXQtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICArK2l0Owor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZC0+bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRl
cnMgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CisgICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmtleTsKKyAgICAgICAgICAg
IFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1ZTsKKyAgICAgICAgICAgIFN0cmluZyBoZWFkZXJTdHJp
bmcoa2V5KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBJbnNlcnQgdGhlIDsgdG8gdGVsbCBjdXJsIHRoYXQgdGhpcyBoZWFkZXIgaGFzIGFu
IGVtcHR5IHZhbHVlLgorICAgICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQoIjsiKTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGVhZGVyU3RyaW5nLmFwcGVu
ZCgiOiAiKTsKKyAgICAgICAgICAgICAgICBoZWFkZXJTdHJpbmcuYXBwZW5kKHZhbHVlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIENTdHJpbmcgaGVhZGVyTGF0aW4xID0gaGVhZGVyU3Ry
aW5nLmxhdGluMSgpOworICAgICAgICAgICAgaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5kKGhl
YWRlcnMsIGhlYWRlckxhdGluMS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgU3Ry
aW5nIG1ldGhvZCA9IGZpcnN0UmVxdWVzdCgpLmh0dHBNZXRob2QoKTsKKyAgICBpZiAoIkdFVCIg
PT0gbWV0aG9kKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BU
X0hUVFBHRVQsIFRSVUUpOworICAgIGVsc2UgaWYgKCJQT1NUIiA9PSBtZXRob2QpCisgICAgICAg
IHNldHVwUE9TVCgmaGVhZGVycyk7CisgICAgZWxzZSBpZiAoIlBVVCIgPT0gbWV0aG9kKQorICAg
ICAgICBzZXR1cFBVVCgmaGVhZGVycyk7CisgICAgZWxzZSBpZiAoIkhFQUQiID09IG1ldGhvZCkK
KyAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9OT0JPRFksIFRS
VUUpOworICAgIGVsc2UgeworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX0NVU1RPTVJFUVVFU1QsIG1ldGhvZC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgIHNl
dHVwUFVUKCZoZWFkZXJzKTsKKyAgICB9CisKKyAgICBpZiAoaGVhZGVycykgeworICAgICAgICBj
dXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMp
OworICAgICAgICBkLT5tX2N1c3RvbUhlYWRlcnMgPSBoZWFkZXJzOworICAgIH0KKworICAgIGFw
cGx5QXV0aGVudGljYXRpb24oKTsKKworICAgIC8vIFNldCBwcm94eSBvcHRpb25zIGlmIHdlIGhh
dmUgdGhlbS4KKyAgICBhdXRvJiBwcm94eSA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5wcm94
eUluZm8oKTsKKyAgICBpZiAocHJveHkudHlwZSAhPSBDdXJsUHJveHlUeXBlOjpJbnZhbGlkKSB7
CisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPWFksIHBy
b3h5LnVybCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1BST1hZVFlQRSwgcHJveHkudHlwZSk7CisgICAgfQorfQorCit2b2lk
IFJlc291cmNlSGFuZGxlOjpoYW5kbGVDdXJsTXNnKENVUkxNc2cqIG1zZykKK3sKKyAgICBSZXNv
dXJjZUhhbmRsZUludGVybmFsKiBkID0gZ2V0SW50ZXJuYWwoKTsKKworICAgIGlmIChDVVJMRV9P
SyA9PSBtc2ctPmRhdGEucmVzdWx0KSB7CisjaWYgRU5BQkxFKFdFQl9USU1JTkcpCisgICAgICAg
IGNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyhkKTsKKyNlbmRpZgorICAgICAgICBpZiAo
IWQtPm1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKSB7CisgICAgICAgICAgICBoYW5kbGVMb2Nh
bFJlY2VpdmVSZXNwb25zZShkLT5tX2hhbmRsZSwgdGhpcywgZCk7CisgICAgICAgICAgICBpZiAo
ZC0+bV9jYW5jZWxsZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGQtPm1fbXVsdGlwYXJ0SGFuZGxlKQorICAgICAgICAgICAgZC0+bV9tdWx0aXBh
cnRIYW5kbGUtPmNvbnRlbnRFbmRlZCgpOworCisgICAgICAgIGlmIChkLT5jbGllbnQoKSkgewor
ICAgICAgICAgICAgZC0+Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcodGhpcyk7CisgICAgICAg
ICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZpbmlzaExvYWRpbmcoKnRo
aXMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVVJMIHVybCA9IEN1cmxDb250
ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVVUkwoZC0+bV9oYW5kbGUpOworI2lmbmRlZiBO
REVCVUcKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIEVSUk9SIGZvciB1cmw9JyVzJywg
ZXJyb3I6ICclcydcbiIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjdXJsX2Vhc3lfc3Ry
ZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOworI2VuZGlmCisgICAgICAgIGlmIChkLT5jbGllbnQo
KSkgeworICAgICAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKEFTQ0lJTGl0ZXJh
bChlcnJvckRvbWFpbkN1cmwpLCBtc2ctPmRhdGEucmVzdWx0LCB1cmwsIFN0cmluZyhjdXJsX2Vh
c3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpKTsKKyAgICAgICAgICAgIHJlc291cmNlRXJy
b3Iuc2V0U1NMRXJyb3JzKGQtPm1fc3NsRXJyb3JzKTsKKyAgICAgICAgICAgIGQtPmNsaWVudCgp
LT5kaWRGYWlsKHRoaXMsIHJlc291cmNlRXJyb3IpOworICAgICAgICAgICAgQ3VybENhY2hlTWFu
YWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGYWlsKCp0aGlzKTsKKyAgICAgICAgfQorICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdl
ci5jcHAKaW5kZXggNGNhNGNkMjRmMTYuLmQyZjRiNWYzNDA5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyLmNwcApAQCAtNDEsMTEgKzQxLDkgQEAKICNpZiBVU0UoQ1VSTCkKIAogI2luY2x1ZGUg
IkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiQ3VybENhY2hlTWFuYWdlci5oIgogI2lu
Y2x1ZGUgIkN1cmxDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck5hbWVzLmgiCiAjaW5j
bHVkZSAiSFRUUFBhcnNlcnMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW5j
bHVkZSAiTXVsdGlwYXJ0SGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCkBAIC01NSw3ICs1Myw2IEBACiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNTTEhhbmRsZS5oIgogI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKQEAgLTc5
LDU0ICs3Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNvbnN0IGludCBzZWxlY3RUaW1lb3V0
TVMgPSA1Owogc3RhdGljIGNvbnN0IFNlY29uZHMgcG9sbFRpbWUgeyA1MF9tcyB9OwogY29uc3Qg
aW50IG1heFJ1bm5pbmdKb2JzID0gMTI4OwotY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5D
dXJsID0gIkN1cmxFcnJvckRvbWFpbiI7Ci0KLSNpZiBFTkFCTEUoV0VCX1RJTUlORykKLXN0YXRp
YyB2b2lkIGNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyhSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkKQotewotICAgIGRvdWJsZSBwcmVUcmFuc2ZlclRpbWUgPSAwOwotICAgIGRvdWJsZSBk
bnNsb29rdXBUaW1lID0gMDsKLSAgICBkb3VibGUgY29ubmVjdFRpbWUgPSAwOwotICAgIGRvdWJs
ZSBhcHBDb25uZWN0VGltZSA9IDA7Ci0KLSAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRs
ZSwgQ1VSTElORk9fTkFNRUxPT0tVUF9USU1FLCAmZG5zbG9va3VwVGltZSk7Ci0gICAgY3VybF9l
YXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX0NPTk5FQ1RfVElNRSwgJmNvbm5lY3RU
aW1lKTsKLSAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRsZSwgQ1VSTElORk9fQVBQQ09O
TkVDVF9USU1FLCAmYXBwQ29ubmVjdFRpbWUpOwotICAgIGN1cmxfZWFzeV9nZXRpbmZvKGQtPm1f
aGFuZGxlLCBDVVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FLCAmcHJlVHJhbnNmZXJUaW1lKTsKLQot
ICAgIGQtPm1fcmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljcygpLmRvbWFpbkxv
b2t1cFN0YXJ0ID0gU2Vjb25kcygwKTsKLSAgICBkLT5tX3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3
b3JrTG9hZE1ldHJpY3MoKS5kb21haW5Mb29rdXBFbmQgPSBTZWNvbmRzKGRuc2xvb2t1cFRpbWUp
OwotCi0gICAgZC0+bV9yZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzKCkuY29u
bmVjdFN0YXJ0ID0gU2Vjb25kcyhkbnNsb29rdXBUaW1lKTsKLSAgICBkLT5tX3Jlc3BvbnNlLmRl
cHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5jb25uZWN0RW5kID0gU2Vjb25kcyhjb25uZWN0
VGltZSk7Ci0KLSAgICBkLT5tX3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3Mo
KS5yZXF1ZXN0U3RhcnQgPSBTZWNvbmRzKGNvbm5lY3RUaW1lKTsKLSAgICBkLT5tX3Jlc3BvbnNl
LmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5yZXNwb25zZVN0YXJ0ID0gU2Vjb25kcyhw
cmVUcmFuc2ZlclRpbWUpOwotCi0gICAgaWYgKGFwcENvbm5lY3RUaW1lKQotICAgICAgICBkLT5t
X3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5zZWN1cmVDb25uZWN0aW9u
U3RhcnQgPSBTZWNvbmRzKGNvbm5lY3RUaW1lKTsKLX0KLSNlbmRpZgotCi1pbmxpbmUgc3RhdGlj
IGJvb2wgaXNIdHRwSW5mbyhpbnQgc3RhdHVzQ29kZSkKLXsKLSAgICByZXR1cm4gMTAwIDw9IHN0
YXR1c0NvZGUgJiYgc3RhdHVzQ29kZSA8IDIwMDsKLX0KLQotaW5saW5lIHN0YXRpYyBib29sIGlz
SHR0cFJlZGlyZWN0KGludCBzdGF0dXNDb2RlKQotewotICAgIHJldHVybiAzMDAgPD0gc3RhdHVz
Q29kZSAmJiBzdGF0dXNDb2RlIDwgNDAwICYmIHN0YXR1c0NvZGUgIT0gMzA0OwotfQotCi1pbmxp
bmUgc3RhdGljIGJvb2wgaXNIdHRwQXV0aGVudGljYXRpb24oaW50IHN0YXR1c0NvZGUpCi17Ci0g
ICAgcmV0dXJuIHN0YXR1c0NvZGUgPT0gNDAxOwotfQotCi1pbmxpbmUgc3RhdGljIGJvb2wgaXNI
dHRwTm90TW9kaWZpZWQoaW50IHN0YXR1c0NvZGUpCi17Ci0gICAgcmV0dXJuIHN0YXR1c0NvZGUg
PT0gMzA0OwotfQogCiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OlJlc291cmNlSGFuZGxlTWFuYWdl
cigpCiAgICAgOiBtX2Rvd25sb2FkVGltZXIoKnRoaXMsICZSZXNvdXJjZUhhbmRsZU1hbmFnZXI6
OmRvd25sb2FkVGltZXJDYWxsYmFjaykKQEAgLTE0OCwzMzQgKzk3LDYgQEAgUmVzb3VyY2VIYW5k
bGVNYW5hZ2VyKiBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkKICAgICBy
ZXR1cm4gc2hhcmVkSW5zdGFuY2U7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbmRsZUxvY2FsUmVjZWl2
ZVJlc3BvbnNlIChDVVJMKiBoYW5kbGUsIFJlc291cmNlSGFuZGxlKiBqb2IsIFJlc291cmNlSGFu
ZGxlSW50ZXJuYWwqIGQpCi17Ci0gICAgLy8gc2luY2UgdGhlIGNvZGUgaW4gaGVhZGVyQ2FsbGJh
Y2sgd2lsbCBub3QgaGF2ZSBydW4gZm9yIGxvY2FsIGZpbGVzCi0gICAgLy8gdGhlIGNvZGUgdG8g
c2V0IHRoZSBVUkwgYW5kIGZpcmUgZGlkUmVjZWl2ZVJlc3BvbnNlIGlzIG5ldmVyIHJ1biwKLSAg
ICAvLyB3aGljaCBtZWFucyB0aGUgUmVzb3VyY2VMb2FkZXIncyByZXNwb25zZSBkb2VzIG5vdCBj
b250YWluIHRoZSBVUkwuCi0gICAgLy8gUnVuIHRoZSBjb2RlIGhlcmUgZm9yIGxvY2FsIGZpbGVz
IHRvIHJlc29sdmUgdGhlIGlzc3VlLgotICAgIC8vIFRPRE86IFNlZSBpZiB0aGVyZSBpcyBhIGJl
dHRlciBhcHByb2FjaCBmb3IgaGFuZGxpbmcgdGhpcy4KLSAgICBVUkwgdXJsID0gQ3VybENvbnRl
eHQ6OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChoYW5kbGUpOwotICAgIEFTU0VSVCh1cmwu
aXNWYWxpZCgpKTsKLSAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTCh1cmwpOwotICAgICBpZiAoZC0+
Y2xpZW50KCkpCi0gICAgICAgICBkLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGpvYiwg
UmVzb3VyY2VSZXNwb25zZShkLT5tX3Jlc3BvbnNlKSk7Ci0gICAgIGQtPm1fcmVzcG9uc2Uuc2V0
UmVzcG9uc2VGaXJlZCh0cnVlKTsKLX0KLQotCi0vLyBjYWxsZWQgd2l0aCBkYXRhIGFmdGVyIGFs
bCBoZWFkZXJzIGhhdmUgYmVlbiBwcm9jZXNzZWQgdmlhIGhlYWRlckNhbGxiYWNrCi1zdGF0aWMg
c2l6ZV90IHdyaXRlQ2FsbGJhY2sodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1i
LCB2b2lkKiBkYXRhKQotewotICAgIFJlc291cmNlSGFuZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxS
ZXNvdXJjZUhhbmRsZSo+KGRhdGEpOwotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBq
b2ItPmdldEludGVybmFsKCk7Ci0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKQotICAgICAgICByZXR1
cm4gMDsKLQotICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiBkZWZlcnJlZCBs
b2FkaW5nIGlzIGFjdGl2YXRlZC4KLSAgICBBU1NFUlQoIWQtPm1fZGVmZXJzTG9hZGluZyk7Ci0K
LSAgICBzaXplX3QgdG90YWxTaXplID0gc2l6ZSAqIG5tZW1iOwotCi0gICAgLy8gdGhpcyBzaG91
bGRuJ3QgYmUgbmVjZXNzYXJ5IGJ1dCBhcHBhcmVudGx5IGlzLiBDVVJMIHdyaXRlcyB0aGUgZGF0
YQotICAgIC8vIG9mIGh0bWwgcGFnZSBldmVuIGlmIGl0IGlzIGEgcmVkaXJlY3QgdGhhdCB3YXMg
aGFuZGxlZCBpbnRlcm5hbGx5Ci0gICAgLy8gY2FuIGJlIG9ic2VydmVkIGUuZy4gb24gZ21haWwu
Y29tCi0gICAgQ1VSTCogaCA9IGQtPm1faGFuZGxlOwotICAgIGxvbmcgaHR0cENvZGUgPSAwOwot
ICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKGgsIENVUkxJTkZPX1JFU1BPTlNF
X0NPREUsICZodHRwQ29kZSk7Ci0gICAgaWYgKENVUkxFX09LID09IGVyciAmJiBodHRwQ29kZSA+
PSAzMDAgJiYgaHR0cENvZGUgPCA0MDApCi0gICAgICAgIHJldHVybiB0b3RhbFNpemU7Ci0KLSAg
ICBpZiAoIWQtPm1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKSB7Ci0gICAgICAgIGhhbmRsZUxv
Y2FsUmVjZWl2ZVJlc3BvbnNlKGgsIGpvYiwgZCk7Ci0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX211bHRpcGFy
dEhhbmRsZSkKLSAgICAgICAgZC0+bV9tdWx0aXBhcnRIYW5kbGUtPmNvbnRlbnRSZWNlaXZlZChz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKLSAgICBlbHNlIGlmIChk
LT5jbGllbnQoKSkgewotICAgICAgICBkLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZURhdGEoam9iLCBz
dGF0aWNfY2FzdDxjaGFyKj4ocHRyKSwgdG90YWxTaXplLCAwKTsKLSAgICAgICAgQ3VybENhY2hl
TWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZlRGF0YSgqam9iLCBzdGF0aWNfY2FzdDxj
aGFyKj4ocHRyKSwgdG90YWxTaXplKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdG90YWxTaXplOwot
fQotCi1zdGF0aWMgYm9vbCBpc0FwcGVuZGFibGVIZWFkZXIoY29uc3QgU3RyaW5nICZrZXkpCi17
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGFwcGVuZGFibGVIZWFkZXJzW10gPSB7Ci0gICAgICAg
ICJhY2Nlc3MtY29udHJvbC1hbGxvdy1oZWFkZXJzIiwKLSAgICAgICAgImFjY2Vzcy1jb250cm9s
LWFsbG93LW1ldGhvZHMiLAotICAgICAgICAiYWNjZXNzLWNvbnRyb2wtYWxsb3ctb3JpZ2luIiwK
LSAgICAgICAgImFjY2Vzcy1jb250cm9sLWV4cG9zZS1oZWFkZXJzIiwKLSAgICAgICAgImFsbG93
IiwKLSAgICAgICAgImNhY2hlLWNvbnRyb2wiLAotICAgICAgICAiY29ubmVjdGlvbiIsCi0gICAg
ICAgICJjb250ZW50LWVuY29kaW5nIiwKLSAgICAgICAgImNvbnRlbnQtbGFuZ3VhZ2UiLAotICAg
ICAgICAiaWYtbWF0Y2giLAotICAgICAgICAiaWYtbm9uZS1tYXRjaCIsCi0gICAgICAgICJrZWVw
LWFsaXZlIiwKLSAgICAgICAgInByYWdtYSIsCi0gICAgICAgICJwcm94eS1hdXRoZW50aWNhdGUi
LAotICAgICAgICAicHVibGljIiwKLSAgICAgICAgInNlcnZlciIsCi0gICAgICAgICJzZXQtY29v
a2llIiwKLSAgICAgICAgInRlIiwKLSAgICAgICAgInRyYWlsZXIiLAotICAgICAgICAidHJhbnNm
ZXItZW5jb2RpbmciLAotICAgICAgICAidXBncmFkZSIsCi0gICAgICAgICJ1c2VyLWFnZW50IiwK
LSAgICAgICAgInZhcnkiLAotICAgICAgICAidmlhIiwKLSAgICAgICAgIndhcm5pbmciLAotICAg
ICAgICAid3d3LWF1dGhlbnRpY2F0ZSIKLSAgICB9OwotCi0gICAgLy8gQ3VzdG9tIGhlYWRlcnMg
c3RhcnQgd2l0aCAnWC0nLCBhbmQgbmVlZCBubyBmdXJ0aGVyIGNoZWNraW5nLgotICAgIGlmIChr
ZXkuc3RhcnRzV2l0aCgieC0iLCAvKiBjYXNlU2Vuc2l0aXZlICovIGZhbHNlKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBmb3IgKGF1dG8mIGhlYWRlciA6IGFwcGVuZGFibGVIZWFkZXJz
KSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGtleSwgaGVhZGVyKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
c3RhdGljIHZvaWQgcmVtb3ZlTGVhZGluZ0FuZFRyYWlsaW5nUXVvdGVzKFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7Ci0gICAgaWYgKHZhbHVl
LnN0YXJ0c1dpdGgoJyInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnIicpICYmIGxlbmd0aCA+IDEpCi0g
ICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEsIGxlbmd0aC0yKTsKLX0KLQotc3RhdGlj
IGJvb2wgZ2V0UHJvdGVjdGlvblNwYWNlKENVUkwqIGgsIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
IHJlc3BvbnNlLCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKLXsKLSAgICBDVVJM
Y29kZSBlcnI7Ci0KLSAgICBsb25nIHBvcnQgPSAwOwotICAgIGVyciA9IGN1cmxfZWFzeV9nZXRp
bmZvKGgsIENVUkxJTkZPX1BSSU1BUllfUE9SVCwgJnBvcnQpOwotICAgIGlmIChlcnIgIT0gQ1VS
TEVfT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGxvbmcgYXZhaWxhYmxlQXV0aCA9
IENVUkxBVVRIX05PTkU7Ci0gICAgZXJyID0gY3VybF9lYXN5X2dldGluZm8oaCwgQ1VSTElORk9f
SFRUUEFVVEhfQVZBSUwsICZhdmFpbGFibGVBdXRoKTsKLSAgICBpZiAoZXJyICE9IENVUkxFX09L
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBVUkwgdXJsID0gQ3VybENvbnRleHQ6OnNp
bmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChoKTsKLSAgICBpZiAoIXVybC5pc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZyBob3N0ID0gdXJsLmhvc3QoKTsKLSAg
ICBTdHJpbmdWaWV3IHByb3RvY29sID0gdXJsLnByb3RvY29sKCk7Ci0KLSAgICBTdHJpbmcgcmVh
bG07Ci0KLSAgICBjb25zdCBTdHJpbmcgYXV0aEhlYWRlciA9IHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6QXV0aG9yaXphdGlvbik7Ci0gICAgY29uc3QgU3RyaW5nIHJl
YWxtU3RyaW5nID0gInJlYWxtPSI7Ci0gICAgaW50IHJlYWxtUG9zID0gYXV0aEhlYWRlci5maW5k
KHJlYWxtU3RyaW5nKTsKLSAgICBpZiAocmVhbG1Qb3MgPiAwKSB7Ci0gICAgICAgIHJlYWxtID0g
YXV0aEhlYWRlci5zdWJzdHJpbmcocmVhbG1Qb3MgKyByZWFsbVN0cmluZy5sZW5ndGgoKSk7Ci0g
ICAgICAgIHJlYWxtID0gcmVhbG0ubGVmdChyZWFsbS5maW5kKCcsJykpOwotICAgICAgICByZW1v
dmVMZWFkaW5nQW5kVHJhaWxpbmdRdW90ZXMocmVhbG0pOwotICAgIH0KLQotICAgIFByb3RlY3Rp
b25TcGFjZVNlcnZlclR5cGUgc2VydmVyVHlwZSA9IFByb3RlY3Rpb25TcGFjZVNlcnZlckhUVFA7
Ci0gICAgaWYgKHByb3RvY29sID09ICJodHRwcyIpCi0gICAgICAgIHNlcnZlclR5cGUgPSBQcm90
ZWN0aW9uU3BhY2VTZXJ2ZXJIVFRQUzsKLQotICAgIFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0
aW9uU2NoZW1lIGF1dGhTY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZVVua25vd247Ci0KLSAgICBpZiAoYXZhaWxhYmxlQXV0aCAmIENVUkxBVVRIX0JBU0lDKQotICAg
ICAgICBhdXRoU2NoZW1lID0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVIVFRQ
QmFzaWM7Ci0gICAgaWYgKGF2YWlsYWJsZUF1dGggJiBDVVJMQVVUSF9ESUdFU1QpCi0gICAgICAg
IGF1dGhTY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBEaWdl
c3Q7Ci0gICAgaWYgKGF2YWlsYWJsZUF1dGggJiBDVVJMQVVUSF9HU1NORUdPVElBVEUpCi0gICAg
ICAgIGF1dGhTY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5lZ290
aWF0ZTsKLSAgICBpZiAoYXZhaWxhYmxlQXV0aCAmIENVUkxBVVRIX05UTE0pCi0gICAgICAgIGF1
dGhTY2hlbWUgPSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5UTE07Ci0KLSAg
ICBwcm90ZWN0aW9uU3BhY2UgPSBQcm90ZWN0aW9uU3BhY2UoaG9zdCwgcG9ydCwgc2VydmVyVHlw
ZSwgcmVhbG0sIGF1dGhTY2hlbWUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBU
aGlzIGlzIGJlaW5nIGNhbGxlZCBmb3IgZWFjaCBIVFRQIGhlYWRlciBpbiB0aGUgcmVzcG9uc2Uu
IFRoaXMgaW5jbHVkZXMgJ1xyXG4nCi0gKiBmb3IgdGhlIGxhc3QgbGluZSBvZiB0aGUgaGVhZGVy
LgotICoKLSAqIFdlIHdpbGwgYWRkIGVhY2ggSFRUUCBIZWFkZXIgdG8gdGhlIFJlc291cmNlUmVz
cG9uc2UgYW5kIG9uIHRoZSB0ZXJtaW5hdGlvbgotICogb2YgdGhlIGhlYWRlciAoXHJcbikgd2Ug
d2lsbCBwYXJzZSBDb250ZW50LVR5cGUgYW5kIENvbnRlbnQtRGlzcG9zaXRpb24gYW5kCi0gKiB1
cGRhdGUgdGhlIFJlc291cmNlUmVzcG9uc2UgYW5kIHRoZW4gc2VuZCBpdCBhd2F5LgotICoKLSAq
Lwotc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBz
aXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCi17Ci0gICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IHN0
YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZGF0YSk7Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRl
cm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aGVu
IGRlZmVycmVkIGxvYWRpbmcgaXMgYWN0aXZhdGVkLgotICAgIEFTU0VSVCghZC0+bV9kZWZlcnNM
b2FkaW5nKTsKLQotICAgIHNpemVfdCB0b3RhbFNpemUgPSBzaXplICogbm1lbWI7Ci0gICAgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGQtPmNsaWVudCgpOwotCi0gICAgU3RyaW5nIGhl
YWRlcihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4ocHRyKSwgdG90YWxTaXplKTsKLQotICAgIC8q
Ci0gICAgICogYSkgV2UgY2FuIGZpbmlzaCBhbmQgc2VuZCB0aGUgUmVzb3VyY2VSZXNwb25zZQot
ICAgICAqIGIpIFdlIHdpbGwgYWRkIHRoZSBjdXJyZW50IGhlYWRlciB0byB0aGUgSFRUUEhlYWRl
ck1hcCBvZiB0aGUgUmVzb3VyY2VSZXNwb25zZQotICAgICAqCi0gICAgICogVGhlIEhUVFAgc3Rh
bmRhcmQgcmVxdWlyZXMgdG8gdXNlIFxyXG4gYnV0IGZvciBjb21wYXRpYmlsaXR5IGl0IHJlY29t
bWVuZHMgdG8KLSAgICAgKiBhY2NlcHQgYWxzbyBcbi4KLSAgICAgKi8KLSAgICBpZiAoaGVhZGVy
ID09IFN0cmluZygiXHJcbiIpIHx8IGhlYWRlciA9PSBTdHJpbmcoIlxuIikpIHsKLSAgICAgICAg
Q1VSTCogaCA9IGQtPm1faGFuZGxlOwotCi0gICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOwotICAg
ICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLCAmaHR0cENv
ZGUpOwotCi0gICAgICAgIGlmICghaHR0cENvZGUpIHsKLSAgICAgICAgICAgIC8vIENvbWVzIGhl
cmUgd2hlbiByZWNlaXZpbmcgMjAwIENvbm5lY3Rpb24gRXN0YWJsaXNoZWQuIEp1c3QgcmV0dXJu
LgotICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
aXNIdHRwSW5mbyhodHRwQ29kZSkpIHsKLSAgICAgICAgICAgIC8vIEp1c3QgcmV0dXJuIHdoZW4g
cmVjZWl2aW5nIGh0dHAgaW5mbywgZS5nLiBIVFRQLzEuMSAxMDAgQ29udGludWUuCi0gICAgICAg
ICAgICAvLyBJZiBub3QsIHRoZSByZXF1ZXN0IG1pZ2h0IGJlIGNhbmNlbGxlZCwgYmVjYXVzZSB0
aGUgTUlNRSB0eXBlIHdpbGwgYmUgZW1wdHkgZm9yIHRoaXMgcmVzcG9uc2UuCi0gICAgICAgICAg
ICByZXR1cm4gdG90YWxTaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgZG91YmxlIGNvbnRlbnRM
ZW5ndGggPSAwOwotICAgICAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19DT05URU5U
X0xFTkdUSF9ET1dOTE9BRCwgJmNvbnRlbnRMZW5ndGgpOwotICAgICAgICBkLT5tX3Jlc3BvbnNl
LnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzdGF0aWNfY2FzdDxsb25nIGxvbmcgaW50Pihjb250
ZW50TGVuZ3RoKSk7Ci0KLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwoQ3VybENvbnRleHQ6
OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChoKSk7Ci0KLSAgICAgICAgZC0+bV9yZXNwb25z
ZS5zZXRIVFRQU3RhdHVzQ29kZShodHRwQ29kZSk7Ci0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0
TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKS5jb252ZXJ0VG9BU0NJSUxv
d2VyY2FzZSgpKTsKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4
dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChI
VFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKSk7Ci0KLSAgICAgICAgaWYgKGQtPm1fcmVzcG9u
c2UuaXNNdWx0aXBhcnQoKSkgewotICAgICAgICAgICAgU3RyaW5nIGJvdW5kYXJ5OwotICAgICAg
ICAgICAgYm9vbCBwYXJzZWQgPSBNdWx0aXBhcnRIYW5kbGU6OmV4dHJhY3RCb3VuZGFyeShkLT5t
X3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpLCBi
b3VuZGFyeSk7Ci0gICAgICAgICAgICBpZiAocGFyc2VkKQotICAgICAgICAgICAgICAgIGQtPm1f
bXVsdGlwYXJ0SGFuZGxlID0gc3RkOjptYWtlX3VuaXF1ZTxNdWx0aXBhcnRIYW5kbGU+KGpvYiwg
Ym91bmRhcnkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSFRUUCByZWRpcmVjdGlvbgotICAg
ICAgICBpZiAoaXNIdHRwUmVkaXJlY3QoaHR0cENvZGUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
bG9jYXRpb24gPSBkLT5tX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6
TG9jYXRpb24pOwotICAgICAgICAgICAgaWYgKCFsb2NhdGlvbi5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICBVUkwgbmV3VVJMID0gVVJMKGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIGxv
Y2F0aW9uKTsKLQotICAgICAgICAgICAgICAgIFJlc291cmNlUmVxdWVzdCByZWRpcmVjdGVkUmVx
dWVzdCA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCk7Ci0gICAgICAgICAgICAgICAgcmVkaXJlY3RlZFJl
cXVlc3Quc2V0VVJMKG5ld1VSTCk7Ci0gICAgICAgICAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZSA9IGQtPm1fcmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgaWYgKGNsaWVudCkKLSAg
ICAgICAgICAgICAgICAgICAgY2xpZW50LT53aWxsU2VuZFJlcXVlc3Qoam9iLCBXVEZNb3ZlKHJl
ZGlyZWN0ZWRSZXF1ZXN0KSwgV1RGTW92ZShyZXNwb25zZSkpOwotCi0gICAgICAgICAgICAgICAg
ZC0+bV9maXJzdFJlcXVlc3Quc2V0VVJMKG5ld1VSTCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gdG90YWxTaXplOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGlzSHR0cEF1
dGhlbnRpY2F0aW9uKGh0dHBDb2RlKSkgewotICAgICAgICAgICAgUHJvdGVjdGlvblNwYWNlIHBy
b3RlY3Rpb25TcGFjZTsKLSAgICAgICAgICAgIGlmIChnZXRQcm90ZWN0aW9uU3BhY2UoZC0+bV9o
YW5kbGUsIGQtPm1fcmVzcG9uc2UsIHByb3RlY3Rpb25TcGFjZSkpIHsKLSAgICAgICAgICAgICAg
ICBDcmVkZW50aWFsIGNyZWRlbnRpYWw7Ci0gICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UgY2hhbGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgZC0+bV9hdXRo
RmFpbHVyZUNvdW50LCBkLT5tX3Jlc3BvbnNlLCBSZXNvdXJjZUVycm9yKCkpOwotICAgICAgICAg
ICAgICAgIGNoYWxsZW5nZS5zZXRBdXRoZW50aWNhdGlvbkNsaWVudChqb2IpOwotICAgICAgICAg
ICAgICAgIGpvYi0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNoYWxsZW5nZSk7
Ci0gICAgICAgICAgICAgICAgZC0+bV9hdXRoRmFpbHVyZUNvdW50Kys7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRvdGFsU2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChjbGllbnQpIHsKLSAgICAgICAgICAgIGlmIChpc0h0dHBOb3RNb2RpZmllZChodHRwQ29k
ZSkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHVybCA9IGpvYi0+Zmlyc3RSZXF1
ZXN0KCkudXJsKCkuc3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKEN1cmxDYWNoZU1hbmFn
ZXI6OmdldEluc3RhbmNlKCkuZ2V0Q2FjaGVkUmVzcG9uc2UodXJsLCBkLT5tX3Jlc3BvbnNlKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoZC0+bV9hZGRlZENhY2hlVmFsaWRhdGlvbkhlYWRl
cnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRUUFN0YXR1
c0NvZGUoMjAwKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0SFRU
UFN0YXR1c1RleHQoIk9LIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25z
ZShqb2IsIFJlc291cmNlUmVzcG9uc2UoZC0+bV9yZXNwb25zZSkpOwotICAgICAgICAgICAgQ3Vy
bENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZlUmVzcG9uc2UoKmpvYiwgZC0+
bV9yZXNwb25zZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRSZXNwb25z
ZUZpcmVkKHRydWUpOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHNwbGl0UG9zID0gaGVh
ZGVyLmZpbmQoIjoiKTsKLSAgICAgICAgaWYgKHNwbGl0UG9zICE9IC0xKSB7Ci0gICAgICAgICAg
ICBTdHJpbmcga2V5ID0gaGVhZGVyLmxlZnQoc3BsaXRQb3MpLnN0cmlwV2hpdGVTcGFjZSgpOwot
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaGVhZGVyLnN1YnN0cmluZyhzcGxpdFBvcyArIDEp
LnN0cmlwV2hpdGVTcGFjZSgpOwotCi0gICAgICAgICAgICBpZiAoaXNBcHBlbmRhYmxlSGVhZGVy
KGtleSkpCi0gICAgICAgICAgICAgICAgZC0+bV9yZXNwb25zZS5hZGRIVFRQSGVhZGVyRmllbGQo
a2V5LCB2YWx1ZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZC0+bV9yZXNw
b25zZS5zZXRIVFRQSGVhZGVyRmllbGQoa2V5LCB2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
aGVhZGVyLnN0YXJ0c1dpdGgoIkhUVFAiLCBmYWxzZSkpIHsKLSAgICAgICAgICAgIC8vIFRoaXMg
aXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHJlc3BvbnNlLgotICAgICAgICAgICAgLy8gRXh0cmFj
dCB0aGUgaHR0cCBzdGF0dXMgdGV4dCBmcm9tIHRoaXMuCi0gICAgICAgICAgICAvLwotICAgICAg
ICAgICAgLy8gSWYgdGhlIEZPTExPV0xPQ0FUSU9OIG9wdGlvbiBpcyBlbmFibGVkIGZvciB0aGUg
Y3VybCBoYW5kbGUgdGhlbgotICAgICAgICAgICAgLy8gY3VybCB3aWxsIGZvbGxvdyB0aGUgcmVk
aXJlY3Rpb25zIGludGVybmFsbHkuIFRodXMgdGhpcyBoZWFkZXIgY2FsbGJhY2sKLSAgICAgICAg
ICAgIC8vIHdpbGwgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmUgdGltZSB3aXRoIHRoZSBsaW5lIHN0
YXJ0aW5nICJIVFRQIiBmb3Igb25lIGpvYi4KLSAgICAgICAgICAgIGxvbmcgaHR0cENvZGUgPSAw
OwotICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX1JF
U1BPTlNFX0NPREUsICZodHRwQ29kZSk7Ci0KLSAgICAgICAgICAgIFN0cmluZyBodHRwQ29kZVN0
cmluZyA9IFN0cmluZzo6bnVtYmVyKGh0dHBDb2RlKTsKLSAgICAgICAgICAgIGludCBzdGF0dXND
b2RlUG9zID0gaGVhZGVyLmZpbmQoaHR0cENvZGVTdHJpbmcpOwotCi0gICAgICAgICAgICBpZiAo
c3RhdHVzQ29kZVBvcyAhPSAtMSkgewotICAgICAgICAgICAgICAgIC8vIFRoZSBzdGF0dXMgdGV4
dCBpcyBhZnRlciB0aGUgc3RhdHVzIGNvZGUuCi0gICAgICAgICAgICAgICAgU3RyaW5nIHN0YXR1
cyA9IGhlYWRlci5zdWJzdHJpbmcoc3RhdHVzQ29kZVBvcyArIGh0dHBDb2RlU3RyaW5nLmxlbmd0
aCgpKTsKLSAgICAgICAgICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0
YXR1cy5zdHJpcFdoaXRlU3BhY2UoKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0b3RhbFNpemU7Ci19Ci0KLS8qIFRoaXMgaXMgY2FsbGVkIHRvIG9i
dGFpbiBIVFRQIFBPU1Qgb3IgUFVUIGRhdGEuCi0gICBJdGVyYXRlIHRocm91Z2ggRm9ybURhdGEg
ZWxlbWVudHMgYW5kIHVwbG9hZCBmaWxlcy4KLSAgIENhcmVmdWxseSByZXNwZWN0IHRoZSBnaXZl
biBidWZmZXIgc2l6ZSBhbmQgZmlsbCB0aGUgcmVzdCBvZiB0aGUgZGF0YSBhdCB0aGUgbmV4dCBj
YWxscy4KLSovCi1zaXplX3QgcmVhZENhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgdm9pZCogZGF0YSkKLXsKLSAgICBSZXNvdXJjZUhhbmRsZSogam9iID0gc3Rh
dGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihkYXRhKTsKLSAgICBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkID0gam9iLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVkKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIFdlIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hl
biBkZWZlcnJlZCBsb2FkaW5nIGlzIGFjdGl2YXRlZC4KLSAgICBBU1NFUlQoIWQtPm1fZGVmZXJz
TG9hZGluZyk7Ci0KLSAgICBpZiAoIXNpemUgfHwgIW5tZW1iKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmICghZC0+bV9mb3JtRGF0YVN0cmVhbS5oYXNNb3JlRWxlbWVudHMoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBzaXplX3Qgc2VudCA9IGQtPm1fZm9ybURhdGFTdHJlYW0ucmVh
ZChwdHIsIHNpemUsIG5tZW1iKTsKLQotICAgIC8vIFNvbWV0aGluZyB3ZW50IHdyb25nIHNvIGNh
bmNlbCB0aGUgam9iLgotICAgIGlmICghc2VudCkKLSAgICAgICAgam9iLT5jYW5jZWwoKTsKLQot
ICAgIHJldHVybiBzZW50OwotfQotCiB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxv
YWRUaW1lckNhbGxiYWNrKCkKIHsKICAgICBzdGFydFNjaGVkdWxlZEpvYnMoKTsKQEAgLTU0MSwz
OSArMTYyLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OmRvd25sb2FkVGltZXJDYWxs
YmFjaygpCiAgICAgICAgIGlmIChDVVJMTVNHX0RPTkUgIT0gbXNnLT5tc2cpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotCi0gICAgICAgIGlmIChDVVJMRV9PSyA9PSBtc2ctPmRhdGEucmVzdWx0
KSB7Ci0jaWYgRU5BQkxFKFdFQl9USU1JTkcpCi0gICAgICAgICAgICBjYWxjdWxhdGVXZWJUaW1p
bmdJbmZvcm1hdGlvbnMoZCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmICghZC0+bV9yZXNwb25z
ZS5yZXNwb25zZUZpcmVkKCkpIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVMb2NhbFJlY2VpdmVS
ZXNwb25zZShkLT5tX2hhbmRsZSwgam9iLCBkKTsKLSAgICAgICAgICAgICAgICBpZiAoZC0+bV9j
YW5jZWxsZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbUN1cmwoam9iKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoZC0+bV9tdWx0aXBhcnRIYW5kbGUpCi0gICAgICAgICAg
ICAgICAgZC0+bV9tdWx0aXBhcnRIYW5kbGUtPmNvbnRlbnRFbmRlZCgpOwotCi0gICAgICAgICAg
ICBpZiAoZC0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgICAgICBkLT5jbGllbnQoKS0+ZGlkRmlu
aXNoTG9hZGluZyhqb2IpOwotICAgICAgICAgICAgICAgIEN1cmxDYWNoZU1hbmFnZXI6OmdldElu
c3RhbmNlKCkuZGlkRmluaXNoTG9hZGluZygqam9iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIFVSTCB1cmwgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCku
Z2V0RWZmZWN0aXZlVVJMKGQtPm1faGFuZGxlKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkN1cmwgRVJST1IgZm9yIHVybD0nJXMnLCBlcnJvcjogJyVzJ1xu
IiwgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGN1cmxfZWFzeV9zdHJlcnJvcihtc2ctPmRh
dGEucmVzdWx0KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChkLT5jbGllbnQoKSkgewotICAg
ICAgICAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihBU0NJSUxpdGVyYWwoZXJy
b3JEb21haW5DdXJsKSwgbXNnLT5kYXRhLnJlc3VsdCwgdXJsLCBTdHJpbmcoY3VybF9lYXN5X3N0
cmVycm9yKG1zZy0+ZGF0YS5yZXN1bHQpKSk7Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2VFcnJv
ci5zZXRTU0xFcnJvcnMoZC0+bV9zc2xFcnJvcnMpOwotICAgICAgICAgICAgICAgIGQtPmNsaWVu
dCgpLT5kaWRGYWlsKGpvYiwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgICAgICAgICAgQ3VybENh
Y2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRGYWlsKCpqb2IpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KKyAgICAgICAgam9iLT5oYW5kbGVDdXJsTXNnKG1zZyk7CiAgICAgICAgIHJl
bW92ZUZyb21DdXJsKGpvYik7CiAgICAgfQogCkBAIC01OTYsMTE0ICsxODUsNiBAQCB2b2lkIFJl
c291cmNlSGFuZGxlTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoUmVzb3VyY2VIYW5kbGUqIGpvYikK
ICAgICBqb2ItPmRlcmVmKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc2l6ZV90IGdldEZvcm1FbGVt
ZW50c0NvdW50KFJlc291cmNlSGFuZGxlKiBqb2IpCi17Ci0gICAgUmVmUHRyPEZvcm1EYXRhPiBm
b3JtRGF0YSA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKLQotICAgIGlmICghZm9y
bURhdGEpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gUmVzb2x2ZSB0aGUgYmxvYiBlbGVt
ZW50cyBzbyB0aGUgZm9ybURhdGEgY2FuIGNvcnJlY3RseSByZXBvcnQgaXQncyBzaXplLgotICAg
IGZvcm1EYXRhID0gZm9ybURhdGEtPnJlc29sdmVCbG9iUmVmZXJlbmNlcygpOwotICAgIHNpemVf
dCBzaXplID0gZm9ybURhdGEtPmVsZW1lbnRzKCkuc2l6ZSgpOwotICAgIGpvYi0+Zmlyc3RSZXF1
ZXN0KCkuc2V0SFRUUEJvZHkoV1RGTW92ZShmb3JtRGF0YSkpOwotCi0gICAgcmV0dXJuIHNpemU7
Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwRm9ybURhdGEoUmVzb3VyY2VIYW5kbGUqIGpvYiwgQ1VS
TG9wdGlvbiBzaXplT3B0aW9uLCBzdHJ1Y3QgY3VybF9zbGlzdCoqIGhlYWRlcnMpCi17Ci0gICAg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBWZWN0
b3I8Rm9ybURhdGFFbGVtZW50PiBlbGVtZW50cyA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJv
ZHkoKS0+ZWxlbWVudHMoKTsKLSAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBlbGVtZW50cy5zaXpl
KCk7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiBhIGN1cmxfb2ZmX3QgY291bGQgYmUgZGlmZmVyZW50
IGluIFdlYktpdCBhbmQgaW4gY1VSTCBkZXBlbmRpbmcgb24KLSAgICAvLyBjb21waWxhdGlvbiBm
bGFncyBvZiBib3RoLgotICAgIHN0YXRpYyBpbnQgZXhwZWN0ZWRTaXplT2ZDdXJsT2ZmVCA9IDA7
Ci0gICAgaWYgKCFleHBlY3RlZFNpemVPZkN1cmxPZmZUKSB7Ci0gICAgICAgIGN1cmxfdmVyc2lv
bl9pbmZvX2RhdGEgKmluZm9EYXRhID0gY3VybF92ZXJzaW9uX2luZm8oQ1VSTFZFUlNJT05fTk9X
KTsKLSAgICAgICAgaWYgKGluZm9EYXRhLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9MQVJHRUZJ
TEUpCi0gICAgICAgICAgICBleHBlY3RlZFNpemVPZkN1cmxPZmZUID0gc2l6ZW9mKGxvbmcgbG9u
Zyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4cGVjdGVkU2l6ZU9mQ3VybE9mZlQgPSBz
aXplb2YoaW50KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxP
ZmZUID0gKDFMTCA8PCAoZXhwZWN0ZWRTaXplT2ZDdXJsT2ZmVCAqIDggLSAxKSkgLSAxOwotICAg
IC8vIE9idGFpbiB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgZm9ybSBkYXRhCi0gICAgY3VybF9vZmZf
dCBzaXplID0gMDsKLSAgICBib29sIGNodW5rZWRUcmFuc2ZlciA9IGZhbHNlOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykgewotICAgICAgICBGb3JtRGF0YUVs
ZW1lbnQgZWxlbWVudCA9IGVsZW1lbnRzW2ldOwotICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUg
PT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkRmlsZSkgewotICAgICAgICAgICAgbG9u
ZyBsb25nIGZpbGVTaXplUmVzdWx0OwotICAgICAgICAgICAgaWYgKGdldEZpbGVTaXplKGVsZW1l
bnQubV9maWxlbmFtZSwgZmlsZVNpemVSZXN1bHQpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZp
bGVTaXplUmVzdWx0ID4gbWF4Q3VybE9mZlQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gRmls
ZSBzaXplIGlzIHRvbyBiaWcgZm9yIHNwZWNpZnlpbmcgaXQgdG8gY1VSTAotICAgICAgICAgICAg
ICAgICAgICBjaHVua2VkVHJhbnNmZXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2l6ZSArPSBmaWxlU2l6ZVJl
c3VsdDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY2h1bmtlZFRyYW5z
ZmVyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBzaXplICs9IGVsZW1lbnRzW2ldLm1fZGF0YS5zaXplKCk7
Ci0gICAgfQotCi0gICAgLy8gY1VSTCBndWVzc2VzIHRoYXQgd2Ugd2FudCBjaHVua2VkIGVuY29k
aW5nIGFzIGxvbmcgYXMgd2Ugc3BlY2lmeSB0aGUgaGVhZGVyCi0gICAgaWYgKGNodW5rZWRUcmFu
c2ZlcikKLSAgICAgICAgKmhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZCgqaGVhZGVycywgIlRy
YW5zZmVyLUVuY29kaW5nOiBjaHVua2VkIik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChzaXpl
b2YobG9uZyBsb25nKSA9PSBleHBlY3RlZFNpemVPZkN1cmxPZmZUKQotICAgICAgICAgICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgc2l6ZU9wdGlvbiwgKGxvbmcgbG9uZylzaXplKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
c2l6ZU9wdGlvbiwgKGludClzaXplKTsKLSAgICB9Ci0KLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQt
Pm1faGFuZGxlLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgcmVhZENhbGxiYWNrKTsKLSAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1JFQUREQVRBLCBqb2IpOwotfQotCi12
b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c2V0dXBQVVQoUmVzb3VyY2VIYW5kbGUqIGpvYiwg
c3RydWN0IGN1cmxfc2xpc3QqKiBoZWFkZXJzKQotewotICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hh
bmRsZSwgQ1VSTE9QVF9VUExPQUQsIFRSVUUpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfSU5GSUxFU0laRSwgMCk7Ci0KLSAgICAvLyBEaXNhYmxlIHRoZSBFeHBl
Y3Q6IDEwMCBjb250aW51ZSBoZWFkZXIKLSAgICAqaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBwZW5k
KCpoZWFkZXJzLCAiRXhwZWN0OiIpOwotCi0gICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9y
bUVsZW1lbnRzQ291bnQoam9iKTsKLSAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBzZXR1cEZvcm1EYXRhKGpvYiwgQ1VSTE9QVF9JTkZJTEVTSVpFX0xBUkdFLCBo
ZWFkZXJzKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnNldHVwUE9TVChSZXNv
dXJjZUhhbmRsZSogam9iLCBzdHJ1Y3QgY3VybF9zbGlzdCoqIGhlYWRlcnMpCi17Ci0gICAgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1QsIFRSVUUpOwotICAgIGN1cmxfZWFz
eV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEU0laRSwgMCk7Ci0KLSAgICBz
aXplX3QgbnVtRWxlbWVudHMgPSBnZXRGb3JtRWxlbWVudHNDb3VudChqb2IpOwotICAgIGlmICgh
bnVtRWxlbWVudHMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERvIG5vdCBzdHJlYW0gZm9y
IHNpbXBsZSBQT1NUIGRhdGEKLSAgICBpZiAobnVtRWxlbWVudHMgPT0gMSkgewotICAgICAgICBq
b2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBCb2R5KCktPmZsYXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOwot
ICAgICAgICBpZiAoZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFNJWkUsIGQtPm1fcG9zdEJ5
dGVzLnNpemUoKSk7Ci0gICAgICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX1BPU1RGSUVMRFMsIGQtPm1fcG9zdEJ5dGVzLmRhdGEoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHNldHVwRm9ybURhdGEoam9iLCBDVVJMT1BUX1BP
U1RGSUVMRFNJWkVfTEFSR0UsIGhlYWRlcnMpOwotfQotCiB2b2lkIFJlc291cmNlSGFuZGxlTWFu
YWdlcjo6YWRkKFJlc291cmNlSGFuZGxlKiBqb2IpCiB7CiAgICAgLy8gd2UgY2FuIGJlIGNhbGxl
ZCBmcm9tIHdpdGhpbiBjdXJsLCBzbyB0byBhdm9pZCByZS1lbnRyYW5jeSBpc3N1ZXMKQEAgLTc0
MSwxMTYgKzIyMiwxNyBAQCBib29sIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6c3RhcnRTY2hlZHVs
ZWRKb2JzKCkKICAgICByZXR1cm4gc3RhcnRlZDsKIH0KIAotc3RhdGljIHZvaWQgaGFuZGxlRGF0
YVVSTChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQotewotICAgIEFTU0VSVChoYW5kbGUtPmZpcnN0
UmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXNEYXRhKCkpOwotICAgIFN0cmluZyB1cmwgPSBoYW5k
bGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnN0cmluZygpOwotCi0gICAgQVNTRVJUKGhhbmRsZSk7
Ci0gICAgQVNTRVJUKGhhbmRsZS0+Y2xpZW50KCkpOwotCi0gICAgaW50IGluZGV4ID0gdXJsLmZp
bmQoJywnKTsKLSAgICBpZiAoaW5kZXggPT0gLTEpIHsKLSAgICAgICAgaGFuZGxlLT5jbGllbnQo
KS0+Y2Fubm90U2hvd1VSTChoYW5kbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
U3RyaW5nIG1lZGlhVHlwZSA9IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKLSAgICBTdHJp
bmcgZGF0YSA9IHVybC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLQotICAgIGJvb2wgYmFzZTY0ID0g
bWVkaWFUeXBlLmVuZHNXaXRoKCI7YmFzZTY0IiwgZmFsc2UpOwotICAgIGlmIChiYXNlNjQpCi0g
ICAgICAgIG1lZGlhVHlwZSA9IG1lZGlhVHlwZS5sZWZ0KG1lZGlhVHlwZS5sZW5ndGgoKSAtIDcp
OwotCi0gICAgaWYgKG1lZGlhVHlwZS5pc0VtcHR5KCkpCi0gICAgICAgIG1lZGlhVHlwZSA9ICJ0
ZXh0L3BsYWluIjsKLQotICAgIFN0cmluZyBtaW1lVHlwZSA9IGV4dHJhY3RNSU1FVHlwZUZyb21N
ZWRpYVR5cGUobWVkaWFUeXBlKTsKLSAgICBTdHJpbmcgY2hhcnNldCA9IGV4dHJhY3RDaGFyc2V0
RnJvbU1lZGlhVHlwZShtZWRpYVR5cGUpOwotCi0gICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgpKQot
ICAgICAgICBjaGFyc2V0ID0gIlVTLUFTQ0lJIjsKLQotICAgIFJlc291cmNlUmVzcG9uc2UgcmVz
cG9uc2U7Ci0gICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwotICAgIHJlc3BvbnNl
LnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7Ci0gICAgcmVzcG9uc2Uuc2V0VVJMKGhhbmRs
ZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCkpOwotCi0gICAgaWYgKGJhc2U2NCkgewotICAgICAgICBk
YXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEpOwotICAgICAgICBoYW5kbGUtPmNs
aWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCBXVEZNb3ZlKHJlc3BvbnNlKSk7Ci0K
LSAgICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8g
YmUgZGVsZXRlZC4KLSAgICAgICAgaWYgKGhhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAg
IFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgICAgICAgICBpZiAoYmFzZTY0RGVjb2RlKGRhdGEsIG91
dCwgQmFzZTY0SWdub3JlU3BhY2VzQW5kTmV3TGluZXMpICYmIG91dC5zaXplKCkgPiAwKQotICAg
ICAgICAgICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPmRpZFJlY2VpdmVEYXRhKGhhbmRsZSwgb3V0
LmRhdGEoKSwgb3V0LnNpemUoKSwgMCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcoY2hhcnNldCk7Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVV
UkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSwgZW5jb2RpbmcpOwotICAgICAgICBoYW5kbGUtPmNsaWVu
dCgpLT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLCBXVEZNb3ZlKHJlc3BvbnNlKSk7Ci0KLSAg
ICAgICAgLy8gZGlkUmVjZWl2ZVJlc3BvbnNlIG1pZ2h0IGNhdXNlIHRoZSBjbGllbnQgdG8gYmUg
ZGVsZXRlZC4KLSAgICAgICAgaWYgKGhhbmRsZS0+Y2xpZW50KCkpIHsKLSAgICAgICAgICAgIENT
dHJpbmcgZW5jb2RlZERhdGEgPSBlbmNvZGluZy5lbmNvZGUoZGF0YSwgVVJMRW5jb2RlZEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKTsKLSAgICAgICAgICAgIGlmIChlbmNvZGVkRGF0YS5sZW5ndGgo
KSkKLSAgICAgICAgICAgICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlRGF0YShoYW5k
bGUsIGVuY29kZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEubGVuZ3RoKCksIDApOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKGhhbmRsZS0+Y2xpZW50KCkpCi0gICAgICAgIGhhbmRsZS0+
Y2xpZW50KCktPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlKTsKLX0KLQotdm9pZCBSZXNvdXJjZUhh
bmRsZU1hbmFnZXI6OmRpc3BhdGNoU3luY2hyb25vdXNKb2IoUmVzb3VyY2VIYW5kbGUqIGpvYikK
LXsKLSAgICBVUkwga3VybCA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCk7Ci0KLSAgICBpZiAo
a3VybC5wcm90b2NvbElzRGF0YSgpKSB7Ci0gICAgICAgIGhhbmRsZURhdGFVUkwoam9iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGhhbmRs
ZSA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLQotICAgIC8vIElmIGRlZmVyc0xvYWRpbmcgaXMgdHJ1
ZSBhbmQgd2UgY2FsbCBjdXJsX2Vhc3lfcGVyZm9ybQotICAgIC8vIG9uIGEgcGF1c2VkIGhhbmRs
ZSwgbGliY1VSTCB3b3VsZCBkbyB0aGUgdHJhbnNmZXJ0IGFueXdheQotICAgIC8vIGFuZCB3ZSB3
b3VsZCBhc3NlcnQgc28gZm9yY2UgZGVmZXJzTG9hZGluZyB0byBiZSBmYWxzZS4KLSAgICBoYW5k
bGUtPm1fZGVmZXJzTG9hZGluZyA9IGZhbHNlOwotCi0gICAgaW5pdGlhbGl6ZUhhbmRsZShqb2Ip
OwotCi0gICAgLy8gY3VybF9lYXN5X3BlcmZvcm0gYmxvY2tzIHVudGlsIHRoZSB0cmFuc2ZlcnQg
aXMgZmluaXNoZWQuCi0gICAgQ1VSTGNvZGUgcmV0ID0gIGN1cmxfZWFzeV9wZXJmb3JtKGhhbmRs
ZS0+bV9oYW5kbGUpOwotCi0gICAgaWYgKHJldCAhPSBDVVJMRV9PSykgewotICAgICAgICBSZXNv
dXJjZUVycm9yIGVycm9yKEFTQ0lJTGl0ZXJhbChlcnJvckRvbWFpbkN1cmwpLCByZXQsIGt1cmws
IFN0cmluZyhjdXJsX2Vhc3lfc3RyZXJyb3IocmV0KSkpOwotICAgICAgICBlcnJvci5zZXRTU0xF
cnJvcnMoaGFuZGxlLT5tX3NzbEVycm9ycyk7Ci0gICAgICAgIGhhbmRsZS0+Y2xpZW50KCktPmRp
ZEZhaWwoam9iLCBlcnJvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGhhbmRsZS0+Y2xp
ZW50KCkpCi0gICAgICAgICAgICBoYW5kbGUtPmNsaWVudCgpLT5kaWRSZWNlaXZlUmVzcG9uc2Uo
am9iLCBSZXNvdXJjZVJlc3BvbnNlKGhhbmRsZS0+bV9yZXNwb25zZSkpOwotICAgIH0KLQotI2lm
IEVOQUJMRShXRUJfVElNSU5HKQotICAgIGNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyho
YW5kbGUpOwotI2VuZGlmCi0KLSAgICBjdXJsX2Vhc3lfY2xlYW51cChoYW5kbGUtPm1faGFuZGxl
KTsKLX0KLQogdm9pZCBSZXNvdXJjZUhhbmRsZU1hbmFnZXI6OnN0YXJ0Sm9iKFJlc291cmNlSGFu
ZGxlKiBqb2IpCiB7CiAgICAgVVJMIHVybCA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkudXJsKCk7CiAK
ICAgICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkpIHsKLSAgICAgICAgaGFuZGxlRGF0YVVSTChq
b2IpOworICAgICAgICBqb2ItPmhhbmRsZURhdGFVUkwoKTsKICAgICAgICAgam9iLT5kZXJlZigp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5pdGlhbGl6ZUhhbmRsZShqb2IpOwor
ICAgIGpvYi0+aW5pdGlhbGl6ZSgpOwogCiAgICAgbV9ydW5uaW5nSm9icysrOwogICAgIENVUkxN
Y29kZSByZXQgPSBjdXJsX211bHRpX2FkZF9oYW5kbGUobV9jdXJsTXVsdGlIYW5kbGUsIGpvYi0+
Z2V0SW50ZXJuYWwoKS0+bV9oYW5kbGUpOwpAQCAtODY1LDE4OCArMjQ3LDYgQEAgdm9pZCBSZXNv
dXJjZUhhbmRsZU1hbmFnZXI6OnN0YXJ0Sm9iKFJlc291cmNlSGFuZGxlKiBqb2IpCiAgICAgfQog
fQogCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6YXBwbHlBdXRoZW50aWNhdGlvblRvUmVx
dWVzdChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17
Ci0gICAgLy8gbV91c2VyL21fcGFzcyBhcmUgY3JlZGVudGlhbHMgZ2l2ZW4gbWFudWFsbHksIGZv
ciBpbnN0YW5jZSwgYnkgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gWE1MSHR0cFJlcXVlc3Qub3Bl
bigpLgotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFs
KCk7Ci0KLSAgICBTdHJpbmcgcGFydGl0aW9uID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKS5jYWNo
ZVBhcnRpdGlvbigpOwotCi0gICAgaWYgKGhhbmRsZS0+c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3Jh
Z2UoKSkgewotICAgICAgICBpZiAoZC0+bV91c2VyLmlzRW1wdHkoKSAmJiBkLT5tX3Bhc3MuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyA8cmRhcjovL3Byb2JsZW0vNzE3NDA1MD4gLSBGb3Ig
VVJMcyB0aGF0IG1hdGNoIHRoZSBwYXRocyBvZiB0aG9zZSBwcmV2aW91c2x5IGNoYWxsZW5nZWQg
Zm9yIEhUVFAgQmFzaWMgYXV0aGVudGljYXRpb24sIAotICAgICAgICAgICAgLy8gdHJ5IGFuZCBy
ZXVzZSB0aGUgY3JlZGVudGlhbCBwcmVlbXB0aXZlbHksIGFzIGFsbG93ZWQgYnkgUkZDIDI2MTcu
Ci0gICAgICAgICAgICBkLT5tX2luaXRpYWxDcmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6
OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLmdldChwYXJ0aXRpb24sIHJlcXVlc3QudXJsKCkp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBh
IHByb3RlY3Rpb24gc3BhY2Uga25vd24gZm9yIHRoZSBVUkwsIHVwZGF0ZSBzdG9yZWQgY3JlZGVu
dGlhbHMKLSAgICAgICAgICAgIC8vIGJlZm9yZSBzZW5kaW5nIGEgcmVxdWVzdC4gVGhpcyBtYWtl
cyBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgbG9nb3V0IGJ5IHNlbmRpbmcgYW4KLSAgICAgICAg
ICAgIC8vIFhNTEh0dHBSZXF1ZXN0IHdpdGgga25vd24gaW5jb3JyZWN0IGNyZWRlbnRpYWxzLCBh
bmQgYWJvcnRpbmcgaXQgaW1tZWRpYXRlbHkgKHNvIHRoYXQKLSAgICAgICAgICAgIC8vIGFuIGF1
dGhlbnRpY2F0aW9uIGRpYWxvZyBkb2Vzbid0IHBvcCB1cCkuCi0gICAgICAgICAgICBDcmVkZW50
aWFsU3RvcmFnZTo6ZGVmYXVsdENyZWRlbnRpYWxTdG9yYWdlKCkuc2V0KHBhcnRpdGlvbiwgQ3Jl
ZGVudGlhbChkLT5tX3VzZXIsIGQtPm1fcGFzcywgQ3JlZGVudGlhbFBlcnNpc3RlbmNlTm9uZSks
IHJlcXVlc3QudXJsKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nIHVzZXIgPSBk
LT5tX3VzZXI7Ci0gICAgU3RyaW5nIHBhc3N3b3JkID0gZC0+bV9wYXNzOwotCi0gICAgaWYgKCFk
LT5tX2luaXRpYWxDcmVkZW50aWFsLmlzRW1wdHkoKSkgewotICAgICAgICB1c2VyID0gZC0+bV9p
bml0aWFsQ3JlZGVudGlhbC51c2VyKCk7Ci0gICAgICAgIHBhc3N3b3JkID0gZC0+bV9pbml0aWFs
Q3JlZGVudGlhbC5wYXNzd29yZCgpOwotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFu
ZGxlLCBDVVJMT1BUX0hUVFBBVVRILCBDVVJMQVVUSF9CQVNJQyk7Ci0gICAgfQotCi0gICAgLy8g
SXQgc2VlbXMgd2UgbmVlZCB0byBzZXQgQ1VSTE9QVF9VU0VSUFdEIGV2ZW4gaWYgdXNlcm5hbWUg
YW5kIHBhc3N3b3JkIGlzIGVtcHR5LgotICAgIC8vIE90aGVyd2lzZSBjVVJMIHdpbGwgbm90IGF1
dG9tYXRpY2FsbHkgY29udGludWUgd2l0aCBhIG5ldyByZXF1ZXN0IGFmdGVyIGEgNDAxIHJlc3Bv
bnNlLgotCi0gICAgLy8gY3VybCBDVVJMT1BUX1VTRVJQV0QgZXhwZWN0cyB1c2VybmFtZTpwYXNz
d29yZAotICAgIFN0cmluZyB1c2VycGFzcyA9IHVzZXIgKyAiOiIgKyBwYXNzd29yZDsKLSAgICBj
dXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0
ZjgoKS5kYXRhKCkpOwotfQotCi12b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6aW5pdGlhbGl6
ZUhhbmRsZShSZXNvdXJjZUhhbmRsZSogam9iKQotewotICAgIEN1cmxDb250ZXh0JiBjb250ZXh0
ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOwotCi0gICAgc3RhdGljIGNvbnN0IGludCBhbGxv
d2VkUHJvdG9jb2xzID0gQ1VSTFBST1RPX0ZJTEUgfCBDVVJMUFJPVE9fRlRQIHwgQ1VSTFBST1RP
X0ZUUFMgfCBDVVJMUFJPVE9fSFRUUCB8IENVUkxQUk9UT19IVFRQUzsKLSAgICBVUkwgdXJsID0g
am9iLT5maXJzdFJlcXVlc3QoKS51cmwoKTsKLQotICAgIC8vIFJlbW92ZSBhbnkgZnJhZ21lbnQg
cGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5kIGl0IGFzIHBhcnQgb2YgdGhlIHJlcXVlc3Qu
Ci0gICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwotCi0gICAgUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKLSAgICBTdHJpbmcgdXJsU3RyaW5n
ID0gdXJsLnN0cmluZygpOwotCi0gICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKSB7Ci0gICAgICAg
IC8vIFJlbW92ZSBhbnkgcXVlcnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZS4KLSAgICAgICAg
aWYgKCF1cmwucXVlcnkoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcg
dGhlIHF1ZXJ5IHRvIGEgbnVsbCBzdHJpbmcgaXQnbGwgYmUgcmVtb3ZlZC4KLSAgICAgICAgICAg
IHVybC5zZXRRdWVyeShTdHJpbmcoKSk7Ci0gICAgICAgICAgICB1cmxTdHJpbmcgPSB1cmwuc3Ry
aW5nKCk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBNSU1FIHR5cGUgYmFz
ZWQgb24gdGhlIHBhdGguCi0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5
cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQYXRoKHVybCkpOwotICAgIH0KLQotICAgIGQtPm1f
aGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKLQotICAgIGlmIChkLT5tX2RlZmVyc0xvYWRpbmcp
IHsKLSAgICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBjdXJsX2Vhc3lfcGF1c2UoZC0+bV9oYW5kbGUs
IENVUkxQQVVTRV9BTEwpOwotICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IHBhdXNlIHRoZSBoYW5k
bGUsIHdlIHdvdWxkIEFTU0VSVCBpbiB0aGUKLSAgICAgICAgLy8gaGVhZGVyIGNhbGxiYWNrLiBT
byBqdXN0IGFzc2VydCBoZXJlLgotICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBlcnJvciA9
PSBDVVJMRV9PSyk7Ci0gICAgfQotI2lmbmRlZiBOREVCVUcKLSAgICBpZiAoY29udGV4dC5pc1Zl
cmJvc2UoKSkKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9W
RVJCT1NFLCAxKTsKLSAgICBpZiAoY29udGV4dC5nZXRMb2dGaWxlKCkpCi0gICAgICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1RERVJSLCBjb250ZXh0LmdldExvZ0Zp
bGUoKSk7Ci0jZW5kaWYKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BU
X1NTTF9WRVJJRllQRUVSLCAxTCk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwg
Q1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMkwpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfUFJJVkFURSwgam9iKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBtX2N1cmxFcnJvckJ1ZmZlcik7Ci0gICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZUNh
bGxiYWNrKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRF
REFUQSwgam9iKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hF
QURFUkZVTkNUSU9OLCBoZWFkZXJDYWxsYmFjayk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9XUklURUhFQURFUiwgam9iKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX0FVVE9SRUZFUkVSLCAxKTsKLSAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OLCAxKTsKLSAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX01BWFJFRElSUywgMTApOwotICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEFVVEgsIENVUkxBVVRIX0FOWSk7
Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TSEFSRSwgQ3VybENv
bnRleHQ6OnNpbmdsZXRvbigpLmN1cmxTaGFyZUhhbmRsZSgpKTsKLSAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0ROU19DQUNIRV9USU1FT1VULCA2MCAqIDUpOyAvLyA1
IG1pbnV0ZXMKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1RP
Q09MUywgYWxsb3dlZFByb3RvY29scyk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRs
ZSwgQ1VSTE9QVF9SRURJUl9QUk9UT0NPTFMsIGFsbG93ZWRQcm90b2NvbHMpOwotICAgIHNldFNT
TENsaWVudENlcnRpZmljYXRlKGpvYik7Ci0KLSAgICBpZiAoY29udGV4dC5zaG91bGRJZ25vcmVT
U0xFcnJvcnMoKSkKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9Q
VF9TU0xfVkVSSUZZUEVFUiwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgc2V0U1NMVmVyaWZ5
T3B0aW9ucyhqb2IpOwotCi0gICAgY29uc3QgY2hhciogY2VydGlmaWNhdGUgPSBjb250ZXh0Lmdl
dENlcnRpZmljYXRlUGF0aCgpOwotICAgIGlmIChjZXJ0aWZpY2F0ZSkKLSAgICAgICAgY3VybF9l
YXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9DQUlORk8sIGNlcnRpZmljYXRlKTsKLQot
ICAgIC8vIGVuYWJsZSBnemlwIGFuZCBkZWZsYXRlIHRocm91Z2ggQWNjZXB0LUVuY29kaW5nOgot
ICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfRU5DT0RJTkcsICIiKTsK
LQotICAgIC8vIHVybCBtdXN0IHJlbWFpbiB2YWxpZCB0aHJvdWdoIHRoZSByZXF1ZXN0Ci0gICAg
QVNTRVJUKCFkLT5tX3VybCk7Ci0KLSAgICAvLyB1cmwgaXMgaW4gQVNDSUkgc28gbGF0aW4xKCkg
d2lsbCBvbmx5IGNvbnZlcnQgaXQgdG8gY2hhciogd2l0aG91dCBjaGFyYWN0ZXIgdHJhbnNsYXRp
b24uCi0gICAgZC0+bV91cmwgPSBmYXN0U3RyRHVwKHVybFN0cmluZy5sYXRpbjEoKS5kYXRhKCkp
OwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVJMLCBkLT5tX3Vy
bCk7Ci0KLSAgICBjb25zdCBjaGFyKiBjb29raWVKYXIgPSBjb250ZXh0LmdldENvb2tpZUphckZp
bGVOYW1lKCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChk
LT5tX2hhbmRsZSwgQ1VSTE9QVF9DT09LSUVKQVIsIGNvb2tpZUphcik7Ci0KLSAgICBzdHJ1Y3Qg
Y3VybF9zbGlzdCogaGVhZGVycyA9IDA7Ci0gICAgaWYgKGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0
cEhlYWRlckZpZWxkcygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgSFRUUEhlYWRlck1hcCBjdXN0
b21IZWFkZXJzID0gam9iLT5maXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCk7Ci0KLSAg
ICAgICAgYm9vbCBoYXNDYWNoZUhlYWRlcnMgPSBjdXN0b21IZWFkZXJzLmNvbnRhaW5zKEhUVFBI
ZWFkZXJOYW1lOjpJZk1vZGlmaWVkU2luY2UpIHx8IGN1c3RvbUhlYWRlcnMuY29udGFpbnMoSFRU
UEhlYWRlck5hbWU6OklmTm9uZU1hdGNoKTsKLSAgICAgICAgaWYgKCFoYXNDYWNoZUhlYWRlcnMg
JiYgQ3VybENhY2hlTWFuYWdlcjo6Z2V0SW5zdGFuY2UoKS5pc0NhY2hlZCh1cmwpKSB7Ci0gICAg
ICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmFkZENhY2hlRW50cnlDbGll
bnQodXJsLCBqb2IpOwotICAgICAgICAgICAgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhlYWRlcnMg
PSBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLnJlcXVlc3RIZWFkZXJzKHVybCk7Ci0K
LSAgICAgICAgICAgIC8vIGFwcGVuZCBhZGRpdGlvbmFsIGNhY2hlIGluZm9ybWF0aW9uCi0gICAg
ICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJlcXVlc3RIZWFkZXJz
LmJlZ2luKCk7Ci0gICAgICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSByZXF1ZXN0SGVhZGVycy5lbmQoKTsKLSAgICAgICAgICAgIHdoaWxlIChpdCAhPSBlbmQpIHsK
LSAgICAgICAgICAgICAgICBjdXN0b21IZWFkZXJzLnNldChpdC0+a2V5LCBpdC0+dmFsdWUpOwot
ICAgICAgICAgICAgICAgICsraXQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkLT5tX2Fk
ZGVkQ2FjaGVWYWxpZGF0aW9uSGVhZGVycyA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBI
VFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBjdXN0b21IZWFkZXJzLmVuZCgpOwot
ICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY3VzdG9tSGVh
ZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFN0cmluZyBrZXkg
PSBpdC0+a2V5OwotICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gaXQtPnZhbHVlOwotICAgICAg
ICAgICAgU3RyaW5nIGhlYWRlclN0cmluZyhrZXkpOwotICAgICAgICAgICAgaWYgKHZhbHVlLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIDsgdG8gdGVsbCBjdXJsIHRo
YXQgdGhpcyBoZWFkZXIgaGFzIGFuIGVtcHR5IHZhbHVlLgotICAgICAgICAgICAgICAgIGhlYWRl
clN0cmluZy5hcHBlbmQoIjsiKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAg
IGhlYWRlclN0cmluZy5hcHBlbmQoIjogIik7Ci0gICAgICAgICAgICAgICAgaGVhZGVyU3RyaW5n
LmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDU3RyaW5nIGhlYWRl
ckxhdGluMSA9IGhlYWRlclN0cmluZy5sYXRpbjEoKTsKLSAgICAgICAgICAgIGhlYWRlcnMgPSBj
dXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBoZWFkZXJMYXRpbjEuZGF0YSgpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIFN0cmluZyBtZXRob2QgPSBqb2ItPmZpcnN0UmVxdWVzdCgpLmh0dHBN
ZXRob2QoKTsKLSAgICBpZiAoIkdFVCIgPT0gbWV0aG9kKQotICAgICAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0hUVFBHRVQsIFRSVUUpOwotICAgIGVsc2UgaWYgKCJQ
T1NUIiA9PSBtZXRob2QpCi0gICAgICAgIHNldHVwUE9TVChqb2IsICZoZWFkZXJzKTsKLSAgICBl
bHNlIGlmICgiUFVUIiA9PSBtZXRob2QpCi0gICAgICAgIHNldHVwUFVUKGpvYiwgJmhlYWRlcnMp
OwotICAgIGVsc2UgaWYgKCJIRUFEIiA9PSBtZXRob2QpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfTk9CT0RZLCBUUlVFKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9DVVNUT01SRVFVRVNULCBt
ZXRob2QuYXNjaWkoKS5kYXRhKCkpOwotICAgICAgICBzZXR1cFBVVChqb2IsICZoZWFkZXJzKTsK
LSAgICB9Ci0KLSAgICBpZiAoaGVhZGVycykgewotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQt
Pm1faGFuZGxlLCBDVVJMT1BUX0hUVFBIRUFERVIsIGhlYWRlcnMpOwotICAgICAgICBkLT5tX2N1
c3RvbUhlYWRlcnMgPSBoZWFkZXJzOwotICAgIH0KLQotICAgIGFwcGx5QXV0aGVudGljYXRpb25U
b1JlcXVlc3Qoam9iLCBqb2ItPmZpcnN0UmVxdWVzdCgpKTsKLQotICAgIC8vIFNldCBwcm94eSBv
cHRpb25zIGlmIHdlIGhhdmUgdGhlbS4KLSAgICBhdXRvJiBwcm94eSA9IEN1cmxDb250ZXh0Ojpz
aW5nbGV0b24oKS5wcm94eUluZm8oKTsKLSAgICBpZiAocHJveHkudHlwZSAhPSBDdXJsUHJveHlU
eXBlOjpJbnZhbGlkKSB7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfUFJPWFksIHByb3h5LnVybCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BST1hZVFlQRSwgcHJveHkudHlwZSk7Ci0g
ICAgfQotfQotCiB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6Y2FuY2VsKFJlc291cmNlSGFu
ZGxlKiBqb2IpCiB7CiAgICAgaWYgKHJlbW92ZVNjaGVkdWxlZEpvYihqb2IpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFu
YWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFu
ZGxlTWFuYWdlci5oCmluZGV4IGY0MWIwMWY2NTc1Li4yYmY0YzdjNWVkOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhh
bmRsZU1hbmFnZXIuaApAQCAtNTAsMTEgKzUwLDYgQEAgcHVibGljOgogICAgIHZvaWQgYWRkKFJl
c291cmNlSGFuZGxlKik7CiAgICAgdm9pZCBjYW5jZWwoUmVzb3VyY2VIYW5kbGUqKTsKIAotICAg
IHZvaWQgZGlzcGF0Y2hTeW5jaHJvbm91c0pvYihSZXNvdXJjZUhhbmRsZSopOwotCi0gICAgdm9p
ZCBzZXR1cFBPU1QoUmVzb3VyY2VIYW5kbGUqLCBzdHJ1Y3QgY3VybF9zbGlzdCoqKTsKLSAgICB2
b2lkIHNldHVwUFVUKFJlc291cmNlSGFuZGxlKiwgc3RydWN0IGN1cmxfc2xpc3QqKik7Ci0KIHBy
aXZhdGU6CiAgICAgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCk7CiAgICAgflJlc291cmNlSGFuZGxl
TWFuYWdlcigpOwpAQCAtNjMsMTMgKzU4LDkgQEAgcHJpdmF0ZToKICAgICBib29sIHJlbW92ZVNj
aGVkdWxlZEpvYihSZXNvdXJjZUhhbmRsZSopOwogICAgIHZvaWQgc3RhcnRKb2IoUmVzb3VyY2VI
YW5kbGUqKTsKICAgICBib29sIHN0YXJ0U2NoZWR1bGVkSm9icygpOwotICAgIHZvaWQgYXBwbHlB
dXRoZW50aWNhdGlvblRvUmVxdWVzdChSZXNvdXJjZUhhbmRsZSosIFJlc291cmNlUmVxdWVzdCYp
OwotCi0gICAgdm9pZCBpbml0aWFsaXplSGFuZGxlKFJlc291cmNlSGFuZGxlKik7CiAKICAgICBU
aW1lciBtX2Rvd25sb2FkVGltZXI7CiAgICAgQ1VSTE0qIG1fY3VybE11bHRpSGFuZGxlOwotICAg
IGNoYXIgbV9jdXJsRXJyb3JCdWZmZXJbQ1VSTF9FUlJPUl9TSVpFXTsKICAgICBWZWN0b3I8UmVz
b3VyY2VIYW5kbGUqPiBtX3Jlc291cmNlSGFuZGxlTGlzdDsKICAgICBpbnQgbV9ydW5uaW5nSm9i
czsKIH07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>