<?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>94465</bug_id>
          
          <creation_ts>2012-08-20 04:46:22 -0700</creation_ts>
          <short_desc>ElementAttributeData: Use subclasses to manage varying object layouts.</short_desc>
          <delta_ts>2012-09-12 04:12:08 -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>DOM</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>96326</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>eric</cc>
    
    <cc>jochen</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>699401</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-08-20 04:46:22 -0700</bug_when>
    <thetext>There&apos;s a bunch of memory optimizations we can do for ElementAttributeData, but it&apos;s going to get pretty dirty.
Let&apos;s start out by switching to a scheme where we use subclasses and casting to manage the (currently 2) different object layouts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699414</commentid>
    <comment_count>1</comment_count>
      <attachid>159398</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-08-20 05:14:46 -0700</bug_when>
    <thetext>Created attachment 159398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699426</commentid>
    <comment_count>2</comment_count>
      <attachid>159398</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-08-20 05:33:50 -0700</bug_when>
    <thetext>Comment on attachment 159398
Patch

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

&gt; Source/WebCore/dom/Element.cpp:802
&gt; -    m_attributeData = ElementAttributeData::createImmutable(filteredAttributes);
&gt; +    m_attributeData = ElementAttributeData::createFixedSize(filteredAttributes);

Immutability offers possibility for sharing so it might make sense to keep that concept.

&gt; Source/WebCore/dom/ElementAttributeData.cpp:229
&gt; +    static_cast&lt;VariableSizeElementAttributeData*&gt;(this)-&gt;m_attributeVector.append(attribute);

You should add RenderTree style casting functions, asVariableSize()/asFixedSize() or similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699438</commentid>
    <comment_count>3</comment_count>
      <attachid>159398</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-20 05:55:15 -0700</bug_when>
    <thetext>Comment on attachment 159398
Patch

Attachment 159398 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13530938</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699583</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-08-20 09:13:06 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 159398 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159398&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Element.cpp:802
&gt; &gt; -    m_attributeData = ElementAttributeData::createImmutable(filteredAttributes);
&gt; &gt; +    m_attributeData = ElementAttributeData::createFixedSize(filteredAttributes);
&gt; 
&gt; Immutability offers possibility for sharing so it might make sense to keep that concept.

That&apos;s a very cool story actually, bro. Putting this on hold while I investigate attribute sharing..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715673</commentid>
    <comment_count>5</comment_count>
      <attachid>163027</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-09-09 20:09:08 -0700</bug_when>
    <thetext>Created attachment 163027
Patch II: Back from the Dead

Okay, now that ElementAttributeData sharing is implemented, let&apos;s do this to get rid of the heap allocation (and indirection) for mutable ElementAttributeData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715682</commentid>
    <comment_count>6</comment_count>
      <attachid>163027</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-09 20:42:23 -0700</bug_when>
    <thetext>Comment on attachment 163027
Patch II: Back from the Dead

Attachment 163027 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13796711</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>715832</commentid>
    <comment_count>7</comment_count>
      <attachid>163027</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-09-10 01:43:45 -0700</bug_when>
    <thetext>Comment on attachment 163027
Patch II: Back from the Dead

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

Nice, makes the whole thing more comprehensible. r=me.

&gt; Source/WebCore/dom/ElementAttributeData.cpp:87
&gt; +PassRefPtr&lt;ElementAttributeData&gt; ElementAttributeData::makeMutable() const
&gt; +{
&gt; +    ASSERT(!isMutable());
&gt; +    return adoptRef(new MutableElementAttributeData(asImmutableElementAttributeData()));
&gt;  }

makeMutableCopy() perhaps?

&gt; Source/WebCore/dom/ElementAttributeData.cpp:231
&gt; -    m_mutableAttributeVector-&gt;append(attribute);
&gt; +    asMutableElementAttributeData().m_attributeVector.append(attribute);

mutableAttributeVector()/immutableAttributeArray() helpers would reduce repetition of the casting function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716534</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-09-10 14:43:57 -0700</bug_when>
    <thetext>Committed r128109: &lt;http://trac.webkit.org/changeset/128109&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716560</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-10 15:00:10 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 96326</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717549</commentid>
    <comment_count>10</comment_count>
      <attachid>163436</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-09-11 14:23:52 -0700</bug_when>
    <thetext>Created attachment 163436
Patch III: Revenge of the reinterpret_cast</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717701</commentid>
    <comment_count>11</comment_count>
      <attachid>163436</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 16:25:49 -0700</bug_when>
    <thetext>Comment on attachment 163436
Patch III: Revenge of the reinterpret_cast

Clearing flags on attachment: 163436

Committed r128239: &lt;http://trac.webkit.org/changeset/128239&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717702</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-11 16:25:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718169</commentid>
    <comment_count>13</comment_count>
      <attachid>163436</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-09-12 04:12:08 -0700</bug_when>
    <thetext>Comment on attachment 163436
Patch III: Revenge of the reinterpret_cast

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

&gt; Source/WebCore/dom/ElementAttributeData.h:144
&gt; +    void* m_attributeArray;

Why oh why?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159398</attachid>
            <date>2012-08-20 05:14:46 -0700</date>
            <delta_ts>2012-09-09 20:09:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94465.diff</filename>
            <type>text/plain</type>
            <size>22139</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNDBlNjA4Li4xYTdjY2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTItMDgtMjAgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOiBVc2Ugc3ViY2xhc3NlcyB0byBtYW5hZ2UgdmFyeWlu
ZyBvYmplY3QgbGF5b3V0cy4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvOTQ0NjU+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHR3byBF
bGVtZW50QXR0cmlidXRlRGF0YSBzdWJjbGFzc2VzOgorCisgICAgICAgICAgICAtIEZpeGVkU2l6
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhCisgICAgICAgICAgICAtIFZhcmlhYmxlU2l6ZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhCisKKyAgICAgICAgVGhlIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptX2lzRml4
ZWRTaXplIGJpdCBkZXRlcm1pbmVzIHdoaWNoIHN1YmNsYXNzIHRvIGNhc3QgdG8gd2hlbgorICAg
ICAgICBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSBzdG9yYWdlLgorCisgICAgICAgIFRoaXMgaXMg
Y2xlYW51cCB3b3JrIGluIHByZXBhcmF0aW9uIGZvciBkb2luZyBtb3JlIHNwZWNpYWxpemVkIG9i
amVjdCBsYXlvdXRzLiBBbHNvIHN3aXRjaGluZworICAgICAgICB0aGUgdGVybWlub2xvZ3kgZnJv
bSBtdXRhYmxlIHZzIGltbXV0YWJsZSBFbGVtZW50QXR0cmlidXRlRGF0YSB0byBmaXhlZC1zaXpl
IHZzIHZhcmlhYmxlLXNpemUKKyAgICAgICAgc2luY2UgdGhhdCdzIHJlYWxseSB0aGUgaW1wb3J0
YW50IGRpZmZlcmVuY2UuCisKKyAgICAgICAgQWRkZWQgYSBXVEY6OmRlbGV0ZU93bmVkUHRyKEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKikgc3BlY2lhbGl6YXRpb24gc28gdGhhdCB0aGUgYXBwcm9wcmlh
dGUKKyAgICAgICAgc3ViY2xhc3MgZGVzdHJ1Y3RvciBpcyBjYWxsZWQuCisKKyAgICAgICAgRmlu
YWxseSwgdGhpcyBwYXRjaCByZW1vdmVzIG9uZSBzdGVwIG9mIGluZGlyZWN0aW9uIGluIHRoZSB2
YXJpYWJsZS1zaXplIGNhc2UsIHNpbmNlIHRoZQorICAgICAgICBWZWN0b3I8QXR0cmlidXRlLCA0
PiBpcyBubyBsb25nZXIgaGVhcC1hbGxvY2F0ZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5p
bjoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNyZWF0
ZU11dGFibGVBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6bXV0YWJsZUF0dHJpYnV0ZURhdGEpOgorICAgICAgICAqIGRv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0
cmlidXRlRGF0YTo6Y3JlYXRlRml4ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0
ZURhdGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpeGVkU2l6
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpGaXhlZFNpemVFbGVtZW50QXR0cmlidXRlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaXhlZFNpemVFbGVtZW50QXR0cmlidXRlRGF0YTo6fkZpeGVkU2l6
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjptYWtlVmFyaWFibGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlZhcmlhYmxlU2l6
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpWYXJpYWJsZVNpemVFbGVtZW50QXR0cmlidXRlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6ZW5zdXJlSW5saW5lU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZU11dGFi
bGVJbmxpbmVTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6
YWRkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpy
ZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6
OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpjbG9uZURhdGFGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpjbGVhckF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0
ZURhdGE6OnJlcGxhY2VBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRl
RGF0YS5oOgorICAgICAgICAoRWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmlzRml4ZWRTaXplKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRml4ZWRTaXplRWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoVmFy
aWFibGVTaXplRWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6VmFyaWFi
bGVTaXplRWxlbWVudEF0dHJpYnV0ZURhdGE6OlZhcmlhYmxlU2l6ZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0dHJpYnV0ZUl0ZW0pOgor
ICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6V2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURh
dGEpOgorCiAyMDEyLTA4LTE5ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGxvYWQgbmV0d29yayBwYW5lbCBsYXppbHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KaW5kZXggNTk1NTE2Mi4uZDk2OGE0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KQEAgLTIzMCw2ICsyMzAsNyBAQCBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlND
OUV4ZWNTdGF0ZUVQTlNfMTdKU0RPTUdsb2JhbE9iamVjdEVQTlNfNE5vZGVFCiBfX1pON1dlYkNv
cmUxM2RpcmVjdG9yeU5hbWVFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxM3RvSFRNTEVs
ZW1lbnRFUE5TXzIxRm9ybUFzc29jaWF0ZWRFbGVtZW50RQogX19aTjdXZWJDb3JlMTN0b0pTRE9N
V2luZG93RU4zSlNDN0pTVmFsdWVFCitfX1pON1dlYkNvcmUxM1F1YWxpZmllZE5hbWVEMUV2CiBf
X1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMTJyZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVkUmVz
b3VyY2VDbGllbnRFCiBfX1pON1dlYkNvcmUxNENhY2hlZFJlc291cmNlMTZ1bnJlZ2lzdGVySGFu
ZGxlRVBOU18yNENhY2hlZFJlc291cmNlSGFuZGxlQmFzZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVk
UmVzb3VyY2U5YWRkQ2xpZW50RVBOU18yMENhY2hlZFJlc291cmNlQ2xpZW50RQpAQCAtNTM4LDYg
KzUzOSw3IEBAIF9fWk43V2ViQ29yZTIwVXNlckdlc3R1cmVJbmRpY2F0b3JDMUVOU18yNlByb2Nl
c3NpbmdVc2VyR2VzdHVyZVN0YXRlRQogX19aTjdXZWJDb3JlMjBVc2VyR2VzdHVyZUluZGljYXRv
ckQxRXYKIF9fWk43V2ViQ29yZTIwbWFrZVJHQkEzMkZyb21GbG9hdHNFZmZmZgogX19aTjdXZWJD
b3JlMjBwcm90b2NvbElzSmF2YVNjcmlwdEVSS04zV1RGNlN0cmluZ0UKK19fWk43V2ViQ29yZTIw
U3BhY2VTcGxpdFN0cmluZ0RhdGFEMUV2CiBfX1pON1dlYkNvcmUyMUJhY2tGb3J3YXJkQ29udHJv
bGxlcjExaXRlbUF0SW5kZXhFaQogX19aTjdXZWJDb3JlMjFNZW1vcnlQcmVzc3VyZUhhbmRsZXI3
aW5zdGFsbEV2CiBfX1pON1dlYkNvcmUyMVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0ZGlzYW1iaWd1
YXRlS2V5RG93bkV2ZW50RU5TXzEzUGxhdGZvcm1FdmVudDRUeXBlRWIKQEAgLTYyNSw2ICs2Mjcs
NyBAQCBfX1pON1dlYkNvcmUyN0RldmljZU9yaWVudGF0aW9uQ2xpZW50TW9ja0MxRXYKIF9fWk43
V2ViQ29yZTI3c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzRXYKIF9fWk43V2ViQ29yZTI4ZW5j
b2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI4
cmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZlckVQdgorX19aTjdXZWJDb3JlMjlGaXhlZFNpemVF
bGVtZW50QXR0cmlidXRlRGF0YUQxRXYKIF9fWk43V2ViQ29yZTI5aXNDaGFyYWN0ZXJTbWFydFJl
cGxhY2VFeGVtcHRFaWIKIF9fWk43V2ViQ29yZTMwaG9zdE5hbWVOZWVkc0RlY29kaW5nV2l0aFJh
bmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKIF9fWk43V2ViQ29yZTMwaG9zdE5hbWVOZWVkc0VuY29k
aW5nV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRl
eCAzYThkMDI5Li43MTgyYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC03OTksNyArNzk5
LDcgQEAgdm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRy
aWJ1dGU+JiBhdHRyaWJ1dGVWZWN0b3IsIEZyYWcKICAgICAgICAgfQogICAgIH0KIAotICAgIG1f
YXR0cmlidXRlRGF0YSA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFibGUoZmls
dGVyZWRBdHRyaWJ1dGVzKTsKKyAgICBtX2F0dHJpYnV0ZURhdGEgPSBFbGVtZW50QXR0cmlidXRl
RGF0YTo6Y3JlYXRlRml4ZWRTaXplKGZpbHRlcmVkQXR0cmlidXRlcyk7CiAKICAgICAvLyBJdGVy
YXRlIG92ZXIgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHdlIGFscmVhZHkgaGF2ZSBvbiB0aGUgc3Rh
Y2sgaW4gY2FzZQogICAgIC8vIGF0dHJpYnV0ZUNoYW5nZWQgbXV0YXRlcyBtX2F0dHJpYnV0ZURh
dGEuCkBAIC0yMjE5LDcgKzIyMTksNyBAQCB2b2lkIEVsZW1lbnQ6OmNyZWF0ZU11dGFibGVBdHRy
aWJ1dGVEYXRhKCkKICAgICBpZiAoIW1fYXR0cmlidXRlRGF0YSkKICAgICAgICAgbV9hdHRyaWJ1
dGVEYXRhID0gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZSgpOwogICAgIGVsc2UKLSAgICAg
ICAgbV9hdHRyaWJ1dGVEYXRhID0gbV9hdHRyaWJ1dGVEYXRhLT5tYWtlTXV0YWJsZSgpOworICAg
ICAgICBtX2F0dHJpYnV0ZURhdGEgPSBtX2F0dHJpYnV0ZURhdGEtPm1ha2VWYXJpYWJsZVNpemUo
KTsKIH0KIAogI2lmIEVOQUJMRShVTkRPX01BTkFHRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBk
MDU2YTlkLi5mNmE1OTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTc1MSw3ICs3NTEsNyBAQCBp
bmxpbmUgYm9vbCBFbGVtZW50OjpoYXNDbGFzcygpIGNvbnN0CiAKIGlubGluZSBFbGVtZW50QXR0
cmlidXRlRGF0YSogRWxlbWVudDo6bXV0YWJsZUF0dHJpYnV0ZURhdGEoKQogewotICAgIGlmICgh
YXR0cmlidXRlRGF0YSgpIHx8ICFhdHRyaWJ1dGVEYXRhKCktPmlzTXV0YWJsZSgpKQorICAgIGlm
ICghYXR0cmlidXRlRGF0YSgpIHx8IGF0dHJpYnV0ZURhdGEoKS0+aXNGaXhlZFNpemUoKSkKICAg
ICAgICAgY3JlYXRlTXV0YWJsZUF0dHJpYnV0ZURhdGEoKTsKICAgICByZXR1cm4gbV9hdHRyaWJ1
dGVEYXRhLmdldCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRB
dHRyaWJ1dGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0
YS5jcHAKaW5kZXggYjc0M2M1ZS4uMDcyOTg2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudEF0dHJpYnV0ZURhdGEuY3BwCkBAIC0zMyw1NSArMzMsNTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QYXNzT3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmli
dXRlRGF0YTo6Y3JlYXRlSW1tdXRhYmxlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1
dGVzKQorUGFzc093blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmNyZWF0ZUZpeGVkU2l6ZShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykK
IHsKLSAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNpemVvZihFbGVtZW50QXR0cmli
dXRlRGF0YSkgLSBzaXplb2Yodm9pZCopICsgc2l6ZW9mKEF0dHJpYnV0ZSkgKiBhdHRyaWJ1dGVz
LnNpemUoKSk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyAoc2xvdCkgRWxlbWVudEF0dHJpYnV0
ZURhdGEoYXR0cmlidXRlcykpOworICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6
ZW9mKEZpeGVkU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKSArIHNpemVvZihBdHRyaWJ1dGUpICog
YXR0cmlidXRlcy5zaXplKCkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgKHNsb3QpIEZpeGVk
U2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGF0dHJpYnV0ZXMpKTsKK30KKworUGFzc093blB0cjxF
bGVtZW50QXR0cmlidXRlRGF0YT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZSgpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBWYXJpYWJsZVNpemVFbGVtZW50QXR0cmlidXRlRGF0YSk7
CiB9CiAKIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpFbGVtZW50QXR0cmlidXRlRGF0YSgpCi0gICAg
OiBtX2lzTXV0YWJsZSh0cnVlKQotICAgICwgbV9hcnJheVNpemUoMCkKLSAgICAsIG1fbXV0YWJs
ZUF0dHJpYnV0ZVZlY3RvcihuZXcgVmVjdG9yPEF0dHJpYnV0ZSwgND4pCisgICAgOiBtX2lzRml4
ZWRTaXplKGZhbHNlKQorICAgICwgbV9maXhlZEFycmF5U2l6ZSgwKQogewogfQogCi1FbGVtZW50
QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0
ZT4mIGF0dHJpYnV0ZXMpCi0gICAgOiBtX2lzTXV0YWJsZShmYWxzZSkKLSAgICAsIG1fYXJyYXlT
aXplKGF0dHJpYnV0ZXMuc2l6ZSgpKQorRml4ZWRTaXplRWxlbWVudEF0dHJpYnV0ZURhdGE6OkZp
eGVkU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRy
aWJ1dGVzKQogewotICAgIEF0dHJpYnV0ZSogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxBdHRy
aWJ1dGUqPigmbV9hdHRyaWJ1dGVzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0
cmlidXRlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbmV3ICgmYnVmZmVyW2ldKSBBdHRyaWJ1dGUo
YXR0cmlidXRlc1tpXSk7Ci19Ci0KLUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpFbGVtZW50QXR0cmli
dXRlRGF0YShjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXIpCi0gICAgOiBtX2lubGlu
ZVN0eWxlRGVjbChvdGhlci5tX2lubGluZVN0eWxlRGVjbCkKLSAgICAsIG1fYXR0cmlidXRlU3R5
bGUob3RoZXIubV9hdHRyaWJ1dGVTdHlsZSkKLSAgICAsIG1fY2xhc3NOYW1lcyhvdGhlci5tX2Ns
YXNzTmFtZXMpCi0gICAgLCBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uKG90aGVyLm1faWRGb3JTdHls
ZVJlc29sdXRpb24pCi0gICAgLCBtX2lzTXV0YWJsZSh0cnVlKQotICAgICwgbV9hcnJheVNpemUo
MCkKLSAgICAsIG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcihuZXcgVmVjdG9yPEF0dHJpYnV0ZSwg
ND4pCisgICAgbV9pc0ZpeGVkU2l6ZSA9IHRydWU7CisgICAgbV9maXhlZEFycmF5U2l6ZSA9IGF0
dHJpYnV0ZXMuc2l6ZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZml4ZWRB
cnJheVNpemU7ICsraSkKKyAgICAgICAgbmV3ICgmbV9hdHRyaWJ1dGVBcnJheVtpXSkgQXR0cmli
dXRlKGF0dHJpYnV0ZXNbaV0pOworfQorCitGaXhlZFNpemVFbGVtZW50QXR0cmlidXRlRGF0YTo6
fkZpeGVkU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKIHsKLSAgICAvLyBUaGlzIGNvcHkgY29u
c3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBtYWtlTXV0YWJsZSgpIHRvIGdvIGZyb20g
aW1tdXRhYmxlIHRvIG11dGFibGUuCi0gICAgQVNTRVJUKCFvdGhlci5tX2lzTXV0YWJsZSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZml4ZWRBcnJheVNpemU7ICsraSkKKyAgICAg
ICAgbV9hdHRyaWJ1dGVBcnJheVtpXS5+QXR0cmlidXRlKCk7Cit9CiAKLSAgICBjb25zdCBBdHRy
aWJ1dGUqIG90aGVyQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdHRyaWJ1dGUqPigm
b3RoZXIubV9hdHRyaWJ1dGVzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3RoZXIu
bV9hcnJheVNpemU7ICsraSkKLSAgICAgICAgbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT5hcHBl
bmQob3RoZXJCdWZmZXJbaV0pOworUGFzc093blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gRWxl
bWVudEF0dHJpYnV0ZURhdGE6Om1ha2VWYXJpYWJsZVNpemUoKSBjb25zdAoreworICAgIEFTU0VS
VChpc0ZpeGVkU2l6ZSgpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFZhcmlhYmxlU2l6ZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IEZpeGVkU2l6ZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhJj4oKnRoaXMpKSk7CiB9CiAKLUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp+RWxlbWVu
dEF0dHJpYnV0ZURhdGEoKQorVmFyaWFibGVTaXplRWxlbWVudEF0dHJpYnV0ZURhdGE6OlZhcmlh
YmxlU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEZpeGVkU2l6ZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhJiBvdGhlcikKIHsKLSAgICBpZiAoaXNNdXRhYmxlKCkpIHsKLSAgICAgICAgQVNTRVJU
KCFtX2FycmF5U2l6ZSk7Ci0gICAgICAgIGRlbGV0ZSBtX211dGFibGVBdHRyaWJ1dGVWZWN0b3I7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQXR0cmlidXRlKiBidWZmZXIgPSByZWludGVycHJldF9j
YXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZXMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9hcnJheVNpemU7ICsraSkKLSAgICAgICAgICAgIGJ1ZmZlcltpXS5+QXR0cmli
dXRlKCk7Ci0gICAgfQorICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBiYXNlT3RoZXIg
PSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSY+KG90aGVyKTsKKworICAg
IG1faW5saW5lU3R5bGVEZWNsID0gYmFzZU90aGVyLm1faW5saW5lU3R5bGVEZWNsOworICAgIG1f
YXR0cmlidXRlU3R5bGUgPSBiYXNlT3RoZXIubV9hdHRyaWJ1dGVTdHlsZTsKKyAgICBtX2NsYXNz
TmFtZXMgPSBiYXNlT3RoZXIubV9jbGFzc05hbWVzOworICAgIG1faWRGb3JTdHlsZVJlc29sdXRp
b24gPSBiYXNlT3RoZXIubV9pZEZvclN0eWxlUmVzb2x1dGlvbjsKKworICAgIG1fYXR0cmlidXRl
VmVjdG9yLnJlc2VydmVDYXBhY2l0eShiYXNlT3RoZXIubV9maXhlZEFycmF5U2l6ZSk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2VPdGhlci5tX2ZpeGVkQXJyYXlTaXplOyArK2kp
CisgICAgICAgIG1fYXR0cmlidXRlVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChvdGhlci5tX2F0dHJp
YnV0ZUFycmF5W2ldKTsKIH0KIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEF0dHI+ID4gQXR0ckxp
c3Q7CkBAIC0xODEsNyArMTgyLDcgQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3Zl
QXR0cihFbGVtZW50KiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW0KIAogU3R5bGVQ
cm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmVuc3VyZUlubGluZVN0eWxlKFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKKyAgICBBU1NF
UlQoIWlzRml4ZWRTaXplKCkpOwogICAgIGlmICghbV9pbmxpbmVTdHlsZURlY2wpIHsKICAgICAg
ICAgQVNTRVJUKGVsZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKTsKICAgICAgICAgbV9pbmxpbmVT
dHlsZURlY2wgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoc3RyaWN0VG9DU1NQYXJzZXJNb2Rl
KGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5RdWly
a3NNb2RlKCkpKTsKQEAgLTE5MSw3ICsxOTIsNyBAQCBTdHlsZVByb3BlcnR5U2V0KiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6ZW5zdXJlSW5saW5lU3R5bGUoU3R5bGVkRWxlbWVudCogZWxlbWVudAog
CiBTdHlsZVByb3BlcnR5U2V0KiBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZW5zdXJlTXV0YWJsZUlu
bGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKKyAgICBBU1NFUlQoIWlzRml4ZWRTaXplKCkpOwogICAgIGlmIChtX2lubGluZVN0eWxl
RGVjbCAmJiAhbV9pbmxpbmVTdHlsZURlY2wtPmlzTXV0YWJsZSgpKSB7CiAgICAgICAgIG1faW5s
aW5lU3R5bGVEZWNsID0gbV9pbmxpbmVTdHlsZURlY2wtPmNvcHkoKTsKICAgICAgICAgcmV0dXJu
IG1faW5saW5lU3R5bGVEZWNsLmdldCgpOwpAQCAtMjIwLDEyICsyMjEsMTIgQEAgdm9pZCBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6ZGVzdHJveUlubGluZVN0eWxlKFN0eWxlZEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CiAKIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmFkZEF0dHJpYnV0ZShjb25z
dCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgRWxlbWVudCogZWxlbWVudCwgU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlIGluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogewotICAg
IEFTU0VSVChpc011dGFibGUoKSk7CisgICAgQVNTRVJUKCFpc0ZpeGVkU2l6ZSgpKTsKIAogICAg
IGlmIChlbGVtZW50ICYmIGluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlID09IE5vdElu
U3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogICAgICAgICBlbGVtZW50LT53aWxsTW9k
aWZ5QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lKCksIG51bGxBdG9tLCBhdHRyaWJ1dGUudmFsdWUo
KSk7CiAKLSAgICBtX211dGFibGVBdHRyaWJ1dGVWZWN0b3ItPmFwcGVuZChhdHRyaWJ1dGUpOwor
ICAgIHN0YXRpY19jYXN0PFZhcmlhYmxlU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcykt
Pm1fYXR0cmlidXRlVmVjdG9yLmFwcGVuZChhdHRyaWJ1dGUpOwogCiAgICAgaWYgKGVsZW1lbnQg
JiYgaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgPT0gTm90SW5TeW5jaHJvbml6YXRp
b25PZkxhenlBdHRyaWJ1dGUpCiAgICAgICAgIGVsZW1lbnQtPmRpZEFkZEF0dHJpYnV0ZShhdHRy
aWJ1dGUpOwpAQCAtMjMzLDEwICsyMzQsMTAgQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6
YWRkQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBFbGVtZW50KiBlbGUKIAog
dm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCwg
RWxlbWVudCogZWxlbWVudCwgU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIGluU3luY2hy
b25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogewotICAgIEFTU0VSVChpc011dGFibGUoKSk7Cisg
ICAgQVNTRVJUKCFpc0ZpeGVkU2l6ZSgpKTsKICAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7
CiAKLSAgICBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvci0+
YXQoaW5kZXgpOworICAgIEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8VmFyaWFi
bGVTaXplRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3IuYXQo
aW5kZXgpOwogICAgIFF1YWxpZmllZE5hbWUgbmFtZSA9IGF0dHJpYnV0ZS5uYW1lKCk7CiAKICAg
ICBpZiAoZWxlbWVudCAmJiBpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSA9PSBOb3RJ
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkKQEAgLTI0NSw3ICsyNDYsNyBAQCB2b2lk
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZW1vdmVBdHRyaWJ1dGUoc2l6ZV90IGluZGV4LCBFbGVt
ZW50KiBlbGVtZW50LCBTeW5jaAogICAgIGlmIChSZWZQdHI8QXR0cj4gYXR0ciA9IGF0dHJJZkV4
aXN0cyhlbGVtZW50LCBuYW1lKSkKICAgICAgICAgYXR0ci0+ZGV0YWNoRnJvbUVsZW1lbnRXaXRo
VmFsdWUoYXR0cmlidXRlLnZhbHVlKCkpOwogCi0gICAgbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9y
LT5yZW1vdmUoaW5kZXgpOworICAgIHN0YXRpY19jYXN0PFZhcmlhYmxlU2l6ZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yLnJlbW92ZShpbmRleCk7CiAKICAg
ICBpZiAoZWxlbWVudCAmJiBpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSA9PSBOb3RJ
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkKICAgICAgICAgZWxlbWVudC0+ZGlkUmVt
b3ZlQXR0cmlidXRlKG5hbWUpOwpAQCAtMjkxLDEwICsyOTIsMTAgQEAgdm9pZCBFbGVtZW50QXR0
cmlidXRlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykKICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcihtX2F0dHJpYnV0ZVN0eWxl
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2NsYXNzTmFtZXMpOwogICAgIGluZm8uYWRkTWVtYmVy
KG1faWRGb3JTdHlsZVJlc29sdXRpb24pOwotICAgIGlmIChtX2lzTXV0YWJsZSkKLSAgICAgICAg
aW5mby5hZGRWZWN0b3JQdHIobV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yKTsKKyAgICBpZiAobV9p
c0ZpeGVkU2l6ZSkKKyAgICAgICAgaW5mby5hZGRSYXdCdWZmZXIoc3RhdGljX2Nhc3Q8Y29uc3Qg
Rml4ZWRTaXplRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVBcnJheSwg
bV9maXhlZEFycmF5U2l6ZSAqIHNpemVvZihBdHRyaWJ1dGUpKTsKICAgICBlbHNlCi0gICAgICAg
IGluZm8uYWRkUmF3QnVmZmVyKG1fYXR0cmlidXRlcywgbV9hcnJheVNpemUgKiBzaXplb2YoQXR0
cmlidXRlKSk7CisgICAgICAgIGluZm8uYWRkVmVjdG9yKHN0YXRpY19jYXN0PGNvbnN0IFZhcmlh
YmxlU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW4gPSBsZW5ndGgoKTsgaSA8IGxlbjsgaSsrKQog
ICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcigqYXR0cmlidXRlSXRlbShpKSk7CiB9
CkBAIC0zMjAsOCArMzIxLDggQEAgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRy
aWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShjb25zdCBBdG9taWNTdHJpbmcmIG4KIAogdm9pZCBFbGVt
ZW50QXR0cmlidXRlRGF0YTo6Y2xvbmVEYXRhRnJvbShjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0
YSYgc291cmNlRGF0YSwgY29uc3QgRWxlbWVudCYgc291cmNlRWxlbWVudCwgRWxlbWVudCYgdGFy
Z2V0RWxlbWVudCkKIHsKLSAgICAvLyBGSVhNRTogQ2xvbmVkIGVsZW1lbnRzIGNvdWxkIHN0YXJ0
IG91dCB3aXRoIGltbXV0YWJsZSBhdHRyaWJ1dGUgZGF0YS4KLSAgICBBU1NFUlQoaXNNdXRhYmxl
KCkpOworICAgIC8vIEZJWE1FOiBDbG9uZWQgZWxlbWVudHMgY291bGQgc3RhcnQgb3V0IHdpdGgg
Zml4ZWQtc2l6ZSBhdHRyaWJ1dGUgZGF0YS4KKyAgICBBU1NFUlQoIWlzRml4ZWRTaXplKCkpOwog
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJRCA9IHRhcmdldEVsZW1lbnQuZ2V0SWRBdHRy
aWJ1dGUoKTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lEID0gc291cmNlRWxlbWVudC5n
ZXRJZEF0dHJpYnV0ZSgpOwpAQCAtMzM3LDE4ICszMzgsMTYgQEAgdm9pZCBFbGVtZW50QXR0cmli
dXRlRGF0YTo6Y2xvbmVEYXRhRnJvbShjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSYgc291cmNl
RGF0YSwKIAogICAgIGNsZWFyQXR0cmlidXRlcygmdGFyZ2V0RWxlbWVudCk7CiAKLSAgICBpZiAo
c291cmNlRGF0YS5pc011dGFibGUoKSkKLSAgICAgICAgKm1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rv
ciA9ICpzb3VyY2VEYXRhLm1fbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcjsKKyAgICBpZiAoIXNvdXJj
ZURhdGEuaXNGaXhlZFNpemUoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8VmFyaWFibGVTaXplRWxl
bWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3IgPSBzdGF0aWNfY2Fz
dDxjb25zdCBWYXJpYWJsZVNpemVFbGVtZW50QXR0cmlidXRlRGF0YSY+KHNvdXJjZURhdGEpLm1f
YXR0cmlidXRlVmVjdG9yOwogICAgIGVsc2UgewotICAgICAgICBBU1NFUlQobV9tdXRhYmxlQXR0
cmlidXRlVmVjdG9yLT5pc0VtcHR5KCkpOwotICAgICAgICBtX211dGFibGVBdHRyaWJ1dGVWZWN0
b3ItPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc291cmNlRGF0YS5tX2FycmF5U2l6ZSk7Ci0gICAg
ICAgIGNvbnN0IEF0dHJpYnV0ZSogc291cmNlQnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBBdHRyaWJ1dGUqPigmc291cmNlRGF0YS5tX2F0dHJpYnV0ZXMpOwotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc291cmNlRGF0YS5tX2FycmF5U2l6ZTsgKytpKQotICAgICAgICAg
ICAgbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT51bmNoZWNrZWRBcHBlbmQoc291cmNlQnVmZmVy
W2ldKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8VmFyaWFibGVTaXplRWxlbWVudEF0dHJpYnV0ZURh
dGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzb3Vy
Y2VEYXRhLm1fZml4ZWRBcnJheVNpemUpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc291cmNlRGF0YS5tX2ZpeGVkQXJyYXlTaXplOyArK2kpCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxWYXJpYWJsZVNpemVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0
ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc3RhdGljX2Nhc3Q8Y29uc3QgRml4ZWRTaXplRWxlbWVu
dEF0dHJpYnV0ZURhdGEmPihzb3VyY2VEYXRhKS5tX2F0dHJpYnV0ZUFycmF5W2ldKTsKICAgICB9
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvci0+
YXQoaSk7CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8
VmFyaWFibGVTaXplRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0
b3IuYXQoaSk7CiAgICAgICAgIGlmICh0YXJnZXRFbGVtZW50LmlzU3R5bGVkRWxlbWVudCgpICYm
IGF0dHJpYnV0ZS5uYW1lKCkgPT0gSFRNTE5hbWVzOjpzdHlsZUF0dHIpIHsKICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQmPih0YXJnZXRFbGVtZW50KS5zdHlsZUF0dHJpYnV0
ZUNoYW5nZWQoYXR0cmlidXRlLnZhbHVlKCksIFN0eWxlZEVsZW1lbnQ6OkRvTm90UmVwYXJzZVN0
eWxlQXR0cmlidXRlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzY2LDIzICszNjUsMjMg
QEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y2xvbmVEYXRhRnJvbShjb25zdCBFbGVtZW50
QXR0cmlidXRlRGF0YSYgc291cmNlRGF0YSwKIAogdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6
Y2xlYXJBdHRyaWJ1dGVzKEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKKyAgICBBU1NFUlQoIWlzRml4ZWRTaXplKCkpOwogCiAgICAgaWYgKGVsZW1lbnQtPmhh
c0F0dHJMaXN0KCkpCiAgICAgICAgIGRldGFjaEF0dHJPYmplY3RzRnJvbUVsZW1lbnQoZWxlbWVu
dCk7CiAKICAgICBjbGVhckNsYXNzKCk7Ci0gICAgbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT5j
bGVhcigpOworICAgIHN0YXRpY19jYXN0PFZhcmlhYmxlU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
Kj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yLmNsZWFyKCk7CiB9CiAKIHZvaWQgRWxlbWVudEF0
dHJpYnV0ZURhdGE6OnJlcGxhY2VBdHRyaWJ1dGUoc2l6ZV90IGluZGV4LCBjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSwgRWxlbWVudCogZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoaXNNdXRhYmxl
KCkpOworICAgIEFTU0VSVCghaXNGaXhlZFNpemUoKSk7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwog
ICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKIAotICAgIGVsZW1lbnQtPndpbGxNb2RpZnlB
dHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUoKSwgbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT5hdChp
bmRleCkudmFsdWUoKSwgYXR0cmlidXRlLnZhbHVlKCkpOwotICAgICgqbV9tdXRhYmxlQXR0cmli
dXRlVmVjdG9yKVtpbmRleF0gPSBhdHRyaWJ1dGU7CisgICAgZWxlbWVudC0+d2lsbE1vZGlmeUF0
dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSgpLCBzdGF0aWNfY2FzdDxWYXJpYWJsZVNpemVFbGVtZW50
QXR0cmlidXRlRGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0ZVZlY3Rvci5hdChpbmRleCkudmFsdWUo
KSwgYXR0cmlidXRlLnZhbHVlKCkpOworICAgIHN0YXRpY19jYXN0PFZhcmlhYmxlU2l6ZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yW2luZGV4XSA9IGF0dHJp
YnV0ZTsKICAgICBlbGVtZW50LT5kaWRNb2RpZnlBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAppbmRleCBiOTZiOTViLi5m
ZGVhOWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaApAQCAt
NDIsOSArNDIsOCBAQCBlbnVtIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSB7IE5vdElu
U3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlLCBJblN5bgogY2xhc3MgRWxlbWVudEF0dHJp
YnV0ZURhdGEgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGUoKSB7IHJldHVybiBh
ZG9wdFB0cihuZXcgRWxlbWVudEF0dHJpYnV0ZURhdGEpOyB9Ci0gICAgc3RhdGljIFBhc3NPd25Q
dHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZUltbXV0YWJsZShjb25zdCBWZWN0b3I8QXR0
cmlidXRlPiYpOwotICAgIH5FbGVtZW50QXR0cmlidXRlRGF0YSgpOworICAgIHN0YXRpYyBQYXNz
T3duUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGUoKTsKKyAgICBzdGF0aWMgUGFzc093
blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gY3JlYXRlRml4ZWRTaXplKGNvbnN0IFZlY3RvcjxB
dHRyaWJ1dGU+Jik7CiAKICAgICB2b2lkIGNsZWFyQ2xhc3MoKSB7IG1fY2xhc3NOYW1lcy5jbGVh
cigpOyB9CiAgICAgdm9pZCBzZXRDbGFzcyhjb25zdCBBdG9taWNTdHJpbmcmIGNsYXNzTmFtZSwg
Ym9vbCBzaG91bGRGb2xkQ2FzZSkgY29uc3QgeyBtX2NsYXNzTmFtZXMuc2V0KGNsYXNzTmFtZSwg
c2hvdWxkRm9sZENhc2UpOyB9CkBAIC05NSwxNCArOTQsMjYgQEAgcHVibGljOgogCiAgICAgdm9p
ZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKLXByaXZhdGU6
Ci0gICAgZnJpZW5kIGNsYXNzIEVsZW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIEhUTUxDb25zdHJ1
Y3Rpb25TaXRlOworICAgIGJvb2wgaXNGaXhlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2lzRml4
ZWRTaXplOyB9CiAKK3Byb3RlY3RlZDoKICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSgpOwotICAg
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJik7CiAgICAg
RWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKIAorICAgIG11
dGFibGUgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1faW5saW5lU3R5bGVEZWNsOworICAgIG11
dGFibGUgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1fYXR0cmlidXRlU3R5bGU7CisgICAgbXV0
YWJsZSBTcGFjZVNwbGl0U3RyaW5nIG1fY2xhc3NOYW1lczsKKyAgICBtdXRhYmxlIEF0b21pY1N0
cmluZyBtX2lkRm9yU3R5bGVSZXNvbHV0aW9uOworCisgICAgdW5zaWduZWQgbV9pc0ZpeGVkU2l6
ZSA6IDE7CisgICAgdW5zaWduZWQgbV9maXhlZEFycmF5U2l6ZSA6IDMxOworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBFbGVtZW50OworICAgIGZyaWVuZCBjbGFzcyBIVE1MQ29uc3RydWN0
aW9uU2l0ZTsKKyAgICBmcmllbmQgY2xhc3MgRml4ZWRTaXplRWxlbWVudEF0dHJpYnV0ZURhdGE7
CisgICAgZnJpZW5kIGNsYXNzIFZhcmlhYmxlU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOworCiAg
ICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Ym9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKICAgICBjb25zdCBBdHRyaWJ1dGUqIGdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OwogICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXhT
bG93Q2FzZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSkgY29uc3Q7CkBAIC0xMTAsMjggKzEyMSwzMCBAQCBwcml2YXRlOgogICAgIHZvaWQg
Y2xlYXJBdHRyaWJ1dGVzKEVsZW1lbnQqKTsKICAgICB2b2lkIHJlcGxhY2VBdHRyaWJ1dGUoc2l6
ZV90IGluZGV4LCBjb25zdCBBdHRyaWJ1dGUmLCBFbGVtZW50Kik7CiAKLSAgICBib29sIGlzTXV0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdXRhYmxlOyB9Ci0gICAgUGFzc093blB0cjxFbGVt
ZW50QXR0cmlidXRlRGF0YT4gbWFrZU11dGFibGUoKSBjb25zdCB7IHJldHVybiBhZG9wdFB0cihu
ZXcgRWxlbWVudEF0dHJpYnV0ZURhdGEoKnRoaXMpKTsgfQorICAgIFBhc3NPd25QdHI8RWxlbWVu
dEF0dHJpYnV0ZURhdGE+IG1ha2VWYXJpYWJsZVNpemUoKSBjb25zdDsKK307CisKK2NsYXNzIEZp
eGVkU2l6ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
IHsKK3B1YmxpYzoKKyAgICBGaXhlZFNpemVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBWZWN0
b3I8QXR0cmlidXRlPiYpOworICAgIH5GaXhlZFNpemVFbGVtZW50QXR0cmlidXRlRGF0YSgpOwog
Ci0gICAgbXV0YWJsZSBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9pbmxpbmVTdHlsZURlY2w7
Ci0gICAgbXV0YWJsZSBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9hdHRyaWJ1dGVTdHlsZTsK
LSAgICBtdXRhYmxlIFNwYWNlU3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOwotICAgIG11dGFibGUg
QXRvbWljU3RyaW5nIG1faWRGb3JTdHlsZVJlc29sdXRpb247CisgICAgQXR0cmlidXRlIG1fYXR0
cmlidXRlQXJyYXlbMF07Cit9OwogCi0gICAgdW5zaWduZWQgbV9pc011dGFibGUgOiAxOwotICAg
IHVuc2lnbmVkIG1fYXJyYXlTaXplIDogMzE7CitjbGFzcyBWYXJpYWJsZVNpemVFbGVtZW50QXR0
cmlidXRlRGF0YSA6IHB1YmxpYyBFbGVtZW50QXR0cmlidXRlRGF0YSB7CitwdWJsaWM6CisgICAg
VmFyaWFibGVTaXplRWxlbWVudEF0dHJpYnV0ZURhdGEoKSB7IH0KKyAgICBWYXJpYWJsZVNpemVF
bGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBGaXhlZFNpemVFbGVtZW50QXR0cmlidXRlRGF0YSYp
OwogCi0gICAgdW5pb24gewotICAgICAgICBWZWN0b3I8QXR0cmlidXRlLCA0PiogbV9tdXRhYmxl
QXR0cmlidXRlVmVjdG9yOwotICAgICAgICB2b2lkKiBtX2F0dHJpYnV0ZXM7Ci0gICAgfTsKKyAg
ICBWZWN0b3I8QXR0cmlidXRlLCA0PiBtX2F0dHJpYnV0ZVZlY3RvcjsKIH07CiAKIGlubGluZSBz
aXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGlz
TXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT5zaXpl
KCk7Ci0gICAgcmV0dXJuIG1fYXJyYXlTaXplOworICAgIGlmIChtX2lzRml4ZWRTaXplKQorICAg
ICAgICByZXR1cm4gbV9maXhlZEFycmF5U2l6ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgVmFyaWFibGVTaXplRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVW
ZWN0b3Iuc2l6ZSgpOwogfQogCiBpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0
YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSkKQEAgLTIwMiwxNyArMjE1LDMwIEBAIGlubGluZSBBdHRyaWJ1
dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hCiBpbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6
YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBBU1NFUlQoaW5kZXgg
PCBsZW5ndGgoKSk7Ci0gICAgaWYgKGlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gJm1fbXV0
YWJsZUF0dHJpYnV0ZVZlY3Rvci0+YXQoaW5kZXgpOwotICAgIGNvbnN0IEF0dHJpYnV0ZSogYnVm
ZmVyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVzKTsK
LSAgICByZXR1cm4gJmJ1ZmZlcltpbmRleF07CisgICAgaWYgKG1faXNGaXhlZFNpemUpCisgICAg
ICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8Y29uc3QgRml4ZWRTaXplRWxlbWVudEF0dHJpYnV0ZURh
dGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVBcnJheVtpbmRleF07CisgICAgcmV0dXJuICZzdGF0aWNf
Y2FzdDxjb25zdCBWYXJpYWJsZVNpemVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpLT5tX2F0
dHJpYnV0ZVZlY3Rvci5hdChpbmRleCk7CiB9CiAKIGlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KQogewotICAgIEFTU0VS
VChpc011dGFibGUoKSk7CisgICAgQVNTRVJUKCFtX2lzRml4ZWRTaXplKTsKICAgICBBU1NFUlQo
aW5kZXggPCBsZW5ndGgoKSk7Ci0gICAgcmV0dXJuICZtX211dGFibGVBdHRyaWJ1dGVWZWN0b3It
PmF0KGluZGV4KTsKKyAgICByZXR1cm4gJnN0YXRpY19jYXN0PFZhcmlhYmxlU2l6ZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yLmF0KGluZGV4KTsKK30KKwor
fQorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGUgPD4gaW5saW5lIHZvaWQgZGVsZXRlT3du
ZWRQdHI8V2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE+KFdlYkNvcmU6OkVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBwdHIpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAocHRyLT5pc0ZpeGVkU2l6ZSgpKQorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Rml4ZWRTaXplRWxlbWVudEF0dHJpYnV0ZURhdGEqPihwdHIpOworICAgIGVsc2UKKyAgICAg
ICAgZGVsZXRlIHN0YXRpY19jYXN0PFdlYkNvcmU6OlZhcmlhYmxlU2l6ZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhKj4ocHRyKTsKIH0KIAogfQo=
</data>
<flag name="commit-queue"
          id="169699"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163027</attachid>
            <date>2012-09-09 20:09:08 -0700</date>
            <delta_ts>2012-09-11 14:23:52 -0700</delta_ts>
            <desc>Patch II: Back from the Dead</desc>
            <filename>bug-94465-v2.diff</filename>
            <type>text/plain</type>
            <size>17788</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4MzFjMjRjLi5lZjIwOWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTIg
QEAKIDIwMTItMDktMDkgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCisgICAg
ICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOiBVc2Ugc3ViY2xhc3NlcyB0byBtYW5hZ2UgdmFyeWlu
ZyBvYmplY3QgbGF5b3V0cy4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvOTQ0NjU+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHR3byBF
bGVtZW50QXR0cmlidXRlRGF0YSBzdWJjbGFzc2VzOgorCisgICAgICAgICAgICAtIE11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YQorICAgICAgICAgICAgLSBJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YQorCisgICAgICAgIFRoZSBFbGVtZW50QXR0cmlidXRlRGF0YTo6bV9pc011dGFibGUg
Yml0IGRldGVybWluZXMgd2hpY2ggc3ViY2xhc3MgdG8gY2FzdCB0byB3aGVuIGFjY2Vzc2luZwor
ICAgICAgICB0aGUgYXR0cmlidXRlIHN0b3JhZ2UuIEFkZGVkIGFzTXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhKCkgYW5kIGFzSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKQorICAgICAg
ICBoZWxwZXJzICh3aXRoIGFwcHJvcHJpYXRlIGFzc2VydGlvbnMuKQorCisgICAgICAgIFRoaXMg
cGF0Y2ggcmVtb3ZlcyBvbmUgc3RlcCBvZiBpbmRpcmVjdGlvbiBpbiB0aGUgbXV0YWJsZSBjYXNl
LCBzaW5jZSB0aGUgVmVjdG9yPEF0dHJpYnV0ZT4gaXMgbm8KKyAgICAgICAgbG9uZ2VyIGhlYXAt
YWxsb2NhdGVkLCBidXQgcGFydCBvZiBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEuCisKKyAg
ICAgICAgQWRkZWQgYSBXVEY6OmRlbGV0ZU93bmVkUHRyKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKikg
c3BlY2lhbGl6YXRpb24gc28gdGhhdCB0aGUgYXBwcm9wcmlhdGUgc3ViY2xhc3MKKyAgICAgICAg
ZGVzdHJ1Y3RvciBpcyBjYWxsZWQgZm9yIHRoZXNlIG9iamVjdHMuCisKKyAgICAgICAgKiBXZWJD
b3JlLmV4cC5pbjoKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUltbXV0YWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpFbGVtZW50QXR0cmlidXRlRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6On5JbW11dGFibGVFbGVtZW50QXR0
cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6bWFr
ZU11dGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmFkZEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3Zl
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZXBv
cnRNZW1vcnlVc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6
Y2xvbmVEYXRhRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6
Y2xlYXJBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaDoK
KyAgICAgICAgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjppc011dGFibGUpOgorICAgICAgICAoSW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGEpOgorICAgICAgICAoTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6TXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRh
Ojphc011dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50QXR0cmlidXRlRGF0YTo6YXNJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6bGVuZ3RoKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKToKKworMjAxMi0wOS0w
OSAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CisKICAgICAgICAgRXZlbnRMaXN0
ZW5lck1hcDogVXNlIFZlY3RvciBpbnN0ZWFkIG9mIEhhc2hNYXAgYXMgYmFja2VuZC4KICAgICAg
ICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvNzc5ODI+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXgg
YjQ3NjlmOS4uODgyN2JjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTIzMCw2ICsyMzAsNyBA
QCBfX1pON1dlYkNvcmUxM2NyZWF0ZVdyYXBwZXJFUE4zSlNDOUV4ZWNTdGF0ZUVQTlNfMTdKU0RP
TUdsb2JhbE9iamVjdEVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxM2RpcmVjdG9yeU5hbWVFUktO
M1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxM3RvSFRNTEVsZW1lbnRFUE5TXzIxRm9ybUFzc29j
aWF0ZWRFbGVtZW50RQogX19aTjdXZWJDb3JlMTN0b0pTRE9NV2luZG93RU4zSlNDN0pTVmFsdWVF
CitfX1pON1dlYkNvcmUxM1F1YWxpZmllZE5hbWVEMUV2CiBfX1pON1dlYkNvcmUxNENhY2hlZFJl
c291cmNlMTJyZW1vdmVDbGllbnRFUE5TXzIwQ2FjaGVkUmVzb3VyY2VDbGllbnRFCiBfX1pON1dl
YkNvcmUxNENhY2hlZFJlc291cmNlMTZ1bnJlZ2lzdGVySGFuZGxlRVBOU18yNENhY2hlZFJlc291
cmNlSGFuZGxlQmFzZUUKIF9fWk43V2ViQ29yZTE0Q2FjaGVkUmVzb3VyY2U5YWRkQ2xpZW50RVBO
U18yMENhY2hlZFJlc291cmNlQ2xpZW50RQpAQCAtNTI0LDYgKzUyNSw3IEBAIF9fWk43V2ViQ29y
ZTIwRGljdGF0aW9uQWx0ZXJuYXRpdmVDMUVqankKIF9fWk43V2ViQ29yZTIwRGljdGF0aW9uQWx0
ZXJuYXRpdmVDMUV2CiBfX1pON1dlYkNvcmUyMERpc3BsYXlTbGVlcERpc2FibGVyQzFFUEtjCiBf
X1pON1dlYkNvcmUyMERpc3BsYXlTbGVlcERpc2FibGVyRDFFdgorX19aTjdXZWJDb3JlMjBFbGVt
ZW50QXR0cmlidXRlRGF0YUQxRXYKIF9fWk43V2ViQ29yZTIwTm9kZVJlbmRlcmluZ0NvbnRleHRD
MUVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUyME5vZGVSZW5kZXJpbmdDb250ZXh0RDFFdgogX19a
TjdXZWJDb3JlMjBSZW5kZXJFbWJlZGRlZE9iamVjdDI5c2V0UGx1Z2luVW5hdmFpbGFiaWxpdHlS
ZWFzb25FTlMwXzI2UGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb25FCkBAIC01MzgsNiArNTQwLDcg
QEAgX19aTjdXZWJDb3JlMjBVc2VyR2VzdHVyZUluZGljYXRvckMxRU5TXzI2UHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlU3RhdGVFCiBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yRDFFdgog
X19aTjdXZWJDb3JlMjBtYWtlUkdCQTMyRnJvbUZsb2F0c0VmZmZmCiBfX1pON1dlYkNvcmUyMHBy
b3RvY29sSXNKYXZhU2NyaXB0RVJLTjNXVEY2U3RyaW5nRQorX19aTjdXZWJDb3JlMjBTcGFjZVNw
bGl0U3RyaW5nRGF0YUQxRXYKIF9fWk43V2ViQ29yZTIxQmFja0ZvcndhcmRDb250cm9sbGVyMTFp
dGVtQXRJbmRleEVpCiBfX1pON1dlYkNvcmUyMU1lbW9yeVByZXNzdXJlSGFuZGxlcjdpbnN0YWxs
RXYKIF9fWk43V2ViQ29yZTIxUGxhdGZvcm1LZXlib2FyZEV2ZW50MjRkaXNhbWJpZ3VhdGVLZXlE
b3duRXZlbnRFTlNfMTNQbGF0Zm9ybUV2ZW50NFR5cGVFYgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50QXR0cmlidXRlRGF0YS5jcHAKaW5kZXggMWRiMjBmOS4uNDgxNTk5OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCkBAIC00Miw1NiArNDIsNDgg
QEAgc3RhdGljIHNpemVfdCBpbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YVNpemUodW5zaWdu
ZWQgY291bnQpCiBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmli
dXRlRGF0YTo6Y3JlYXRlSW1tdXRhYmxlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1
dGVzKQogewogICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2MoaW1tdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGFTaXplKGF0dHJpYnV0ZXMuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyAoc2xvdCkgRWxlbWVudEF0dHJpYnV0ZURhdGEoYXR0cmlidXRlcykpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgKHNsb3QpIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGF0
dHJpYnV0ZXMpKTsKIH0KIAotRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVsZW1lbnRBdHRyaWJ1dGVE
YXRhKCkKLSAgICA6IG1faXNNdXRhYmxlKHRydWUpCi0gICAgLCBtX2FycmF5U2l6ZSgwKQotICAg
ICwgbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yKG5ldyBWZWN0b3I8QXR0cmlidXRlLCA0PikKK1Bh
c3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVh
dGUoKQogeworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhKTsKIH0KIAotRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNv
bnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQotICAgIDogbV9pc011dGFibGUoZmFs
c2UpCi0gICAgLCBtX2FycmF5U2l6ZShhdHRyaWJ1dGVzLnNpemUoKSkKK0ltbXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjpJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBWZWN0
b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykKKyAgICA6IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKGF0
dHJpYnV0ZXMuc2l6ZSgpKQogewotICAgIEF0dHJpYnV0ZSogYnVmZmVyID0gcmVpbnRlcnByZXRf
Y2FzdDxBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVzKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYXR0cmlidXRlcy5zaXplKCk7ICsraSkKLSAgICAgICAgbmV3ICgmYnVmZmVyW2ldKSBB
dHRyaWJ1dGUoYXR0cmlidXRlc1tpXSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
YXJyYXlTaXplOyArK2kpCisgICAgICAgIG5ldyAoJm1fYXR0cmlidXRlQXJyYXlbaV0pIEF0dHJp
YnV0ZShhdHRyaWJ1dGVzW2ldKTsKIH0KIAotRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVsZW1lbnRB
dHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlcikKLSAgICA6IFJl
ZkNvdW50ZWQ8RWxlbWVudEF0dHJpYnV0ZURhdGE+KCkKLSAgICAsIG1faXNNdXRhYmxlKHRydWUp
Ci0gICAgLCBtX2FycmF5U2l6ZSgwKQotICAgICwgbV9pbmxpbmVTdHlsZURlY2wob3RoZXIubV9p
bmxpbmVTdHlsZURlY2wpCi0gICAgLCBtX2F0dHJpYnV0ZVN0eWxlKG90aGVyLm1fYXR0cmlidXRl
U3R5bGUpCi0gICAgLCBtX2NsYXNzTmFtZXMob3RoZXIubV9jbGFzc05hbWVzKQotICAgICwgbV9p
ZEZvclN0eWxlUmVzb2x1dGlvbihvdGhlci5tX2lkRm9yU3R5bGVSZXNvbHV0aW9uKQotICAgICwg
bV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yKG5ldyBWZWN0b3I8QXR0cmlidXRlLCA0PikKK011dGFi
bGVFbGVtZW50QXR0cmlidXRlRGF0YTo6TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0
IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlcikKIHsKLSAgICAvLyBUaGlzIGNv
cHkgY29uc3RydWN0b3Igc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBtYWtlTXV0YWJsZSgpIHRvIGdv
IGZyb20gaW1tdXRhYmxlIHRvIG11dGFibGUuCi0gICAgQVNTRVJUKCFvdGhlci5tX2lzTXV0YWJs
ZSk7CisgICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEmIGJhc2VPdGhlciA9IHN0YXRpY19j
YXN0PGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJj4ob3RoZXIpOwogCi0gICAgLy8gQW4gaW1t
dXRhYmxlIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHNob3VsZCBuZXZlciBoYXZlIGEgbXV0YWJsZSBp
bmxpbmUgU3R5bGVQcm9wZXJ0eVNldCBhdHRhY2hlZC4KLSAgICBBU1NFUlQoIW90aGVyLm1faW5s
aW5lU3R5bGVEZWNsIHx8ICFvdGhlci5tX2lubGluZVN0eWxlRGVjbC0+aXNNdXRhYmxlKCkpOwor
ICAgIG1faW5saW5lU3R5bGVEZWNsID0gYmFzZU90aGVyLm1faW5saW5lU3R5bGVEZWNsOworICAg
IG1fYXR0cmlidXRlU3R5bGUgPSBiYXNlT3RoZXIubV9hdHRyaWJ1dGVTdHlsZTsKKyAgICBtX2Ns
YXNzTmFtZXMgPSBiYXNlT3RoZXIubV9jbGFzc05hbWVzOworICAgIG1faWRGb3JTdHlsZVJlc29s
dXRpb24gPSBiYXNlT3RoZXIubV9pZEZvclN0eWxlUmVzb2x1dGlvbjsKIAotICAgIGNvbnN0IEF0
dHJpYnV0ZSogb3RoZXJCdWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEF0dHJpYnV0ZSo+
KCZvdGhlci5tX2F0dHJpYnV0ZXMpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdGhl
ci5tX2FycmF5U2l6ZTsgKytpKQotICAgICAgICBtX211dGFibGVBdHRyaWJ1dGVWZWN0b3ItPmFw
cGVuZChvdGhlckJ1ZmZlcltpXSk7CisgICAgLy8gQW4gSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlubGluZSBTdHlsZVByb3BlcnR5U2V0
IGF0dGFjaGVkLgorICAgIEFTU0VSVCghYmFzZU90aGVyLm1faW5saW5lU3R5bGVEZWNsIHx8ICFi
YXNlT3RoZXIubV9pbmxpbmVTdHlsZURlY2wtPmlzTXV0YWJsZSgpKTsKKworICAgIG1fYXR0cmli
dXRlVmVjdG9yLnJlc2VydmVDYXBhY2l0eShiYXNlT3RoZXIubV9hcnJheVNpemUpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNlT3RoZXIubV9hcnJheVNpemU7ICsraSkKKyAgICAg
ICAgbV9hdHRyaWJ1dGVWZWN0b3IudW5jaGVja2VkQXBwZW5kKG90aGVyLm1fYXR0cmlidXRlQXJy
YXlbaV0pOwogfQogCi1FbGVtZW50QXR0cmlidXRlRGF0YTo6fkVsZW1lbnRBdHRyaWJ1dGVEYXRh
KCkKK0ltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp+SW1tdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEoKQogewotICAgIGlmIChpc011dGFibGUoKSkgewotICAgICAgICBBU1NFUlQoIW1f
YXJyYXlTaXplKTsKLSAgICAgICAgZGVsZXRlIG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcjsKLSAg
ICB9IGVsc2UgewotICAgICAgICBBdHRyaWJ1dGUqIGJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
QXR0cmlidXRlKj4oJm1fYXR0cmlidXRlcyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2FycmF5U2l6ZTsgKytpKQotICAgICAgICAgICAgYnVmZmVyW2ldLn5BdHRyaWJ1dGUo
KTsKLSAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJyYXlTaXplOyArK2kp
CisgICAgICAgIG1fYXR0cmlidXRlQXJyYXlbaV0ufkF0dHJpYnV0ZSgpOworfQorCitQYXNzUmVm
UHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6bWFrZU11dGFi
bGUoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNNdXRhYmxlKCkpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGFzSW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGEoKSkpOwogfQogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8QXR0cj4gPiBBdHRy
TGlzdDsKQEAgLTIzNiw3ICsyMjgsNyBAQCB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphZGRB
dHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIEVsZW1lbnQqIGVsZQogICAgIGlm
IChlbGVtZW50ICYmIGluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlID09IE5vdEluU3lu
Y2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogICAgICAgICBlbGVtZW50LT53aWxsTW9kaWZ5
QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lKCksIG51bGxBdG9tLCBhdHRyaWJ1dGUudmFsdWUoKSk7
CiAKLSAgICBtX211dGFibGVBdHRyaWJ1dGVWZWN0b3ItPmFwcGVuZChhdHRyaWJ1dGUpOworICAg
IGFzTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkubV9hdHRyaWJ1dGVWZWN0b3IuYXBwZW5k
KGF0dHJpYnV0ZSk7CiAKICAgICBpZiAoZWxlbWVudCAmJiBpblN5bmNocm9uaXphdGlvbk9mTGF6
eUF0dHJpYnV0ZSA9PSBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkKICAgICAg
ICAgZWxlbWVudC0+ZGlkQWRkQXR0cmlidXRlKGF0dHJpYnV0ZSk7CkBAIC0yNDcsNyArMjM5LDcg
QEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKHNpemVfdCBpbmRl
eCwgRWxlbWVudCogZWxlbWVudCwgU3luY2gKICAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwogICAg
IEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKIAotICAgIEF0dHJpYnV0ZSYgYXR0cmlidXRlID0g
bV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT5hdChpbmRleCk7CisgICAgQXR0cmlidXRlJiBhdHRy
aWJ1dGUgPSBhc011dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgpLm1fYXR0cmlidXRlVmVjdG9y
LmF0KGluZGV4KTsKICAgICBRdWFsaWZpZWROYW1lIG5hbWUgPSBhdHRyaWJ1dGUubmFtZSgpOwog
CiAgICAgaWYgKGVsZW1lbnQgJiYgaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgPT0g
Tm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC0yNTYsNyArMjQ4LDcgQEAg
dm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCwg
RWxlbWVudCogZWxlbWVudCwgU3luY2gKICAgICBpZiAoUmVmUHRyPEF0dHI+IGF0dHIgPSBhdHRy
SWZFeGlzdHMoZWxlbWVudCwgbmFtZSkpCiAgICAgICAgIGF0dHItPmRldGFjaEZyb21FbGVtZW50
V2l0aFZhbHVlKGF0dHJpYnV0ZS52YWx1ZSgpKTsKIAotICAgIG1fbXV0YWJsZUF0dHJpYnV0ZVZl
Y3Rvci0+cmVtb3ZlKGluZGV4KTsKKyAgICBhc011dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgp
Lm1fYXR0cmlidXRlVmVjdG9yLnJlbW92ZShpbmRleCk7CiAKICAgICBpZiAoZWxlbWVudCAmJiBp
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSA9PSBOb3RJblN5bmNocm9uaXphdGlvbk9m
TGF6eUF0dHJpYnV0ZSkKICAgICAgICAgZWxlbWVudC0+ZGlkUmVtb3ZlQXR0cmlidXRlKG5hbWUp
OwpAQCAtMzA0LDcgKzI5Niw3IEBAIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pCiAgICAgaW5mby5h
ZGRNZW1iZXIobV9jbGFzc05hbWVzKTsKICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlciht
X2lkRm9yU3R5bGVSZXNvbHV0aW9uKTsKICAgICBpZiAobV9pc011dGFibGUpCi0gICAgICAgIGlu
Zm8uYWRkVmVjdG9yUHRyKG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvcik7CisgICAgICAgIGluZm8u
YWRkVmVjdG9yKGFzTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkubV9hdHRyaWJ1dGVWZWN0
b3IpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbiA9IGxlbmd0aCgpOyBpIDwgbGVuOyBp
KyspCiAgICAgICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKCphdHRyaWJ1dGVJdGVtKGkp
KTsKIH0KQEAgLTM0OCwxNyArMzQwLDE1IEBAIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNs
b25lRGF0YUZyb20oY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEmIHNvdXJjZURhdGEsCiAgICAg
Y2xlYXJBdHRyaWJ1dGVzKCZ0YXJnZXRFbGVtZW50KTsKIAogICAgIGlmIChzb3VyY2VEYXRhLmlz
TXV0YWJsZSgpKQotICAgICAgICAqbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yID0gKnNvdXJjZURh
dGEubV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yOworICAgICAgICBhc011dGFibGVFbGVtZW50QXR0
cmlidXRlRGF0YSgpLm1fYXR0cmlidXRlVmVjdG9yID0gc291cmNlRGF0YS5hc011dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YSgpLm1fYXR0cmlidXRlVmVjdG9yOwogICAgIGVsc2UgewotICAgICAg
ICBBU1NFUlQobV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT5pc0VtcHR5KCkpOwotICAgICAgICBt
X211dGFibGVBdHRyaWJ1dGVWZWN0b3ItPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc291cmNlRGF0
YS5tX2FycmF5U2l6ZSk7Ci0gICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogc291cmNlQnVmZmVyID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdHRyaWJ1dGUqPigmc291cmNlRGF0YS5tX2F0dHJpYnV0
ZXMpOworICAgICAgICBhc011dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgpLm1fYXR0cmlidXRl
VmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc291cmNlRGF0YS5tX2FycmF5U2l6ZSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3VyY2VEYXRhLm1fYXJyYXlTaXplOyAr
K2kpCi0gICAgICAgICAgICBtX211dGFibGVBdHRyaWJ1dGVWZWN0b3ItPnVuY2hlY2tlZEFwcGVu
ZChzb3VyY2VCdWZmZXJbaV0pOworICAgICAgICAgICAgYXNNdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGEoKS5tX2F0dHJpYnV0ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQoc291cmNlRGF0YS5hc0lt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkubV9hdHRyaWJ1dGVBcnJheVtpXSk7CiAgICAg
fQogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgPSBtX211dGFibGVBdHRyaWJ1dGVWZWN0b3It
PmF0KGkpOworICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGFzTXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKCkubV9hdHRyaWJ1dGVWZWN0b3IuYXQoaSk7CiAgICAgICAgIGlm
ICh0YXJnZXRFbGVtZW50LmlzU3R5bGVkRWxlbWVudCgpICYmIGF0dHJpYnV0ZS5uYW1lKCkgPT0g
SFRNTE5hbWVzOjpzdHlsZUF0dHIpIHsKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFN0eWxlZEVs
ZW1lbnQmPih0YXJnZXRFbGVtZW50KS5zdHlsZUF0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlLnZh
bHVlKCksIFN0eWxlZEVsZW1lbnQ6OkRvTm90UmVwYXJzZVN0eWxlQXR0cmlidXRlKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwpAQCAtMzgwLDcgKzM3MCw3IEBAIHZvaWQgRWxlbWVudEF0dHJpYnV0
ZURhdGE6OmNsZWFyQXR0cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KQogICAgICAgICBkZXRhY2hB
dHRyT2JqZWN0c0Zyb21FbGVtZW50KGVsZW1lbnQpOwogCiAgICAgY2xlYXJDbGFzcygpOwotICAg
IG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvci0+Y2xlYXIoKTsKKyAgICBhc011dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YSgpLm1fYXR0cmlidXRlVmVjdG9yLmNsZWFyKCk7CiB9CiAKIFBhc3NSZWZQ
dHI8QXR0cj4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZU5vZGUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UsIEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCmluZGV4
IDcyMTI1ZjYuLjQ2MzNjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
QXR0cmlidXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRl
RGF0YS5oCkBAIC0zNSwxNiArMzUsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBB
dHRyOwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
OwogY2xhc3MgTWVtb3J5T2JqZWN0SW5mbzsKK2NsYXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRl
RGF0YTsKIAogZW51bSBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgeyBOb3RJblN5bmNo
cm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSwgSW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1
dGUgfTsKIAogY2xhc3MgRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxF
bGVtZW50QXR0cmlidXRlRGF0YT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGUo
KSB7IHJldHVybiBhZG9wdFJlZihuZXcgRWxlbWVudEF0dHJpYnV0ZURhdGEpOyB9CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZSgpOwogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGVJbW11dGFibGUoY29uc3Qg
VmVjdG9yPEF0dHJpYnV0ZT4mKTsKLSAgICB+RWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKIAogICAg
IHZvaWQgY2xlYXJDbGFzcygpIHsgbV9jbGFzc05hbWVzLmNsZWFyKCk7IH0KICAgICB2b2lkIHNl
dENsYXNzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lLCBib29sIHNob3VsZEZvbGRDYXNl
KSBjb25zdCB7IG1fY2xhc3NOYW1lcy5zZXQoY2xhc3NOYW1lLCBzaG91bGRGb2xkQ2FzZSk7IH0K
QEAgLTk1LDEzICs5NiwzMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlcG9ydE1lbW9yeVVzYWdl
KE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAorICAgIGJvb2wgaXNNdXRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc011dGFibGU7IH0KKworcHJvdGVjdGVkOgorICAgIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhKCkKKyAgICAgICAgOiBtX2lzTXV0YWJsZSh0cnVlKQorICAgICAgICAsIG1fYXJyYXlT
aXplKDApCisgICAgeyB9CisKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSh1bnNpZ25lZCBhcnJh
eVNpemUpCisgICAgICAgIDogbV9pc011dGFibGUoZmFsc2UpCisgICAgICAgICwgbV9hcnJheVNp
emUoYXJyYXlTaXplKQorICAgIHsgfQorCisgICAgbXV0YWJsZSBSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gbV9pbmxpbmVTdHlsZURlY2w7CisgICAgbXV0YWJsZSBSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4gbV9hdHRyaWJ1dGVTdHlsZTsKKyAgICBtdXRhYmxlIFNwYWNlU3BsaXRTdHJpbmcgbV9j
bGFzc05hbWVzOworICAgIG11dGFibGUgQXRvbWljU3RyaW5nIG1faWRGb3JTdHlsZVJlc29sdXRp
b247CisKKyAgICB1bnNpZ25lZCBtX2lzTXV0YWJsZSA6IDE7CisgICAgdW5zaWduZWQgbV9hcnJh
eVNpemUgOiAzMTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsKICAgICBm
cmllbmQgY2xhc3MgSFRNTENvbnN0cnVjdGlvblNpdGU7Ci0KLSAgICBFbGVtZW50QXR0cmlidXRl
RGF0YSgpOwotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVE
YXRhJik7Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
KTsKKyAgICBmcmllbmQgY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7CisgICAg
ZnJpZW5kIGNsYXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKIAogICAgIEF0dHJpYnV0
ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSk7CiAgICAgY29uc3QgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJ
dGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKSBjb25zdDsKQEAgLTEwOSwyNyArMTI5LDUxIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbG9u
ZURhdGFGcm9tKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBzb3VyY2VEYXRhLCBjb25zdCBF
bGVtZW50JiBzb3VyY2VFbGVtZW50LCBFbGVtZW50JiB0YXJnZXRFbGVtZW50KTsKICAgICB2b2lk
IGNsZWFyQXR0cmlidXRlcyhFbGVtZW50Kik7CiAKLSAgICBib29sIGlzTXV0YWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1faXNNdXRhYmxlOyB9Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRl
RGF0YT4gbWFrZU11dGFibGUoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgRWxlbWVudEF0
dHJpYnV0ZURhdGEoKnRoaXMpKTsgfQorICAgIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURh
dGE+IG1ha2VNdXRhYmxlKCkgY29uc3Q7CiAKLSAgICB1bnNpZ25lZCBtX2lzTXV0YWJsZSA6IDE7
Ci0gICAgdW5zaWduZWQgbV9hcnJheVNpemUgOiAzMTsKKyAgICBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEmIGFzTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7CisgICAgY29uc3QgTXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBhc011dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgp
IGNvbnN0OworICAgIGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBhc0ltbXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkgY29uc3Q7Cit9OwogCi0gICAgbXV0YWJsZSBSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9pbmxpbmVTdHlsZURlY2w7Ci0gICAgbXV0YWJsZSBSZWZQ
dHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9hdHRyaWJ1dGVTdHlsZTsKLSAgICBtdXRhYmxlIFNwYWNl
U3BsaXRTdHJpbmcgbV9jbGFzc05hbWVzOwotICAgIG11dGFibGUgQXRvbWljU3RyaW5nIG1faWRG
b3JTdHlsZVJlc29sdXRpb247CitjbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSA6
IHB1YmxpYyBFbGVtZW50QXR0cmlidXRlRGF0YSB7CitwdWJsaWM6CisgICAgSW1tdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKKyAgICB+SW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKKworICAgIEF0dHJpYnV0ZSBtX2F0dHJpYnV0ZUFy
cmF5WzBdOworfTsKIAotICAgIHVuaW9uIHsKLSAgICAgICAgVmVjdG9yPEF0dHJpYnV0ZSwgND4q
IG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcjsKLSAgICAgICAgdm9pZCogbV9hdHRyaWJ1dGVzOwot
ICAgIH07CitjbGFzcyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMgRWxlbWVu
dEF0dHJpYnV0ZURhdGEgeworcHVibGljOgorICAgIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YSgpIHsgfQorICAgIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBJbW11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YSYpOworCisgICAgVmVjdG9yPEF0dHJpYnV0ZSwgND4gbV9hdHRy
aWJ1dGVWZWN0b3I7CiB9OwogCitpbmxpbmUgY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhJiBFbGVtZW50QXR0cmlidXRlRGF0YTo6YXNNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEo
KSBjb25zdAoreworICAgIEFTU0VSVChtX2lzTXV0YWJsZSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSY+KCp0aGlzKTsKK30KKworaW5s
aW5lIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmFz
TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKK3sKKyAgICBBU1NFUlQobV9pc011dGFibGUp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmPigq
dGhpcyk7Cit9CisKK2lubGluZSBjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYg
RWxlbWVudEF0dHJpYnV0ZURhdGE6OmFzSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKSBj
b25zdAoreworICAgIEFTU0VSVCghbV9pc011dGFibGUpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSY+KCp0aGlzKTsKK30KKwogaW5s
aW5lIHNpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0YTo6bGVuZ3RoKCkgY29uc3QKIHsKICAgICBp
ZiAoaXNNdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBtX211dGFibGVBdHRyaWJ1dGVWZWN0b3It
PnNpemUoKTsKKyAgICAgICAgcmV0dXJuIGFzTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCku
bV9hdHRyaWJ1dGVWZWN0b3Iuc2l6ZSgpOwogICAgIHJldHVybiBtX2FycmF5U2l6ZTsKIH0KIApA
QCAtMjAxLDE3ICsyNDUsMjkgQEAgaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmEKIGlubGluZSBjb25z
dCBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVk
IGluZGV4KSBjb25zdAogewogICAgIEFTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKLSAgICBpZiAo
aXNNdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiAmbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT5h
dChpbmRleCk7Ci0gICAgY29uc3QgQXR0cmlidXRlKiBidWZmZXIgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZXMpOwotICAgIHJldHVybiAmYnVmZmVyW2lu
ZGV4XTsKKyAgICBpZiAobV9pc011dGFibGUpCisgICAgICAgIHJldHVybiAmYXNNdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGEoKS5tX2F0dHJpYnV0ZVZlY3Rvci5hdChpbmRleCk7CisgICAgcmV0
dXJuICZhc0ltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkubV9hdHRyaWJ1dGVBcnJheVtp
bmRleF07CiB9CiAKIGlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRy
aWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KQogewotICAgIEFTU0VSVChpc011dGFibGUoKSk7CiAg
ICAgQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkpOwotICAgIHJldHVybiAmbV9tdXRhYmxlQXR0cmli
dXRlVmVjdG9yLT5hdChpbmRleCk7CisgICAgcmV0dXJuICZhc011dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSgpLm1fYXR0cmlidXRlVmVjdG9yLmF0KGluZGV4KTsKK30KKworfQorCituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGUgPD4gaW5saW5lIHZvaWQgZGVsZXRlT3duZWRQdHI8V2ViQ29y
ZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE+KFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBw
dHIpCit7CisgICAgaWYgKCFwdHIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocHRyLT5pc011
dGFibGUoKSkKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFdlYkNvcmU6Ok11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YSo+KHB0cik7CisgICAgZWxzZQorICAgICAgICBkZWxldGUgc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPihwdHIpOwogfQog
CiB9Cg==
</data>
<flag name="review"
          id="174330"
          type_id="1"
          status="+"
          setter="koivisto"
    />
    <flag name="commit-queue"
          id="174333"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163436</attachid>
            <date>2012-09-11 14:23:52 -0700</date>
            <delta_ts>2012-09-12 04:12:08 -0700</delta_ts>
            <desc>Patch III: Revenge of the reinterpret_cast</desc>
            <filename>bug-94465-v3.diff</filename>
            <type>text/plain</type>
            <size>17789</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ZGM1NTNiLi5jOTU3ZTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTItMDktMTEgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgorCisgICAg
ICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOiBVc2Ugc3ViY2xhc3NlcyB0byBtYW5hZ2UgdmFyeWlu
ZyBvYmplY3QgbGF5b3V0cy4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvOTQ0NjU+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgQWRkIHR3byBF
bGVtZW50QXR0cmlidXRlRGF0YSBzdWJjbGFzc2VzOgorCisgICAgICAgICAgICAtIE11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YQorICAgICAgICAgICAgLSBJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YQorCisgICAgICAgIFRoZSBFbGVtZW50QXR0cmlidXRlRGF0YTo6bV9pc011dGFibGUg
Yml0IGRldGVybWluZXMgd2hpY2ggc3ViY2xhc3MgdG8gY2FzdCB0byB3aGVuIGFjY2Vzc2luZwor
ICAgICAgICB0aGUgYXR0cmlidXRlIHN0b3JhZ2UuIEFkZGVkIG11dGFibGVBdHRyaWJ1dGVWZWN0
b3IoKSBhbmQgaW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSBoZWxwZXJzCisgICAgICAgIHRvIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhICh3aXRoIGFwcHJvcHJpYXRlIGFzc2VydGlvbnMuKQorCisgICAg
ICAgIFRoaXMgcGF0Y2ggcmVtb3ZlcyBvbmUgc3RlcCBvZiBpbmRpcmVjdGlvbiBpbiB0aGUgbXV0
YWJsZSBjYXNlLCBzaW5jZSB0aGUgVmVjdG9yPEF0dHJpYnV0ZT4gaXMgbm8KKyAgICAgICAgbG9u
Z2VyIGhlYXAtYWxsb2NhdGVkLCBidXQgcGFydCBvZiBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEuCisKKyAgICAgICAgQWRkZWQgYSBXVEY6OmRlbGV0ZU93bmVkUHRyKEVsZW1lbnRBdHRyaWJ1
dGVEYXRhKikgc3BlY2lhbGl6YXRpb24gc28gdGhhdCB0aGUgYXBwcm9wcmlhdGUgc3ViY2xhc3MK
KyAgICAgICAgZGVzdHJ1Y3RvciBpcyBjYWxsZWQgZm9yIHRoZXNlIG9iamVjdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVNdXRhYmxlQXR0cmlidXRlRGF0YSk6CisgICAgICAg
ICogZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0
cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6TXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6OkltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltbXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjp+SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6Om1ha2VNdXRhYmxlQ29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YTo6YWRkQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlcG9ydE1lbW9yeVVzYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjbG9uZURhdGFGcm9tKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjbGVhckF0dHJpYnV0ZXMp
OgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oOgorICAgICAgICAoRWxlbWVu
dEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6
OmlzTXV0YWJsZSk6CisgICAgICAgIChJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSk6Cisg
ICAgICAgIChNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmltbXV0YWJsZUF0dHJp
YnV0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptdXRh
YmxlQXR0cmlidXRlVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0
dHJpYnV0ZUl0ZW0pOgorCiAyMDEyLTA5LTEwICBKdXN0aW4gTm92b3NhZCAgPGp1bm92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHY1IGxpbmUgZGFzaCBmZWF0dXJl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGI0NzY5ZjkuLjY2NGExM2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCkBAIC0yMzAsNiArMjMwLDcgQEAgX19aTjdXZWJDb3JlMTNjcmVhdGVXcmFwcGVyRVBO
M0pTQzlFeGVjU3RhdGVFUE5TXzE3SlNET01HbG9iYWxPYmplY3RFUE5TXzROb2RlRQogX19aTjdX
ZWJDb3JlMTNkaXJlY3RvcnlOYW1lRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTN0b0hU
TUxFbGVtZW50RVBOU18yMUZvcm1Bc3NvY2lhdGVkRWxlbWVudEUKIF9fWk43V2ViQ29yZTEzdG9K
U0RPTVdpbmRvd0VOM0pTQzdKU1ZhbHVlRQorX19aTjdXZWJDb3JlMTNRdWFsaWZpZWROYW1lRDFF
dgogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTEycmVtb3ZlQ2xpZW50RVBOU18yMENhY2hl
ZFJlc291cmNlQ2xpZW50RQogX19aTjdXZWJDb3JlMTRDYWNoZWRSZXNvdXJjZTE2dW5yZWdpc3Rl
ckhhbmRsZUVQTlNfMjRDYWNoZWRSZXNvdXJjZUhhbmRsZUJhc2VFCiBfX1pON1dlYkNvcmUxNENh
Y2hlZFJlc291cmNlOWFkZENsaWVudEVQTlNfMjBDYWNoZWRSZXNvdXJjZUNsaWVudEUKQEAgLTUz
OCw2ICs1MzksNyBAQCBfX1pON1dlYkNvcmUyMFVzZXJHZXN0dXJlSW5kaWNhdG9yQzFFTlNfMjZQ
cm9jZXNzaW5nVXNlckdlc3R1cmVTdGF0ZUUKIF9fWk43V2ViQ29yZTIwVXNlckdlc3R1cmVJbmRp
Y2F0b3JEMUV2CiBfX1pON1dlYkNvcmUyMG1ha2VSR0JBMzJGcm9tRmxvYXRzRWZmZmYKIF9fWk43
V2ViQ29yZTIwcHJvdG9jb2xJc0phdmFTY3JpcHRFUktOM1dURjZTdHJpbmdFCitfX1pON1dlYkNv
cmUyMFNwYWNlU3BsaXRTdHJpbmdEYXRhRDFFdgogX19aTjdXZWJDb3JlMjFCYWNrRm9yd2FyZENv
bnRyb2xsZXIxMWl0ZW1BdEluZGV4RWkKIF9fWk43V2ViQ29yZTIxTWVtb3J5UHJlc3N1cmVIYW5k
bGVyN2luc3RhbGxFdgogX19aTjdXZWJDb3JlMjFQbGF0Zm9ybUtleWJvYXJkRXZlbnQyNGRpc2Ft
YmlndWF0ZUtleURvd25FdmVudEVOU18xM1BsYXRmb3JtRXZlbnQ0VHlwZUViCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggNTM3MmMyMi4uNTU4ZjU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtMjI0Niw3ICsyMjQ2LDcgQEAgdm9pZCBFbGVtZW50OjpjcmVhdGVNdXRhYmxlQXR0cmlidXRl
RGF0YSgpCiAgICAgaWYgKCFtX2F0dHJpYnV0ZURhdGEpCiAgICAgICAgIG1fYXR0cmlidXRlRGF0
YSA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGUoKTsKICAgICBlbHNlCi0gICAgICAgIG1f
YXR0cmlidXRlRGF0YSA9IG1fYXR0cmlidXRlRGF0YS0+bWFrZU11dGFibGUoKTsKKyAgICAgICAg
bV9hdHRyaWJ1dGVEYXRhID0gbV9hdHRyaWJ1dGVEYXRhLT5tYWtlTXV0YWJsZUNvcHkoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0
cmlidXRlRGF0YS5jcHAKaW5kZXggMWRiMjBmOS4uYTY0NTRkZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCkBAIC0zNiw2MiArMzYsNTQgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgc2l6ZV90IGltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhU2l6ZSh1bnNpZ25lZCBjb3VudCkKIHsKLSAgICByZXR1cm4gc2l6ZW9mKEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKSAtIHNpemVvZih2b2lkKikgKyBzaXplb2YoQXR0cmlidXRlKSAqIGNvdW50Owor
ICAgIHJldHVybiBzaXplb2YoSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEpICsgc2l6ZW9m
KEF0dHJpYnV0ZSkgKiBjb3VudDsKIH0KIAogUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0
YT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUltbXV0YWJsZShjb25zdCBWZWN0b3I8QXR0
cmlidXRlPiYgYXR0cmlidXRlcykKIHsKICAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9j
KGltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhU2l6ZShhdHRyaWJ1dGVzLnNpemUoKSkpOwot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHNsb3QpIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKGF0dHJp
YnV0ZXMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBJbW11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YShhdHRyaWJ1dGVzKSk7CiB9CiAKLUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpF
bGVtZW50QXR0cmlidXRlRGF0YSgpCi0gICAgOiBtX2lzTXV0YWJsZSh0cnVlKQotICAgICwgbV9h
cnJheVNpemUoMCkKLSAgICAsIG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcihuZXcgVmVjdG9yPEF0
dHJpYnV0ZSwgND4pCitQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0
cmlidXRlRGF0YTo6Y3JlYXRlKCkKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YSk7CiB9CiAKLUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpFbGVtZW50
QXR0cmlidXRlRGF0YShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykKLSAgICA6
IG1faXNNdXRhYmxlKGZhbHNlKQotICAgICwgbV9hcnJheVNpemUoYXR0cmlidXRlcy5zaXplKCkp
CitJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCisgICAgOiBFbGVtZW50
QXR0cmlidXRlRGF0YShhdHRyaWJ1dGVzLnNpemUoKSkKIHsKLSAgICBBdHRyaWJ1dGUqIGJ1ZmZl
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXR0cmlidXRlKj4oJm1fYXR0cmlidXRlcyk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG5l
dyAoJmJ1ZmZlcltpXSkgQXR0cmlidXRlKGF0dHJpYnV0ZXNbaV0pOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2FycmF5U2l6ZTsgKytpKQorICAgICAgICBuZXcgKCZyZWludGVycHJl
dF9jYXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkgQXR0cmlidXRlKGF0dHJp
YnV0ZXNbaV0pOwogfQogCi1FbGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURh
dGEoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyKQotICAgIDogUmVmQ291bnRlZDxF
bGVtZW50QXR0cmlidXRlRGF0YT4oKQotICAgICwgbV9pc011dGFibGUodHJ1ZSkKLSAgICAsIG1f
YXJyYXlTaXplKDApCi0gICAgLCBtX2lubGluZVN0eWxlRGVjbChvdGhlci5tX2lubGluZVN0eWxl
RGVjbCkKLSAgICAsIG1fYXR0cmlidXRlU3R5bGUob3RoZXIubV9hdHRyaWJ1dGVTdHlsZSkKLSAg
ICAsIG1fY2xhc3NOYW1lcyhvdGhlci5tX2NsYXNzTmFtZXMpCi0gICAgLCBtX2lkRm9yU3R5bGVS
ZXNvbHV0aW9uKG90aGVyLm1faWRGb3JTdHlsZVJlc29sdXRpb24pCi0gICAgLCBtX211dGFibGVB
dHRyaWJ1dGVWZWN0b3IobmV3IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+KQorTXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgSW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyKQogewotICAgIC8vIFRoaXMgY29weSBjb25zdHJ1
Y3RvciBzaG91bGQgb25seSBiZSB1c2VkIGJ5IG1ha2VNdXRhYmxlKCkgdG8gZ28gZnJvbSBpbW11
dGFibGUgdG8gbXV0YWJsZS4KLSAgICBBU1NFUlQoIW90aGVyLm1faXNNdXRhYmxlKTsKKyAgICBj
b25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSYgYmFzZU90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
RWxlbWVudEF0dHJpYnV0ZURhdGEmPihvdGhlcik7CiAKLSAgICAvLyBBbiBpbW11dGFibGUgRWxl
bWVudEF0dHJpYnV0ZURhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlubGluZSBTdHls
ZVByb3BlcnR5U2V0IGF0dGFjaGVkLgotICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHlsZURl
Y2wgfHwgIW90aGVyLm1faW5saW5lU3R5bGVEZWNsLT5pc011dGFibGUoKSk7CisgICAgbV9pbmxp
bmVTdHlsZURlY2wgPSBiYXNlT3RoZXIubV9pbmxpbmVTdHlsZURlY2w7CisgICAgbV9hdHRyaWJ1
dGVTdHlsZSA9IGJhc2VPdGhlci5tX2F0dHJpYnV0ZVN0eWxlOworICAgIG1fY2xhc3NOYW1lcyA9
IGJhc2VPdGhlci5tX2NsYXNzTmFtZXM7CisgICAgbV9pZEZvclN0eWxlUmVzb2x1dGlvbiA9IGJh
c2VPdGhlci5tX2lkRm9yU3R5bGVSZXNvbHV0aW9uOwogCi0gICAgY29uc3QgQXR0cmlidXRlKiBv
dGhlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXR0cmlidXRlKj4oJm90aGVyLm1f
YXR0cmlidXRlcyk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG90aGVyLm1fYXJyYXlT
aXplOyArK2kpCi0gICAgICAgIG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvci0+YXBwZW5kKG90aGVy
QnVmZmVyW2ldKTsKKyAgICAvLyBBbiBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSBzaG91
bGQgbmV2ZXIgaGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxlUHJvcGVydHlTZXQgYXR0YWNoZWQu
CisgICAgQVNTRVJUKCFiYXNlT3RoZXIubV9pbmxpbmVTdHlsZURlY2wgfHwgIWJhc2VPdGhlci5t
X2lubGluZVN0eWxlRGVjbC0+aXNNdXRhYmxlKCkpOworCisgICAgbV9hdHRyaWJ1dGVWZWN0b3Iu
cmVzZXJ2ZUNhcGFjaXR5KGJhc2VPdGhlci5tX2FycmF5U2l6ZSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGJhc2VPdGhlci5tX2FycmF5U2l6ZTsgKytpKQorICAgICAgICBtX2F0dHJp
YnV0ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQob3RoZXIuaW1tdXRhYmxlQXR0cmlidXRlQXJyYXko
KVtpXSk7CiB9CiAKLUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp+RWxlbWVudEF0dHJpYnV0ZURhdGEo
KQorSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6On5JbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSgpCiB7Ci0gICAgaWYgKGlzTXV0YWJsZSgpKSB7Ci0gICAgICAgIEFTU0VSVCghbV9h
cnJheVNpemUpOwotICAgICAgICBkZWxldGUgbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogYnVmZmVyID0gcmVpbnRlcnByZXRfY2FzdDxB
dHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fYXJyYXlTaXplOyArK2kpCi0gICAgICAgICAgICBidWZmZXJbaV0ufkF0dHJpYnV0ZSgp
OwotICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcnJheVNpemU7ICsraSkK
KyAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8QXR0cmlidXRlKj4oJm1fYXR0cmlidXRlQXJyYXkp
W2ldKS5+QXR0cmlidXRlKCk7Cit9CisKK1Bhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptYWtlTXV0YWJsZUNvcHkoKSBjb25zdAoreworICAgIEFT
U0VSVCghaXNNdXRhYmxlKCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhJj4oKnRoaXMpKSk7CiB9CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxBdHRyPiA+IEF0
dHJMaXN0OwpAQCAtMjM2LDcgKzIyOCw3IEBAIHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmFk
ZEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgRWxlbWVudCogZWxlCiAgICAg
aWYgKGVsZW1lbnQgJiYgaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgPT0gTm90SW5T
eW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCiAgICAgICAgIGVsZW1lbnQtPndpbGxNb2Rp
ZnlBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUoKSwgbnVsbEF0b20sIGF0dHJpYnV0ZS52YWx1ZSgp
KTsKIAotICAgIG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvci0+YXBwZW5kKGF0dHJpYnV0ZSk7Cisg
ICAgbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLmFwcGVuZChhdHRyaWJ1dGUpOwogCiAgICAgaWYg
KGVsZW1lbnQgJiYgaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUgPT0gTm90SW5TeW5j
aHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCiAgICAgICAgIGVsZW1lbnQtPmRpZEFkZEF0dHJp
YnV0ZShhdHRyaWJ1dGUpOwpAQCAtMjQ3LDcgKzIzOSw3IEBAIHZvaWQgRWxlbWVudEF0dHJpYnV0
ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgsIEVsZW1lbnQqIGVsZW1lbnQsIFN5
bmNoCiAgICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKICAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgo
KSk7CiAKLSAgICBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rv
ci0+YXQoaW5kZXgpOworICAgIEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gbXV0YWJsZUF0dHJpYnV0
ZVZlY3RvcigpLmF0KGluZGV4KTsKICAgICBRdWFsaWZpZWROYW1lIG5hbWUgPSBhdHRyaWJ1dGUu
bmFtZSgpOwogCiAgICAgaWYgKGVsZW1lbnQgJiYgaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRy
aWJ1dGUgPT0gTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC0yNTYsNyAr
MjQ4LDcgQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKHNpemVf
dCBpbmRleCwgRWxlbWVudCogZWxlbWVudCwgU3luY2gKICAgICBpZiAoUmVmUHRyPEF0dHI+IGF0
dHIgPSBhdHRySWZFeGlzdHMoZWxlbWVudCwgbmFtZSkpCiAgICAgICAgIGF0dHItPmRldGFjaEZy
b21FbGVtZW50V2l0aFZhbHVlKGF0dHJpYnV0ZS52YWx1ZSgpKTsKIAotICAgIG1fbXV0YWJsZUF0
dHJpYnV0ZVZlY3Rvci0+cmVtb3ZlKGluZGV4KTsKKyAgICBtdXRhYmxlQXR0cmlidXRlVmVjdG9y
KCkucmVtb3ZlKGluZGV4KTsKIAogICAgIGlmIChlbGVtZW50ICYmIGluU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlID09IE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQog
ICAgICAgICBlbGVtZW50LT5kaWRSZW1vdmVBdHRyaWJ1dGUobmFtZSk7CkBAIC0zMDQsNyArMjk2
LDcgQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykKICAgICBpbmZvLmFkZE1lbWJlcihtX2NsYXNz
TmFtZXMpOwogICAgIGluZm8uYWRkSW5zdHJ1bWVudGVkTWVtYmVyKG1faWRGb3JTdHlsZVJlc29s
dXRpb24pOwogICAgIGlmIChtX2lzTXV0YWJsZSkKLSAgICAgICAgaW5mby5hZGRWZWN0b3JQdHIo
bV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yKTsKKyAgICAgICAgaW5mby5hZGRWZWN0b3IobXV0YWJs
ZUF0dHJpYnV0ZVZlY3RvcigpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW4gPSBsZW5n
dGgoKTsgaSA8IGxlbjsgaSsrKQogICAgICAgICBpbmZvLmFkZEluc3RydW1lbnRlZE1lbWJlcigq
YXR0cmlidXRlSXRlbShpKSk7CiB9CkBAIC0zNDgsMTcgKzM0MCwxNSBAQCB2b2lkIEVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpjbG9uZURhdGFGcm9tKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBz
b3VyY2VEYXRhLAogICAgIGNsZWFyQXR0cmlidXRlcygmdGFyZ2V0RWxlbWVudCk7CiAKICAgICBp
ZiAoc291cmNlRGF0YS5pc011dGFibGUoKSkKLSAgICAgICAgKm1fbXV0YWJsZUF0dHJpYnV0ZVZl
Y3RvciA9ICpzb3VyY2VEYXRhLm1fbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcjsKKyAgICAgICAgbXV0
YWJsZUF0dHJpYnV0ZVZlY3RvcigpID0gc291cmNlRGF0YS5tdXRhYmxlQXR0cmlidXRlVmVjdG9y
KCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChtX211dGFibGVBdHRyaWJ1dGVWZWN0b3It
PmlzRW1wdHkoKSk7Ci0gICAgICAgIG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvci0+cmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzb3VyY2VEYXRhLm1fYXJyYXlTaXplKTsKLSAgICAgICAgY29uc3QgQXR0
cmlidXRlKiBzb3VyY2VCdWZmZXIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEF0dHJpYnV0ZSo+
KCZzb3VyY2VEYXRhLm1fYXR0cmlidXRlcyk7CisgICAgICAgIG11dGFibGVBdHRyaWJ1dGVWZWN0
b3IoKS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNvdXJjZURhdGEubV9hcnJheVNpemUpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc291cmNlRGF0YS5tX2FycmF5U2l6ZTsgKytp
KQotICAgICAgICAgICAgbV9tdXRhYmxlQXR0cmlidXRlVmVjdG9yLT51bmNoZWNrZWRBcHBlbmQo
c291cmNlQnVmZmVyW2ldKTsKKyAgICAgICAgICAgIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS51
bmNoZWNrZWRBcHBlbmQoc291cmNlRGF0YS5pbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpW2ldKTsK
ICAgICB9CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IG1fbXV0YWJsZUF0dHJpYnV0ZVZl
Y3Rvci0+YXQoaSk7CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gbXV0YWJs
ZUF0dHJpYnV0ZVZlY3RvcigpLmF0KGkpOwogICAgICAgICBpZiAodGFyZ2V0RWxlbWVudC5pc1N0
eWxlZEVsZW1lbnQoKSAmJiBhdHRyaWJ1dGUubmFtZSgpID09IEhUTUxOYW1lczo6c3R5bGVBdHRy
KSB7CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Jj4odGFyZ2V0RWxlbWVu
dCkuc3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZS52YWx1ZSgpLCBTdHlsZWRFbGVtZW50
OjpEb05vdFJlcGFyc2VTdHlsZUF0dHJpYnV0ZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAg
LTM4MCw3ICszNzAsNyBAQCB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjbGVhckF0dHJpYnV0
ZXMoRWxlbWVudCogZWxlbWVudCkKICAgICAgICAgZGV0YWNoQXR0ck9iamVjdHNGcm9tRWxlbWVu
dChlbGVtZW50KTsKIAogICAgIGNsZWFyQ2xhc3MoKTsKLSAgICBtX211dGFibGVBdHRyaWJ1dGVW
ZWN0b3ItPmNsZWFyKCk7CisgICAgbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLmNsZWFyKCk7CiB9
CiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZU5v
ZGUoY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UsIEVs
ZW1lbnQqIGVsZW1lbnQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudEF0dHJpYnV0ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRl
RGF0YS5oCmluZGV4IDcyMTI1ZjYuLjRkZWU3NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50QXR0cmlidXRlRGF0YS5oCkBAIC0zNSwxNiArMzUsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBBdHRyOwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIEltbXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhOwogY2xhc3MgTWVtb3J5T2JqZWN0SW5mbzsKK2NsYXNzIE11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YTsKIAogZW51bSBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUg
eyBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSwgSW5TeW5jaHJvbml6YXRpb25P
ZkxhenlBdHRyaWJ1dGUgfTsKIAogY2xhc3MgRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMg
UmVmQ291bnRlZDxFbGVtZW50QXR0cmlidXRlRGF0YT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVE
YXRhPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRWxlbWVudEF0dHJpYnV0ZURhdGEp
OyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZSgp
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGVJbW11
dGFibGUoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKLSAgICB+RWxlbWVudEF0dHJpYnV0ZURh
dGEoKTsKIAogICAgIHZvaWQgY2xlYXJDbGFzcygpIHsgbV9jbGFzc05hbWVzLmNsZWFyKCk7IH0K
ICAgICB2b2lkIHNldENsYXNzKGNvbnN0IEF0b21pY1N0cmluZyYgY2xhc3NOYW1lLCBib29sIHNo
b3VsZEZvbGRDYXNlKSBjb25zdCB7IG1fY2xhc3NOYW1lcy5zZXQoY2xhc3NOYW1lLCBzaG91bGRG
b2xkQ2FzZSk7IH0KQEAgLTk1LDEzICs5NiwzMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlcG9y
dE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qKSBjb25zdDsKIAorICAgIGJvb2wgaXNNdXRh
YmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc011dGFibGU7IH0KKworcHJvdGVjdGVkOgorICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKCkKKyAgICAgICAgOiBtX2lzTXV0YWJsZSh0cnVlKQorICAgICAg
ICAsIG1fYXJyYXlTaXplKDApCisgICAgeyB9CisKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSh1
bnNpZ25lZCBhcnJheVNpemUpCisgICAgICAgIDogbV9pc011dGFibGUoZmFsc2UpCisgICAgICAg
ICwgbV9hcnJheVNpemUoYXJyYXlTaXplKQorICAgIHsgfQorCisgICAgbXV0YWJsZSBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gbV9pbmxpbmVTdHlsZURlY2w7CisgICAgbXV0YWJsZSBSZWZQdHI8
U3R5bGVQcm9wZXJ0eVNldD4gbV9hdHRyaWJ1dGVTdHlsZTsKKyAgICBtdXRhYmxlIFNwYWNlU3Bs
aXRTdHJpbmcgbV9jbGFzc05hbWVzOworICAgIG11dGFibGUgQXRvbWljU3RyaW5nIG1faWRGb3JT
dHlsZVJlc29sdXRpb247CisKKyAgICB1bnNpZ25lZCBtX2lzTXV0YWJsZSA6IDE7CisgICAgdW5z
aWduZWQgbV9hcnJheVNpemUgOiAzMTsKKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgRWxl
bWVudDsKICAgICBmcmllbmQgY2xhc3MgSFRNTENvbnN0cnVjdGlvblNpdGU7Ci0KLSAgICBFbGVt
ZW50QXR0cmlidXRlRGF0YSgpOwotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1l
bnRBdHRyaWJ1dGVEYXRhJik7Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9y
PEF0dHJpYnV0ZT4mKTsKKyAgICBmcmllbmQgY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGE7CisgICAgZnJpZW5kIGNsYXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKIAog
ICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUs
IGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7CiAgICAgY29uc3QgQXR0cmlidXRlKiBn
ZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKQEAgLTEwOSwyNyArMTI5LDUxIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBjbG9uZURhdGFGcm9tKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBzb3VyY2VE
YXRhLCBjb25zdCBFbGVtZW50JiBzb3VyY2VFbGVtZW50LCBFbGVtZW50JiB0YXJnZXRFbGVtZW50
KTsKICAgICB2b2lkIGNsZWFyQXR0cmlidXRlcyhFbGVtZW50Kik7CiAKLSAgICBib29sIGlzTXV0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdXRhYmxlOyB9Ci0gICAgUGFzc1JlZlB0cjxFbGVt
ZW50QXR0cmlidXRlRGF0YT4gbWFrZU11dGFibGUoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihu
ZXcgRWxlbWVudEF0dHJpYnV0ZURhdGEoKnRoaXMpKTsgfQorICAgIFBhc3NSZWZQdHI8RWxlbWVu
dEF0dHJpYnV0ZURhdGE+IG1ha2VNdXRhYmxlQ29weSgpIGNvbnN0OwogCi0gICAgdW5zaWduZWQg
bV9pc011dGFibGUgOiAxOwotICAgIHVuc2lnbmVkIG1fYXJyYXlTaXplIDogMzE7CisgICAgVmVj
dG9yPEF0dHJpYnV0ZSwgND4mIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKTsKKyAgICBjb25zdCBW
ZWN0b3I8QXR0cmlidXRlLCA0PiYgbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpIGNvbnN0OworICAg
IGNvbnN0IEF0dHJpYnV0ZSogaW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSBjb25zdDsKK307CiAK
LSAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX2lubGluZVN0eWxlRGVjbDsK
LSAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBtX2F0dHJpYnV0ZVN0eWxlOwot
ICAgIG11dGFibGUgU3BhY2VTcGxpdFN0cmluZyBtX2NsYXNzTmFtZXM7Ci0gICAgbXV0YWJsZSBB
dG9taWNTdHJpbmcgbV9pZEZvclN0eWxlUmVzb2x1dGlvbjsKK2NsYXNzIEltbXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsKK3B1YmxpYzoK
KyAgICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBWZWN0b3I8QXR0cmlidXRl
PiYpOworICAgIH5JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgpOworCisgICAgdm9pZCog
bV9hdHRyaWJ1dGVBcnJheTsKK307CiAKLSAgICB1bmlvbiB7Ci0gICAgICAgIFZlY3RvcjxBdHRy
aWJ1dGUsIDQ+KiBtX211dGFibGVBdHRyaWJ1dGVWZWN0b3I7Ci0gICAgICAgIHZvaWQqIG1fYXR0
cmlidXRlczsKLSAgICB9OworY2xhc3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVi
bGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsKK3B1YmxpYzoKKyAgICBNdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGEoKSB7IH0KKyAgICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3Qg
SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmKTsKKworICAgIFZlY3RvcjxBdHRyaWJ1dGUs
IDQ+IG1fYXR0cmlidXRlVmVjdG9yOwogfTsKIAoraW5saW5lIFZlY3RvcjxBdHRyaWJ1dGUsIDQ+
JiBFbGVtZW50QXR0cmlidXRlRGF0YTo6bXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpCit7CisgICAg
QVNTRVJUKG1faXNNdXRhYmxlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yOworfQorCitpbmxpbmUg
Y29uc3QgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptdXRhYmxl
QXR0cmlidXRlVmVjdG9yKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9pc011dGFibGUpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0
aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7Cit9CisKK2lubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjppbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKCFtX2lzTXV0YWJsZSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgQXR0cmlidXRlKj4oJnN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlQXJyYXkpOworfQorCiBpbmxpbmUgc2l6ZV90IEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjpsZW5ndGgoKSBjb25zdAogewogICAgIGlmIChpc011dGFibGUo
KSkKLSAgICAgICAgcmV0dXJuIG1fbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvci0+c2l6ZSgpOworICAg
ICAgICByZXR1cm4gbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLnNpemUoKTsKICAgICByZXR1cm4g
bV9hcnJheVNpemU7CiB9CiAKQEAgLTIwMSwxNyArMjQ1LDI5IEBAIGlubGluZSBBdHRyaWJ1dGUq
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hCiBpbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6YXR0
cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKICAgICBBU1NFUlQoaW5kZXggPCBs
ZW5ndGgoKSk7Ci0gICAgaWYgKGlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gJm1fbXV0YWJs
ZUF0dHJpYnV0ZVZlY3Rvci0+YXQoaW5kZXgpOwotICAgIGNvbnN0IEF0dHJpYnV0ZSogYnVmZmVy
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVzKTsKLSAg
ICByZXR1cm4gJmJ1ZmZlcltpbmRleF07CisgICAgaWYgKG1faXNNdXRhYmxlKQorICAgICAgICBy
ZXR1cm4gJm11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5hdChpbmRleCk7CisgICAgcmV0dXJuICZp
bW11dGFibGVBdHRyaWJ1dGVBcnJheSgpW2luZGV4XTsKIH0KIAogaW5saW5lIEF0dHJpYnV0ZSog
RWxlbWVudEF0dHJpYnV0ZURhdGE6OmF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpCiB7Ci0g
ICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKICAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgoKSk7Ci0g
ICAgcmV0dXJuICZtX211dGFibGVBdHRyaWJ1dGVWZWN0b3ItPmF0KGluZGV4KTsKKyAgICByZXR1
cm4gJm11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5hdChpbmRleCk7Cit9CisKK30KKworbmFtZXNw
YWNlIFdURiB7CisKK3RlbXBsYXRlIDw+IGlubGluZSB2b2lkIGRlbGV0ZU93bmVkUHRyPFdlYkNv
cmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhPihXZWJDb3JlOjpFbGVtZW50QXR0cmlidXRlRGF0YSog
cHRyKQoreworICAgIGlmICghcHRyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHB0ci0+aXNN
dXRhYmxlKCkpCisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpNdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGEqPihwdHIpOworICAgIGVsc2UKKyAgICAgICAgZGVsZXRlIHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4ocHRyKTsKIH0K
IAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>