<?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>24561</bug_id>
          
          <creation_ts>2009-03-12 14:24:57 -0700</creation_ts>
          <short_desc>Add custom V8 bindings for HTMLElementCanvas, Location</short_desc>
          <delta_ts>2009-03-13 16:08:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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="Mike Belshe">mbelshe</reporter>
          <assigned_to name="Mike Belshe">mbelshe</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>113494</commentid>
    <comment_count>0</comment_count>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2009-03-12 14:24:57 -0700</bug_when>
    <thetext>Custom implementations for v8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113497</commentid>
    <comment_count>1</comment_count>
      <attachid>28556</attachid>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2009-03-12 14:36:12 -0700</bug_when>
    <thetext>Created attachment 28556
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113507</commentid>
    <comment_count>2</comment_count>
      <attachid>28556</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-12 15:10:26 -0700</bug_when>
    <thetext>Comment on attachment 28556
patch

Looks good, except for very minor style nits:

&gt; +        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp: Added.
&gt; +        (WebCore::CALLBACK_FUNC_DECL):
&gt; +        * bindings/v8/custom/V8LocationCustom.cpp: Added.
&gt; +        (WebCore::navigateIfAllowed):
&gt; +        (WebCore::ACCESSOR_SETTER):
&gt; +        (WebCore::ACCESSOR_GETTER):
&gt; +        (WebCore::CALLBACK_FUNC_DECL):
&gt; +        (WebCore::INDEXED_ACCESS_CHECK):
&gt; +        (WebCore::NAMED_ACCESS_CHECK):

Remove func lines here unless there&apos;s a useful comment to go with them.

&gt; +    v8::Handle&lt;v8::Value&gt; holder = args.Holder();
&gt; +    HTMLCanvasElement* imp = V8Proxy::DOMWrapperToNode&lt;HTMLCanvasElement&gt;(holder);
&gt; +    String contextId = ToWebCoreString(args[0]);
toWebCoreString

&gt; +        return sharedTemplate-&gt;GetFunction();
&gt; +    } else {
&gt; +        return privateTemplate-&gt;GetFunction();
&gt; +    }

No braces for one-liners.

&gt; +        return sharedTemplate-&gt;GetFunction();
&gt; +    } else {
&gt; +        return privateTemplate-&gt;GetFunction();
&gt; +    }

Ditto.

&gt; +        return sharedTemplate-&gt;GetFunction();
&gt; +    } else {
&gt; +        return privateTemplate-&gt;GetFunction();
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113517</commentid>
    <comment_count>3</comment_count>
      <attachid>28562</attachid>
    <who name="Mike Belshe">mbelshe</who>
    <bug_when>2009-03-12 15:53:26 -0700</bug_when>
    <thetext>Created attachment 28562
patch with updates</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113729</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-03-13 16:08:12 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/41693.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28556</attachid>
            <date>2009-03-12 14:36:12 -0700</date>
            <delta_ts>2009-03-13 15:47:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug24561.patch</filename>
            <type>text/plain</type>
            <size>17799</size>
            <attacher name="Mike Belshe">mbelshe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTY1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDktMDMtMTIgIE1pa2UgQmVsc2hlICA8bWlrZUBiZWxzaGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBWOCBDdXN0
b20gYmluZGluZ3MgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhM
b2NhdGlvbkN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bmF2aWdhdGVJZkFs
bG93ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKFdl
YkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5D
X0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAg
ICAoV2ViQ29yZTo6TkFNRURfQUNDRVNTX0NIRUNLKToKIDIwMDktMDMtMTIgIEdyZWcgQm9sc2lu
Z2EgIDxib2xzaW5nYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29p
dmlzdG8uCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgZG9jdW1lbnRMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIGRvY3VtZW50TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNp
bmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOE5vZGUuaCIKKyNpbmNsdWRl
ICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNM
KEhUTUxDYW52YXNFbGVtZW50R2V0Q29udGV4dCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5IVE1M
Q2FudmFzRWxlbWVudC5nZXRDb250ZXh0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhv
bGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGltcCA9IFY4UHJv
eHk6OkRPTVdyYXBwZXJUb05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KGhvbGRlcik7CisgICAgU3Ry
aW5nIGNvbnRleHRJZCA9IFRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIHJlc3VsdCA9IGltcC0+Z2V0Q29udGV4dChjb250ZXh0SWQpOworICAg
IHJldHVybiBWOFByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5H
Q09OVEVYVDJELCByZXN1bHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJMb2NhdGlvbi5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVk
ZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21FdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSAiVjhMb2NhdGlvbi5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIKKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9s
bGVyLmgiCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBOb3RlcyBhYm91dCBWOC9KU0MgcG9ydGluZyBvZiB0aGlz
IGZpbGUuCisvLyBUaGlzIGNsYXNzIGlzIG5vdCB2ZXJ5IEpTLWVuZ2luZSBzcGVjaWZpYy4gIElm
IHdlIGNhbiBtb3ZlIGEgY291cGxlIG9mCisvLyBtZXRob2RzIHRvIHRoZSBzY3JpcHRDb250cm9s
bGVyLCB3ZSBzaG91bGQgYmUgYWJsZSB0byB1bmlmeSB0aGUgY29kZQorLy8gYmV0d2VlbiBKU0Mg
YW5kIFY4OgorLy8gICAgcmV0cmlldmVBY3RpdmVGcmFtZSgpICAgLSBpbiBKU0MsIHRoaXMgbmVl
ZHMgYW4gRXhlY1N0YXRlLgorLy8gICAgaXNTYWZlU2NyaXB0KCkKKy8vIFNpbmNlIEpTQyBhbmQg
VjggaGF2ZSBkaWZmZXJlbnQgbWVjaGFuaXNtcyBmb3IgZ2V0dGluZyBhdCB0aGUgQWN0aXZlRnJh
bWUsCisvLyB3ZSdyZSBqdXN0IG1ha2luZyBhbGwgdGhlc2UgY3VzdG9tIGZvciBub3cuICBUaGUg
ZnVuY3Rpb25hbGl0eSBpcyBzaW1wbGUKKy8vIGFuZCBtaXJyb3JzIEpTTG9jYXRpb25DdXN0b20u
Y3BwLgorCitzdGF0aWMgdm9pZCBuYXZpZ2F0ZUlmQWxsb3dlZChGcmFtZSogZnJhbWUsIGNvbnN0
IEtVUkwmIHVybCwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBsb2NrQmFja0ZvcndhcmRMaXN0KQor
eworICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZSog
YWN0aXZlRnJhbWUgPSBTY3JpcHRDb250cm9sbGVyOjpyZXRyaWV2ZUFjdGl2ZUZyYW1lKCk7Cisg
ICAgaWYgKCFhY3RpdmVGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF1cmwucHJv
dG9jb2xJcygiamF2YXNjcmlwdCIpIHx8IFNjcmlwdENvbnRyb2xsZXI6OmlzU2FmZVNjcmlwdChm
cmFtZSkpIHsKKyAgICAgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2ZUZyYW1lLT5zY3JpcHQo
KS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisgICAgICAgIGZyYW1lLT5sb2FkZXIoKS0+c2No
ZWR1bGVMb2NhdGlvbkNoYW5nZSh1cmwuc3RyaW5nKCksIGFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+
b3V0Z29pbmdSZWZlcnJlcigpLCBsb2NrSGlzdG9yeSwgbG9ja0JhY2tGb3J3YXJkTGlzdCwgdXNl
ckdlc3R1cmUpOworICAgIH0KK30KKworQUNDRVNTT1JfU0VUVEVSKExvY2F0aW9uSGFzaCkKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5oYXNoLl9zZXQiKTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgTG9jYXRpb24qIGltcCA9
IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9O
LCBob2xkZXIpOworICAgIFN0cmluZyBoYXNoID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKKwor
ICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7CisgICAg
U3RyaW5nIG9sZFJlZiA9IHVybC5yZWYoKTsKKworICAgIGlmIChoYXNoLnN0YXJ0c1dpdGgoIiMi
KSkKKyAgICAgICAgaGFzaCA9IGhhc2guc3Vic3RyaW5nKDEpOworICAgIGlmIChvbGRSZWYgPT0g
aGFzaCB8fCAob2xkUmVmLmlzTnVsbCgpICYmIGhhc2guaXNFbXB0eSgpKSkKKyAgICAgICAgcmV0
dXJuOworICAgIHVybC5zZXRSZWYoaGFzaCk7CisKKyAgICBuYXZpZ2F0ZUlmQWxsb3dlZChmcmFt
ZSwgdXJsLCBmYWxzZSwgZmFsc2UpOworfQorCitBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25Ib3N0
KQoreworICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLmhvc3QuX3NldCIpOworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKKyAgICBMb2NhdGlvbiog
aW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9D
QVRJT04sIGhvbGRlcik7CisgICAgU3RyaW5nIGhvc3QgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUp
OworCisgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsg
IAorICAgIFN0cmluZyBuZXdIb3N0ID0gaG9zdC5sZWZ0KGhvc3QuZmluZCgiOiIpKTsKKyAgICBT
dHJpbmcgbmV3UG9ydCA9IGhvc3Quc3Vic3RyaW5nKGhvc3QuZmluZCgiOiIpICsgMSk7CisgICAg
dXJsLnNldEhvc3QobmV3SG9zdCk7CisgICAgdXJsLnNldFBvcnQobmV3UG9ydC50b1VJbnQoKSk7
CisKKyAgICBuYXZpZ2F0ZUlmQWxsb3dlZChmcmFtZSwgdXJsLCBmYWxzZSwgZmFsc2UpOworfQor
CitBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25Ib3N0bmFtZSkKK3sKKyAgICBJTkNfU1RBVFMoIkRP
TS5Mb2NhdGlvbi5ob3N0bmFtZS5fc2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBo
b2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5OjpUb05h
dGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAg
ICBTdHJpbmcgaG9zdG5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOworCisgICAgRnJhbWUq
IGZyYW1lID0gaW1wLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsK
KworICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKKyAgICB1cmwuc2V0SG9z
dChob3N0bmFtZSk7CisKKyAgICBuYXZpZ2F0ZUlmQWxsb3dlZChmcmFtZSwgdXJsLCBmYWxzZSwg
ZmFsc2UpOworfQorCitBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25IcmVmKQoreworICAgIElOQ19T
VEFUUygiRE9NLkxvY2F0aW9uLmhyZWYuX3NldCIpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6
VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7
CisgICAgU3RyaW5nIGhyZWYgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOworCisgICAgRnJhbWUq
IGZyYW1lID0gaW1wLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsK
KworICAgIEZyYW1lKiBhY3RpdmVGcmFtZSA9IFNjcmlwdENvbnRyb2xsZXI6OnJldHJpZXZlQWN0
aXZlRnJhbWUoKTsKKyAgICBpZiAoIWFjdGl2ZUZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIWFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1l
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbmF2aWdhdGVJZkFsbG93ZWQoZnJhbWUsIGFjdGl2
ZUZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwoaHJlZiksIGZhbHNlLCBmYWxzZSk7Cit9CisK
K0FDQ0VTU09SX1NFVFRFUihMb2NhdGlvblBhdGhuYW1lKQoreworICAgIElOQ19TVEFUUygiRE9N
LkxvY2F0aW9uLnBhdGhuYW1lLl9zZXQiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhv
bGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6OlRvTmF0
aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAg
IFN0cmluZyBwYXRobmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisKKyAgICBGcmFtZSog
ZnJhbWUgPSBpbXAtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPnVybCgpOyAgCisgICAgdXJsLnNldFBh
dGgocGF0aG5hbWUpOworCisgICAgbmF2aWdhdGVJZkFsbG93ZWQoZnJhbWUsIHVybCwgZmFsc2Us
IGZhbHNlKTsKK30KKworQUNDRVNTT1JfU0VUVEVSKExvY2F0aW9uUG9ydCkKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5Mb2NhdGlvbi5wb3J0Ll9zZXQiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIp
OworICAgIFN0cmluZyBwb3J0ID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKKworICAgIEZyYW1l
KiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47
CisKKyAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7ICAKKyAgICB1cmwuc2V0
UG9ydChwb3J0LnRvVUludCgpKTsKKworICAgIG5hdmlnYXRlSWZBbGxvd2VkKGZyYW1lLCB1cmws
IGZhbHNlLCBmYWxzZSk7Cit9CisKK0FDQ0VTU09SX1NFVFRFUihMb2NhdGlvblByb3RvY29sKQor
eworICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnByb3RvY29sLl9zZXQiKTsKKyAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgTG9jYXRpb24q
IGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxP
Q0FUSU9OLCBob2xkZXIpOworICAgIFN0cmluZyBwcm90b2NvbCA9IHRvV2ViQ29yZVN0cmluZyh2
YWx1ZSk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPnVy
bCgpOworICAgIHVybC5zZXRQcm90b2NvbChwcm90b2NvbCk7CisKKyAgICBuYXZpZ2F0ZUlmQWxs
b3dlZChmcmFtZSwgdXJsLCBmYWxzZSwgZmFsc2UpOworfQorCitBQ0NFU1NPUl9TRVRURVIoTG9j
YXRpb25TZWFyY2gpCit7CisgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24uc2VhcmNoLl9zZXQi
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Cisg
ICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENs
YXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIFN0cmluZyBxdWVyeSA9IHRvV2ViQ29y
ZVN0cmluZyh2YWx1ZSk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9h
ZGVyKCktPnVybCgpOworICAgIHVybC5zZXRRdWVyeShxdWVyeSk7CisKKyAgICBuYXZpZ2F0ZUlm
QWxsb3dlZChmcmFtZSwgdXJsLCBmYWxzZSwgZmFsc2UpOworfQorCitBQ0NFU1NPUl9HRVRURVIo
TG9jYXRpb25SZWxvYWQpCit7CisgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24ucmVsb2FkLl9n
ZXQiKTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHBy
aXZhdGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3
KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlvblJlbG9hZENhbGxiYWNrLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJh
d1RlbXBsYXRlKCkpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFBy
b3h5OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGluZm8uVGhpcygp
KTsKKyAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgeworICAgICAgICAvLyBjYW4gb25seSByZWFj
aCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hvdWxkIHBhc3NlZAor
ICAgICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hlY2sgYWxyZWFkeQorICAgICAgICByZXR1cm4g
cHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOworICAgIH0KKyAgICBMb2NhdGlvbiogaW1w
ID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJ
T04sIGhvbGRlcik7CisgICAgaWYgKCFWOFByb3h5OjpDYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1l
KCksIGZhbHNlKSkgeworICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVsb2FkQ2Fs
bGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2Nh
dGlvbjo6R2V0UmF3VGVtcGxhdGUoKSkpKTsKKyAgICAgICAgcmV0dXJuIHNoYXJlZFRlbXBsYXRl
LT5HZXRGdW5jdGlvbigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBwcml2YXRlVGVt
cGxhdGUtPkdldEZ1bmN0aW9uKCk7CisgICAgfQorfQorCitBQ0NFU1NPUl9HRVRURVIoTG9jYXRp
b25SZXBsYWNlKQoreworICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlcGxhY2UuX2dldCIp
OworICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0
ZVRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6
OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVwbGFjZUNhbGxiYWNrLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1Rl
bXBsYXRlKCkpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5
OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGluZm8uVGhpcygpKTsK
KyAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgeworICAgICAgICAvLyBjYW4gb25seSByZWFjaCBo
ZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hvdWxkIHBhc3NlZAorICAg
ICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hlY2sgYWxyZWFkeQorICAgICAgICByZXR1cm4gcHJp
dmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOworICAgIH0KKyAgICBMb2NhdGlvbiogaW1wID0g
VjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04s
IGhvbGRlcik7CisgICAgaWYgKCFWOFByb3h5OjpDYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCks
IGZhbHNlKSkgeworICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVwbGFjZUNhbGxi
YWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRp
b246OkdldFJhd1RlbXBsYXRlKCkpKSk7CisgICAgICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+
R2V0RnVuY3Rpb24oKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gcHJpdmF0ZVRlbXBs
YXRlLT5HZXRGdW5jdGlvbigpOworICAgIH0KK30KKworQUNDRVNTT1JfR0VUVEVSKExvY2F0aW9u
QXNzaWduKQoreworICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLmFzc2lnbi5fZ2V0Iik7Cisg
ICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBwcml2YXRlVGVt
cGxhdGUgPQorICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlvbkFzc2lnbkNhbGxiYWNrLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1Rl
bXBsYXRlKCkpKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5
OjpMb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGluZm8uVGhpcygpKTsK
KyAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgeworICAgICAgICAvLyBjYW4gb25seSByZWFjaCBo
ZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hvdWxkIHBhc3NlZAorICAg
ICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hlY2sgYWxyZWFkeQorICAgICAgICByZXR1cm4gcHJp
dmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOworICAgIH0KKyAgICBMb2NhdGlvbiogaW1wID0g
VjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04s
IGhvbGRlcik7CisgICAgaWYgKCFWOFByb3h5OjpDYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCks
IGZhbHNlKSkgeworICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHNoYXJlZFRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxh
dGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uQXNzaWduQ2FsbGJh
Y2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2NhdGlv
bjo6R2V0UmF3VGVtcGxhdGUoKSkpKTsKKyAgICAgICAgcmV0dXJuIHNoYXJlZFRlbXBsYXRlLT5H
ZXRGdW5jdGlvbigpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBwcml2YXRlVGVtcGxh
dGUtPkdldEZ1bmN0aW9uKCk7CisgICAgfQorfQorCitDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRp
b25SZWxvYWQpCit7CisgICAgLy8gRklYTUU6IHdlIGlnbm9yZSB0aGUgImZvcmNlZ2V0IiBwYXJh
bWV0ZXIuCisKKyAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5yZWxvYWQiKTsKKyAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBMb2NhdGlvbiog
aW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9D
QVRJT04sIGhvbGRlcik7CisKKyAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIEZyYW1l
KiBhY3RpdmVGcmFtZSA9IFNjcmlwdENvbnRyb2xsZXI6OnJldHJpZXZlQWN0aXZlRnJhbWUoKTsK
KyAgICBpZiAoIWFjdGl2ZUZyYW1lKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwor
CisgICAgaWYgKCFTY3JpcHRDb250cm9sbGVyOjppc1NhZmVTY3JpcHQoZnJhbWUpKQorICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgYm9vbCB1c2VyR2VzdHVyZSA9IGFjdGl2
ZUZyYW1lLT5zY3JpcHQoKS0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CisgICAgZnJhbWUtPmxv
YWRlcigpLT5zY2hlZHVsZVJlZnJlc2godXNlckdlc3R1cmUpOworICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvblJlcGxhY2UpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24ucmVwbGFjZSIpOworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOFBy
b3h5OjpUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9s
ZGVyKTsKKyAgICBTdHJpbmcgdXJsID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOworCisgICAg
RnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBTY3JpcHRD
b250cm9sbGVyOjpyZXRyaWV2ZUFjdGl2ZUZyYW1lKCk7CisgICAgaWYgKCFhY3RpdmVGcmFtZSkK
KyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIGlmICghYWN0aXZlRnJhbWUt
PmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24oZnJhbWUpKQorICAgICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOworCisgICAgbmF2aWdhdGVJZkFsbG93ZWQoZnJhbWUsIGFjdGl2ZUZy
YW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKSwgdHJ1ZSwgdHJ1ZSk7CisgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uQXNzaWdu
KQoreworICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLmFzc2lnbiIpOworICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIExvY2F0aW9uKiBpbXAg
PSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElP
TiwgaG9sZGVyKTsKKyAgICBTdHJpbmcgdXJsID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwor
CisgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBT
Y3JpcHRDb250cm9sbGVyOjpyZXRyaWV2ZUFjdGl2ZUZyYW1lKCk7CisgICAgaWYgKCFhY3RpdmVG
cmFtZSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIGlmICghYWN0aXZl
RnJhbWUtPmxvYWRlcigpLT5zaG91bGRBbGxvd05hdmlnYXRpb24oZnJhbWUpKQorICAgICAgICBy
ZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisgICAgbmF2aWdhdGVJZkFsbG93ZWQoZnJhbWUsIGFj
dGl2ZUZyYW1lLT5sb2FkZXIoKS0+Y29tcGxldGVVUkwodXJsKSwgZmFsc2UsIGZhbHNlKTsKKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRp
b25WYWx1ZU9mKQoreworICAgIC8vIEp1c3QgcmV0dXJuIHRoZSB0aGlzIG9iamVjdCB0aGUgd2F5
IHRoZSBub3JtYWwgdmFsdWVPZiBmdW5jdGlvbgorICAgIC8vIG9uIHRoZSBPYmplY3QgcHJvdG90
eXBlIHdvdWxkLiAgVGhlIHZhbHVlT2YgZnVuY3Rpb24gaXMgb25seQorICAgIC8vIGFkZGVkIHRv
IG1ha2Ugc3VyZSB0aGF0IGl0IGNhbm5vdCBiZSBvdmVyd3JpdHRlbiBvbiBsb2NhdGlvbgorICAg
IC8vIG9iamVjdHMsIHNpbmNlIHRoYXQgd291bGQgcHJvdmlkZSBhIGhvb2sgdG8gY2hhbmdlIHRo
ZSBzdHJpbmcKKyAgICAvLyBjb252ZXJzaW9uIGJlaGF2aW9yIG9mIGxvY2F0aW9uIG9iamVjdHMu
CisgICAgcmV0dXJuIGFyZ3MuVGhpcygpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRp
b25Ub1N0cmluZykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi50b1N0cmluZyIpOwor
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIExv
Y2F0aW9uKiBpbXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0lu
ZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBpZiAoIVY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1l
KGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cisg
ICAgU3RyaW5nIHJlc3VsdCA9IGltcC0+aHJlZigpOworICAgIHJldHVybiB2OFN0cmluZyhyZXN1
bHQpOworfQorCitJTkRFWEVEX0FDQ0VTU19DSEVDSyhMb2NhdGlvbikKK3sKKyAgICBBU1NFUlQo
VjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4
OjpMT0NBVElPTik7CisgICAgLy8gT25seSBhbGxvdyBzYW1lIG9yaWdpbiBhY2Nlc3MKKyAgICBM
b2NhdGlvbiogaW1wID0gIFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob3N0KTsKKyAgICByZXR1cm4gVjhQcm94eTo6Q2FuQWNjZXNzRnJh
bWUoaW1wLT5mcmFtZSgpLCBmYWxzZSk7Cit9CisKK05BTUVEX0FDQ0VTU19DSEVDSyhMb2NhdGlv
bikKK3sKKyAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUo
KSkgPT0gVjhDbGFzc0luZGV4OjpMT0NBVElPTik7CisgICAgLy8gT25seSBhbGxvdyBzYW1lIG9y
aWdpbiBhY2Nlc3MKKyAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmplY3Q8
TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvc3QpOworICAgIHJldHVybiBWOFBy
b3h5OjpDYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIGZhbHNlKTsKK30KKworfSAgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28562</attachid>
            <date>2009-03-12 15:53:26 -0700</date>
            <delta_ts>2009-03-13 15:47:52 -0700</delta_ts>
            <desc>patch with updates</desc>
            <filename>bug24561.patch</filename>
            <type>text/plain</type>
            <size>17497</size>
            <attacher name="Mike Belshe">mbelshe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MTY1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAgQEAKKzIwMDktMDMtMTIgIE1pa2UgQmVsc2hlICA8bWlrZUBiZWxzaGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBWOCBDdXN0
b20gYmluZGluZ3MgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcDogQWRkZWQuCiAyMDA5LTAzLTEyICBH
cmVnIEJvbHNpbmdhICA8Ym9sc2luZ2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEFudHRpIEtvaXZpc3RvLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIGRvY3VtZW50TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBkb2N1bWVudExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorCisjaW5jbHVkZSAiVjhCaW5k
aW5nLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhOb2RlLmgi
CisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBTExCQUNL
X0ZVTkNfREVDTChIVE1MQ2FudmFzRWxlbWVudEdldENvbnRleHQpCit7CisgICAgSU5DX1NUQVRT
KCJET00uSFRNTENhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCIpOworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOworICAgIEhUTUxDYW52YXNFbGVtZW50KiBp
bXAgPSBWOFByb3h5OjpET01XcmFwcGVyVG9Ob2RlPEhUTUxDYW52YXNFbGVtZW50Pihob2xkZXIp
OworICAgIFN0cmluZyBjb250ZXh0SWQgPSBUb1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiByZXN1bHQgPSBpbXAtPmdldENvbnRleHQoY29udGV4
dElkKTsKKyAgICByZXR1cm4gVjhQcm94eTo6VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkNBTlZB
U1JFTkRFUklOR0NPTlRFWFQyRCwgcmVzdWx0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3Rv
bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0
aW9uQ3VzdG9tLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzODcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTG9jYXRpb24uaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tRXZlbnRM
aXN0ZW5lci5oIgorI2luY2x1ZGUgIlY4TG9jYXRpb24uaCIKKyNpbmNsdWRlICJWOFByb3h5Lmgi
CisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiU2Ny
aXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gTm90ZXMgYWJvdXQgVjgvSlNDIHBvcnRp
bmcgb2YgdGhpcyBmaWxlLgorLy8gVGhpcyBjbGFzcyBpcyBub3QgdmVyeSBKUy1lbmdpbmUgc3Bl
Y2lmaWMuICBJZiB3ZSBjYW4gbW92ZSBhIGNvdXBsZSBvZgorLy8gbWV0aG9kcyB0byB0aGUgc2Ny
aXB0Q29udHJvbGxlciwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gdW5pZnkgdGhlIGNvZGUKKy8vIGJl
dHdlZW4gSlNDIGFuZCBWODoKKy8vICAgIHJldHJpZXZlQWN0aXZlRnJhbWUoKSAgIC0gaW4gSlND
LCB0aGlzIG5lZWRzIGFuIEV4ZWNTdGF0ZS4KKy8vICAgIGlzU2FmZVNjcmlwdCgpCisvLyBTaW5j
ZSBKU0MgYW5kIFY4IGhhdmUgZGlmZmVyZW50IG1lY2hhbmlzbXMgZm9yIGdldHRpbmcgYXQgdGhl
IEFjdGl2ZUZyYW1lLAorLy8gd2UncmUganVzdCBtYWtpbmcgYWxsIHRoZXNlIGN1c3RvbSBmb3Ig
bm93LiAgVGhlIGZ1bmN0aW9uYWxpdHkgaXMgc2ltcGxlCisvLyBhbmQgbWlycm9ycyBKU0xvY2F0
aW9uQ3VzdG9tLmNwcC4KKworc3RhdGljIHZvaWQgbmF2aWdhdGVJZkFsbG93ZWQoRnJhbWUqIGZy
YW1lLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgbG9ja0JhY2tGb3J3
YXJkTGlzdCkKK3sKKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gU2NyaXB0Q29udHJvbGxlcjo6cmV0cmlldmVBY3RpdmVG
cmFtZSgpOworICAgIGlmICghYWN0aXZlRnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghdXJsLnByb3RvY29sSXMoImphdmFzY3JpcHQiKSB8fCBTY3JpcHRDb250cm9sbGVyOjppc1Nh
ZmVTY3JpcHQoZnJhbWUpKSB7CisgICAgICAgIGJvb2wgdXNlckdlc3R1cmUgPSBhY3RpdmVGcmFt
ZS0+c2NyaXB0KCktPnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgICAgICBmcmFtZS0+bG9h
ZGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UodXJsLnN0cmluZygpLCBhY3RpdmVGcmFtZS0+
bG9hZGVyKCktPm91dGdvaW5nUmVmZXJyZXIoKSwgbG9ja0hpc3RvcnksIGxvY2tCYWNrRm9yd2Fy
ZExpc3QsIHVzZXJHZXN0dXJlKTsKKyAgICB9Cit9CisKK0FDQ0VTU09SX1NFVFRFUihMb2NhdGlv
bkhhc2gpCit7CisgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24uaGFzaC5fc2V0Iik7CisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgIExvY2F0
aW9uKiBpbXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4
OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBTdHJpbmcgaGFzaCA9IHRvV2ViQ29yZVN0cmluZyh2
YWx1ZSk7CisKKyAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPnVy
bCgpOworICAgIFN0cmluZyBvbGRSZWYgPSB1cmwucmVmKCk7CisKKyAgICBpZiAoaGFzaC5zdGFy
dHNXaXRoKCIjIikpCisgICAgICAgIGhhc2ggPSBoYXNoLnN1YnN0cmluZygxKTsKKyAgICBpZiAo
b2xkUmVmID09IGhhc2ggfHwgKG9sZFJlZi5pc051bGwoKSAmJiBoYXNoLmlzRW1wdHkoKSkpCisg
ICAgICAgIHJldHVybjsKKyAgICB1cmwuc2V0UmVmKGhhc2gpOworCisgICAgbmF2aWdhdGVJZkFs
bG93ZWQoZnJhbWUsIHVybCwgZmFsc2UsIGZhbHNlKTsKK30KKworQUNDRVNTT1JfU0VUVEVSKExv
Y2F0aW9uSG9zdCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5ob3N0Ll9zZXQiKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAg
TG9jYXRpb24qIGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIFN0cmluZyBob3N0ID0gdG9XZWJDb3JlU3Ry
aW5nKHZhbHVlKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIo
KS0+dXJsKCk7ICAKKyAgICBTdHJpbmcgbmV3SG9zdCA9IGhvc3QubGVmdChob3N0LmZpbmQoIjoi
KSk7CisgICAgU3RyaW5nIG5ld1BvcnQgPSBob3N0LnN1YnN0cmluZyhob3N0LmZpbmQoIjoiKSAr
IDEpOworICAgIHVybC5zZXRIb3N0KG5ld0hvc3QpOworICAgIHVybC5zZXRQb3J0KG5ld1BvcnQu
dG9VSW50KCkpOworCisgICAgbmF2aWdhdGVJZkFsbG93ZWQoZnJhbWUsIHVybCwgZmFsc2UsIGZh
bHNlKTsKK30KKworQUNDRVNTT1JfU0VUVEVSKExvY2F0aW9uSG9zdG5hbWUpCit7CisgICAgSU5D
X1NUQVRTKCJET00uTG9jYXRpb24uaG9zdG5hbWUuX3NldCIpOworICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhQ
cm94eTo6VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhv
bGRlcik7CisgICAgU3RyaW5nIGhvc3RuYW1lID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKKwor
ICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBLVVJMIHVybCA9IGZyYW1lLT5sb2FkZXIoKS0+dXJsKCk7CisgICAg
dXJsLnNldEhvc3QoaG9zdG5hbWUpOworCisgICAgbmF2aWdhdGVJZkFsbG93ZWQoZnJhbWUsIHVy
bCwgZmFsc2UsIGZhbHNlKTsKK30KKworQUNDRVNTT1JfU0VUVEVSKExvY2F0aW9uSHJlZikKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5ocmVmLl9zZXQiKTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgTG9jYXRpb24qIGltcCA9
IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9O
LCBob2xkZXIpOworICAgIFN0cmluZyBocmVmID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKKwor
ICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBTY3JpcHRDb250cm9sbGVyOjpy
ZXRyaWV2ZUFjdGl2ZUZyYW1lKCk7CisgICAgaWYgKCFhY3RpdmVGcmFtZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFhY3RpdmVGcmFtZS0+bG9hZGVyKCktPnNob3VsZEFsbG93TmF2aWdh
dGlvbihmcmFtZSkpCisgICAgICAgIHJldHVybjsKKworICAgIG5hdmlnYXRlSWZBbGxvd2VkKGZy
YW1lLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPmNvbXBsZXRlVVJMKGhyZWYpLCBmYWxzZSwgZmFs
c2UpOworfQorCitBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25QYXRobmFtZSkKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5Mb2NhdGlvbi5wYXRobmFtZS5fc2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOFBy
b3h5OjpUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9s
ZGVyKTsKKyAgICBTdHJpbmcgcGF0aG5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOworCisg
ICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAg
IHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmxvYWRlcigpLT51cmwoKTsgIAorICAg
IHVybC5zZXRQYXRoKHBhdGhuYW1lKTsKKworICAgIG5hdmlnYXRlSWZBbGxvd2VkKGZyYW1lLCB1
cmwsIGZhbHNlLCBmYWxzZSk7Cit9CisKK0FDQ0VTU09SX1NFVFRFUihMb2NhdGlvblBvcnQpCit7
CisgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24ucG9ydC5fc2V0Iik7CisgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgIExvY2F0aW9uKiBpbXAg
PSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElP
TiwgaG9sZGVyKTsKKyAgICBTdHJpbmcgcG9ydCA9IHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CisK
KyAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgS1VSTCB1cmwgPSBmcmFtZS0+bG9hZGVyKCktPnVybCgpOyAgCisg
ICAgdXJsLnNldFBvcnQocG9ydC50b1VJbnQoKSk7CisKKyAgICBuYXZpZ2F0ZUlmQWxsb3dlZChm
cmFtZSwgdXJsLCBmYWxzZSwgZmFsc2UpOworfQorCitBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25Q
cm90b2NvbCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5wcm90b2NvbC5fc2V0Iik7
CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAg
IExvY2F0aW9uKiBpbXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFz
c0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBTdHJpbmcgcHJvdG9jb2wgPSB0b1dlYkNv
cmVTdHJpbmcodmFsdWUpOworCisgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmxv
YWRlcigpLT51cmwoKTsKKyAgICB1cmwuc2V0UHJvdG9jb2wocHJvdG9jb2wpOworCisgICAgbmF2
aWdhdGVJZkFsbG93ZWQoZnJhbWUsIHVybCwgZmFsc2UsIGZhbHNlKTsKK30KKworQUNDRVNTT1Jf
U0VUVEVSKExvY2F0aW9uU2VhcmNoKQoreworICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnNl
YXJjaC5fc2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhv
bGRlcigpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5OjpUb05hdGl2ZU9iamVjdDxMb2Nh
dGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBTdHJpbmcgcXVlcnkg
PSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOworCisgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0g
ZnJhbWUtPmxvYWRlcigpLT51cmwoKTsKKyAgICB1cmwuc2V0UXVlcnkocXVlcnkpOworCisgICAg
bmF2aWdhdGVJZkFsbG93ZWQoZnJhbWUsIHVybCwgZmFsc2UsIGZhbHNlKTsKK30KKworQUNDRVNT
T1JfR0VUVEVSKExvY2F0aW9uUmVsb2FkKQoreworICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9u
LnJlbG9hZC5fZ2V0Iik7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBwcml2YXRlVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KHY4TG9jYXRpb25SZWxvYWRDYWxs
YmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0
aW9uOjpHZXRSYXdUZW1wbGF0ZSgpKSkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9s
ZGVyID0gVjhQcm94eTo6TG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBp
bmZvLlRoaXMoKSk7CisgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gY2Fu
IG9ubHkgcmVhY2ggaGVyZSBieSAnb2JqZWN0Ll9fcHJvdG9fXy5mdW5jJywgYW5kIGl0IHNob3Vs
ZCBwYXNzZWQKKyAgICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKKyAgICAg
ICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKKyAgICB9CisgICAgTG9j
YXRpb24qIGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5k
ZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIGlmICghVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUo
aW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKKyAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4
OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlv
blJlbG9hZENhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6
TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKCkpKSk7CisgICAgICAgIHJldHVybiBzaGFy
ZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIHBy
aXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKK30KKworQUNDRVNTT1JfR0VUVEVSKExvY2F0
aW9uUmVwbGFjZSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5yZXBsYWNlLl9nZXQi
KTsKKyAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHByaXZh
dGVUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4
OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlvblJlcGxhY2VDYWxsYmFjaywgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdU
ZW1wbGF0ZSgpKSkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94
eTo6TG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBpbmZvLlRoaXMoKSk7
CisgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gY2FuIG9ubHkgcmVhY2gg
aGVyZSBieSAnb2JqZWN0Ll9fcHJvdG9fXy5mdW5jJywgYW5kIGl0IHNob3VsZCBwYXNzZWQKKyAg
ICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKKyAgICAgICAgcmV0dXJuIHBy
aXZhdGVUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKKyAgICB9CisgICAgTG9jYXRpb24qIGltcCA9
IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9O
LCBob2xkZXIpOworICAgIGlmICghVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgp
LCBmYWxzZSkpIHsKKyAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlvblJlcGxhY2VDYWxs
YmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0
aW9uOjpHZXRSYXdUZW1wbGF0ZSgpKSkpOworICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUt
PkdldEZ1bmN0aW9uKCk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBwcml2YXRlVGVtcGxh
dGUtPkdldEZ1bmN0aW9uKCk7Cit9CisKK0FDQ0VTU09SX0dFVFRFUihMb2NhdGlvbkFzc2lnbikK
K3sKKyAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5hc3NpZ24uX2dldCIpOworICAgIHN0YXRp
YyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlID0K
KyAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rp
b25UZW1wbGF0ZTo6TmV3KHY4TG9jYXRpb25Bc3NpZ25DYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZSgp
KSkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6TG9va3Vw
RE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBpbmZvLlRoaXMoKSk7CisgICAgaWYg
KGhvbGRlci5Jc0VtcHR5KCkpIHsKKyAgICAgICAgLy8gY2FuIG9ubHkgcmVhY2ggaGVyZSBieSAn
b2JqZWN0Ll9fcHJvdG9fXy5mdW5jJywgYW5kIGl0IHNob3VsZCBwYXNzZWQKKyAgICAgICAgLy8g
ZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKKyAgICAgICAgcmV0dXJuIHByaXZhdGVUZW1w
bGF0ZS0+R2V0RnVuY3Rpb24oKTsKKyAgICB9CisgICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6
OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIp
OworICAgIGlmICghVjhQcm94eTo6Q2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkp
IHsKKyAgICAgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBz
aGFyZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3
KHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcodjhMb2NhdGlvbkFzc2lnbkNhbGxiYWNrLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJh
d1RlbXBsYXRlKCkpKSk7CisgICAgICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rp
b24oKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIHByaXZhdGVUZW1wbGF0ZS0+R2V0RnVu
Y3Rpb24oKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uUmVsb2FkKQoreworICAg
IC8vIEZJWE1FOiB3ZSBpZ25vcmUgdGhlICJmb3JjZWdldCIgcGFyYW1ldGVyLgorCisgICAgSU5D
X1NUQVRTKCJET00uTG9jYXRpb24ucmVsb2FkIik7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6OlRv
TmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwor
CisgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBGcmFtZSogYWN0aXZlRnJhbWUgPSBT
Y3JpcHRDb250cm9sbGVyOjpyZXRyaWV2ZUFjdGl2ZUZyYW1lKCk7CisgICAgaWYgKCFhY3RpdmVG
cmFtZSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKworICAgIGlmICghU2NyaXB0
Q29udHJvbGxlcjo6aXNTYWZlU2NyaXB0KGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKKworICAgIGJvb2wgdXNlckdlc3R1cmUgPSBhY3RpdmVGcmFtZS0+c2NyaXB0KCkt
PnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOworICAgIGZyYW1lLT5sb2FkZXIoKS0+c2NoZWR1bGVS
ZWZyZXNoKHVzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitD
QUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25SZXBsYWNlKQoreworICAgIElOQ19TVEFUUygiRE9N
LkxvY2F0aW9uLnJlcGxhY2UiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0g
YXJncy5Ib2xkZXIoKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6VG9OYXRpdmVPYmpl
Y3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgU3RyaW5n
IHVybCA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKworICAgIEZyYW1lKiBmcmFtZSA9IGlt
cC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOworCisgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gU2NyaXB0Q29udHJvbGxlcjo6cmV0cmll
dmVBY3RpdmVGcmFtZSgpOworICAgIGlmICghYWN0aXZlRnJhbWUpCisgICAgICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CisKKyAgICBpZiAoIWFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+c2hvdWxk
QWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
KworICAgIG5hdmlnYXRlSWZBbGxvd2VkKGZyYW1lLCBhY3RpdmVGcmFtZS0+bG9hZGVyKCktPmNv
bXBsZXRlVVJMKHVybCksIHRydWUsIHRydWUpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChMb2NhdGlvbkFzc2lnbikKK3sKKyAgICBJTkNfU1RB
VFMoIkRPTS5Mb2NhdGlvbi5hc3NpZ24iKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9s
ZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6VG9OYXRp
dmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAg
U3RyaW5nIHVybCA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKworICAgIEZyYW1lKiBmcmFt
ZSA9IGltcC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOworCisgICAgRnJhbWUqIGFjdGl2ZUZyYW1lID0gU2NyaXB0Q29udHJvbGxlcjo6
cmV0cmlldmVBY3RpdmVGcmFtZSgpOworICAgIGlmICghYWN0aXZlRnJhbWUpCisgICAgICAgIHJl
dHVybiB2ODo6VW5kZWZpbmVkKCk7CisKKyAgICBpZiAoIWFjdGl2ZUZyYW1lLT5sb2FkZXIoKS0+
c2hvdWxkQWxsb3dOYXZpZ2F0aW9uKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmlu
ZWQoKTsKKworICAgIG5hdmlnYXRlSWZBbGxvd2VkKGZyYW1lLCBhY3RpdmVGcmFtZS0+bG9hZGVy
KCktPmNvbXBsZXRlVVJMKHVybCksIGZhbHNlLCBmYWxzZSk7CisgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uVmFsdWVPZikKK3sKKyAg
ICAvLyBKdXN0IHJldHVybiB0aGUgdGhpcyBvYmplY3QgdGhlIHdheSB0aGUgbm9ybWFsIHZhbHVl
T2YgZnVuY3Rpb24KKyAgICAvLyBvbiB0aGUgT2JqZWN0IHByb3RvdHlwZSB3b3VsZC4gIFRoZSB2
YWx1ZU9mIGZ1bmN0aW9uIGlzIG9ubHkKKyAgICAvLyBhZGRlZCB0byBtYWtlIHN1cmUgdGhhdCBp
dCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4gb24gbG9jYXRpb24KKyAgICAvLyBvYmplY3RzLCBzaW5j
ZSB0aGF0IHdvdWxkIHByb3ZpZGUgYSBob29rIHRvIGNoYW5nZSB0aGUgc3RyaW5nCisgICAgLy8g
Y29udmVyc2lvbiBiZWhhdmlvciBvZiBsb2NhdGlvbiBvYmplY3RzLgorICAgIHJldHVybiBhcmdz
LlRoaXMoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKExvY2F0aW9uVG9TdHJpbmcpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24udG9TdHJpbmciKTsKKyAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhQ
cm94eTo6VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhv
bGRlcik7CisgICAgaWYgKCFWOFByb3h5OjpDYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRy
dWUpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIFN0cmluZyByZXN1bHQg
PSBpbXAtPmhyZWYoKTsKKyAgICByZXR1cm4gdjhTdHJpbmcocmVzdWx0KTsKK30KKworSU5ERVhF
RF9BQ0NFU1NfQ0hFQ0soTG9jYXRpb24pCit7CisgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJv
bUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRleDo6TE9DQVRJT04pOworICAg
IC8vIE9ubHkgYWxsb3cgc2FtZSBvcmlnaW4gYWNjZXNzCisgICAgTG9jYXRpb24qIGltcCA9ICBW
OFByb3h5OjpUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwg
aG9zdCk7CisgICAgcmV0dXJuIFY4UHJveHk6OkNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwg
ZmFsc2UpOworfQorCitOQU1FRF9BQ0NFU1NfQ0hFQ0soTG9jYXRpb24pCit7CisgICAgQVNTRVJU
KFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09IFY4Q2xhc3NJbmRl
eDo6TE9DQVRJT04pOworICAgIC8vIE9ubHkgYWxsb3cgc2FtZSBvcmlnaW4gYWNjZXNzCisgICAg
TG9jYXRpb24qIGltcCA9IFY4UHJveHk6OlRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob3N0KTsKKyAgICByZXR1cm4gVjhQcm94eTo6Q2FuQWNjZXNzRnJh
bWUoaW1wLT5mcmFtZSgpLCBmYWxzZSk7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="14047"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>