<?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>93343</bug_id>
          
          <creation_ts>2012-08-07 00:52:53 -0700</creation_ts>
          <short_desc>[V8] Factor out V8Binding classes that manage V8 value&apos;s cache</short_desc>
          <delta_ts>2012-08-07 15:53:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>93095</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>688929</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-07 00:52:53 -0700</bug_when>
    <thetext>We are factoring out V8Binding methods to separate files. In this bug we move V8Binding classes that manage V8 value&apos;s cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688934</commentid>
    <comment_count>1</comment_count>
      <attachid>156890</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-07 01:04:04 -0700</bug_when>
    <thetext>Created attachment 156890
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689520</commentid>
    <comment_count>2</comment_count>
      <attachid>156890</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-07 15:53:39 -0700</bug_when>
    <thetext>Comment on attachment 156890
Patch

Clearing flags on attachment: 156890

Committed r124929: &lt;http://trac.webkit.org/changeset/124929&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>689521</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-07 15:53:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156890</attachid>
            <date>2012-08-07 01:04:04 -0700</date>
            <delta_ts>2012-08-07 15:53:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93343-20120807170339.patch</filename>
            <type>text/plain</type>
            <size>24773</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI0ODIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGI5MDRiYjcwZDdlZDVm
ODJmYWUxNjE1Y2RjNGFjYTZlMTRhNjhlMC4uMzNlNmNjN2M0ZTBjZGVkMDI2OTcxNTI1YjliYjUz
MGU4NDBiMDYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDEyLTA4LTA3ICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIEZhY3RvciBv
dXQgVjhCaW5kaW5nIGNsYXNzZXMgdGhhdCBtYW5hZ2UgVjggdmFsdWUncyBjYWNoZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTMzNDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBhcmUgZmFjdG9yaW5n
IG91dCBWOEJpbmRpbmcgbWV0aG9kcyB0byBzZXBhcmF0ZSBmaWxlcy4KKyAgICAgICAgVGhpcyBw
YXRjaCBtb3ZlcyBWOEJpbmRpbmcgY2xhc3NlcyB0aGF0IG1hbmFnZSBWOCB2YWx1ZSdzIGNhY2hl
CisgICAgICAgIHRvIFY4VmFsdWVDYWNoZS57aCxjcHB9LgorCisgICAgICAgIE5vIHRlc3RzLiBO
byBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBVc2VWOC5jbWFrZToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlRXh0ZXJuYWxTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FjaGVkU3RyaW5nQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5n
Q2FjaGU6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDYWNoZTo6djhFeHRlcm5h
bFN0cmluZ1Nsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZWdlckNhY2hlOjpjcmVhdGVTbWFs
bEludGVnZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVnZXJDYWNoZTo6fkludGVnZXJDYWNo
ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChTdHJpbmdDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHJpbmdDYWNoZTo6U3RyaW5nQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ2FjaGU6
OnY4RXh0ZXJuYWxTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ2FjaGU6OmNsZWFy
T25HQyk6CisgICAgICAgIChXZWJDb3JlU3RyaW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViQ29yZVN0cmluZ1Jlc291cmNlOjpXZWJDb3JlU3RyaW5nUmVzb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViQ29yZVN0cmluZ1Jlc291cmNlOjp+V2ViQ29yZVN0cmluZ1Jlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmVTdHJpbmdSZXNvdXJjZTo6ZGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJDb3JlU3RyaW5nUmVzb3VyY2U6Omxlbmd0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJDb3JlU3RyaW5nUmVzb3VyY2U6OndlYmNvcmVTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViQ29yZVN0cmluZ1Jlc291cmNlOjphdG9taWNTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViQ29yZVN0cmluZ1Jlc291cmNlOjp2aXNpdFN0cmluZ3MpOiBUaGlzIG1ldGhv
ZCBpcyB1c2VkIGJ5IGluc3BlY3RvcgorICAgICAgICBhbmQgdGh1cyBpcyBub3QgcGVyZm9ybWFu
Y2UtY3JpdGljYWwuIFRvIGF2b2lkIGNpcmN1bGFyICNpbmNsdWRlIGRlcGVuZGVuY3ksCisgICAg
ICAgIEkgbW92ZWQgdGhlIGltcGxlbWVudGF0aW9uIHRvIGNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkNvcmVTdHJpbmdSZXNvdXJjZTo6dG9TdHJpbmdSZXNvdXJjZSk6CisgICAgICAgIChJbnRl
Z2VyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZWdlckNhY2hlOjpJbnRlZ2VyQ2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZWdlckNhY2hlOjp2OEludGVnZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZWdlckNhY2hlOjp2OFVuc2lnbmVkSW50ZWdlcik6CisKIDIwMTItMDgtMDYg
IE1heCBWdWpvdmljICA8bXZ1am92aWNAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhZGVy
c10gUGFyc2UgbWl4IGZ1bmN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlCmluZGV4IGIxYTc0OGM0Y2ZlMGMxOTVi
YWRkNDNkMjA5MjU1OTIzNDk5MmY2Y2IuLmM3YWIyODM0YTdhYThiZjMwMjlhNTQ0ZTU1YzRkOWJh
ODY0YTZhMjYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlCkBAIC02Miw2ICs2Miw3IEBAIExJU1QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCiAgICAgYmluZGluZ3Mv
djgvVjhSZWN1cnNpb25TY29wZS5jcHAKICAgICBiaW5kaW5ncy92OC9WOFV0aWxpdGllcy5jcHAK
KyAgICBiaW5kaW5ncy92OC9WOFZhbHVlQ2FjaGUuY3BwCiAgICAgYmluZGluZ3MvdjgvVjhXaW5k
b3dFcnJvckhhbmRsZXIuY3BwCiAgICAgYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0RXJyb3JI
YW5kbGVyLmNwcAogICAgIGJpbmRpbmdzL3Y4L1Y4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjFiNGE2YzFmNmZjOWRmN2YwOWQzYjAxOGJkZDYxMWY3
YWJjMDk4MC4uMjQwZjc5YzI4OTA4NTk2YzM3MjY3NjExNGZmNTc4YTcyYWY0OGYxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtMjI4NSw2ICsyMjg1LDggQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9WOFJlY3Vyc2lvblNjb3BlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4VXRpbGl0
aWVzLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuaCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNwcCcsCisgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4V2lu
ZG93RXJyb3JIYW5kbGVyLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhXaW5kb3dF
cnJvckhhbmRsZXIuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhXb3JrZXJDb250ZXh0
RXJyb3JIYW5kbGVyLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEJpbmRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNw
cAppbmRleCA0MmVhNjQ1ZWI1YzM5MWQzNDU1NjY3MjBhYzkzNmMzOGNlMDEzMzZlLi4xZGI3NmI3
ZjU5NzBjZGRmNGM3MmMxMGVjNzYzNmNjNjBhYzMwNjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QmluZGluZy5jcHAKQEAgLTEwMyw5MiArMTAzLDYgQEAgdm9pZCBWOEJpbmRpbmdQ
ZXJJc29sYXRlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5
T2JqZWN0SW4KICAgICAgICAgaW5mby5hZGRJbnN0cnVtZW50ZWRNZW1iZXIobV9kb21EYXRhTGlz
dFtpXSk7CiB9CiAKLS8vIFdlYkNvcmVTdHJpbmdSZXNvdXJjZSBpcyBhIGhlbHBlciBjbGFzcyBm
b3IgdjhFeHRlcm5hbFN0cmluZy4gSXQgaXMgdXNlZAotLy8gdG8gbWFuYWdlIHRoZSBsaWZlLWN5
Y2xlIG9mIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBvZiB0aGUgZXh0ZXJuYWwgc3RyaW5nLgotY2xh
c3MgV2ViQ29yZVN0cmluZ1Jlc291cmNlIDogcHVibGljIHY4OjpTdHJpbmc6OkV4dGVybmFsU3Ry
aW5nUmVzb3VyY2UgewotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkNvcmVTdHJpbmdSZXNvdXJj
ZShjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICAgICAgOiBtX3BsYWluU3RyaW5nKHN0cmluZykK
LSAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBtX3RocmVhZElkID0gV1RGOjpjdXJyZW50
VGhyZWFkKCk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUKCFzdHJpbmcuaXNOdWxsKCkpOwotICAg
ICAgICB2ODo6Vjg6OkFkanVzdEFtb3VudE9mRXh0ZXJuYWxBbGxvY2F0ZWRNZW1vcnkoMiAqIHN0
cmluZy5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgV2ViQ29yZVN0cmluZ1Jlc291
cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RyaW5nKQotICAgICAgICA6IG1fcGxhaW5TdHJpbmco
c3RyaW5nLnN0cmluZygpKQotICAgICAgICAsIG1fYXRvbWljU3RyaW5nKHN0cmluZykKLSAgICB7
Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBtX3RocmVhZElkID0gV1RGOjpjdXJyZW50VGhyZWFk
KCk7Ci0jZW5kaWYKLSAgICAgICAgQVNTRVJUKCFzdHJpbmcuaXNOdWxsKCkpOwotICAgICAgICB2
ODo6Vjg6OkFkanVzdEFtb3VudE9mRXh0ZXJuYWxBbGxvY2F0ZWRNZW1vcnkoMiAqIHN0cmluZy5s
ZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+V2ViQ29yZVN0cmluZ1Jlc291cmNlKCkK
LSAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBBU1NFUlQobV90aHJlYWRJZCA9PSBXVEY6
OmN1cnJlbnRUaHJlYWQoKSk7Ci0jZW5kaWYKLSAgICAgICAgaW50IHJlZHVjZWRFeHRlcm5hbE1l
bW9yeSA9IC0yICogbV9wbGFpblN0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgaWYgKG1fcGxhaW5T
dHJpbmcuaW1wbCgpICE9IG1fYXRvbWljU3RyaW5nLmltcGwoKSAmJiAhbV9hdG9taWNTdHJpbmcu
aXNOdWxsKCkpCi0gICAgICAgICAgICByZWR1Y2VkRXh0ZXJuYWxNZW1vcnkgKj0gMjsKLSAgICAg
ICAgdjg6OlY4OjpBZGp1c3RBbW91bnRPZkV4dGVybmFsQWxsb2NhdGVkTWVtb3J5KHJlZHVjZWRF
eHRlcm5hbE1lbW9yeSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBjb25zdCB1aW50MTZfdCogZGF0
YSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50MTZfdCo+KG1fcGxhaW5TdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhaW5TdHJpbmcu
aW1wbCgpLT5sZW5ndGgoKTsgfQotCi0gICAgU3RyaW5nIHdlYmNvcmVTdHJpbmcoKSB7IHJldHVy
biBtX3BsYWluU3RyaW5nOyB9Ci0KLSAgICBBdG9taWNTdHJpbmcgYXRvbWljU3RyaW5nKCkKLSAg
ICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBBU1NFUlQobV90aHJlYWRJZCA9PSBXVEY6OmN1
cnJlbnRUaHJlYWQoKSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG1fYXRvbWljU3RyaW5nLmlzTnVs
bCgpKSB7Ci0gICAgICAgICAgICBtX2F0b21pY1N0cmluZyA9IEF0b21pY1N0cmluZyhtX3BsYWlu
U3RyaW5nKTsKLSAgICAgICAgICAgIEFTU0VSVCghbV9hdG9taWNTdHJpbmcuaXNOdWxsKCkpOwot
ICAgICAgICAgICAgaWYgKG1fcGxhaW5TdHJpbmcuaW1wbCgpICE9IG1fYXRvbWljU3RyaW5nLmlt
cGwoKSkKLSAgICAgICAgICAgICAgICB2ODo6Vjg6OkFkanVzdEFtb3VudE9mRXh0ZXJuYWxBbGxv
Y2F0ZWRNZW1vcnkoMiAqIG1fYXRvbWljU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gbV9hdG9taWNTdHJpbmc7Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFN0cmlu
Z3MoRXh0ZXJuYWxTdHJpbmdWaXNpdG9yKiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgdmlzaXRv
ci0+dmlzaXRKU0V4dGVybmFsU3RyaW5nKG1fcGxhaW5TdHJpbmcuaW1wbCgpKTsKLSAgICAgICAg
aWYgKG1fcGxhaW5TdHJpbmcuaW1wbCgpICE9IG1fYXRvbWljU3RyaW5nLmltcGwoKSAmJiAhbV9h
dG9taWNTdHJpbmcuaXNOdWxsKCkpCi0gICAgICAgICAgICB2aXNpdG9yLT52aXNpdEpTRXh0ZXJu
YWxTdHJpbmcobV9hdG9taWNTdHJpbmcuaW1wbCgpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgV2Vi
Q29yZVN0cmluZ1Jlc291cmNlKiB0b1N0cmluZ1Jlc291cmNlKHY4OjpIYW5kbGU8djg6OlN0cmlu
Zz4gdjhTdHJpbmcpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZVN0
cmluZ1Jlc291cmNlKj4odjhTdHJpbmctPkdldEV4dGVybmFsU3RyaW5nUmVzb3VyY2UoKSk7Ci0g
ICAgfQotCi1wcml2YXRlOgotICAgIC8vIEEgc2hhbGxvdyBjb3B5IG9mIHRoZSBzdHJpbmcuIEtl
ZXBzIHRoZSBzdHJpbmcgYnVmZmVyIGFsaXZlIHVudGlsIHRoZSBWOCBlbmdpbmUgZ2FyYmFnZSBj
b2xsZWN0cyBpdC4KLSAgICBTdHJpbmcgbV9wbGFpblN0cmluZzsKLSAgICAvLyBJZiB0aGlzIHN0
cmluZyBpcyBhdG9taWMgb3IgaGFzIGJlZW4gbWFkZSBhdG9taWMgZWFybGllciB0aGUKLSAgICAv
LyBhdG9taWMgc3RyaW5nIGlzIGhlbGQgaGVyZS4gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHN0cmlu
ZyBzdGFydHMKLSAgICAvLyBvZmYgbm9uLWF0b21pYyBhbmQgYmVjb21lcyBhdG9taWMgbGF0ZXIg
aXQgaXMgbmVjZXNzYXJ5IHRvIGtlZXAKLSAgICAvLyB0aGUgb3JpZ2luYWwgc3RyaW5nIGFsaXZl
IGJlY2F1c2UgdjggbWF5IGtlZXAgZGVyaXZlZCBwb2ludGVycwotICAgIC8vIGludG8gdGhhdCBz
dHJpbmcuCi0gICAgQXRvbWljU3RyaW5nIG1fYXRvbWljU3RyaW5nOwotCi0jaWZuZGVmIE5ERUJV
RwotICAgIFdURjo6VGhyZWFkSWRlbnRpZmllciBtX3RocmVhZElkOwotI2VuZGlmCi19OwotCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKIHZvaWQgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OnZpc2l0
RXh0ZXJuYWxTdHJpbmdzKEV4dGVybmFsU3RyaW5nVmlzaXRvciogdmlzaXRvcikKIHsKQEAgLTQ0
Niw4OCArMzYwLDYgQEAgU3RyaW5nIGludDMyVG9XZWJDb3JlU3RyaW5nKGludCB2YWx1ZSkKICAg
ICByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOwogfQogCi1zdGF0aWMgdjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG1ha2VFeHRlcm5hbFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAg
ICBXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHN0cmluZ1Jlc291cmNlID0gbmV3IFdlYkNvcmVTdHJp
bmdSZXNvdXJjZShzdHJpbmcpOwotICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuZXdTdHJpbmcg
PSB2ODo6U3RyaW5nOjpOZXdFeHRlcm5hbChzdHJpbmdSZXNvdXJjZSk7Ci0gICAgaWYgKG5ld1N0
cmluZy5Jc0VtcHR5KCkpCi0gICAgICAgIGRlbGV0ZSBzdHJpbmdSZXNvdXJjZTsKLQotICAgIHJl
dHVybiBuZXdTdHJpbmc7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhY2hlZFN0cmluZ0NhbGxiYWNrKHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gd3JhcHBlciwgdm9pZCogcGFyYW1ldGVyKQotewotICAg
IFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwgPSBzdGF0aWNfY2FzdDxTdHJpbmdJbXBsKj4ocGFyYW1l
dGVyKTsKLSAgICBWOEJpbmRpbmdQZXJJc29sYXRlRGF0YTo6Y3VycmVudCgpLT5zdHJpbmdDYWNo
ZSgpLT5yZW1vdmUoc3RyaW5nSW1wbCk7Ci0gICAgd3JhcHBlci5EaXNwb3NlKCk7Ci0gICAgc3Ry
aW5nSW1wbC0+ZGVyZWYoKTsKLX0KLQotdm9pZCBTdHJpbmdDYWNoZTo6cmVtb3ZlKFN0cmluZ0lt
cGwqIHN0cmluZ0ltcGwpIAotewotICAgIEFTU0VSVChtX3N0cmluZ0NhY2hlLmNvbnRhaW5zKHN0
cmluZ0ltcGwpKTsKLSAgICBtX3N0cmluZ0NhY2hlLnJlbW92ZShzdHJpbmdJbXBsKTsKLSAgICAv
LyBNYWtlIHN1cmUgdGhhdCBhbHJlYWR5IGRpc3Bvc2VkIG1fbGFzdFY4U3RyaW5nIGlzIG5vdCB1
c2VkIGluCi0gICAgLy8gU3RyaW5nQ2FjaGU6OnY4RXh0ZXJuYWxTdHJpbmcoKS4KLSAgICBpZiAo
bV9sYXN0U3RyaW5nSW1wbC5nZXQoKSA9PSBzdHJpbmdJbXBsKQotICAgICAgICBtX2xhc3RTdHJp
bmdJbXBsID0gMDsKLX0KLQotdjg6OkxvY2FsPHY4OjpTdHJpbmc+IFN0cmluZ0NhY2hlOjp2OEV4
dGVybmFsU3RyaW5nU2xvdyhTdHJpbmdJbXBsKiBzdHJpbmdJbXBsLCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKLXsKLSAgICBpZiAoIXN0cmluZ0ltcGwtPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4g
aXNvbGF0ZSA/IHY4OjpTdHJpbmc6OkVtcHR5KGlzb2xhdGUpIDogdjg6OlN0cmluZzo6RW1wdHko
KTsKLQotICAgIHY4OjpTdHJpbmcqIGNhY2hlZFY4U3RyaW5nID0gbV9zdHJpbmdDYWNoZS5nZXQo
c3RyaW5nSW1wbCk7Ci0gICAgaWYgKGNhY2hlZFY4U3RyaW5nKSB7Ci0gICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpTdHJpbmc+IGhhbmRsZShjYWNoZWRWOFN0cmluZyk7Ci0gICAgICAgIGlmICgh
aGFuZGxlLklzTmVhckRlYXRoKCkgJiYgIWhhbmRsZS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IG1fbGFzdFN0cmluZ0ltcGwgPSBzdHJpbmdJbXBsOwotICAgICAgICAgICAgbV9sYXN0VjhTdHJp
bmcgPSBoYW5kbGU7Ci0gICAgICAgICAgICByZXR1cm4gdjg6OkxvY2FsPHY4OjpTdHJpbmc+OjpO
ZXcoaGFuZGxlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuZXdTdHJpbmcgPSBtYWtlRXh0ZXJuYWxTdHJpbmcoU3RyaW5nKHN0cmluZ0ltcGwpKTsKLSAg
ICBpZiAobmV3U3RyaW5nLklzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKLQot
ICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+IHdyYXBwZXIgPSB2ODo6UGVyc2lzdGVudDx2
ODo6U3RyaW5nPjo6TmV3KG5ld1N0cmluZyk7Ci0gICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gbmV3U3RyaW5nOwotCi0gICAgc3RyaW5nSW1wbC0+cmVmKCk7Ci0gICAg
d3JhcHBlci5NYXJrSW5kZXBlbmRlbnQoKTsKLSAgICB3cmFwcGVyLk1ha2VXZWFrKHN0cmluZ0lt
cGwsIGNhY2hlZFN0cmluZ0NhbGxiYWNrKTsKLSAgICBtX3N0cmluZ0NhY2hlLnNldChzdHJpbmdJ
bXBsLCAqd3JhcHBlcik7Ci0KLSAgICBtX2xhc3RTdHJpbmdJbXBsID0gc3RyaW5nSW1wbDsKLSAg
ICBtX2xhc3RWOFN0cmluZyA9IHdyYXBwZXI7Ci0KLSAgICByZXR1cm4gbmV3U3RyaW5nOwotfQot
Ci12b2lkIEludGVnZXJDYWNoZTo6Y3JlYXRlU21hbGxJbnRlZ2VycygpCi17Ci0gICAgQVNTRVJU
KCFtX2luaXRpYWxpemVkKTsKLSAgICAvLyBXZSBpbml0aWFsaXplIG1fc21hbGxJbnRlZ2VycyBu
b3QgaW4gYSBjb25zdHJ1Y3RvciBidXQgaW4gdjhJbnRlZ2VyKCksCi0gICAgLy8gYmVjYXVzZSBJ
bnRlZ2VyOjpOZXcoKSByZXF1aXJlcyBhIEhhbmRsZVNjb3BlLiBBdCB0aGUgcG9pbnQgd2hlcmUK
LSAgICAvLyBJbnRlZ2VyQ2FjaGUgaXMgY29uc3RydWN0ZWQsIGEgSGFuZGxlU2NvcGUgbWlnaHQg
bm90IGV4aXN0LgotICAgIGZvciAoaW50IHZhbHVlID0gMDsgdmFsdWUgPCBudW1iZXJPZkNhY2hl
ZFNtYWxsSW50ZWdlcnM7IHZhbHVlKyspCi0gICAgICAgIG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV0g
PSB2ODo6UGVyc2lzdGVudDx2ODo6SW50ZWdlcj46Ok5ldyh2ODo6SW50ZWdlcjo6TmV3KHZhbHVl
KSk7Ci0gICAgbV9pbml0aWFsaXplZCA9IHRydWU7Ci19Ci0KLUludGVnZXJDYWNoZTo6fkludGVn
ZXJDYWNoZSgpCi17Ci0gICAgaWYgKG1faW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgZm9yIChpbnQg
dmFsdWUgPSAwOyB2YWx1ZSA8IG51bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VyczsgdmFsdWUrKykK
LSAgICAgICAgICAgIG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV0uRGlzcG9zZSgpOwotICAgICAgICBt
X2luaXRpYWxpemVkID0gZmFsc2U7Ci0gICAgfQotfQotCiB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gY3JlYXRlUmF3VGVtcGxhdGUoKQogewogICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXggOTc3NWUw
ZjE2ZTE3MGQwNGI2ZDlkMDI1ZmU1YjlhMDBhOWIwNzExNy4uMjE2OTBiNGJmMmZiNmY0ZGJhYmQ1
NThkNTUzNjQ2ZTg1ZDFhNmJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhCaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJWOEdDQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIlY4SGlkZGVuUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2luY2x1
ZGUgIlY4VmFsdWVDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+
CkBAIC01Myw3NSArNTQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRXZlbnRU
YXJnZXQ7CiAgICAgY2xhc3MgRXh0ZXJuYWxTdHJpbmdWaXNpdG9yOwogICAgIGNsYXNzIE1lbW9y
eU9iamVjdEluZm87Ci0KLSAgICBjbGFzcyBTdHJpbmdDYWNoZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBTdHJpbmdDYWNoZSgpIHsgfQotCi0gICAgICAgIHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2
OEV4dGVybmFsU3RyaW5nKFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9sYXN0U3RyaW5nSW1wbC5nZXQoKSA9
PSBzdHJpbmdJbXBsKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCFtX2xhc3RWOFN0cmluZy5J
c05lYXJEZWF0aCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fbGFzdFY4U3RyaW5nLklz
RW1wdHkoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6U3RyaW5nPjo6
TmV3KG1fbGFzdFY4U3RyaW5nKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IHY4RXh0ZXJuYWxTdHJpbmdTbG93KHN0cmluZ0ltcGwsIGlzb2xhdGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBjbGVhck9uR0MoKSAKLSAgICAgICAgewotICAgICAgICAgICAgbV9sYXN0
U3RyaW5nSW1wbCA9IDA7Ci0gICAgICAgICAgICBtX2xhc3RWOFN0cmluZy5DbGVhcigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCByZW1vdmUoU3RyaW5nSW1wbCopOwotCi0gICAgICAgIHZv
aWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4RXh0ZXJuYWxTdHJpbmdTbG93
KFN0cmluZ0ltcGwqLCB2ODo6SXNvbGF0ZSopOwotCi0gICAgICAgIEhhc2hNYXA8U3RyaW5nSW1w
bCosIHY4OjpTdHJpbmcqPiBtX3N0cmluZ0NhY2hlOwotICAgICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6U3RyaW5nPiBtX2xhc3RWOFN0cmluZzsKLSAgICAgICAgLy8gTm90ZTogUmVmUHRyIGlzIGEg
bXVzdCBhcyB3ZSBjYWNoZSBieSBTdHJpbmdJbXBsKiBlcXVhbGl0eSwgbm90IGlkZW50aXR5Ci0g
ICAgICAgIC8vIGhlbmNlIGxhc3RTdHJpbmdJbXBsIG1pZ2h0IGJlIG5vdCBhIGtleSBvZiB0aGUg
Y2FjaGUgKGluIHNlbnNlIG9mIGlkZW50aXR5KQotICAgICAgICAvLyBhbmQgaGVuY2UgaXQncyBu
b3QgcmVmZWQgb24gYWRkaXRpb24uCi0gICAgICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2xhc3RT
dHJpbmdJbXBsOwotICAgIH07Ci0KLSAgICBjb25zdCBpbnQgbnVtYmVyT2ZDYWNoZWRTbWFsbElu
dGVnZXJzID0gNjQ7Ci0KLSAgICBjbGFzcyBJbnRlZ2VyQ2FjaGUgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgSW50ZWdlckNhY2hlKCkgOiBtX2luaXRpYWxpemVkKGZhbHNlKSB7IH07Ci0gICAgICAg
IH5JbnRlZ2VyQ2FjaGUoKTsKLQotICAgICAgICB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiB2OElu
dGVnZXIoaW50IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIW1faW5pdGlhbGl6
ZWQpCi0gICAgICAgICAgICAgICAgY3JlYXRlU21hbGxJbnRlZ2VycygpOwotICAgICAgICAgICAg
aWYgKDAgPD0gdmFsdWUgJiYgdmFsdWUgPCBudW1iZXJPZkNhY2hlZFNtYWxsSW50ZWdlcnMpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fc21hbGxJbnRlZ2Vyc1t2YWx1ZV07Ci0gICAgICAgICAg
ICByZXR1cm4gdjg6OkludGVnZXI6Ok5ldyh2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiB2OFVuc2lnbmVkSW50ZWdlcih1bnNpZ25lZCB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFtX2luaXRpYWxpemVkKQotICAgICAgICAgICAg
ICAgIGNyZWF0ZVNtYWxsSW50ZWdlcnMoKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihudW1iZXJPZkNhY2hlZFNtYWxsSW50ZWdlcnMpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtX3NtYWxsSW50ZWdlcnNbdmFsdWVdOwotICAgICAgICAgICAgcmV0dXJu
IHY4OjpJbnRlZ2VyOjpOZXdGcm9tVW5zaWduZWQodmFsdWUpOwotICAgICAgICB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICB2b2lkIGNyZWF0ZVNtYWxsSW50ZWdlcnMoKTsKLQotICAgICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6SW50ZWdlcj4gbV9zbWFsbEludGVnZXJzW251bWJlck9mQ2FjaGVk
U21hbGxJbnRlZ2Vyc107Ci0gICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKLSAgICB9OwotCiAg
ICAgY2xhc3MgU2NyaXB0R0NFdmVudExpc3RlbmVyOwogCiAgICAgY2xhc3MgR0NFdmVudERhdGEg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjNmNWIwODk2NTgwZmZjNTVjNTY3YTA3ZWQxY2ZiODFlNzIzYTU1OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5jcHAKQEAgLTAs
MCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlY4VmFsdWVDYWNoZS5oIgorCisjaW5jbHVkZSAiQmluZGluZ1Zpc2l0b3JzLmgiCisjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiBtYWtlRXh0ZXJuYWxTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7
CisgICAgV2ViQ29yZVN0cmluZ1Jlc291cmNlKiBzdHJpbmdSZXNvdXJjZSA9IG5ldyBXZWJDb3Jl
U3RyaW5nUmVzb3VyY2Uoc3RyaW5nKTsKKyAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gbmV3U3Ry
aW5nID0gdjg6OlN0cmluZzo6TmV3RXh0ZXJuYWwoc3RyaW5nUmVzb3VyY2UpOworICAgIGlmIChu
ZXdTdHJpbmcuSXNFbXB0eSgpKQorICAgICAgICBkZWxldGUgc3RyaW5nUmVzb3VyY2U7CisKKyAg
ICByZXR1cm4gbmV3U3RyaW5nOworfQorCitzdGF0aWMgdm9pZCBjYWNoZWRTdHJpbmdDYWxsYmFj
ayh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+IHdyYXBwZXIsIHZvaWQqIHBhcmFtZXRlcikKK3sK
KyAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsID0gc3RhdGljX2Nhc3Q8U3RyaW5nSW1wbCo+KHBh
cmFtZXRlcik7CisgICAgVjhCaW5kaW5nUGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKS0+c3RyaW5n
Q2FjaGUoKS0+cmVtb3ZlKHN0cmluZ0ltcGwpOworICAgIHdyYXBwZXIuRGlzcG9zZSgpOworICAg
IHN0cmluZ0ltcGwtPmRlcmVmKCk7Cit9CisKK3ZvaWQgU3RyaW5nQ2FjaGU6OnJlbW92ZShTdHJp
bmdJbXBsKiBzdHJpbmdJbXBsKSAKK3sKKyAgICBBU1NFUlQobV9zdHJpbmdDYWNoZS5jb250YWlu
cyhzdHJpbmdJbXBsKSk7CisgICAgbV9zdHJpbmdDYWNoZS5yZW1vdmUoc3RyaW5nSW1wbCk7Cisg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgYWxyZWFkeSBkaXNwb3NlZCBtX2xhc3RWOFN0cmluZyBpcyBu
b3QgdXNlZCBpbgorICAgIC8vIFN0cmluZ0NhY2hlOjp2OEV4dGVybmFsU3RyaW5nKCkuCisgICAg
aWYgKG1fbGFzdFN0cmluZ0ltcGwuZ2V0KCkgPT0gc3RyaW5nSW1wbCkKKyAgICAgICAgbV9sYXN0
U3RyaW5nSW1wbCA9IDA7Cit9CisKK3Y4OjpMb2NhbDx2ODo6U3RyaW5nPiBTdHJpbmdDYWNoZTo6
djhFeHRlcm5hbFN0cmluZ1Nsb3coU3RyaW5nSW1wbCogc3RyaW5nSW1wbCwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUpCit7CisgICAgaWYgKCFzdHJpbmdJbXBsLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIGlzb2xhdGUgPyB2ODo6U3RyaW5nOjpFbXB0eShpc29sYXRlKSA6IHY4OjpTdHJpbmc6OkVt
cHR5KCk7CisKKyAgICB2ODo6U3RyaW5nKiBjYWNoZWRWOFN0cmluZyA9IG1fc3RyaW5nQ2FjaGUu
Z2V0KHN0cmluZ0ltcGwpOworICAgIGlmIChjYWNoZWRWOFN0cmluZykgeworICAgICAgICB2ODo6
UGVyc2lzdGVudDx2ODo6U3RyaW5nPiBoYW5kbGUoY2FjaGVkVjhTdHJpbmcpOworICAgICAgICBp
ZiAoIWhhbmRsZS5Jc05lYXJEZWF0aCgpICYmICFoYW5kbGUuSXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBtX2xhc3RTdHJpbmdJbXBsID0gc3RyaW5nSW1wbDsKKyAgICAgICAgICAgIG1fbGFzdFY4
U3RyaW5nID0gaGFuZGxlOworICAgICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6U3RyaW5n
Pjo6TmV3KGhhbmRsZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2ODo6TG9jYWw8djg6OlN0
cmluZz4gbmV3U3RyaW5nID0gbWFrZUV4dGVybmFsU3RyaW5nKFN0cmluZyhzdHJpbmdJbXBsKSk7
CisgICAgaWYgKG5ld1N0cmluZy5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBuZXdTdHJpbmc7
CisKKyAgICB2ODo6UGVyc2lzdGVudDx2ODo6U3RyaW5nPiB3cmFwcGVyID0gdjg6OlBlcnNpc3Rl
bnQ8djg6OlN0cmluZz46Ok5ldyhuZXdTdHJpbmcpOworICAgIGlmICh3cmFwcGVyLklzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG5ld1N0cmluZzsKKworICAgIHN0cmluZ0ltcGwtPnJlZigpOwor
ICAgIHdyYXBwZXIuTWFya0luZGVwZW5kZW50KCk7CisgICAgd3JhcHBlci5NYWtlV2VhayhzdHJp
bmdJbXBsLCBjYWNoZWRTdHJpbmdDYWxsYmFjayk7CisgICAgbV9zdHJpbmdDYWNoZS5zZXQoc3Ry
aW5nSW1wbCwgKndyYXBwZXIpOworCisgICAgbV9sYXN0U3RyaW5nSW1wbCA9IHN0cmluZ0ltcGw7
CisgICAgbV9sYXN0VjhTdHJpbmcgPSB3cmFwcGVyOworCisgICAgcmV0dXJuIG5ld1N0cmluZzsK
K30KKwordm9pZCBXZWJDb3JlU3RyaW5nUmVzb3VyY2U6OnZpc2l0U3RyaW5ncyhFeHRlcm5hbFN0
cmluZ1Zpc2l0b3IqIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci0+dmlzaXRKU0V4dGVybmFsU3Ry
aW5nKG1fcGxhaW5TdHJpbmcuaW1wbCgpKTsKKyAgICBpZiAobV9wbGFpblN0cmluZy5pbXBsKCkg
IT0gbV9hdG9taWNTdHJpbmcuaW1wbCgpICYmICFtX2F0b21pY1N0cmluZy5pc051bGwoKSkKKyAg
ICAgICAgdmlzaXRvci0+dmlzaXRKU0V4dGVybmFsU3RyaW5nKG1fYXRvbWljU3RyaW5nLmltcGwo
KSk7Cit9CisKK3ZvaWQgSW50ZWdlckNhY2hlOjpjcmVhdGVTbWFsbEludGVnZXJzKCkKK3sKKyAg
ICBBU1NFUlQoIW1faW5pdGlhbGl6ZWQpOworICAgIC8vIFdlIGluaXRpYWxpemUgbV9zbWFsbElu
dGVnZXJzIG5vdCBpbiBhIGNvbnN0cnVjdG9yIGJ1dCBpbiB2OEludGVnZXIoKSwKKyAgICAvLyBi
ZWNhdXNlIEludGVnZXI6Ok5ldygpIHJlcXVpcmVzIGEgSGFuZGxlU2NvcGUuIEF0IHRoZSBwb2lu
dCB3aGVyZQorICAgIC8vIEludGVnZXJDYWNoZSBpcyBjb25zdHJ1Y3RlZCwgYSBIYW5kbGVTY29w
ZSBtaWdodCBub3QgZXhpc3QuCisgICAgZm9yIChpbnQgdmFsdWUgPSAwOyB2YWx1ZSA8IG51bWJl
ck9mQ2FjaGVkU21hbGxJbnRlZ2VyczsgdmFsdWUrKykKKyAgICAgICAgbV9zbWFsbEludGVnZXJz
W3ZhbHVlXSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpJbnRlZ2VyPjo6TmV3KHY4OjpJbnRlZ2VyOjpO
ZXcodmFsdWUpKTsKKyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworSW50ZWdlckNhY2hl
Ojp+SW50ZWdlckNhY2hlKCkKK3sKKyAgICBpZiAobV9pbml0aWFsaXplZCkgeworICAgICAgICBm
b3IgKGludCB2YWx1ZSA9IDA7IHZhbHVlIDwgbnVtYmVyT2ZDYWNoZWRTbWFsbEludGVnZXJzOyB2
YWx1ZSsrKQorICAgICAgICAgICAgbV9zbWFsbEludGVnZXJzW3ZhbHVlXS5EaXNwb3NlKCk7Cisg
ICAgICAgIG1faW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVD
YWNoZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhWYWx1ZUNhY2hlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODE1NGRkZjUzMjIyNzMyM2VjYmEwODgwMmU5YWQ0YTM3YWE2YjM5ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4VmFsdWVDYWNoZS5oCkBAIC0w
LDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhWYWx1ZUNhY2hlX2gKKyNkZWZp
bmUgVjhWYWx1ZUNhY2hlX2gKKworI2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRXh0ZXJuYWxTdHJpbmdWaXNpdG9yOworY2xhc3MgTWVtb3J5T2Jq
ZWN0SW5mbzsKKworY2xhc3MgU3RyaW5nQ2FjaGUgeworcHVibGljOgorICAgIFN0cmluZ0NhY2hl
KCkgeyB9CisKKyAgICB2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhFeHRlcm5hbFN0cmluZyhTdHJp
bmdJbXBsKiBzdHJpbmdJbXBsLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKKyAgICB7CisgICAgICAg
IGlmIChtX2xhc3RTdHJpbmdJbXBsLmdldCgpID09IHN0cmluZ0ltcGwpIHsKKyAgICAgICAgICAg
IEFTU0VSVCghbV9sYXN0VjhTdHJpbmcuSXNOZWFyRGVhdGgoKSk7CisgICAgICAgICAgICBBU1NF
UlQoIW1fbGFzdFY4U3RyaW5nLklzRW1wdHkoKSk7CisgICAgICAgICAgICByZXR1cm4gdjg6Okxv
Y2FsPHY4OjpTdHJpbmc+OjpOZXcobV9sYXN0VjhTdHJpbmcpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJpbmdTbG93KHN0cmluZ0ltcGwsIGlzb2xhdGUpOworICAg
IH0KKworICAgIHZvaWQgY2xlYXJPbkdDKCkgCisgICAgeworICAgICAgICBtX2xhc3RTdHJpbmdJ
bXBsID0gMDsKKyAgICAgICAgbV9sYXN0VjhTdHJpbmcuQ2xlYXIoKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlbW92ZShTdHJpbmdJbXBsKik7CisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1v
cnlPYmplY3RJbmZvKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdjg6OkxvY2FsPHY4OjpTdHJp
bmc+IHY4RXh0ZXJuYWxTdHJpbmdTbG93KFN0cmluZ0ltcGwqLCB2ODo6SXNvbGF0ZSopOworCisg
ICAgSGFzaE1hcDxTdHJpbmdJbXBsKiwgdjg6OlN0cmluZyo+IG1fc3RyaW5nQ2FjaGU7CisgICAg
djg6OlBlcnNpc3RlbnQ8djg6OlN0cmluZz4gbV9sYXN0VjhTdHJpbmc7CisgICAgLy8gTm90ZTog
UmVmUHRyIGlzIGEgbXVzdCBhcyB3ZSBjYWNoZSBieSBTdHJpbmdJbXBsKiBlcXVhbGl0eSwgbm90
IGlkZW50aXR5CisgICAgLy8gaGVuY2UgbGFzdFN0cmluZ0ltcGwgbWlnaHQgYmUgbm90IGEga2V5
IG9mIHRoZSBjYWNoZSAoaW4gc2Vuc2Ugb2YgaWRlbnRpdHkpCisgICAgLy8gYW5kIGhlbmNlIGl0
J3Mgbm90IHJlZmVkIG9uIGFkZGl0aW9uLgorICAgIFJlZlB0cjxTdHJpbmdJbXBsPiBtX2xhc3RT
dHJpbmdJbXBsOworfTsKKworY29uc3QgaW50IG51bWJlck9mQ2FjaGVkU21hbGxJbnRlZ2VycyA9
IDY0OworCisvLyBXZWJDb3JlU3RyaW5nUmVzb3VyY2UgaXMgYSBoZWxwZXIgY2xhc3MgZm9yIHY4
RXh0ZXJuYWxTdHJpbmcuIEl0IGlzIHVzZWQKKy8vIHRvIG1hbmFnZSB0aGUgbGlmZS1jeWNsZSBv
ZiB0aGUgdW5kZXJseWluZyBidWZmZXIgb2YgdGhlIGV4dGVybmFsIHN0cmluZy4KK2NsYXNzIFdl
YkNvcmVTdHJpbmdSZXNvdXJjZSA6IHB1YmxpYyB2ODo6U3RyaW5nOjpFeHRlcm5hbFN0cmluZ1Jl
c291cmNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJDb3JlU3RyaW5nUmVzb3VyY2UoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCisgICAgICAgIDogbV9wbGFpblN0cmluZyhzdHJpbmcpCisgICAg
eworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgbV90aHJlYWRJZCA9IFdURjo6Y3VycmVudFRocmVh
ZCgpOworI2VuZGlmCisgICAgICAgIEFTU0VSVCghc3RyaW5nLmlzTnVsbCgpKTsKKyAgICAgICAg
djg6OlY4OjpBZGp1c3RBbW91bnRPZkV4dGVybmFsQWxsb2NhdGVkTWVtb3J5KDIgKiBzdHJpbmcu
bGVuZ3RoKCkpOworICAgIH0KKworICAgIGV4cGxpY2l0IFdlYkNvcmVTdHJpbmdSZXNvdXJjZShj
b25zdCBBdG9taWNTdHJpbmcmIHN0cmluZykKKyAgICAgICAgOiBtX3BsYWluU3RyaW5nKHN0cmlu
Zy5zdHJpbmcoKSkKKyAgICAgICAgLCBtX2F0b21pY1N0cmluZyhzdHJpbmcpCisgICAgeworI2lm
bmRlZiBOREVCVUcKKyAgICAgICAgbV90aHJlYWRJZCA9IFdURjo6Y3VycmVudFRocmVhZCgpOwor
I2VuZGlmCisgICAgICAgIEFTU0VSVCghc3RyaW5nLmlzTnVsbCgpKTsKKyAgICAgICAgdjg6OlY4
OjpBZGp1c3RBbW91bnRPZkV4dGVybmFsQWxsb2NhdGVkTWVtb3J5KDIgKiBzdHJpbmcubGVuZ3Ro
KCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfldlYkNvcmVTdHJpbmdSZXNvdXJjZSgpCisgICAg
eworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQVNTRVJUKG1fdGhyZWFkSWQgPT0gV1RGOjpjdXJy
ZW50VGhyZWFkKCkpOworI2VuZGlmCisgICAgICAgIGludCByZWR1Y2VkRXh0ZXJuYWxNZW1vcnkg
PSAtMiAqIG1fcGxhaW5TdHJpbmcubGVuZ3RoKCk7CisgICAgICAgIGlmIChtX3BsYWluU3RyaW5n
LmltcGwoKSAhPSBtX2F0b21pY1N0cmluZy5pbXBsKCkgJiYgIW1fYXRvbWljU3RyaW5nLmlzTnVs
bCgpKQorICAgICAgICAgICAgcmVkdWNlZEV4dGVybmFsTWVtb3J5ICo9IDI7CisgICAgICAgIHY4
OjpWODo6QWRqdXN0QW1vdW50T2ZFeHRlcm5hbEFsbG9jYXRlZE1lbW9yeShyZWR1Y2VkRXh0ZXJu
YWxNZW1vcnkpOworICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgdWludDE2X3QqIGRhdGEoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDE2
X3QqPihtX3BsYWluU3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpKTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3BsYWluU3RyaW5nLmltcGwo
KS0+bGVuZ3RoKCk7IH0KKworICAgIFN0cmluZyB3ZWJjb3JlU3RyaW5nKCkgeyByZXR1cm4gbV9w
bGFpblN0cmluZzsgfQorCisgICAgQXRvbWljU3RyaW5nIGF0b21pY1N0cmluZygpCisgICAgewor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgQVNTRVJUKG1fdGhyZWFkSWQgPT0gV1RGOjpjdXJyZW50
VGhyZWFkKCkpOworI2VuZGlmCisgICAgICAgIGlmIChtX2F0b21pY1N0cmluZy5pc051bGwoKSkg
eworICAgICAgICAgICAgbV9hdG9taWNTdHJpbmcgPSBBdG9taWNTdHJpbmcobV9wbGFpblN0cmlu
Zyk7CisgICAgICAgICAgICBBU1NFUlQoIW1fYXRvbWljU3RyaW5nLmlzTnVsbCgpKTsKKyAgICAg
ICAgICAgIGlmIChtX3BsYWluU3RyaW5nLmltcGwoKSAhPSBtX2F0b21pY1N0cmluZy5pbXBsKCkp
CisgICAgICAgICAgICAgICAgdjg6OlY4OjpBZGp1c3RBbW91bnRPZkV4dGVybmFsQWxsb2NhdGVk
TWVtb3J5KDIgKiBtX2F0b21pY1N0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1fYXRvbWljU3RyaW5nOworICAgIH0KKworICAgIHZvaWQgdmlzaXRTdHJpbmdzKEV4
dGVybmFsU3RyaW5nVmlzaXRvciopOworCisgICAgc3RhdGljIFdlYkNvcmVTdHJpbmdSZXNvdXJj
ZSogdG9TdHJpbmdSZXNvdXJjZSh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmVTdHJpbmdSZXNvdXJjZSo+KHY4
U3RyaW5nLT5HZXRFeHRlcm5hbFN0cmluZ1Jlc291cmNlKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICAvLyBBIHNoYWxsb3cgY29weSBvZiB0aGUgc3RyaW5nLiBLZWVwcyB0aGUgc3RyaW5nIGJ1
ZmZlciBhbGl2ZSB1bnRpbCB0aGUgVjggZW5naW5lIGdhcmJhZ2UgY29sbGVjdHMgaXQuCisgICAg
U3RyaW5nIG1fcGxhaW5TdHJpbmc7CisgICAgLy8gSWYgdGhpcyBzdHJpbmcgaXMgYXRvbWljIG9y
IGhhcyBiZWVuIG1hZGUgYXRvbWljIGVhcmxpZXIgdGhlCisgICAgLy8gYXRvbWljIHN0cmluZyBp
cyBoZWxkIGhlcmUuIEluIHRoZSBjYXNlIHdoZXJlIHRoZSBzdHJpbmcgc3RhcnRzCisgICAgLy8g
b2ZmIG5vbi1hdG9taWMgYW5kIGJlY29tZXMgYXRvbWljIGxhdGVyIGl0IGlzIG5lY2Vzc2FyeSB0
byBrZWVwCisgICAgLy8gdGhlIG9yaWdpbmFsIHN0cmluZyBhbGl2ZSBiZWNhdXNlIHY4IG1heSBr
ZWVwIGRlcml2ZWQgcG9pbnRlcnMKKyAgICAvLyBpbnRvIHRoYXQgc3RyaW5nLgorICAgIEF0b21p
Y1N0cmluZyBtX2F0b21pY1N0cmluZzsKKworI2lmbmRlZiBOREVCVUcKKyAgICBXVEY6OlRocmVh
ZElkZW50aWZpZXIgbV90aHJlYWRJZDsKKyNlbmRpZgorfTsKKworY2xhc3MgSW50ZWdlckNhY2hl
IHsKK3B1YmxpYzoKKyAgICAgSW50ZWdlckNhY2hlKCkgOiBtX2luaXRpYWxpemVkKGZhbHNlKSB7
IH07CisgICAgfkludGVnZXJDYWNoZSgpOworCisgICAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4g
djhJbnRlZ2VyKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9pbml0aWFsaXplZCkK
KyAgICAgICAgICAgIGNyZWF0ZVNtYWxsSW50ZWdlcnMoKTsKKyAgICAgICAgaWYgKDAgPD0gdmFs
dWUgJiYgdmFsdWUgPCBudW1iZXJPZkNhY2hlZFNtYWxsSW50ZWdlcnMpCisgICAgICAgICAgICBy
ZXR1cm4gbV9zbWFsbEludGVnZXJzW3ZhbHVlXTsKKyAgICAgICAgcmV0dXJuIHY4OjpJbnRlZ2Vy
OjpOZXcodmFsdWUpOworICAgIH0KKworICAgIHY4OjpIYW5kbGU8djg6OkludGVnZXI+IHY4VW5z
aWduZWRJbnRlZ2VyKHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2luaXRp
YWxpemVkKQorICAgICAgICAgICAgY3JlYXRlU21hbGxJbnRlZ2VycygpOworICAgICAgICBpZiAo
dmFsdWUgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obnVtYmVyT2ZDYWNoZWRTbWFsbEludGVnZXJz
KSkKKyAgICAgICAgICAgIHJldHVybiBtX3NtYWxsSW50ZWdlcnNbdmFsdWVdOworICAgICAgICBy
ZXR1cm4gdjg6OkludGVnZXI6Ok5ld0Zyb21VbnNpZ25lZCh2YWx1ZSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIHZvaWQgY3JlYXRlU21hbGxJbnRlZ2VycygpOworCisgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OkludGVnZXI+IG1fc21hbGxJbnRlZ2Vyc1tudW1iZXJPZkNhY2hlZFNtYWxsSW50ZWdl
cnNdOworICAgIGJvb2wgbV9pbml0aWFsaXplZDsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBWOFZhbHVlQ2FjaGVfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>