<?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>24109</bug_id>
          
          <creation_ts>2009-02-23 15:52:22 -0800</creation_ts>
          <short_desc>Upstream V8 Script Abstraction</short_desc>
          <delta_ts>2009-02-23 20:05:27 -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>
          <dependson>24139</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>110651</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-23 15:52:22 -0800</bug_when>
    <thetext>.. with the exception of ScriptController, which needs to have its own, highly personalized bathing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110653</commentid>
    <comment_count>1</comment_count>
      <attachid>27897</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-23 15:54:24 -0800</bug_when>
    <thetext>Created attachment 27897
Add V8 Script abstractions, v1

 WebCore/ChangeLog                           |   66 +++++++++++++
 WebCore/bindings/v8/ScriptCachedFrameData.h |   52 ++++++++++
 WebCore/bindings/v8/ScriptCallFrame.cpp     |   62 ++++++++++++
 WebCore/bindings/v8/ScriptCallFrame.h       |   73 +++++++++++++++
 WebCore/bindings/v8/ScriptCallStack.cpp     |   58 ++++++++++++
 WebCore/bindings/v8/ScriptCallStack.h       |   59 ++++++++++++
 WebCore/bindings/v8/ScriptInstance.cpp      |   83 +++++++++++++++++
 WebCore/bindings/v8/ScriptInstance.h        |   63 +++++++++++++
 WebCore/bindings/v8/ScriptSourceCode.h      |   72 ++++++++++++++
 WebCore/bindings/v8/ScriptState.h           |   51 ++++++++++
 WebCore/bindings/v8/ScriptString.h          |   66 +++++++++++++
 WebCore/bindings/v8/ScriptValue.cpp         |   50 ++++++++++
 WebCore/bindings/v8/ScriptValue.h           |  134 +++++++++++++++++++++++++++
 13 files changed, 889 insertions(+), 0 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110655</commentid>
    <comment_count>2</comment_count>
      <attachid>27897</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-23 15:58:11 -0800</bug_when>
    <thetext>Comment on attachment 27897
Add V8 Script abstractions, v1

Looks fine.  Only touches V8 code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110662</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-02-23 17:00:46 -0800</bug_when>
    <thetext>Did this get landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110677</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-02-23 20:05:27 -0800</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/41159.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27897</attachid>
            <date>2009-02-23 15:54:24 -0800</date>
            <delta_ts>2009-02-23 15:58:11 -0800</delta_ts>
            <desc>Add V8 Script abstractions, v1</desc>
            <filename>Add-V8-Script-abstractions-v1.patch</filename>
            <type>text/plain</type>
            <size>35351</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">NjIzNTIwYmRkZjNjYzJjMWJiNmUzZDljNTZmOWNiNjcxMGQwNWVhMApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0NWRiMjIzLi5lNWIzY2Fk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDY5IEBACisyMDA5LTAyLTIzICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQxMDkKKyAgICAg
ICBVcHN0cmVhbSBWOCBTY3JpcHQgYWJzdHJhY3Rpb25zLCBhbGwgZXhjZXB0IFNjcmlwdENvbnRy
b2xsZXIuCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDYWNoZWRGcmFtZURhdGEuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6OlNjcmlwdENh
Y2hlZEZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWNoZWRGcmFtZURhdGE6
On5TY3JpcHRDYWNoZWRGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVk
RnJhbWVEYXRhOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhY2hlZEZyYW1l
RGF0YTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FjaGVkRnJhbWVEYXRhOjpk
b21XaW5kb3cpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENhbGxGcmFtZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjpTY3JpcHRDYWxsRnJhbWUp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZyYW1lOjp+U2NyaXB0Q2FsbEZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6YXJndW1lbnRBdCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvU2NyaXB0Q2FsbEZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2NyaXB0Q2FsbEZyYW1lOjpmdW5jdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q2FsbEZyYW1lOjpzb3VyY2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbEZy
YW1lOjpsaW5lTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENhbGxGcmFtZTo6YXJn
dW1lbnRDb3VudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6OlNjcmlwdENhbGxTdGFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDYWxsU3RhY2s6On5TY3JpcHRDYWxsU3RhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q2FsbFN0YWNrOjphdCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
aXB0Q2FsbFN0YWNrOjpzaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRJbnN0YW5j
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhTY3JpcHRJbnN0YW5jZTo6VjhTY3Jp
cHRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFNjcmlwdEluc3RhbmNlOjp+VjhTY3Jp
cHRJbnN0YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFNjcmlwdEluc3RhbmNlOjppbnN0YW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOFNjcmlwdEluc3RhbmNlOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpWOFNjcmlwdEluc3RhbmNlOjpzZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1NjcmlwdEluc3RhbmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VjhTY3JpcHRJbnN0
YW5jZTo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTb3VyY2VDb2RlLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291cmNlQ29kZTo6U2NyaXB0U291cmNl
Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTb3VyY2VDb2RlOjppc0VtcHR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZUNvZGU6OnNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRTb3VyY2VDb2RlOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U291
cmNlQ29kZTo6c3RhcnRMaW5lKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRTdGF0ZS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0YXRlOjpoYWRFeGNlcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RhdGU6OnNldEV4Y2VwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JpcHRTdGF0ZTo6ZXhjZXB0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9T
Y3JpcHRTdHJpbmcuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6OlNj
cmlwdFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6Om9wZXJhdG9yIFN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6OmlzTnVsbCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
U3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpvcGVy
YXRvcis9KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6OmdldFN0cmluZyk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvU2NyaXB0VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRW
YWx1ZTo6U2NyaXB0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6Om9wZXJh
dG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRWYWx1ZTo6aXNOdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFZhbHVlOjpp
c1VuZGVmaW5lZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRWYWx1ZTo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0VmFsdWU6On5TY3JpcHRWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTY3JpcHRWYWx1ZTo6djhWYWx1ZSk6CisKIDIwMDktMDItMjMgIEFkYW0gVHJlYXQgIDxh
ZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5
IEhhdGNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhY2hlZEZy
YW1lRGF0YS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWNoZWRGcmFtZURhdGEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjUzMGY0Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWNoZWRGcmFtZURhdGEuaApAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRDYWNoZWRQYWdlRGF0YV9oCisjZGVmaW5lIFNj
cmlwdENhY2hlZFBhZ2VEYXRhX2gKKworLy8gV2UgZG9uJ3QgdXNlIFdlYktpdCdzIHBhZ2UgY2Fj
aGluZywgc28gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBqdXN0IGEgc3R1Yi4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNzIERPTVdpbmRvdzsKKworICAg
IGNsYXNzIFNjcmlwdENhY2hlZEZyYW1lRGF0YSAgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2Ny
aXB0Q2FjaGVkRnJhbWVEYXRhKEZyYW1lKikgeyB9CisgICAgICAgIH5TY3JpcHRDYWNoZWRGcmFt
ZURhdGEoKSB7IH0KKworICAgICAgICB2b2lkIHJlc3RvcmUoRnJhbWUqKSB7IH0KKyAgICAgICAg
dm9pZCBjbGVhcigpIHsgfQorICAgICAgICBET01XaW5kb3cqIGRvbVdpbmRvdygpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBTY3JpcHRDYWNoZWRQYWdlRGF0YV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENhbGxGcmFtZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxGcmFt
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIzMDg2MgotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbEZyYW1lLmNwcApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRD
YWxsRnJhbWUuaCIKKworI2luY2x1ZGUgPHY4Lmg+CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NjcmlwdENhbGxG
cmFtZTo6U2NyaXB0Q2FsbEZyYW1lKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3VtZW50cywgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpCisgICAgOiBtX2Z1bmN0aW9uTmFt
ZShmdW5jdGlvbk5hbWUpCisgICAgLCBtX3NvdXJjZVVSTCh1cmxTdHJpbmcpCisgICAgLCBtX2xp
bmVOdW1iZXIobGluZU51bWJlcikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50
cy5MZW5ndGgoKTsgKytpKQorICAgICAgICBtX2FyZ3VtZW50cy5hcHBlbmQoU2NyaXB0VmFsdWUo
YXJndW1lbnRzW2ldKSk7Cit9CisKK1NjcmlwdENhbGxGcmFtZTo6flNjcmlwdENhbGxGcmFtZSgp
Cit7Cit9CisKK2NvbnN0IFNjcmlwdFZhbHVlJiBTY3JpcHRDYWxsRnJhbWU6OmFyZ3VtZW50QXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA+
IGluZGV4KTsKKyAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxG
cmFtZS5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsRnJhbWUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDM1N2NmCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDYWxsRnJhbWUuaApAQCAtMCwwICsxLDczIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgU2NyaXB0Q2FsbEZyYW1lX2gKKyNkZWZpbmUgU2NyaXB0Q2FsbEZyYW1lX2gKKwor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKKworI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIHY4IHsKKyAgICBjbGFzcyBBcmd1bWVudHM7Cit9
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBTY3JpcHRWYWx1ZTsKKworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmV0cmlldmluZyBsaW5lIG51bWJlciBhbmQgc291cmNlIFVSTCBh
bmQgc3RvcmluZyBoZXJlCisgICAgLy8gZm9yIGFsbCBjYWxsIGZyYW1lcywgbm90IGp1c3QgdGhl
IGZpcnN0IG9uZS4KKyAgICAvLyBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjU1Nj4gYW5kCisgICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTE4MD4KKyAgICBjbGFzcyBTY3JpcHRDYWxsRnJhbWUgIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFNjcmlwdENhbGxGcmFtZShjb25zdCBTdHJpbmcmIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCB2ODo6QXJndW1l
bnRzJiwgdW5zaWduZWQgc2tpcEFyZ3VtZW50Q291bnQpOworICAgICAgICB+U2NyaXB0Q2FsbEZy
YW1lKCk7CisKKyAgICAgICAgY29uc3QgU2NyaXB0U3RyaW5nJiBmdW5jdGlvbk5hbWUoKSBjb25z
dCB7IHJldHVybiBtX2Z1bmN0aW9uTmFtZTsgfQorICAgICAgICBjb25zdCBLVVJMJiBzb3VyY2VV
UkwoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZVVSTDsgfQorICAgICAgICB1bnNpZ25lZCBsaW5l
TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9saW5lTnVtYmVyOyB9CisKKyAgICAgICAgLy8gYXJn
dW1lbnQgcmV0cmlldmFsIG1ldGhvZHMKKyAgICAgICAgY29uc3QgU2NyaXB0VmFsdWUmIGFyZ3Vt
ZW50QXQodW5zaWduZWQpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50KCkg
Y29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBTY3JpcHRTdHJpbmcgbV9mdW5jdGlvbk5hbWU7CisgICAgICAgIEtVUkwgbV9zb3VyY2VV
Ukw7CisgICAgICAgIHVuc2lnbmVkIG1fbGluZU51bWJlcjsKKworICAgICAgICBWZWN0b3I8U2Ny
aXB0VmFsdWU+IG1fYXJndW1lbnRzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFNjcmlwdENhbGxGcmFtZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENhbGxTdGFjay5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENh
bGxTdGFjay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4OGRjZgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmNw
cApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJT
Y3JpcHRDYWxsU3RhY2suaCIKKworI2luY2x1ZGUgPHY4Lmg+CisKKyNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU2Ny
aXB0Q2FsbFN0YWNrOjpTY3JpcHRDYWxsU3RhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJndW1l
bnRzLCB1bnNpZ25lZCBza2lwQXJndW1lbnRDb3VudCkKKyAgICA6IG1fbGFzdENhbGxlcihTdHJp
bmcoKSwgVjhQcm94eTo6R2V0U291cmNlTmFtZSgpLCBWOFByb3h5OjpHZXRTb3VyY2VMaW5lTnVt
YmVyKCkgKyAxLCBhcmd1bWVudHMsIHNraXBBcmd1bWVudENvdW50KQoreworfQorCitTY3JpcHRD
YWxsU3RhY2s6On5TY3JpcHRDYWxsU3RhY2soKQoreworfQorCitjb25zdCBTY3JpcHRDYWxsRnJh
bWUmIFNjcmlwdENhbGxTdGFjazo6YXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgLy8g
Q3VycmVudGx5LCBvbmx5IG9uZSBTY3JpcHRDYWxsRnJhbWUgaXMgc3VwcG9ydGVkLiBXaGVuIHdl
IGNhbiBnZXQKKyAgICAvLyBhIGZ1bGwgc3RhY2sgdHJhY2UgZnJvbSBWOCwgd2UgY2FuIGRvIHRo
aXMgcmlnaHQuCisgICAgQVNTRVJUKGluZGV4ID09IDApOworICAgIHJldHVybiBtX2xhc3RDYWxs
ZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0Q2FsbFN0YWNrLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENh
bGxTdGFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExM2ZmOTkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENhbGxTdGFjay5oCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTY3JpcHRDYWxsU3RhY2tfaAorI2RlZmluZSBT
Y3JpcHRDYWxsU3RhY2tfaAorCisjaW5jbHVkZSAiU2NyaXB0Q2FsbEZyYW1lLmgiCisjaW5jbHVk
ZSAiU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNw
YWNlIHY4IHsKKyAgICBjbGFzcyBBcmd1bWVudHM7Cit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworICAgIGNsYXNzIFNjcmlwdENhbGxTdGFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAg
cHVibGljOgorICAgICAgICBTY3JpcHRDYWxsU3RhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYsIHVu
c2lnbmVkIHNraXBBcmd1bWVudENvdW50ID0gMCk7CisgICAgICAgIH5TY3JpcHRDYWxsU3RhY2so
KTsKKworICAgICAgICBjb25zdCBTY3JpcHRDYWxsRnJhbWUmIGF0KHVuc2lnbmVkKSBjb25zdDsK
KyAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCByZXRyaWV2aW5nIGFuZCBzdG9yaW5nIGNhbGwg
c3RhY2sgdHJhY2UKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIFNjcmlwdENhbGxGcmFtZSBtX2xhc3RDYWxsZXI7Cisg
ICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0Q2FsbFN0
YWNrX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0SW5zdGFuY2UuY3Bw
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRJbnN0YW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0YTM5NgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0SW5zdGFuY2UuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcmlwdEluc3RhbmNlLmgiCisKKyNpZm5kZWYg
TkRFQlVHCisjaW5jbHVkZSAiVjhQcm94eS5oIgorI2VuZGlmCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWOFNjcmlwdEluc3RhbmNlOjpWOFNj
cmlwdEluc3RhbmNlKCkKK3sKK30KKworVjhTY3JpcHRJbnN0YW5jZTo6VjhTY3JpcHRJbnN0YW5j
ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGluc3RhbmNlKQoreworICAgIHNldChpbnN0YW5jZSk7
Cit9CisKK1Y4U2NyaXB0SW5zdGFuY2U6On5WOFNjcmlwdEluc3RhbmNlKCkKK3sKKyAgICBjbGVh
cigpOworfQorCit2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBWOFNjcmlwdEluc3RhbmNlOjpp
bnN0YW5jZSgpCit7CisgICAgcmV0dXJuIG1faW5zdGFuY2U7Cit9CisKK3ZvaWQgVjhTY3JpcHRJ
bnN0YW5jZTo6Y2xlYXIoKQoreworICAgIGlmIChtX2luc3RhbmNlLklzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworI2lmbmRlZiBOREVCVUcKKyAgICBWOFByb3h5OjpVbnJlZ2lzdGVyR2xvYmFs
SGFuZGxlKHRoaXMsIG1faW5zdGFuY2UpOworI2VuZGlmCisgICAgbV9pbnN0YW5jZS5EaXNwb3Nl
KCk7CisgICAgbV9pbnN0YW5jZS5DbGVhcigpOworfQorCit2b2lkIFY4U2NyaXB0SW5zdGFuY2U6
OnNldCh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGluc3RhbmNlKQoreworICAgIGNsZWFyKCk7Cisg
ICAgaWYgKGluc3RhbmNlLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbnN0
YW5jZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoaW5zdGFuY2UpOworI2lmbmRl
ZiBOREVCVUcKKyAgICBWOFByb3h5OjpSZWdpc3Rlckdsb2JhbEhhbmRsZShTQ1JJUFRJTlNUQU5D
RSwgdGhpcywgbV9pbnN0YW5jZSk7CisjZW5kaWYKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRJbnN0YW5jZS5oIGIvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRJbnN0YW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmVkMGJlODYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdEluc3RhbmNlLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNjcmlw
dEluc3RhbmNlX2gKKyNkZWZpbmUgU2NyaXB0SW5zdGFuY2VfaAorCisjaW5jbHVkZSA8djguaD4K
KworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWOFNjcmlwdEluc3RhbmNlIDogcHVi
bGljIFJlZkNvdW50ZWQ8VjhTY3JpcHRJbnN0YW5jZT4geworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFY4U2NyaXB0SW5zdGFuY2U+IGNyZWF0ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGluc3RhbmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWOFNjcmlwdElu
c3RhbmNlKGluc3RhbmNlKSk7CisgICAgfQorICAgIFY4U2NyaXB0SW5zdGFuY2UoKTsKKyAgICBW
OFNjcmlwdEluc3RhbmNlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOworICAgIH5WOFNjcmlwdElu
c3RhbmNlKCk7CisgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gaW5zdGFuY2UoKTsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgdm9pZCBzZXQodjg6OkhhbmRsZTx2ODo6
T2JqZWN0Pik7CisgICAgbXV0YWJsZSB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2luc3Rh
bmNlOworfTsKKwordHlwZWRlZiBSZWZQdHI8VjhTY3JpcHRJbnN0YW5jZT4gU2NyaXB0SW5zdGFu
Y2U7Cit0eXBlZGVmIFBhc3NSZWZQdHI8VjhTY3JpcHRJbnN0YW5jZT4gUGFzc1NjcmlwdEluc3Rh
bmNlOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JpcHRJbnN0YW5j
ZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U291cmNlQ29kZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmZlYTM4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFNvdXJjZUNvZGUuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgU2NyaXB0U291cmNlQ29kZV9oCisjZGVmaW5lIFNjcmlwdFNvdXJjZUNvZGVfaAorCisjaW5j
bHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NyaXB0U291cmNl
Q29kZSB7CitwdWJsaWM6CisgICAgU2NyaXB0U291cmNlQ29kZShjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgY29uc3QgS1VSTCYgdXJsID0gS1VSTCgpLCBpbnQgc3RhcnRMaW5lID0gMSkKKyAgICAgICAg
OiBtX3NvdXJjZShzb3VyY2UpCisgICAgICAgICwgbV91cmwodXJsKQorICAgICAgICAsIG1fc3Rh
cnRMaW5lKHN0YXJ0TGluZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gV2UgbG9zZSB0aGUgZW5j
b2RpbmcgaW5mb3JtYXRpb24gZnJvbSBDYWNoZWRTY3JpcHQuCisgICAgLy8gTm90IHN1cmUgaWYg
dGhhdCBtYXR0ZXJzLgorICAgIFNjcmlwdFNvdXJjZUNvZGUoQ2FjaGVkU2NyaXB0KiBjcykKKyAg
ICAgICAgOiBtX3NvdXJjZShjcy0+c2NyaXB0KCkpCisgICAgICAgICwgbV91cmwoY3MtPnVybCgp
KQorICAgICAgICAsIG1fc3RhcnRMaW5lKDEpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLmlzRW1wdHkoKTsgfQorCisgICAgY29uc3Qg
U3RyaW5nJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZTsgfQorICAgIGNvbnN0IEtV
UkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9CisgICAgaW50IHN0YXJ0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhcnRMaW5lOyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fc291
cmNlOworICAgIEtVUkwgbV91cmw7CisgICAgaW50IG1fc3RhcnRMaW5lOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0U291cmNlQ29kZV9oCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0YXRlLmggYi9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1NjcmlwdFN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVh
OTU3OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0U3RhdGUu
aApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3RhdGVfaAorI2RlZmluZSBT
Y3JpcHRTdGF0ZV9oCisKKyNpbmNsdWRlIDx2OC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgY2xhc3MgU2NyaXB0U3RhdGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgYm9vbCBoYWRFeGNl
cHRpb24oKSB7IHJldHVybiAhbV9leGNlcHRpb24uSXNFbXB0eSgpOyB9CisgICAgICAgIHZvaWQg
c2V0RXhjZXB0aW9uKHY4OjpMb2NhbDx2ODo6VmFsdWU+IGV4Y2VwdGlvbikKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9leGNlcHRpb24gPSBleGNlcHRpb247CisgICAgICAgIH0KKyAgICAgICAg
djg6OkxvY2FsPHY4OjpWYWx1ZT4gZXhjZXB0aW9uKCkgeyByZXR1cm4gbV9leGNlcHRpb247IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fZXhjZXB0aW9u
OworICAgIH07Cit9CisKKyNlbmRpZiAvLyBTY3JpcHRTdGF0ZV9oCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFN0cmluZy5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRTdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmE1NzVmCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRTdHJpbmcuaApAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3RyaW5nX2gKKyNkZWZpbmUgU2NyaXB0
U3RyaW5nX2gKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgU2NyaXB0U3RyaW5nIHsKK3B1YmxpYzoKKyAgICBTY3JpcHRTdHJpbmco
Y29uc3QgU3RyaW5nJiBzKSA6IG1fc3RyKHMpIHt9CisgICAgU2NyaXB0U3RyaW5nKGNvbnN0IGNo
YXIqIHMpIDogbV9zdHIocykge30KKworICAgIG9wZXJhdG9yIFN0cmluZygpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyOyB9CisKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLmlz
TnVsbCgpOyB9CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3N0ci5sZW5ndGgo
KTsgfQorCisgICAgU2NyaXB0U3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciogcykKKyAgICB7
CisgICAgICAgIG1fc3RyID0gczsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAg
IFNjcmlwdFN0cmluZyYgb3BlcmF0b3IrPShjb25zdCBTdHJpbmcmIHMpCisgICAgeworICAgICAg
ICBtX3N0ciArPSBzOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFN0cmluZyBtX3N0cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFNjcmlwdFN0cmluZ19oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFZhbHVlLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZGQzY2UKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFZhbHVlLmNwcApAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTY3JpcHRWYWx1ZS5oIgorCisjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTY3JpcHRWYWx1
ZTo6Z2V0U3RyaW5nKFN0cmluZyYgcmVzdWx0KSBjb25zdAoreworICAgIGlmIChtX3ZhbHVlLklz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3ZhbHVlLT5Jc1N0
cmluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXN1bHQgPSB0b1dlYkNvcmVT
dHJpbmcobV92YWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0VmFsdWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zMmZjZGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRWYWx1ZS5oCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0VmFs
dWVfaAorI2RlZmluZSBTY3JpcHRWYWx1ZV9oCisKKyNpbmNsdWRlIDx2OC5oPgorCisjaWZuZGVm
IE5ERUJVRworI2luY2x1ZGUgIlY4UHJveHkuaCIgIC8vIGZvciByZWdpc3RlciBhbmQgdW5yZWdp
c3RlciBnbG9iYWwgaGFuZGxlcy4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFN0cmluZzsKKworY2xhc3MgU2NyaXB0VmFsdWUgeworcHVibGljOgorICAgIFNjcmlwdFZh
bHVlKCkge30KKworICAgIFNjcmlwdFZhbHVlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkg
CisgICAgeworICAgICAgICBpZiAodmFsdWUuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIG1fdmFsdWUgPSB2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+OjpOZXcodmFs
dWUpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgVjhQcm94eTo6UmVnaXN0ZXJHbG9iYWxIYW5k
bGUoU0NSSVBUVkFMVUUsIHRoaXMsIG1fdmFsdWUpOworI2VuZGlmCisgICAgfQorCisgICAgU2Ny
aXB0VmFsdWUoY29uc3QgU2NyaXB0VmFsdWUmIHZhbHVlKSAKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5tX3ZhbHVlLklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBt
X3ZhbHVlID0gdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KHZhbHVlLm1fdmFsdWUpOwor
I2lmbmRlZiBOREVCVUcKKyAgICAgICAgVjhQcm94eTo6UmVnaXN0ZXJHbG9iYWxIYW5kbGUoU0NS
SVBUVkFMVUUsIHRoaXMsIG1fdmFsdWUpOworI2VuZGlmCisgICAgfQorCisgICAgU2NyaXB0VmFs
dWUmIG9wZXJhdG9yPShjb25zdCBTY3JpcHRWYWx1ZSYgdmFsdWUpIAorICAgIHsKKyAgICAgICAg
aWYgKHRoaXMgPT0gJnZhbHVlKSAKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAg
ICBjbGVhcigpOworCisgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlLklzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKworICAgICAgICBtX3ZhbHVlID0gdjg6OlBlcnNpc3RlbnQ8
djg6OlZhbHVlPjo6TmV3KHZhbHVlLm1fdmFsdWUpOworI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
VjhQcm94eTo6UmVnaXN0ZXJHbG9iYWxIYW5kbGUoU0NSSVBUVkFMVUUsIHRoaXMsIG1fdmFsdWUp
OworI2VuZGlmCisKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTY3JpcHRWYWx1ZSB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlID09IHZhbHVlLm1fdmFsdWU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFNjcmlwdFZhbHVlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFvcGVyYXRvcj09KHZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZS0+SXNOdWxsKCk7CisgICAgfQorCisgICAgYm9v
bCBpc1VuZGVmaW5lZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZS0+SXNV
bmRlZmluZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGlm
ICghbV92YWx1ZS5Jc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIFY4UHJveHk6OlVucmVnaXN0ZXJHbG9iYWxIYW5kbGUodGhpcywgbV92YWx1
ZSk7CisjZW5kaWYKKyAgICAgICAgbV92YWx1ZS5EaXNwb3NlKCk7CisgICAgICAgIG1fdmFsdWUu
Q2xlYXIoKTsKKyAgICB9CisKKyAgICB+U2NyaXB0VmFsdWUoKSAKKyAgICB7CisgICAgICAgIGNs
ZWFyKCk7CisgICAgfQorCisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4VmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgYm9vbCBnZXRTdHJpbmcoU3RyaW5nJiByZXN1bHQp
IGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUgdjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Ny
aXB0VmFsdWVfaAo=
</data>
<flag name="review"
          id="13581"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>