<?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>94571</bug_id>
          
          <creation_ts>2012-08-20 21:50:44 -0700</creation_ts>
          <short_desc>[V8] Move String related code in V8Binding to a separate file</short_desc>
          <delta_ts>2012-08-21 21:42:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>94605</dependson>
          <blocked>93095</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>dcarney</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>700454</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-20 21:50:44 -0700</bug_when>
    <thetext>We can move V8Parameter, V8ParameterBase and String related code in V8Binding to a separate file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700465</commentid>
    <comment_count>1</comment_count>
      <attachid>159618</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-20 22:03:35 -0700</bug_when>
    <thetext>Created attachment 159618
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700468</commentid>
    <comment_count>2</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-20 22:07:21 -0700</bug_when>
    <thetext>I&apos;ll do the following things in follow-up patches:

- Remove V8ParameterBase. It&apos;s redundant. Only V8Parameter will work.
- Rename V8Parameter to V8GenericString, because it&apos;s an adapter class for String and AtomicString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700497</commentid>
    <comment_count>3</comment_count>
      <attachid>159618</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-20 23:13:32 -0700</bug_when>
    <thetext>Comment on attachment 159618
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=159618&amp;action=review

&gt; Source/WebCore/bindings/v8/V8StringResource.cpp:35
&gt; +

I&apos;d remove this blank line.

&gt; Source/WebCore/bindings/v8/V8StringResource.cpp:52
&gt; +        String result = String::createUninitialized(length, buffer);

Does this really use int as the type for length?

&gt; Source/WebCore/bindings/v8/V8StringResource.cpp:75
&gt; +        String tmp = String::createUninitialized(length, buffer);

tmp -&gt; string ?

&gt; Source/WebCore/bindings/v8/V8StringResource.cpp:88
&gt; +    int length = v8String-&gt;Length();

Oh, V8 uses int for the length of a string?

&gt; Source/WebCore/bindings/v8/V8StringResource.cpp:91
&gt; +        return StringImpl::empty();

Is this ok for background threads?  Typically we can&apos;t use these sorts of functions if we&apos;re not on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700570</commentid>
    <comment_count>4</comment_count>
      <attachid>159640</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 03:21:05 -0700</bug_when>
    <thetext>Created attachment 159640
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700572</commentid>
    <comment_count>5</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 03:23:15 -0700</bug_when>
    <thetext>Committed r126150: &lt;http://trac.webkit.org/changeset/126150&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700574</commentid>
    <comment_count>6</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 03:24:01 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 159618 [details])
&gt; &gt; Source/WebCore/bindings/v8/V8StringResource.cpp:35
&gt; &gt; +
&gt; 
&gt; I&apos;d remove this blank line.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8StringResource.cpp:75
&gt; &gt; +        String tmp = String::createUninitialized(length, buffer);
&gt; 
&gt; tmp -&gt; string ?
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8StringResource.cpp:91
&gt; &gt; +        return StringImpl::empty();
&gt; 
&gt; Is this ok for background threads?  Typically we can&apos;t use these sorts of functions if we&apos;re not on the main thread.

Done. Replaced with String().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700783</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-21 08:20:01 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 94605</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701540</commentid>
    <comment_count>8</comment_count>
      <attachid>159852</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 20:47:23 -0700</bug_when>
    <thetext>Created attachment 159852
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701543</commentid>
    <comment_count>9</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-08-21 20:49:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; &gt; Source/WebCore/bindings/v8/V8StringResource.cpp:91
&gt; &gt; &gt; +        return StringImpl::empty();
&gt; &gt; 
&gt; &gt; Is this ok for background threads?  Typically we can&apos;t use these sorts of functions if we&apos;re not on the main thread.
&gt; 
&gt; Replaced with String().

This was the cause of the crashes.

I replaced it with String(&quot;&quot;). Given that this is not a fast path of v8String(), it would be OK to create String(&quot;&quot;) every time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701559</commentid>
    <comment_count>10</comment_count>
      <attachid>159852</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-21 21:42:01 -0700</bug_when>
    <thetext>Comment on attachment 159852
patch for landing

Clearing flags on attachment: 159852

Committed r126262: &lt;http://trac.webkit.org/changeset/126262&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701560</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-21 21:42:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159618</attachid>
            <date>2012-08-20 22:03:35 -0700</date>
            <delta_ts>2012-08-21 03:24:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94571-20120821140255.patch</filename>
            <type>text/plain</type>
            <size>22175</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgzNDUzMGFhYWZjZjNm
YjMyNTk0YmI3YTVmNGVmOTAzNDJlMjk2Ny4uNjNlZjZjZTk5MWUwZmQ3MzEyYzk1ZTRiMzFiYmIw
YmNkZGI5M2NiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTIwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE1vdmUgU3Ry
aW5nIHJlbGF0ZWQgY29kZSBpbiBWOEJpbmRpbmcgdG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDU3MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbW92ZXMg
VjhQYXJhbWV0ZXIsIFY4UGFyYW1ldGVyQmFzZSBhbmQgU3RyaW5nIHJlbGF0ZWQgY29kZQorICAg
ICAgICBpbiBWOEJpbmRpbmcgdG8gYSBzZXBhcmF0ZSBmaWxlLgorCisgICAgICAgIE5vIHRlc3Rz
LiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBVc2VWOC5jbWFrZToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9WOFN0cmluZ1Jlc291cmNlLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvVjhT
dHJpbmdSZXNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorCiAyMDEyLTA4LTIw
ICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBTaGFk
b3dSb290LmNsb25lTm9kZSgpIG11c3QgYWx3YXlzIHRocm93IGEgREFUQV9DTE9ORV9FUlIgZXhj
ZXB0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9Vc2VWOC5jbWFrZQppbmRleCAyOWQ3ZTU4NzI4ZGI5MDc0ZDIyMmJhNTBjYmNiMDk4
YTViMGM3YmYyLi5jM2FlMTY2MTQwMzFkNTU3ZTA1OGY4ZjRmNzE4MmM0NmM3NDVmYTg2IDEwMDc1
NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9V
c2VWOC5jbWFrZQpAQCAtMTQ1LDYgKzE0NSw3IEBAIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAogICAg
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAKICAgICBi
aW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAorICAgIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFN0cmluZ1Jlc291cmNlLmNwcAogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxl
U2hlZXRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RD
dXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDk1MmI4MDAxZGM5MDM0NDBmZTM5ODE0NzA2
YjQ3OTUzN2Y2MzljYmQuLjQ2YWM0NDBlY2Y2MzViMWU1M2ZmOTA3ODY4ODAwNDY2NDA5ZTQ0NTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTIyODgsNiArMjI4OCw4IEBACiAgICAgICAgICAgICAnYmlu
ZGluZ3MvdjgvVjhQcm94eS5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFJlY3Vyc2lv
blNjb3BlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhSZWN1cnNpb25TY29wZS5o
JywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFN0cmluZ1Jlc291cmNlLmNwcCcsCisgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhTdHJpbmdSZXNvdXJjZS5oJywKICAgICAgICAgICAgICdi
aW5kaW5ncy92OC9WOFRocm93RXhjZXB0aW9uLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhUaHJvd0V4Y2VwdGlvbi5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFV0aWxp
dGllcy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKaW5kZXgg
OWU3OWYzOWI3NDAzMDEyYzEwZWM2OTY2ODQ5YjBlNzA4N2NjZTg3Yi4uZGU5MGRlZWQ4OTM2MzYw
ZTI1YjNiOTViNzBhMDAwMGJlZDZhOTIyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OEJpbmRpbmcuY3BwCkBAIC0yMDMsMTE4ICsyMDMsNiBAQCB1aW50MzJfdCB0b1VJbnQzMih2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIGJvb2wmIG9rKQogICAgIHJldHVybiB1aW50VmFsdWUt
PlZhbHVlKCk7CiB9CiAKLXRlbXBsYXRlIDxjbGFzcyBTPiBzdHJ1Y3QgU3RyaW5nVHJhaXRzCi17
Ci0gICAgc3RhdGljIFMgZnJvbVN0cmluZ1Jlc291cmNlKFdlYkNvcmVTdHJpbmdSZXNvdXJjZSog
cmVzb3VyY2UpOwotCi0gICAgc3RhdGljIFMgZnJvbVY4U3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0
cmluZz4gdjhTdHJpbmcsIGludCBsZW5ndGgpOwotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IFN0
cmluZ1RyYWl0czxTdHJpbmc+Ci17Ci0gICAgc3RhdGljIFN0cmluZyBmcm9tU3RyaW5nUmVzb3Vy
Y2UoV2ViQ29yZVN0cmluZ1Jlc291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biByZXNvdXJjZS0+d2ViY29yZVN0cmluZygpOwotICAgIH0KLQotICAgIHN0YXRpYyBTdHJpbmcg
ZnJvbVY4U3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcsIGludCBsZW5ndGgp
Ci0gICAgewotICAgICAgICBBU1NFUlQodjhTdHJpbmctPkxlbmd0aCgpID09IGxlbmd0aCk7Ci0g
ICAgICAgIC8vIE5PVEU6IGFzIG9mIG5vdywgU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50KSBwZXJm
b3JtcyBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQKLSAgICAgICAgLy8gYW55d2F5LCBzbyBu
byBuZWVkIHRvIG9wdGltaXplIGxpa2Ugd2UgZG8gZm9yIEF0b21pY1N0cmluZyBiZWxvdy4KLSAg
ICAgICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICAgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZzo6Y3Jl
YXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIHY4U3RyaW5nLT5Xcml0
ZShyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oYnVmZmVyKSwgMCwgbGVuZ3RoKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU3RyaW5n
VHJhaXRzPEF0b21pY1N0cmluZz4KLXsKLSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZyb21TdHJp
bmdSZXNvdXJjZShXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHJlc291cmNlLT5hdG9taWNTdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
QXRvbWljU3RyaW5nIGZyb21WOFN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5n
LCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHY4U3RyaW5nLT5MZW5ndGgoKSA9
PSBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgY29uc3QgaW50IGlubGluZUJ1ZmZlclNpemUgPSAx
NjsKLSAgICAgICAgaWYgKGxlbmd0aCA8PSBpbmxpbmVCdWZmZXJTaXplKSB7Ci0gICAgICAgICAg
ICBVQ2hhciBpbmxpbmVCdWZmZXJbaW5saW5lQnVmZmVyU2l6ZV07Ci0gICAgICAgICAgICB2OFN0
cmluZy0+V3JpdGUocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGlubGluZUJ1ZmZlciksIDAs
IGxlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKGlubGluZUJ1ZmZlciwg
bGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICBVQ2hhciogYnVmZmVyOwotICAgICAgICBTdHJp
bmcgdG1wID0gU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAg
ICAgICAgdjhTdHJpbmctPldyaXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihidWZmZXIp
LCAwLCBsZW5ndGgpOwotICAgICAgICByZXR1cm4gQXRvbWljU3RyaW5nKHRtcCk7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmluZ1R5cGU+Ci1TdHJpbmdUeXBlIHY4U3RyaW5n
VG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcsIEV4dGVybmFs
TW9kZSBleHRlcm5hbCkKLXsKLSAgICBXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHN0cmluZ1Jlc291
cmNlID0gV2ViQ29yZVN0cmluZ1Jlc291cmNlOjp0b1N0cmluZ1Jlc291cmNlKHY4U3RyaW5nKTsK
LSAgICBpZiAoc3RyaW5nUmVzb3VyY2UpCi0gICAgICAgIHJldHVybiBTdHJpbmdUcmFpdHM8U3Ry
aW5nVHlwZT46OmZyb21TdHJpbmdSZXNvdXJjZShzdHJpbmdSZXNvdXJjZSk7Ci0KLSAgICBpbnQg
bGVuZ3RoID0gdjhTdHJpbmctPkxlbmd0aCgpOwotICAgIGlmICghbGVuZ3RoKSB7Ci0gICAgICAg
IC8vIEF2b2lkIHRyeWluZyB0byBtb3JwaCBlbXB0eSBzdHJpbmdzLCBhcyB0aGV5IGRvIG5vdCBo
YXZlIGVub3VnaCByb29tIHRvIGNvbnRhaW4gdGhlIGV4dGVybmFsIHJlZmVyZW5jZS4KLSAgICAg
ICAgcmV0dXJuIFN0cmluZ0ltcGw6OmVtcHR5KCk7Ci0gICAgfQotCi0gICAgU3RyaW5nVHlwZSBy
ZXN1bHQoU3RyaW5nVHJhaXRzPFN0cmluZ1R5cGU+Ojpmcm9tVjhTdHJpbmcodjhTdHJpbmcsIGxl
bmd0aCkpOwotCi0gICAgaWYgKGV4dGVybmFsID09IEV4dGVybmFsaXplICYmIHY4U3RyaW5nLT5D
YW5NYWtlRXh0ZXJuYWwoKSkgewotICAgICAgICBzdHJpbmdSZXNvdXJjZSA9IG5ldyBXZWJDb3Jl
U3RyaW5nUmVzb3VyY2UocmVzdWx0KTsKLSAgICAgICAgaWYgKCF2OFN0cmluZy0+TWFrZUV4dGVy
bmFsKHN0cmluZ1Jlc291cmNlKSkgewotICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBhIGZhaWx1
cmUgZGVsZXRlIHRoZSBleHRlcm5hbCByZXNvdXJjZSBhcyBpdCB3YXMgbm90IHVzZWQuCi0gICAg
ICAgICAgICBkZWxldGUgc3RyaW5nUmVzb3VyY2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLSAgICAKLS8vIEV4cGxpY2l0bHkgaW5zdGFudGlhdGUgdGhlIGFib3Zl
IHRlbXBsYXRlIHdpdGggdGhlIGV4cGVjdGVkIHBhcmFtZXRlcml6YXRpb25zLAotLy8gdG8gZW5z
dXJlIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgdGhlIGNvZGU7IG90aGVyd2lzZSBsaW5rIGVycm9y
cyBjYW4gcmVzdWx0IGluIEdDQyA0LjQuCi10ZW1wbGF0ZSBTdHJpbmcgdjhTdHJpbmdUb1dlYkNv
cmVTdHJpbmc8U3RyaW5nPih2ODo6SGFuZGxlPHY4OjpTdHJpbmc+LCBFeHRlcm5hbE1vZGUpOwot
dGVtcGxhdGUgQXRvbWljU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPEF0b21pY1N0cmlu
Zz4odjg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgRXh0ZXJuYWxNb2RlKTsKLQotLy8gRmFzdCBidXQg
bm9uIHRocmVhZC1zYWZlIHZlcnNpb24uCi1TdHJpbmcgaW50MzJUb1dlYkNvcmVTdHJpbmdGYXN0
KGludCB2YWx1ZSkKLXsKLSAgICAvLyBDYWNoaW5nIG9mIHNtYWxsIHN0cmluZ3MgYmVsb3cgaXMg
bm90IHRocmVhZCBzYWZlOiBuZXdseSBjb25zdHJ1Y3RlZCBBdG9taWNTdHJpbmcKLSAgICAvLyBh
cmUgbm90IHNhZmVseSBwdWJsaXNoZWQuCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQot
ICAgIC8vIE1vc3QgbnVtYmVycyB1c2VkIGFyZSA8PSAxMDAuIEV2ZW4gaWYgdGhleSBhcmVuJ3Qg
dXNlZCB0aGVyZSdzIHZlcnkgbGl0dGxlIGNvc3QgaW4gdXNpbmcgdGhlIHNwYWNlLgotICAgIGNv
bnN0IGludCBrTG93TnVtYmVycyA9IDEwMDsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFZlY3Rv
cjxBdG9taWNTdHJpbmc+LCBsb3dOdW1iZXJzLCAoa0xvd051bWJlcnMgKyAxKSk7Ci0gICAgU3Ry
aW5nIHdlYkNvcmVTdHJpbmc7Ci0gICAgaWYgKDAgPD0gdmFsdWUgJiYgdmFsdWUgPD0ga0xvd051
bWJlcnMpIHsKLSAgICAgICAgd2ViQ29yZVN0cmluZyA9IGxvd051bWJlcnNbdmFsdWVdOwotICAg
ICAgICBpZiAoIXdlYkNvcmVTdHJpbmcpIHsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyB2YWx1
ZVN0cmluZyA9IEF0b21pY1N0cmluZyhTdHJpbmc6Om51bWJlcih2YWx1ZSkpOwotICAgICAgICAg
ICAgbG93TnVtYmVyc1t2YWx1ZV0gPSB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIHdlYkNvcmVT
dHJpbmcgPSB2YWx1ZVN0cmluZzsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICB3ZWJD
b3JlU3RyaW5nID0gU3RyaW5nOjpudW1iZXIodmFsdWUpOwotICAgIHJldHVybiB3ZWJDb3JlU3Ry
aW5nOwotfQotCi1TdHJpbmcgaW50MzJUb1dlYkNvcmVTdHJpbmcoaW50IHZhbHVlKQotewotICAg
IC8vIElmIHdlIGFyZSBvbiB0aGUgbWFpbiB0aHJlYWQgKHRoaXMgc2hvdWxkIGFsd2F5cyB0cnVl
IGZvciBub24td29ya2VycyksIGNhbGwgdGhlIGZhc3RlciBvbmUuCi0gICAgaWYgKGlzTWFpblRo
cmVhZCgpKQotICAgICAgICByZXR1cm4gaW50MzJUb1dlYkNvcmVTdHJpbmdGYXN0KHZhbHVlKTsK
LSAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIodmFsdWUpOwotfQotCiB2ODo6UGVyc2lzdGVudDx2
ODo6RnVuY3Rpb25UZW1wbGF0ZT4gY3JlYXRlUmF3VGVtcGxhdGUoKQogewogICAgIHY4OjpIYW5k
bGVTY29wZSBzY29wZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
QmluZGluZy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKaW5kZXgg
MzQxOWViNjBmOTA2YmE0MWE0ODg0MmE4YzM2NWE1OTYyZTVjYThkOS4uZjFlNGYyZTJhZWI2MjQw
MGViNzYwNGRjYmUzOTU3ZWY1YzdkMWU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhCaW5kaW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhC
aW5kaW5nLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJWOE9iamVjdENvbnN0cnVjdG9y
LmgiCiAjaW5jbHVkZSAiVjhQZXJJc29sYXRlRGF0YS5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIK
KyNpbmNsdWRlICJWOFN0cmluZ1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiVjhUaHJvd0V4Y2VwdGlv
bi5oIgogI2luY2x1ZGUgIlY4VmFsdWVDYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgpAQCAtNzYsMTQgKzc3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1
cm4gaXNvbGF0ZSA/IHY4OjpOdWxsKGlzb2xhdGUpIDogdjg6Ok51bGwoKTsKICAgICB9CiAKLSAg
ICBlbnVtIEV4dGVybmFsTW9kZSB7Ci0gICAgICAgIEV4dGVybmFsaXplLAotICAgICAgICBEb05v
dEV4dGVybmFsaXplCi0gICAgfTsKLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmdUeXBl
PgotICAgIFN0cmluZ1R5cGUgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6
U3RyaW5nPiwgRXh0ZXJuYWxNb2RlKTsKLQogICAgIC8vIENvbnZlcnQgdjggdHlwZXMgdG8gYSBX
VEY6OlN0cmluZy4gSWYgdGhlIFY4IHN0cmluZyBpcyBub3QgYWxyZWFkeQogICAgIC8vIGFuIGV4
dGVybmFsIHN0cmluZyB0aGVuIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gZXh0ZXJuYWwgc3Ry
aW5nIGF0IHRoaXMKICAgICAvLyBwb2ludCB0byBhdm9pZCByZXBlYXRlZCBjb252ZXJzaW9ucy4K
QEAgLTM2NCw4ICszNTcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgdjg6OlBlcnNpc3Rl
bnQ8djg6OlN0cmluZz4gZ2V0VG9TdHJpbmdOYW1lKCk7CiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRvU3RyaW5nVGVtcGxhdGUoKTsKIAotICAgIFN0cmluZyBp
bnQzMlRvV2ViQ29yZVN0cmluZyhpbnQgdmFsdWUpOwotCiAgICAgUGFzc1JlZlB0cjxET01TdHJp
bmdMaXN0PiB0b0RPTVN0cmluZ0xpc3Qodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKIAogICAgIC8v
IFJldHVybnMgdGhlIHdpbmRvdyBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIGEgY29udGV4dC4KQEAg
LTM4MCwxMDIgKzM3MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHZvaWQgY3Jhc2hJ
ZlY4SXNEZWFkKCk7CiAKLSAgICBjbGFzcyBWOFBhcmFtZXRlckJhc2UgewotICAgIHB1YmxpYzoK
LSAgICAgICAgb3BlcmF0b3IgU3RyaW5nKCkgeyByZXR1cm4gdG9TdHJpbmc8U3RyaW5nPigpOyB9
Ci0gICAgICAgIG9wZXJhdG9yIEF0b21pY1N0cmluZygpIHsgcmV0dXJuIHRvU3RyaW5nPEF0b21p
Y1N0cmluZz4oKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBWOFBhcmFtZXRlckJhc2Uo
djg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0KSA6IG1fdjhPYmplY3Qob2JqZWN0KSwgbV9tb2Rl
KEV4dGVybmFsaXplKSwgbV9zdHJpbmcoKSB7IH0KLQotICAgICAgICBib29sIHByZXBhcmVCYXNl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fdjhPYmplY3QuSXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBpZiAoTElLRUxZKG1fdjhP
YmplY3QtPklzU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgICAgICBpZiAoTElLRUxZKG1fdjhPYmplY3QtPklzSW50MzIoKSkpIHsKLSAgICAgICAgICAg
ICAgICBzZXRTdHJpbmcoaW50MzJUb1dlYkNvcmVTdHJpbmcobV92OE9iamVjdC0+SW50MzJWYWx1
ZSgpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG1fbW9kZSA9IERvTm90RXh0ZXJuYWxpemU7Ci0gICAgICAgICAgICB2ODo6VHJ5
Q2F0Y2ggYmxvY2s7Ci0gICAgICAgICAgICBtX3Y4T2JqZWN0ID0gbV92OE9iamVjdC0+VG9TdHJp
bmcoKTsKLSAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24g
aXMgdGhyb3duIGFzIHBhcnQgb2YgaW52b2tpbmcgdG9TdHJpbmcgb24gdGhlIG9iamVjdC4KLSAg
ICAgICAgICAgIGlmIChibG9jay5IYXNDYXVnaHQoKSkgewotICAgICAgICAgICAgICAgIGJsb2Nr
LlJlVGhyb3coKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IG9iamVjdCgpIHsgcmV0dXJuIG1fdjhPYmplY3Q7IH0KLQotICAgICAgICB2
b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9zdHJpbmcgPSBzdHJpbmc7Ci0gICAgICAgICAgICBtX3Y4T2JqZWN0LkNsZWFyKCk7IC8v
IFRvIHNpZ25hbCB0aGF0IFN0cmluZyBpcyByZWFkeS4KLSAgICAgICAgfQotCi0gICAgIHByaXZh
dGU6Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fdjhPYmplY3Q7Ci0gICAgICAgIEV4
dGVybmFsTW9kZSBtX21vZGU7Ci0gICAgICAgIFN0cmluZyBtX3N0cmluZzsKLQotICAgICAgICB0
ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nVHlwZT4KLSAgICAgICAgU3RyaW5nVHlwZSB0b1N0cmluZygp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChMSUtFTFkoIW1fdjhPYmplY3QuSXNFbXB0eSgp
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmc8U3RyaW5n
VHlwZT4obV92OE9iamVjdC5Bczx2ODo6U3RyaW5nPigpLCBtX21vZGUpOwotCi0gICAgICAgICAg
ICByZXR1cm4gU3RyaW5nVHlwZShtX3N0cmluZyk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAg
Ly8gVjhQYXJhbWV0ZXIgaXMgYW4gYWRhcHRlciBjbGFzcyB0aGF0IGNvbnZlcnRzIFY4IHZhbHVl
cyB0byBTdHJpbmdzCi0gICAgLy8gb3IgQXRvbWljU3RyaW5ncyBhcyBhcHByb3ByaWF0ZSwgdXNp
bmcgbXVsdGlwbGUgdHlwZWNhc3Qgb3BlcmF0b3JzLgotICAgIGVudW0gVjhQYXJhbWV0ZXJNb2Rl
IHsKLSAgICAgICAgRGVmYXVsdE1vZGUsCi0gICAgICAgIFdpdGhOdWxsQ2hlY2ssCi0gICAgICAg
IFdpdGhVbmRlZmluZWRPck51bGxDaGVjawotICAgIH07Ci0gICAgdGVtcGxhdGUgPFY4UGFyYW1l
dGVyTW9kZSBNT0RFID0gRGVmYXVsdE1vZGU+Ci0gICAgY2xhc3MgVjhQYXJhbWV0ZXI6IHB1Ymxp
YyBWOFBhcmFtZXRlckJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgVjhQYXJhbWV0ZXIodjg6
OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0KSA6IFY4UGFyYW1ldGVyQmFzZShvYmplY3QpIHsgfQot
ICAgICAgICBWOFBhcmFtZXRlcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QsIGJvb2wpIDog
VjhQYXJhbWV0ZXJCYXNlKG9iamVjdCkgeyBwcmVwYXJlKCk7IH0KLQotICAgICAgICBib29sIHBy
ZXBhcmUoKTsKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8PiBpbmxpbmUgYm9vbCBWOFBhcmFtZXRl
cjxEZWZhdWx0TW9kZT46OnByZXBhcmUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFY4UGFyYW1l
dGVyQmFzZTo6cHJlcGFyZUJhc2UoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTw+IGlubGluZSBi
b29sIFY4UGFyYW1ldGVyPFdpdGhOdWxsQ2hlY2s+OjpwcmVwYXJlKCkKLSAgICB7Ci0gICAgICAg
IGlmIChvYmplY3QoKS5Jc0VtcHR5KCkgfHwgb2JqZWN0KCktPklzTnVsbCgpKSB7Ci0gICAgICAg
ICAgICBzZXRTdHJpbmcoU3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gVjhQYXJhbWV0ZXJCYXNlOjpwcmVwYXJlQmFzZSgpOwot
ICAgIH0KLQotICAgIHRlbXBsYXRlPD4gaW5saW5lIGJvb2wgVjhQYXJhbWV0ZXI8V2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrPjo6cHJlcGFyZSgpCi0gICAgewotICAgICAgICBpZiAob2JqZWN0KCku
SXNFbXB0eSgpIHx8IG9iamVjdCgpLT5Jc051bGwoKSB8fCBvYmplY3QoKS0+SXNVbmRlZmluZWQo
KSkgewotICAgICAgICAgICAgc2V0U3RyaW5nKFN0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFY4UGFyYW1ldGVyQmFzZTo6cHJl
cGFyZUJhc2UoKTsKLSAgICB9Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IFY4QmluZGluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFN0
cmluZ1Jlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U3RyaW5nUmVz
b3VyY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczYThiY2ZjZGViNzgwMDZlNGVkOTc3NTVjZmJhNDE3MDY2
ZGM3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFN0
cmluZ1Jlc291cmNlLmNwcApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhTdHJpbmdSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAi
VjhCaW5kaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGUgPGNsYXNzIFM+
IHN0cnVjdCBTdHJpbmdUcmFpdHMgeworICAgIHN0YXRpYyBTIGZyb21TdHJpbmdSZXNvdXJjZShX
ZWJDb3JlU3RyaW5nUmVzb3VyY2UqKTsKKworICAgIHN0YXRpYyBTIGZyb21WOFN0cmluZyh2ODo6
SGFuZGxlPHY4OjpTdHJpbmc+LCBpbnQpOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFN0cmlu
Z1RyYWl0czxTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGZyb21TdHJpbmdSZXNvdXJjZShX
ZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJl
c291cmNlLT53ZWJjb3JlU3RyaW5nKCk7CisgICAgfQorCisgICAgc3RhdGljIFN0cmluZyBmcm9t
VjhTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgaW50IGxlbmd0aCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCh2OFN0cmluZy0+TGVuZ3RoKCkgPT0gbGVuZ3RoKTsKKyAgICAg
ICAgLy8gTk9URTogYXMgb2Ygbm93LCBTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQpIHBlcmZvcm1z
IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZAorICAgICAgICAvLyBhbnl3YXksIHNvIG5vIG5l
ZWQgdG8gb3B0aW1pemUgbGlrZSB3ZSBkbyBmb3IgQXRvbWljU3RyaW5nIGJlbG93LgorICAgICAg
ICBVQ2hhciogYnVmZmVyOworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKKyAgICAgICAgdjhTdHJpbmctPldyaXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihidWZmZXIpLCAwLCBsZW5ndGgpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBTdHJpbmdUcmFp
dHM8QXRvbWljU3RyaW5nPiB7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBmcm9tU3RyaW5nUmVz
b3VyY2UoV2ViQ29yZVN0cmluZ1Jlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiByZXNvdXJjZS0+YXRvbWljU3RyaW5nKCk7CisgICAgfQorCisgICAgc3RhdGljIEF0b21p
Y1N0cmluZyBmcm9tVjhTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgaW50
IGxlbmd0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2OFN0cmluZy0+TGVuZ3RoKCkgPT0gbGVu
Z3RoKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBpbmxpbmVCdWZmZXJTaXplID0gMTY7Cisg
ICAgICAgIGlmIChsZW5ndGggPD0gaW5saW5lQnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgVUNo
YXIgaW5saW5lQnVmZmVyW2lubGluZUJ1ZmZlclNpemVdOworICAgICAgICAgICAgdjhTdHJpbmct
PldyaXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihpbmxpbmVCdWZmZXIpLCAwLCBsZW5n
dGgpOworICAgICAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZyhpbmxpbmVCdWZmZXIsIGxlbmd0
aCk7CisgICAgICAgIH0KKyAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKKyAgICAgICAgU3RyaW5nIHRt
cCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgICAg
IHY4U3RyaW5nLT5Xcml0ZShyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oYnVmZmVyKSwgMCwg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZyh0bXApOworICAgIH0KK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmdUeXBlPgorU3RyaW5nVHlwZSB2OFN0cmluZ1RvV2Vi
Q29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nLCBFeHRlcm5hbE1vZGUg
ZXh0ZXJuYWwpCit7CisgICAgV2ViQ29yZVN0cmluZ1Jlc291cmNlKiBzdHJpbmdSZXNvdXJjZSA9
IFdlYkNvcmVTdHJpbmdSZXNvdXJjZTo6dG9TdHJpbmdSZXNvdXJjZSh2OFN0cmluZyk7CisgICAg
aWYgKHN0cmluZ1Jlc291cmNlKQorICAgICAgICByZXR1cm4gU3RyaW5nVHJhaXRzPFN0cmluZ1R5
cGU+Ojpmcm9tU3RyaW5nUmVzb3VyY2Uoc3RyaW5nUmVzb3VyY2UpOworCisgICAgaW50IGxlbmd0
aCA9IHY4U3RyaW5nLT5MZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAvLyBB
dm9pZCB0cnlpbmcgdG8gbW9ycGggZW1wdHkgc3RyaW5ncywgYXMgdGhleSBkbyBub3QgaGF2ZSBl
bm91Z2ggcm9vbSB0byBjb250YWluIHRoZSBleHRlcm5hbCByZWZlcmVuY2UuCisgICAgICAgIHJl
dHVybiBTdHJpbmdJbXBsOjplbXB0eSgpOworICAgIH0KKworICAgIFN0cmluZ1R5cGUgcmVzdWx0
KFN0cmluZ1RyYWl0czxTdHJpbmdUeXBlPjo6ZnJvbVY4U3RyaW5nKHY4U3RyaW5nLCBsZW5ndGgp
KTsKKworICAgIGlmIChleHRlcm5hbCA9PSBFeHRlcm5hbGl6ZSAmJiB2OFN0cmluZy0+Q2FuTWFr
ZUV4dGVybmFsKCkpIHsKKyAgICAgICAgc3RyaW5nUmVzb3VyY2UgPSBuZXcgV2ViQ29yZVN0cmlu
Z1Jlc291cmNlKHJlc3VsdCk7CisgICAgICAgIGlmICghdjhTdHJpbmctPk1ha2VFeHRlcm5hbChz
dHJpbmdSZXNvdXJjZSkpIHsKKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBmYWlsdXJlIGRl
bGV0ZSB0aGUgZXh0ZXJuYWwgcmVzb3VyY2UgYXMgaXQgd2FzIG5vdCB1c2VkLgorICAgICAgICAg
ICAgZGVsZXRlIHN0cmluZ1Jlc291cmNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisgICAgCisvLyBFeHBsaWNpdGx5IGluc3RhbnRpYXRlIHRoZSBhYm92ZSB0ZW1w
bGF0ZSB3aXRoIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJpemF0aW9ucywKKy8vIHRvIGVuc3VyZSB0
aGUgY29tcGlsZXIgZ2VuZXJhdGVzIHRoZSBjb2RlOyBvdGhlcndpc2UgbGluayBlcnJvcnMgY2Fu
IHJlc3VsdCBpbiBHQ0MgNC40LgordGVtcGxhdGUgU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3Ry
aW5nPFN0cmluZz4odjg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgRXh0ZXJuYWxNb2RlKTsKK3RlbXBs
YXRlIEF0b21pY1N0cmluZyB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxBdG9taWNTdHJpbmc+KHY4
OjpIYW5kbGU8djg6OlN0cmluZz4sIEV4dGVybmFsTW9kZSk7CisKKy8vIEZhc3QgYnV0IG5vbiB0
aHJlYWQtc2FmZSB2ZXJzaW9uLgorU3RyaW5nIGludDMyVG9XZWJDb3JlU3RyaW5nRmFzdChpbnQg
dmFsdWUpCit7CisgICAgLy8gQ2FjaGluZyBvZiBzbWFsbCBzdHJpbmdzIGJlbG93IGlzIG5vdCB0
aHJlYWQgc2FmZTogbmV3bHkgY29uc3RydWN0ZWQgQXRvbWljU3RyaW5nCisgICAgLy8gYXJlIG5v
dCBzYWZlbHkgcHVibGlzaGVkLgorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICAv
LyBNb3N0IG51bWJlcnMgdXNlZCBhcmUgPD0gMTAwLiBFdmVuIGlmIHRoZXkgYXJlbid0IHVzZWQg
dGhlcmUncyB2ZXJ5IGxpdHRsZSBjb3N0IGluIHVzaW5nIHRoZSBzcGFjZS4KKyAgICBjb25zdCBp
bnQga0xvd051bWJlcnMgPSAxMDA7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8QXRv
bWljU3RyaW5nPiwgbG93TnVtYmVycywgKGtMb3dOdW1iZXJzICsgMSkpOworICAgIFN0cmluZyB3
ZWJDb3JlU3RyaW5nOworICAgIGlmICgwIDw9IHZhbHVlICYmIHZhbHVlIDw9IGtMb3dOdW1iZXJz
KSB7CisgICAgICAgIHdlYkNvcmVTdHJpbmcgPSBsb3dOdW1iZXJzW3ZhbHVlXTsKKyAgICAgICAg
aWYgKCF3ZWJDb3JlU3RyaW5nKSB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWVTdHJp
bmcgPSBBdG9taWNTdHJpbmcoU3RyaW5nOjpudW1iZXIodmFsdWUpKTsKKyAgICAgICAgICAgIGxv
d051bWJlcnNbdmFsdWVdID0gdmFsdWVTdHJpbmc7CisgICAgICAgICAgICB3ZWJDb3JlU3RyaW5n
ID0gdmFsdWVTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgd2ViQ29yZVN0
cmluZyA9IFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKKyAgICByZXR1cm4gd2ViQ29yZVN0cmluZzsK
K30KKworU3RyaW5nIGludDMyVG9XZWJDb3JlU3RyaW5nKGludCB2YWx1ZSkKK3sKKyAgICAvLyBJ
ZiB3ZSBhcmUgb24gdGhlIG1haW4gdGhyZWFkICh0aGlzIHNob3VsZCBhbHdheXMgdHJ1ZSBmb3Ig
bm9uLXdvcmtlcnMpLCBjYWxsIHRoZSBmYXN0ZXIgb25lLgorICAgIGlmIChpc01haW5UaHJlYWQo
KSkKKyAgICAgICAgcmV0dXJuIGludDMyVG9XZWJDb3JlU3RyaW5nRmFzdCh2YWx1ZSk7CisgICAg
cmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhTdHJpbmdSZXNvdXJj
ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhTdHJpbmdSZXNvdXJjZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU1Y2RiYTZlMmMwMDExZmUwNTBhOWFjMGVjMjIwY2VjZjdkZTEyOTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFN0cmluZ1Jlc291cmNlLmgK
QEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOFN0cmluZ1Jlc291cmNl
X2gKKyNkZWZpbmUgVjhTdHJpbmdSZXNvdXJjZV9oCisKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRXh0ZXJuYWxNb2RlIHsKKyAgICBF
eHRlcm5hbGl6ZSwKKyAgICBEb05vdEV4dGVybmFsaXplCit9OworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgU3RyaW5nVHlwZT4KK1N0cmluZ1R5cGUgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmcodjg6Okhh
bmRsZTx2ODo6U3RyaW5nPiwgRXh0ZXJuYWxNb2RlKTsKK1N0cmluZyBpbnQzMlRvV2ViQ29yZVN0
cmluZyhpbnQgdmFsdWUpOworCitjbGFzcyBWOFBhcmFtZXRlckJhc2UgeworcHVibGljOgorICAg
IG9wZXJhdG9yIFN0cmluZygpIHsgcmV0dXJuIHRvU3RyaW5nPFN0cmluZz4oKTsgfQorICAgIG9w
ZXJhdG9yIEF0b21pY1N0cmluZygpIHsgcmV0dXJuIHRvU3RyaW5nPEF0b21pY1N0cmluZz4oKTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgVjhQYXJhbWV0ZXJCYXNlKHY4OjpMb2NhbDx2ODo6VmFsdWU+
IG9iamVjdCkgOiBtX3Y4T2JqZWN0KG9iamVjdCksIG1fbW9kZShFeHRlcm5hbGl6ZSksIG1fc3Ry
aW5nKCkgeyB9CisKKyAgICBib29sIHByZXBhcmVCYXNlKCkKKyAgICB7CisgICAgICAgIGlmICht
X3Y4T2JqZWN0LklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IGlmIChMSUtFTFkobV92OE9iamVjdC0+SXNTdHJpbmcoKSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgICAgICBpZiAoTElLRUxZKG1fdjhPYmplY3QtPklzSW50MzIoKSkpIHsKKyAg
ICAgICAgICAgIHNldFN0cmluZyhpbnQzMlRvV2ViQ29yZVN0cmluZyhtX3Y4T2JqZWN0LT5JbnQz
MlZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgbV9tb2RlID0gRG9Ob3RFeHRlcm5hbGl6ZTsKKyAgICAgICAgdjg6OlRyeUNhdGNoIGJsb2Nr
OworICAgICAgICBtX3Y4T2JqZWN0ID0gbV92OE9iamVjdC0+VG9TdHJpbmcoKTsKKyAgICAgICAg
Ly8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gYXMgcGFydCBv
ZiBpbnZva2luZyB0b1N0cmluZyBvbiB0aGUgb2JqZWN0LgorICAgICAgICBpZiAoYmxvY2suSGFz
Q2F1Z2h0KCkpIHsKKyAgICAgICAgICAgIGJsb2NrLlJlVGhyb3coKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICB2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QoKSB7IHJldHVybiBtX3Y4T2JqZWN0OyB9CisK
KyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKKyAgICB7CisgICAgICAg
IG1fc3RyaW5nID0gc3RyaW5nOworICAgICAgICBtX3Y4T2JqZWN0LkNsZWFyKCk7IC8vIFRvIHNp
Z25hbCB0aGF0IFN0cmluZyBpcyByZWFkeS4KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gbV92OE9iamVjdDsKKyAgICBFeHRlcm5hbE1vZGUgbV9tb2RlOworICAg
IFN0cmluZyBtX3N0cmluZzsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBTdHJpbmdUeXBlPgorICAg
IFN0cmluZ1R5cGUgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWSghbV92OE9i
amVjdC5Jc0VtcHR5KCkpKQorICAgICAgICAgICAgcmV0dXJuIHY4U3RyaW5nVG9XZWJDb3JlU3Ry
aW5nPFN0cmluZ1R5cGU+KG1fdjhPYmplY3QuQXM8djg6OlN0cmluZz4oKSwgbV9tb2RlKTsKKwor
ICAgICAgICByZXR1cm4gU3RyaW5nVHlwZShtX3N0cmluZyk7CisgICAgfQorfTsKKworLy8gVjhQ
YXJhbWV0ZXIgaXMgYW4gYWRhcHRlciBjbGFzcyB0aGF0IGNvbnZlcnRzIFY4IHZhbHVlcyB0byBT
dHJpbmdzCisvLyBvciBBdG9taWNTdHJpbmdzIGFzIGFwcHJvcHJpYXRlLCB1c2luZyBtdWx0aXBs
ZSB0eXBlY2FzdCBvcGVyYXRvcnMuCitlbnVtIFY4UGFyYW1ldGVyTW9kZSB7CisgICAgRGVmYXVs
dE1vZGUsCisgICAgV2l0aE51bGxDaGVjaywKKyAgICBXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2sK
K307CisKK3RlbXBsYXRlIDxWOFBhcmFtZXRlck1vZGUgTU9ERSA9IERlZmF1bHRNb2RlPgorY2xh
c3MgVjhQYXJhbWV0ZXI6IHB1YmxpYyBWOFBhcmFtZXRlckJhc2UgeworcHVibGljOgorICAgIFY4
UGFyYW1ldGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCkgOiBWOFBhcmFtZXRlckJhc2Uo
b2JqZWN0KSB7IH0KKyAgICBWOFBhcmFtZXRlcih2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3Qs
IGJvb2wpIDogVjhQYXJhbWV0ZXJCYXNlKG9iamVjdCkgeyBwcmVwYXJlKCk7IH0KKworICAgIGJv
b2wgcHJlcGFyZSgpOworfTsKKwordGVtcGxhdGU8PiBpbmxpbmUgYm9vbCBWOFBhcmFtZXRlcjxE
ZWZhdWx0TW9kZT46OnByZXBhcmUoKQoreworICAgIHJldHVybiBWOFBhcmFtZXRlckJhc2U6OnBy
ZXBhcmVCYXNlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGJvb2wgVjhQYXJhbWV0ZXI8V2l0
aE51bGxDaGVjaz46OnByZXBhcmUoKQoreworICAgIGlmIChvYmplY3QoKS5Jc0VtcHR5KCkgfHwg
b2JqZWN0KCktPklzTnVsbCgpKSB7CisgICAgICAgIHNldFN0cmluZyhTdHJpbmcoKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBWOFBhcmFtZXRlckJhc2U6OnBy
ZXBhcmVCYXNlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGJvb2wgVjhQYXJhbWV0ZXI8V2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrPjo6cHJlcGFyZSgpCit7CisgICAgaWYgKG9iamVjdCgpLklz
RW1wdHkoKSB8fCBvYmplY3QoKS0+SXNOdWxsKCkgfHwgb2JqZWN0KCktPklzVW5kZWZpbmVkKCkp
IHsKKyAgICAgICAgc2V0U3RyaW5nKFN0cmluZygpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIFY4UGFyYW1ldGVyQmFzZTo6cHJlcGFyZUJhc2UoKTsKK30KKyAg
ICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4U3RyaW5nUmVzb3VyY2Vf
aAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159640</attachid>
            <date>2012-08-21 03:21:05 -0700</date>
            <delta_ts>2012-08-21 03:21:05 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-94571-20120821192025.patch</filename>
            <type>text/plain</type>
            <size>22164</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTgzNDUzMGFhYWZjZjNm
YjMyNTk0YmI3YTVmNGVmOTAzNDJlMjk2Ny4uZjE3OGNmMjdlYThkYzIxNzVlYjVlNmU4ODg3MGZh
NTQxZGVjMjFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTIwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE1vdmUgU3Ry
aW5nIHJlbGF0ZWQgY29kZSBpbiBWOEJpbmRpbmcgdG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDU3MQorCisgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBWOFBh
cmFtZXRlciwgVjhQYXJhbWV0ZXJCYXNlIGFuZCBTdHJpbmcgcmVsYXRlZCBjb2RlCisgICAgICAg
IGluIFY4QmluZGluZyB0byBhIHNlcGFyYXRlIGZpbGUuCisKKyAgICAgICAgTm8gdGVzdHMuIE5v
IGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFVzZVY4LmNtYWtlOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
U3RyaW5nUmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFN0cmlu
Z1Jlc291cmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDgtMjAgIFNo
aW55YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNoYWRvd1Jv
b3QuY2xvbmVOb2RlKCkgbXVzdCBhbHdheXMgdGhyb3cgYSBEQVRBX0NMT05FX0VSUiBleGNlcHRp
b24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZSBiL1NvdXJjZS9XZWJD
b3JlL1VzZVY4LmNtYWtlCmluZGV4IDI5ZDdlNTg3MjhkYjkwNzRkMjIyYmE1MGNiY2IwOThhNWIw
YzdiZjIuLmMzYWUxNjYxNDAzMWQ1NTdlMDU4ZjhmNGY3MTgyYzQ2Yzc0NWZhODYgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1VzZVY4
LmNtYWtlCkBAIC0xNDUsNiArMTQ1LDcgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCiAgICAgYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAogICAgIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCisgICAgYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U3RyaW5nUmVzb3VyY2UuY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVl
dEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3Rv
bS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOTUyYjgwMDFkYzkwMzQ0MGZlMzk4MTQ3MDZiNDc5
NTM3ZjYzOWNiZC4uNDZhYzQ0MGVjZjYzNWIxZTUzZmY5MDc4Njg4MDA0NjY0MDllNDQ1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtMjI4OCw2ICsyMjg4LDggQEAKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9WOFByb3h5LmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4UmVjdXJzaW9uU2Nv
cGUuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9WOFJlY3Vyc2lvblNjb3BlLmgnLAor
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4U3RyaW5nUmVzb3VyY2UuY3BwJywKKyAgICAgICAg
ICAgICdiaW5kaW5ncy92OC9WOFN0cmluZ1Jlc291cmNlLmgnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L1Y4VGhyb3dFeGNlcHRpb24uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9W
OFRocm93RXhjZXB0aW9uLmgnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4VXRpbGl0aWVz
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcAppbmRleCA5ZTc5
ZjM5Yjc0MDMwMTJjMTBlYzY5NjY4NDliMGU3MDg3Y2NlODdiLi5kZTkwZGVlZDg5MzYzNjBlMjVi
M2I5NWI3MGEwMDAwYmVkNmE5MjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEJpbmRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Qmlu
ZGluZy5jcHAKQEAgLTIwMywxMTggKzIwMyw2IEBAIHVpbnQzMl90IHRvVUludDMyKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSwgYm9vbCYgb2spCiAgICAgcmV0dXJuIHVpbnRWYWx1ZS0+VmFs
dWUoKTsKIH0KIAotdGVtcGxhdGUgPGNsYXNzIFM+IHN0cnVjdCBTdHJpbmdUcmFpdHMKLXsKLSAg
ICBzdGF0aWMgUyBmcm9tU3RyaW5nUmVzb3VyY2UoV2ViQ29yZVN0cmluZ1Jlc291cmNlKiByZXNv
dXJjZSk7Ci0KLSAgICBzdGF0aWMgUyBmcm9tVjhTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5n
PiB2OFN0cmluZywgaW50IGxlbmd0aCk7Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgU3RyaW5n
VHJhaXRzPFN0cmluZz4KLXsKLSAgICBzdGF0aWMgU3RyaW5nIGZyb21TdHJpbmdSZXNvdXJjZShX
ZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
c291cmNlLT53ZWJjb3JlU3RyaW5nKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0cmluZyBmcm9t
VjhTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgaW50IGxlbmd0aCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCh2OFN0cmluZy0+TGVuZ3RoKCkgPT0gbGVuZ3RoKTsKLSAgICAg
ICAgLy8gTk9URTogYXMgb2Ygbm93LCBTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQpIHBlcmZvcm1z
IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZAotICAgICAgICAvLyBhbnl3YXksIHNvIG5vIG5l
ZWQgdG8gb3B0aW1pemUgbGlrZSB3ZSBkbyBmb3IgQXRvbWljU3RyaW5nIGJlbG93LgotICAgICAg
ICBVQ2hhciogYnVmZmVyOwotICAgICAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVV
bmluaXRpYWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKLSAgICAgICAgdjhTdHJpbmctPldyaXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihidWZmZXIpLCAwLCBsZW5ndGgpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBTdHJpbmdUcmFp
dHM8QXRvbWljU3RyaW5nPgotewotICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZnJvbVN0cmluZ1Jl
c291cmNlKFdlYkNvcmVTdHJpbmdSZXNvdXJjZSogcmVzb3VyY2UpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcmVzb3VyY2UtPmF0b21pY1N0cmluZygpOwotICAgIH0KLQotICAgIHN0YXRpYyBBdG9t
aWNTdHJpbmcgZnJvbVY4U3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcsIGlu
dCBsZW5ndGgpCi0gICAgewotICAgICAgICBBU1NFUlQodjhTdHJpbmctPkxlbmd0aCgpID09IGxl
bmd0aCk7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgaW5saW5lQnVmZmVyU2l6ZSA9IDE2Owot
ICAgICAgICBpZiAobGVuZ3RoIDw9IGlubGluZUJ1ZmZlclNpemUpIHsKLSAgICAgICAgICAgIFVD
aGFyIGlubGluZUJ1ZmZlcltpbmxpbmVCdWZmZXJTaXplXTsKLSAgICAgICAgICAgIHY4U3RyaW5n
LT5Xcml0ZShyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oaW5saW5lQnVmZmVyKSwgMCwgbGVu
Z3RoKTsKLSAgICAgICAgICAgIHJldHVybiBBdG9taWNTdHJpbmcoaW5saW5lQnVmZmVyLCBsZW5n
dGgpOwotICAgICAgICB9Ci0gICAgICAgIFVDaGFyKiBidWZmZXI7Ci0gICAgICAgIFN0cmluZyB0
bXAgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIpOwotICAgICAg
ICB2OFN0cmluZy0+V3JpdGUocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGJ1ZmZlciksIDAs
IGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBBdG9taWNTdHJpbmcodG1wKTsKLSAgICB9Ci19Owot
Ci10ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nVHlwZT4KLVN0cmluZ1R5cGUgdjhTdHJpbmdUb1dl
YkNvcmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgRXh0ZXJuYWxNb2Rl
IGV4dGVybmFsKQotewotICAgIFdlYkNvcmVTdHJpbmdSZXNvdXJjZSogc3RyaW5nUmVzb3VyY2Ug
PSBXZWJDb3JlU3RyaW5nUmVzb3VyY2U6OnRvU3RyaW5nUmVzb3VyY2UodjhTdHJpbmcpOwotICAg
IGlmIChzdHJpbmdSZXNvdXJjZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZ1RyYWl0czxTdHJpbmdU
eXBlPjo6ZnJvbVN0cmluZ1Jlc291cmNlKHN0cmluZ1Jlc291cmNlKTsKLQotICAgIGludCBsZW5n
dGggPSB2OFN0cmluZy0+TGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpIHsKLSAgICAgICAgLy8g
QXZvaWQgdHJ5aW5nIHRvIG1vcnBoIGVtcHR5IHN0cmluZ3MsIGFzIHRoZXkgZG8gbm90IGhhdmUg
ZW5vdWdoIHJvb20gdG8gY29udGFpbiB0aGUgZXh0ZXJuYWwgcmVmZXJlbmNlLgotICAgICAgICBy
ZXR1cm4gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICB9Ci0KLSAgICBTdHJpbmdUeXBlIHJlc3Vs
dChTdHJpbmdUcmFpdHM8U3RyaW5nVHlwZT46OmZyb21WOFN0cmluZyh2OFN0cmluZywgbGVuZ3Ro
KSk7Ci0KLSAgICBpZiAoZXh0ZXJuYWwgPT0gRXh0ZXJuYWxpemUgJiYgdjhTdHJpbmctPkNhbk1h
a2VFeHRlcm5hbCgpKSB7Ci0gICAgICAgIHN0cmluZ1Jlc291cmNlID0gbmV3IFdlYkNvcmVTdHJp
bmdSZXNvdXJjZShyZXN1bHQpOwotICAgICAgICBpZiAoIXY4U3RyaW5nLT5NYWtlRXh0ZXJuYWwo
c3RyaW5nUmVzb3VyY2UpKSB7Ci0gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGEgZmFpbHVyZSBk
ZWxldGUgdGhlIGV4dGVybmFsIHJlc291cmNlIGFzIGl0IHdhcyBub3QgdXNlZC4KLSAgICAgICAg
ICAgIGRlbGV0ZSBzdHJpbmdSZXNvdXJjZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotICAgIAotLy8gRXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUgYWJvdmUgdGVt
cGxhdGUgd2l0aCB0aGUgZXhwZWN0ZWQgcGFyYW1ldGVyaXphdGlvbnMsCi0vLyB0byBlbnN1cmUg
dGhlIGNvbXBpbGVyIGdlbmVyYXRlcyB0aGUgY29kZTsgb3RoZXJ3aXNlIGxpbmsgZXJyb3JzIGNh
biByZXN1bHQgaW4gR0NDIDQuNC4KLXRlbXBsYXRlIFN0cmluZyB2OFN0cmluZ1RvV2ViQ29yZVN0
cmluZzxTdHJpbmc+KHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIEV4dGVybmFsTW9kZSk7Ci10ZW1w
bGF0ZSBBdG9taWNTdHJpbmcgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmc8QXRvbWljU3RyaW5nPih2
ODo6SGFuZGxlPHY4OjpTdHJpbmc+LCBFeHRlcm5hbE1vZGUpOwotCi0vLyBGYXN0IGJ1dCBub24g
dGhyZWFkLXNhZmUgdmVyc2lvbi4KLVN0cmluZyBpbnQzMlRvV2ViQ29yZVN0cmluZ0Zhc3QoaW50
IHZhbHVlKQotewotICAgIC8vIENhY2hpbmcgb2Ygc21hbGwgc3RyaW5ncyBiZWxvdyBpcyBub3Qg
dGhyZWFkIHNhZmU6IG5ld2x5IGNvbnN0cnVjdGVkIEF0b21pY1N0cmluZwotICAgIC8vIGFyZSBu
b3Qgc2FmZWx5IHB1Ymxpc2hlZC4KLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAg
Ly8gTW9zdCBudW1iZXJzIHVzZWQgYXJlIDw9IDEwMC4gRXZlbiBpZiB0aGV5IGFyZW4ndCB1c2Vk
IHRoZXJlJ3MgdmVyeSBsaXR0bGUgY29zdCBpbiB1c2luZyB0aGUgc3BhY2UuCi0gICAgY29uc3Qg
aW50IGtMb3dOdW1iZXJzID0gMTAwOwotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0
b21pY1N0cmluZz4sIGxvd051bWJlcnMsIChrTG93TnVtYmVycyArIDEpKTsKLSAgICBTdHJpbmcg
d2ViQ29yZVN0cmluZzsKLSAgICBpZiAoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBrTG93TnVtYmVy
cykgewotICAgICAgICB3ZWJDb3JlU3RyaW5nID0gbG93TnVtYmVyc1t2YWx1ZV07Ci0gICAgICAg
IGlmICghd2ViQ29yZVN0cmluZykgewotICAgICAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlU3Ry
aW5nID0gQXRvbWljU3RyaW5nKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7Ci0gICAgICAgICAgICBs
b3dOdW1iZXJzW3ZhbHVlXSA9IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgd2ViQ29yZVN0cmlu
ZyA9IHZhbHVlU3RyaW5nOwotICAgICAgICB9Ci0gICAgfSBlbHNlCi0gICAgICAgIHdlYkNvcmVT
dHJpbmcgPSBTdHJpbmc6Om51bWJlcih2YWx1ZSk7Ci0gICAgcmV0dXJuIHdlYkNvcmVTdHJpbmc7
Ci19Ci0KLVN0cmluZyBpbnQzMlRvV2ViQ29yZVN0cmluZyhpbnQgdmFsdWUpCi17Ci0gICAgLy8g
SWYgd2UgYXJlIG9uIHRoZSBtYWluIHRocmVhZCAodGhpcyBzaG91bGQgYWx3YXlzIHRydWUgZm9y
IG5vbi13b3JrZXJzKSwgY2FsbCB0aGUgZmFzdGVyIG9uZS4KLSAgICBpZiAoaXNNYWluVGhyZWFk
KCkpCi0gICAgICAgIHJldHVybiBpbnQzMlRvV2ViQ29yZVN0cmluZ0Zhc3QodmFsdWUpOwotICAg
IHJldHVybiBTdHJpbmc6Om51bWJlcih2YWx1ZSk7Ci19Ci0KIHY4OjpQZXJzaXN0ZW50PHY4OjpG
dW5jdGlvblRlbXBsYXRlPiBjcmVhdGVSYXdUZW1wbGF0ZSgpCiB7CiAgICAgdjg6OkhhbmRsZVNj
b3BlIHNjb3BlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5k
aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAppbmRleCAzNDE5
ZWI2MGY5MDZiYTQxYTQ4ODQyYThjMzY1YTU5NjJlNWNhOGQ5Li5mMWU0ZjJlMmFlYjYyNDAwZWI3
NjA0ZGNiZTM5NTdlZjVjN2QxZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOEJpbmRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRp
bmcuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlY4T2JqZWN0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJWOFBlcklzb2xhdGVEYXRhLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgorI2lu
Y2x1ZGUgIlY4U3RyaW5nUmVzb3VyY2UuaCIKICNpbmNsdWRlICJWOFRocm93RXhjZXB0aW9uLmgi
CiAjaW5jbHVkZSAiVjhWYWx1ZUNhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CkBAIC03NiwxNCArNzcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHJldHVybiBp
c29sYXRlID8gdjg6Ok51bGwoaXNvbGF0ZSkgOiB2ODo6TnVsbCgpOwogICAgIH0KIAotICAgIGVu
dW0gRXh0ZXJuYWxNb2RlIHsKLSAgICAgICAgRXh0ZXJuYWxpemUsCi0gICAgICAgIERvTm90RXh0
ZXJuYWxpemUKLSAgICB9OwotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFN0cmluZ1R5cGU+Ci0g
ICAgU3RyaW5nVHlwZSB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJp
bmc+LCBFeHRlcm5hbE1vZGUpOwotCiAgICAgLy8gQ29udmVydCB2OCB0eXBlcyB0byBhIFdURjo6
U3RyaW5nLiBJZiB0aGUgVjggc3RyaW5nIGlzIG5vdCBhbHJlYWR5CiAgICAgLy8gYW4gZXh0ZXJu
YWwgc3RyaW5nIHRoZW4gaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBleHRlcm5hbCBzdHJpbmcg
YXQgdGhpcwogICAgIC8vIHBvaW50IHRvIGF2b2lkIHJlcGVhdGVkIGNvbnZlcnNpb25zLgpAQCAt
MzY0LDggKzM1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB2ODo6UGVyc2lzdGVudDx2
ODo6U3RyaW5nPiBnZXRUb1N0cmluZ05hbWUoKTsKICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gZ2V0VG9TdHJpbmdUZW1wbGF0ZSgpOwogCi0gICAgU3RyaW5nIGludDMy
VG9XZWJDb3JlU3RyaW5nKGludCB2YWx1ZSk7Ci0KICAgICBQYXNzUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IHRvRE9NU3RyaW5nTGlzdCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwogCiAgICAgLy8gUmV0
dXJucyB0aGUgd2luZG93IG9iamVjdCBhc3NvY2lhdGVkIHdpdGggYSBjb250ZXh0LgpAQCAtMzgw
LDEwMiArMzcxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgdm9pZCBjcmFzaElmVjhJ
c0RlYWQoKTsKIAotICAgIGNsYXNzIFY4UGFyYW1ldGVyQmFzZSB7Ci0gICAgcHVibGljOgotICAg
ICAgICBvcGVyYXRvciBTdHJpbmcoKSB7IHJldHVybiB0b1N0cmluZzxTdHJpbmc+KCk7IH0KLSAg
ICAgICAgb3BlcmF0b3IgQXRvbWljU3RyaW5nKCkgeyByZXR1cm4gdG9TdHJpbmc8QXRvbWljU3Ry
aW5nPigpOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIFY4UGFyYW1ldGVyQmFzZSh2ODo6
TG9jYWw8djg6OlZhbHVlPiBvYmplY3QpIDogbV92OE9iamVjdChvYmplY3QpLCBtX21vZGUoRXh0
ZXJuYWxpemUpLCBtX3N0cmluZygpIHsgfQotCi0gICAgICAgIGJvb2wgcHJlcGFyZUJhc2UoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV92OE9iamVjdC5Jc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmIChMSUtFTFkobV92OE9iamVj
dC0+SXNTdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAg
ICAgIGlmIChMSUtFTFkobV92OE9iamVjdC0+SXNJbnQzMigpKSkgewotICAgICAgICAgICAgICAg
IHNldFN0cmluZyhpbnQzMlRvV2ViQ29yZVN0cmluZyhtX3Y4T2JqZWN0LT5JbnQzMlZhbHVlKCkp
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbV9tb2RlID0gRG9Ob3RFeHRlcm5hbGl6ZTsKLSAgICAgICAgICAgIHY4OjpUcnlDYXRj
aCBibG9jazsKLSAgICAgICAgICAgIG1fdjhPYmplY3QgPSBtX3Y4T2JqZWN0LT5Ub1N0cmluZygp
OwotICAgICAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlvbiBpcyB0
aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0aGUgb2JqZWN0LgotICAgICAg
ICAgICAgaWYgKGJsb2NrLkhhc0NhdWdodCgpKSB7Ci0gICAgICAgICAgICAgICAgYmxvY2suUmVU
aHJvdygpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gb2JqZWN0KCkgeyByZXR1cm4gbV92OE9iamVjdDsgfQotCi0gICAgICAgIHZvaWQg
c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgICBt
X3N0cmluZyA9IHN0cmluZzsKLSAgICAgICAgICAgIG1fdjhPYmplY3QuQ2xlYXIoKTsgLy8gVG8g
c2lnbmFsIHRoYXQgU3RyaW5nIGlzIHJlYWR5LgotICAgICAgICB9Ci0KLSAgICAgcHJpdmF0ZToK
LSAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbV92OE9iamVjdDsKLSAgICAgICAgRXh0ZXJu
YWxNb2RlIG1fbW9kZTsKLSAgICAgICAgU3RyaW5nIG1fc3RyaW5nOwotCi0gICAgICAgIHRlbXBs
YXRlIDxjbGFzcyBTdHJpbmdUeXBlPgotICAgICAgICBTdHJpbmdUeXBlIHRvU3RyaW5nKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKExJS0VMWSghbV92OE9iamVjdC5Jc0VtcHR5KCkpKQot
ICAgICAgICAgICAgICAgIHJldHVybiB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxTdHJpbmdUeXBl
PihtX3Y4T2JqZWN0LkFzPHY4OjpTdHJpbmc+KCksIG1fbW9kZSk7Ci0KLSAgICAgICAgICAgIHJl
dHVybiBTdHJpbmdUeXBlKG1fc3RyaW5nKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBW
OFBhcmFtZXRlciBpcyBhbiBhZGFwdGVyIGNsYXNzIHRoYXQgY29udmVydHMgVjggdmFsdWVzIHRv
IFN0cmluZ3MKLSAgICAvLyBvciBBdG9taWNTdHJpbmdzIGFzIGFwcHJvcHJpYXRlLCB1c2luZyBt
dWx0aXBsZSB0eXBlY2FzdCBvcGVyYXRvcnMuCi0gICAgZW51bSBWOFBhcmFtZXRlck1vZGUgewot
ICAgICAgICBEZWZhdWx0TW9kZSwKLSAgICAgICAgV2l0aE51bGxDaGVjaywKLSAgICAgICAgV2l0
aFVuZGVmaW5lZE9yTnVsbENoZWNrCi0gICAgfTsKLSAgICB0ZW1wbGF0ZSA8VjhQYXJhbWV0ZXJN
b2RlIE1PREUgPSBEZWZhdWx0TW9kZT4KLSAgICBjbGFzcyBWOFBhcmFtZXRlcjogcHVibGljIFY4
UGFyYW1ldGVyQmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBWOFBhcmFtZXRlcih2ODo6TG9j
YWw8djg6OlZhbHVlPiBvYmplY3QpIDogVjhQYXJhbWV0ZXJCYXNlKG9iamVjdCkgeyB9Ci0gICAg
ICAgIFY4UGFyYW1ldGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCwgYm9vbCkgOiBWOFBh
cmFtZXRlckJhc2Uob2JqZWN0KSB7IHByZXBhcmUoKTsgfQotCi0gICAgICAgIGJvb2wgcHJlcGFy
ZSgpOwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTw+IGlubGluZSBib29sIFY4UGFyYW1ldGVyPERl
ZmF1bHRNb2RlPjo6cHJlcGFyZSgpCi0gICAgewotICAgICAgICByZXR1cm4gVjhQYXJhbWV0ZXJC
YXNlOjpwcmVwYXJlQmFzZSgpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPD4gaW5saW5lIGJvb2wg
VjhQYXJhbWV0ZXI8V2l0aE51bGxDaGVjaz46OnByZXBhcmUoKQotICAgIHsKLSAgICAgICAgaWYg
KG9iamVjdCgpLklzRW1wdHkoKSB8fCBvYmplY3QoKS0+SXNOdWxsKCkpIHsKLSAgICAgICAgICAg
IHNldFN0cmluZyhTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBWOFBhcmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCk7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8PiBpbmxpbmUgYm9vbCBWOFBhcmFtZXRlcjxXaXRoVW5kZWZpbmVk
T3JOdWxsQ2hlY2s+OjpwcmVwYXJlKCkKLSAgICB7Ci0gICAgICAgIGlmIChvYmplY3QoKS5Jc0Vt
cHR5KCkgfHwgb2JqZWN0KCktPklzTnVsbCgpIHx8IG9iamVjdCgpLT5Jc1VuZGVmaW5lZCgpKSB7
Ci0gICAgICAgICAgICBzZXRTdHJpbmcoU3RyaW5nKCkpOwotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gVjhQYXJhbWV0ZXJCYXNlOjpwcmVwYXJl
QmFzZSgpOwotICAgIH0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVjhC
aW5kaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U3RyaW5n
UmVzb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhTdHJpbmdSZXNvdXJj
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGM2ZGEyZDJlODJhNGQwNDQyZDg2MDNhZjNlY2RmMzVkNWFjZWEx
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U3RyaW5n
UmVzb3VyY2UuY3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJWOFN0cmluZ1Jlc291cmNlLmgiCisKKyNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZSA8Y2xhc3MgUz4gc3Ry
dWN0IFN0cmluZ1RyYWl0cyB7CisgICAgc3RhdGljIFMgZnJvbVN0cmluZ1Jlc291cmNlKFdlYkNv
cmVTdHJpbmdSZXNvdXJjZSopOworICAgIHN0YXRpYyBTIGZyb21WOFN0cmluZyh2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+LCBpbnQpOworfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IFN0cmluZ1RyYWl0
czxTdHJpbmc+IHsKKyAgICBzdGF0aWMgU3RyaW5nIGZyb21TdHJpbmdSZXNvdXJjZShXZWJDb3Jl
U3RyaW5nUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc291cmNl
LT53ZWJjb3JlU3RyaW5nKCk7CisgICAgfQorCisgICAgc3RhdGljIFN0cmluZyBmcm9tVjhTdHJp
bmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgaW50IGxlbmd0aCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCh2OFN0cmluZy0+TGVuZ3RoKCkgPT0gbGVuZ3RoKTsKKyAgICAgICAgLy8g
Tk9URTogYXMgb2Ygbm93LCBTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQpIHBlcmZvcm1zIFN0cmlu
Zzo6Y3JlYXRlVW5pbml0aWFsaXplZAorICAgICAgICAvLyBhbnl3YXksIHNvIG5vIG5lZWQgdG8g
b3B0aW1pemUgbGlrZSB3ZSBkbyBmb3IgQXRvbWljU3RyaW5nIGJlbG93LgorICAgICAgICBVQ2hh
ciogYnVmZmVyOworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nOjpjcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKKyAgICAgICAgdjhTdHJpbmctPldyaXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPihidWZmZXIpLCAwLCBsZW5ndGgpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBTdHJpbmdUcmFpdHM8QXRv
bWljU3RyaW5nPiB7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBmcm9tU3RyaW5nUmVzb3VyY2Uo
V2ViQ29yZVN0cmluZ1Jlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZXNvdXJjZS0+YXRvbWljU3RyaW5nKCk7CisgICAgfQorCisgICAgc3RhdGljIEF0b21pY1N0cmlu
ZyBmcm9tVjhTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgaW50IGxlbmd0
aCkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2OFN0cmluZy0+TGVuZ3RoKCkgPT0gbGVuZ3RoKTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBpbmxpbmVCdWZmZXJTaXplID0gMTY7CisgICAgICAg
IGlmIChsZW5ndGggPD0gaW5saW5lQnVmZmVyU2l6ZSkgeworICAgICAgICAgICAgVUNoYXIgaW5s
aW5lQnVmZmVyW2lubGluZUJ1ZmZlclNpemVdOworICAgICAgICAgICAgdjhTdHJpbmctPldyaXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDE2X3QqPihpbmxpbmVCdWZmZXIpLCAwLCBsZW5ndGgpOwor
ICAgICAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZyhpbmxpbmVCdWZmZXIsIGxlbmd0aCk7Cisg
ICAgICAgIH0KKyAgICAgICAgVUNoYXIqIGJ1ZmZlcjsKKyAgICAgICAgU3RyaW5nIHN0cmluZyA9
IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7CisgICAgICAgIHY4
U3RyaW5nLT5Xcml0ZShyZWludGVycHJldF9jYXN0PHVpbnQxNl90Kj4oYnVmZmVyKSwgMCwgbGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIEF0b21pY1N0cmluZyhzdHJpbmcpOworICAgIH0KK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBTdHJpbmdUeXBlPgorU3RyaW5nVHlwZSB2OFN0cmluZ1RvV2Vi
Q29yZVN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nLCBFeHRlcm5hbE1vZGUg
ZXh0ZXJuYWwpCit7CisgICAgV2ViQ29yZVN0cmluZ1Jlc291cmNlKiBzdHJpbmdSZXNvdXJjZSA9
IFdlYkNvcmVTdHJpbmdSZXNvdXJjZTo6dG9TdHJpbmdSZXNvdXJjZSh2OFN0cmluZyk7CisgICAg
aWYgKHN0cmluZ1Jlc291cmNlKQorICAgICAgICByZXR1cm4gU3RyaW5nVHJhaXRzPFN0cmluZ1R5
cGU+Ojpmcm9tU3RyaW5nUmVzb3VyY2Uoc3RyaW5nUmVzb3VyY2UpOworCisgICAgaW50IGxlbmd0
aCA9IHY4U3RyaW5nLT5MZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkgeworICAgICAgICAvLyBB
dm9pZCB0cnlpbmcgdG8gbW9ycGggZW1wdHkgc3RyaW5ncywgYXMgdGhleSBkbyBub3QgaGF2ZSBl
bm91Z2ggcm9vbSB0byBjb250YWluIHRoZSBleHRlcm5hbCByZWZlcmVuY2UuCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBTdHJpbmdUeXBlIHJlc3VsdChTdHJpbmdUcmFp
dHM8U3RyaW5nVHlwZT46OmZyb21WOFN0cmluZyh2OFN0cmluZywgbGVuZ3RoKSk7CisKKyAgICBp
ZiAoZXh0ZXJuYWwgPT0gRXh0ZXJuYWxpemUgJiYgdjhTdHJpbmctPkNhbk1ha2VFeHRlcm5hbCgp
KSB7CisgICAgICAgIHN0cmluZ1Jlc291cmNlID0gbmV3IFdlYkNvcmVTdHJpbmdSZXNvdXJjZShy
ZXN1bHQpOworICAgICAgICBpZiAoIXY4U3RyaW5nLT5NYWtlRXh0ZXJuYWwoc3RyaW5nUmVzb3Vy
Y2UpKSB7CisgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGEgZmFpbHVyZSBkZWxldGUgdGhlIGV4
dGVybmFsIHJlc291cmNlIGFzIGl0IHdhcyBub3QgdXNlZC4KKyAgICAgICAgICAgIGRlbGV0ZSBz
dHJpbmdSZXNvdXJjZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
ICAgIAorLy8gRXhwbGljaXRseSBpbnN0YW50aWF0ZSB0aGUgYWJvdmUgdGVtcGxhdGUgd2l0aCB0
aGUgZXhwZWN0ZWQgcGFyYW1ldGVyaXphdGlvbnMsCisvLyB0byBlbnN1cmUgdGhlIGNvbXBpbGVy
IGdlbmVyYXRlcyB0aGUgY29kZTsgb3RoZXJ3aXNlIGxpbmsgZXJyb3JzIGNhbiByZXN1bHQgaW4g
R0NDIDQuNC4KK3RlbXBsYXRlIFN0cmluZyB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxTdHJpbmc+
KHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIEV4dGVybmFsTW9kZSk7Cit0ZW1wbGF0ZSBBdG9taWNT
dHJpbmcgdjhTdHJpbmdUb1dlYkNvcmVTdHJpbmc8QXRvbWljU3RyaW5nPih2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+LCBFeHRlcm5hbE1vZGUpOworCisvLyBGYXN0IGJ1dCBub24gdGhyZWFkLXNhZmUg
dmVyc2lvbi4KK1N0cmluZyBpbnQzMlRvV2ViQ29yZVN0cmluZ0Zhc3QoaW50IHZhbHVlKQorewor
ICAgIC8vIENhY2hpbmcgb2Ygc21hbGwgc3RyaW5ncyBiZWxvdyBpcyBub3QgdGhyZWFkIHNhZmU6
IG5ld2x5IGNvbnN0cnVjdGVkIEF0b21pY1N0cmluZworICAgIC8vIGFyZSBub3Qgc2FmZWx5IHB1
Ymxpc2hlZC4KKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gTW9zdCBudW1i
ZXJzIHVzZWQgYXJlIDw9IDEwMC4gRXZlbiBpZiB0aGV5IGFyZW4ndCB1c2VkIHRoZXJlJ3MgdmVy
eSBsaXR0bGUgY29zdCBpbiB1c2luZyB0aGUgc3BhY2UuCisgICAgY29uc3QgaW50IGtMb3dOdW1i
ZXJzID0gMTAwOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEF0b21pY1N0cmluZz4s
IGxvd051bWJlcnMsIChrTG93TnVtYmVycyArIDEpKTsKKyAgICBTdHJpbmcgd2ViQ29yZVN0cmlu
ZzsKKyAgICBpZiAoMCA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBrTG93TnVtYmVycykgeworICAgICAg
ICB3ZWJDb3JlU3RyaW5nID0gbG93TnVtYmVyc1t2YWx1ZV07CisgICAgICAgIGlmICghd2ViQ29y
ZVN0cmluZykgeworICAgICAgICAgICAgQXRvbWljU3RyaW5nIHZhbHVlU3RyaW5nID0gQXRvbWlj
U3RyaW5nKFN0cmluZzo6bnVtYmVyKHZhbHVlKSk7CisgICAgICAgICAgICBsb3dOdW1iZXJzW3Zh
bHVlXSA9IHZhbHVlU3RyaW5nOworICAgICAgICAgICAgd2ViQ29yZVN0cmluZyA9IHZhbHVlU3Ry
aW5nOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHdlYkNvcmVTdHJpbmcgPSBTdHJp
bmc6Om51bWJlcih2YWx1ZSk7CisgICAgcmV0dXJuIHdlYkNvcmVTdHJpbmc7Cit9CisKK1N0cmlu
ZyBpbnQzMlRvV2ViQ29yZVN0cmluZyhpbnQgdmFsdWUpCit7CisgICAgLy8gSWYgd2UgYXJlIG9u
IHRoZSBtYWluIHRocmVhZCAodGhpcyBzaG91bGQgYWx3YXlzIHRydWUgZm9yIG5vbi13b3JrZXJz
KSwgY2FsbCB0aGUgZmFzdGVyIG9uZS4KKyAgICBpZiAoaXNNYWluVGhyZWFkKCkpCisgICAgICAg
IHJldHVybiBpbnQzMlRvV2ViQ29yZVN0cmluZ0Zhc3QodmFsdWUpOworICAgIHJldHVybiBTdHJp
bmc6Om51bWJlcih2YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U3RyaW5nUmVzb3VyY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4U3RyaW5nUmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NWNk
YmE2ZTJjMDAxMWZlMDUwYTlhYzBlYzIyMGNlY2Y3ZGUxMjk0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhTdHJpbmdSZXNvdXJjZS5oCkBAIC0wLDAgKzEs
MTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVjhTdHJpbmdSZXNvdXJjZV9oCisjZGVmaW5l
IFY4U3RyaW5nUmVzb3VyY2VfaAorCisjaW5jbHVkZSA8djguaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIEV4dGVybmFsTW9kZSB7CisgICAgRXh0ZXJuYWxpemUs
CisgICAgRG9Ob3RFeHRlcm5hbGl6ZQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFN0cmluZ1R5
cGU+CitTdHJpbmdUeXBlIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0
cmluZz4sIEV4dGVybmFsTW9kZSk7CitTdHJpbmcgaW50MzJUb1dlYkNvcmVTdHJpbmcoaW50IHZh
bHVlKTsKKworY2xhc3MgVjhQYXJhbWV0ZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBvcGVyYXRvciBT
dHJpbmcoKSB7IHJldHVybiB0b1N0cmluZzxTdHJpbmc+KCk7IH0KKyAgICBvcGVyYXRvciBBdG9t
aWNTdHJpbmcoKSB7IHJldHVybiB0b1N0cmluZzxBdG9taWNTdHJpbmc+KCk7IH0KKworcHJvdGVj
dGVkOgorICAgIFY4UGFyYW1ldGVyQmFzZSh2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QpIDog
bV92OE9iamVjdChvYmplY3QpLCBtX21vZGUoRXh0ZXJuYWxpemUpLCBtX3N0cmluZygpIHsgfQor
CisgICAgYm9vbCBwcmVwYXJlQmFzZSgpCisgICAgeworICAgICAgICBpZiAobV92OE9iamVjdC5J
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoTElLRUxZ
KG1fdjhPYmplY3QtPklzU3RyaW5nKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICAgICAgaWYgKExJS0VMWShtX3Y4T2JqZWN0LT5Jc0ludDMyKCkpKSB7CisgICAgICAgICAgICBz
ZXRTdHJpbmcoaW50MzJUb1dlYkNvcmVTdHJpbmcobV92OE9iamVjdC0+SW50MzJWYWx1ZSgpKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fbW9kZSA9
IERvTm90RXh0ZXJuYWxpemU7CisgICAgICAgIHY4OjpUcnlDYXRjaCBibG9jazsKKyAgICAgICAg
bV92OE9iamVjdCA9IG1fdjhPYmplY3QtPlRvU3RyaW5nKCk7CisgICAgICAgIC8vIEhhbmRsZSB0
aGUgY2FzZSB3aGVyZSBhbiBleGNlcHRpb24gaXMgdGhyb3duIGFzIHBhcnQgb2YgaW52b2tpbmcg
dG9TdHJpbmcgb24gdGhlIG9iamVjdC4KKyAgICAgICAgaWYgKGJsb2NrLkhhc0NhdWdodCgpKSB7
CisgICAgICAgICAgICBibG9jay5SZVRocm93KCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gb2JqZWN0KCkgeyByZXR1cm4gbV92OE9iamVjdDsgfQorCisgICAgdm9pZCBz
ZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCisgICAgeworICAgICAgICBtX3N0cmluZyA9
IHN0cmluZzsKKyAgICAgICAgbV92OE9iamVjdC5DbGVhcigpOyAvLyBUbyBzaWduYWwgdGhhdCBT
dHJpbmcgaXMgcmVhZHkuCisgICAgfQorCitwcml2YXRlOgorICAgIHY4OjpMb2NhbDx2ODo6VmFs
dWU+IG1fdjhPYmplY3Q7CisgICAgRXh0ZXJuYWxNb2RlIG1fbW9kZTsKKyAgICBTdHJpbmcgbV9z
dHJpbmc7CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgU3RyaW5nVHlwZT4KKyAgICBTdHJpbmdUeXBl
IHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkoIW1fdjhPYmplY3QuSXNFbXB0
eSgpKSkKKyAgICAgICAgICAgIHJldHVybiB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxTdHJpbmdU
eXBlPihtX3Y4T2JqZWN0LkFzPHY4OjpTdHJpbmc+KCksIG1fbW9kZSk7CisKKyAgICAgICAgcmV0
dXJuIFN0cmluZ1R5cGUobV9zdHJpbmcpOworICAgIH0KK307CisKKy8vIFY4UGFyYW1ldGVyIGlz
IGFuIGFkYXB0ZXIgY2xhc3MgdGhhdCBjb252ZXJ0cyBWOCB2YWx1ZXMgdG8gU3RyaW5ncworLy8g
b3IgQXRvbWljU3RyaW5ncyBhcyBhcHByb3ByaWF0ZSwgdXNpbmcgbXVsdGlwbGUgdHlwZWNhc3Qg
b3BlcmF0b3JzLgorZW51bSBWOFBhcmFtZXRlck1vZGUgeworICAgIERlZmF1bHRNb2RlLAorICAg
IFdpdGhOdWxsQ2hlY2ssCisgICAgV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrCit9OworCit0ZW1w
bGF0ZSA8VjhQYXJhbWV0ZXJNb2RlIE1PREUgPSBEZWZhdWx0TW9kZT4KK2NsYXNzIFY4UGFyYW1l
dGVyOiBwdWJsaWMgVjhQYXJhbWV0ZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBWOFBhcmFtZXRlcih2
ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QpIDogVjhQYXJhbWV0ZXJCYXNlKG9iamVjdCkgeyB9
CisgICAgVjhQYXJhbWV0ZXIodjg6OkxvY2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sKSA6IFY4
UGFyYW1ldGVyQmFzZShvYmplY3QpIHsgcHJlcGFyZSgpOyB9CisKKyAgICBib29sIHByZXBhcmUo
KTsKK307CisKK3RlbXBsYXRlPD4gaW5saW5lIGJvb2wgVjhQYXJhbWV0ZXI8RGVmYXVsdE1vZGU+
OjpwcmVwYXJlKCkKK3sKKyAgICByZXR1cm4gVjhQYXJhbWV0ZXJCYXNlOjpwcmVwYXJlQmFzZSgp
OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBib29sIFY4UGFyYW1ldGVyPFdpdGhOdWxsQ2hlY2s+
OjpwcmVwYXJlKCkKK3sKKyAgICBpZiAob2JqZWN0KCkuSXNFbXB0eSgpIHx8IG9iamVjdCgpLT5J
c051bGwoKSkgeworICAgICAgICBzZXRTdHJpbmcoU3RyaW5nKCkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gVjhQYXJhbWV0ZXJCYXNlOjpwcmVwYXJlQmFzZSgp
OworfQorCit0ZW1wbGF0ZTw+IGlubGluZSBib29sIFY4UGFyYW1ldGVyPFdpdGhVbmRlZmluZWRP
ck51bGxDaGVjaz46OnByZXBhcmUoKQoreworICAgIGlmIChvYmplY3QoKS5Jc0VtcHR5KCkgfHwg
b2JqZWN0KCktPklzTnVsbCgpIHx8IG9iamVjdCgpLT5Jc1VuZGVmaW5lZCgpKSB7CisgICAgICAg
IHNldFN0cmluZyhTdHJpbmcoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHJldHVybiBWOFBhcmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCk7Cit9CisgICAgCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBWOFN0cmluZ1Jlc291cmNlX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159852</attachid>
            <date>2012-08-21 20:47:23 -0700</date>
            <delta_ts>2012-08-21 21:42:01 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>bug-94571-20120822124721.patch</filename>
            <type>text/plain</type>
            <size>22019</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGEwNDY1MjFmZTg3NGEx
MmVmYTg5ZWE4M2M4N2MxMjk4MDJmNjE3Yy4uYjRiNTQ3ZDQ0MDA5OTNkZjhkNzhiOGNhM2UxODBm
ZDQwYTY0NzdmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA4LTIwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KKworICAgICAgICBbVjhdIE1vdmUgU3Ry
aW5nIHJlbGF0ZWQgY29kZSBpbiBWOEJpbmRpbmcgdG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDU3MQorCisgICAgICAg
IFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgVGhpcyBwYXRjaCBtb3ZlcyBWOFBh
cmFtZXRlciwgVjhQYXJhbWV0ZXJCYXNlIGFuZCBTdHJpbmcgcmVsYXRlZCBjb2RlCisgICAgICAg
IGluIFY4QmluZGluZyB0byBhIHNlcGFyYXRlIGZpbGUuCisKKyAgICAgICAgTm8gdGVzdHMuIE5v
IGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFVzZVY4LmNtYWtlOgorICAgICAgICAq
IFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
U3RyaW5nUmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFN0cmlu
Z1Jlc291cmNlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDgtMjEgIEtl
bnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gTW92ZSB0
b1Y4Q29udGV4dCgpIGZyb20gVjhQcm94eSB0byBWOEJpbmRpbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1VzZVY4LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKaW5kZXgg
MjlkN2U1ODcyOGRiOTA3NGQyMjJiYTUwY2JjYjA5OGE1YjBjN2JmMi4uYzNhZTE2NjE0MDMxZDU1
N2UwNThmOGY0ZjcxODJjNDZjNzQ1ZmE4NiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvVXNl
VjguY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKQEAgLTE0NSw2ICsxNDUs
NyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy92OC9jdXN0b20v
VjhTUUxUcmFuc2FjdGlvbkN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhTUUxU
cmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFn
ZUN1c3RvbS5jcHAKKyAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhTdHJpbmdSZXNvdXJjZS5jcHAK
ICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcAogICAgIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCAwZDBlMGM2MmQ3ZTk3ZDZmMmUxY2E1M2U1OTgyMGRhOGU3MjM2ZDMyLi5kMTU1Yzc1MTc5
MmE3M2ViZjlmODFlMTViOWRiYzU2NzhlYjgzN2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMjg4
LDYgKzIyODgsOCBAQAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvVjhSZWN1cnNpb25TY29wZS5jcHAnLAogICAgICAgICAgICAg
J2JpbmRpbmdzL3Y4L1Y4UmVjdXJzaW9uU2NvcGUuaCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
djgvVjhTdHJpbmdSZXNvdXJjZS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4U3Ry
aW5nUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhUaHJvd0V4Y2VwdGlv
bi5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L1Y4VGhyb3dFeGNlcHRpb24uaCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvdjgvVjhVdGlsaXRpZXMuY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOEJpbmRpbmcuY3BwCmluZGV4IGU0Yzk2NmFhZjY4NDViNDAxN2Y5OGQxZDZm
M2Q2MTA5ODZjNGIwYmIuLjQ3YmQ0YzAxMDVlMWUzZDA4ZTNlYmYyYjFiZGU2MzNiZDliMjg2YzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmNwcApAQCAtMjA2LDExOCAr
MjA2LDYgQEAgdWludDMyX3QgdG9VSW50MzIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBi
b29sJiBvaykKICAgICByZXR1cm4gdWludFZhbHVlLT5WYWx1ZSgpOwogfQogCi10ZW1wbGF0ZSA8
Y2xhc3MgUz4gc3RydWN0IFN0cmluZ1RyYWl0cwotewotICAgIHN0YXRpYyBTIGZyb21TdHJpbmdS
ZXNvdXJjZShXZWJDb3JlU3RyaW5nUmVzb3VyY2UqIHJlc291cmNlKTsKLQotICAgIHN0YXRpYyBT
IGZyb21WOFN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nLCBpbnQgbGVuZ3Ro
KTsKLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBTdHJpbmdUcmFpdHM8U3RyaW5nPgotewotICAg
IHN0YXRpYyBTdHJpbmcgZnJvbVN0cmluZ1Jlc291cmNlKFdlYkNvcmVTdHJpbmdSZXNvdXJjZSog
cmVzb3VyY2UpCi0gICAgewotICAgICAgICByZXR1cm4gcmVzb3VyY2UtPndlYmNvcmVTdHJpbmco
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGZyb21WOFN0cmluZyh2ODo6SGFuZGxlPHY4
OjpTdHJpbmc+IHY4U3RyaW5nLCBpbnQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHY4
U3RyaW5nLT5MZW5ndGgoKSA9PSBsZW5ndGgpOwotICAgICAgICAvLyBOT1RFOiBhcyBvZiBub3cs
IFN0cmluZyhjb25zdCBVQ2hhciosIGludCkgcGVyZm9ybXMgU3RyaW5nOjpjcmVhdGVVbmluaXRp
YWxpemVkCi0gICAgICAgIC8vIGFueXdheSwgc28gbm8gbmVlZCB0byBvcHRpbWl6ZSBsaWtlIHdl
IGRvIGZvciBBdG9taWNTdHJpbmcgYmVsb3cuCi0gICAgICAgIFVDaGFyKiBidWZmZXI7Ci0gICAg
ICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBi
dWZmZXIpOwotICAgICAgICB2OFN0cmluZy0+V3JpdGUocmVpbnRlcnByZXRfY2FzdDx1aW50MTZf
dCo+KGJ1ZmZlciksIDAsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
fTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IFN0cmluZ1RyYWl0czxBdG9taWNTdHJpbmc+Ci17Ci0g
ICAgc3RhdGljIEF0b21pY1N0cmluZyBmcm9tU3RyaW5nUmVzb3VyY2UoV2ViQ29yZVN0cmluZ1Jl
c291cmNlKiByZXNvdXJjZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZXNvdXJjZS0+YXRvbWlj
U3RyaW5nKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIEF0b21pY1N0cmluZyBmcm9tVjhTdHJpbmco
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiB2OFN0cmluZywgaW50IGxlbmd0aCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCh2OFN0cmluZy0+TGVuZ3RoKCkgPT0gbGVuZ3RoKTsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBpbmxpbmVCdWZmZXJTaXplID0gMTY7Ci0gICAgICAgIGlmIChsZW5ndGggPD0g
aW5saW5lQnVmZmVyU2l6ZSkgewotICAgICAgICAgICAgVUNoYXIgaW5saW5lQnVmZmVyW2lubGlu
ZUJ1ZmZlclNpemVdOwotICAgICAgICAgICAgdjhTdHJpbmctPldyaXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDE2X3QqPihpbmxpbmVCdWZmZXIpLCAwLCBsZW5ndGgpOwotICAgICAgICAgICAgcmV0
dXJuIEF0b21pY1N0cmluZyhpbmxpbmVCdWZmZXIsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgVUNoYXIqIGJ1ZmZlcjsKLSAgICAgICAgU3RyaW5nIHRtcCA9IFN0cmluZzo6Y3JlYXRlVW5p
bml0aWFsaXplZChsZW5ndGgsIGJ1ZmZlcik7Ci0gICAgICAgIHY4U3RyaW5nLT5Xcml0ZShyZWlu
dGVycHJldF9jYXN0PHVpbnQxNl90Kj4oYnVmZmVyKSwgMCwgbGVuZ3RoKTsKLSAgICAgICAgcmV0
dXJuIEF0b21pY1N0cmluZyh0bXApOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBT
dHJpbmdUeXBlPgotU3RyaW5nVHlwZSB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZyh2ODo6SGFuZGxl
PHY4OjpTdHJpbmc+IHY4U3RyaW5nLCBFeHRlcm5hbE1vZGUgZXh0ZXJuYWwpCi17Ci0gICAgV2Vi
Q29yZVN0cmluZ1Jlc291cmNlKiBzdHJpbmdSZXNvdXJjZSA9IFdlYkNvcmVTdHJpbmdSZXNvdXJj
ZTo6dG9TdHJpbmdSZXNvdXJjZSh2OFN0cmluZyk7Ci0gICAgaWYgKHN0cmluZ1Jlc291cmNlKQot
ICAgICAgICByZXR1cm4gU3RyaW5nVHJhaXRzPFN0cmluZ1R5cGU+Ojpmcm9tU3RyaW5nUmVzb3Vy
Y2Uoc3RyaW5nUmVzb3VyY2UpOwotCi0gICAgaW50IGxlbmd0aCA9IHY4U3RyaW5nLT5MZW5ndGgo
KTsKLSAgICBpZiAoIWxlbmd0aCkgewotICAgICAgICAvLyBBdm9pZCB0cnlpbmcgdG8gbW9ycGgg
ZW1wdHkgc3RyaW5ncywgYXMgdGhleSBkbyBub3QgaGF2ZSBlbm91Z2ggcm9vbSB0byBjb250YWlu
IHRoZSBleHRlcm5hbCByZWZlcmVuY2UuCi0gICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjplbXB0
eSgpOwotICAgIH0KLQotICAgIFN0cmluZ1R5cGUgcmVzdWx0KFN0cmluZ1RyYWl0czxTdHJpbmdU
eXBlPjo6ZnJvbVY4U3RyaW5nKHY4U3RyaW5nLCBsZW5ndGgpKTsKLQotICAgIGlmIChleHRlcm5h
bCA9PSBFeHRlcm5hbGl6ZSAmJiB2OFN0cmluZy0+Q2FuTWFrZUV4dGVybmFsKCkpIHsKLSAgICAg
ICAgc3RyaW5nUmVzb3VyY2UgPSBuZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHJlc3VsdCk7Ci0g
ICAgICAgIGlmICghdjhTdHJpbmctPk1ha2VFeHRlcm5hbChzdHJpbmdSZXNvdXJjZSkpIHsKLSAg
ICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBmYWlsdXJlIGRlbGV0ZSB0aGUgZXh0ZXJuYWwgcmVz
b3VyY2UgYXMgaXQgd2FzIG5vdCB1c2VkLgotICAgICAgICAgICAgZGVsZXRlIHN0cmluZ1Jlc291
cmNlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0gICAgCi0vLyBF
eHBsaWNpdGx5IGluc3RhbnRpYXRlIHRoZSBhYm92ZSB0ZW1wbGF0ZSB3aXRoIHRoZSBleHBlY3Rl
ZCBwYXJhbWV0ZXJpemF0aW9ucywKLS8vIHRvIGVuc3VyZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGVz
IHRoZSBjb2RlOyBvdGhlcndpc2UgbGluayBlcnJvcnMgY2FuIHJlc3VsdCBpbiBHQ0MgNC40Lgot
dGVtcGxhdGUgU3RyaW5nIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPFN0cmluZz4odjg6OkhhbmRs
ZTx2ODo6U3RyaW5nPiwgRXh0ZXJuYWxNb2RlKTsKLXRlbXBsYXRlIEF0b21pY1N0cmluZyB2OFN0
cmluZ1RvV2ViQ29yZVN0cmluZzxBdG9taWNTdHJpbmc+KHY4OjpIYW5kbGU8djg6OlN0cmluZz4s
IEV4dGVybmFsTW9kZSk7Ci0KLS8vIEZhc3QgYnV0IG5vbiB0aHJlYWQtc2FmZSB2ZXJzaW9uLgot
U3RyaW5nIGludDMyVG9XZWJDb3JlU3RyaW5nRmFzdChpbnQgdmFsdWUpCi17Ci0gICAgLy8gQ2Fj
aGluZyBvZiBzbWFsbCBzdHJpbmdzIGJlbG93IGlzIG5vdCB0aHJlYWQgc2FmZTogbmV3bHkgY29u
c3RydWN0ZWQgQXRvbWljU3RyaW5nCi0gICAgLy8gYXJlIG5vdCBzYWZlbHkgcHVibGlzaGVkLgot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBNb3N0IG51bWJlcnMgdXNlZCBh
cmUgPD0gMTAwLiBFdmVuIGlmIHRoZXkgYXJlbid0IHVzZWQgdGhlcmUncyB2ZXJ5IGxpdHRsZSBj
b3N0IGluIHVzaW5nIHRoZSBzcGFjZS4KLSAgICBjb25zdCBpbnQga0xvd051bWJlcnMgPSAxMDA7
Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8QXRvbWljU3RyaW5nPiwgbG93TnVtYmVy
cywgKGtMb3dOdW1iZXJzICsgMSkpOwotICAgIFN0cmluZyB3ZWJDb3JlU3RyaW5nOwotICAgIGlm
ICgwIDw9IHZhbHVlICYmIHZhbHVlIDw9IGtMb3dOdW1iZXJzKSB7Ci0gICAgICAgIHdlYkNvcmVT
dHJpbmcgPSBsb3dOdW1iZXJzW3ZhbHVlXTsKLSAgICAgICAgaWYgKCF3ZWJDb3JlU3RyaW5nKSB7
Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWVTdHJpbmcgPSBBdG9taWNTdHJpbmcoU3Ry
aW5nOjpudW1iZXIodmFsdWUpKTsKLSAgICAgICAgICAgIGxvd051bWJlcnNbdmFsdWVdID0gdmFs
dWVTdHJpbmc7Ci0gICAgICAgICAgICB3ZWJDb3JlU3RyaW5nID0gdmFsdWVTdHJpbmc7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgd2ViQ29yZVN0cmluZyA9IFN0cmluZzo6bnVtYmVy
KHZhbHVlKTsKLSAgICByZXR1cm4gd2ViQ29yZVN0cmluZzsKLX0KLQotU3RyaW5nIGludDMyVG9X
ZWJDb3JlU3RyaW5nKGludCB2YWx1ZSkKLXsKLSAgICAvLyBJZiB3ZSBhcmUgb24gdGhlIG1haW4g
dGhyZWFkICh0aGlzIHNob3VsZCBhbHdheXMgdHJ1ZSBmb3Igbm9uLXdvcmtlcnMpLCBjYWxsIHRo
ZSBmYXN0ZXIgb25lLgotICAgIGlmIChpc01haW5UaHJlYWQoKSkKLSAgICAgICAgcmV0dXJuIGlu
dDMyVG9XZWJDb3JlU3RyaW5nRmFzdCh2YWx1ZSk7Ci0gICAgcmV0dXJuIFN0cmluZzo6bnVtYmVy
KHZhbHVlKTsKLX0KLQogdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGNyZWF0
ZVJhd1RlbXBsYXRlKCkKIHsKICAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCmluZGV4IGRiNDgyMDNhNDhhNTdiNGM0NTI1NzZhZGRm
NGIzYzY0YTc4YWI0MTguLmIxZDhkYTQ1NThhM2MyZTRiZGRiMzExNjBhM2M5MzFiNmUwMjM1ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCkBAIC00MSw2ICs0MSw3IEBA
CiAjaW5jbHVkZSAiVjhPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlY4UGVySXNvbGF0
ZURhdGEuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhTdHJpbmdSZXNvdXJj
ZS5oIgogI2luY2x1ZGUgIlY4VGhyb3dFeGNlcHRpb24uaCIKICNpbmNsdWRlICJWOFZhbHVlQ2Fj
aGUuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTc2LDE0ICs3Nyw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgcmV0dXJuIGlzb2xhdGUgPyB2ODo6TnVsbChpc29s
YXRlKSA6IHY4OjpOdWxsKCk7CiAgICAgfQogCi0gICAgZW51bSBFeHRlcm5hbE1vZGUgewotICAg
ICAgICBFeHRlcm5hbGl6ZSwKLSAgICAgICAgRG9Ob3RFeHRlcm5hbGl6ZQotICAgIH07Ci0KLSAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nVHlwZT4KLSAgICBTdHJpbmdUeXBlIHY4U3RyaW5n
VG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIEV4dGVybmFsTW9kZSk7Ci0K
ICAgICAvLyBDb252ZXJ0IHY4IHR5cGVzIHRvIGEgV1RGOjpTdHJpbmcuIElmIHRoZSBWOCBzdHJp
bmcgaXMgbm90IGFscmVhZHkKICAgICAvLyBhbiBleHRlcm5hbCBzdHJpbmcgdGhlbiBpdCBpcyB0
cmFuc2Zvcm1lZCBpbnRvIGFuIGV4dGVybmFsIHN0cmluZyBhdCB0aGlzCiAgICAgLy8gcG9pbnQg
dG8gYXZvaWQgcmVwZWF0ZWQgY29udmVyc2lvbnMuCkBAIC0zNjQsOCArMzU3LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpTdHJpbmc+IGdldFRvU3RyaW5n
TmFtZSgpOwogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUb1N0
cmluZ1RlbXBsYXRlKCk7CiAKLSAgICBTdHJpbmcgaW50MzJUb1dlYkNvcmVTdHJpbmcoaW50IHZh
bHVlKTsKLQogICAgIFBhc3NSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdG9ET01TdHJpbmdMaXN0KHY4
OjpIYW5kbGU8djg6OlZhbHVlPik7CiAKICAgICAvLyBSZXR1cm5zIHRoZSB3aW5kb3cgb2JqZWN0
IGFzc29jaWF0ZWQgd2l0aCBhIGNvbnRleHQuCkBAIC0zODcsMTAyICszNzgsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICB2b2lkIGNyYXNoSWZWOElzRGVhZCgpOwogCi0gICAgY2xhc3Mg
VjhQYXJhbWV0ZXJCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIG9wZXJhdG9yIFN0cmluZygp
IHsgcmV0dXJuIHRvU3RyaW5nPFN0cmluZz4oKTsgfQotICAgICAgICBvcGVyYXRvciBBdG9taWNT
dHJpbmcoKSB7IHJldHVybiB0b1N0cmluZzxBdG9taWNTdHJpbmc+KCk7IH0KLQotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgVjhQYXJhbWV0ZXJCYXNlKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVj
dCkgOiBtX3Y4T2JqZWN0KG9iamVjdCksIG1fbW9kZShFeHRlcm5hbGl6ZSksIG1fc3RyaW5nKCkg
eyB9Ci0KLSAgICAgICAgYm9vbCBwcmVwYXJlQmFzZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtX3Y4T2JqZWN0LklzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICAgICAgaWYgKExJS0VMWShtX3Y4T2JqZWN0LT5Jc1N0cmluZygpKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKExJS0VMWShtX3Y4T2Jq
ZWN0LT5Jc0ludDMyKCkpKSB7Ci0gICAgICAgICAgICAgICAgc2V0U3RyaW5nKGludDMyVG9XZWJD
b3JlU3RyaW5nKG1fdjhPYmplY3QtPkludDMyVmFsdWUoKSkpOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtX21vZGUgPSBEb05vdEV4
dGVybmFsaXplOwotICAgICAgICAgICAgdjg6OlRyeUNhdGNoIGJsb2NrOwotICAgICAgICAgICAg
bV92OE9iamVjdCA9IG1fdjhPYmplY3QtPlRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAvLyBIYW5k
bGUgdGhlIGNhc2Ugd2hlcmUgYW4gZXhjZXB0aW9uIGlzIHRocm93biBhcyBwYXJ0IG9mIGludm9r
aW5nIHRvU3RyaW5nIG9uIHRoZSBvYmplY3QuCi0gICAgICAgICAgICBpZiAoYmxvY2suSGFzQ2F1
Z2h0KCkpIHsKLSAgICAgICAgICAgICAgICBibG9jay5SZVRocm93KCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLQotICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QoKSB7IHJl
dHVybiBtX3Y4T2JqZWN0OyB9Ci0KLSAgICAgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOwotICAg
ICAgICAgICAgbV92OE9iamVjdC5DbGVhcigpOyAvLyBUbyBzaWduYWwgdGhhdCBTdHJpbmcgaXMg
cmVhZHkuCi0gICAgICAgIH0KLQotICAgICBwcml2YXRlOgotICAgICAgICB2ODo6TG9jYWw8djg6
OlZhbHVlPiBtX3Y4T2JqZWN0OwotICAgICAgICBFeHRlcm5hbE1vZGUgbV9tb2RlOwotICAgICAg
ICBTdHJpbmcgbV9zdHJpbmc7Ci0KLSAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFN0cmluZ1R5cGU+
Ci0gICAgICAgIFN0cmluZ1R5cGUgdG9TdHJpbmcoKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoTElLRUxZKCFtX3Y4T2JqZWN0LklzRW1wdHkoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nPFN0cmluZ1R5cGU+KG1fdjhPYmplY3QuQXM8djg6OlN0
cmluZz4oKSwgbV9tb2RlKTsKLQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZ1R5cGUobV9zdHJp
bmcpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFY4UGFyYW1ldGVyIGlzIGFuIGFkYXB0
ZXIgY2xhc3MgdGhhdCBjb252ZXJ0cyBWOCB2YWx1ZXMgdG8gU3RyaW5ncwotICAgIC8vIG9yIEF0
b21pY1N0cmluZ3MgYXMgYXBwcm9wcmlhdGUsIHVzaW5nIG11bHRpcGxlIHR5cGVjYXN0IG9wZXJh
dG9ycy4KLSAgICBlbnVtIFY4UGFyYW1ldGVyTW9kZSB7Ci0gICAgICAgIERlZmF1bHRNb2RlLAot
ICAgICAgICBXaXRoTnVsbENoZWNrLAotICAgICAgICBXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2sK
LSAgICB9OwotICAgIHRlbXBsYXRlIDxWOFBhcmFtZXRlck1vZGUgTU9ERSA9IERlZmF1bHRNb2Rl
PgotICAgIGNsYXNzIFY4UGFyYW1ldGVyOiBwdWJsaWMgVjhQYXJhbWV0ZXJCYXNlIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIFY4UGFyYW1ldGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCkg
OiBWOFBhcmFtZXRlckJhc2Uob2JqZWN0KSB7IH0KLSAgICAgICAgVjhQYXJhbWV0ZXIodjg6Okxv
Y2FsPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sKSA6IFY4UGFyYW1ldGVyQmFzZShvYmplY3QpIHsg
cHJlcGFyZSgpOyB9Ci0KLSAgICAgICAgYm9vbCBwcmVwYXJlKCk7Ci0gICAgfTsKLQotICAgIHRl
bXBsYXRlPD4gaW5saW5lIGJvb2wgVjhQYXJhbWV0ZXI8RGVmYXVsdE1vZGU+OjpwcmVwYXJlKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBWOFBhcmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCk7Ci0g
ICAgfQotCi0gICAgdGVtcGxhdGU8PiBpbmxpbmUgYm9vbCBWOFBhcmFtZXRlcjxXaXRoTnVsbENo
ZWNrPjo6cHJlcGFyZSgpCi0gICAgewotICAgICAgICBpZiAob2JqZWN0KCkuSXNFbXB0eSgpIHx8
IG9iamVjdCgpLT5Jc051bGwoKSkgewotICAgICAgICAgICAgc2V0U3RyaW5nKFN0cmluZygpKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIFY4
UGFyYW1ldGVyQmFzZTo6cHJlcGFyZUJhc2UoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTw+IGlu
bGluZSBib29sIFY4UGFyYW1ldGVyPFdpdGhVbmRlZmluZWRPck51bGxDaGVjaz46OnByZXBhcmUo
KQotICAgIHsKLSAgICAgICAgaWYgKG9iamVjdCgpLklzRW1wdHkoKSB8fCBvYmplY3QoKS0+SXNO
dWxsKCkgfHwgb2JqZWN0KCktPklzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAgIHNldFN0cmlu
ZyhTdHJpbmcoKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHJldHVybiBWOFBhcmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCk7Ci0gICAgfQotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBWOEJpbmRpbmdfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhTdHJpbmdSZXNvdXJjZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOFN0cmluZ1Jlc291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2M5
NjRkZjFkZDU0NmVhMDBhMDg0M2Y1MWU2N2QyZWQ0YzczZmVkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhTdHJpbmdSZXNvdXJjZS5jcHAKQEAgLTAsMCAr
MSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlY4
U3RyaW5nUmVzb3VyY2UuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3RlbXBsYXRlIDxjbGFzcyBTPiBzdHJ1Y3QgU3RyaW5nVHJhaXRzIHsKKyAg
ICBzdGF0aWMgUyBmcm9tU3RyaW5nUmVzb3VyY2UoV2ViQ29yZVN0cmluZ1Jlc291cmNlKik7Cisg
ICAgc3RhdGljIFMgZnJvbVY4U3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIGludCk7Cit9
OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgU3RyaW5nVHJhaXRzPFN0cmluZz4geworICAgIHN0YXRp
YyBTdHJpbmcgZnJvbVN0cmluZ1Jlc291cmNlKFdlYkNvcmVTdHJpbmdSZXNvdXJjZSogcmVzb3Vy
Y2UpCisgICAgeworICAgICAgICByZXR1cm4gcmVzb3VyY2UtPndlYmNvcmVTdHJpbmcoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgU3RyaW5nIGZyb21WOFN0cmluZyh2ODo6SGFuZGxlPHY4OjpTdHJp
bmc+IHY4U3RyaW5nLCBpbnQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHY4U3RyaW5n
LT5MZW5ndGgoKSA9PSBsZW5ndGgpOworICAgICAgICAvLyBOT1RFOiBhcyBvZiBub3csIFN0cmlu
Zyhjb25zdCBVQ2hhciosIGludCkgcGVyZm9ybXMgU3RyaW5nOjpjcmVhdGVVbmluaXRpYWxpemVk
CisgICAgICAgIC8vIGFueXdheSwgc28gbm8gbmVlZCB0byBvcHRpbWl6ZSBsaWtlIHdlIGRvIGZv
ciBBdG9taWNTdHJpbmcgYmVsb3cuCisgICAgICAgIFVDaGFyKiBidWZmZXI7CisgICAgICAgIFN0
cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobGVuZ3RoLCBidWZmZXIp
OworICAgICAgICB2OFN0cmluZy0+V3JpdGUocmVpbnRlcnByZXRfY2FzdDx1aW50MTZfdCo+KGJ1
ZmZlciksIDAsIGxlbmd0aCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKwor
dGVtcGxhdGU8Pgorc3RydWN0IFN0cmluZ1RyYWl0czxBdG9taWNTdHJpbmc+IHsKKyAgICBzdGF0
aWMgQXRvbWljU3RyaW5nIGZyb21TdHJpbmdSZXNvdXJjZShXZWJDb3JlU3RyaW5nUmVzb3VyY2Uq
IHJlc291cmNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlc291cmNlLT5hdG9taWNTdHJpbmco
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIGZyb21WOFN0cmluZyh2ODo6SGFu
ZGxlPHY4OjpTdHJpbmc+IHY4U3RyaW5nLCBpbnQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHY4U3RyaW5nLT5MZW5ndGgoKSA9PSBsZW5ndGgpOworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IGlubGluZUJ1ZmZlclNpemUgPSAxNjsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSBpbmxpbmVC
dWZmZXJTaXplKSB7CisgICAgICAgICAgICBVQ2hhciBpbmxpbmVCdWZmZXJbaW5saW5lQnVmZmVy
U2l6ZV07CisgICAgICAgICAgICB2OFN0cmluZy0+V3JpdGUocmVpbnRlcnByZXRfY2FzdDx1aW50
MTZfdCo+KGlubGluZUJ1ZmZlciksIDAsIGxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gQXRv
bWljU3RyaW5nKGlubGluZUJ1ZmZlciwgbGVuZ3RoKTsKKyAgICAgICAgfQorICAgICAgICBVQ2hh
ciogYnVmZmVyOworICAgICAgICBTdHJpbmcgc3RyaW5nID0gU3RyaW5nOjpjcmVhdGVVbmluaXRp
YWxpemVkKGxlbmd0aCwgYnVmZmVyKTsKKyAgICAgICAgdjhTdHJpbmctPldyaXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDE2X3QqPihidWZmZXIpLCAwLCBsZW5ndGgpOworICAgICAgICByZXR1cm4g
QXRvbWljU3RyaW5nKHN0cmluZyk7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFN0
cmluZ1R5cGU+CitTdHJpbmdUeXBlIHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gdjhTdHJpbmcsIEV4dGVybmFsTW9kZSBleHRlcm5hbCkKK3sKKyAgICBXZWJD
b3JlU3RyaW5nUmVzb3VyY2UqIHN0cmluZ1Jlc291cmNlID0gV2ViQ29yZVN0cmluZ1Jlc291cmNl
Ojp0b1N0cmluZ1Jlc291cmNlKHY4U3RyaW5nKTsKKyAgICBpZiAoc3RyaW5nUmVzb3VyY2UpCisg
ICAgICAgIHJldHVybiBTdHJpbmdUcmFpdHM8U3RyaW5nVHlwZT46OmZyb21TdHJpbmdSZXNvdXJj
ZShzdHJpbmdSZXNvdXJjZSk7CisKKyAgICBpbnQgbGVuZ3RoID0gdjhTdHJpbmctPkxlbmd0aCgp
OworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gU3RyaW5nKCIiKTsKKworICAgIFN0
cmluZ1R5cGUgcmVzdWx0KFN0cmluZ1RyYWl0czxTdHJpbmdUeXBlPjo6ZnJvbVY4U3RyaW5nKHY4
U3RyaW5nLCBsZW5ndGgpKTsKKworICAgIGlmIChleHRlcm5hbCA9PSBFeHRlcm5hbGl6ZSAmJiB2
OFN0cmluZy0+Q2FuTWFrZUV4dGVybmFsKCkpIHsKKyAgICAgICAgc3RyaW5nUmVzb3VyY2UgPSBu
ZXcgV2ViQ29yZVN0cmluZ1Jlc291cmNlKHJlc3VsdCk7CisgICAgICAgIGlmICghdjhTdHJpbmct
Pk1ha2VFeHRlcm5hbChzdHJpbmdSZXNvdXJjZSkpIHsKKyAgICAgICAgICAgIC8vIEluIGNhc2Ug
b2YgYSBmYWlsdXJlIGRlbGV0ZSB0aGUgZXh0ZXJuYWwgcmVzb3VyY2UgYXMgaXQgd2FzIG5vdCB1
c2VkLgorICAgICAgICAgICAgZGVsZXRlIHN0cmluZ1Jlc291cmNlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCisvLyBFeHBsaWNpdGx5IGluc3RhbnRpYXRl
IHRoZSBhYm92ZSB0ZW1wbGF0ZSB3aXRoIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJpemF0aW9ucywK
Ky8vIHRvIGVuc3VyZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIHRoZSBjb2RlOyBvdGhlcndpc2Ug
bGluayBlcnJvcnMgY2FuIHJlc3VsdCBpbiBHQ0MgNC40LgordGVtcGxhdGUgU3RyaW5nIHY4U3Ry
aW5nVG9XZWJDb3JlU3RyaW5nPFN0cmluZz4odjg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgRXh0ZXJu
YWxNb2RlKTsKK3RlbXBsYXRlIEF0b21pY1N0cmluZyB2OFN0cmluZ1RvV2ViQ29yZVN0cmluZzxB
dG9taWNTdHJpbmc+KHY4OjpIYW5kbGU8djg6OlN0cmluZz4sIEV4dGVybmFsTW9kZSk7CisKKy8v
IEZhc3QgYnV0IG5vbiB0aHJlYWQtc2FmZSB2ZXJzaW9uLgorU3RyaW5nIGludDMyVG9XZWJDb3Jl
U3RyaW5nRmFzdChpbnQgdmFsdWUpCit7CisgICAgLy8gQ2FjaGluZyBvZiBzbWFsbCBzdHJpbmdz
IGJlbG93IGlzIG5vdCB0aHJlYWQgc2FmZTogbmV3bHkgY29uc3RydWN0ZWQgQXRvbWljU3RyaW5n
CisgICAgLy8gYXJlIG5vdCBzYWZlbHkgcHVibGlzaGVkLgorICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisKKyAgICAvLyBNb3N0IG51bWJlcnMgdXNlZCBhcmUgPD0gMTAwLiBFdmVuIGlmIHRo
ZXkgYXJlbid0IHVzZWQgdGhlcmUncyB2ZXJ5IGxpdHRsZSBjb3N0IGluIHVzaW5nIHRoZSBzcGFj
ZS4KKyAgICBjb25zdCBpbnQga0xvd051bWJlcnMgPSAxMDA7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChWZWN0b3I8QXRvbWljU3RyaW5nPiwgbG93TnVtYmVycywgKGtMb3dOdW1iZXJzICsgMSkp
OworICAgIFN0cmluZyB3ZWJDb3JlU3RyaW5nOworICAgIGlmICgwIDw9IHZhbHVlICYmIHZhbHVl
IDw9IGtMb3dOdW1iZXJzKSB7CisgICAgICAgIHdlYkNvcmVTdHJpbmcgPSBsb3dOdW1iZXJzW3Zh
bHVlXTsKKyAgICAgICAgaWYgKCF3ZWJDb3JlU3RyaW5nKSB7CisgICAgICAgICAgICBBdG9taWNT
dHJpbmcgdmFsdWVTdHJpbmcgPSBBdG9taWNTdHJpbmcoU3RyaW5nOjpudW1iZXIodmFsdWUpKTsK
KyAgICAgICAgICAgIGxvd051bWJlcnNbdmFsdWVdID0gdmFsdWVTdHJpbmc7CisgICAgICAgICAg
ICB3ZWJDb3JlU3RyaW5nID0gdmFsdWVTdHJpbmc7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAg
ICAgICAgd2ViQ29yZVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKKyAgICByZXR1cm4g
d2ViQ29yZVN0cmluZzsKK30KKworU3RyaW5nIGludDMyVG9XZWJDb3JlU3RyaW5nKGludCB2YWx1
ZSkKK3sKKyAgICAvLyBJZiB3ZSBhcmUgb24gdGhlIG1haW4gdGhyZWFkICh0aGlzIHNob3VsZCBh
bHdheXMgdHJ1ZSBmb3Igbm9uLXdvcmtlcnMpLCBjYWxsIHRoZSBmYXN0ZXIgb25lLgorICAgIGlm
IChpc01haW5UaHJlYWQoKSkKKyAgICAgICAgcmV0dXJuIGludDMyVG9XZWJDb3JlU3RyaW5nRmFz
dCh2YWx1ZSk7CisgICAgcmV0dXJuIFN0cmluZzo6bnVtYmVyKHZhbHVlKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhTdHJpbmdSZXNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhTdHJpbmdS
ZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1Y2RiYTZlMmMwMDExZmUwNTBhOWFjMGVjMjIwY2VjZjdk
ZTEyOTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFN0
cmluZ1Jlc291cmNlLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBW
OFN0cmluZ1Jlc291cmNlX2gKKyNkZWZpbmUgVjhTdHJpbmdSZXNvdXJjZV9oCisKKyNpbmNsdWRl
IDx2OC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gRXh0ZXJu
YWxNb2RlIHsKKyAgICBFeHRlcm5hbGl6ZSwKKyAgICBEb05vdEV4dGVybmFsaXplCit9OworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyaW5nVHlwZT4KK1N0cmluZ1R5cGUgdjhTdHJpbmdUb1dlYkNv
cmVTdHJpbmcodjg6OkhhbmRsZTx2ODo6U3RyaW5nPiwgRXh0ZXJuYWxNb2RlKTsKK1N0cmluZyBp
bnQzMlRvV2ViQ29yZVN0cmluZyhpbnQgdmFsdWUpOworCitjbGFzcyBWOFBhcmFtZXRlckJhc2Ug
eworcHVibGljOgorICAgIG9wZXJhdG9yIFN0cmluZygpIHsgcmV0dXJuIHRvU3RyaW5nPFN0cmlu
Zz4oKTsgfQorICAgIG9wZXJhdG9yIEF0b21pY1N0cmluZygpIHsgcmV0dXJuIHRvU3RyaW5nPEF0
b21pY1N0cmluZz4oKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgVjhQYXJhbWV0ZXJCYXNlKHY4OjpM
b2NhbDx2ODo6VmFsdWU+IG9iamVjdCkgOiBtX3Y4T2JqZWN0KG9iamVjdCksIG1fbW9kZShFeHRl
cm5hbGl6ZSksIG1fc3RyaW5nKCkgeyB9CisKKyAgICBib29sIHByZXBhcmVCYXNlKCkKKyAgICB7
CisgICAgICAgIGlmIChtX3Y4T2JqZWN0LklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIGlmIChMSUtFTFkobV92OE9iamVjdC0+SXNTdHJpbmcoKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBpZiAoTElLRUxZKG1fdjhPYmplY3QtPklz
SW50MzIoKSkpIHsKKyAgICAgICAgICAgIHNldFN0cmluZyhpbnQzMlRvV2ViQ29yZVN0cmluZyht
X3Y4T2JqZWN0LT5JbnQzMlZhbHVlKCkpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgbV9tb2RlID0gRG9Ob3RFeHRlcm5hbGl6ZTsKKyAgICAgICAgdjg6
OlRyeUNhdGNoIGJsb2NrOworICAgICAgICBtX3Y4T2JqZWN0ID0gbV92OE9iamVjdC0+VG9TdHJp
bmcoKTsKKyAgICAgICAgLy8gSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuIGV4Y2VwdGlvbiBpcyB0
aHJvd24gYXMgcGFydCBvZiBpbnZva2luZyB0b1N0cmluZyBvbiB0aGUgb2JqZWN0LgorICAgICAg
ICBpZiAoYmxvY2suSGFzQ2F1Z2h0KCkpIHsKKyAgICAgICAgICAgIGJsb2NrLlJlVGhyb3coKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBvYmplY3QoKSB7IHJldHVybiBt
X3Y4T2JqZWN0OyB9CisKKyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykK
KyAgICB7CisgICAgICAgIG1fc3RyaW5nID0gc3RyaW5nOworICAgICAgICBtX3Y4T2JqZWN0LkNs
ZWFyKCk7IC8vIFRvIHNpZ25hbCB0aGF0IFN0cmluZyBpcyByZWFkeS4KKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbV92OE9iamVjdDsKKyAgICBFeHRlcm5hbE1v
ZGUgbV9tb2RlOworICAgIFN0cmluZyBtX3N0cmluZzsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBT
dHJpbmdUeXBlPgorICAgIFN0cmluZ1R5cGUgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgaWYg
KExJS0VMWSghbV92OE9iamVjdC5Jc0VtcHR5KCkpKQorICAgICAgICAgICAgcmV0dXJuIHY4U3Ry
aW5nVG9XZWJDb3JlU3RyaW5nPFN0cmluZ1R5cGU+KG1fdjhPYmplY3QuQXM8djg6OlN0cmluZz4o
KSwgbV9tb2RlKTsKKworICAgICAgICByZXR1cm4gU3RyaW5nVHlwZShtX3N0cmluZyk7CisgICAg
fQorfTsKKworLy8gVjhQYXJhbWV0ZXIgaXMgYW4gYWRhcHRlciBjbGFzcyB0aGF0IGNvbnZlcnRz
IFY4IHZhbHVlcyB0byBTdHJpbmdzCisvLyBvciBBdG9taWNTdHJpbmdzIGFzIGFwcHJvcHJpYXRl
LCB1c2luZyBtdWx0aXBsZSB0eXBlY2FzdCBvcGVyYXRvcnMuCitlbnVtIFY4UGFyYW1ldGVyTW9k
ZSB7CisgICAgRGVmYXVsdE1vZGUsCisgICAgV2l0aE51bGxDaGVjaywKKyAgICBXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2sKK307CisKK3RlbXBsYXRlIDxWOFBhcmFtZXRlck1vZGUgTU9ERSA9IERl
ZmF1bHRNb2RlPgorY2xhc3MgVjhQYXJhbWV0ZXI6IHB1YmxpYyBWOFBhcmFtZXRlckJhc2Ugewor
cHVibGljOgorICAgIFY4UGFyYW1ldGVyKHY4OjpMb2NhbDx2ODo6VmFsdWU+IG9iamVjdCkgOiBW
OFBhcmFtZXRlckJhc2Uob2JqZWN0KSB7IH0KKyAgICBWOFBhcmFtZXRlcih2ODo6TG9jYWw8djg6
OlZhbHVlPiBvYmplY3QsIGJvb2wpIDogVjhQYXJhbWV0ZXJCYXNlKG9iamVjdCkgeyBwcmVwYXJl
KCk7IH0KKworICAgIGJvb2wgcHJlcGFyZSgpOworfTsKKwordGVtcGxhdGU8PiBpbmxpbmUgYm9v
bCBWOFBhcmFtZXRlcjxEZWZhdWx0TW9kZT46OnByZXBhcmUoKQoreworICAgIHJldHVybiBWOFBh
cmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGJvb2wg
VjhQYXJhbWV0ZXI8V2l0aE51bGxDaGVjaz46OnByZXBhcmUoKQoreworICAgIGlmIChvYmplY3Qo
KS5Jc0VtcHR5KCkgfHwgb2JqZWN0KCktPklzTnVsbCgpKSB7CisgICAgICAgIHNldFN0cmluZyhT
dHJpbmcoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBWOFBh
cmFtZXRlckJhc2U6OnByZXBhcmVCYXNlKCk7Cit9CisKK3RlbXBsYXRlPD4gaW5saW5lIGJvb2wg
VjhQYXJhbWV0ZXI8V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrPjo6cHJlcGFyZSgpCit7CisgICAg
aWYgKG9iamVjdCgpLklzRW1wdHkoKSB8fCBvYmplY3QoKS0+SXNOdWxsKCkgfHwgb2JqZWN0KCkt
PklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgc2V0U3RyaW5nKFN0cmluZygpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIFY4UGFyYW1ldGVyQmFzZTo6cHJlcGFy
ZUJhc2UoKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFY4
U3RyaW5nUmVzb3VyY2VfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>