<?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>24174</bug_id>
          
          <creation_ts>2009-02-25 15:41:35 -0800</creation_ts>
          <short_desc>Add a few more V8 custom bindings</short_desc>
          <delta_ts>2009-02-25 16:17:37 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>111053</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-25 15:41:35 -0800</bug_when>
    <thetext>This one has HTMLDocument and CSSStyleReclaration, wee!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111055</commentid>
    <comment_count>1</comment_count>
      <attachid>27992</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-25 15:43:04 -0800</bug_when>
    <thetext>Created attachment 27992
Moar V8 bindings, v1

 WebCore/ChangeLog                                  |   32 ++++
 .../v8/custom/V8CSSStyleDeclarationCustom.cpp      |  197 ++++++++++++++++++++
 .../bindings/v8/custom/V8DOMStringListCustom.cpp   |   62 ++++++
 WebCore/bindings/v8/custom/V8EventCustom.cpp       |   82 ++++++++
 .../bindings/v8/custom/V8HTMLDocumentCustom.cpp    |  112 +++++++++++
 .../v8/custom/V8HTMLFrameSetElementCustom.cpp      |   62 ++++++
 .../bindings/v8/custom/V8NamedNodeMapCustom.cpp    |   74 ++++++++
 WebCore/bindings/v8/custom/V8NodeListCustom.cpp    |   59 ++++++
 .../bindings/v8/custom/V8StyleSheetListCustom.cpp  |   56 ++++++
 9 files changed, 736 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111059</commentid>
    <comment_count>2</comment_count>
      <attachid>27992</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-25 15:48:31 -0800</bug_when>
    <thetext>Comment on attachment 27992
Moar V8 bindings, v1

Looks fine.  Thanks for all doing all the cleanup from the codereview.chromium review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111071</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-25 16:17:37 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/41234.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27992</attachid>
            <date>2009-02-25 15:43:04 -0800</date>
            <delta_ts>2009-02-25 15:48:31 -0800</delta_ts>
            <desc>Moar V8 bindings, v1</desc>
            <filename>Moar-V8-bindings-v1.patch</filename>
            <type>text/plain</type>
            <size>30974</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZDAxY2E0N2VmNzMyNTgwYTI0NDM0M2Y0NWQ1NDE4NGViYTg2MDhhZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMGRlNmU4Li43YjE5NzFl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM1IEBACisyMDA5LTAyLTI1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0MTc0CisgICAg
ICAgIEFkZCBtb3JlIFY4IGN1c3RvbSBiaW5kaW5ncy4KKworICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6Omhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeCk6CisgICAgICAgIChXZWJDb3JlOjpj
c3NQcm9wZXJ0eU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVS
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU3RyaW5nTGlzdEN1c3RvbS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhF
dmVudEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVS
KToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9ERUxFVEVSKToKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVE
X1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRU
RVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRD
dXN0b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dFVFRF
Uik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6Cisg
ICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFN0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpO
QU1FRF9QUk9QRVJUWV9HRVRURVIpOgorCiAyMDA5LTAyLTI1ICBCZXRoIERha2luICA8YmRha2lu
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3Rv
bS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25D
dXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZWY0MWQKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVj
bGFyYXRpb25DdXN0b20uY3BwCkBAIC0wLDAgKzEsMTk3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3LTIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorCisjaW5jbHVkZSAiQ1NTVmFs
dWUuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkV2ZW50VGFy
Z2V0LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGSVhN
RTogTmV4dCB0d28gZnVuY3Rpb25zIGxvb2sgbGlmdGVkIHZlcmJhdGltIGZyb20gSlNDU1NTdHls
ZURlY2xhcmF0aW9uQ3VzdG9tLiBQbGVhc2UgcmVtb3ZlIGR1cGxpY2F0aW9uLgorCisvLyBDaGVj
ayBmb3IgYSBDU1MgcHJlZml4LgorLy8gUGFzc2VkIHByZWZpeCBpcyBhbGwgbG93ZXJjYXNlLgor
Ly8gRmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBwcmVmaXggd2l0aGluIHRoZSBwcm9wZXJ0eSBuYW1l
IG1heSBiZSB1cHBlciBvciBsb3dlcmNhc2UuCisvLyBPdGhlciBjaGFyYWN0ZXJzIGluIHRoZSBw
cmVmaXggd2l0aGluIHRoZSBwcm9wZXJ0eSBuYW1lIG11c3QgYmUgbG93ZXJjYXNlLgorLy8gVGhl
IHByZWZpeCB3aXRoaW4gdGhlIHByb3BlcnR5IG5hbWUgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGNh
cGl0YWwgbGV0dGVyLgorc3RhdGljIGJvb2wgaGFzQ1NTUHJvcGVydHlOYW1lUHJlZml4KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lLCBjb25zdCBjaGFyKiBwcmVmaXgpCit7CisjaWZuZGVmIE5E
RUJVRworICAgIEFTU0VSVCgqcHJlZml4KTsKKyAgICBmb3IgKGNvbnN0IGNoYXIqIHAgPSBwcmVm
aXg7ICpwOyArK3ApCisgICAgICAgIEFTU0VSVChXVEY6OmlzQVNDSUlMb3dlcigqcCkpOworICAg
IEFTU0VSVChwcm9wZXJ0eU5hbWUubGVuZ3RoKCkpOworI2VuZGlmCisKKyAgICBpZiAoV1RGOjp0
b0FTQ0lJTG93ZXIocHJvcGVydHlOYW1lWzBdKSAhPSBwcmVmaXhbMF0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHByb3BlcnR5TmFtZS5sZW5ndGgoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYg
KCFwcmVmaXhbaV0pCisgICAgICAgICAgICByZXR1cm4gV1RGOjppc0FTQ0lJVXBwZXIocHJvcGVy
dHlOYW1lW2ldKTsKKyAgICAgICAgaWYgKHByb3BlcnR5TmFtZVtpXSAhPSBwcmVmaXhbaV0pCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ly8gV2hlbiBnZXR0aW5nIHByb3BlcnRpZXMgb24gQ1NTU3R5bGVEZWNsYXJhdGlvbnMsIHRoZSBu
YW1lIHVzZWQgZnJvbQorLy8gSmF2YXNjcmlwdCBhbmQgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSBw
cm9wZXJ0eSBhcmUgbm90IHRoZSBzYW1lLCBzbworLy8gd2UgaGF2ZSB0byBkbyB0aGUgZm9sbG93
aW5nIHRyYW5zbGF0aW9uLiAgVGhlIHRyYW5zbGF0aW9uIHR1cm5zIHVwcGVyCisvLyBjYXNlIGNo
YXJhY3RlcnMgaW50byBsb3dlciBjYXNlIGNoYXJhY3RlcnMgYW5kIGluc2VydHMgZGFzaGVzIHRv
CisvLyBzZXBhcmF0ZSB3b3Jkcy4KKy8vCisvLyBFeGFtcGxlOiAnYmFja2dyb3VuZFBvc2l0aW9u
WScgLT4gJ2JhY2tncm91bmQtcG9zaXRpb24teScKKy8vCisvLyBBbHNvLCBjZXJ0YWluIHByZWZp
eGVzIHN1Y2ggYXMgJ3BvcycsICdjc3MtJyBhbmQgJ3BpeGVsLScgYXJlIHN0cmlwcGVkCisvLyBh
bmQgdGhlIGhhZFBpeGVsT3JQb3NQcmVmaXggb3V0IHBhcmFtZXRlciBpcyB1c2VkIHRvIGluZGlj
YXRlIHdoZXRoZXIgb3IKKy8vIG5vdCB0aGUgcHJvcGVydHkgbmFtZSB3YXMgcHJlZml4ZWQgd2l0
aCAncG9zLScgb3IgJ3BpeGVsLScuCitzdGF0aWMgU3RyaW5nIGNzc1Byb3BlcnR5TmFtZShjb25z
dCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgYm9vbCYgaGFkUGl4ZWxPclBvc1ByZWZpeCkKK3sKKyAg
ICBpZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKKyAgICAgICAgaGFkUGl4ZWxPclBvc1ByZWZpeCA9
IGZhbHNlOworCisgICAgdW5zaWduZWQgbGVuZ3RoID0gcHJvcGVydHlOYW1lLmxlbmd0aCgpOwor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBWZWN0b3I8
VUNoYXI+IG5hbWU7CisgICAgbmFtZS5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKKworICAgIHVu
c2lnbmVkIGkgPSAwOworCisgICAgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9wZXJ0
eU5hbWUsICJjc3MiKSkKKyAgICAgICAgaSArPSAzOworICAgIGVsc2UgaWYgKGhhc0NTU1Byb3Bl
cnR5TmFtZVByZWZpeChwcm9wZXJ0eU5hbWUsICJwaXhlbCIpKSB7CisgICAgICAgIGkgKz0gNTsK
KyAgICAgICAgaWYgKGhhZFBpeGVsT3JQb3NQcmVmaXgpCisgICAgICAgICAgICBoYWRQaXhlbE9y
UG9zUHJlZml4ID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGhhc0NTU1Byb3BlcnR5TmFtZVByZWZp
eChwcm9wZXJ0eU5hbWUsICJwb3MiKSkgeworICAgICAgICBpICs9IDM7CisgICAgICAgIGlmICho
YWRQaXhlbE9yUG9zUHJlZml4KQorICAgICAgICAgICAgaGFkUGl4ZWxPclBvc1ByZWZpeCA9IHRy
dWU7CisgICAgfSBlbHNlIGlmIChoYXNDU1NQcm9wZXJ0eU5hbWVQcmVmaXgocHJvcGVydHlOYW1l
LCAid2Via2l0IikKKyAgICAgICAgICAgIHx8IGhhc0NTU1Byb3BlcnR5TmFtZVByZWZpeChwcm9w
ZXJ0eU5hbWUsICJraHRtbCIpCisgICAgICAgICAgICB8fCBoYXNDU1NQcm9wZXJ0eU5hbWVQcmVm
aXgocHJvcGVydHlOYW1lLCAiYXBwbGUiKSkKKyAgICAgICAgbmFtZS5hcHBlbmQoJy0nKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKFdURjo6aXNBU0NJSVVwcGVyKHByb3BlcnR5TmFtZVswXSkp
CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgbmFtZS5hcHBlbmQo
V1RGOjp0b0FTQ0lJTG93ZXIocHJvcGVydHlOYW1lW2krK10pKTsKKworICAgIGZvciAoOyBpIDwg
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgVUNoYXIgYyA9IHByb3BlcnR5TmFtZVtpXTsKKyAgICAg
ICAgaWYgKCFXVEY6OmlzQVNDSUlVcHBlcihjKSkKKyAgICAgICAgICAgIG5hbWUuYXBwZW5kKGMp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5hbWUuYXBwZW5kKCctJyk7CisgICAgICAg
ICAgICBuYW1lLmFwcGVuZChXVEY6OnRvQVNDSUlMb3dlcihjKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChuYW1lKTsKK30KKworTkFNRURfUFJPUEVSVFlf
R0VUVEVSKENTU1N0eWxlRGVjbGFyYXRpb24pCit7CisgICAgSU5DX1NUQVRTKCJET00uQ1NTU3R5
bGVEZWNsYXJhdGlvbi5OYW1lZFByb3BlcnR5R2V0dGVyIik7CisgICAgLy8gRmlyc3QgbG9vayBm
b3IgQVBJIGRlZmluZWQgYXR0cmlidXRlcyBvbiB0aGUgc3R5bGUgZGVjbGFyYXRpb24gb2JqZWN0
LgorICAgIGlmIChpbmZvLkhvbGRlcigpLT5IYXNSZWFsTmFtZWRDYWxsYmFja1Byb3BlcnR5KG5h
bWUpKQorICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKworICAgIC8v
IFNlYXJjaCB0aGUgc3R5bGUgZGVjbGFyYXRpb24uCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
aW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8Q1NTU3R5bGVEZWNsYXJhdGlvbj4oVjhDbGFz
c0luZGV4OjpDU1NTVFlMRURFQ0xBUkFUSU9OLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGJvb2wg
aGFkUGl4ZWxPclBvc1ByZWZpeDsKKyAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gY3NzUHJvcGVy
dHlOYW1lKHRvV2ViQ29yZVN0cmluZyhuYW1lKSwgaGFkUGl4ZWxPclBvc1ByZWZpeCk7CisKKyAg
ICAvLyBEbyBub3QgaGFuZGxlIG5vbi1wcm9wZXJ0eSBuYW1lcy4KKyAgICBpZiAoIUNTU1N0eWxl
RGVjbGFyYXRpb246OmlzUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworCisKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IGNz
c1ZhbHVlID0gaW1wLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5TmFtZSk7CisgICAgaWYg
KGNzc1ZhbHVlKSB7CisgICAgICAgIGlmIChoYWRQaXhlbE9yUG9zUHJlZml4ICYmIGNzc1ZhbHVl
LT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX1BSSU1JVElWRV9WQUxVRSkKKyAgICAg
ICAgICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPihjc3NWYWx1ZS5nZXQoKSktPmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19QWCkpOworICAgICAgICByZXR1cm4gdjhTdHJpbmdPck51bGwoY3NzVmFsdWUtPmNzc1RleHQo
KSk7CisgICAgfQorCisgICAgU3RyaW5nIHJlc3VsdCA9IGltcC0+Z2V0UHJvcGVydHlWYWx1ZShw
cm9wZXJ0eU5hbWUpOworICAgIGlmIChyZXN1bHQuaXNOdWxsKCkpCisgICAgICAgIHJlc3VsdCA9
ICIiOyAgLy8gY29udmVydCBudWxsIHRvIGVtcHR5IHN0cmluZy4KKworICAgIC8vIFRoZSAnZmls
dGVyJyBhdHRyaWJ1dGUgaXMgbWFkZSB1bmRldGVjdGFibGUgaW4gS0pTL1dlYktpdAorICAgIC8v
IHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIElFJ3MgZmlsdGVyIGV4dGVuc2lvbi4KKyAgICBpZiAo
cHJvcGVydHlOYW1lID09ICJmaWx0ZXIiKQorICAgICAgICByZXR1cm4gdjhVbmRldGVjdGFibGVT
dHJpbmcocmVzdWx0KTsKKworICAgIHJldHVybiB2OFN0cmluZyhyZXN1bHQpOworfQorCitOQU1F
RF9QUk9QRVJUWV9TRVRURVIoQ1NTU3R5bGVEZWNsYXJhdGlvbikKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5DU1NTdHlsZURlY2xhcmF0aW9uLk5hbWVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDU1NT
dHlsZURlY2xhcmF0aW9uKiBpbXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxDU1NTdHlsZURl
Y2xhcmF0aW9uPihWOENsYXNzSW5kZXg6OkNTU1NUWUxFREVDTEFSQVRJT04sIGluZm8uSG9sZGVy
KCkpOworCisgICAgYm9vbCBoYWRQaXhlbE9yUG9zUHJlZml4OworICAgIFN0cmluZyBwcm9wID0g
Y3NzUHJvcGVydHlOYW1lKHRvV2ViQ29yZVN0cmluZyhuYW1lKSwgaGFkUGl4ZWxPclBvc1ByZWZp
eCk7CisgICAgaWYgKCFDU1NTdHlsZURlY2xhcmF0aW9uOjppc1Byb3BlcnR5TmFtZShwcm9wKSkK
KyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisKKyAgICBTdHJpbmcg
cHJvcGVydHlWYWx1ZSA9IHZhbHVlVG9TdHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKKyAgICBp
ZiAoaGFkUGl4ZWxPclBvc1ByZWZpeCkKKyAgICAgICAgcHJvcGVydHlWYWx1ZS5hcHBlbmQoInB4
Iik7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpbXAtPnNldFByb3BlcnR5KHBy
b3AsIHByb3BlcnR5VmFsdWUsIGVjKTsKKworICAgIGlmIChlYykKKyAgICAgICAgdGhyb3dFcnJv
cihlYyk7CisKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RE9NU3RyaW5nTGlzdEN1
c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVN0cmluZ0xpc3RDdXN0
b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDQzOTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERPTVN0cmluZ0xpc3RD
dXN0b20uY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAw
OSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRl
ICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoRE9NU3RyaW5nTGlzdCkKK3sKKyAg
ICBJTkNfU1RBVFMoIkRPTS5ET01TdHJpbmdMaXN0LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwor
ICAgIERPTVN0cmluZ0xpc3QqIGltcCA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05hdGl2ZTxET01T
dHJpbmdMaXN0PihpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5pdGVt
KGluZGV4KSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChET01TdHJpbmdMaXN0SXRlbSkKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5ET01TdHJpbmdMaXN0SXRlbSgpIik7CisgICAgaWYgKCFhcmdz
Lkxlbmd0aCgpKQorICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKKworICAgIHVpbnQzMl90IGlu
ZGV4ID0gYXJnc1swXS0+VWludDMyVmFsdWUoKTsKKworICAgIERPTVN0cmluZ0xpc3QqIGltcCA9
IFY4UHJveHk6OkRPTVdyYXBwZXJUb05hdGl2ZTxET01TdHJpbmdMaXN0PihhcmdzLkhvbGRlcigp
KTsKKyAgICBpZiAoaW5kZXggPj0gaW1wLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIHY4OjpO
dWxsKCk7CisKKyAgICByZXR1cm4gdjhTdHJpbmcoaW1wLT5pdGVtKGluZGV4KSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RXZlbnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVu
dEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRhZTg0NQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0
b20uY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJFdmVudC5oIgorCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJk
RXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcu
aCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQUNDRVNTT1JfU0VUVEVSKEV2ZW50UmV0dXJuVmFsdWUp
Cit7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhQcm94eTo6RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50
PihpbmZvLkhvbGRlcigpKTsKKyAgICBldmVudC0+c2V0RGVmYXVsdFByZXZlbnRlZCghdmFsdWUt
PkJvb2xlYW5WYWx1ZSgpKTsKK30KKworQUNDRVNTT1JfR0VUVEVSKEV2ZW50RGF0YVRyYW5zZmVy
KQoreworICAgIEV2ZW50KiBldmVudCA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05hdGl2ZTxFdmVu
dD4oaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoZXZlbnQtPmlzRHJhZ0V2ZW50KCkpCisgICAg
ICAgIHJldHVybiBWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJELCBz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSk7CisKKyAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitBQ0NFU1NPUl9HRVRURVIoRXZlbnRDbGlwYm9hcmRE
YXRhKQoreworICAgIEV2ZW50KiBldmVudCA9IFY4UHJveHk6OkRPTVdyYXBwZXJUb05hdGl2ZTxF
dmVudD4oaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoZXZlbnQtPmlzQ2xpcGJvYXJkRXZlbnQo
KSkKKyAgICAgICAgcmV0dXJuIFY4UHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDTElQ
Qk9BUkQsIHN0YXRpY19jYXN0PENsaXBib2FyZEV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSk7
CisKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitBQ0NFU1NPUl9HRVRURVIoRXZl
bnRTcmNFbGVtZW50KQoreworICAgIEV2ZW50KiBldmVudCA9IFY4UHJveHk6OkRPTVdyYXBwZXJU
b05hdGl2ZTxFdmVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIFY4UHJveHk6OkV2ZW50
VGFyZ2V0VG9WOE9iamVjdChldmVudC0+dGFyZ2V0KCkpOworfQorCitBQ0NFU1NPUl9HRVRURVIo
RXZlbnRSZXR1cm5WYWx1ZSkKK3sKKyAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5OjpET01XcmFw
cGVyVG9OYXRpdmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiBldmVudC0+ZGVm
YXVsdFByZXZlbnRlZCgpID8gdjg6OkZhbHNlKCkgOiB2ODo6VHJ1ZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxEb2N1bWVudEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxEb2N1bWVudEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YmMwNGY3ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTERvY3VtZW50Q3VzdG9tLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJIVE1MSUZyYW1lRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
CisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisj
aW5jbHVkZSAiVjhQcm94eS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK05BTUVEX1BST1BFUlRZX0RFTEVURVIoSFRNTERvY3VtZW50KQorewor
ICAgIC8vIE9ubHkgaGFuZGxlIGRvY3VtZW50LmFsbC4gIEluc2VydCB0aGUgbWFya2VyIG9iamVj
dCBpbnRvIHRoZQorICAgIC8vIHNoYWRvdyBpbnRlcm5hbCBmaWVsZCB0byBzaWduYWwgdGhhdCBk
b2N1bWVudC5hbGwgaXMgbm8gbG9uZ2VyCisgICAgLy8gc2hhZG93ZWQuCisgICAgU3RyaW5nIGtl
eSA9IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKyAgICBpZiAoa2V5ICE9ICJhbGwiKQorICAgICAg
ICByZXR1cm4gZGVsZXRpb25Ob3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworCisgICAgQVNTRVJU
KGluZm8uSG9sZGVyKCktPkludGVybmFsRmllbGRDb3VudCgpID09IGtIVE1MRG9jdW1lbnRJbnRl
cm5hbEZpZWxkQ291bnQpOworICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1hcmtlciA9IGluZm8u
SG9sZGVyKCktPkdldEludGVybmFsRmllbGQoa0hUTUxEb2N1bWVudE1hcmtlckluZGV4KTsKKyAg
ICBpbmZvLkhvbGRlcigpLT5TZXRJbnRlcm5hbEZpZWxkKGtIVE1MRG9jdW1lbnRTaGFkb3dJbmRl
eCwgbWFya2VyKTsKKyAgICByZXR1cm4gdjg6OlRydWUoKTsKK30KKworTkFNRURfUFJPUEVSVFlf
U0VUVEVSKEhUTUxEb2N1bWVudCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRG9jdW1lbnQu
TmFtZWRQcm9wZXJ0eVNldHRlciIpOworICAgIC8vIE9ubHkgaGFuZGxlIGRvY3VtZW50LmFsbC4g
IFdlIGluc2VydCB0aGUgdmFsdWUgaW50byB0aGUgc2hhZG93CisgICAgLy8gaW50ZXJuYWwgZmll
bGQgZnJvbSB3aGljaCB0aGUgZ2V0dGVyIHdpbGwgcmV0cmlldmUgaXQuCisgICAgU3RyaW5nIGtl
eSA9IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKyAgICBpZiAoa2V5ID09ICJhbGwiKSB7CisgICAg
ICAgIEFTU0VSVChpbmZvLkhvbGRlcigpLT5JbnRlcm5hbEZpZWxkQ291bnQoKSA9PSBrSFRNTERv
Y3VtZW50SW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgaW5mby5Ib2xkZXIoKS0+U2V0SW50
ZXJuYWxGaWVsZChrSFRNTERvY3VtZW50U2hhZG93SW5kZXgsIHZhbHVlKTsKKyAgICB9CisgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Cit9CisKK05BTUVEX1BST1BFUlRZX0dF
VFRFUihIVE1MRG9jdW1lbnQpCit7CisgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3VtZW50Lk5h
bWVkUHJvcGVydHlHZXR0ZXIiKTsKKyAgICBBdG9taWNTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3Ry
aW5nKG5hbWUpOworCisgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBkb2N1bWVudC5hbGwuICBJZiB0
aGUgdmFsdWUgaW4gdGhlIHNoYWRvdworICAgIC8vIGludGVybmFsIGZpZWxkIGlzIG5vdCB0aGUg
bWFya2VyIG9iamVjdCwgdGhlbiBkb2N1bWVudC5hbGwgaGFzCisgICAgLy8gYmVlbiB0ZW1wb3Jh
cmlseSBzaGFkb3dlZCBhbmQgd2UgcmV0dXJuIHRoZSB2YWx1ZS4KKyAgICBpZiAoa2V5ID09ICJh
bGwiKSB7CisgICAgICAgIEFTU0VSVChpbmZvLkhvbGRlcigpLT5JbnRlcm5hbEZpZWxkQ291bnQo
KSA9PSBrSFRNTERvY3VtZW50SW50ZXJuYWxGaWVsZENvdW50KTsKKyAgICAgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gbWFya2VyID0gaW5mby5Ib2xkZXIoKS0+R2V0SW50ZXJuYWxGaWVsZChrSFRN
TERvY3VtZW50TWFya2VySW5kZXgpOworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1
ZSA9IGluZm8uSG9sZGVyKCktPkdldEludGVybmFsRmllbGQoa0hUTUxEb2N1bWVudFNoYWRvd0lu
ZGV4KTsKKyAgICAgICAgaWYgKG1hcmtlciAhPSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZTsKKyAgICB9CisKKyAgICBIVE1MRG9jdW1lbnQqIGltcCA9IFY4UHJveHk6OkRPTVdyYXBw
ZXJUb05vZGU8SFRNTERvY3VtZW50PihpbmZvLkhvbGRlcigpKTsKKworICAgIC8vIEZhc3QgY2Fz
ZSBmb3IgbmFtZWQgZWxlbWVudHMgdGhhdCBhcmUgbm90IHRoZXJlLgorICAgIGlmICghaW1wLT5o
YXNOYW1lZEl0ZW0oa2V5LmltcGwoKSkgJiYgIWltcC0+aGFzRXh0cmFOYW1lZEl0ZW0oa2V5Lmlt
cGwoKSkpCisgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKworICAgIFJl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gaXRlbXMgPSBpbXAtPmRvY3VtZW50TmFtZWRJdGVtcyhrZXkp
OworICAgIGlmICghaXRlbXMtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKKworICAgIGlmIChpdGVtcy0+bGVuZ3RoKCkgPT0gMSkgeworICAgICAg
ICBOb2RlKiBub2RlID0gaXRlbXMtPmZpcnN0SXRlbSgpOworICAgICAgICBGcmFtZSogZnJhbWUg
PSAwOworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykg
JiYgKGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTElGcmFtZUVsZW1lbnQqPihub2RlKS0+Y29udGVu
dEZyYW1lKCkpKQorICAgICAgICAgICAgcmV0dXJuIFY4UHJveHk6OlRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpET01XSU5ET1csIGZyYW1lLT5kb21XaW5kb3coKSk7CisKKyAgICAgICAgcmV0dXJu
IFY4UHJveHk6Ok5vZGVUb1Y4T2JqZWN0KG5vZGUpOworICAgIH0KKworICAgIHJldHVybiBWOFBy
b3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIGl0ZW1zLmdldCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYwODU0MgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5j
cHAKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhU
TUxGcmFtZVNldEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhUTUxGcmFt
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisK
KyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNp
bmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTkFNRURfUFJPUEVS
VFlfR0VUVEVSKEhUTUxGcmFtZVNldEVsZW1lbnQpCit7CisgICAgSU5DX1NUQVRTKCJET00uSFRN
TEZyYW1lU2V0RWxlbWVudC5OYW1lZFByb3BlcnR5R2V0dGVyIik7CisgICAgSFRNTEZyYW1lU2V0
RWxlbWVudCogaW1wID0gVjhQcm94eTo6RE9NV3JhcHBlclRvTm9kZTxIVE1MRnJhbWVTZXRFbGVt
ZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBOb2RlKiBmcmFtZU5vZGUgPSBpbXAtPmNoaWxkcmVu
KCktPm5hbWVkSXRlbSh0b1dlYkNvcmVTdHJpbmcobmFtZSkpOworICAgIGlmIChmcmFtZU5vZGUg
JiYgZnJhbWVOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcpKSB7CisgICAgICAg
IERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50Kj4oZnJhbWVOb2Rl
KS0+Y29udGVudERvY3VtZW50KCk7CisgICAgICAgIGlmICghZG9jKQorICAgICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvYy0+ZnJh
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBmcmFtZS0+ZG9tV2luZG93KCkpOworICAgIH0KKyAgICByZXR1cm4gbm90
SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNTI5Y2MKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5j
cHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk5h
bWVkTm9kZU1hcC5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0
b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKE5h
bWVkTm9kZU1hcCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5OYW1lZE5vZGVNYXAuSW5kZXhlZFBy
b3BlcnR5R2V0dGVyIik7CisgICAgTmFtZWROb2RlTWFwKiBpbXAgPSBWOFByb3h5OjpUb05hdGl2
ZU9iamVjdDxOYW1lZE5vZGVNYXA+KFY4Q2xhc3NJbmRleDo6TkFNRUROT0RFTUFQLCBpbmZvLkhv
bGRlcigpKTsKKyAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gaW1wLT5pdGVtKGluZGV4KTsKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CisKKyAgICByZXR1cm4gVjhQcm94eTo6Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKK30K
KworTkFNRURfUFJPUEVSVFlfR0VUVEVSKE5hbWVkTm9kZU1hcCkKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5OYW1lZE5vZGVNYXAuTmFtZWRQcm9wZXJ0eUdldHRlciIpOworICAgIC8vIFNlYXJjaCB0
aGUgcHJvdG90eXBlIGNoYWluIGZpcnN0LgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1
ZSA9IGluZm8uSG9sZGVyKCktPkdldFJlYWxOYW1lZFByb3BlcnR5SW5Qcm90b3R5cGVDaGFpbihu
YW1lKTsKKyAgICBpZiAoIXZhbHVlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
CisgICAgLy8gVGhlbiBsb29rIGZvciBJREwgZGVmaW5lZCBwcm9wZXJ0aWVzIG9uIHRoZSBvYmpl
Y3QgaXRzZWxmLgorICAgIGlmIChpbmZvLkhvbGRlcigpLT5IYXNSZWFsTmFtZWRDYWxsYmFja1By
b3BlcnR5KG5hbWUpKQorICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
KworICAgIC8vIEZpbmFsbHksIHNlYXJjaCB0aGUgRE9NLgorICAgIE5hbWVkTm9kZU1hcCogaW1w
ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TmFtZWROb2RlTWFwPihWOENsYXNzSW5kZXg6Ok5B
TUVETk9ERU1BUCwgaW5mby5Ib2xkZXIoKSk7CisgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IGlt
cC0+Z2V0TmFtZWRJdGVtKHRvV2ViQ29yZVN0cmluZyhuYW1lKSk7CisgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworCisgICAgcmV0dXJu
IFY4UHJveHk6Ok5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9k
ZUxpc3RDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1
c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhNDdmNQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUxpc3RDdXN0
b20uY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0
b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05BTUVEX1BST1BFUlRZX0dFVFRFUihOb2Rl
TGlzdCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlTGlzdC5OYW1lZFByb3BlcnR5R2V0dGVy
Iik7CisgICAgTm9kZUxpc3QqIGxpc3QgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxOb2RlTGlz
dD4oVjhDbGFzc0luZGV4OjpOT0RFTElTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgU3RyaW5nIGtl
eSA9IHRvV2ViQ29yZVN0cmluZyhuYW1lKTsKKworICAgIC8vIExlbmd0aCBwcm9wZXJ0eSBjYW5u
b3QgYmUgb3ZlcnJpZGRlbi4KKyAgICBpZiAoa2V5ID09ICJsZW5ndGgiKQorICAgICAgICByZXR1
cm4gdjg6Ok51bWJlcjo6TmV3KGxpc3QtPmxlbmd0aCgpKTsKKworICAgIFJlZlB0cjxOb2RlPiBy
ZXN1bHQgPSBsaXN0LT5pdGVtV2l0aE5hbWUoa2V5KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisKKyAgICByZXR1cm4gVjhQcm94
eTo6Tm9kZVRvVjhPYmplY3QocmVzdWx0LmdldCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0
TGlzdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRM
aXN0Q3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzYyY2U1
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNo
ZWV0TGlzdEN1c3RvbS5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIK
KyNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworTkFNRURfUFJPUEVSVFlfR0VUVEVSKFN0eWxlU2hlZXRMaXN0
KQoreworICAgIElOQ19TVEFUUygiRE9NLlN0eWxlU2hlZXRMaXN0Lk5hbWVkUHJvcGVydHlHZXR0
ZXIiKTsKKworICAgIGlmIChpbmZvLkhvbGRlcigpLT5IYXNSZWFsTmFtZWRQcm9wZXJ0eShuYW1l
KSkKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisKKyAgICAvLyBT
ZWFyY2ggc3R5bGUgc2hlZXQuCisgICAgU3R5bGVTaGVldExpc3QqIGltcCA9IFY4UHJveHk6OlRv
TmF0aXZlT2JqZWN0PFN0eWxlU2hlZXRMaXN0PihWOENsYXNzSW5kZXg6OlNUWUxFU0hFRVRMSVNU
LCBpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBpdGVtID0gaW1wLT5nZXRO
YW1lZEl0ZW0odG9XZWJDb3JlU3RyaW5nKG5hbWUpKTsKKyAgICBpZiAoIWl0ZW0pCisgICAgICAg
IHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworCisgICAgcmV0dXJuIFY4UHJveHk6
OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpIVE1MU1RZTEVFTEVNRU5ULCBpdGVtKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="13637"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>