<?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>136336</bug_id>
          
          <creation_ts>2014-08-28 03:17:17 -0700</creation_ts>
          <short_desc>[GTK] Merge RenderThemeGtk3.cpp into RenderThemeGtk.cpp and ScrollbarThemeGtk3.cpp intoScrollbarThemeGtk.cpp</short_desc>
          <delta_ts>2014-08-29 00:39:33 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>136338</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1031951</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-28 03:17:17 -0700</bug_when>
    <thetext>There&apos;s no reason to have two files now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031952</commentid>
    <comment_count>1</comment_count>
      <attachid>237303</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-28 03:33:17 -0700</bug_when>
    <thetext>Created attachment 237303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032126</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-08-29 00:39:33 -0700</bug_when>
    <thetext>Committed r173109: &lt;http://trac.webkit.org/changeset/173109&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237303</attachid>
            <date>2014-08-28 03:33:17 -0700</date>
            <delta_ts>2014-08-28 08:06:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-render-theme-unified.diff</filename>
            <type>text/plain</type>
            <size>109866</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4OWYzNmQ2Li4yYjExMzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIg
QEAKIDIwMTQtMDgtMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIE1lcmdlIFJlbmRlclRoZW1lR3RrMy5jcHAgaW50byBSZW5kZXJU
aGVtZUd0ay5jcHAgYW5kIFNjcm9sbGJhclRoZW1lR3RrMy5jcHAgaW50b1Njcm9sbGJhclRoZW1l
R3RrLmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2MzM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhlcmUncyBubyByZWFzb24gdG8gaGF2ZSB0d28gZmlsZXMgbm93IHRoYXQgdGhlcmUncyBubyBH
VEsrMgorICAgICAgICBzdXBwb3J0LiBBbHNvIGZpeCBjb2Rpbmcgc3R5bGUgaXNzdWVzIGFuZCBj
b21waWxlIHdhcm5pbmdzLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvUmVuZGVyVGhlbWVHdGsuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVH
dGszLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVH
dGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwOiBS
ZW1vdmVkLgorCisyMDE0LTA4LTI4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKwogICAgICAgICBbR1RLXSBSZW1vdmUgc3VwcG9ydCBmb3IgR1RLKzIgdGhlbWUg
cmVuZGVyaW5nCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzYyODUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBhZmQ5OTczLi42MWY3NTU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMjM5LDkgKzIzOSw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVQbGF0Zm9ybUdUS19TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3RrL1BsYXRmb3Jt
V2hlZWxFdmVudEd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvUmVkaXJlY3RlZFhDb21wb3NpdGVX
aW5kb3cuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcAotICAgIHBsYXRm
b3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRo
ZW1lR3RrLmNwcAotICAgIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1NoYXJlZEJ1ZmZlckd0ay5jcHAKICAgICBwbGF0Zm9ybS9ndGsvU2hhcmVk
VGltZXJHdGsuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1NvdW5kR3RrLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggMmZhMjdhNC4uNmU0
NmE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsu
Y3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2lu
Y2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dENhaXJvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCkBAIC01MCw2ICs1
MSw3IEBACiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRl
IDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC04OSw3ICs5MSw3IEBAIHZvaWQg
UmVuZGVyVGhlbWVHdGs6OnN5c3RlbUZvbnQoQ1NTVmFsdWVJRCwgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24pIGNvCiAKICAgICAvLyBUaGlzIHdpbGwgYmUgYSBmb250IHNlbGVjdGlv
biBzdHJpbmcgbGlrZSAiU2FucyAxMCIgc28gd2UgY2Fubm90IHVzZSBpdCBhcyB0aGUgZmFtaWx5
IG5hbWUuCiAgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gZm9udE5hbWU7Ci0gICAgZ19vYmplY3Rf
Z2V0KHNldHRpbmdzLCAiZ3RrLWZvbnQtbmFtZSIsICZmb250TmFtZS5vdXRQdHIoKSwgTlVMTCk7
CisgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWZvbnQtbmFtZSIsICZmb250TmFtZS5v
dXRQdHIoKSwgbnVsbHB0cik7CiAKICAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogcGFuZ29EZXNj
cmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJvbV9zdHJpbmcoZm9udE5hbWUuZ2V0
KCkpOwogICAgIGlmICghcGFuZ29EZXNjcmlwdGlvbikKQEAgLTEyNiwxMCArMTI4LDEzNiBAQCBp
bnQgUmVuZGVyVGhlbWVHdGs6OnNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25z
dAogCiAjaWZuZGVmIEdUS19BUElfVkVSU0lPTl8yCiAKLS8vIFRoaXMgd291bGQgYmUgYSBzdGF0
aWMgbWV0aG9kLCBleGNlcHQgdGhhdCBmb3J3YXJkIGRlY2xhcmluZyBHVHlwZSBpcyB0cmlja3ks
IHNpbmNlIGl0cwotLy8gZGVmaW5pdGlvbiBkZXBlbmRzIG9uIGluY2x1ZGluZyBnbGliLmgsIG5l
Z2F0aW5nIHRoZSBiZW5lZml0IG9mIHVzaW5nIGEgZm9yd2FyZCBkZWNsYXJhdGlvbi4KLWV4dGVy
biBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZShHVHlwZSwgY29u
c3QgY2hhciogaWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50IGljb25T
aXplKTsKLWV4dGVybiBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JX
aWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUs
IGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQg
c3RhdGUsIGdpbnQgaWNvblNpemUpOworLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZp
bmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19TSVpFIGluIGd0
a2Fycm93LmMuCitzdGF0aWMgY29uc3QgaW50IG1pbkFycm93U2l6ZSA9IDE1OworLy8gVGhpcyBp
cyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyssIHdoZXJlIGl0IHdhcyBkZWZpbmVk
IGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9uLmMuCitzdGF0aWMgY29uc3QgaW50
IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OworCit0eXBlZGVmIEhhc2hNYXA8R1R5cGUsIEdS
ZWZQdHI8R3RrU3R5bGVDb250ZXh0Pj4gU3R5bGVDb250ZXh0TWFwOworc3RhdGljIFN0eWxlQ29u
dGV4dE1hcCYgc3R5bGVDb250ZXh0TWFwKCk7CisKK3N0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdl
ZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IHN0eWxlQ29udGV4dCA6IHN0eWxlQ29udGV4dE1hcCgpKQorICAgICAgICBndGtfc3R5bGVfY29u
dGV4dF9pbnZhbGlkYXRlKHN0eWxlQ29udGV4dC52YWx1ZS5nZXQoKSk7CisgICAgUGFnZTo6dXBk
YXRlU3R5bGVGb3JBbGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9ubWVudCgpOworfQor
CitzdGF0aWMgU3R5bGVDb250ZXh0TWFwJiBzdHlsZUNvbnRleHRNYXAoKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxTdHlsZUNvbnRleHRNYXA+IG1hcDsKKyAgICBzdGF0aWMgYm9vbCBp
bml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgR3Rr
U2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJub3RpZnk6Omd0ay10aGVtZS1uYW1lIiwgR19D
QUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIG51bGxwdHIpOworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGstY29sb3Itc2NoZW1lIiwgR19DQUxM
QkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIG51bGxwdHIpOworICAgICAgICBpbml0aWFs
aXplZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyBHdGtTdHls
ZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQoreworICAgIFN0eWxl
Q29udGV4dE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0eWxlQ29udGV4dE1hcCgpLmFkZCh3aWRn
ZXRUeXBlLCBudWxscHRyKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKworICAgIEd0a1dpZGdldFBhdGgq
IHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7CisgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVu
ZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOworCisgICAgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZ
UEVfU0NST0xMQkFSKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0
aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlw
ZSA9PSBHVEtfVFlQRV9FTlRSWSkKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2Ns
YXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7CisgICAgZWxzZSBpZiAod2lkZ2V0
VHlwZSA9PSBHVEtfVFlQRV9BUlJPVykKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRk
X2NsYXNzKHBhdGgsIDAsICJhcnJvdyIpOworICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RL
X1RZUEVfQlVUVE9OKSB7CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhw
YXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRo
X2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDEsICJ0ZXh0LWJ1dHRvbiIpOworICAgIH0gZWxzZSBpZiAo
d2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TQ0FMRSkKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7CisgICAgZWxzZSBp
ZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TRVBBUkFUT1IpCisgICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfU0VQQVJBVE9SKTsK
KyAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1BST0dSRVNTX0JBUikKKyAgICAg
ICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFT
U19QUk9HUkVTU0JBUik7CisgICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TUElO
X0JVVFRPTikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAs
IEdUS19TVFlMRV9DTEFTU19TUElOQlVUVE9OKTsKKyAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09
IEdUS19UWVBFX1RSRUVfVklFVykKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2Ns
YXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19WSUVXKTsKKyAgICBlbHNlIGlmICh3aWRnZXRU
eXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19DSEVDSyk7CisgICAgZWxzZSBp
ZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9SQURJT19CVVRUT04pCisgICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfUkFESU8pOwor
CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX3N0
eWxlX2NvbnRleHRfbmV3KCkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRl
eHQuZ2V0KCksIHBhdGgpOworICAgIGd0a193aWRnZXRfcGF0aF9mcmVlKHBhdGgpOworCisgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNvbnRleHQ7CisgICAgcmV0dXJuIGNvbnRleHQuZ2V0
KCk7Cit9CisKK0d0a1N0eWxlQ29udGV4dCogUmVuZGVyVGhlbWVHdGs6Omd0a1Njcm9sbGJhclN0
eWxlKCkKK3sKKyAgICByZXR1cm4gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDUk9MTEJBUik7
Cit9CisKK3N0YXRpYyBHUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlw
ZShHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24s
IGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpCit7CisgICAgQVNTRVJUKGljb25OYW1lKTsKKwor
ICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRnZXRUeXBl
KTsKKyAgICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0eWxlX2NvbnRleHRfbG9va3VwX2lj
b25fc2V0KGNvbnRleHQsIGljb25OYW1lKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUo
Y29udGV4dCk7CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKHN0YXRlID09IEdUS19T
VEFURV9QUkVMSUdIVCkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7
CisgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQorICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKKworICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykp
OworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nh
c3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7CisgICAgR2RrUGl4YnVmKiBpY29uID0g
Z3RrX2ljb25fc2V0X3JlbmRlcl9pY29uX3BpeGJ1ZihpY29uU2V0LCBjb250ZXh0LCBzdGF0aWNf
Y2FzdDxHdGtJY29uU2l6ZT4oaWNvblNpemUpKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jl
c3RvcmUoY29udGV4dCk7CisKKyAgICByZXR1cm4gYWRvcHRHUmVmKGljb24pOworfQorCitzdGF0
aWMgR1JlZlB0cjxHZGtQaXhidWY+IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShH
VHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBzeW1ib2xpY0ljb25OYW1lLCBjb25zdCBjaGFy
KiBmYWxsYmFja1N0b2NrSWNvbk5hbWUsIGdpbnQgZGlyZWN0aW9uLCBnaW50IHN0YXRlLCBnaW50
IGljb25TaXplKQoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dCh3aWRnZXRUeXBlKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7
CisKKyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKHN0YXRlID09IEdUS19TVEFURV9QUkVM
SUdIVCkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7CisgICAgZWxz
ZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQorICAgICAgICBmbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9z
dGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworICAgIGd0
a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4
dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7CisgICAgR3RrSWNvbkluZm8qIGluZm8gPSBndGtfaWNv
bl90aGVtZV9sb29rdXBfaWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLCBzeW1ib2xp
Y0ljb25OYW1lLCBpY29uU2l6ZSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8R3RrSWNvbkxvb2t1cEZs
YWdzPihHVEtfSUNPTl9MT09LVVBfRk9SQ0VfU1ZHIHwgR1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NJ
WkUpKTsKKyAgICBHZGtQaXhidWYqIGljb24gPSAwOworICAgIGlmIChpbmZvKSB7CisgICAgICAg
IGljb24gPSBndGtfaWNvbl9pbmZvX2xvYWRfc3ltYm9saWNfZm9yX2NvbnRleHQoaW5mbywgY29u
dGV4dCwgMCwgMCk7CisgICAgICAgIGd0a19pY29uX2luZm9fZnJlZShpbmZvKTsKKyAgICB9CisK
KyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgaWYgKCFpY29u
KSB7CisgICAgICAgIGlmICghZmFsbGJhY2tTdG9ja0ljb25OYW1lKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKHdp
ZGdldFR5cGUsIGZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZGlyZWN0aW9uLCBzdGF0ZSwgaWNvblNp
emUpOworICAgIH0KKworICAgIHJldHVybiBhZG9wdEdSZWYoaWNvbik7Cit9CiAKICNpZiBFTkFC
TEUoVklERU8pCiBzdGF0aWMgSFRNTE1lZGlhRWxlbWVudCogZ2V0TWVkaWFFbGVtZW50RnJvbVJl
bmRlck9iamVjdChjb25zdCBSZW5kZXJPYmplY3QmIG8pCkBAIC0xNDQsNiArMjcyLDE5IEBAIHN0
YXRpYyBIVE1MTWVkaWFFbGVtZW50KiBnZXRNZWRpYUVsZW1lbnRGcm9tUmVuZGVyT2JqZWN0KGNv
bnN0IFJlbmRlck9iamVjdCYgbykKICAgICByZXR1cm4gdG9IVE1MTWVkaWFFbGVtZW50KG1lZGlh
Tm9kZSk7CiB9CiAKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmluaXRNZWRpYUNvbG9ycygpCit7Cisg
ICAgR2RrUkdCQSBjb2xvcjsKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRhaW5lckNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQ09OVEFJTkVSKTsKKworICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQsIEdUS19TVEFURV9G
TEFHX05PUk1BTCwgJmNvbG9yKTsKKyAgICBtX3BhbmVsQ29sb3IgPSBjb2xvcjsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBHVEtf
U1RBVEVfRkxBR19BQ1RJVkUsICZjb2xvcik7CisgICAgbV9zbGlkZXJDb2xvciA9IGNvbG9yOwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRl
eHQsIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmY29sb3IpOworICAgIG1fc2xpZGVyVGh1bWJD
b2xvciA9IGNvbG9yOworfQorCiB2b2lkIFJlbmRlclRoZW1lR3RrOjppbml0TWVkaWFCdXR0b25z
KCkKIHsKICAgICBzdGF0aWMgYm9vbCBpY29uc0luaXRpYWxpemVkID0gZmFsc2U7CkBAIC0xOTgs
MTMgKzMzOSwxNiBAQCBSZW5kZXJUaGVtZUd0azo6UmVuZGVyVGhlbWVHdGsoKQogICAgICwgbV9t
ZWRpYUljb25TaXplKDE2KQogICAgICwgbV9tZWRpYVNsaWRlckhlaWdodCgxNCkKIHsKLSAgICBw
bGF0Zm9ybUluaXQoKTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgaW5pdE1lZGlhQ29sb3JzKCk7
CiAgICAgaW5pdE1lZGlhQnV0dG9ucygpOwogI2VuZGlmCiB9CiAKK1JlbmRlclRoZW1lR3RrOjp+
UmVuZGVyVGhlbWVHdGsoKQoreworfQorCiBzdGF0aWMgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRy
b2xQYXJ0IGFwcGVhcmFuY2UpCiB7CiAgICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7CkBAIC0yNDks
MTAgKzM5Myw3IEBAIGludCBSZW5kZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBS
ZW5kZXJPYmplY3QmIG8pIGNvbnN0CiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBv
c2l0aW9uKG8pOwogfQogCi0vLyBUaGlzIGlzIHVzZWQgaW4gUmVuZGVyVGhlbWVHdGszLiBOb3Jt
YWxseSwgaXQgd291bGQgYmUgaW4KLS8vIHRoZSBSZW5kZXJUaGVtZUd0ayBoZWFkZXIgKHBlcmhh
cHMgYXMgYSBzdGF0aWMgbWV0aG9kKSwgYnV0IHdlIHdhbnQgdG8gYXZvaWQKLS8vIGhhdmluZyB0
byBpbmNsdWRlIEdUSysgaGVhZGVycyBvbmx5IGZvciB0aGUgR3RrVGV4dERpcmVjdGlvbiBlbnVt
LgotR3RrVGV4dERpcmVjdGlvbiBndGtUZXh0RGlyZWN0aW9uKFRleHREaXJlY3Rpb24gZGlyZWN0
aW9uKQorc3RhdGljIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbikKIHsKICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgIGNhc2UgUlRM
OgpAQCAtMjc2LDYgKzQxNyw1NyBAQCBzdGF0aWMgR3RrU3RhdGVUeXBlIGd0a0ljb25TdGF0ZShS
ZW5kZXJUaGVtZSogdGhlbWUsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyTwogICAgIHJldHVy
biBHVEtfU1RBVEVfTk9STUFMOwogfQogCitzdGF0aWMgdm9pZCBhZGp1c3RSZWN0Rm9yRm9jdXMo
R3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgZ2ludCBm
b2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29u
dGV4dCwgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgImZvY3VzLXBhZGRpbmciLCAm
Zm9jdXNQYWQsIG51bGxwdHIpOworICAgIHJlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQ
YWQpOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgRmxvYXRSZWN0JiByZWN0KQoreworICAgIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCA9IDA7CisgICAgYm9vbCBjaGVja0ludGVyaW9yRm9jdXMgPSBm
YWxzZTsKKyAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFy
YW5jZSgpOworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAg
IGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHBhcnQg
PT0gQ2hlY2tib3hQYXJ0ID8gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OIDogR1RLX1RZUEVfUkFESU9f
QlVUVE9OKTsKKworICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7CisgICAgICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5k
aWNhdG9yU3BhY2luZywgbnVsbHB0cik7CisgICAgICAgIHJlY3QuaW5mbGF0ZShpbmRpY2F0b3JT
cGFjaW5nKTsKKworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6
CisgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKKyAgICAgICAgY29udGV4dCA9IGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQnV0
dG9uUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0
UGFydDoKKyAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04p
OworICAgICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgICAgIGNv
bnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOworICAgICAgICBjaGVja0lu
dGVyaW9yRm9jdXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIGlmIChjaGVja0lu
dGVyaW9yRm9jdXMpIHsKKyAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKKyAgICAgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbnRlcmlvci1mb2N1cyIsICZp
bnRlcmlvckZvY3VzLCBudWxscHRyKTsKKyAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250ZXh0LCBy
ZWN0KTsKK30KKwogdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVS
ZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCYpIGNvbnN0CiB7
CiAgICAgLy8gU29tZSBsYXlvdXQgdGVzdHMgY2hlY2sgZXhwbGljaXRseSB0aGF0IGJ1dHRvbnMg
aWdub3JlIGxpbmUtaGVpZ2h0LgpAQCAtMjgzLDYgKzQ3NSwxODcgQEAgdm9pZCBSZW5kZXJUaGVt
ZUd0azo6YWRqdXN0QnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHls
ZSwgV2ViQ28KICAgICAgICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHNldFRvZ2dsZVNpemUoR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgLy8gVGhlIHdpZHRo
IGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRo
ZW0uCisgICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxl
LmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBPdGhlciBwb3J0
cyBoYXJkLWNvZGUgdGhpcyB0byAxMyB3aGljaCBpcyBhbHNvIHRoZSBkZWZhdWx0IHZhbHVlIGRl
ZmluZWQgYnkgR1RLKy4KKyAgICAvLyBHVEsrIHVzZXJzIHRlbmQgdG8gZGVtYW5kIHRoZSBuYXRp
dmUgbG9vay4KKyAgICAvLyBJdCBjb3VsZCBiZSBtYWRlIGEgY29uZmlndXJhdGlvbiBvcHRpb24g
dmFsdWVzIG90aGVyIHRoYW4gMTMgYWN0dWFsbHkgYnJlYWsgc2l0ZSBjb21wYXRpYmlsaXR5Lgor
ICAgIGdpbnQgaW5kaWNhdG9yU2l6ZTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
Y29udGV4dCwgImluZGljYXRvci1zaXplIiwgJmluZGljYXRvclNpemUsIG51bGxwdHIpOworCisg
ICAgaWYgKHN0eWxlLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgc3R5bGUu
c2V0V2lkdGgoTGVuZ3RoKGluZGljYXRvclNpemUsIEZpeGVkKSk7CisKKyAgICBpZiAoc3R5bGUu
aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoaW5kaWNh
dG9yU2l6ZSwgRml4ZWQpKTsKK30KKworc3RhdGljIHZvaWQgcGFpbnRUb2dnbGUoY29uc3QgUmVu
ZGVyVGhlbWVHdGsqIHRoZW1lLCBHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IGZ1bGxSZWN0KQoreworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dCh3aWRnZXRUeXBlKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwor
CisgICAgLy8gU29tZSB0aGVtZXMgZG8gbm90IHJlbmRlciBsYXJnZSB0b2dnbGUgYnV0dG9ucyBw
cm9wZXJseSwgc28gd2Ugc2ltcGx5CisgICAgLy8gc2hyaW5rIHRoZSByZWN0YW5nbGUgYmFjayBk
b3duIHRvIHRoZSBkZWZhdWx0IHNpemUgYW5kIHRoZW4gY2VudGVyIGl0CisgICAgLy8gaW4gdGhl
IGZ1bGwgdG9nZ2xlIGJ1dHRvbiByZWdpb24uIFRoZSByZWFzb24gZm9yIG5vdCBzaW1wbHkgZm9y
Y2luZyB0b2dnbGUKKyAgICAvLyBidXR0b25zIHRvIGJlIGEgc21hbGxlciBzaXplIGlzIHRoYXQg
d2UgZG9uJ3Qgd2FudCB0byBicmVhayBzaXRlIGxheW91dHMuCisgICAgZ2ludCBpbmRpY2F0b3JT
aXplOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9y
LXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgbnVsbHB0cik7CisgICAgSW50UmVjdCByZWN0KGZ1bGxS
ZWN0KTsKKyAgICBpZiAocmVjdC53aWR0aCgpID4gaW5kaWNhdG9yU2l6ZSkgeworICAgICAgICBy
ZWN0LmluZmxhdGVYKC0ocmVjdC53aWR0aCgpIC0gaW5kaWNhdG9yU2l6ZSkgLyAyKTsKKyAgICAg
ICAgcmVjdC5zZXRXaWR0aChpbmRpY2F0b3JTaXplKTsgLy8gSW4gY2FzZSByZWN0LndpZHRoKCkg
d2FzIGVxdWFsIHRvIGluZGljYXRvclNpemUgKyAxLgorICAgIH0KKworICAgIGlmIChyZWN0Lmhl
aWdodCgpID4gaW5kaWNhdG9yU2l6ZSkgeworICAgICAgICByZWN0LmluZmxhdGVZKC0ocmVjdC5o
ZWlnaHQoKSAtIGluZGljYXRvclNpemUpIC8gMik7CisgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGlu
ZGljYXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3QuaGVpZ2h0KCkgd2FzIGVxdWFsIHRvIGluZGlj
YXRvclNpemUgKyAxLgorICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rp
b24oY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpKTsKKyAgICBndGtfc3R5bGVfY29u
dGV4dF9hZGRfY2xhc3MoY29udGV4dCwgd2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRU
T04gPyBHVEtfU1RZTEVfQ0xBU1NfQ0hFQ0sgOiBHVEtfU1RZTEVfQ0xBU1NfUkFESU8pOworCisg
ICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmpl
Y3QpIHx8IHRoZW1lLT5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQorICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKKyAgICBlbHNlIGlmICh0aGVtZS0+
aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X1BSRUxJR0hUOworICAgIGlmICh0aGVtZS0+aXNJbmRldGVybWluYXRlKHJlbmRlck9iamVjdCkp
CisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOQ09OU0lTVEVOVDsKKyAgICBlbHNl
IGlmICh0aGVtZS0+aXNDaGVja2VkKHJlbmRlck9iamVjdCkpCisjaWYgR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMTMsIDcpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0NIRUNLRUQ7Cisj
ZWxzZQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7CisjZW5kaWYKKyAg
ICBpZiAodGhlbWUtPmlzUHJlc3NlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19TRUxFQ1RFRDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUo
Y29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKworICAgIGlmICh3
aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTikKKyAgICAgICAgZ3RrX3JlbmRlcl9j
aGVjayhjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCks
IHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBl
bHNlCisgICAgICAgIGd0a19yZW5kZXJfb3B0aW9uKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2Jq
ZWN0KSkgeworICAgICAgICBJbnRSZWN0IGluZGljYXRvclJlY3QocmVjdCk7CisgICAgICAgIGdp
bnQgaW5kaWNhdG9yU3BhY2luZzsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxl
KGNvbnRleHQsICJpbmRpY2F0b3Itc3BhY2luZyIsICZpbmRpY2F0b3JTcGFjaW5nLCBudWxscHRy
KTsKKyAgICAgICAgaW5kaWNhdG9yUmVjdC5pbmZsYXRlKGluZGljYXRvclNwYWNpbmcpOworICAg
ICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSwgaW5kaWNhdG9yUmVjdC54KCksIGluZGljYXRvclJlY3QueSgpLAor
ICAgICAgICAgICAgaW5kaWNhdG9yUmVjdC53aWR0aCgpLCBpbmRpY2F0b3JSZWN0LmhlaWdodCgp
KTsKKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAoreworICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NI
RUNLX0JVVFRPTiksIHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVj
a2JveChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcGFpbnRUb2dnbGUodGhpcywg
R1RLX1RZUEVfQ0hFQ0tfQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUo
UmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAoreworICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX1JBRElPX0JVVFRPTiksIHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcGFp
bnRUb2dnbGUodGhpcywgR1RLX1RZUEVfUkFESU9fQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50
SW5mbywgcmVjdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJC
dXR0b24oUmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7CisK
KyAgICBndWludCBmbGFncyA9IDA7CisgICAgaWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9i
amVjdCkgfHwgdGhlbWUtPmlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAg
IGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2UgaWYgKHRoZW1l
LT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZM
QUdfUFJFTElHSFQ7CisgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAg
ICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykp
OworCisgICAgaWYgKHRoZW1lLT5pc0RlZmF1bHQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICBH
dGtCb3JkZXIqIGJvcmRlclB0ciA9IDA7CisgICAgICAgIEd0a0JvcmRlciBib3JkZXIgPSB7IDEs
IDEsIDEsIDEgfTsKKworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4
dCwgImRlZmF1bHQtYm9yZGVyIiwgJmJvcmRlclB0ciwgbnVsbHB0cik7CisgICAgICAgIGlmIChi
b3JkZXJQdHIpIHsKKyAgICAgICAgICAgIGJvcmRlciA9ICpib3JkZXJQdHI7CisgICAgICAgICAg
ICBndGtfYm9yZGVyX2ZyZWUoYm9yZGVyUHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1dHRv
blJlY3QubW92ZShib3JkZXIubGVmdCwgYm9yZGVyLnRvcCk7CisgICAgICAgIGJ1dHRvblJlY3Qu
c2V0V2lkdGgoYnV0dG9uUmVjdC53aWR0aCgpIC0gKGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0
KSk7CisgICAgICAgIGJ1dHRvblJlY3Quc2V0SGVpZ2h0KGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSAo
Ym9yZGVyLnRvcCArIGJvcmRlci5ib3R0b20pKTsKKworICAgICAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0RFRkFVTFQpOworICAgIH0KKwor
ICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0
dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2Zy
YW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwg
YnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRv
blJlY3QuaGVpZ2h0KCkpOworCisgICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0
KSkgeworICAgICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOworICAgICAgICBnYm9vbGVh
biBkaXNwbGFjZUZvY3VzLCBpbnRlcmlvckZvY3VzOworICAgICAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3R5bGUoCisgICAgICAgICAgICBjb250ZXh0LAorICAgICAgICAgICAgImZvY3VzLWxp
bmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwKKyAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZv
Y3VzUGFkLAorICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCisg
ICAgICAgICAgICAiZGlzcGxhY2UtZm9jdXMiLCAmZGlzcGxhY2VGb2N1cywKKyAgICAgICAgICAg
IG51bGxwdHIpOworCisgICAgICAgIGlmIChpbnRlcmlvckZvY3VzKSB7CisgICAgICAgICAgICBH
dGtCb3JkZXIgYm9yZGVyV2lkdGg7CisgICAgICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
Ym9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSwgJmJvcmRl
cldpZHRoKTsKKworICAgICAgICAgICAgYnV0dG9uUmVjdCA9IEludFJlY3QoCisgICAgICAgICAg
ICAgICAgYnV0dG9uUmVjdC54KCkgKyBib3JkZXJXaWR0aC5sZWZ0ICsgZm9jdXNQYWQsCisgICAg
ICAgICAgICAgICAgYnV0dG9uUmVjdC55KCkgKyBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1BhZCwK
KyAgICAgICAgICAgICAgICBidXR0b25SZWN0LndpZHRoKCkgLSAoMiAqIGZvY3VzUGFkICsgYm9y
ZGVyV2lkdGgubGVmdCArIGJvcmRlcldpZHRoLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICBidXR0
b25SZWN0LmhlaWdodCgpIC0gKDIgKiBmb2N1c1BhZCArIGJvcmRlcldpZHRoLnRvcCArIGJvcmRl
cldpZHRoLmJvdHRvbSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGJ1dHRvblJlY3Qu
aW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOworCisgICAgICAgIGlmIChkaXNwbGFjZUZv
Y3VzICYmIHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICAgICAgZ2lu
dCBjaGlsZERpc3BsYWNlbWVudFg7CisgICAgICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50
WTsKKyAgICAgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiY2hp
bGQtZGlzcGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLCAiY2hpbGQtZGlzcGxhY2Vt
ZW50LXkiLCAmY2hpbGREaXNwbGFjZW1lbnRZLCBudWxscHRyKTsKKyAgICAgICAgICAgIGJ1dHRv
blJlY3QubW92ZShjaGlsZERpc3BsYWNlbWVudFgsIGNoaWxkRGlzcGxhY2VtZW50WSk7CisgICAg
ICAgIH0KKworICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3Qu
eSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworICAgIH0KK30K
K2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRp
cmVjdGlvbigpKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBH
VEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKKworICAgIHJlbmRlckJ1dHRvbih0aGlzLCBjb250ZXh0
LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4
dF9yZXN0b3JlKGNvbnRleHQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB2b2lkIFJlbmRl
clRoZW1lR3RrOjphZGp1c3RNZW51TGlzdFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHls
ZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAogewogICAgIC8vIFRoZSB0ZXN0cyBjaGVjayBleHBs
aWNpdGx5IHRoYXQgc2VsZWN0IG1lbnUgYnV0dG9ucyBpZ25vcmUgbGluZSBoZWlnaHQuCkBAIC0y
OTcsMTEgKzY3MCwyNDYgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBSZW4KICAgICBhZGp1c3RNZW51
TGlzdFN0eWxlKHN0eWxlUmVzb2x2ZXIsIHN0eWxlLCBlKTsKIH0KIAorc3RhdGljIHZvaWQgZ2V0
Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlJiBzdHlsZSwgR3RrQm9yZGVyJiBib3JkZXIsIGlu
dCYgZm9jdXMsIGludCYgc2VwYXJhdG9yKQoreworICAgIC8vIElmIHRoaXMgbWVudSBsaXN0IGJ1
dHRvbiBpc24ndCBkcmF3biB1c2luZyB0aGUgbmF0aXZlIHRoZW1lLCB3ZQorICAgIC8vIGRvbid0
IGFkZCBhbnkgZXh0cmEgcGFkZGluZyBiZXlvbmQgd2hhdCBXZWJDb3JlIGFscmVhZHkgdXNlcy4K
KyAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChH
VEtfVFlQRV9DT01CT19CT1gpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7
CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NM
QVNTX0JVVFRPTik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLmRp
cmVjdGlvbigpKSkpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJmJvcmRlcik7CisKKyAgICBnYm9vbGVh
biBpbnRlcmlvckZvY3VzOworICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbnRlcmlvci1mb2N1cyIsICZpbnRl
cmlvckZvY3VzLCAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAiZm9jdXMtcGFkZGlu
ZyIsICZmb2N1c1BhZCwgbnVsbHB0cik7CisgICAgZm9jdXMgPSBpbnRlcmlvckZvY3VzID8gZm9j
dXNXaWR0aCArIGZvY3VzUGFkIDogMDsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
Y29udGV4dCk7CisKKyAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NFUEFS
QVRPUik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIEd0a1Rl
eHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3Rr
VGV4dERpcmVjdGlvbihzdHlsZS5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgInNlcGFyYXRvciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNl
cGFyYXRvcnM7CisgICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3R5bGUoY29udGV4dCwgIndpZGUtc2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywg
InNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwgbnVsbHB0cik7CisKKyAgICAvLyBH
VEsrIGFsd2F5cyB1c2VzIGJvcmRlci5sZWZ0LCByZWdhcmRsZXNzIG9mIHRleHQgZGlyZWN0aW9u
LiBTZWUgZ3Rrc2VwZXJhdG9yLmMuCisgICAgaWYgKCF3aWRlU2VwYXJhdG9ycykKKyAgICAgICAg
c2VwYXJhdG9yV2lkdGggPSBib3JkZXIubGVmdDsKKworICAgIHNlcGFyYXRvciA9IHNlcGFyYXRv
cldpZHRoOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKK30KKwor
aW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAoreworICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwg
MCB9OworICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdl
dENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRv
cldpZHRoKTsKKyAgICBpbnQgbGVmdCA9IGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1c1dpZHRoOwor
ICAgIGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgIGxlZnQgKz0gc2VwYXJh
dG9yV2lkdGggKyBtaW5BcnJvd1NpemU7CisgICAgcmV0dXJuIGxlZnQ7Cit9CisKK2ludCBSZW5k
ZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSYgc3R5bGUp
IGNvbnN0Cit7CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Cisg
ICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9C
b3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgp
OworICAgIGludCByaWdodCA9IGJvcmRlcldpZHRoLnJpZ2h0ICsgZm9jdXNXaWR0aDsKKyAgICBp
ZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gTFRSKQorICAgICAgICByaWdodCArPSBzZXBhcmF0b3JX
aWR0aCArIG1pbkFycm93U2l6ZTsKKyAgICByZXR1cm4gcmlnaHQ7Cit9CisKK2ludCBSZW5kZXJU
aGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25z
dAoreworICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwgMCwgMCB9OworICAgIGlu
dCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0
cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFyYXRvcldpZHRoKTsKKyAg
ICByZXR1cm4gYm9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aDsKK30KKworaW50IFJlbmRlclRo
ZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0Cit7CisgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07CisgICAg
aW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hN
ZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwor
ICAgIHJldHVybiBib3JkZXJXaWR0aC5ib3R0b20gKyBmb2N1c1dpZHRoOworfQorCitib29sIFJl
bmRlclRoZW1lR3RrOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByKQorewor
ICAgIC8vIEZJWE1FOiBhZG9wdCBzdWJwaXhlbCB0aGVtZXMuCisgICAgSW50UmVjdCByZWN0ID0g
SW50UmVjdChyKTsKKworICAgIGNhaXJvX3QqIGNhaXJvQ29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVu
ZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKKworICAgIC8vIFBhaW50IHRoZSBidXR0
b24uCisgICAgR3RrU3R5bGVDb250ZXh0KiBidXR0b25TdHlsZUNvbnRleHQgPSBnZXRTdHlsZUNv
bnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGJ1dHRv
blN0eWxlQ29udGV4dCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihidXR0
b25TdHlsZUNvbnRleHQsIGRpcmVjdGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2Ns
YXNzKGJ1dHRvblN0eWxlQ29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7CisgICAgcmVu
ZGVyQnV0dG9uKHRoaXMsIGJ1dHRvblN0eWxlQ29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludElu
Zm8sIHJlY3QpOworCisgICAgLy8gR2V0IHRoZSBpbm5lciByZWN0YW5nbGUuCisgICAgZ2ludCBm
b2N1c1dpZHRoLCBmb2N1c1BhZDsKKyAgICBHdGtCb3JkZXIqIGlubmVyQm9yZGVyUHRyID0gMDsK
KyAgICBHdGtCb3JkZXIgaW5uZXJCb3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsKKyAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfc3R5bGUoYnV0dG9uU3R5bGVDb250ZXh0LCAiaW5uZXItYm9yZGVyIiwg
JmlubmVyQm9yZGVyUHRyLCAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLCAiZm9jdXMt
cGFkZGluZyIsICZmb2N1c1BhZCwgbnVsbHB0cik7CisgICAgaWYgKGlubmVyQm9yZGVyUHRyKSB7
CisgICAgICAgIGlubmVyQm9yZGVyID0gKmlubmVyQm9yZGVyUHRyOworICAgICAgICBndGtfYm9y
ZGVyX2ZyZWUoaW5uZXJCb3JkZXJQdHIpOworICAgIH0KKworICAgIEd0a0JvcmRlciBib3JkZXJX
aWR0aDsKKyAgICBHdGtTdGF0ZUZsYWdzIHN0YXRlID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0
YXRlKGJ1dHRvblN0eWxlQ29udGV4dCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRl
cihidXR0b25TdHlsZUNvbnRleHQsIHN0YXRlLCAmYm9yZGVyV2lkdGgpOworCisgICAgZm9jdXNX
aWR0aCArPSBmb2N1c1BhZDsKKyAgICBJbnRSZWN0IGlubmVyUmVjdCgKKyAgICAgICAgcmVjdC54
KCkgKyBpbm5lckJvcmRlci5sZWZ0ICsgYm9yZGVyV2lkdGgubGVmdCArIGZvY3VzV2lkdGgsCisg
ICAgICAgIHJlY3QueSgpICsgaW5uZXJCb3JkZXIudG9wICsgYm9yZGVyV2lkdGgudG9wICsgZm9j
dXNXaWR0aCwKKyAgICAgICAgcmVjdC53aWR0aCgpIC0gYm9yZGVyV2lkdGgubGVmdCAtIGJvcmRl
cldpZHRoLnJpZ2h0IC0gaW5uZXJCb3JkZXIubGVmdCAtIGlubmVyQm9yZGVyLnJpZ2h0IC0gKDIg
KiBmb2N1c1dpZHRoKSwKKyAgICAgICAgcmVjdC5oZWlnaHQoKSAtIGJvcmRlcldpZHRoLnRvcCAt
IGJvcmRlcldpZHRoLmJvdHRvbSAtIGlubmVyQm9yZGVyLnRvcCAtIGlubmVyQm9yZGVyLmJvdHRv
bSAtICgyICogZm9jdXNXaWR0aCkpOworCisgICAgaWYgKGlzUHJlc3NlZChyZW5kZXJPYmplY3Qp
KSB7CisgICAgICAgIGdpbnQgY2hpbGREaXNwbGFjZW1lbnRYOworICAgICAgICBnaW50IGNoaWxk
RGlzcGxhY2VtZW50WTsKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGJ1dHRv
blN0eWxlQ29udGV4dCwgImNoaWxkLWRpc3BsYWNlbWVudC14IiwgJmNoaWxkRGlzcGxhY2VtZW50
WCwgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxhY2VtZW50WSwgbnVsbHB0cik7
CisgICAgICAgIGlubmVyUmVjdC5tb3ZlKGNoaWxkRGlzcGxhY2VtZW50WCwgY2hpbGREaXNwbGFj
ZW1lbnRZKTsKKyAgICB9CisgICAgaW5uZXJSZWN0LnNldFdpZHRoKHN0ZDo6bWF4KDEsIGlubmVy
UmVjdC53aWR0aCgpKSk7CisgICAgaW5uZXJSZWN0LnNldEhlaWdodChzdGQ6Om1heCgxLCBpbm5l
clJlY3QuaGVpZ2h0KCkpKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoYnV0dG9u
U3R5bGVDb250ZXh0KTsKKworICAgIC8vIFBhaW50IHRoZSBhcnJvdy4KKyAgICBHdGtTdHlsZUNv
bnRleHQqIGFycm93U3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0FSUk9X
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGFycm93U3R5bGVDb250ZXh0KTsKKworICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oYXJyb3dTdHlsZUNvbnRleHQsIGRpcmVj
dGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGFycm93U3R5bGVDb250ZXh0
LCAiYXJyb3ciKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNv
bnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisgICAgZ2Zsb2F0IGFycm93U2NhbGlu
ZzsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoYXJyb3dTdHlsZUNvbnRleHQsICJh
cnJvdy1zY2FsaW5nIiwgJmFycm93U2NhbGluZywgbnVsbHB0cik7CisKKyAgICBJbnRTaXplIGFy
cm93U2l6ZShtaW5BcnJvd1NpemUsIGlubmVyUmVjdC5oZWlnaHQoKSk7CisgICAgRmxvYXRQb2lu
dCBhcnJvd1Bvc2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigpKTsKKyAgICBpZiAoZGlyZWN0aW9u
ID09IEdUS19URVhUX0RJUl9MVFIpCisgICAgICAgIGFycm93UG9zaXRpb24ubW92ZShpbm5lclJl
Y3Qud2lkdGgoKSAtIGFycm93U2l6ZS53aWR0aCgpLCAwKTsKKworICAgIC8vIEdUSysgYWN0dWFs
bHkgZmV0Y2hlcyB0aGUgeGFsaWduIGFuZCB2YWxpZ24gdmFsdWVzIGZyb20gdGhlIHdpZGdldCwg
YnV0IHNpbmNlIHdlCisgICAgLy8gZG9uJ3QgaGF2ZSBhIHdpZGdldCBoZXJlLCB3ZSBhcmUganVz
dCB1c2luZyB0aGUgZGVmYXVsdCB4YWxpZ24gYW5kIHZhbGlnbiB2YWx1ZXMgb2YgMC41LgorICAg
IGdpbnQgZXh0ZW50ID0gc3RkOjptaW4oYXJyb3dTaXplLndpZHRoKCksIGFycm93U2l6ZS5oZWln
aHQoKSkgKiBhcnJvd1NjYWxpbmc7CisgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKChhcnJvd1NpemUu
d2lkdGgoKSAtIGV4dGVudCkgLyAyLCAoYXJyb3dTaXplLmhlaWdodCgpIC0gZXh0ZW50KSAvIDIp
OworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGFycm93U3R5bGVDb250ZXh0LCBz
dGF0ZSk7CisgICAgZ3RrX3JlbmRlcl9hcnJvdyhhcnJvd1N0eWxlQ29udGV4dCwgY2Fpcm9Db250
ZXh0LCBHX1BJLCBhcnJvd1Bvc2l0aW9uLngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGV4dGVudCk7
CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGFycm93U3R5bGVDb250ZXh0KTsKKwor
ICAgIC8vIFBhaW50IHRoZSBzZXBhcmF0b3IgaWYgbmVlZGVkLgorICAgIEd0a1N0eWxlQ29udGV4
dCogc2VwYXJhdG9yU3R5bGVDb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTUJP
X0JPWCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShzZXBhcmF0b3JTdHlsZUNvbnRleHQp
OworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihzZXBhcmF0b3JTdHlsZUNv
bnRleHQsIGRpcmVjdGlvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKHNlcGFy
YXRvclN0eWxlQ29udGV4dCwgInNlcGFyYXRvciIpOworCisgICAgZ2Jvb2xlYW4gd2lkZVNlcGFy
YXRvcnM7CisgICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKKyAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3R5bGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVT
ZXBhcmF0b3JzLCAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcldpZHRoLCBudWxscHRyKTsK
KyAgICBpZiAod2lkZVNlcGFyYXRvcnMgJiYgIXNlcGFyYXRvcldpZHRoKSB7CisgICAgICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShz
ZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRlKTsKKyAgICBJbnRQb2ludCBzZXBhcmF0b3JQb3Np
dGlvbihhcnJvd1Bvc2l0aW9uLngoKSwgaW5uZXJSZWN0LnkoKSk7CisgICAgaWYgKHdpZGVTZXBh
cmF0b3JzKSB7CisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKKyAg
ICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLXNlcGFyYXRvcldpZHRoLCAwKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ubW92ZShhcnJvd1NpemUu
d2lkdGgoKSwgMCk7CisKKyAgICAgICAgZ3RrX3JlbmRlcl9mcmFtZShzZXBhcmF0b3JTdHlsZUNv
bnRleHQsIGNhaXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3Np
dGlvbi55KCksIHNlcGFyYXRvcldpZHRoLCBpbm5lclJlY3QuaGVpZ2h0KCkpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIEd0a0JvcmRlciBwYWRkaW5nOworICAgICAgICBndGtfc3R5bGVfY29udGV4
dF9nZXRfcGFkZGluZyhzZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRlLCAmcGFkZGluZyk7Cisg
ICAgICAgIEd0a0JvcmRlciBib3JkZXI7CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9i
b3JkZXIoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBzdGF0ZSwgJmJvcmRlcik7CisKKyAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICAgICAgc2VwYXJhdG9y
UG9zaXRpb24ubW92ZSgtKHBhZGRpbmcubGVmdCArIGJvcmRlci5sZWZ0KSwgMCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoYXJyb3dTaXplLndpZHRo
KCksIDApOworCisgICAgICAgIGNhaXJvX3NhdmUoY2Fpcm9Db250ZXh0KTsKKworICAgICAgICAv
LyBBbiBleHRyYSBjbGlwIHByZXZlbnRzIHRoZSBzZXBhcmF0b3IgYmxlZWRpbmcgb3V0c2lkZSBv
ZiB0aGUgc3BlY2lmaWVkIHJlY3RhbmdsZSBiZWNhdXNlIG9mIHN1YnBpeGVsIHBvc2l0aW9uaW5n
LgorICAgICAgICBjYWlyb19yZWN0YW5nbGUoY2Fpcm9Db250ZXh0LCBzZXBhcmF0b3JQb3NpdGlv
bi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwgYm9yZGVyLmxlZnQsIGlubmVyUmVjdC5oZWln
aHQoKSk7CisgICAgICAgIGNhaXJvX2NsaXAoY2Fpcm9Db250ZXh0KTsKKyAgICAgICAgZ3RrX3Jl
bmRlcl9saW5lKHNlcGFyYXRvclN0eWxlQ29udGV4dCwgY2Fpcm9Db250ZXh0LCBzZXBhcmF0b3JQ
b3NpdGlvbi54KCksIHNlcGFyYXRvclBvc2l0aW9uLnkoKSwgc2VwYXJhdG9yUG9zaXRpb24ueCgp
LCBpbm5lclJlY3QubWF4WSgpKTsKKyAgICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQp
OworICAgIH0KKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoc2VwYXJhdG9yU3R5bGVD
b250ZXh0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJPYmplY3QmIG9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0
dXJuIHBhaW50TWVudUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKIH0KIAorYm9vbCBSZW5kZXJU
aGVtZUd0azo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VO
VFJZKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGly
ZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigp
KSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVf
Q0xBU1NfRU5UUlkpOworCisgICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlmICghaXNFbmFibGVk
KHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKKyAgICAg
ICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZWxzZSBpZiAoaXNG
b2N1c2VkKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0ZP
Q1VTRUQ7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19j
YXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CisKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQo
Y29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0
LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3Jl
bmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
KworICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSAmJiBpc0VuYWJsZWQocmVuZGVyT2Jq
ZWN0KSkgeworICAgICAgICBnYm9vbGVhbiBpbnRlcmlvckZvY3VzOworICAgICAgICBnaW50IGZv
Y3VzV2lkdGgsIGZvY3VzUGFkOworICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUo
Y29udGV4dCwgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yRm9jdXMsICJmb2N1cy1saW5lLXdp
ZHRoIiwgJmZvY3VzV2lkdGgsICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBudWxscHRyKTsK
KyAgICAgICAgaWYgKCFpbnRlcmlvckZvY3VzKSB7CisgICAgICAgICAgICBJbnRSZWN0IGZvY3Vz
UmVjdChyZWN0KTsKKyAgICAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBm
b2N1c1BhZCk7CisgICAgICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgZm9jdXNSZWN0LngoKSwgZm9jdXNS
ZWN0LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWlnaHQoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRBcmVh
KGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJl
Y3QmIHIpCiB7CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwpAQCAtNDgxLDYg
KzEwODksMjQwIEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU3R5bGUo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyCiAgICAgc3R5bGUuc2V0Qm94U2hh
ZG93KG51bGxwdHIpOwogfQogCitzdGF0aWMgdm9pZCBhcHBseVNsaWRlclN0eWxlQ29udGV4dENs
YXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBDb250cm9sUGFydCBwYXJ0KQoreworICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0NB
TEUpOworICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xp
ZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKKyAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2Ns
YXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFMKTsKKyAgICBlbHNlIGlmIChw
YXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0KQorICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NU
WUxFX0NMQVNTX1ZFUlRJQ0FMKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlk
ZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQ29udHJvbFBhcnQgcGFy
dCA9IHJlbmRlck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKKyAgICBBU1NFUlRfVU5VU0VE
KHBhcnQsIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJWZXJ0
aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOworCisgICAgR3RrU3R5
bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5z
dHlsZSgpLmRpcmVjdGlvbigpKSk7CisgICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFzc2Vz
KGNvbnRleHQsIHBhcnQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0
LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKKworICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9i
amVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZF
KTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgp
LCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworCisgICAgaWYgKGlzRm9jdXNlZChyZW5k
ZXJPYmplY3QpKSB7CisgICAgICAgIGdpbnQgZm9jdXNXaWR0aCwgZm9jdXNQYWQ7CisgICAgICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiZm9jdXMtbGluZS13aWR0aCIs
ICZmb2N1c1dpZHRoLCAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1BhZCwgbnVsbHB0cik7CisgICAg
ICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOworICAgICAgICBmb2N1c1JlY3QuaW5mbGF0ZShm
b2N1c1dpZHRoICsgZm9jdXNQYWQpOworICAgICAgICBndGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQs
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgZm9jdXNSZWN0Lngo
KSwgZm9jdXNSZWN0LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWlnaHQoKSk7
CisgICAgfQorCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2xpZGVyVGh1bWIo
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSByZW5k
ZXJPYmplY3Quc3R5bGUoKS5hcHBlYXJhbmNlKCk7CisgICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVy
VGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0IHx8
IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOworCisgICAgR3RrU3R5bGVDb250
ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKKyAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgp
LmRpcmVjdGlvbigpKSk7CisgICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRleHRDbGFzc2VzKGNvbnRl
eHQsIHBhcnQpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfU0xJREVSKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoIWlz
RW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkp
CisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOworICAgIGVsc2Ug
aWYgKGlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19QUkVMSUdIVDsKKyAgICBpZiAoaXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCisgICAgICAg
IGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfc3RhdGUoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKKwor
ICAgIGd0a19yZW5kZXJfc2xpZGVyKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCksCisgICAgICAgIHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCA/IEdU
S19PUklFTlRBVElPTl9IT1JJWk9OVEFMIDogR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKKwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQmKSBjb25zdAoreworICAgIENvbnRyb2xQYXJ0IHBhcnQg
PSBzdHlsZS5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQgIT0gU2xpZGVyVGh1bWJIb3Jpem9u
dGFsUGFydCAmJiBwYXJ0ICE9IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICByZXR1
cm47CisKKyAgICBnaW50IHNsaWRlcldpZHRoLCBzbGlkZXJMZW5ndGg7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0eWxlKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TQ0FMRSksICJzbGlk
ZXItd2lkdGgiLCAmc2xpZGVyV2lkdGgsICJzbGlkZXItbGVuZ3RoIiwgJnNsaWRlckxlbmd0aCwg
bnVsbHB0cik7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewor
ICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVyTGVuZ3RoLCBGaXhlZCkpOworICAg
ICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQ
YXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOworICAgIHN0eWxlLnNl
dFdpZHRoKExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRIZWlnaHQo
TGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFy
ZW5kZXJPYmplY3QuaXNQcm9ncmVzcygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEd0
a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9QUk9HUkVT
U19CQVIpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisKKyAgICBndGtf
c3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7
CisKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgo
KSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jl
c3RvcmUoY29udGV4dCk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwor
ICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1Nf
UFJPR1JFU1NCQVIpOworCisKKyAgICBHdGtCb3JkZXIgcGFkZGluZzsKKyAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigw
KSwgJnBhZGRpbmcpOworICAgIEludFJlY3QgcHJvZ3Jlc3NSZWN0KAorICAgICAgICByZWN0Lngo
KSArIHBhZGRpbmcubGVmdCwKKyAgICAgICAgcmVjdC55KCkgKyBwYWRkaW5nLnRvcCwKKyAgICAg
ICAgcmVjdC53aWR0aCgpIC0gKHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmlnaHQpLAorICAgICAg
ICByZWN0LmhlaWdodCgpIC0gKHBhZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b20pKTsKKyAgICBw
cm9ncmVzc1JlY3QgPSBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KHJlbmRl
ck9iamVjdCwgcHJvZ3Jlc3NSZWN0KTsKKworICAgIGlmICghcHJvZ3Jlc3NSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgZ3RrX3JlbmRlcl9hY3Rpdml0eShjb250ZXh0LCBwYWludEluZm8uY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHByb2dyZXNzUmVjdC54KCksIHByb2dyZXNzUmVj
dC55KCksIHByb2dyZXNzUmVjdC53aWR0aCgpLCBwcm9ncmVzc1JlY3QuaGVpZ2h0KCkpOworCisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3N0YXRpYyBnaW50IHNwaW5CdXR0b25BcnJvd1NpemUoR3RrU3R5bGVDb250ZXh0KiBj
b250ZXh0KQoreworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBmb250RGVzY3JpcHRpb247Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0KGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxh
Z3M+KDApLCAiZm9udCIsICZmb250RGVzY3JpcHRpb24sIG51bGxwdHIpOworICAgIGdpbnQgZm9u
dFNpemUgPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplKGZvbnREZXNjcmlwdGlvbik7
CisgICAgZ2ludCBhcnJvd1NpemUgPSBzdGQ6Om1heChQQU5HT19QSVhFTFMoZm9udFNpemUpLCBt
aW5TcGluQnV0dG9uQXJyb3dTaXplKTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUo
Zm9udERlc2NyaXB0aW9uKTsKKworICAgIHJldHVybiBhcnJvd1NpemUgLSBhcnJvd1NpemUgJSAy
OyAvLyBGb3JjZSBldmVuLgorfQorCit2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNw
aW5CdXR0b25TdHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZW50
JikgY29uc3QKK3sKKyAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRl
eHQoR1RLX1RZUEVfU1BJTl9CVVRUT04pOworCisgICAgR3RrQm9yZGVyIHBhZGRpbmc7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoY29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3Rh
dGVGbGFncz4oMCksICZwYWRkaW5nKTsKKworICAgIGludCB3aWR0aCA9IHNwaW5CdXR0b25BcnJv
d1NpemUoY29udGV4dCkgKyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0OworICAgIHN0eWxl
LnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKKyAgICBzdHlsZS5zZXRNaW5XaWR0aChM
ZW5ndGgod2lkdGgsIEZpeGVkKSk7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0
dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QsIEd0a0Fycm93VHlwZSBhcnJvd1R5cGUpCit7CisgICAgQVNTRVJU
KGFycm93VHlwZSA9PSBHVEtfQVJST1dfVVAgfHwgYXJyb3dUeXBlID09IEdUS19BUlJPV19ET1dO
KTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7CisgICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOworCisg
ICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBndGtfc3R5bGVfY29udGV4dF9nZXRfZGly
ZWN0aW9uKGNvbnRleHQpOworICAgIGd1aW50IHN0YXRlID0gc3RhdGljX2Nhc3Q8Z3VpbnQ+KGd0
a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0KSk7CisgICAgaWYgKCEoc3RhdGUgJiBH
VEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRSkpIHsKKyAgICAgICAgaWYgKHRoZW1lLT5pc1ByZXNz
ZWQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKChhcnJvd1R5cGUgPT0gR1RLX0FS
Uk9XX1VQICYmIHRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVjdCkp
CisgICAgICAgICAgICAgICAgfHwgKGFycm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTiAmJiAhdGhl
bWUtPmlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQocmVuZGVyT2JqZWN0KSkpCisgICAgICAgICAg
ICAgICAgc3RhdGUgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOworICAgICAgICB9IGVsc2UgaWYg
KHRoZW1lLT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkgeworICAgICAgICAgICAgaWYgKChhcnJv
d1R5cGUgPT0gR1RLX0FSUk9XX1VQICYmIHRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVk
KHJlbmRlck9iamVjdCkpCisgICAgICAgICAgICAgICAgfHwgKGFycm93VHlwZSA9PSBHVEtfQVJS
T1dfRE9XTiAmJiAhdGhlbWUtPmlzU3BpblVwQnV0dG9uUGFydEhvdmVyZWQocmVuZGVyT2JqZWN0
KSkpCisgICAgICAgICAgICAgICAgc3RhdGUgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQs
IHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KHN0YXRlKSk7CisKKyAgICAvLyBQYWludCBidXR0
b24uCisgICAgSW50UmVjdCBidXR0b25SZWN0KHJlY3QpOworICAgIGd1aW50IGp1bmN0aW9uID0g
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2p1bmN0aW9uX3NpZGVzKGNvbnRleHQpOworICAgIGlmIChh
cnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQKQorICAgICAgICBqdW5jdGlvbiB8PSBHVEtfSlVOQ1RJ
T05fQk9UVE9NOworICAgIGVsc2UgeworICAgICAgICBqdW5jdGlvbiB8PSBHVEtfSlVOQ1RJT05f
VE9QOworICAgICAgICBidXR0b25SZWN0Lm1vdmUoMCwgcmVjdC5oZWlnaHQoKSAvIDIpOworICAg
IH0KKyAgICBidXR0b25SZWN0LnNldEhlaWdodChyZWN0LmhlaWdodCgpIC8gMik7CisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2p1bmN0aW9uX3NpZGVzKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0
a0p1bmN0aW9uU2lkZXM+KGp1bmN0aW9uKSk7CisKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQo
Y29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0
b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVj
dC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0LCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0
LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBidXR0b25SZWN0LmhlaWdodCgpKTsKKworICAgIC8v
IFBhaW50IGFycm93IGNlbnRlcmVkIGluc2lkZSBidXR0b24uCisgICAgLy8gVGhpcyBjb2RlIGlz
IGJhc2VkIG9uIGd0a3NwaW5idXR0b24uYyBjb2RlLgorICAgIEludFJlY3QgYXJyb3dSZWN0Owor
ICAgIGdkb3VibGUgYW5nbGU7CisgICAgaWYgKGFycm93VHlwZSA9PSBHVEtfQVJST1dfVVApIHsK
KyAgICAgICAgYW5nbGUgPSAwOworICAgICAgICBhcnJvd1JlY3Quc2V0WShyZWN0LnkoKSk7Cisg
ICAgICAgIGFycm93UmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAvIDIgLSAyKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBhbmdsZSA9IEdfUEk7CisgICAgICAgIGFycm93UmVjdC5zZXRZKHJl
Y3QueSgpICsgYnV0dG9uUmVjdC55KCkpOworICAgICAgICBhcnJvd1JlY3Quc2V0SGVpZ2h0KHJl
Y3QuaGVpZ2h0KCkgLSBhcnJvd1JlY3QueSgpIC0gMik7CisgICAgfQorICAgIGFycm93UmVjdC5z
ZXRXaWR0aChyZWN0LndpZHRoKCkgLSAzKTsKKyAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhU
X0RJUl9MVFIpCisgICAgICAgIGFycm93UmVjdC5zZXRYKHJlY3QueCgpICsgMSk7CisgICAgZWxz
ZQorICAgICAgICBhcnJvd1JlY3Quc2V0WChyZWN0LngoKSArIDIpOworCisgICAgZ2ludCB3aWR0
aCA9IGFycm93UmVjdC53aWR0aCgpIC8gMjsKKyAgICB3aWR0aCAtPSB3aWR0aCAlIDIgLSAxOyAv
LyBGb3JjZSBvZGQuCisgICAgZ2ludCBoZWlnaHQgPSAod2lkdGggKyAxKSAvIDI7CisKKyAgICBh
cnJvd1JlY3QubW92ZSgoYXJyb3dSZWN0LndpZHRoKCkgLSB3aWR0aCkgLyAyLCAoYXJyb3dSZWN0
LmhlaWdodCgpIC0gaGVpZ2h0KSAvIDIpOworICAgIGd0a19yZW5kZXJfYXJyb3coY29udGV4dCwg
cGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBhbmdsZSwgYXJyb3dS
ZWN0LngoKSwgYXJyb3dSZWN0LnkoKSwgd2lkdGgpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
cmVzdG9yZShjb250ZXh0KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5lclNw
aW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEd0a1N0eWxlQ29udGV4
dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElOX0JVVFRPTik7CisgICAg
Z3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKKworICAgIEd0a1RleHREaXJlY3Rpb24g
ZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgZGlyZWN0aW9uKTsKKworICAgIGd1aW50IGZsYWdz
ID0gMDsKKyAgICBpZiAoIWlzRW5hYmxlZChyZW5kZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250
cm9sKHJlbmRlck9iamVjdCkpCisgICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lOU0VO
U0lUSVZFOworICAgIGVsc2UgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOworICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOworICAg
IGd0a19zdHlsZV9jb250ZXh0X3JlbW92ZV9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1Nf
RU5UUlkpOworCisgICAgcGFpbnRTcGluQXJyb3dCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVy
T2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdUS19BUlJPV19VUCk7CisgICAgcGFpbnRTcGluQXJy
b3dCdXR0b24odGhpcywgY29udGV4dCwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QsIEdU
S19BUlJPV19ET1dOKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGRvdWJsZSBSZW5kZXJUaGVtZUd0azo6Y2FyZXRC
bGlua0ludGVydmFsKCkgY29uc3QKIHsKICAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtf
c2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKQEAgLTQ4OCw3ICsxMzMwLDcgQEAgZG91YmxlIFJlbmRl
clRoZW1lR3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAogICAgIGdib29sZWFuIHNob3Vs
ZEJsaW5rOwogICAgIGdpbnQgdGltZTsKIAotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0
ay1jdXJzb3ItYmxpbmsiLCAmc2hvdWxkQmxpbmssICJndGstY3Vyc29yLWJsaW5rLXRpbWUiLCAm
dGltZSwgTlVMTCk7CisgICAgZ19vYmplY3RfZ2V0KHNldHRpbmdzLCAiZ3RrLWN1cnNvci1ibGlu
ayIsICZzaG91bGRCbGluaywgImd0ay1jdXJzb3ItYmxpbmstdGltZSIsICZ0aW1lLCBudWxscHRy
KTsKIAogICAgIGlmICghc2hvdWxkQmxpbmspCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDk2LDYg
KzEzMzgsNzggQEAgZG91YmxlIFJlbmRlclRoZW1lR3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBj
b25zdAogICAgIHJldHVybiB0aW1lIC8gMjAwMC47CiB9CiAKK0NvbG9yIFJlbmRlclRoZW1lR3Rr
OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAg
R2RrUkdCQSBnZGtSR0JBQ29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91
bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgc3RhdGljX2Nhc3Q8R3Rr
U3RhdGVGbGFncz4oR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQgfCBHVEtfU1RBVEVfRkxBR19GT0NV
U0VEKSwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30KKworQ29s
b3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRS
WSksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKKyAgICByZXR1cm4g
Z2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNv
bG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RL
X1RZUEVfRU5UUlkpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVfRkxBR19T
RUxFQ1RFRCB8IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQpLCAmZ2RrUkdCQUNvbG9yKTsKKyAgICBy
ZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgR2RrUkdCQSBn
ZGtSR0JBQ29sb3I7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9FTlRSWSksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNv
bG9yKTsKKyAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0
azo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QK
K3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
YmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQgfCBHVEtfU1RB
VEVfRkxBR19GT0NVU0VEKSwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xv
cjsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xv
cjsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNv
bnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtS
R0JBQ29sb3IpOworICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Cit9CisKK0NvbG9yIFJlbmRlclRo
ZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0
X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfVFJFRV9WSUVXKSwgc3RhdGljX2Nh
c3Q8R3RrU3RhdGVGbGFncz4oR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQgfCBHVEtfU1RBVEVfRkxB
R19GT0NVU0VEKSwgJmdka1JHQkFDb2xvcik7CisgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKK30K
KworQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1RS
RUVfVklFVyksIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCAmZ2RrUkdCQUNvbG9yKTsKKyAgICBy
ZXR1cm4gZ2RrUkdCQUNvbG9yOworfQorCitDb2xvciBSZW5kZXJUaGVtZUd0azo6c3lzdGVtQ29s
b3IoQ1NTVmFsdWVJRCBjc3NWYWx1ZUlkKSBjb25zdAoreworICAgIEdka1JHQkEgZ2RrUkdCQUNv
bG9yOworCisgICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7CisgICAgY2FzZSBDU1NWYWx1ZUJ1dHRv
bnRleHQ6CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRl
eHQoR1RLX1RZUEVfQlVUVE9OKSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCAmZ2RrUkdCQUNvbG9y
KTsKKyAgICAgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKKyAgICBjYXNlIENTU1ZhbHVlQ2FwdGlv
bnRleHQ6CisgICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRl
eHQoR1RLX1RZUEVfRU5UUlkpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigwKSwgJmdka1JH
QkFDb2xvcik7CisgICAgICAgIHJldHVybiBnZGtSR0JBQ29sb3I7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKKyAgICB9
Cit9CisKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkKIHsK
ICNpZiBFTkFCTEUoVklERU8pCkBAIC01MTksOSArMTQzMywxMCBAQCBTdHJpbmcgUmVuZGVyVGhl
bWVHdGs6OmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKQogCiBib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludE1lZGlhQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IGNoYXIqIHN5
bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSkKIHsKLSAg
ICBJbnRSZWN0IGljb25SZWN0KHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIG1fbWVkaWFJY29u
U2l6ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC55KCkgKyAocmVjdC5oZWlnaHQo
KSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUlj
b25TaXplLCBtX21lZGlhSWNvblNpemUpOworICAgIEludFJlY3QgaWNvblJlY3QoCisgICAgICAg
IHJlY3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAorICAgICAg
ICByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gbV9tZWRpYUljb25TaXplKSAvIDIsCisgICAg
ICAgIG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXplKTsKICAgICBHUmVmUHRyPEdka1Bp
eGJ1Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9D
T05UQUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNrU3RvY2tJY29uTmFtZSwKICAgICAg
ICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0
a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKICAgICBw
YWludEdka1BpeGJ1Zihjb250ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCmluZGV4IGQ5ZTY0NjguLjQ2Y2Q2
Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0
ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5oCkBA
IC0xODQsNyArMTg0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0
TmFtZUZvcldpZHRoKGNvbnN0IEZpbGVMaXN0KiwgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9v
bCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHBsYXRm
b3JtSW5pdCgpOwogICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5
bGUmKTsKIAogI2lmIEVOQUJMRShWSURFTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1JlbmRlclRoZW1lR3RrMy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2
NzE3ZTAuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRo
ZW1lR3RrMy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDE2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKLQotI2lmbmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotCi0j
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNp
bmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQYWludEluZm8uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2lu
Y2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCi0jaW5j
bHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRl
IDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBUaGlzIGlzIHRoZSBkZWZh
dWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUgaXQgd2FzIGRlZmluZWQgYXMgTUlOX0FS
Uk9XX1NJWkUgaW4gZ3RrYXJyb3cuYy4KLXN0YXRpYyBjb25zdCBpbnQgbWluQXJyb3dTaXplID0g
MTU7Ci0vLyBUaGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGRlZmluZWQgYnkgR1RLKywgd2hlcmUg
aXQgd2FzIGRlZmluZWQgYXMgTUlOX0FSUk9XX1dJRFRIIGluIGd0a3NwaW5idXR0b24uYy4KLXN0
YXRpYyBjb25zdCBpbnQgbWluU3BpbkJ1dHRvbkFycm93U2l6ZSA9IDY7Ci0KLXR5cGVkZWYgSGFz
aE1hcDxHVHlwZSwgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+ID4gU3R5bGVDb250ZXh0TWFwOwot
c3RhdGljIFN0eWxlQ29udGV4dE1hcCYgc3R5bGVDb250ZXh0TWFwKCk7Ci0KLXN0YXRpYyB2b2lk
IGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEdPYmplY3QqLCBHUGFyYW1TcGVjKikKLXsKLSAgICBT
dHlsZUNvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHN0eWxlQ29udGV4dE1hcCgpLmVu
ZCgpOwotICAgIGZvciAoU3R5bGVDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gc3R5
bGVDb250ZXh0TWFwKCkuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfaW52YWxpZGF0ZShpdGVyLT52YWx1ZS5nZXQoKSk7Ci0KLSAgICBQYWdl
Ojp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCk7
Ci19Ci0KLXN0YXRpYyBTdHlsZUNvbnRleHRNYXAmIHN0eWxlQ29udGV4dE1hcCgpCi17Ci0gICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFN0eWxlQ29udGV4dE1hcCwgbWFwLCAoKSk7
Ci0KLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIGlmICghaW5pdGlh
bGl6ZWQpIHsKLSAgICAgICAgR3RrU2V0dGluZ3MqIHNldHRpbmdzID0gZ3RrX3NldHRpbmdzX2dl
dF9kZWZhdWx0KCk7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2V0dGluZ3MsICJub3RpZnk6
Omd0ay10aGVtZS1uYW1lIiwgR19DQUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIDAp
OwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHNldHRpbmdzLCAibm90aWZ5OjpndGstY29sb3It
c2NoZW1lIiwgR19DQUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIDApOwotICAgICAg
ICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBtYXA7Ci19Ci0KLXN0YXRp
YyBHdGtTdHlsZUNvbnRleHQqIGdldFN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQotewot
ICAgIFN0eWxlQ29udGV4dE1hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHN0eWxlQ29udGV4dE1hcCgp
LmFkZCh3aWRnZXRUeXBlLCBudWxscHRyKTsKLSAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQot
ICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKLQotICAgIEd0a1dp
ZGdldFBhdGgqIHBhdGggPSBndGtfd2lkZ2V0X3BhdGhfbmV3KCk7Ci0gICAgZ3RrX3dpZGdldF9w
YXRoX2FwcGVuZF90eXBlKHBhdGgsIHdpZGdldFR5cGUpOwotCi0gICAgaWYgKHdpZGdldFR5cGUg
PT0gR1RLX1RZUEVfU0NST0xMQkFSKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRf
Y2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7Ci0gICAgZWxzZSBpZiAo
d2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9FTlRSWSkKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7Ci0gICAgZWxzZSBp
ZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9BUlJPVykKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRo
X2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsICJhcnJvdyIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5
cGUgPT0gR1RLX1RZUEVfQlVUVE9OKSB7Ci0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2Fk
ZF9jbGFzcyhwYXRoLCAwLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAgICAgICAgZ3RrX3dp
ZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDEsICJ0ZXh0LWJ1dHRvbiIpOwotICAgIH0K
LSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NDQUxFKQotICAgICAgICBndGtf
d2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NDQUxF
KTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NFUEFSQVRPUikKLSAgICAg
ICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9DTEFT
U19TRVBBUkFUT1IpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfUFJPR1JF
U1NfQkFSKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwg
R1RLX1NUWUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09
IEdUS19UWVBFX1NQSU5fQlVUVE9OKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRf
Y2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1NQSU5CVVRUT04pOwotICAgIGVsc2UgaWYg
KHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfVFJFRV9WSUVXKQotICAgICAgICBndGtfd2lkZ2V0X3Bh
dGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX1ZJRVcpOwotICAgIGVs
c2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKQotICAgICAgICBndGtf
d2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgMCwgR1RLX1NUWUxFX0NMQVNTX0NIRUNL
KTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1JBRElPX0JVVFRPTikKLSAg
ICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgsIDAsIEdUS19TVFlMRV9D
TEFTU19SQURJTyk7Ci0KLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGFk
b3B0R1JlZihndGtfc3R5bGVfY29udGV4dF9uZXcoKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X3BhdGgoY29udGV4dC5nZXQoKSwgcGF0aCk7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2ZyZWUo
cGF0aCk7Ci0KLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY29udGV4dDsKLSAgICByZXR1
cm4gY29udGV4dC5nZXQoKTsKLX0KLQotR3RrU3R5bGVDb250ZXh0KiBSZW5kZXJUaGVtZUd0azo6
Z3RrU2Nyb2xsYmFyU3R5bGUoKQotewotICAgIHJldHVybiBnZXRTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfU0NST0xMQkFSKTsKLX0KLQotLy8gVGhpcyBpcyBub3QgYSBzdGF0aWMgbWV0aG9kLCBiZWNh
dXNlIHdlIHdhbnQgdG8gYXZvaWQgaGF2aW5nIEdUSysgaGVhZGVycyBpbiBSZW5kZXJUaGVtZUd0
ay5oLgotZXh0ZXJuIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVjdGlvbihUZXh0RGlyZWN0
aW9uKTsKLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1Jbml0KCkKLXsKLX0KLQotUmVu
ZGVyVGhlbWVHdGs6On5SZW5kZXJUaGVtZUd0aygpCi17Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8p
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjppbml0TWVkaWFDb2xvcnMoKQotewotICAgIEdka1JHQkEg
Y29sb3I7Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250YWluZXJDb250ZXh0ID0gZ2V0U3R5bGVD
b250ZXh0KEdUS19UWVBFX0NPTlRBSU5FUik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
YmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBHVEtfU1RBVEVfRkxBR19OT1JNQUws
ICZjb2xvcik7Ci0gICAgbV9wYW5lbENvbG9yID0gY29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dCwgR1RLX1NUQVRFX0ZMQUdf
QUNUSVZFLCAmY29sb3IpOwotICAgIG1fc2xpZGVyQ29sb3IgPSBjb2xvcjsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfYmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LCBHVEtfU1RB
VEVfRkxBR19TRUxFQ1RFRCwgJmNvbG9yKTsKLSAgICBtX3NsaWRlclRodW1iQ29sb3IgPSBjb2xv
cjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBhZGp1c3RSZWN0Rm9yRm9jdXMoR3RrU3R5bGVD
b250ZXh0KiBjb250ZXh0LCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZ2ludCBmb2N1c1dpZHRo
LCBmb2N1c1BhZDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNX
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAm
Zm9jdXNQYWQsIE5VTEwpOwotICAgIHJlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQp
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlck9iamVjdCwgRmxvYXRSZWN0JiByZWN0KQotewotICAgIEd0a1N0eWxl
Q29udGV4dCogY29udGV4dCA9IDA7Ci0gICAgYm9vbCBjaGVja0ludGVyaW9yRm9jdXMgPSBmYWxz
ZTsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5j
ZSgpOwotICAgIHN3aXRjaCAocGFydCkgewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgIGNh
c2UgUmFkaW9QYXJ0OgotICAgICAgICBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHBhcnQgPT0g
Q2hlY2tib3hQYXJ0ID8gR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OIDogR1RLX1RZUEVfUkFESU9fQlVU
VE9OKTsKLQotICAgICAgICBnaW50IGluZGljYXRvclNwYWNpbmc7Ci0gICAgICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9yLXNwYWNpbmciLCAmaW5kaWNh
dG9yU3BhY2luZywgTlVMTCk7Ci0gICAgICAgIHJlY3QuaW5mbGF0ZShpbmRpY2F0b3JTcGFjaW5n
KTsKLQotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0gICAg
Y2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKLSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29u
dGV4dChHVEtfVFlQRV9TQ0FMRSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQnV0dG9uUGFy
dDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoK
LSAgICAgICAgY29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwotICAg
ICAgICBjaGVja0ludGVyaW9yRm9jdXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAgIGNvbnRleHQg
PSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOwotICAgICAgICBjaGVja0ludGVyaW9y
Rm9jdXMgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKGNvbnRleHQpOwotICAgIGlmIChjaGVja0ludGVyaW9y
Rm9jdXMpIHsKLSAgICAgICAgZ2Jvb2xlYW4gaW50ZXJpb3JGb2N1czsKLSAgICAgICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlv
ckZvY3VzLCBOVUxMKTsKLSAgICAgICAgaWYgKGludGVyaW9yRm9jdXMpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGFkanVzdFJlY3RGb3JGb2N1cyhjb250ZXh0LCByZWN0KTsKLX0K
LQotc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIFJl
bmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90
aCBzcGVjaWZpZWQsIHNvIHdlIHNob3VsZG4ndCBjaGFuZ2UgdGhlbS4KLSAgICBpZiAoIXN0eWxl
LndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUuaGVpZ2h0KCkuaXNBdXRvKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE90aGVyIHBvcnRzIGhhcmQtY29kZSB0aGlzIHRv
IDEzIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQgdmFsdWUgZGVmaW5lZCBieSBHVEsrLgotICAg
IC8vIEdUSysgdXNlcnMgdGVuZCB0byBkZW1hbmQgdGhlIG5hdGl2ZSBsb29rLgotICAgIC8vIEl0
IGNvdWxkIGJlIG1hZGUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiB2YWx1ZXMgb3RoZXIgdGhhbiAx
MyBhY3R1YWxseSBicmVhayBzaXRlIGNvbXBhdGliaWxpdHkuCi0gICAgZ2ludCBpbmRpY2F0b3JT
aXplOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LCAiaW5kaWNhdG9y
LXNpemUiLCAmaW5kaWNhdG9yU2l6ZSwgTlVMTCk7Ci0KLSAgICBpZiAoc3R5bGUud2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoaW5kaWNh
dG9yU2l6ZSwgRml4ZWQpKTsKLQotICAgIGlmIChzdHlsZS5oZWlnaHQoKS5pc0F1dG8oKSkKLSAg
ICAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwotfQot
Ci1zdGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIEdU
eXBlIHdpZGdldFR5cGUsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgZnVsbFJlY3QpCi17Ci0gICAgR3Rr
U3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KHdpZGdldFR5cGUpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICAvLyBTb21lIHRoZW1lcyBk
byBub3QgcmVuZGVyIGxhcmdlIHRvZ2dsZSBidXR0b25zIHByb3Blcmx5LCBzbyB3ZSBzaW1wbHkK
LSAgICAvLyBzaHJpbmsgdGhlIHJlY3RhbmdsZSBiYWNrIGRvd24gdG8gdGhlIGRlZmF1bHQgc2l6
ZSBhbmQgdGhlbiBjZW50ZXIgaXQKLSAgICAvLyBpbiB0aGUgZnVsbCB0b2dnbGUgYnV0dG9uIHJl
Z2lvbi4gVGhlIHJlYXNvbiBmb3Igbm90IHNpbXBseSBmb3JjaW5nIHRvZ2dsZQotICAgIC8vIGJ1
dHRvbnMgdG8gYmUgYSBzbWFsbGVyIHNpemUgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGJyZWFr
IHNpdGUgbGF5b3V0cy4KLSAgICBnaW50IGluZGljYXRvclNpemU7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X3N0eWxlKGNvbnRleHQsICJpbmRpY2F0b3Itc2l6ZSIsICZpbmRpY2F0b3JTaXpl
LCBOVUxMKTsKLSAgICBJbnRSZWN0IHJlY3QoZnVsbFJlY3QpOwotICAgIGlmIChyZWN0LndpZHRo
KCkgPiBpbmRpY2F0b3JTaXplKSB7Ci0gICAgICAgIHJlY3QuaW5mbGF0ZVgoLShyZWN0LndpZHRo
KCkgLSBpbmRpY2F0b3JTaXplKSAvIDIpOwotICAgICAgICByZWN0LnNldFdpZHRoKGluZGljYXRv
clNpemUpOyAvLyBJbiBjYXNlIHJlY3Qud2lkdGgoKSB3YXMgZXF1YWwgdG8gaW5kaWNhdG9yU2l6
ZSArIDEuCi0gICAgfQotCi0gICAgaWYgKHJlY3QuaGVpZ2h0KCkgPiBpbmRpY2F0b3JTaXplKSB7
Ci0gICAgICAgIHJlY3QuaW5mbGF0ZVkoLShyZWN0LmhlaWdodCgpIC0gaW5kaWNhdG9yU2l6ZSkg
LyAyKTsKLSAgICAgICAgcmVjdC5zZXRIZWlnaHQoaW5kaWNhdG9yU2l6ZSk7IC8vIEluIGNhc2Ug
cmVjdC5oZWlnaHQoKSB3YXMgZXF1YWwgdG8gaW5kaWNhdG9yU2l6ZSArIDEuCi0gICAgfQotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRp
cmVjdGlvbigpKSkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCB3
aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTiA/IEdUS19TVFlMRV9DTEFTU19DSEVD
SyA6IEdUS19TVFlMRV9DTEFTU19SQURJTyk7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAg
aWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgdGhlbWUtPmlzUmVhZE9ubHlD
b250cm9sKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lO
U0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkK
LSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgaWYgKHRoZW1l
LT5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NU
QVRFX0ZMQUdfSU5DT05TSVNURU5UOwotICAgIGVsc2UgaWYgKHRoZW1lLT5pc0NoZWNrZWQocmVu
ZGVyT2JqZWN0KSkKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxMywgNykKLSAgICAgICAgZmxh
Z3MgfD0gR1RLX1NUQVRFX0ZMQUdfQ0hFQ0tFRDsKLSNlbHNlCi0gICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0FDVElWRTsKLSNlbmRpZgotICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJl
bmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1NFTEVDVEVEOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtT
dGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hF
Q0tfQlVUVE9OKQotICAgICAgICBndGtfcmVuZGVyX2NoZWNrKGNvbnRleHQsIHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGVsc2UKLSAgICAgICAgZ3RrX3JlbmRlcl9v
cHRpb24oY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
LCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSAg
ICBpZiAodGhlbWUtPmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgIEludFJlY3Qg
aW5kaWNhdG9yUmVjdChyZWN0KTsKLSAgICAgICAgZ2ludCBpbmRpY2F0b3JTcGFjaW5nOwotICAg
ICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImluZGljYXRvci1zcGFj
aW5nIiwgJmluZGljYXRvclNwYWNpbmcsIE5VTEwpOwotICAgICAgICBpbmRpY2F0b3JSZWN0Lmlu
ZmxhdGUoaW5kaWNhdG9yU3BhY2luZyk7Ci0gICAgICAgIGd0a19yZW5kZXJfZm9jdXMoY29udGV4
dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBpbmRpY2F0b3JS
ZWN0LngoKSwgaW5kaWNhdG9yUmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW5k
aWNhdG9yUmVjdC53aWR0aCgpLCBpbmRpY2F0b3JSZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAg
ICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotfQotCi12b2lkIFJlbmRlclRo
ZW1lR3RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAotewotICAg
IHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NIRUNLX0JVVFRPTiksIHN0
eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRDaGVja2JveChjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUb2dnbGUodGhpcywgR1RLX1RZUEVfQ0hFQ0tf
QlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAotewotICAgIHNldFRvZ2dsZVNpemUoZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBF
X1JBRElPX0JVVFRPTiksIHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRS
YWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUb2dnbGUodGhpcywg
R1RLX1RZUEVfUkFESU9fQlVUVE9OLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCByZW5kZXJCdXR0b24oUmVuZGVyVGhl
bWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKLXsKLSAgICBJbnRSZWN0IGJ1dHRvblJlY3QocmVjdCk7Ci0KLSAgICBndWludCBmbGFn
cyA9IDA7Ci0gICAgaWYgKCF0aGVtZS0+aXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgdGhlbWUt
PmlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19T
VEFURV9GTEFHX0lOU0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVu
ZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0g
ICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfQUNUSVZFOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShj
b250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgaWYgKHRo
ZW1lLT5pc0RlZmF1bHQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBHdGtCb3JkZXIqIGJvcmRl
clB0ciA9IDA7Ci0gICAgICAgIEd0a0JvcmRlciBib3JkZXIgPSB7IDEsIDEsIDEsIDEgfTsKLQot
ICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwgImRlZmF1bHQtYm9y
ZGVyIiwgJmJvcmRlclB0ciwgTlVMTCk7Ci0gICAgICAgIGlmIChib3JkZXJQdHIpIHsKLSAgICAg
ICAgICAgIGJvcmRlciA9ICpib3JkZXJQdHI7Ci0gICAgICAgICAgICBndGtfYm9yZGVyX2ZyZWUo
Ym9yZGVyUHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJ1dHRvblJlY3QubW92ZShib3JkZXIu
bGVmdCwgYm9yZGVyLnRvcCk7Ci0gICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoYnV0dG9uUmVj
dC53aWR0aCgpIC0gKGJvcmRlci5sZWZ0ICsgYm9yZGVyLnJpZ2h0KSk7Ci0gICAgICAgIGJ1dHRv
blJlY3Quc2V0SGVpZ2h0KGJ1dHRvblJlY3QuaGVpZ2h0KCkgLSAoYm9yZGVyLnRvcCArIGJvcmRl
ci5ib3R0b20pKTsKLQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4
dCwgR1RLX1NUWUxFX0NMQVNTX0RFRkFVTFQpOwotICAgIH0KLQotICAgIGd0a19yZW5kZXJfYmFj
a2dyb3VuZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNy
KCksIGJ1dHRvblJlY3QueCgpLCBidXR0b25SZWN0LnkoKSwgYnV0dG9uUmVjdC53aWR0aCgpLCBi
dXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1
dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOwot
Ci0gICAgaWYgKHRoZW1lLT5pc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkgewotICAgICAgICBnaW50
IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgICAgICBnYm9vbGVhbiBkaXNwbGFjZUZvY3VzLCBp
bnRlcmlvckZvY3VzOwotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRo
IiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9j
dXMtcGFkZGluZyIsICZmb2N1c1BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJpbnRlcmlvci1mb2N1cyIsICZpbnRlcmlvckZvY3VzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRpc3BsYWNlLWZvY3VzIiwgJmRpc3BsYWNlRm9jdXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgICAgICBpZiAoaW50
ZXJpb3JGb2N1cykgewotICAgICAgICAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOwotICAgICAg
ICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihjb250ZXh0LCBzdGF0aWNfY2FzdDxH
dGtTdGF0ZUZsYWdzPihmbGFncyksICZib3JkZXJXaWR0aCk7Ci0KLSAgICAgICAgICAgIGJ1dHRv
blJlY3QgPSBJbnRSZWN0KGJ1dHRvblJlY3QueCgpICsgYm9yZGVyV2lkdGgubGVmdCArIGZvY3Vz
UGFkLCBidXR0b25SZWN0LnkoKSArIGJvcmRlcldpZHRoLnRvcCArIGZvY3VzUGFkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uUmVjdC53aWR0aCgpIC0gKDIgKiBmb2N1
c1BhZCArIGJvcmRlcldpZHRoLmxlZnQgKyBib3JkZXJXaWR0aC5yaWdodCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBidXR0b25SZWN0LmhlaWdodCgpIC0gKDIgKiBmb2N1c1Bh
ZCArIGJvcmRlcldpZHRoLnRvcCArIGJvcmRlcldpZHRoLmJvdHRvbSkpOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGJ1dHRvblJlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQp
OwotCi0gICAgICAgIGlmIChkaXNwbGFjZUZvY3VzICYmIHRoZW1lLT5pc1ByZXNzZWQocmVuZGVy
T2JqZWN0KSkgewotICAgICAgICAgICAgZ2ludCBjaGlsZERpc3BsYWNlbWVudFg7Ci0gICAgICAg
ICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WTsKLSAgICAgICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJjaGlsZC1kaXNwbGFjZW1lbnQteCIsICZjaGlsZERpc3BsYWNlbWVudFgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15
IiwgJmNoaWxkRGlzcGxhY2VtZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOVUxMKTsKLSAgICAgICAgICAgIGJ1dHRvblJlY3QubW92ZShjaGlsZERpc3BsYWNl
bWVudFgsIGNoaWxkRGlzcGxhY2VtZW50WSk7Ci0gICAgICAgIH0KLQotICAgICAgICBndGtfcmVu
ZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCks
IGJ1dHRvblJlY3QuaGVpZ2h0KCkpOwotICAgIH0KLX0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBh
aW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBHdGtTdHlsZUNvbnRl
eHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKLSAgICBndGtf
c3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0
X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0RGlyZWN0aW9uPihndGtUZXh0
RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSkpOwotICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsK
LQotICAgIHJlbmRlckJ1dHRvbih0aGlzLCBjb250ZXh0LCByZW5kZXJPYmplY3QsIHBhaW50SW5m
bywgcmVjdCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVu
ZGVyU3R5bGUmIHN0eWxlLCBHdGtCb3JkZXImIGJvcmRlciwgaW50JiBmb2N1cywgaW50JiBzZXBh
cmF0b3IpCi17Ci0gICAgLy8gSWYgdGhpcyBtZW51IGxpc3QgYnV0dG9uIGlzbid0IGRyYXduIHVz
aW5nIHRoZSBuYXRpdmUgdGhlbWUsIHdlCi0gICAgLy8gZG9uJ3QgYWRkIGFueSBleHRyYSBwYWRk
aW5nIGJleW9uZCB3aGF0IFdlYkNvcmUgYWxyZWFkeSB1c2VzLgotICAgIGlmIChzdHlsZS5hcHBl
YXJhbmNlKCkgPT0gTm9Db250cm9sUGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR3RrU3R5
bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTUJPX0JPWCk7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLQotICAgIGd0a19zdHlsZV9j
b250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1Rl
eHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUuZGlyZWN0aW9uKCkpKSk7Ci0KLSAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0
YXRlRmxhZ3M+KDApLCAmYm9yZGVyKTsKLQotICAgIGdib29sZWFuIGludGVyaW9yRm9jdXM7Ci0g
ICAgZ2ludCBmb2N1c1dpZHRoLCBmb2N1c1BhZDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3R5bGUoY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9y
LWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwgJmZvY3VzUGFkLCBOVUxMKTsKLSAgICBmb2N1cyA9
IGludGVyaW9yRm9jdXMgPyBmb2N1c1dpZHRoICsgZm9jdXNQYWQgOiAwOwotCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfcmVzdG9yZShjb250ZXh0KTsKLQotICAgIGNvbnRleHQgPSBnZXRTdHlsZUNv
bnRleHQoR1RLX1RZUEVfU0VQQVJBVE9SKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNv
bnRleHQpOwotCi0gICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxH
dGtUZXh0RGlyZWN0aW9uPihndGtUZXh0RGlyZWN0aW9uKHN0eWxlLmRpcmVjdGlvbigpKSk7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBkaXJlY3Rpb24pOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCAic2VwYXJhdG9yIik7Ci0K
LSAgICBnYm9vbGVhbiB3aWRlU2VwYXJhdG9yczsKLSAgICBnaW50IHNlcGFyYXRvcldpZHRoOwot
ICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVTZXBhcmF0b3JzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRv
cldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIC8v
IEdUSysgYWx3YXlzIHVzZXMgYm9yZGVyLmxlZnQsIHJlZ2FyZGxlc3Mgb2YgdGV4dCBkaXJlY3Rp
b24uIFNlZSBndGtzZXBlcmF0b3IuYy4KLSAgICBpZiAoIXdpZGVTZXBhcmF0b3JzKQotICAgICAg
ICBzZXBhcmF0b3JXaWR0aCA9IGJvcmRlci5sZWZ0OwotCi0gICAgc2VwYXJhdG9yID0gc2VwYXJh
dG9yV2lkdGg7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotfQot
Ci1pbnQgUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHls
ZSYgc3R5bGUpIGNvbnN0Ci17Ci0gICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAw
LCAwIH07Ci0gICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAg
Z2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJh
dG9yV2lkdGgpOwotICAgIGludCBsZWZ0ID0gYm9yZGVyV2lkdGgubGVmdCArIGZvY3VzV2lkdGg7
Ci0gICAgaWYgKHN0eWxlLmRpcmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgbGVmdCArPSBzZXBh
cmF0b3JXaWR0aCArIG1pbkFycm93U2l6ZTsKLSAgICByZXR1cm4gbGVmdDsKLX0KLQotaW50IFJl
bmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKLXsKLSAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsK
LSAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKLSAgICBnZXRDb21i
b0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0
aCk7Ci0gICAgaW50IHJpZ2h0ID0gYm9yZGVyV2lkdGgucmlnaHQgKyBmb2N1c1dpZHRoOwotICAg
IGlmIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgIHJpZ2h0ICs9IHNlcGFyYXRv
cldpZHRoICsgbWluQXJyb3dTaXplOwotICAgIHJldHVybiByaWdodDsKLX0KLQotaW50IFJlbmRl
clRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0Ci17Ci0gICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAg
aW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hN
ZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwot
ICAgIHJldHVybiBib3JkZXJXaWR0aC50b3AgKyBmb2N1c1dpZHRoOwotfQotCi1pbnQgUmVuZGVy
VGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlJiBzdHlsZSkg
Y29uc3QKLXsKLSAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsKLSAg
ICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKLSAgICBnZXRDb21ib0Jv
eE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0aCk7
Ci0gICAgcmV0dXJuIGJvcmRlcldpZHRoLmJvdHRvbSArIGZvY3VzV2lkdGg7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3QoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIHIpCi17
Ci0gICAgLy8gRklYTUU6IGFkb3B0IHN1YnBpeGVsIHRoZW1lcy4KLSAgICBJbnRSZWN0IHJlY3Qg
PSBJbnRSZWN0KHIpOyAgIAotCi0gICAgY2Fpcm9fdCogY2Fpcm9Db250ZXh0ID0gcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwotICAgIEd0a1RleHREaXJlY3Rpb24g
ZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlv
bihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwotCi0gICAgLy8gUGFpbnQgdGhl
IGJ1dHRvbi4KLSAgICBHdGtTdHlsZUNvbnRleHQqIGJ1dHRvblN0eWxlQ29udGV4dCA9IGdldFN0
eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUo
YnV0dG9uU3R5bGVDb250ZXh0KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9u
KGJ1dHRvblN0eWxlQ29udGV4dCwgZGlyZWN0aW9uKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9h
ZGRfY2xhc3MoYnV0dG9uU3R5bGVDb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAg
ICByZW5kZXJCdXR0b24odGhpcywgYnV0dG9uU3R5bGVDb250ZXh0LCByZW5kZXJPYmplY3QsIHBh
aW50SW5mbywgcmVjdCk7Ci0KLSAgICAvLyBHZXQgdGhlIGlubmVyIHJlY3RhbmdsZS4KLSAgICBn
aW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgIEd0a0JvcmRlciogaW5uZXJCb3JkZXJQdHIg
PSAwOwotICAgIEd0a0JvcmRlciBpbm5lckJvcmRlciA9IHsgMSwgMSwgMSwgMSB9OwotICAgIGd0
a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHlsZUNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJpbm5lci1ib3JkZXIiLCAmaW5uZXJCb3JkZXJQdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3Vz
V2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1wYWRkaW5nIiwg
JmZvY3VzUGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBp
ZiAoaW5uZXJCb3JkZXJQdHIpIHsKLSAgICAgICAgaW5uZXJCb3JkZXIgPSAqaW5uZXJCb3JkZXJQ
dHI7Ci0gICAgICAgIGd0a19ib3JkZXJfZnJlZShpbm5lckJvcmRlclB0cik7Ci0gICAgfQotCi0g
ICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoOwotICAgIEd0a1N0YXRlRmxhZ3Mgc3RhdGUgPSBndGtf
c3R5bGVfY29udGV4dF9nZXRfc3RhdGUoYnV0dG9uU3R5bGVDb250ZXh0KTsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9nZXRfYm9yZGVyKGJ1dHRvblN0eWxlQ29udGV4dCwgc3RhdGUsICZib3JkZXJX
aWR0aCk7Ci0KLSAgICBmb2N1c1dpZHRoICs9IGZvY3VzUGFkOwotICAgIEludFJlY3QgaW5uZXJS
ZWN0KHJlY3QueCgpICsgaW5uZXJCb3JkZXIubGVmdCArIGJvcmRlcldpZHRoLmxlZnQgKyBmb2N1
c1dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgaW5uZXJCb3JkZXIudG9w
ICsgYm9yZGVyV2lkdGgudG9wICsgZm9jdXNXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICBy
ZWN0LndpZHRoKCkgLSBib3JkZXJXaWR0aC5sZWZ0IC0gYm9yZGVyV2lkdGgucmlnaHQgLSBpbm5l
ckJvcmRlci5sZWZ0IC0gaW5uZXJCb3JkZXIucmlnaHQgLSAoMiAqIGZvY3VzV2lkdGgpLAotICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QuaGVpZ2h0KCkgLSBib3JkZXJXaWR0aC50b3AgLSBib3Jk
ZXJXaWR0aC5ib3R0b20gLSBpbm5lckJvcmRlci50b3AgLSBpbm5lckJvcmRlci5ib3R0b20gLSAo
MiAqIGZvY3VzV2lkdGgpKTsKLQotICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgewot
ICAgICAgICBnaW50IGNoaWxkRGlzcGxhY2VtZW50WDsKLSAgICAgICAgZ2ludCBjaGlsZERpc3Bs
YWNlbWVudFk7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShidXR0b25TdHls
ZUNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hpbGQtZGlz
cGxhY2VtZW50LXgiLCAmY2hpbGREaXNwbGFjZW1lbnRYLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImNoaWxkLWRpc3BsYWNlbWVudC15IiwgJmNoaWxkRGlzcGxhY2VtZW50
WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICBp
bm5lclJlY3QubW92ZShjaGlsZERpc3BsYWNlbWVudFgsIGNoaWxkRGlzcGxhY2VtZW50WSk7Ci0g
ICAgfQotICAgIGlubmVyUmVjdC5zZXRXaWR0aChzdGQ6Om1heCgxLCBpbm5lclJlY3Qud2lkdGgo
KSkpOwotICAgIGlubmVyUmVjdC5zZXRIZWlnaHQoc3RkOjptYXgoMSwgaW5uZXJSZWN0LmhlaWdo
dCgpKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGJ1dHRvblN0eWxlQ29udGV4
dCk7Ci0KLSAgICAvLyBQYWludCB0aGUgYXJyb3cuCi0gICAgR3RrU3R5bGVDb250ZXh0KiBhcnJv
d1N0eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9BUlJPVyk7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2F2ZShhcnJvd1N0eWxlQ29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVf
Y29udGV4dF9zZXRfZGlyZWN0aW9uKGFycm93U3R5bGVDb250ZXh0LCBkaXJlY3Rpb24pOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxlQ29udGV4dCwgImFycm93Iik7
Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGFycm93U3R5bGVDb250ZXh0LCBHVEtf
U1RZTEVfQ0xBU1NfQlVUVE9OKTsKLQotICAgIGdmbG9hdCBhcnJvd1NjYWxpbmc7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGFycm93U3R5bGVDb250ZXh0LCAiYXJyb3ctc2NhbGlu
ZyIsICZhcnJvd1NjYWxpbmcsIE5VTEwpOwotCi0gICAgSW50U2l6ZSBhcnJvd1NpemUobWluQXJy
b3dTaXplLCBpbm5lclJlY3QuaGVpZ2h0KCkpOwotICAgIEZsb2F0UG9pbnQgYXJyb3dQb3NpdGlv
bihpbm5lclJlY3QubG9jYXRpb24oKSk7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9E
SVJfTFRSKQotICAgICAgICBhcnJvd1Bvc2l0aW9uLm1vdmUoaW5uZXJSZWN0LndpZHRoKCkgLSBh
cnJvd1NpemUud2lkdGgoKSwgMCk7Ci0KLSAgICAvLyBHVEsrIGFjdHVhbGx5IGZldGNoZXMgdGhl
IHhhbGlnbiBhbmQgdmFsaWduIHZhbHVlcyBmcm9tIHRoZSB3aWRnZXQsIGJ1dCBzaW5jZSB3ZQot
ICAgIC8vIGRvbid0IGhhdmUgYSB3aWRnZXQgaGVyZSwgd2UgYXJlIGp1c3QgdXNpbmcgdGhlIGRl
ZmF1bHQgeGFsaWduIGFuZCB2YWxpZ24gdmFsdWVzIG9mIDAuNS4KLSAgICBnaW50IGV4dGVudCA9
IHN0ZDo6bWluKGFycm93U2l6ZS53aWR0aCgpLCBhcnJvd1NpemUuaGVpZ2h0KCkpICogYXJyb3dT
Y2FsaW5nOwotICAgIGFycm93UG9zaXRpb24ubW92ZSgoYXJyb3dTaXplLndpZHRoKCkgLSBleHRl
bnQpIC8gMiwgKGFycm93U2l6ZS5oZWlnaHQoKSAtIGV4dGVudCkgLyAyKTsKLQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9zdGF0ZShhcnJvd1N0eWxlQ29udGV4dCwgc3RhdGUpOwotICAgIGd0
a19yZW5kZXJfYXJyb3coYXJyb3dTdHlsZUNvbnRleHQsIGNhaXJvQ29udGV4dCwgR19QSSwgYXJy
b3dQb3NpdGlvbi54KCksIGFycm93UG9zaXRpb24ueSgpLCBleHRlbnQpOwotCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfcmVzdG9yZShhcnJvd1N0eWxlQ29udGV4dCk7Ci0KLSAgICAvLyBQYWludCB0
aGUgc2VwYXJhdG9yIGlmIG5lZWRlZC4KLSAgICBHdGtTdHlsZUNvbnRleHQqIHNlcGFyYXRvclN0
eWxlQ29udGV4dCA9IGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9DT01CT19CT1gpOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X3NhdmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0KTsKLQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBkaXJlY3Rp
b24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhzZXBhcmF0b3JTdHlsZUNvbnRl
eHQsICJzZXBhcmF0b3IiKTsKLQotICAgIGdib29sZWFuIHdpZGVTZXBhcmF0b3JzOwotICAgIGdp
bnQgc2VwYXJhdG9yV2lkdGg7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKHNlcGFy
YXRvclN0eWxlQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZGUt
c2VwYXJhdG9ycyIsICZ3aWRlU2VwYXJhdG9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgInNlcGFyYXRvci13aWR0aCIsICZzZXBhcmF0b3JXaWR0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgaWYgKHdpZGVTZXBhcmF0b3JzICYmICFzZXBh
cmF0b3JXaWR0aCkgewotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHNlcGFyYXRv
clN0eWxlQ29udGV4dCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBzdGF0ZSk7Ci0g
ICAgSW50UG9pbnQgc2VwYXJhdG9yUG9zaXRpb24oYXJyb3dQb3NpdGlvbi54KCksIGlubmVyUmVj
dC55KCkpOwotICAgIGlmICh3aWRlU2VwYXJhdG9ycykgewotICAgICAgICBpZiAoZGlyZWN0aW9u
ID09IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3Zl
KC1zZXBhcmF0b3JXaWR0aCwgMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlcGFyYXRv
clBvc2l0aW9uLm1vdmUoYXJyb3dTaXplLndpZHRoKCksIDApOwotCi0gICAgICAgIGd0a19yZW5k
ZXJfZnJhbWUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBjYWlyb0NvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdG9yV2lkdGgsIGlubmVyUmVjdC5o
ZWlnaHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAg
ICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKHNlcGFyYXRvclN0eWxlQ29udGV4dCwg
c3RhdGUsICZwYWRkaW5nKTsKLSAgICAgICAgR3RrQm9yZGVyIGJvcmRlcjsKLSAgICAgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihzZXBhcmF0b3JTdHlsZUNvbnRleHQsIHN0YXRlLCAm
Ym9yZGVyKTsKLQotICAgICAgICBpZiAoZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCi0g
ICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKC0ocGFkZGluZy5sZWZ0ICsgYm9yZGVy
LmxlZnQpLCAwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VwYXJhdG9yUG9zaXRpb24u
bW92ZShhcnJvd1NpemUud2lkdGgoKSwgMCk7Ci0KLSAgICAgICAgY2Fpcm9fc2F2ZShjYWlyb0Nv
bnRleHQpOwotCi0gICAgICAgIC8vIEFuIGV4dHJhIGNsaXAgcHJldmVudHMgdGhlIHNlcGFyYXRv
ciBibGVlZGluZyBvdXRzaWRlIG9mIHRoZSBzcGVjaWZpZWQgcmVjdGFuZ2xlIGJlY2F1c2Ugb2Yg
c3VicGl4ZWwgcG9zaXRpb25pbmcuCi0gICAgICAgIGNhaXJvX3JlY3RhbmdsZShjYWlyb0NvbnRl
eHQsIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgpLCBib3JkZXIu
bGVmdCwgaW5uZXJSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgY2Fpcm9fY2xpcChjYWlyb0NvbnRl
eHQpOwotICAgICAgICBndGtfcmVuZGVyX2xpbmUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LCBjYWly
b0NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi54KCks
IHNlcGFyYXRvclBvc2l0aW9uLnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRv
clBvc2l0aW9uLngoKSwgaW5uZXJSZWN0Lm1heFkoKSk7Ci0gICAgICAgIGNhaXJvX3Jlc3RvcmUo
Y2Fpcm9Db250ZXh0KTsKLSAgICB9Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKHNl
cGFyYXRvclN0eWxlQ29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsK
LSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVf
RU5UUlkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1RleHRE
aXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9u
KCkpKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlM
RV9DTEFTU19FTlRSWSk7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKCFpc0VuYWJs
ZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKQotICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBlbHNlIGlmIChp
c0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdf
Rk9DVVNFRDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dCwgc3RhdGlj
X2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3Vu
ZChjb250ZXh0LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBndGtf
cmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpICYmIGlzRW5hYmxlZChyZW5kZXJP
YmplY3QpKSB7Ci0gICAgICAgIGdib29sZWFuIGludGVyaW9yRm9jdXM7Ci0gICAgICAgIGdpbnQg
Zm9jdXNXaWR0aCwgZm9jdXNQYWQ7Ci0gICAgICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHls
ZShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9y
LWZvY3VzIiwgJmludGVyaW9yRm9jdXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZm9jdXMtbGluZS13aWR0aCIsICZmb2N1c1dpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmciLCAmZm9jdXNQYWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgaWYgKCFpbnRlcmlvckZv
Y3VzKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGZvY3VzUmVjdChyZWN0KTsKLSAgICAgICAgICAg
IGZvY3VzUmVjdC5pbmZsYXRlKGZvY3VzV2lkdGggKyBmb2N1c1BhZCk7Ci0gICAgICAgICAgICBn
dGtfcmVuZGVyX2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNSZWN0LngoKSwg
Zm9jdXNSZWN0LnkoKSwgZm9jdXNSZWN0LndpZHRoKCksIGZvY3VzUmVjdC5oZWlnaHQoKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQp
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBhcHBseVNsaWRlclN0eWxl
Q29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBDb250cm9sUGFydCBwYXJ0
KQotewotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVf
Q0xBU1NfU0NBTEUpOwotICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBh
cnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFMKTsKLSAgICBl
bHNlIGlmIChwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4
dCwgR1RLX1NUWUxFX0NMQVNTX1ZFUlRJQ0FMKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6
cGFpbnRTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQ29udHJv
bFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHBhcnQsIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBT
bGlkZXJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOwotCi0g
ICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX1ND
QUxFKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRl
ck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7Ci0gICAgYXBwbHlTbGlkZXJTdHlsZUNvbnRl
eHRDbGFzc2VzKGNvbnRleHQsIHBhcnQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKLQotICAgIGlmICghaXNFbmFibGVk
KHJlbmRlck9iamVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQsIEdUS19TVEFURV9GTEFHX0lO
U0VOU0lUSVZFKTsKLQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
LSAgICBndGtfcmVuZGVyX2ZyYW1lKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSwKLSAgICAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIGlmIChpc0ZvY3VzZWQocmVu
ZGVyT2JqZWN0KSkgewotICAgICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwotICAgICAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzV2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9jdXMtcGFkZGluZyIsICZmb2N1c1Bh
ZCwgTlVMTCk7Ci0gICAgICAgIEludFJlY3QgZm9jdXNSZWN0KHJlY3QpOwotICAgICAgICBmb2N1
c1JlY3QuaW5mbGF0ZShmb2N1c1dpZHRoICsgZm9jdXNQYWQpOwotICAgICAgICBndGtfcmVuZGVy
X2ZvY3VzKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c1JlY3QueCgpLCBmb2N1c1JlY3QueSgp
LCBmb2N1c1JlY3Qud2lkdGgoKSwgZm9jdXNSZWN0LmhlaWdodCgpKTsKLSAgICB9Ci0KLSAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgQ29udHJvbFBhcnQgcGFydCA9IHJlbmRlck9iamVjdC5zdHlsZSgp
LmFwcGVhcmFuY2UoKTsKLSAgICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZv
bHVtZVNsaWRlclRodW1iUGFydCk7Ci0KLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQgPSBn
ZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3Nh
dmUoY29udGV4dCk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRl
eHQsIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsK
LSAgICBhcHBseVNsaWRlclN0eWxlQ29udGV4dENsYXNzZXMoY29udGV4dCwgcGFydCk7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19TTElE
RVIpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9i
amVjdCkgfHwgaXNSZWFkT25seUNvbnRyb2wocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3Mg
fD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgZWxzZSBpZiAoaXNIb3ZlcmVkKHJl
bmRlck9iamVjdCkpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwot
ICAgIGlmIChpc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NU
QVRFX0ZMQUdfQUNUSVZFOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykpOwotCi0gICAgZ3RrX3JlbmRlcl9z
bGlkZXIoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
LCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICBwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgPyBHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCA6IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCk7Ci0KLSAg
ICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUmIHN0eWxlLCBFbGVtZW50JikgY29uc3QKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0g
c3R5bGUuYXBwZWFyYW5jZSgpOwotICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRh
bFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZ2ludCBzbGlkZXJXaWR0aCwgc2xpZGVyTGVuZ3RoOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLXdpZHRoIiwgJnNsaWRlcldpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLWxlbmd0aCIsICZzbGlkZXJM
ZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIGlmIChw
YXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQpIHsKLSAgICAgICAgc3R5bGUuc2V0V2lk
dGgoTGVuZ3RoKHNsaWRlckxlbmd0aCwgRml4ZWQpKTsKLSAgICAgICAgc3R5bGUuc2V0SGVpZ2h0
KExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBBU1NFUlQocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWJQYXJ0KTsKLSAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc2xpZGVy
V2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChzbGlkZXJMZW5ndGgs
IEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmICghcmVuZGVyT2JqZWN0LmlzUHJvZ3Jl
c3MoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRl
eHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfUFJPR1JFU1NfQkFSKTsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2Ns
YXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwotCi0gICAgZ3RrX3JlbmRlcl9i
YWNrZ3JvdW5kKGNvbnRleHQsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwot
ICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5o
ZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsKLSAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKLQotCi0g
ICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmco
Y29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCksICZwYWRkaW5nKTsKLSAgICBJ
bnRSZWN0IHByb2dyZXNzUmVjdChyZWN0LngoKSArIHBhZGRpbmcubGVmdCwgcmVjdC55KCkgKyBw
YWRkaW5nLnRvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLSAocGFk
ZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcmVj
dC5oZWlnaHQoKSAtIChwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tKSk7Ci0gICAgcHJvZ3Jl
c3NSZWN0ID0gUmVuZGVyVGhlbWVHdGs6OmNhbGN1bGF0ZVByb2dyZXNzUmVjdChyZW5kZXJPYmpl
Y3QsIHByb2dyZXNzUmVjdCk7Ci0KLSAgICBpZiAoIXByb2dyZXNzUmVjdC5pc0VtcHR5KCkpCi0g
ICAgICAgIGd0a19yZW5kZXJfYWN0aXZpdHkoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCBwcm9ncmVzc1JlY3QueCgpLCBwcm9ncmVzc1JlY3QueSgp
LCBwcm9ncmVzc1JlY3Qud2lkdGgoKSwgcHJvZ3Jlc3NSZWN0LmhlaWdodCgpKTsKLQotICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1zdGF0aWMgZ2ludCBzcGluQnV0dG9uQXJyb3dTaXplKEd0a1N0eWxlQ29udGV4dCogY29udGV4
dCkKLXsKLSAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZm9udERlc2NyaXB0aW9uOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X2dldChjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPigw
KSwgImZvbnQiLCAmZm9udERlc2NyaXB0aW9uLCBOVUxMKTsKLSAgICBnaW50IGZvbnRTaXplID0g
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfc2l6ZShmb250RGVzY3JpcHRpb24pOwotICAgIGdp
bnQgYXJyb3dTaXplID0gc3RkOjptYXgoUEFOR09fUElYRUxTKGZvbnRTaXplKSwgbWluU3BpbkJ1
dHRvbkFycm93U2l6ZSk7Ci0gICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGZvbnREZXNj
cmlwdGlvbik7Ci0KLSAgICByZXR1cm4gYXJyb3dTaXplIC0gYXJyb3dTaXplICUgMjsgLy8gRm9y
Y2UgZXZlbi4KLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9u
U3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCYpIGNvbnN0
Ci17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250ZXh0KEdUS19U
WVBFX1NQSU5fQlVUVE9OKTsKLQotICAgIEd0a0JvcmRlciBwYWRkaW5nOwotICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9wYWRkaW5nKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+
KDApLCAmcGFkZGluZyk7Ci0KLSAgICBpbnQgd2lkdGggPSBzcGluQnV0dG9uQXJyb3dTaXplKGNv
bnRleHQpICsgcGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodDsKLSAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7Ci0gICAgc3R5bGUuc2V0TWluV2lkdGgoTGVuZ3RoKHdp
ZHRoLCBGaXhlZCkpOwotfQotCi1zdGF0aWMgdm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5k
ZXJUaGVtZSogdGhlbWUsIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBHdGtBcnJvd1R5cGUgYXJyb3dUeXBlKQotewotICAgIEFTU0VSVChhcnJvd1R5
cGUgPT0gR1RLX0FSUk9XX1VQIHx8IGFycm93VHlwZSA9PSBHVEtfQVJST1dfRE9XTik7Ci0KLSAg
ICBndGtfc3R5bGVfY29udGV4dF9zYXZlKGNvbnRleHQpOwotICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLQotICAgIEd0a1Rl
eHREaXJlY3Rpb24gZGlyZWN0aW9uID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2RpcmVjdGlvbihj
b250ZXh0KTsKLSAgICBndWludCBzdGF0ZSA9IHN0YXRpY19jYXN0PGd1aW50PihndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3RhdGUoY29udGV4dCkpOwotICAgIGlmICghKHN0YXRlICYgR1RLX1NUQVRF
X0ZMQUdfSU5TRU5TSVRJVkUpKSB7Ci0gICAgICAgIGlmICh0aGVtZS0+aXNQcmVzc2VkKHJlbmRl
ck9iamVjdCkpIHsKLSAgICAgICAgICAgIGlmICgoYXJyb3dUeXBlID09IEdUS19BUlJPV19VUCAm
JiB0aGVtZS0+aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAg
ICAgICAgICAgIHx8IChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04gJiYgIXRoZW1lLT5pc1Nw
aW5VcEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVjdCkpKQotICAgICAgICAgICAgICAgIHN0
YXRlIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICAgICAgfSBlbHNlIGlmICh0aGVtZS0+
aXNIb3ZlcmVkKHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgICAgIGlmICgoYXJyb3dUeXBlID09
IEdUS19BUlJPV19VUCAmJiB0aGVtZS0+aXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJP
YmplY3QpKQotICAgICAgICAgICAgICAgIHx8IChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX0RPV04g
JiYgIXRoZW1lLT5pc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRlck9iamVjdCkpKQotICAg
ICAgICAgICAgICAgIHN0YXRlIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAgICAgICB9
Ci0gICAgfQotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNf
Y2FzdDxHdGtTdGF0ZUZsYWdzPihzdGF0ZSkpOwotCi0gICAgLy8gUGFpbnQgYnV0dG9uLgotICAg
IEludFJlY3QgYnV0dG9uUmVjdChyZWN0KTsKLSAgICBndWludCBqdW5jdGlvbiA9IGd0a19zdHls
ZV9jb250ZXh0X2dldF9qdW5jdGlvbl9zaWRlcyhjb250ZXh0KTsKLSAgICBpZiAoYXJyb3dUeXBl
ID09IEdUS19BUlJPV19VUCkKLSAgICAgICAganVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX0JPVFRP
TTsKLSAgICBlbHNlIHsKLSAgICAgICAganVuY3Rpb24gfD0gR1RLX0pVTkNUSU9OX1RPUDsKLSAg
ICAgICAgYnV0dG9uUmVjdC5tb3ZlKDAsIHJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0gICAg
YnV0dG9uUmVjdC5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAvIDIpOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9qdW5jdGlvbl9zaWRlcyhjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtKdW5jdGlv
blNpZGVzPihqdW5jdGlvbikpOwotCi0gICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQs
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54
KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0
KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1
dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICAvLyBQYWludCBh
cnJvdyBjZW50ZXJlZCBpbnNpZGUgYnV0dG9uLgotICAgIC8vIFRoaXMgY29kZSBpcyBiYXNlZCBv
biBndGtzcGluYnV0dG9uLmMgY29kZS4KLSAgICBJbnRSZWN0IGFycm93UmVjdDsKLSAgICBnZG91
YmxlIGFuZ2xlOwotICAgIGlmIChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQKSB7Ci0gICAgICAg
IGFuZ2xlID0gMDsKLSAgICAgICAgYXJyb3dSZWN0LnNldFkocmVjdC55KCkpOwotICAgICAgICBh
cnJvd1JlY3Quc2V0SGVpZ2h0KHJlY3QuaGVpZ2h0KCkgLyAyIC0gMik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgYW5nbGUgPSBHX1BJOwotICAgICAgICBhcnJvd1JlY3Quc2V0WShyZWN0LnkoKSAr
IGJ1dHRvblJlY3QueSgpKTsKLSAgICAgICAgYXJyb3dSZWN0LnNldEhlaWdodChyZWN0LmhlaWdo
dCgpIC0gYXJyb3dSZWN0LnkoKSAtIDIpOwotICAgIH0KLSAgICBhcnJvd1JlY3Quc2V0V2lkdGgo
cmVjdC53aWR0aCgpIC0gMyk7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRS
KQotICAgICAgICBhcnJvd1JlY3Quc2V0WChyZWN0LngoKSArIDEpOwotICAgIGVsc2UKLSAgICAg
ICAgYXJyb3dSZWN0LnNldFgocmVjdC54KCkgKyAyKTsKLQotICAgIGdpbnQgd2lkdGggPSBhcnJv
d1JlY3Qud2lkdGgoKSAvIDI7Ci0gICAgd2lkdGggLT0gd2lkdGggJSAyIC0gMTsgLy8gRm9yY2Ug
b2RkLgotICAgIGdpbnQgaGVpZ2h0ID0gKHdpZHRoICsgMSkgLyAyOwotCi0gICAgYXJyb3dSZWN0
Lm1vdmUoKGFycm93UmVjdC53aWR0aCgpIC0gd2lkdGgpIC8gMiwgKGFycm93UmVjdC5oZWlnaHQo
KSAtIGhlaWdodCkgLyAyKTsKLSAgICBndGtfcmVuZGVyX2Fycm93KGNvbnRleHQsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5nbGUsIGFycm93UmVjdC54KCks
IGFycm93UmVjdC55KCksIHdpZHRoKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
Y29udGV4dCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5uZXJTcGluQnV0dG9u
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBHdGtTdHlsZUNvbnRleHQqIGNvbnRl
eHQgPSBnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfU1BJTl9CVVRUT04pOwotICAgIGd0a19zdHls
ZV9jb250ZXh0X3NhdmUoY29udGV4dCk7Ci0KLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVy
T2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRf
ZGlyZWN0aW9uKGNvbnRleHQsIGRpcmVjdGlvbik7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0g
ICAgaWYgKCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5k
ZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsK
LSAgICBlbHNlIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfRk9DVVNFRDsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUo
Y29udGV4dCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLSAgICBndGtfc3R5
bGVfY29udGV4dF9yZW1vdmVfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0VOVFJZKTsK
LQotICAgIHBhaW50U3BpbkFycm93QnV0dG9uKHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwg
cGFpbnRJbmZvLCByZWN0LCBHVEtfQVJST1dfVVApOwotICAgIHBhaW50U3BpbkFycm93QnV0dG9u
KHRoaXMsIGNvbnRleHQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0LCBHVEtfQVJST1df
RE9XTik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKGNvbnRleHQpOwotCi0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1HUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tJY29uRm9yV2lk
Z2V0VHlwZShHVHlwZSB3aWRnZXRUeXBlLCBjb25zdCBjaGFyKiBpY29uTmFtZSwgZ2ludCBkaXJl
Y3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpCi17Ci0gICAgQVNTRVJUKGljb25OYW1l
KTsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCA9IGdldFN0eWxlQ29udGV4dCh3aWRn
ZXRUeXBlKTsKLSAgICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX3N0eWxlX2NvbnRleHRfbG9v
a3VwX2ljb25fc2V0KGNvbnRleHQsIGljb25OYW1lKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NhdmUoY29udGV4dCk7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKHN0YXRlID09
IEdUS19TVEFURV9QUkVMSUdIVCkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJF
TElHSFQ7Ci0gICAgZWxzZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQotICAg
ICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLQotICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihm
bGFncykpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dCwgc3Rh
dGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7Ci0gICAgR2RrUGl4YnVmKiBp
Y29uID0gZ3RrX2ljb25fc2V0X3JlbmRlcl9pY29uX3BpeGJ1ZihpY29uU2V0LCBjb250ZXh0LCBz
dGF0aWNfY2FzdDxHdGtJY29uU2l6ZT4oaWNvblNpemUpKTsKLQotICAgIGd0a19zdHlsZV9jb250
ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICByZXR1cm4gYWRvcHRHUmVmKGljb24pOwotfQot
Ci1HUmVmUHRyPEdka1BpeGJ1Zj4gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdU
eXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIq
IGZhbGxiYWNrU3RvY2tJY29uTmFtZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQg
aWNvblNpemUpCi17Ci0gICAgR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0ID0gZ2V0U3R5bGVDb250
ZXh0KHdpZGdldFR5cGUpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0KTsK
LQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX1BSRUxJ
R0hUKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBlbHNl
IGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVfSU5TRU5TSVRJVkUpCi0gICAgICAgIGZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0lOU0VOU0lUSVZFOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0
YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0gICAgZ3Rr
X3N0eWxlX2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtUZXh0
RGlyZWN0aW9uPihkaXJlY3Rpb24pKTsKLSAgICBHdGtJY29uSW5mbyogaW5mbyA9IGd0a19pY29u
X3RoZW1lX2xvb2t1cF9pY29uKGd0a19pY29uX3RoZW1lX2dldF9kZWZhdWx0KCksIHN5bWJvbGlj
SWNvbk5hbWUsIGljb25TaXplLAotICAgICAgICBzdGF0aWNfY2FzdDxHdGtJY29uTG9va3VwRmxh
Z3M+KEdUS19JQ09OX0xPT0tVUF9GT1JDRV9TVkcgfCBHVEtfSUNPTl9MT09LVVBfRk9SQ0VfU0la
RSkpOwotICAgIEdka1BpeGJ1ZiogaWNvbiA9IDA7Ci0gICAgaWYgKGluZm8pIHsKLSAgICAgICAg
aWNvbiA9IGd0a19pY29uX2luZm9fbG9hZF9zeW1ib2xpY19mb3JfY29udGV4dChpbmZvLCBjb250
ZXh0LCAwLCAwKTsKLSAgICAgICAgZ3RrX2ljb25faW5mb19mcmVlKGluZm8pOwotICAgIH0KLQot
ICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dCk7Ci0KLSAgICBpZiAoIWljb24p
IHsKLSAgICAgICAgaWYgKCFmYWxsYmFja1N0b2NrSWNvbk5hbWUpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUod2lk
Z2V0VHlwZSwgZmFsbGJhY2tTdG9ja0ljb25OYW1lLCBkaXJlY3Rpb24sIHN0YXRlLCBpY29uU2l6
ZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0R1JlZihpY29uKTsKLX0KLQotQ29sb3IgUmVu
ZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29u
c3QKLXsKLSAgICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9n
ZXRfYmFja2dyb3VuZF9jb2xvcihnZXRTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpLCBzdGF0
aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCB8IEdUS19TVEFU
RV9GTEFHX0ZPQ1VTRUQpLCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdCQUNvbG9y
OwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoZ2V0U3R5bGVDb250ZXh0KEdU
S19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29sb3IpOwot
ICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdC
QSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxl
Q29udGV4dChHVEtfVFlQRV9FTlRSWSksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KEdUS19T
VEFURV9GTEFHX1NFTEVDVEVEIHwgR1RLX1NUQVRFX0ZMQUdfRk9DVVNFRCksICZnZGtSR0JBQ29s
b3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3Rr
OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKLXsKLSAg
ICBHZGtSR0JBIGdka1JHQkFDb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3Io
Z2V0U3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQs
ICZnZGtSR0JBQ29sb3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJl
bmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVF
X1ZJRVcpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVfRkxBR19TRUxFQ1RF
RCB8IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQpLCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4g
Z2RrUkdCQUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEdka1JHQkEg
Z2RrUkdCQUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9y
KGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcpLCBHVEtfU1RBVEVfRkxBR19TRUxF
Q1RFRCwgJmdka1JHQkFDb2xvcik7Ci0gICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLX0KLQotQ29s
b3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSBnZGtSR0JBQ29sb3I7Ci0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdldFN0eWxlQ29udGV4dChHVEtfVFlQRV9UUkVFX1ZJRVcp
LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCB8IEdU
S19TVEFURV9GTEFHX0ZPQ1VTRUQpLCAmZ2RrUkdCQUNvbG9yKTsKLSAgICByZXR1cm4gZ2RrUkdC
QUNvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEdka1JHQkEgZ2RrUkdC
QUNvbG9yOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xvcihnZXRTdHlsZUNvbnRleHQo
R1RLX1RZUEVfVFJFRV9WSUVXKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsICZnZGtSR0JBQ29s
b3IpOwotICAgIHJldHVybiBnZGtSR0JBQ29sb3I7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3Rr
OjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQpIGNvbnN0Ci17Ci0gICAgR2RrUkdC
QSBnZGtSR0JBQ29sb3I7Ci0KLSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKLSAgICBjYXNlIENT
U1ZhbHVlQnV0dG9udGV4dDoKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9CVVRUT04pLCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsICZn
ZGtSR0JBQ29sb3IpOwotICAgICAgICByZXR1cm4gZ2RrUkdCQUNvbG9yOwotICAgIGNhc2UgQ1NT
VmFsdWVDYXB0aW9udGV4dDoKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKGdl
dFN0eWxlQ29udGV4dChHVEtfVFlQRV9FTlRSWSksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+
KDApLCAmZ2RrUkdCQUNvbG9yKTsKLSAgICAgICAgcmV0dXJuIGdka1JHQkFDb2xvcjsKLSAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVl
SWQpOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUdU
S19BUElfVkVSU0lPTl8yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9s
bGJhclRoZW1lR3RrLmNwcAppbmRleCAxMzQ3Njc2Li5jMTBmNWQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKQEAgLTI2LDEwICsy
NiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3Rr
LmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgorI2luY2x1ZGUgPGd0ay9ndGsu
aD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC01MCw2ICs1Myw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6Omhhc1RodW1iKFNj
cm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIpCiAgICAgLy8gcGFpbnRpbmcgdGhlIHRodW1i
IGNhbiBiZSBza2lwcGVkLiAgV2UgZG9uJ3QgaGF2ZSB0byBiZSBleGFjdCBoZXJlLgogICAgIHJl
dHVybiB0aHVtYkxlbmd0aChzY3JvbGxiYXIpID4gMDsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNjcm9sbGJhcik7CiAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCiB9CkBAIC03NSw2ICs3OSw4
IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIFNjcm9sCiAgICAgLy8gVmVydGljYWxTY3JvbGxiYXIgYWx0
ZXJuYXRlIGJ1dHRvbgogICAgIHJldHVybiBJbnRSZWN0KHgsIHNjcm9sbGJhci0+eSgpICsgc2Ny
b2xsYmFyLT5oZWlnaHQoKSAtIG1fdHJvdWdoQm9yZGVyV2lkdGggLSAoMiAqIHNpemUuaGVpZ2h0
KCkpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0oc2Nyb2xsYmFyKTsKKyAgICBVTlVTRURfUEFSQU0ocGFydCk7CiAgICAgcmV0dXJuIEludFJl
Y3QoKTsKICNlbmRpZgogfQpAQCAtMTA1LDYgKzExMSw4IEBAIEludFJlY3QgU2Nyb2xsYmFyVGhl
bWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIs
IFNjCiAgICAgLy8gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCAoYWx0ZXJuYXRlIGJ1dHRvbikKICAg
ICByZXR1cm4gSW50UmVjdCh4LCBzY3JvbGxiYXItPnkoKSArIG1fdHJvdWdoQm9yZGVyV2lkdGgg
KyBzaXplLmhlaWdodCgpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oc2Nyb2xsYmFyKTsKKyAgICBVTlVTRURfUEFSQU0ocGFydCk7CiAgICAg
cmV0dXJuIEludFJlY3QoKTsKICNlbmRpZgogfQpAQCAtMTQ5LDQxICsxNTcsNjkgQEAgSW50UmVj
dCBTY3JvbGxiYXJUaGVtZUd0azo6dHJhY2tSZWN0KFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3Jv
bGxiYXIsIGJvb2wpCiAgICAgcmV0dXJuIEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9sbGJh
ci0+eSgpICsgbW92ZW1lbnRBeGlzUGFkZGluZyArIHN0YXJ0QnV0dG9uc09mZnNldCwKICAgICAg
ICAgICAgICAgICAgICB0aGlja25lc3MsIHNjcm9sbGJhci0+aGVpZ2h0KCkgLSAoMiAqIG1vdmVt
ZW50QXhpc1BhZGRpbmcpIC0gYnV0dG9uc1dpZHRoKTsKICNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHNjcm9sbGJhcik7CiAgICAgcmV0dXJuIEludFJlY3QoKTsKICNlbmRpZgogfQogCiAjaWZuZGVm
IEdUS19BUElfVkVSU0lPTl8yCi1zdGF0aWMgSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+
KiBnU2Nyb2xsYmFyczsKK3N0YXRpYyB2b2lkIGd0a1N0eWxlQ2hhbmdlZENhbGxiYWNrKEd0a1dp
ZGdldCosIFNjcm9sbGJhclRoZW1lR3RrKiBzY3JvbGxiYXJUaGVtZSkKK3sKKyAgICBzY3JvbGxi
YXJUaGVtZS0+dXBkYXRlVGhlbWVQcm9wZXJ0aWVzKCk7Cit9CisKK1Njcm9sbGJhclRoZW1lR3Rr
OjpTY3JvbGxiYXJUaGVtZUd0aygpCisgICAgOiBtX2NvbnRleHQoc3RhdGljX2Nhc3Q8UmVuZGVy
VGhlbWVHdGsqPihSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkuZ2V0KCkpLT5ndGtTY3JvbGxi
YXJTdHlsZSgpKQoreworICAgIHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9jb250ZXh0LCAiY2hhbmdlZCIsIEdfQ0FMTEJBQ0soZ3RrU3R5bGVDaGFuZ2Vk
Q2FsbGJhY2spLCB0aGlzKTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dXBkYXRlVGhl
bWVQcm9wZXJ0aWVzKCkKK3sKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoCisgICAg
ICAgIG1fY29udGV4dCwKKyAgICAgICAgIm1pbi1zbGlkZXItbGVuZ3RoIiwgJm1fbWluVGh1bWJM
ZW5ndGgsCisgICAgICAgICJzbGlkZXItd2lkdGgiLCAmbV90aHVtYkZhdG5lc3MsCisgICAgICAg
ICJ0cm91Z2gtYm9yZGVyIiwgJm1fdHJvdWdoQm9yZGVyV2lkdGgsCisgICAgICAgICJzdGVwcGVy
LXNpemUiLCAmbV9zdGVwcGVyU2l6ZSwKKyAgICAgICAgInN0ZXBwZXItc3BhY2luZyIsICZtX3N0
ZXBwZXJTcGFjaW5nLAorICAgICAgICAidHJvdWdoLXVuZGVyLXN0ZXBwZXJzIiwgJm1fdHJvdWdo
VW5kZXJTdGVwcGVycywKKyAgICAgICAgImhhcy1iYWNrd2FyZC1zdGVwcGVyIiwgJm1faGFzQmFj
a0J1dHRvblN0YXJ0UGFydCwKKyAgICAgICAgImhhcy1mb3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNG
b3J3YXJkQnV0dG9uRW5kUGFydCwKKyAgICAgICAgImhhcy1zZWNvbmRhcnktYmFja3dhcmQtc3Rl
cHBlciIsICZtX2hhc0JhY2tCdXR0b25FbmRQYXJ0LAorICAgICAgICAiaGFzLXNlY29uZGFyeS1m
b3J3YXJkLXN0ZXBwZXIiLCAmbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0LAorICAgICAgICBu
dWxscHRyKTsKKyAgICB1cGRhdGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKTsKK30KKwordHlw
ZWRlZiBIYXNoU2V0PFNjcm9sbGJhclRoZW1lQ2xpZW50Kj4gU2Nyb2xsYmFyTWFwOworCitzdGF0
aWMgU2Nyb2xsYmFyTWFwJiBzY3JvbGxiYXJNYXAoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTY3JvbGxiYXJNYXA+IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQogCiB2b2lkIFNjcm9s
bGJhclRoZW1lR3RrOjpyZWdpc3RlclNjcm9sbGJhcihTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Ny
b2xsYmFyKQogewotICAgIGlmICghZ1Njcm9sbGJhcnMpCi0gICAgICAgIGdTY3JvbGxiYXJzID0g
bmV3IEhhc2hTZXQ8U2Nyb2xsYmFyVGhlbWVDbGllbnQqPjsKLSAgICBnU2Nyb2xsYmFycy0+YWRk
KHNjcm9sbGJhcik7CisgICAgc2Nyb2xsYmFyTWFwKCkuYWRkKHNjcm9sbGJhcik7CiB9CiAKIHZv
aWQgU2Nyb2xsYmFyVGhlbWVHdGs6OnVucmVnaXN0ZXJTY3JvbGxiYXIoU2Nyb2xsYmFyVGhlbWVD
bGllbnQqIHNjcm9sbGJhcikKIHsKLSAgICBnU2Nyb2xsYmFycy0+cmVtb3ZlKHNjcm9sbGJhcik7
Ci0gICAgaWYgKGdTY3JvbGxiYXJzLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgZGVsZXRlIGdTY3Jv
bGxiYXJzOwotICAgICAgICBnU2Nyb2xsYmFycyA9IDA7Ci0gICAgfQorICAgIHNjcm9sbGJhck1h
cCgpLnJlbW92ZShzY3JvbGxiYXIpOwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRh
dGVTY3JvbGxiYXJzRnJhbWVUaGlja25lc3MoKQogewotICAgIGlmICghZ1Njcm9sbGJhcnMpCisg
ICAgaWYgKHNjcm9sbGJhck1hcCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gVXBkYXRlIHRoZSB0aGlja25lc3Mgb2YgZXZlcnkgaW50ZXJpb3IgZnJhbWUgc2Nyb2xsYmFy
IHdpZGdldC4gVGhlCiAgICAgLy8gcGxhdGZvcm0taW5kZXBlbmRlbnQgc2Nyb2xsYmFyIHRoZW0g
Y29kZSBpc24ndCB5ZXQgc21hcnQgZW5vdWdoIHRvIGdldAogICAgIC8vIHRoaXMgaW5mb3JtYXRp
b24gd2hlbiBpdCBwYWludHMuCi0gICAgSGFzaFNldDxTY3JvbGxiYXJUaGVtZUNsaWVudCo+Ojpp
dGVyYXRvciBlbmQgPSBnU2Nyb2xsYmFycy0+ZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFNjcm9s
bGJhclRoZW1lQ2xpZW50Kj46Oml0ZXJhdG9yIGl0ID0gZ1Njcm9sbGJhcnMtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFy
ID0gKCppdCk7Ci0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIHNjcm9sbGJhciA6IHNjcm9sbGJhck1h
cCgpKSB7CiAgICAgICAgIC8vIFRvcC1sZXZlbCBzY3JvbGxiYXIgaS5lLiBzY3JvbGxiYXJzIHdo
byBoYXZlIGEgcGFyZW50IFNjcm9sbFZpZXcKICAgICAgICAgLy8gd2l0aCBubyBwYXJlbnQgYXJl
IG5hdGl2ZSwgYW5kIHRodXMgZG8gbm90IG5lZWQgdG8gYmUgcmVzaXplZC4KICAgICAgICAgaWYg
KCFzY3JvbGxiYXItPnBhcmVudCgpIHx8ICFzY3JvbGxiYXItPnBhcmVudCgpLT5wYXJlbnQoKSkK
QEAgLTIwOCw2ICsyNDQsMTEzIEBAIEludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OnRodW1iUmVj
dChTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJbnRSCiAgICAgcmV0dXJu
IEludFJlY3QodHJhY2tSZWN0LngoKSArICh0cmFja1JlY3Qud2lkdGgoKSAtIG1fdGh1bWJGYXRu
ZXNzKSAvIDIsIHRyYWNrUmVjdC55KCkgKyB0aHVtYlBvcywgbV90aHVtYkZhdG5lc3MsIHRodW1i
TGVuZ3RoKHNjcm9sbGJhcikpOwogfQogCitzdGF0aWMgdm9pZCBhcHBseVNjcm9sbGJhclN0eWxl
Q29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKK3sKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29u
dGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NDUk9MTEJBUik7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
YWRkX2NsYXNzKGNvbnRleHQsIG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gIEdU
S19TVFlMRV9DTEFTU19WRVJUSUNBTCA6IEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFMKTsKK30K
Kwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUcmFja0JhY2tncm91bmQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIC8vIFBhaW50IHRoZSB0cmFjayBiYWNrZ3JvdW5kLiBJZiB0
aGUgdHJvdWdoLXVuZGVyLXN0ZXBwZXJzIHByb3BlcnR5IGlzIHRydWUsIHRoaXMKKyAgICAvLyBz
aG91bGQgYmUgdGhlIGZ1bGwgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyLCBidXQgaWYgaXMgZmFsc2Us
IGl0IHNob3VsZCBvbmx5IGJlIHRoZQorICAgIC8vIHRyYWNrIHJlY3QuCisgICAgSW50UmVjdCBm
dWxsU2Nyb2xsYmFyUmVjdChyZWN0KTsKKyAgICBpZiAobV90cm91Z2hVbmRlclN0ZXBwZXJzKQor
ICAgICAgICBmdWxsU2Nyb2xsYmFyUmVjdCA9IEludFJlY3Qoc2Nyb2xsYmFyLT54KCksIHNjcm9s
bGJhci0+eSgpLCBzY3JvbGxiYXItPndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkpOworCisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOworCisgICAgYXBwbHlTY3JvbGxi
YXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MobV9jb250ZXh0LCBHVEtfU1RZTEVf
Q0xBU1NfVFJPVUdIKTsKKworICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChtX2NvbnRleHQsIGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBmdWxsU2Nyb2xsYmFyUmVjdC54KCksIGZ1
bGxTY3JvbGxiYXJSZWN0LnkoKSwgZnVsbFNjcm9sbGJhclJlY3Qud2lkdGgoKSwgZnVsbFNjcm9s
bGJhclJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgZnVsbFNjcm9sbGJhclJlY3QueCgpLCBmdWxs
U2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3JvbGxiYXJSZWN0LndpZHRoKCksIGZ1bGxTY3JvbGxi
YXJSZWN0LmhlaWdodCgpKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250
ZXh0KTsKK30KKwordm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRTY3JvbGxiYXJCYWNrZ3Jv
dW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9s
bGJhcikKK3sKKyAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKG1fY29udGV4dCk7CisKKyAgICBh
cHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9jb250ZXh0LCBzY3JvbGxiYXItPm9y
aWVudGF0aW9uKCkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX2NvbnRleHQs
ICJzY3JvbGxlZC13aW5kb3ciKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKG1fY29udGV4dCwgY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHNjcm9sbGJhci0+eCgpLCBzY3JvbGxiYXIt
PnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhlaWdodCgpKTsKKworICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKK30KKwordm9pZCBTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRo
ZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOworCisgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCk7CisgICAgYXBwbHlTY3JvbGxi
YXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgb3JpZW50YXRpb24pOworICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX2NvbnRleHQsIEdUS19TVFlMRV9DTEFTU19TTElERVIp
OworCisgICAgZ3VpbnQgZmxhZ3MgPSAwOworICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0
KCkgPT0gVGh1bWJQYXJ0KQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7
CisgICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCisgICAgICAg
IGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9zdGF0ZShtX2NvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7
CisKKyAgICBndGtfcmVuZGVyX3NsaWRlcihtX2NvbnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSwKKyAgICAgICAgb3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJ
RU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCk7CisKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9yZXN0b3JlKG1fY29udGV4dCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFy
VGhlbWVHdGs6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFy
dCBwYXJ0KQoreworICAgIGd0a19zdHlsZV9jb250ZXh0X3NhdmUobV9jb250ZXh0KTsKKworICAg
IFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpOworICAgIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhtX2NvbnRleHQsIG9y
aWVudGF0aW9uKTsKKworICAgIGd1aW50IGZsYWdzID0gMDsKKyAgICBpZiAoKEJhY2tCdXR0b25T
dGFydFBhcnQgPT0gcGFydCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSkKKyAgICAgICAgfHwg
KEJhY2tCdXR0b25FbmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkpCisg
ICAgICAgIHx8IChGb3J3YXJkQnV0dG9uRW5kUGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3Vy
cmVudFBvcygpICE9IHNjcm9sbGJhci0+bWF4aW11bSgpKQorICAgICAgICB8fCAoRm9yd2FyZEJ1
dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpICE9IHNjcm9s
bGJhci0+bWF4aW11bSgpKSkgeworICAgICAgICBpZiAocGFydCA9PSBzY3JvbGxiYXItPnByZXNz
ZWRQYXJ0KCkpCisgICAgICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Cisg
ICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSkKKyAgICAgICAgICAg
IGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOworICAgIH0gZWxzZQorICAgICAgICBm
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfc3RhdGUobV9jb250ZXh0LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihmbGFncykp
OworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKG1fY29udGV4dCwgR1RLX1NUWUxF
X0NMQVNTX0JVVFRPTik7CisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKG1fY29udGV4dCwgY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1lKG1fY29udGV4dCwg
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKworICAgIGdmbG9hdCBhcnJvd1NjYWxpbmc7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4dCwgImFycm93LXNjYWxpbmci
LCAmYXJyb3dTY2FsaW5nLCBudWxscHRyKTsKKworICAgIGRvdWJsZSBhcnJvd1NpemUgPSBzdGQ6
Om1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpICogYXJyb3dTY2FsaW5nOworICAgIEZs
b2F0UG9pbnQgYXJyb3dQb2ludCgKKyAgICAgICAgcmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0g
YXJyb3dTaXplKSAvIDIsCisgICAgICAgIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBhcnJv
d1NpemUpIC8gMik7CisKKyAgICBpZiAoZmxhZ3MgJiBHVEtfU1RBVEVfRkxBR19BQ1RJVkUpIHsK
KyAgICAgICAgZ2ludCBhcnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WTsKKyAg
ICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKG1fY29udGV4dCwgImFycm93LWRpc3Bs
YWNlbWVudC14IiwgJmFycm93RGlzcGxhY2VtZW50WCwgImFycm93LWRpc3BsYWNlbWVudC15Iiwg
JmFycm93RGlzcGxhY2VtZW50WSwgbnVsbHB0cik7CisgICAgICAgIGFycm93UG9pbnQubW92ZShh
cnJvd0Rpc3BsYWNlbWVudFgsIGFycm93RGlzcGxhY2VtZW50WSk7CisgICAgfQorCisgICAgZ2Rv
dWJsZSBhbmdsZTsKKyAgICBpZiAob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpCisg
ICAgICAgIGFuZ2xlID0gKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBG
b3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSA/IEdfUEkgOiAwOworICAgIGVsc2UKKyAgICAgICAgYW5n
bGUgPSAocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0
b25TdGFydFBhcnQpID8gR19QSSAvIDIgOiAzICogKEdfUEkgLyAyKTsKKworICAgIGd0a19yZW5k
ZXJfYXJyb3cobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYW5n
bGUsIGFycm93UG9pbnQueCgpLCBhcnJvd1BvaW50LnkoKSwgYXJyb3dTaXplKTsKKworICAgIGd0
a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKK30KKwogYm9vbCBTY3JvbGxiYXJU
aGVtZUd0azo6cGFpbnQoU2Nyb2xsYmFyVGhlbWVDbGllbnQqIHNjcm9sbGJhciwgR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCiB7CiAg
ICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMjU0LDggKzM5
Nyw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6OnBhaW50KFNjcm9sbGJhclRoZW1lQ2xpZW50
KiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCoKICAgICAgICAgICAgIHNjcm9sbE1hc2sgfD0g
VGh1bWJQYXJ0OwogICAgIH0KIAotICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBhbGxCdXR0
b25zID0gQmFja0J1dHRvblN0YXJ0UGFydCB8IEJhY2tCdXR0b25FbmRQYXJ0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCB8
IEZvcndhcmRCdXR0b25FbmRQYXJ0OworICAgIFNjcm9sbGJhckNvbnRyb2xQYXJ0TWFzayBhbGxC
dXR0b25zID0gQmFja0J1dHRvblN0YXJ0UGFydCB8IEJhY2tCdXR0b25FbmRQYXJ0IHwgRm9yd2Fy
ZEJ1dHRvblN0YXJ0UGFydCB8IEZvcndhcmRCdXR0b25FbmRQYXJ0OwogICAgIGlmIChzY3JvbGxN
YXNrICYgVHJhY2tCR1BhcnQgfHwgc2Nyb2xsTWFzayAmIFRodW1iUGFydCB8fCBzY3JvbGxNYXNr
ICYgYWxsQnV0dG9ucykKICAgICAgICAgcGFpbnRTY3JvbGxiYXJCYWNrZ3JvdW5kKGdyYXBoaWNz
Q29udGV4dCwgc2Nyb2xsYmFyKTsKICAgICAgICAgcGFpbnRUcmFja0JhY2tncm91bmQoZ3JhcGhp
Y3NDb250ZXh0LCBzY3JvbGxiYXIsIHRyYWNrUGFpbnRSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0azMuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk3NDljNTQuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrMy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxODMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVHdGsuaCIKLQotI2lm
bmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVt
ZUd0ay5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIHZv
aWQgZ3RrU3R5bGVDaGFuZ2VkQ2FsbGJhY2soR3RrV2lkZ2V0KiwgU2Nyb2xsYmFyVGhlbWVHdGsq
IHNjcm9sbGJhclRoZW1lKQotewotICAgIHNjcm9sbGJhclRoZW1lLT51cGRhdGVUaGVtZVByb3Bl
cnRpZXMoKTsKLX0KLQotU2Nyb2xsYmFyVGhlbWVHdGs6OlNjcm9sbGJhclRoZW1lR3RrKCkKLSAg
ICA6IG1fY29udGV4dChzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUd0ayo+KFJlbmRlclRoZW1lOjpk
ZWZhdWx0VGhlbWUoKS5nZXQoKSktPmd0a1Njcm9sbGJhclN0eWxlKCkpCi17Ci0gICAgdXBkYXRl
VGhlbWVQcm9wZXJ0aWVzKCk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChtX2NvbnRleHQsICJjaGFu
Z2VkIiwgR19DQUxMQkFDSyhndGtTdHlsZUNoYW5nZWRDYWxsYmFjayksIHRoaXMpOwotfQotCi12
b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQotewotICAgIGd0
a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShtX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJtaW4tc2xpZGVyLWxlbmd0aCIsICZtX21pblRodW1iTGVuZ3RoLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpZGVyLXdpZHRoIiwgJm1fdGh1bWJGYXRu
ZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJvdWdoLWJvcmRlciIsICZt
X3Ryb3VnaEJvcmRlcldpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Rl
cHBlci1zaXplIiwgJm1fc3RlcHBlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJzdGVwcGVyLXNwYWNpbmciLCAmbV9zdGVwcGVyU3BhY2luZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInRyb3VnaC11bmRlci1zdGVwcGVycyIsICZtX3Ryb3VnaFVuZGVy
U3RlcHBlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtYmFja3dhcmQt
c3RlcHBlciIsICZtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJoYXMtZm9yd2FyZC1zdGVwcGVyIiwgJm1faGFzRm9yd2FyZEJ1dHRvbkVu
ZFBhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMtc2Vjb25kYXJ5LWJh
Y2t3YXJkLXN0ZXBwZXIiLCAmbV9oYXNCYWNrQnV0dG9uRW5kUGFydCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImhhcy1zZWNvbmRhcnktZm9yd2FyZC1zdGVwcGVyIiwgJm1faGFz
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7Ci0gICAgdXBkYXRlU2Nyb2xsYmFyc0ZyYW1lVGhpY2tuZXNzKCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGFwcGx5U2Nyb2xsYmFyU3R5bGVDb250ZXh0Q2xhc3NlcyhHdGtTdHlsZUNvbnRleHQq
IGNvbnRleHQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQotewotICAgIGd0a19z
dHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfU0NST0xMQkFS
KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgb3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIgPyAgR1RLX1NUWUxFX0NMQVNTX1ZFUlRJQ0FMIDogR1RLX1NU
WUxFX0NMQVNTX0hPUklaT05UQUwpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjpwYWlu
dFRyYWNrQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFNjcm9sbGJhclRoZW1l
Q2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gUGFpbnQg
dGhlIHRyYWNrIGJhY2tncm91bmQuIElmIHRoZSB0cm91Z2gtdW5kZXItc3RlcHBlcnMgcHJvcGVy
dHkgaXMgdHJ1ZSwgdGhpcwotICAgIC8vIHNob3VsZCBiZSB0aGUgZnVsbCBzaXplIG9mIHRoZSBz
Y3JvbGxiYXIsIGJ1dCBpZiBpcyBmYWxzZSwgaXQgc2hvdWxkIG9ubHkgYmUgdGhlCi0gICAgLy8g
dHJhY2sgcmVjdC4KLSAgICBJbnRSZWN0IGZ1bGxTY3JvbGxiYXJSZWN0KHJlY3QpOwotICAgIGlm
IChtX3Ryb3VnaFVuZGVyU3RlcHBlcnMpCi0gICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0ID0gSW50
UmVjdChzY3JvbGxiYXItPngoKSwgc2Nyb2xsYmFyLT55KCksIHNjcm9sbGJhci0+d2lkdGgoKSwg
c2Nyb2xsYmFyLT5oZWlnaHQoKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKG1fY29u
dGV4dCk7Ci0KLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9jb250ZXh0
LCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhtX2NvbnRleHQsIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwotCi0gICAgZ3RrX3JlbmRl
cl9iYWNrZ3JvdW5kKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxTY3JvbGxiYXJSZWN0LngoKSwgZnVsbFNj
cm9sbGJhclJlY3QueSgpLCBmdWxsU2Nyb2xsYmFyUmVjdC53aWR0aCgpLCBmdWxsU2Nyb2xsYmFy
UmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShtX2NvbnRleHQsIGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLAotICAgICAgICAgICAgICAgICAgICAgZnVsbFNjcm9s
bGJhclJlY3QueCgpLCBmdWxsU2Nyb2xsYmFyUmVjdC55KCksIGZ1bGxTY3JvbGxiYXJSZWN0Lndp
ZHRoKCksIGZ1bGxTY3JvbGxiYXJSZWN0LmhlaWdodCgpKTsKLQotICAgIGd0a19zdHlsZV9jb250
ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFp
bnRTY3JvbGxiYXJCYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgU2Nyb2xsYmFy
VGhlbWVDbGllbnQqIHNjcm9sbGJhcikKLXsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zYXZlKG1f
Y29udGV4dCk7Ci0KLSAgICBhcHBseVNjcm9sbGJhclN0eWxlQ29udGV4dENsYXNzZXMobV9jb250
ZXh0LCBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2Fk
ZF9jbGFzcyhtX2NvbnRleHQsICJzY3JvbGxlZC13aW5kb3ciKTsKLSAgICBndGtfcmVuZGVyX2Zy
YW1lKG1fY29udGV4dCwgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHNjcm9sbGJh
ci0+eCgpLCBzY3JvbGxiYXItPnkoKSwgc2Nyb2xsYmFyLT53aWR0aCgpLCBzY3JvbGxiYXItPmhl
aWdodCgpKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUobV9jb250ZXh0KTsKLX0K
LQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIFNjcm9sbGJhclRoZW1lQ2xpZW50KiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwotCi0gICAgU2Ny
b2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCk7
Ci0gICAgYXBwbHlTY3JvbGxiYXJTdHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgb3JpZW50
YXRpb24pOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhtX2NvbnRleHQsIEdUS19T
VFlMRV9DTEFTU19TTElERVIpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmIChzY3Jv
bGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICBmbGFncyB8PSBHVEtf
U1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgaWYgKHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBU
aHVtYlBhcnQpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShtX2NvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0
YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBndGtfcmVuZGVyX3NsaWRlcihtX2NvbnRleHQsIGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlv
biA9PSBWZXJ0aWNhbFNjcm9sbGJhciA/IEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCA6IEdUS19P
UklFTlRBVElPTl9IT1JJWk9OVEFMKTsKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Jlc3RvcmUo
bV9jb250ZXh0KTsKLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6cGFpbnRCdXR0b24oR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBTY3JvbGxiYXJUaGVtZUNsaWVudCogc2Nyb2xsYmFyLCBj
b25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQYXJ0IHBhcnQpCi17Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2F2ZShtX2NvbnRleHQpOwotCi0gICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24gPSBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCk7Ci0gICAgYXBwbHlTY3JvbGxiYXJT
dHlsZUNvbnRleHRDbGFzc2VzKG1fY29udGV4dCwgb3JpZW50YXRpb24pOwotCi0gICAgZ3VpbnQg
ZmxhZ3MgPSAwOwotICAgIGlmICgoQmFja0J1dHRvblN0YXJ0UGFydCA9PSBwYXJ0ICYmIHNjcm9s
bGJhci0+Y3VycmVudFBvcygpKQotICAgICAgICB8fCAoQmFja0J1dHRvbkVuZFBhcnQgPT0gcGFy
dCAmJiBzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSkKLSAgICAgICAgfHwgKEZvcndhcmRCdXR0b25F
bmRQYXJ0ID09IHBhcnQgJiYgc2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5t
YXhpbXVtKCkpCi0gICAgICAgIHx8IChGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0ID09IHBhcnQgJiYg
c2Nyb2xsYmFyLT5jdXJyZW50UG9zKCkgIT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpKSB7Ci0gICAg
ICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSkKLSAgICAgICAgICAgIGZs
YWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICAgICAgaWYgKHBhcnQgPT0gc2Nyb2xs
YmFyLT5ob3ZlcmVkUGFydCgpKQotICAgICAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdf
UFJFTElHSFQ7Ci0gICAgfSBlbHNlCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0lO
U0VOU0lUSVZFOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShtX2NvbnRleHQsIHN0
YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MobV9jb250ZXh0LCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSAgICBndGtf
cmVuZGVyX2JhY2tncm91bmQobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwot
ICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgZ2Zsb2F0IGFycm93U2NhbGluZzsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3R5bGUobV9jb250ZXh0LCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIE5VTEwpOwot
Ci0gICAgZG91YmxlIGFycm93U2l6ZSA9IHN0ZDo6bWluKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSkgKiBhcnJvd1NjYWxpbmc7Ci0gICAgRmxvYXRQb2ludCBhcnJvd1BvaW50KHJlY3QueCgp
ICsgKHJlY3Qud2lkdGgoKSAtIGFycm93U2l6ZSkgLyAyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gYXJyb3dTaXplKSAvIDIpOwotCi0gICAg
aWYgKGZsYWdzICYgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFKSB7Ci0gICAgICAgIGdpbnQgYXJyb3dE
aXNwbGFjZW1lbnRYLCBhcnJvd0Rpc3BsYWNlbWVudFk7Ci0gICAgICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9zdHlsZShtX2NvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXgiLCAmYXJyb3dEaXNwbGFjZW1lbnRYLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFycm93LWRpc3BsYWNlbWVudC15IiwgJmFy
cm93RGlzcGxhY2VtZW50WSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5V
TEwpOwotICAgICAgICBhcnJvd1BvaW50Lm1vdmUoYXJyb3dEaXNwbGFjZW1lbnRYLCBhcnJvd0Rp
c3BsYWNlbWVudFkpOwotICAgIH0KLQotICAgIGdkb3VibGUgYW5nbGU7Ci0gICAgaWYgKG9yaWVu
dGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgIGFuZ2xlID0gKHBhcnQgPT0g
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSA/
IEdfUEkgOiAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFuZ2xlID0gKHBhcnQgPT0gRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KSA/IEdfUEkg
LyAyIDogMyAqIChHX1BJIC8gMik7Ci0gICAgfQotCi0gICAgZ3RrX3JlbmRlcl9hcnJvdyhtX2Nv
bnRleHQsIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBhbmdsZSwgYXJyb3dQb2lu
dC54KCksIGFycm93UG9pbnQueSgpLCBhcnJvd1NpemUpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfcmVzdG9yZShtX2NvbnRleHQpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyAhR1RLX0FQSV9WRVJTSU9OXzIK
</data>
<flag name="review"
          id="262026"
          type_id="1"
          status="+"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>