<?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>75069</bug_id>
          
          <creation_ts>2011-12-21 23:38:12 -0800</creation_ts>
          <short_desc>Make elements with attributes smaller by eliminating the m_element back pointer in NamedNodeMap</short_desc>
          <delta_ts>2019-02-06 09:03:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>77233</dependson>
    
    <dependson>77674</dependson>
    
    <dependson>77800</dependson>
    
    <dependson>79963</dependson>
    
    <dependson>80169</dependson>
    
    <dependson>80188</dependson>
    
    <dependson>80522</dependson>
    
    <dependson>80541</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Caio Marcelo de Oliveira Filho">cmarcelo</assigned_to>
          <cc>adamk</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>ojan</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>526056</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-21 23:38:12 -0800</bug_when>
    <thetext>The back pointer from the heap-allocated vector of attributes to the element is a waste of space. We should move the data from the current NamedNodeMap class into a new heap-allocated class that is independent of the DOM.

The NamedNodeMap class should then just be a class with an Element* in it. The pointer to NamedNodeMap could go into ElementRareData or some other map, and all the operations could be done based on data stored in the element and its data structures. NamedNodeMap would no longer have any data of its own.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544230</commentid>
    <comment_count>1</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-01-27 11:54:28 -0800</bug_when>
    <thetext>I intend to implement this in steps. The first one is bug 77233 which would add ElementAttributeData, that will be the internal attribute storage. In that patch it is still part of NamedNodeMap, so no real change happen yet. It already contains the style related members that were in NamedNodeMap.

The next step is moving m_attributes to the ElementAttributeData, and the last step would be moving ElementAttributeData to Element and moving NamedNodeMap inside ElementRareData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573522</commentid>
    <comment_count>2</comment_count>
      <attachid>130754</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-07 20:00:36 -0800</bug_when>
    <thetext>Created attachment 130754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573527</commentid>
    <comment_count>3</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-07 20:04:23 -0800</bug_when>
    <thetext>It took more steps than planned because I made them smaller. In the end this made things easier to review. Tomorrow I&apos;m planning to improve the ChangeLog with some empirical data of memory usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573534</commentid>
    <comment_count>4</comment_count>
      <attachid>130754</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-03-07 20:14:43 -0800</bug_when>
    <thetext>Comment on attachment 130754
Patch

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

&gt; Source/WebCore/dom/Element.cpp:203
&gt; +NamedNodeMap* Element::attributes() const

I don&apos;t think this function should have const qualifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573577</commentid>
    <comment_count>5</comment_count>
      <attachid>130754</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 21:34:15 -0800</bug_when>
    <thetext>Comment on attachment 130754
Patch

Attachment 130754 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/11861141</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573781</commentid>
    <comment_count>6</comment_count>
      <attachid>130810</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-08 05:38:35 -0800</bug_when>
    <thetext>Created attachment 130810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573782</commentid>
    <comment_count>7</comment_count>
      <attachid>130754</attachid>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-08 05:41:37 -0800</bug_when>
    <thetext>Comment on attachment 130754
Patch

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

&gt;&gt; Source/WebCore/dom/Element.cpp:203
&gt;&gt; +NamedNodeMap* Element::attributes() const
&gt; 
&gt; I don&apos;t think this function should have const qualifier.

What about Node::attributes()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573888</commentid>
    <comment_count>8</comment_count>
    <who name="Caio Marcelo de Oliveira Filho">cmarcelo</who>
    <bug_when>2012-03-08 09:44:28 -0800</bug_when>
    <thetext>Committed r110172: &lt;http://trac.webkit.org/changeset/110172&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>578452</commentid>
    <comment_count>9</comment_count>
      <attachid>130810</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2012-03-14 08:59:23 -0700</bug_when>
    <thetext>Comment on attachment 130810
Patch

Clearing review flag from an old attachment so that it doesn&apos;t show on the review queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1502970</commentid>
    <comment_count>10</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-02-06 09:03:27 -0800</bug_when>
    <thetext>Mass moving XML DOM bugs to the &quot;DOM&quot; Component.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130754</attachid>
            <date>2012-03-07 20:00:36 -0800</date>
            <delta_ts>2012-03-08 05:41:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75069-20120308010043.patch</filename>
            <type>text/plain</type>
            <size>33120</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTBmMDZhYTVlOTU0Y2Zj
ZTU5YzczYWZhY2ZjYzYyN2QxMzVlNWNjYS4uMGE3ZTRiOTc2YTY3YjQ0MjRmMzg1NTU3NTZiZjQ5
NDVjZGExYTg2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTAzLTA3ICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgTWFrZSBlbGVtZW50cyB3aXRoIGF0dHJpYnV0ZXMgc21hbGxlciBieSBlbGlt
aW5hdGluZyB0aGUgbV9lbGVtZW50IGJhY2sgcG9pbnRlciBpbiBOYW1lZE5vZGVNYXAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDY5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmFtZWROb2RlTWFwIGlz
IGFuIGV4cG9zZWQgRE9NIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUg
c3RvcmFnZS4gQXMgcGFydCBvZgorICAgICAgICBpdHMgaW1wbGVtZW50YXRpb24gaXQga2VlcHMg
YSBwb2ludGVyIHRvIGl0cyBhc3NvY2lhdGVkIEVsZW1lbnQgcGx1cyBhbGwgdGhlIGF0dHJpYnV0
ZQorICAgICAgICBzdG9yYWdlLgorCisgICAgICAgIFRoaXMgY29tbWl0IHNlcGFyYXRlIHRoZSB0
d28gdGhpbmdzOiBOYW1lZE5vZGVNYXAgaXMgbm93IGEgd3JhcHBlciB0byBFbGVtZW50LCBjb250
YWluaW5nCisgICAgICAgIG9ubHkgdGhlIHBvaW50ZXIsIGFuZCB0aGUgYXR0cmlidXRlIHN0b3Jh
Z2UgaXMgbm93IG93bmVkIGJ5IEVsZW1lbnQgZGlyZWN0bHkuIFNpbmNlIHVzYWdlCisgICAgICAg
IG9mIE5hbWVkTm9kZU1hcCBpcyBub3QgdmVyeSBjb21tb24sIGl0IGNhbiBiZSBzdG9yZWQgaW4g
RWxlbWVudFJhcmVEYXRhLiBBcyBhIHJlc3VsdCwgbW9zdAorICAgICAgICBlbGVtZW50cyB3aXRo
IGF0dHJpYnV0ZXMgbm93IGRvbid0IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGF0IGV4
dHJhIHBvaW50ZXIgaW4KKyAgICAgICAgTmFtZWROb2RlTWFwLgorCisgICAgICAgIE9uZSBjb25z
ZXF1ZW5jZSBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRoYXQgbm93IHdlIGV4cGxpY2l0bHkg
ZG9uJ3Qgc3VwcG9ydAorICAgICAgICBEb2N1bWVudFR5cGUubm90YXRpb25zIGFuZCBEb2N1bWVu
dFR5cGUuZW50aXRpZXMuIFRoZXkgd2VyZW4ndCBzdXBwb3J0ZWQgYmVmb3JlLCBhCisgICAgICAg
IE5hbWVkTm9kZU1hcCB3YXMgbmV2ZXIgY3JlYXRlZCBmb3IgdGhvc2UgYXR0cmlidXRlcyAtLSBh
bmQgc29tZSBOYW1lZE5vZGVNYXAgZnVuY3Rpb25zCisgICAgICAgIHdvdWxkbid0IHdvcmsgY29y
cmVjdGx5IHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBFbGVtZW50LgorCisgICAgICAgIE5hbWVkTm9k
ZU1hcCBpdHNlbGYgd2FzIGNsZWFuZWQgdXAsIGFzIHdlbGwgYXMgdW5uZWNlc3NhcnkgcmVmZXJl
bmNlcyB0byBpdCByZW1vdmVkIGluIHRoZQorICAgICAgICBjb2RlIGFuZCBjb21tZW50cy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgYW5kIHNob3VsZCBub3QgY2hhbmdlIHJlc3VsdHMgZm9yIGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZG9tL0F0dHJpYnV0ZS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50VHlwZS5oOgorICAgICAgICAoRG9jdW1lbnRU
eXBlKTogUG9pbnQgb3V0IHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydCBkb2VzIGF0dHJpYnV0ZXMgeWV0
LgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
On5FbGVtZW50KTogRGV0YWNoaW5nIHRoZSBOYW1lZE5vZGVNYXAgaXMgbm8gbG9uZ2VyIG5lY2Vz
c2FyeSBiZWNhdXNlIGl0CisgICAgICAgIHdpbGwgYmUgZGVzdHJveWVkLiBXZSBzdGlsbCBkZXRh
Y2ggdGhlIHBvdGVudGlhbCBBdHRycyBpbnNpZGUgb3VyIEF0dHJpYnV0ZXMgYnkgdXNpbmcKKyAg
ICAgICAgY2xlYXJBdHRyaWJ1dGVzKCkuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRy
aWJ1dGVzKTogTG9va3MgaW4gRWxlbWVudFJhcmVEYXRhIG5vdy4gTm90ZSB3ZSBlbnN1cmUgdGhl
IGNyZWF0aW9uCisgICAgICAgIG9mIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZS4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZUludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6aGFzQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVh
dGVBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50
b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldE5vbkVtcHR5VVJMQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6Omhhc05hbWVkTm9kZU1hcCk6IEhlbHBlciBmdW5jdGlvbiBmb3Ig
Tm9kZTo6ZHVtcFN0YXRpc3RpY3MoKS4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAg
ICAoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZUF0dHJpYnV0ZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
Omhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmlkRm9yU3R5bGVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJp
YnV0ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlSXRlbSk6CisgICAgICAgICog
ZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0
cmlidXRlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAg
ICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6CisgICAgICAgIChFbGVtZW50UmFyZURhdGEp
OgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3BwOiBSZXdyaXRpbmcgbm93IHRoYXQgbV9h
dHRyaWJ1dGVEYXRhIGlzIG5vdCBhIG1lbWJlciwgdXNpbmcgbV9lbGVtZW50CisgICAgICAgIG1l
dGhvZHMgd2hlbiBwb3NzaWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6cmVm
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6ZGVyZWYpOgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZWROb2RlTWFwOjpnZXROYW1lZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TmFt
ZWROb2RlTWFwOjpnZXROYW1lZEl0ZW1OUyk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVN
YXA6OnJlbW92ZU5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJl
bW92ZU5hbWVkSXRlbU5TKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFt
ZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6aXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6Omxlbmd0aCk6CisgICAgICAgICogZG9tL05hbWVkTm9k
ZU1hcC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVN
YXA6OmNyZWF0ZSk6CisgICAgICAgIChOYW1lZE5vZGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6
TmFtZWROb2RlTWFwOjpOYW1lZE5vZGVNYXApOiBJbnN0ZWFkIG9mIGFzc2VydGluZyBtX2VsZW1l
bnQgaW4gZXZlcnkgZnVuY3Rpb24sIHdlCisgICAgICAgIG5vdyBhc3NlcnQgb25seSBpbiB0aGUg
Y29uc3RydWN0b3IuCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6ZHVtcFN0YXRpc3RpY3MpOiBBZGQgYSBjb3VudGVyIGZvciBlbGVtZW50cyB3aXRoIHJh
cmUgZGF0YSwgdGhpcyBhbGxvd3MgdXMKKyAgICAgICAgY29tcGFyZSBtb3JlIGNsZWFybHkgdGhl
IGltcGFjdCBvZiBtb3ZpbmcgTmFtZWROb2RlTWFwIHRoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6aXNFcXVhbE5vZGUpOiBSZW1vdmUgdXNlIG9mIG1hcHNFcXVpdmFsZW50KCkuIEl0IHdh
cyBkZWFkIGNvZGUsIGJlY2F1c2UKKyAgICAgICAgYm90aCBlbnRpdGllcyBhbmQgbm90YXRpb25z
IHdlcmUgYWx3YXlzIE5VTEwuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb21wYXJlRG9jdW1l
bnRQb3NpdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisKIDIwMTItMDMtMDcgIEtl
bnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6bWFyZ2luV2lkdGgoKSBhbmQgbWFyZ2luSGVpZ2h0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRy
aWJ1dGUuaAppbmRleCA4NjU4Nzc1Yjg5MTc0YzMwMjIzZTc5ZTM0ZTQ2NzRjZTdhNDdiZTBlLi44
YzU5ZDFjNDgzNjViOTA3OTJiNTI3ZmM2NDVmNTMzMjc4Y2JjMzE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJp
YnV0ZS5oCkBAIC0zMSw3ICszMSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXR0
cjsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBOYW1lZE5vZGVNYXA7CiAKIC8vIFRoaXMgaGFzIG5v
IGNvdW50ZXJwYXJ0IGluIERPTS4KIC8vIEl0IGlzIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9u
IG9mIHRoZSBub2RlIHZhbHVlIG9mIGFuIEF0dHIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgK
aW5kZXggOGZkMTFmMDM1OGY0MWY4ZDVmYWFiZTgxMzkxNGQ1YTM3NDllMmUzNy4uZmQ2Yzg5MTI0
YWRhZDhkZTc1MTdlNTI4OTAyYmNhNTFhZDJiZTk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50VHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFR5
cGUuaApAQCAtMzcsNiArMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgRG9jdW1lbnRUeXBlKGRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpKTsKICAg
ICB9CiAKKyAgICAvLyBGSVhNRTogV2UgbmV2ZXIgZmlsbCBtX2VudGl0aWVzIGFuZCBtX25vdGF0
aW9ucy4gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBOYW1lZE5vZGVNYXAgZG9lc24ndCB3b3Jr
IHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBFbGVtZW50IHlldC4KICAgICBOYW1lZE5vZGVNYXAqIGVu
dGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9lbnRpdGllcy5nZXQoKTsgfQogICAgIE5hbWVkTm9k
ZU1hcCogbm90YXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9ub3RhdGlvbnMuZ2V0KCk7IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDYxNWMxYzUzNThlZTNhNDZiYmJkYmE4ZGI2M2Q4OWQ1
Y2U1MDM0Y2IuLjNkNWM1Y2ViMzU2ZWRhNzBhYjdlYjNjNTZhNjg3YWIyMjE3NWQzMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91
cC5oIgogI2luY2x1ZGUgIk11dGF0aW9uUmVjb3JkLmgiCisjaW5jbHVkZSAiTmFtZWROb2RlTWFw
LmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJOb2RlUmVuZGVyaW5nQ29udGV4dC5oIgpAQCAtMTI1LDggKzEyNiw4IEBAIEVs
ZW1lbnQ6On5FbGVtZW50KCkKIHsKICAgICBpZiAoc2hhZG93VHJlZSgpKQogICAgICAgICByYXJl
RGF0YSgpLT5tX3NoYWRvd1RyZWUuY2xlYXIoKTsKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApCi0g
ICAgICAgIG1fYXR0cmlidXRlTWFwLT5kZXRhY2hGcm9tRWxlbWVudCgpOworICAgIGlmIChtX2F0
dHJpYnV0ZURhdGEpCisgICAgICAgIG1fYXR0cmlidXRlRGF0YS0+Y2xlYXJBdHRyaWJ1dGVzKCk7
CiB9CiAKIGlubGluZSBFbGVtZW50UmFyZURhdGEqIEVsZW1lbnQ6OnJhcmVEYXRhKCkgY29uc3QK
QEAgLTE5OSw2ICsyMDAsMTcgQEAgdm9pZCBFbGVtZW50OjpzZXRCb29sZWFuQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGJvb2wgdmFsdWUpCiAgICAgICAgIHJlbW92ZUF0dHJp
YnV0ZShuYW1lKTsKIH0KIAorTmFtZWROb2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVzKCkgY29u
c3QKK3sKKyAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpOworICAgIEVsZW1lbnRSYXJl
RGF0YSogcmFyZURhdGEgPSBjb25zdF9jYXN0PEVsZW1lbnQqPih0aGlzKS0+ZW5zdXJlUmFyZURh
dGEoKTsKKyAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSByYXJlRGF0YS0+bV9h
dHRyaWJ1dGVNYXAuZ2V0KCkpCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVNYXA7CisKKyAgICBy
YXJlRGF0YS0+bV9hdHRyaWJ1dGVNYXAgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZShjb25zdF9jYXN0
PEVsZW1lbnQqPih0aGlzKSk7CisgICAgcmV0dXJuIHJhcmVEYXRhLT5tX2F0dHJpYnV0ZU1hcC5n
ZXQoKTsKK30KKwogTm9kZTo6Tm9kZVR5cGUgRWxlbWVudDo6bm9kZVR5cGUoKSBjb25zdAogewog
ICAgIHJldHVybiBFTEVNRU5UX05PREU7CkBAIC0yMTksNyArMjMxLDcgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBFbGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkg
Y29uc3QKICAgICAgICAgdXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUobmFtZSk7CiAjZW5kaWYK
IAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgeworICAgIGlmIChtX2F0dHJpYnV0ZURhdGEpIHsK
ICAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlSXRlbShuYW1l
KSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQpAQCAtNTk2
LDggKzYwOCw4IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3QKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChtX2F0dHJp
YnV0ZU1hcCkgewotICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0
ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIGlnbm9yZUNhc2Up
KQorICAgIGlmIChtX2F0dHJpYnV0ZURhdGEpIHsKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gbV9hdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIGlnbm9yZUNh
c2UpKQogICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICB9CiAKQEAg
LTYzMCwxNiArNjQyLDE1IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUsCiAKIGlubGluZSB2b2lk
IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZUludGVybmFsKHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwgYm9vbCBub3RpZnlDaGFu
Z2VkKQogewotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gJm1fYXR0
cmlidXRlTWFwLT5tX2F0dHJpYnV0ZURhdGE7Ci0gICAgQXR0cmlidXRlKiBvbGQgPSBpbmRleCAh
PSBub3RGb3VuZCA/IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsKKyAg
ICBBdHRyaWJ1dGUqIG9sZCA9IGluZGV4ICE9IG5vdEZvdW5kID8gbV9hdHRyaWJ1dGVEYXRhLT5h
dHRyaWJ1dGVJdGVtKGluZGV4KSA6IDA7CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChvbGQpCi0gICAgICAgICAgICBhdHRyaWJ1dGVEYXRhLT5yZW1vdmVBdHRyaWJ1dGUo
aW5kZXgsIHRoaXMpOworICAgICAgICAgICAgbV9hdHRyaWJ1dGVEYXRhLT5yZW1vdmVBdHRyaWJ1
dGUoaW5kZXgsIHRoaXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFvbGQp
IHsKLSAgICAgICAgYXR0cmlidXRlRGF0YS0+YWRkQXR0cmlidXRlKEF0dHJpYnV0ZTo6Y3JlYXRl
KG5hbWUsIHZhbHVlKSwgdGhpcyk7CisgICAgICAgIG1fYXR0cmlidXRlRGF0YS0+YWRkQXR0cmli
dXRlKEF0dHJpYnV0ZTo6Y3JlYXRlKG5hbWUsIHZhbHVlKSwgdGhpcyk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTczMywzNyArNzQ0LDM1IEBAIHZvaWQgRWxlbWVudDo6cGFyc2VyU2V0
QXR0cmlidXRlcyhQYXNzT3duUHRyPEF0dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlVmVjdG9yLCBG
CiAKICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVyc2lvbigpOwogCi0gICAgQVNTRVJUKCFt
X2F0dHJpYnV0ZU1hcCk7CisgICAgQVNTRVJUKCFtX2F0dHJpYnV0ZURhdGEpOwogCiAgICAgaWYg
KCFhdHRyaWJ1dGVWZWN0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYXR0cmlidXRlTWFw
ID0gTmFtZWROb2RlTWFwOjpjcmVhdGUodGhpcyk7Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZURhdGEgPSBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpOwotICAgIGF0
dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlcy5zd2FwKCphdHRyaWJ1dGVWZWN0b3IpOworICAgIGNy
ZWF0ZUF0dHJpYnV0ZURhdGEoKTsKKyAgICBtX2F0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlcy5z
d2FwKCphdHRyaWJ1dGVWZWN0b3IpOwogCi0gICAgbV9hdHRyaWJ1dGVNYXAtPm1fZWxlbWVudCA9
IHRoaXM7CiAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBhcyByZXN1bHQgb2YgYSBw
YXN0ZSBvciBkcmFnLW4tZHJvcCBvcGVyYXRpb24KICAgICAvLyB3ZSB3YW50IHRvIHJlbW92ZSBh
bGwgdGhlIHNjcmlwdCBhbmQgZXZlbnQgaGFuZGxlcnMuCiAgICAgaWYgKHNjcmlwdGluZ1Blcm1p
c3Npb24gPT0gRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKSB7CiAgICAgICAgIHVuc2lnbmVk
IGkgPSAwOwotICAgICAgICB3aGlsZSAoaSA8IG1fYXR0cmlidXRlTWFwLT5sZW5ndGgoKSkgewot
ICAgICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0
ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICB3aGlsZSAoaSA8IG1fYXR0
cmlidXRlRGF0YS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJpYnV0ZU5hbWUgPSBtX2F0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+bmFtZSgp
OwogICAgICAgICAgICAgaWYgKGlzRXZlbnRIYW5kbGVyQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUp
KSB7Ci0gICAgICAgICAgICAgICAgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzLnJlbW92ZShp
KTsKKyAgICAgICAgICAgICAgICBtX2F0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlcy5yZW1vdmUo
aSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmIChpc0F0dHJpYnV0ZVRvUmVtb3ZlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZURhdGEt
Pm1fYXR0cmlidXRlc1tpXS0+dmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlRGF0
YS0+bV9hdHRyaWJ1dGVzW2ldLT5zZXRWYWx1ZShudWxsQXRvbSk7CisgICAgICAgICAgICBpZiAo
aXNBdHRyaWJ1dGVUb1JlbW92ZShhdHRyaWJ1dGVOYW1lLCBtX2F0dHJpYnV0ZURhdGEtPm1fYXR0
cmlidXRlc1tpXS0+dmFsdWUoKSkpCisgICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVEYXRhLT5t
X2F0dHJpYnV0ZXNbaV0tPnNldFZhbHVlKG51bGxBdG9tKTsKICAgICAgICAgICAgIGkrKzsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIFN0b3JlIHRoZSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0
IGNoYW5nZWQgb24gdGhlIHN0YWNrIGluIGNhc2UKLSAgICAvLyBhdHRyaWJ1dGVDaGFuZ2VkIG11
dGF0ZXMgbV9hdHRyaWJ1dGVNYXAuCisgICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1f
YXR0cmlidXRlRGF0YS4KICAgICBWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPiBhdHRyaWJ1dGVz
OwotICAgIGF0dHJpYnV0ZURhdGEtPmNvcHlBdHRyaWJ1dGVzVG9WZWN0b3IoYXR0cmlidXRlcyk7
CisgICAgbV9hdHRyaWJ1dGVEYXRhLT5jb3B5QXR0cmlidXRlc1RvVmVjdG9yKGF0dHJpYnV0ZXMp
OwogICAgIGZvciAoVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID46Oml0ZXJhdG9yIGl0ZXIgPSBh
dHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKQogICAg
ICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGl0ZXItPmdldCgpKTsKIH0KQEAgLTc3MSw3ICs3ODAsNyBA
QCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMoUGFzc093blB0cjxBdHRyaWJ1dGVW
ZWN0b3I+IGF0dHJpYnV0ZVZlY3RvciwgRgogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKCkg
Y29uc3QKIHsKICAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAgIHJldHVybiBtX2F0
dHJpYnV0ZU1hcCAmJiBtX2F0dHJpYnV0ZU1hcC0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIG1fYXR0
cmlidXRlRGF0YSAmJiBtX2F0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwogfQogCiBib29sIEVsZW1l
bnQ6Omhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVyKSBjb25zdApA
QCAtODIzLDkgKzgzMiw5IEBAIEtVUkwgRWxlbWVudDo6YmFzZVVSSSgpIGNvbnN0CiAgICAgcmV0
dXJuIEtVUkwocGFyZW50QmFzZSwgYmFzZUF0dHJpYnV0ZSk7CiB9CiAKLXZvaWQgRWxlbWVudDo6
Y3JlYXRlQXR0cmlidXRlTWFwKCkgY29uc3QKK3ZvaWQgRWxlbWVudDo6Y3JlYXRlQXR0cmlidXRl
RGF0YSgpIGNvbnN0CiB7Ci0gICAgbV9hdHRyaWJ1dGVNYXAgPSBOYW1lZE5vZGVNYXA6OmNyZWF0
ZShjb25zdF9jYXN0PEVsZW1lbnQqPih0aGlzKSk7CisgICAgbV9hdHRyaWJ1dGVEYXRhID0gRWxl
bWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZSgpOwogfQogCiBib29sIEVsZW1lbnQ6OmlzVVJMQXR0
cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0CkBAIC04NzgsNyArODg3LDcgQEAgdm9pZCBFbGVtZW50
OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiAgICAgaWYgKFNoYWRvd1RyZWUqIHRyZWUgPSBzaGFk
b3dUcmVlKCkpCiAgICAgICAgIHRyZWUtPmluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKLSAgICBp
ZiAobV9hdHRyaWJ1dGVNYXApIHsKKyAgICBpZiAobV9hdHRyaWJ1dGVEYXRhKSB7CiAgICAgICAg
IGlmIChoYXNJRCgpKSB7CiAgICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGdldEF0dHJp
YnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgaWYg
KGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKQEAgLTg5NCw3ICs5MDMsNyBAQCB2b2lkIEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIAogdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJv
bURvY3VtZW50KCkKIHsKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKKyAgICBpZiAobV9hdHRy
aWJ1dGVEYXRhKSB7CiAgICAgICAgIGlmIChoYXNJRCgpKSB7CiAgICAgICAgICAgICBBdHRyaWJ1
dGUqIGlkSXRlbSA9IGdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1l
KCkpOwogICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKQEAgLTE3
ODksNyArMTc5OCw3IEBAIERPTVN0cmluZ01hcCogRWxlbWVudDo6ZGF0YXNldCgpCiBLVVJMIEVs
ZW1lbnQ6OmdldFVSTEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAog
ewogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKKyAgICBp
ZiAobV9hdHRyaWJ1dGVEYXRhKSB7CiAgICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAgICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1
dGUoYXR0cmlidXRlKSk7CiAgICAgfQpAQCAtMTgwMCw3ICsxODA5LDcgQEAgS1VSTCBFbGVtZW50
OjpnZXRVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIEtVUkwg
RWxlbWVudDo6Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgaWYgKG1fYXR0cmlidXRlTWFw
KSB7CisgICAgaWYgKG1fYXR0cmlidXRlRGF0YSkgewogICAgICAgICBpZiAoQXR0cmlidXRlKiBh
dHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQogICAgICAgICAgICAgQVNTRVJUKGlz
VVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkpOwogICAgIH0KQEAgLTE5NjgsNiArMTk3NywxMyBAQCBi
b29sIEVsZW1lbnQ6OmZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUpIGNvbnN0CiB9CiAjZW5kaWYKIAorI2lmZGVmIERVTVBfTk9ERV9TVEFUSVNUSUNT
Citib29sIEVsZW1lbnQ6Omhhc05hbWVkTm9kZU1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhh
c1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+bV9hdHRyaWJ1dGVNYXA7Cit9CisjZW5kaWYKKwog
dm9pZCBFbGVtZW50Ojp3aWxsTW9kaWZ5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUsIGNvbnN0IEF0b21pY1N0cmluZyYgb2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3
VmFsdWUpCiB7CiAgICAgZG9jdW1lbnQoKS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCmluZGV4IDhlZWJiMDI4YzQ3YzkzNzczNGJkNjBlZDZiOGYxNGI4NmZiYjZkZDYuLjhj
ODI1MDczZjQwOGRhZWMxZTM1OTk4NDU2MmFiNDUwNWIxMTllYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aApAQCAtMjcsOSArMjcsOSBAQAogCiAjaW5jbHVkZSAiQ29sbGVjdGlvblR5cGUuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnRBdHRyaWJ1dGVEYXRhLmgiCiAjaW5j
bHVkZSAiRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCi0jaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTMwLDYgKzEzMCw5IEBAIHB1YmxpYzoKICAgICBi
b29sIGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25z
dDsKICNlbmRpZgogCisjaWZkZWYgRFVNUF9OT0RFX1NUQVRJU1RJQ1MKKyAgICBib29sIGhhc05h
bWVkTm9kZU1hcCgpIGNvbnN0OworI2VuZGlmCiAgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29u
c3Q7CiAgICAgLy8gVGhpcyB2YXJpYW50IHdpbGwgbm90IHVwZGF0ZSB0aGUgcG90ZW50aWFsbHkg
aW52YWxpZCBhdHRyaWJ1dGVzLiBUbyBiZSB1c2VkIHdoZW4gbm90IGludGVyZXN0ZWQKICAgICAv
LyBpbiBzdHlsZSBhdHRyaWJ1dGUgb3Igb25lIG9mIHRoZSBTVkcgYW5pbWF0aW9uIGF0dHJpYnV0
ZXMuCkBAIC0yMjksMTUgKzIzMiwxMyBAQCBwdWJsaWM6CiAgICAgLy8gRm9yIGV4cG9zaW5nIHRv
IERPTSBvbmx5LgogICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlcygpIGNvbnN0OwogCi0gICAg
TmFtZWROb2RlTWFwKiB1cGRhdGVkQXR0cmlidXRlcygpIGNvbnN0OwotCiAgICAgLy8gVGhpcyBt
ZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGFuIGF0dHJpYnV0ZSBpcyBhZGRlZCwgY2hhbmdlZCBv
ciByZW1vdmVkLgogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSop
OwogCiAgICAgLy8gT25seSBjYWxsZWQgYnkgdGhlIHBhcnNlciBpbW1lZGlhdGVseSBhZnRlciBl
bGVtZW50IGNvbnN0cnVjdGlvbi4KICAgICB2b2lkIHBhcnNlclNldEF0dHJpYnV0ZXMoUGFzc093
blB0cjxBdHRyaWJ1dGVWZWN0b3I+LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCi0g
ICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZU1hcCA/IG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCkgOiAwOyB9Cisg
ICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBt
X2F0dHJpYnV0ZURhdGEuZ2V0KCk7IH0KICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJl
QXR0cmlidXRlRGF0YSgpIGNvbnN0OwogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiB1cGRhdGVk
QXR0cmlidXRlRGF0YSgpIGNvbnN0OwogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbnN1cmVV
cGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0OwpAQCAtNDM2LDcgKzQzNyw3IEBAIHByaXZhdGU6
CiAKICAgICBib29sIHBzZXVkb1N0eWxlQ2FjaGVJc0ludmFsaWQoY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKTsKIAotICAgIHZvaWQgY3JlYXRl
QXR0cmlidXRlTWFwKCkgY29uc3Q7CisgICAgdm9pZCBjcmVhdGVBdHRyaWJ1dGVEYXRhKCkgY29u
c3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKSBjb25zdCB7IH0K
IApAQCAtNDY4LDcgKzQ2OSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVFeHRyYU5hbWVk
SXRlbVJlZ2lzdHJhdGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmV3TmFtZSk7CiAKIHByaXZhdGU6Ci0gICAgbXV0YWJsZSBPd25QdHI8TmFtZWRO
b2RlTWFwPiBtX2F0dHJpYnV0ZU1hcDsKKyAgICBtdXRhYmxlIE93blB0cjxFbGVtZW50QXR0cmli
dXRlRGF0YT4gbV9hdHRyaWJ1dGVEYXRhOwogfTsKICAgICAKIGlubGluZSBFbGVtZW50KiB0b0Vs
ZW1lbnQoTm9kZSogbm9kZSkKQEAgLTUyOCwyNSArNTI5LDExIEBAIGlubGluZSBFbGVtZW50KiBF
bGVtZW50OjpuZXh0RWxlbWVudFNpYmxpbmcoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obik7CiB9CiAKLWlubGluZSBOYW1lZE5vZGVNYXAqIEVsZW1lbnQ6OmF0dHJp
YnV0ZXMoKSBjb25zdAotewotICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYg
KCFtX2F0dHJpYnV0ZU1hcCkKLSAgICAgICAgY3JlYXRlQXR0cmlidXRlTWFwKCk7Ci0gICAgcmV0
dXJuIG1fYXR0cmlidXRlTWFwLmdldCgpOwotfQotCi1pbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVt
ZW50Ojp1cGRhdGVkQXR0cmlidXRlcygpIGNvbnN0Ci17Ci0gICAgdXBkYXRlSW52YWxpZEF0dHJp
YnV0ZXMoKTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAuZ2V0KCk7Ci19Ci0KIGlubGluZSBF
bGVtZW50QXR0cmlidXRlRGF0YSogRWxlbWVudDo6ZW5zdXJlQXR0cmlidXRlRGF0YSgpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZU1hcCkKLSAgICAgICAgY3JlYXRlQXR0cmlidXRlTWFw
KCk7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCk7CisgICAgaWYg
KCFtX2F0dHJpYnV0ZURhdGEpCisgICAgICAgIGNyZWF0ZUF0dHJpYnV0ZURhdGEoKTsKKyAgICBy
ZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmdldCgpOwogfQogCiBpbmxpbmUgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIEVsZW1lbnQ6OnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3QKQEAgLTYwNiwxMyAr
NTkzLDEzIEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OndpbGxSZW1vdmVBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljCiBpbmxpbmUgYm9vbCBFbGVtZW50Ojpm
YXN0SGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAg
QVNTRVJUKGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKLSAgICByZXR1cm4gbV9h
dHRyaWJ1dGVNYXAgJiYgZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAgICByZXR1cm4gbV9hdHRy
aWJ1dGVEYXRhICYmIGdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiB9CiAKIGlubGluZSBjb25zdCBB
dG9taWNTdHJpbmcmIEVsZW1lbnQ6OmZhc3RHZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQo
bmFtZSkpOwotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgeworICAgIGlmIChtX2F0dHJpYnV0ZURh
dGEpIHsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlSXRl
bShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQpA
QCAtNjIxLDEzICs2MDgsMTMgQEAgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6
ZmFzdEdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogCiBpbmxpbmUgYm9v
bCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fYXR0cmlidXRlTWFwICYmICFtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5p
c0VtcHR5KCk7CisgICAgcmV0dXJuIG1fYXR0cmlidXRlRGF0YSAmJiAhbV9hdHRyaWJ1dGVEYXRh
LT5pc0VtcHR5KCk7CiB9CiAKIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6Omlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzSUQoKSk7Ci0gICAg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKTsKKyAgICByZXR1
cm4gbV9hdHRyaWJ1dGVEYXRhLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOwogfQogCiBpbmxpbmUg
Ym9vbCBFbGVtZW50Ojppc0lkQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
aWJ1dGVOYW1lKSBjb25zdApAQCAtNjU2LDIwICs2NDMsMjAgQEAgaW5saW5lIHZvaWQgRWxlbWVu
dDo6c2V0SWRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIAogaW5saW5lIHNp
emVfdCBFbGVtZW50OjphdHRyaWJ1dGVDb3VudCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fYXR0
cmlidXRlTWFwKTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOworICAgIEFT
U0VSVChtX2F0dHJpYnV0ZURhdGEpOworICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEtPmxlbmd0
aCgpOwogfQogCiBpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50OjphdHRyaWJ1dGVJdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdAogewotICAgIEFTU0VSVChtX2F0dHJpYnV0ZU1hcCk7Ci0gICAgcmV0
dXJuIG1fYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgp
OworICAgIEFTU0VSVChtX2F0dHJpYnV0ZURhdGEpOworICAgIHJldHVybiBtX2F0dHJpYnV0ZURh
dGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOwogfQogCiBpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50
OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0g
ICAgQVNTRVJUKG1fYXR0cmlidXRlTWFwKTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAtPmF0
dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAgICBBU1NFUlQobV9hdHRy
aWJ1dGVEYXRhKTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVt
KG5hbWUpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJbnZhbGlkQXR0cmlidXRl
cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCmluZGV4
IDU2MDJhYjJkNmY4YjIxMzU5YTE5YzVlYWI0ZTE2MzI0YjIyOTAwYWUuLjFmYmYzZWU4YzE2NzE4
ZmM2M2RmMmZiZTBmY2MwNDFhNmU0OTU4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
QXR0cmlidXRlRGF0YS5oCkBAIC04Miw2ICs4MiwxMSBAQCBpbmxpbmUgdm9pZCBBdHRyaWJ1dGVW
ZWN0b3I6Omluc2VydEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gbmV3QXR0cmlidXRl
KQogCiBjbGFzcyBFbGVtZW50QXR0cmlidXRlRGF0YSB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKTsKKyAgICB9CisKICAgICB+
RWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKIAogICAgIHZvaWQgY2xlYXJDbGFzcygpIHsgbV9jbGFz
c05hbWVzLmNsZWFyKCk7IH0KQEAgLTEwOCw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgQXR0cmli
dXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F0dHJp
YnV0ZXMuYXR0cmlidXRlSXRlbShpbmRleCk7IH0KICAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0
ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1
dGVzLmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7IH0KICAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRl
bUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmli
dXRlcy5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7IH0KKyAgICBzaXplX3QgZ2V0QXR0cmli
dXRlSXRlbUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKSBjb25zdDsKIAogICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBkbyBubyBlcnJvciBjaGVj
a2luZy4KICAgICB2b2lkIGFkZEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4sIEVsZW1l
bnQqKTsKQEAgLTEyMiw3ICsxMjgsNiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIEVsZW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVkTm9kZU1hcDsKIAogICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKCkKICAgICB7CkBAIC0xMzEsNyArMTM2LDYgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwogICAgIHZvaWQgY29weUF0
dHJpYnV0ZXNUb1ZlY3RvcihWZWN0b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPiYpOwogICAgIEF0dHJp
YnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdu
b3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29u
c3Q7CiAgICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKICAgICB2b2lk
IHNldEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyLCBFbGVtZW50
Kik7CiAgICAgdm9pZCBjbGVhckF0dHJpYnV0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFy
ZURhdGEuaAppbmRleCAxMWM4MjU3OTMyOTRmODI2NWVhNThjZTE1MzczZjQzZTYzYzIyMDlkLi5j
ZDIzODRkODhiMDljNGE4NTNlZjVkZjg3NTgzN2Q3MDJmZDNkYmQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRSYXJlRGF0YS5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRGF0YXNldERP
TVN0cmluZ01hcC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVj
dGlvbi5oIgorI2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0
YS5oIgogI2luY2x1ZGUgIlNoYWRvd1RyZWUuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBA
IC02OSw2ICs3MCw3IEBAIHB1YmxpYzoKICAgICBPd25QdHI8RGF0YXNldERPTVN0cmluZ01hcD4g
bV9kYXRhc2V0RE9NU3RyaW5nTWFwOwogICAgIE93blB0cjxDbGFzc0xpc3Q+IG1fY2xhc3NMaXN0
OwogICAgIE93blB0cjxTaGFkb3dUcmVlPiBtX3NoYWRvd1RyZWU7CisgICAgT3duUHRyPE5hbWVk
Tm9kZU1hcD4gbV9hdHRyaWJ1dGVNYXA7CiAKICAgICBib29sIG1fc3R5bGVBZmZlY3RlZEJ5RW1w
dHk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5kZXggMGI3YjMwMzlkYTA4MTY3
NzQwNjdkYjllMGUzYjVjMTg1YTcxMWUxZC4uOTQyYzQwYzliZjYxNDAzMjY1ZGE3YmRkYzRkOWUx
MGI4OGUzZTFmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKQEAgLTQyLDQ3ICs0
Miw1MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShjb25z
dCBFbGVtZW50KiBlKQogCiB2b2lkIE5hbWVkTm9kZU1hcDo6cmVmKCkKIHsKLSAgICBBU1NFUlQo
bV9lbGVtZW50KTsKICAgICBtX2VsZW1lbnQtPnJlZigpOwogfQogCiB2b2lkIE5hbWVkTm9kZU1h
cDo6ZGVyZWYoKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQpOwogICAgIG1fZWxlbWVudC0+ZGVy
ZWYoKTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbShj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5n
ZXRBdHRyaWJ1dGVOb2RlKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVtZW50
KSwgbV9lbGVtZW50KTsKKyAgICByZXR1cm4gbV9lbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCktPmdl
dEF0dHJpYnV0ZU5vZGUobmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQp
LCBtX2VsZW1lbnQpOwogfQogCiBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6Z2V0TmFt
ZWRJdGVtTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxO
YW1lKSBjb25zdAogewotICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlTm9k
ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSksIG1fZWxl
bWVudCk7CisgICAgcmV0dXJuIG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1
dGVOb2RlKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSwg
bV9lbGVtZW50KTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5h
bWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFT
U0VSVChtX2VsZW1lbnQpOworICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRh
ID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCk7CiAKLSAgICBzaXplX3QgaW5kZXggPSBtX2F0
dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJp
YnV0ZUNhc2UobV9lbGVtZW50KSk7CisgICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0YS0+
Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9l
bGVtZW50KSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGVjID0gTk9U
X0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIHJldHVybiBt
X2F0dHJpYnV0ZURhdGEudGFrZUF0dHJpYnV0ZShpbmRleCwgbV9lbGVtZW50KTsKKyAgICByZXR1
cm4gYXR0cmlidXRlRGF0YS0+dGFrZUF0dHJpYnV0ZShpbmRleCwgbV9lbGVtZW50KTsKIH0KIAog
UGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbU5TKGNvbnN0IFN0
cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgcmV0dXJuIHJlbW92ZU5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxB
dG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSksIGVjKTsKKyAgICBFbGVtZW50QXR0cmlidXRl
RGF0YSogYXR0cmlidXRlRGF0YSA9IG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpOworCisgICAg
c2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KFF1YWxp
ZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSk7CisgICAgaWYgKGlu
ZGV4ID09IG5vdEZvdW5kKSB7CisgICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEtPnRha2VBdHRyaWJ1
dGUoaW5kZXgsIG1fZWxlbWVudCk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFw
OjpzZXROYW1lZEl0ZW0oTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYg
KCFtX2VsZW1lbnQgfHwgIW5vZGUpIHsKKyAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgZWMgPSBO
T1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xMDEsNDIgKzEwNywx
NiBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtTlMoTm9kZSog
bm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuIHNldE5hbWVkSXRlbShub2RlLCBl
Yyk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0o
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNT
RVJUKG1fZWxlbWVudCk7Ci0KLSAgICBzaXplX3QgaW5kZXggPSBtX2F0dHJpYnV0ZURhdGEuZ2V0
QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOwotICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgewot
ICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEudGFrZUF0dHJpYnV0ZShpbmRleCwgbV9lbGVtZW50
KTsKLX0KLQogUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6Oml0ZW0odW5zaWduZWQgaW5k
ZXgpIGNvbnN0CiB7CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEubV9hdHRyaWJ1dGVzW2luZGV4XS0+Y3Jl
YXRlQXR0cklmTmVlZGVkKG1fZWxlbWVudCk7Ci19Ci0KLXZvaWQgTmFtZWROb2RlTWFwOjpkZXRh
Y2hGcm9tRWxlbWVudCgpCi17Ci0gICAgLy8gVGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIGhvbGRl
ciBvZiB0aGUgbWFwIGlzIEphdmFTY3JpcHQsIGJlY2F1c2Ugd2UgbWFyayB0aGUKLSAgICAvLyBl
bGVtZW50IGlmIHRoZSBtYXAgaXMgYWxpdmUuIFNvIGl0IGhhcyBubyBpbXBhY3Qgb24gd2ViIHBh
Z2UgYmVoYXZpb3IuIEJlY2F1c2UKLSAgICAvLyBvZiB0aGF0LCB3ZSBjYW4gc2ltcGx5IGNsZWFy
IGFsbCB0aGUgYXR0cmlidXRlcyB0byBhdm9pZCBhY2Nlc3Npbmcgc3RhbGUKLSAgICAvLyBwb2lu
dGVycyB0byBkbyB0aGluZ3MgbGlrZSBjcmVhdGUgQXR0ciBvYmplY3RzLgotICAgIG1fZWxlbWVu
dCA9IDA7Ci0gICAgbV9hdHRyaWJ1dGVEYXRhLmNsZWFyQXR0cmlidXRlcygpOworICAgIHJldHVy
biBtX2VsZW1lbnQtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT5jcmVhdGVBdHRySWZOZWVkZWQobV9l
bGVtZW50KTsKIH0KIAotYm9vbCBOYW1lZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50KGNvbnN0IE5h
bWVkTm9kZU1hcCogb3RoZXJNYXApIGNvbnN0CitzaXplX3QgTmFtZWROb2RlTWFwOjpsZW5ndGgo
KSBjb25zdAogewotICAgIGlmICghb3RoZXJNYXApCi0gICAgICAgIHJldHVybiBtX2F0dHJpYnV0
ZURhdGEuaXNFbXB0eSgpOwotICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEuaXNFcXVpdmFsZW50
KG90aGVyTWFwLT5hdHRyaWJ1dGVEYXRhKCkpOworICAgIHJldHVybiBtX2VsZW1lbnQtPmF0dHJp
YnV0ZUNvdW50KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1l
ZE5vZGVNYXAuaAppbmRleCBkYWQzMTk4ZTcxOGE4MWFmODE0NzgxMTI1OWVkMDcwNDQwMzVkZWJi
Li5kNDJkNTJkMjM3NWQ3MWRkOTEyODZiNjAyMWMwOGYyMjU5YzZlM2M4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L05hbWVkTm9kZU1hcC5oCkBAIC0yNSwxOSArMjUsMjEgQEAKICNpZm5kZWYgTmFtZWROb2RlTWFw
X2gKICNkZWZpbmUgTmFtZWROb2RlTWFwX2gKIAotI2luY2x1ZGUgIkVsZW1lbnRBdHRyaWJ1dGVE
YXRhLmgiCi0jaW5jbHVkZSAiU3BhY2VTcGxpdFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBOb2RlOworY2xh
c3MgRWxlbWVudDsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgTmFtZWRO
b2RlTWFwIHsKICAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGNyZWF0ZShFbGVtZW50KiBlbGVtZW50ID0gMCkKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+IGNyZWF0ZShFbGVtZW50KiBlbGVtZW50
KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBOYW1lZE5vZGVNYXAoZWxlbWVu
dCkpOwogICAgIH0KQEAgLTUzLDM3ICs1NSwyMiBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxO
b2RlPiBnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJ
dGVtTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1l
LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRl
bShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1Jl
ZlB0cjxOb2RlPiBzZXROYW1lZEl0ZW0oTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNz
UmVmUHRyPE5vZGU+IHNldE5hbWVkSXRlbU5TKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CiAKICAg
ICBQYXNzUmVmUHRyPE5vZGU+IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwotICAgIHNpemVf
dCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEubGVuZ3RoKCk7IH0KLQot
ICAgIGJvb2wgbWFwc0VxdWl2YWxlbnQoY29uc3QgTmFtZWROb2RlTWFwKiBvdGhlck1hcCkgY29u
c3Q7Ci0KLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgZG8gbm8gZXJyb3IgY2hlY2tpbmcuCi0gICAg
dm9pZCBhZGRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSkgeyBtX2F0
dHJpYnV0ZURhdGEuYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSwgbV9lbGVtZW50KTsgfQorICAgIHNp
emVfdCBsZW5ndGgoKSBjb25zdDsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBtX2VsZW1lbnQ7IH0KIAotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVE
YXRhKCkgeyByZXR1cm4gJm1fYXR0cmlidXRlRGF0YTsgfQotICAgIGNvbnN0IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhKCkgY29uc3QgeyByZXR1cm4gJm1fYXR0cmlidXRlRGF0
YTsgfQotCiBwcml2YXRlOgogICAgIE5hbWVkTm9kZU1hcChFbGVtZW50KiBlbGVtZW50KQogICAg
ICAgICA6IG1fZWxlbWVudChlbGVtZW50KQogICAgIHsKKyAgICAgICAgLy8gT25seSBzdXBwb3J0
cyBOYW1lZE5vZGVNYXBzIHdpdGggRWxlbWVudCBhc3NvY2lhdGVkLCBEb2N1bWVudFR5cGUuZW50
aXRpZXMgYW5kIERvY3VtZW50VHlwZS5ub3RhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0Lgor
ICAgICAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICB9CiAKLSAgICB2b2lkIGRldGFjaEZyb21F
bGVtZW50KCk7Ci0gICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYg
bmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdCB7IHJldHVybiBtX2F0
dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKTsgfQotCi0gICAgLy8gRklYTUU6IE5hbWVkTm9kZU1hcCBpcyBiZWluZyBicm9rZW4gdXAg
aW50byB0d28gY2xhc3Nlcywgb25lIGNvbnRhaW5pbmcgZGF0YQotICAgIC8vICAgICAgICBmb3Ig
ZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVzLCBhbmQgb25lIGZvciBleHBvc3VyZSB0byB0aGUgRE9N
LgotICAgIC8vICAgICAgICBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNzUwNjk+IGZvciBtb3Jl
IGluZm9ybWF0aW9uLgotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIG1fYXR0cmlidXRlRGF0YTsK
LQogICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAzYjcx
NmFhZWViODM4YWRhYmU2NzBiN2ViOGIzZmE0M2Q5NjYwN2E3Li5mMDZkOWJkMjhjOTg2MDA0YjU4
NzIzNjIyM2E2MmFhYmY0Yjg4N2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0xNjAsMTMgKzE2MCwy
MCBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0aXN0aWNzKCkKICAgICBzaXplX3QgYXR0cmlidXRlcyA9
IDA7CiAgICAgc2l6ZV90IGF0dHJpYnV0ZXNXaXRoQXR0ciA9IDA7CiAgICAgc2l6ZV90IGVsZW1l
bnRzV2l0aEF0dHJpYnV0ZVN0b3JhZ2UgPSAwOworICAgIHNpemVfdCBlbGVtZW50c1dpdGhSYXJl
RGF0YSA9IDA7CiAgICAgc2l6ZV90IGVsZW1lbnRzV2l0aE5hbWVkTm9kZU1hcCA9IDA7CiAKICAg
ICBmb3IgKEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdCA9IGxpdmVOb2RlU2V0LmJlZ2luKCk7
IGl0ICE9IGxpdmVOb2RlU2V0LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSAq
aXQ7CiAKLSAgICAgICAgaWYgKG5vZGUtPmhhc1JhcmVEYXRhKCkpCisgICAgICAgIGlmIChub2Rl
LT5oYXNSYXJlRGF0YSgpKSB7CiAgICAgICAgICAgICArK25vZGVzV2l0aFJhcmVEYXRhOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICsr
ZWxlbWVudHNXaXRoUmFyZURhdGE7CisgICAgICAgICAgICAgICAgaWYgKHRvRWxlbWVudChub2Rl
KS0+aGFzTmFtZWROb2RlTWFwKCkpCisgICAgICAgICAgICAgICAgICAgICsrZWxlbWVudHNXaXRo
TmFtZWROb2RlTWFwOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgc3dpdGNo
IChub2RlLT5ub2RlVHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEVMRU1FTlRfTk9ERTogewpA
QCAtMTgxLDggKzE4OCw2IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICAg
ICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQt
PmF0dHJpYnV0ZURhdGEoKSkgewogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0
dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgICArK2VsZW1lbnRzV2l0
aEF0dHJpYnV0ZVN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdp
bGwgY2hhbmdlIG9uY2UgYXR0cmlidXRlIHN0b3JhZ2UgZ29lcyBvdXQgb2YgTmFtZWROb2RlTWFw
LgotICAgICAgICAgICAgICAgICAgICArK2VsZW1lbnRzV2l0aE5hbWVkTm9kZU1hcDsKICAgICAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZURhdGEtPmxl
bmd0aCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9
IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXR0ci0+YXR0cigpKQpAQCAtMjcyLDYgKzI3Nyw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0
YXRpc3RpY3MoKQogICAgIHByaW50ZigiICBOdW1iZXIgb2YgQXR0cmlidXRlcyAobm9uLU5vZGUg
YW5kIE5vZGUpOiAlenUgWyV6dV1cbiIsIGF0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUpKTsK
ICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgd2l0aCBhbiBBdHRyOiAlenVcbiIs
IGF0dHJpYnV0ZXNXaXRoQXR0cik7CiAgICAgcHJpbnRmKCIgIE51bWJlciBvZiBFbGVtZW50cyB3
aXRoIGF0dHJpYnV0ZSBzdG9yYWdlOiAlenUgWyV6dV1cbiIsIGVsZW1lbnRzV2l0aEF0dHJpYnV0
ZVN0b3JhZ2UsIHNpemVvZihFbGVtZW50QXR0cmlidXRlRGF0YSkpOworICAgIHByaW50ZigiICBO
dW1iZXIgb2YgRWxlbWVudHMgd2l0aCBSYXJlRGF0YTogJXp1XG4iLCBlbGVtZW50c1dpdGhSYXJl
RGF0YSk7CiAgICAgcHJpbnRmKCIgIE51bWJlciBvZiBFbGVtZW50cyB3aXRoIE5hbWVkTm9kZU1h
cDogJXp1IFslenVdXG4iLCBlbGVtZW50c1dpdGhOYW1lZE5vZGVNYXAsIHNpemVvZihOYW1lZE5v
ZGVNYXApKTsKICNlbmRpZgogfQpAQCAtMTgwMywxOSArMTgwOSw3IEBAIGJvb2wgTm9kZTo6aXNF
cXVhbE5vZGUoTm9kZSogb3RoZXIpIGNvbnN0CiAgICAgICAgIGlmIChkb2N1bWVudFR5cGVUaGlz
LT5pbnRlcm5hbFN1YnNldCgpICE9IGRvY3VtZW50VHlwZU90aGVyLT5pbnRlcm5hbFN1YnNldCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIE5hbWVkTm9kZU1hcCogZW50
aXRpZXMgPSBkb2N1bWVudFR5cGVUaGlzLT5lbnRpdGllcygpOwotICAgICAgICBOYW1lZE5vZGVN
YXAqIG90aGVyRW50aXRpZXMgPSBkb2N1bWVudFR5cGVPdGhlci0+ZW50aXRpZXMoKTsKLSAgICAg
ICAgaWYgKCFlbnRpdGllcyAmJiBvdGhlckVudGl0aWVzKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoZW50aXRpZXMgJiYgIWVudGl0aWVzLT5tYXBzRXF1aXZhbGVudChv
dGhlckVudGl0aWVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBOYW1l
ZE5vZGVNYXAqIG5vdGF0aW9ucyA9IGRvY3VtZW50VHlwZVRoaXMtPm5vdGF0aW9ucygpOwotICAg
ICAgICBOYW1lZE5vZGVNYXAqIG90aGVyTm90YXRpb25zID0gZG9jdW1lbnRUeXBlT3RoZXItPm5v
dGF0aW9ucygpOwotICAgICAgICBpZiAoIW5vdGF0aW9ucyAmJiBvdGhlck5vdGF0aW9ucykKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG5vdGF0aW9ucyAmJiAhbm90YXRp
b25zLT5tYXBzRXF1aXZhbGVudChvdGhlck5vdGF0aW9ucykpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjb21wYXJlIGVudGl0aWVzIG9yIG5v
dGF0aW9ucyBiZWNhdXNlIGN1cnJlbnRseSBib3RoIGFyZSBhbHdheXMgZW1wdHkuCiAgICAgfQog
ICAgIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjExNCw3ICsyMTA4LDcgQEAgdW5zaWduZWQgc2hv
cnQgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9kZSogb3RoZXJOb2RlKQogICAgIGlm
IChhdHRyMSAmJiBhdHRyMiAmJiBzdGFydDEgPT0gc3RhcnQyICYmIHN0YXJ0MSkgewogICAgICAg
ICAvLyBXZSBhcmUgY29tcGFyaW5nIHR3byBhdHRyaWJ1dGVzIG9uIHRoZSBzYW1lIG5vZGUuIENy
YXdsIG91ciBhdHRyaWJ1dGUgbWFwIGFuZCBzZWUgd2hpY2ggb25lIHdlIGhpdCBmaXJzdC4KICAg
ICAgICAgRWxlbWVudCogb3duZXIxID0gYXR0cjEtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBv
d25lcjEtPnVwZGF0ZWRBdHRyaWJ1dGVzKCk7IC8vIEZvcmNlIHVwZGF0ZSBpbnZhbGlkIGF0dHJp
YnV0ZXMuCisgICAgICAgIG93bmVyMS0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsgLy8gRm9yY2Ug
dXBkYXRlIGludmFsaWQgYXR0cmlidXRlcy4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3du
ZXIxLT5hdHRyaWJ1dGVDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIC8vIElmIG5laXRoZXIgb2YgdGhlIHR3byBkZXRl
cm1pbmluZyBub2RlcyBpcyBhIGNoaWxkIG5vZGUgYW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1lIGZv
ciBib3RoIGRldGVybWluaW5nIG5vZGVzLCB0aGVuIGFuIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTVBhdGNoU3VwcG9ydC5oCmluZGV4IDRkMDQwZjA4Yjk2ZDNkN2ZiYzFiNjQ4MmU0ZGQw
NjkxZDRkMTZlZjEuLmRkNjdhNjMxMTAxMzQ0YWMwOTJmYWEyNDQxMjRiMTg5OTY3MTY4ODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmgKQEAgLTQ0LDcgKzQ0
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIERP
TUVkaXRvcjsKIGNsYXNzIERvY3VtZW50OwotY2xhc3MgTmFtZWROb2RlTWFwOwogY2xhc3MgTm9k
ZTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5k
ZXggZTY1ZjVhYjQxOGY5YTkwOGRkNTM3MTE0NTkzZGRmOTcyYTg4NTNmNy4uZjA0ODZhOGEyNDgw
ZmExYzMyZTI4ZjhlZmVlOTY5OGJjNjUwMzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNw
cApAQCAtNDE1LDcgKzQxNSw3IEBAIHZvaWQgU1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChB
dHRyaWJ1dGUqIGF0dHIpCiAKICAgICAvLyBXaGVuIGFuIGFuaW1hdGVkIFNWRyBwcm9wZXJ0eSBj
aGFuZ2VzIHRocm91Z2ggU1ZHIERPTSwgc3ZnQXR0cmlidXRlQ2hhbmdlZCgpIGlzIGNhbGxlZCwg
bm90IGF0dHJpYnV0ZUNoYW5nZWQoKS4KICAgICAvLyBOZXh0IHRpbWUgc29tZW9uZSB0cmllcyB0
byBhY2Nlc3MgdGhlIFhNTCBhdHRyaWJ1dGVzLCB0aGUgc3luY2hyb25pemF0aW9uIGNvZGUgc3Rh
cnRzLiBEdXJpbmcgdGhhdCBzeW5jaHJvbml6YXRpb24KLSAgICAvLyBTVkdBbmltYXRlZFByb3Bl
cnR5U3luY2hyb25pemVyIG1heSBjYWxsIE5hbWVkTm9kZU1hcDo6cmVtb3ZlQXR0cmlidXRlKCks
IHdoaWNoIGluIHR1cm4gY2FsbHMgYXR0cmlidXRlQ2hhbmdlZCgpLgorICAgIC8vIFNWR0FuaW1h
dGVkUHJvcGVydHlTeW5jaHJvbml6ZXIgbWF5IGNhbGwgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJl
bW92ZUF0dHJpYnV0ZSgpLCB3aGljaCBpbiB0dXJuIGNhbGxzIGF0dHJpYnV0ZUNoYW5nZWQoKS4K
ICAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIG5vdCBhbGxvd2VkIHRvIGNhbGwgc3ZnQXR0cmli
dXRlQ2hhbmdlZCgpIGFnYWluIC0gaXQgbWF5IGxlYWQgdG8gZXh0cmEgd29yayBiZWluZyBkb25l
LCBvciBjcmFzaGVzCiAgICAgLy8gc2VlIGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDA5OTQuCiAgICAgaWYgKGlzU3luY2hyb25pemluZ1NWR0F0dHJpYnV0ZXMo
KSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130810</attachid>
            <date>2012-03-08 05:38:35 -0800</date>
            <delta_ts>2012-03-14 08:59:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75069-20120308103843.patch</filename>
            <type>text/plain</type>
            <size>34371</size>
            <attacher name="Caio Marcelo de Oliveira Filho">cmarcelo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEwMTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NlY2Y5NWJkNDI4ODZj
MzhmYjMyNmE5MWYyYTdlMmNmYjVhMWEwYS4uZTEzMGU0MzFjZTU3MzNkYjMyYzU4Nzg3NDc5OWRj
NjNlMjExM2VlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTAzLTA4ICBDYWlv
IE1hcmNlbG8gZGUgT2xpdmVpcmEgRmlsaG8gIDxjYWlvLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+
CisKKyAgICAgICAgTWFrZSBlbGVtZW50cyB3aXRoIGF0dHJpYnV0ZXMgc21hbGxlciBieSBlbGlt
aW5hdGluZyB0aGUgbV9lbGVtZW50IGJhY2sgcG9pbnRlciBpbiBOYW1lZE5vZGVNYXAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1MDY5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmFtZWROb2RlTWFwIGlz
IGFuIGV4cG9zZWQgRE9NIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVsZW1lbnQncyBhdHRyaWJ1dGUg
c3RvcmFnZS4gQXMgcGFydCBvZgorICAgICAgICBpdHMgaW1wbGVtZW50YXRpb24gaXQga2VlcHMg
YSBwb2ludGVyIHRvIGl0cyBhc3NvY2lhdGVkIEVsZW1lbnQgcGx1cyBhbGwgdGhlIGF0dHJpYnV0
ZQorICAgICAgICBzdG9yYWdlLgorCisgICAgICAgIFRoaXMgY29tbWl0IHNlcGFyYXRlIHRoZSB0
d28gdGhpbmdzOiBOYW1lZE5vZGVNYXAgaXMgbm93IGEgd3JhcHBlciB0byBFbGVtZW50LCBjb250
YWluaW5nCisgICAgICAgIG9ubHkgdGhlIHBvaW50ZXIsIGFuZCB0aGUgYXR0cmlidXRlIHN0b3Jh
Z2UgaXMgbm93IG93bmVkIGJ5IEVsZW1lbnQgZGlyZWN0bHkuIFNpbmNlIHVzYWdlCisgICAgICAg
IG9mIE5hbWVkTm9kZU1hcCBpcyBub3QgdmVyeSBjb21tb24sIGl0IGNhbiBiZSBzdG9yZWQgaW4g
RWxlbWVudFJhcmVEYXRhLiBBcyBhIHJlc3VsdCwgbW9zdAorICAgICAgICBlbGVtZW50cyB3aXRo
IGF0dHJpYnV0ZXMgbm93IGRvbid0IG5lZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGF0IGV4
dHJhIHBvaW50ZXIgaW4KKyAgICAgICAgTmFtZWROb2RlTWFwLgorCisgICAgICAgIE9uZSBjb25z
ZXF1ZW5jZSBvZiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRoYXQgbm93IHdlIGV4cGxpY2l0bHkg
ZG9uJ3Qgc3VwcG9ydAorICAgICAgICBEb2N1bWVudFR5cGUubm90YXRpb25zIGFuZCBEb2N1bWVu
dFR5cGUuZW50aXRpZXMuIFRoZXkgd2VyZW4ndCBzdXBwb3J0ZWQgYmVmb3JlLCBhCisgICAgICAg
IE5hbWVkTm9kZU1hcCB3YXMgbmV2ZXIgY3JlYXRlZCBmb3IgdGhvc2UgYXR0cmlidXRlcyAtLSBh
bmQgc29tZSBOYW1lZE5vZGVNYXAgZnVuY3Rpb25zCisgICAgICAgIHdvdWxkbid0IHdvcmsgY29y
cmVjdGx5IHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBFbGVtZW50LgorCisgICAgICAgIE5hbWVkTm9k
ZU1hcCBpdHNlbGYgd2FzIGNsZWFuZWQgdXAsIGFzIHdlbGwgYXMgdW5uZWNlc3NhcnkgcmVmZXJl
bmNlcyB0byBpdCByZW1vdmVkIGluIHRoZQorICAgICAgICBjb2RlIGFuZCBjb21tZW50cy4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgYW5kIHNob3VsZCBub3QgY2hhbmdlIHJlc3VsdHMgZm9yIGV4
aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZG9tL0F0dHJpYnV0ZS5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50VHlwZS5oOgorICAgICAgICAoRG9jdW1lbnRU
eXBlKTogUG9pbnQgb3V0IHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydCBkb2VzIGF0dHJpYnV0ZXMgeWV0
LgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
On5FbGVtZW50KTogRGV0YWNoaW5nIHRoZSBOYW1lZE5vZGVNYXAgaXMgbm8gbG9uZ2VyIG5lY2Vz
c2FyeSBiZWNhdXNlIGl0CisgICAgICAgIHdpbGwgYmUgZGVzdHJveWVkLiBXZSBzdGlsbCBkZXRh
Y2ggdGhlIHBvdGVudGlhbCBBdHRycyBpbnNpZGUgb3VyIEF0dHJpYnV0ZXMgYnkgdXNpbmcKKyAg
ICAgICAgY2xlYXJBdHRyaWJ1dGVzKCkuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRy
aWJ1dGVzKTogTG9va3MgaW4gRWxlbWVudFJhcmVEYXRhIG5vdy4gTm90ZSB3ZSBlbnN1cmUgdGhl
IGNyZWF0aW9uCisgICAgICAgIG9mIHRoZSBhdHRyaWJ1dGUgc3RvcmFnZS4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZUludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6aGFzQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVh
dGVBdHRyaWJ1dGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omluc2VydGVkSW50
b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldE5vbkVtcHR5VVJMQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6Omhhc05hbWVkTm9kZU1hcCk6IEhlbHBlciBmdW5jdGlvbiBmb3Ig
Tm9kZTo6ZHVtcFN0YXRpc3RpY3MoKS4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAg
ICAoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZUF0dHJpYnV0ZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
Omhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmlkRm9yU3R5bGVSZXNvbHV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJp
YnV0ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlSXRlbSk6CisgICAgICAgICog
ZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50QXR0
cmlidXRlRGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKEVsZW1lbnRBdHRyaWJ1dGVEYXRhKToKKyAg
ICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6CisgICAgICAgIChFbGVtZW50UmFyZURhdGEp
OgorICAgICAgICAqIGRvbS9OYW1lZE5vZGVNYXAuY3BwOiBSZXdyaXRpbmcgbm93IHRoYXQgbV9h
dHRyaWJ1dGVEYXRhIGlzIG5vdCBhIG1lbWJlciwgdXNpbmcgbV9lbGVtZW50CisgICAgICAgIG1l
dGhvZHMgd2hlbiBwb3NzaWJsZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6cmVm
KToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6ZGVyZWYpOgorICAgICAgICAoV2Vi
Q29yZTo6TmFtZWROb2RlTWFwOjpnZXROYW1lZEl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6TmFt
ZWROb2RlTWFwOjpnZXROYW1lZEl0ZW1OUyk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVN
YXA6OnJlbW92ZU5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJl
bW92ZU5hbWVkSXRlbU5TKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6c2V0TmFt
ZWRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTm9kZU1hcDo6aXRlbSk6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6Omxlbmd0aCk6CisgICAgICAgICogZG9tL05hbWVkTm9k
ZU1hcC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVN
YXA6OmNyZWF0ZSk6CisgICAgICAgIChOYW1lZE5vZGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6
TmFtZWROb2RlTWFwOjpOYW1lZE5vZGVNYXApOiBJbnN0ZWFkIG9mIGFzc2VydGluZyBtX2VsZW1l
bnQgaW4gZXZlcnkgZnVuY3Rpb24sIHdlCisgICAgICAgIG5vdyBhc3NlcnQgb25seSBpbiB0aGUg
Y29uc3RydWN0b3IuCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6ZHVtcFN0YXRpc3RpY3MpOiBBZGQgYSBjb3VudGVyIGZvciBlbGVtZW50cyB3aXRoIHJh
cmUgZGF0YSwgdGhpcyBhbGxvd3MgdXMKKyAgICAgICAgY29tcGFyZSBtb3JlIGNsZWFybHkgdGhl
IGltcGFjdCBvZiBtb3ZpbmcgTmFtZWROb2RlTWFwIHRoZXJlLgorICAgICAgICAoV2ViQ29yZTo6
Tm9kZTo6aXNFcXVhbE5vZGUpOiBSZW1vdmUgdXNlIG9mIG1hcHNFcXVpdmFsZW50KCkuIEl0IHdh
cyBkZWFkIGNvZGUsIGJlY2F1c2UKKyAgICAgICAgYm90aCBlbnRpdGllcyBhbmQgbm90YXRpb25z
IHdlcmUgYWx3YXlzIE5VTEwuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpjb21wYXJlRG9jdW1l
bnRQb3NpdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisKIDIwMTItMDMtMDggIFNo
aW55YSBLYXdhbmFrYSAgPHNoaW55YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIDxzaGFkb3c+
IHNob3VsZCBiZSByZW5kZXJlZCBjb3JyZWN0bHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDc2MDczYWYyZmU1YTBkMmNiZTllMTdmYTk1MDRjZWFkY2FmYTZhOGUuLmIwM2EwZWRhZmM1
YjVhMTc5OWMyMGE1ZmQ2MzA0N2Y1NDJhY2YwMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDMtMDggIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBG
aWxobyAgPGNhaW8ub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAgICAgICBNYWtlIGVsZW1l
bnRzIHdpdGggYXR0cmlidXRlcyBzbWFsbGVyIGJ5IGVsaW1pbmF0aW5nIHRoZSBtX2VsZW1lbnQg
YmFjayBwb2ludGVyIGluIE5hbWVkTm9kZU1hcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzUwNjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJFbGVtZW50LmNwcDogSW5jbHVkZSBOYW1lZE5v
ZGVNYXAuaCBzaW5jZSBFbGVtZW50LmggZG9lc24ndCBpbmNsdWRlIGl0IGFueW1vcmUuCisKIDIw
MTItMDMtMDcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
bW92ZSBtZWFuaW5nbGVzcyBjb2RlIGluIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cHJl
ZmVycmVkQ29udGVudFdpZHRoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRy
aWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaAppbmRleCA4NjU4Nzc1Yjg5
MTc0YzMwMjIzZTc5ZTM0ZTQ2NzRjZTdhNDdiZTBlLi44YzU5ZDFjNDgzNjViOTA3OTJiNTI3ZmM2
NDVmNTMzMjc4Y2JjMzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHJpYnV0ZS5oCkBAIC0zMSw3ICszMSw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXR0cjsKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFz
cyBOYW1lZE5vZGVNYXA7CiAKIC8vIFRoaXMgaGFzIG5vIGNvdW50ZXJwYXJ0IGluIERPTS4KIC8v
IEl0IGlzIGFuIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlIHZhbHVlIG9mIGFu
IEF0dHIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgKaW5kZXggOGZkMTFmMDM1OGY0MWY4ZDVm
YWFiZTgxMzkxNGQ1YTM3NDllMmUzNy4uZmQ2Yzg5MTI0YWRhZDhkZTc1MTdlNTI4OTAyYmNhNTFh
ZDJiZTk0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFR5cGUuaApAQCAtMzcsNiArMzcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRG9jdW1lbnRUeXBlKGRvY3VtZW50
LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpKTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogV2Ug
bmV2ZXIgZmlsbCBtX2VudGl0aWVzIGFuZCBtX25vdGF0aW9ucy4gQ3VycmVudCBpbXBsZW1lbnRh
dGlvbiBvZiBOYW1lZE5vZGVNYXAgZG9lc24ndCB3b3JrIHdpdGhvdXQgYW4gYXNzb2NpYXRlZCBF
bGVtZW50IHlldC4KICAgICBOYW1lZE5vZGVNYXAqIGVudGl0aWVzKCkgY29uc3QgeyByZXR1cm4g
bV9lbnRpdGllcy5nZXQoKTsgfQogICAgIE5hbWVkTm9kZU1hcCogbm90YXRpb25zKCkgY29uc3Qg
eyByZXR1cm4gbV9ub3RhdGlvbnMuZ2V0KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4
IDYxNWMxYzUzNThlZTNhNDZiYmJkYmE4ZGI2M2Q4OWQ1Y2U1MDM0Y2IuLjNkNWM1Y2ViMzU2ZWRh
NzBhYjdlYjNjNTZhNjg3YWIyMjE3NWQzMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTUy
LDYgKzUyLDcgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNs
dWRlICJNdXRhdGlvbk9ic2VydmVySW50ZXJlc3RHcm91cC5oIgogI2luY2x1ZGUgIk11dGF0aW9u
UmVjb3JkLmgiCisjaW5jbHVkZSAiTmFtZWROb2RlTWFwLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyaW5n
Q29udGV4dC5oIgpAQCAtMTI1LDggKzEyNiw4IEBAIEVsZW1lbnQ6On5FbGVtZW50KCkKIHsKICAg
ICBpZiAoc2hhZG93VHJlZSgpKQogICAgICAgICByYXJlRGF0YSgpLT5tX3NoYWRvd1RyZWUuY2xl
YXIoKTsKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApCi0gICAgICAgIG1fYXR0cmlidXRlTWFwLT5k
ZXRhY2hGcm9tRWxlbWVudCgpOworICAgIGlmIChtX2F0dHJpYnV0ZURhdGEpCisgICAgICAgIG1f
YXR0cmlidXRlRGF0YS0+Y2xlYXJBdHRyaWJ1dGVzKCk7CiB9CiAKIGlubGluZSBFbGVtZW50UmFy
ZURhdGEqIEVsZW1lbnQ6OnJhcmVEYXRhKCkgY29uc3QKQEAgLTE5OSw2ICsyMDAsMTcgQEAgdm9p
ZCBFbGVtZW50OjpzZXRCb29sZWFuQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IGJvb2wgdmFsdWUpCiAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKIH0KIAorTmFtZWRO
b2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVzKCkgY29uc3QKK3sKKyAgICBlbnN1cmVVcGRhdGVk
QXR0cmlidXRlRGF0YSgpOworICAgIEVsZW1lbnRSYXJlRGF0YSogcmFyZURhdGEgPSBjb25zdF9j
YXN0PEVsZW1lbnQqPih0aGlzKS0+ZW5zdXJlUmFyZURhdGEoKTsKKyAgICBpZiAoTmFtZWROb2Rl
TWFwKiBhdHRyaWJ1dGVNYXAgPSByYXJlRGF0YS0+bV9hdHRyaWJ1dGVNYXAuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBhdHRyaWJ1dGVNYXA7CisKKyAgICByYXJlRGF0YS0+bV9hdHRyaWJ1dGVNYXAg
PSBOYW1lZE5vZGVNYXA6OmNyZWF0ZShjb25zdF9jYXN0PEVsZW1lbnQqPih0aGlzKSk7CisgICAg
cmV0dXJuIHJhcmVEYXRhLT5tX2F0dHJpYnV0ZU1hcC5nZXQoKTsKK30KKwogTm9kZTo6Tm9kZVR5
cGUgRWxlbWVudDo6bm9kZVR5cGUoKSBjb25zdAogewogICAgIHJldHVybiBFTEVNRU5UX05PREU7
CkBAIC0yMTksNyArMjMxLDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpnZXRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKICAgICAgICAgdXBkYXRlQW5p
bWF0ZWRTVkdBdHRyaWJ1dGUobmFtZSk7CiAjZW5kaWYKIAotICAgIGlmIChtX2F0dHJpYnV0ZU1h
cCkgeworICAgIGlmIChtX2F0dHJpYnV0ZURhdGEpIHsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBh
dHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQpAQCAtNTk2LDggKzYwOCw4IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QK
ICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChtX2F0dHJpYnV0ZU1hcCkgewotICAgICAgICBpZiAo
QXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5n
ZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIGlnbm9yZUNhc2UpKQorICAgIGlmIChtX2F0dHJpYnV0ZURh
dGEpIHsKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVEYXRh
LT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIGlnbm9yZUNhc2UpKQogICAgICAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICB9CiAKQEAgLTYzMCwxNiArNjQyLDE1IEBAIHZvaWQg
RWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUsCiAKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZUlu
dGVybmFsKHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSwgYm9vbCBub3RpZnlDaGFuZ2VkKQogewotICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gJm1fYXR0cmlidXRlTWFwLT5tX2F0dHJpYnV0ZURh
dGE7Ci0gICAgQXR0cmlidXRlKiBvbGQgPSBpbmRleCAhPSBub3RGb3VuZCA/IGF0dHJpYnV0ZURh
dGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsKKyAgICBBdHRyaWJ1dGUqIG9sZCA9IGluZGV4
ICE9IG5vdEZvdW5kID8gbV9hdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KSA6IDA7
CiAgICAgaWYgKHZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIGlmIChvbGQpCi0gICAgICAgICAg
ICBhdHRyaWJ1dGVEYXRhLT5yZW1vdmVBdHRyaWJ1dGUoaW5kZXgsIHRoaXMpOworICAgICAgICAg
ICAgbV9hdHRyaWJ1dGVEYXRhLT5yZW1vdmVBdHRyaWJ1dGUoaW5kZXgsIHRoaXMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFvbGQpIHsKLSAgICAgICAgYXR0cmlidXRlRGF0
YS0+YWRkQXR0cmlidXRlKEF0dHJpYnV0ZTo6Y3JlYXRlKG5hbWUsIHZhbHVlKSwgdGhpcyk7Cisg
ICAgICAgIG1fYXR0cmlidXRlRGF0YS0+YWRkQXR0cmlidXRlKEF0dHJpYnV0ZTo6Y3JlYXRlKG5h
bWUsIHZhbHVlKSwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTczMywzNyAr
NzQ0LDM1IEBAIHZvaWQgRWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlcyhQYXNzT3duUHRyPEF0
dHJpYnV0ZVZlY3Rvcj4gYXR0cmlidXRlVmVjdG9yLCBGCiAKICAgICBkb2N1bWVudCgpLT5pbmNE
T01UcmVlVmVyc2lvbigpOwogCi0gICAgQVNTRVJUKCFtX2F0dHJpYnV0ZU1hcCk7CisgICAgQVNT
RVJUKCFtX2F0dHJpYnV0ZURhdGEpOwogCiAgICAgaWYgKCFhdHRyaWJ1dGVWZWN0b3IpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fYXR0cmlidXRlTWFwID0gTmFtZWROb2RlTWFwOjpjcmVhdGUo
dGhpcyk7Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtX2F0dHJp
YnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpOwotICAgIGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRl
cy5zd2FwKCphdHRyaWJ1dGVWZWN0b3IpOworICAgIGNyZWF0ZUF0dHJpYnV0ZURhdGEoKTsKKyAg
ICBtX2F0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlcy5zd2FwKCphdHRyaWJ1dGVWZWN0b3IpOwog
Ci0gICAgbV9hdHRyaWJ1dGVNYXAtPm1fZWxlbWVudCA9IHRoaXM7CiAgICAgLy8gSWYgdGhlIGVs
ZW1lbnQgaXMgY3JlYXRlZCBhcyByZXN1bHQgb2YgYSBwYXN0ZSBvciBkcmFnLW4tZHJvcCBvcGVy
YXRpb24KICAgICAvLyB3ZSB3YW50IHRvIHJlbW92ZSBhbGwgdGhlIHNjcmlwdCBhbmQgZXZlbnQg
aGFuZGxlcnMuCiAgICAgaWYgKHNjcmlwdGluZ1Blcm1pc3Npb24gPT0gRnJhZ21lbnRTY3JpcHRp
bmdOb3RBbGxvd2VkKSB7CiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICB3aGlsZSAo
aSA8IG1fYXR0cmlidXRlTWFwLT5sZW5ndGgoKSkgewotICAgICAgICAgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSYgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+
bmFtZSgpOworICAgICAgICB3aGlsZSAoaSA8IG1fYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUgPSBtX2F0dHJp
YnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOwogICAgICAgICAgICAgaWYgKGlzRXZl
bnRIYW5kbGVyQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgYXR0
cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzLnJlbW92ZShpKTsKKyAgICAgICAgICAgICAgICBtX2F0
dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlcy5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZVRvUmVt
b3ZlKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+dmFsdWUo
KSkpCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlRGF0YS0+bV9hdHRyaWJ1dGVzW2ldLT5zZXRW
YWx1ZShudWxsQXRvbSk7CisgICAgICAgICAgICBpZiAoaXNBdHRyaWJ1dGVUb1JlbW92ZShhdHRy
aWJ1dGVOYW1lLCBtX2F0dHJpYnV0ZURhdGEtPm1fYXR0cmlidXRlc1tpXS0+dmFsdWUoKSkpCisg
ICAgICAgICAgICAgICAgbV9hdHRyaWJ1dGVEYXRhLT5tX2F0dHJpYnV0ZXNbaV0tPnNldFZhbHVl
KG51bGxBdG9tKTsKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8v
IFN0b3JlIHRoZSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGNoYW5nZWQgb24gdGhlIHN0YWNrIGlu
IGNhc2UKLSAgICAvLyBhdHRyaWJ1dGVDaGFuZ2VkIG11dGF0ZXMgbV9hdHRyaWJ1dGVNYXAuCisg
ICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1fYXR0cmlidXRlRGF0YS4KICAgICBWZWN0
b3I8UmVmUHRyPEF0dHJpYnV0ZT4gPiBhdHRyaWJ1dGVzOwotICAgIGF0dHJpYnV0ZURhdGEtPmNv
cHlBdHRyaWJ1dGVzVG9WZWN0b3IoYXR0cmlidXRlcyk7CisgICAgbV9hdHRyaWJ1dGVEYXRhLT5j
b3B5QXR0cmlidXRlc1RvVmVjdG9yKGF0dHJpYnV0ZXMpOwogICAgIGZvciAoVmVjdG9yPFJlZlB0
cjxBdHRyaWJ1dGU+ID46Oml0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIg
IT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKQogICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGl0
ZXItPmdldCgpKTsKIH0KQEAgLTc3MSw3ICs3ODAsNyBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNl
dEF0dHJpYnV0ZXMoUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+IGF0dHJpYnV0ZVZlY3Rvciwg
RgogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICB1cGRhdGVJbnZh
bGlkQXR0cmlidXRlcygpOwotICAgIHJldHVybiBtX2F0dHJpYnV0ZU1hcCAmJiBtX2F0dHJpYnV0
ZU1hcC0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIG1fYXR0cmlidXRlRGF0YSAmJiBtX2F0dHJpYnV0
ZURhdGEtPmxlbmd0aCgpOwogfQogCiBib29sIEVsZW1lbnQ6Omhhc0VxdWl2YWxlbnRBdHRyaWJ1
dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVyKSBjb25zdApAQCAtODIzLDkgKzgzMiw5IEBAIEtVUkwg
RWxlbWVudDo6YmFzZVVSSSgpIGNvbnN0CiAgICAgcmV0dXJuIEtVUkwocGFyZW50QmFzZSwgYmFz
ZUF0dHJpYnV0ZSk7CiB9CiAKLXZvaWQgRWxlbWVudDo6Y3JlYXRlQXR0cmlidXRlTWFwKCkgY29u
c3QKK3ZvaWQgRWxlbWVudDo6Y3JlYXRlQXR0cmlidXRlRGF0YSgpIGNvbnN0CiB7Ci0gICAgbV9h
dHRyaWJ1dGVNYXAgPSBOYW1lZE5vZGVNYXA6OmNyZWF0ZShjb25zdF9jYXN0PEVsZW1lbnQqPih0
aGlzKSk7CisgICAgbV9hdHRyaWJ1dGVEYXRhID0gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0
ZSgpOwogfQogCiBib29sIEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSopIGNvbnN0
CkBAIC04NzgsNyArODg3LDcgQEAgdm9pZCBFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgp
CiAgICAgaWYgKFNoYWRvd1RyZWUqIHRyZWUgPSBzaGFkb3dUcmVlKCkpCiAgICAgICAgIHRyZWUt
Pmluc2VydGVkSW50b0RvY3VtZW50KCk7CiAKLSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKKyAg
ICBpZiAobV9hdHRyaWJ1dGVEYXRhKSB7CiAgICAgICAgIGlmIChoYXNJRCgpKSB7CiAgICAgICAg
ICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGdldEF0dHJpYnV0ZUl0ZW0oZG9jdW1lbnQoKS0+aWRB
dHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgaWYgKGlkSXRlbSAmJiAhaWRJdGVtLT5pc051
bGwoKSkKQEAgLTg5NCw3ICs5MDMsNyBAQCB2b2lkIEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3Vt
ZW50KCkKIAogdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBpZiAo
bV9hdHRyaWJ1dGVNYXApIHsKKyAgICBpZiAobV9hdHRyaWJ1dGVEYXRhKSB7CiAgICAgICAgIGlm
IChoYXNJRCgpKSB7CiAgICAgICAgICAgICBBdHRyaWJ1dGUqIGlkSXRlbSA9IGdldEF0dHJpYnV0
ZUl0ZW0oZG9jdW1lbnQoKS0+aWRBdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICAgICAgaWYgKGlk
SXRlbSAmJiAhaWRJdGVtLT5pc051bGwoKSkKQEAgLTE3ODksNyArMTc5OCw3IEBAIERPTVN0cmlu
Z01hcCogRWxlbWVudDo6ZGF0YXNldCgpCiBLVVJMIEVsZW1lbnQ6OmdldFVSTEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogI2lmICFBU1NFUlRfRElTQUJMRUQK
LSAgICBpZiAobV9hdHRyaWJ1dGVNYXApIHsKKyAgICBpZiAobV9hdHRyaWJ1dGVEYXRhKSB7CiAg
ICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSkp
CiAgICAgICAgICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKSk7CiAgICAgfQpA
QCAtMTgwMCw3ICsxODA5LDcgQEAgS1VSTCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIEtVUkwgRWxlbWVudDo6Z2V0Tm9uRW1wdHlVUkxB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgaWYgKG1fYXR0cmlidXRlTWFwKSB7CisgICAgaWYgKG1fYXR0cmlidXRl
RGF0YSkgewogICAgICAgICBpZiAoQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGVJ
dGVtKG5hbWUpKQogICAgICAgICAgICAgQVNTRVJUKGlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkp
OwogICAgIH0KQEAgLTE5NjgsNiArMTk3NywxMyBAQCBib29sIEVsZW1lbnQ6OmZhc3RBdHRyaWJ1
dGVMb29rdXBBbGxvd2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB9CiAjZW5k
aWYKIAorI2lmZGVmIERVTVBfTk9ERV9TVEFUSVNUSUNTCitib29sIEVsZW1lbnQ6Omhhc05hbWVk
Tm9kZU1hcCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEo
KS0+bV9hdHRyaWJ1dGVNYXA7Cit9CisjZW5kaWYKKwogdm9pZCBFbGVtZW50Ojp3aWxsTW9kaWZ5
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYg
b2xkVmFsdWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUpCiB7CiAgICAgZG9jdW1lbnQo
KS0+aW5jRE9NVHJlZVZlcnNpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IDhlZWJiMDI4YzQ3
YzkzNzczNGJkNjBlZDZiOGYxNGI4NmZiYjZkZDYuLjhjODI1MDczZjQwOGRhZWMxZTM1OTk4NDU2
MmFiNDUwNWIxMTllYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjcsOSArMjcsOSBAQAogCiAj
aW5jbHVkZSAiQ29sbGVjdGlvblR5cGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkVsZW1lbnRBdHRyaWJ1dGVEYXRhLmgiCiAjaW5jbHVkZSAiRnJhZ21lbnRTY3JpcHRpbmdQ
ZXJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiTmFtZWROb2Rl
TWFwLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMTMwLDYgKzEzMCw5IEBAIHB1YmxpYzoKICAgICBib29sIGZhc3RBdHRyaWJ1dGVMb29rdXBB
bGxvd2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICNlbmRpZgogCisjaWZkZWYgRFVN
UF9OT0RFX1NUQVRJU1RJQ1MKKyAgICBib29sIGhhc05hbWVkTm9kZU1hcCgpIGNvbnN0OworI2Vu
ZGlmCiAgICAgYm9vbCBoYXNBdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgLy8gVGhpcyB2YXJpYW50
IHdpbGwgbm90IHVwZGF0ZSB0aGUgcG90ZW50aWFsbHkgaW52YWxpZCBhdHRyaWJ1dGVzLiBUbyBi
ZSB1c2VkIHdoZW4gbm90IGludGVyZXN0ZWQKICAgICAvLyBpbiBzdHlsZSBhdHRyaWJ1dGUgb3Ig
b25lIG9mIHRoZSBTVkcgYW5pbWF0aW9uIGF0dHJpYnV0ZXMuCkBAIC0yMjksMTUgKzIzMiwxMyBA
QCBwdWJsaWM6CiAgICAgLy8gRm9yIGV4cG9zaW5nIHRvIERPTSBvbmx5LgogICAgIE5hbWVkTm9k
ZU1hcCogYXR0cmlidXRlcygpIGNvbnN0OwogCi0gICAgTmFtZWROb2RlTWFwKiB1cGRhdGVkQXR0
cmlidXRlcygpIGNvbnN0OwotCiAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVy
IGFuIGF0dHJpYnV0ZSBpcyBhZGRlZCwgY2hhbmdlZCBvciByZW1vdmVkLgogICAgIHZpcnR1YWwg
dm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSopOwogCiAgICAgLy8gT25seSBjYWxsZWQg
YnkgdGhlIHBhcnNlciBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNvbnN0cnVjdGlvbi4KICAg
ICB2b2lkIHBhcnNlclNldEF0dHJpYnV0ZXMoUGFzc093blB0cjxBdHRyaWJ1dGVWZWN0b3I+LCBG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZU1hcCA/IG1fYXR0cmli
dXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCkgOiAwOyB9CisgICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuZ2V0KCk7IH0K
ICAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlQXR0cmlidXRlRGF0YSgpIGNvbnN0Owog
ICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiB1cGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0Owog
ICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpIGNv
bnN0OwpAQCAtNDM2LDcgKzQzNyw3IEBAIHByaXZhdGU6CiAKICAgICBib29sIHBzZXVkb1N0eWxl
Q2FjaGVJc0ludmFsaWQoY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5
bGUqIG5ld1N0eWxlKTsKIAotICAgIHZvaWQgY3JlYXRlQXR0cmlidXRlTWFwKCkgY29uc3Q7Cisg
ICAgdm9pZCBjcmVhdGVBdHRyaWJ1dGVEYXRhKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlU3R5bGVBdHRyaWJ1dGUoKSBjb25zdCB7IH0KIApAQCAtNDY4LDcgKzQ2OSw3IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB1cGRhdGVFeHRyYU5hbWVkSXRlbVJlZ2lzdHJhdGlvbihjb25zdCBB
dG9taWNTdHJpbmcmIG9sZE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3TmFtZSk7CiAKIHBy
aXZhdGU6Ci0gICAgbXV0YWJsZSBPd25QdHI8TmFtZWROb2RlTWFwPiBtX2F0dHJpYnV0ZU1hcDsK
KyAgICBtdXRhYmxlIE93blB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gbV9hdHRyaWJ1dGVEYXRh
OwogfTsKICAgICAKIGlubGluZSBFbGVtZW50KiB0b0VsZW1lbnQoTm9kZSogbm9kZSkKQEAgLTUy
OCwyNSArNTI5LDExIEBAIGlubGluZSBFbGVtZW50KiBFbGVtZW50OjpuZXh0RWxlbWVudFNpYmxp
bmcoKSBjb25zdAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiB9CiAKLWlu
bGluZSBOYW1lZE5vZGVNYXAqIEVsZW1lbnQ6OmF0dHJpYnV0ZXMoKSBjb25zdAotewotICAgIHVw
ZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZU1hcCkKLSAgICAg
ICAgY3JlYXRlQXR0cmlidXRlTWFwKCk7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLmdldCgp
OwotfQotCi1pbmxpbmUgTmFtZWROb2RlTWFwKiBFbGVtZW50Ojp1cGRhdGVkQXR0cmlidXRlcygp
IGNvbnN0Ci17Ci0gICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsKLSAgICByZXR1cm4gbV9h
dHRyaWJ1dGVNYXAuZ2V0KCk7Ci19Ci0KIGlubGluZSBFbGVtZW50QXR0cmlidXRlRGF0YSogRWxl
bWVudDo6ZW5zdXJlQXR0cmlidXRlRGF0YSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2F0dHJpYnV0
ZU1hcCkKLSAgICAgICAgY3JlYXRlQXR0cmlidXRlTWFwKCk7Ci0gICAgcmV0dXJuIG1fYXR0cmli
dXRlTWFwLT5hdHRyaWJ1dGVEYXRhKCk7CisgICAgaWYgKCFtX2F0dHJpYnV0ZURhdGEpCisgICAg
ICAgIGNyZWF0ZUF0dHJpYnV0ZURhdGEoKTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmdl
dCgpOwogfQogCiBpbmxpbmUgRWxlbWVudEF0dHJpYnV0ZURhdGEqIEVsZW1lbnQ6OnVwZGF0ZWRB
dHRyaWJ1dGVEYXRhKCkgY29uc3QKQEAgLTYwNiwxMyArNTkzLDEzIEBAIGlubGluZSB2b2lkIEVs
ZW1lbnQ6OndpbGxSZW1vdmVBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpmYXN0SGFzQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZhc3RBdHRyaWJ1dGVMb29r
dXBBbGxvd2VkKG5hbWUpKTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAgJiYgZ2V0QXR0cmli
dXRlSXRlbShuYW1lKTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhICYmIGdldEF0dHJpYnV0
ZUl0ZW0obmFtZSk7CiB9CiAKIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmZh
c3RHZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBB
U1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQobmFtZSkpOwotICAgIGlmIChtX2F0dHJp
YnV0ZU1hcCkgeworICAgIGlmIChtX2F0dHJpYnV0ZURhdGEpIHsKICAgICAgICAgaWYgKEF0dHJp
YnV0ZSogYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgfQpAQCAtNjIxLDEzICs2MDgsMTMgQEAgaW5s
aW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6ZmFzdEdldEF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lKQogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVz
V2l0aG91dFVwZGF0ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwICYmICFt
X2F0dHJpYnV0ZU1hcC0+YXR0cmlidXRlRGF0YSgpLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIG1f
YXR0cmlidXRlRGF0YSAmJiAhbV9hdHRyaWJ1dGVEYXRhLT5pc0VtcHR5KCk7CiB9CiAKIGlubGlu
ZSBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkgY29u
c3QKIHsKICAgICBBU1NFUlQoaGFzSUQoKSk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+
aWRGb3JTdHlsZVJlc29sdXRpb24oKTsKKyAgICByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLT5pZEZv
clN0eWxlUmVzb2x1dGlvbigpOwogfQogCiBpbmxpbmUgYm9vbCBFbGVtZW50Ojppc0lkQXR0cmli
dXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKSBjb25zdApAQCAtNjU2
LDIwICs2NDMsMjAgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0SWRBdHRyaWJ1dGUoY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKIAogaW5saW5lIHNpemVfdCBFbGVtZW50OjphdHRyaWJ1dGVD
b3VudCgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fYXR0cmlidXRlTWFwKTsKLSAgICByZXR1cm4g
bV9hdHRyaWJ1dGVNYXAtPmxlbmd0aCgpOworICAgIEFTU0VSVChtX2F0dHJpYnV0ZURhdGEpOwor
ICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwogfQogCiBpbmxpbmUgQXR0cmli
dXRlKiBFbGVtZW50OjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAg
IEFTU0VSVChtX2F0dHJpYnV0ZU1hcCk7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlTWFwLT5hdHRy
aWJ1dGVEYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOworICAgIEFTU0VSVChtX2F0dHJpYnV0
ZURhdGEpOworICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgp
OwogfQogCiBpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fYXR0cmlidXRlTWFw
KTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmli
dXRlSXRlbShuYW1lKTsKKyAgICBBU1NFUlQobV9hdHRyaWJ1dGVEYXRhKTsKKyAgICByZXR1cm4g
bV9hdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogfQogCiBpbmxpbmUgdm9p
ZCBFbGVtZW50Ojp1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCmluZGV4IDU2MDJhYjJkNmY4YjIxMzU5YTE5YzVl
YWI0ZTE2MzI0YjIyOTAwYWUuLjFmYmYzZWU4YzE2NzE4ZmM2M2RmMmZiZTBmY2MwNDFhNmU0OTU4
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCkBAIC04Miw2
ICs4MiwxMSBAQCBpbmxpbmUgdm9pZCBBdHRyaWJ1dGVWZWN0b3I6Omluc2VydEF0dHJpYnV0ZShQ
YXNzUmVmUHRyPEF0dHJpYnV0ZT4gbmV3QXR0cmlidXRlKQogCiBjbGFzcyBFbGVtZW50QXR0cmli
dXRlRGF0YSB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8RWxlbWVudEF0dHJpYnV0
ZURhdGE+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEVsZW1l
bnRBdHRyaWJ1dGVEYXRhKTsKKyAgICB9CisKICAgICB+RWxlbWVudEF0dHJpYnV0ZURhdGEoKTsK
IAogICAgIHZvaWQgY2xlYXJDbGFzcygpIHsgbV9jbGFzc05hbWVzLmNsZWFyKCk7IH0KQEAgLTEw
OCw2ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuYXR0cmlidXRlSXRlbShpbmRl
eCk7IH0KICAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLmdldEF0dHJpYnV0ZUl0ZW0obmFt
ZSk7IH0KICAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGVJdGVtSW5k
ZXgobmFtZSk7IH0KKyAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKIAogICAgIC8v
IFRoZXNlIGZ1bmN0aW9ucyBkbyBubyBlcnJvciBjaGVja2luZy4KICAgICB2b2lkIGFkZEF0dHJp
YnV0ZShQYXNzUmVmUHRyPEF0dHJpYnV0ZT4sIEVsZW1lbnQqKTsKQEAgLTEyMiw3ICsxMjgsNiBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEVsZW1lbnQ7Ci0gICAgZnJp
ZW5kIGNsYXNzIE5hbWVkTm9kZU1hcDsKIAogICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKICAg
ICB7CkBAIC0xMzEsNyArMTM2LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRldGFjaEF0dHJpYnV0
ZXNGcm9tRWxlbWVudCgpOwogICAgIHZvaWQgY29weUF0dHJpYnV0ZXNUb1ZlY3RvcihWZWN0b3I8
UmVmUHRyPEF0dHJpYnV0ZT4gPiYpOwogICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7
Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7CiAgICAgc2l6ZV90IGdldEF0dHJp
YnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKICAgICB2b2lkIHNldEF0dHJpYnV0ZXMoY29uc3QgRWxl
bWVudEF0dHJpYnV0ZURhdGEmIG90aGVyLCBFbGVtZW50Kik7CiAgICAgdm9pZCBjbGVhckF0dHJp
YnV0ZXMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAppbmRleCAxMWM4MjU3OTMy
OTRmODI2NWVhNThjZTE1MzczZjQzZTYzYzIyMDlkLi5jZDIzODRkODhiMDljNGE4NTNlZjVkZjg3
NTgzN2Q3MDJmZDNkYmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJh
cmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiRGF0YXNldERPTVN0cmluZ01hcC5oIgogI2luY2x1ZGUg
IkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIk5hbWVk
Tm9kZU1hcC5oIgogI2luY2x1ZGUgIk5vZGVSYXJlRGF0YS5oIgogI2luY2x1ZGUgIlNoYWRvd1Ry
ZWUuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBAIC02OSw2ICs3MCw3IEBAIHB1YmxpYzoK
ICAgICBPd25QdHI8RGF0YXNldERPTVN0cmluZ01hcD4gbV9kYXRhc2V0RE9NU3RyaW5nTWFwOwog
ICAgIE93blB0cjxDbGFzc0xpc3Q+IG1fY2xhc3NMaXN0OwogICAgIE93blB0cjxTaGFkb3dUcmVl
PiBtX3NoYWRvd1RyZWU7CisgICAgT3duUHRyPE5hbWVkTm9kZU1hcD4gbV9hdHRyaWJ1dGVNYXA7
CiAKICAgICBib29sIG1fc3R5bGVBZmZlY3RlZEJ5RW1wdHk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVk
Tm9kZU1hcC5jcHAKaW5kZXggMGI3YjMwMzlkYTA4MTY3NzQwNjdkYjllMGUzYjVjMTg1YTcxMWUx
ZC4uOTQyYzQwYzliZjYxNDAzMjY1ZGE3YmRkYzRkOWUxMGI4OGUzZTFmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL05hbWVkTm9kZU1hcC5jcHAKQEAgLTQyLDQ3ICs0Miw1MyBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShjb25zdCBFbGVtZW50KiBlKQogCiB2b2lkIE5h
bWVkTm9kZU1hcDo6cmVmKCkKIHsKLSAgICBBU1NFUlQobV9lbGVtZW50KTsKICAgICBtX2VsZW1l
bnQtPnJlZigpOwogfQogCiB2b2lkIE5hbWVkTm9kZU1hcDo6ZGVyZWYoKQogewotICAgIEFTU0VS
VChtX2VsZW1lbnQpOwogICAgIG1fZWxlbWVudC0+ZGVyZWYoKTsKIH0KIAogUGFzc1JlZlB0cjxO
b2RlPiBOYW1lZE5vZGVNYXA6OmdldE5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5nZXRBdHRyaWJ1dGVOb2RlKG5hbWUsIHNo
b3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVtZW50KSwgbV9lbGVtZW50KTsKKyAgICByZXR1
cm4gbV9lbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZU5vZGUobmFtZSwgc2hv
dWxkSWdub3JlQXR0cmlidXRlQ2FzZShtX2VsZW1lbnQpLCBtX2VsZW1lbnQpOwogfQogCiBQYXNz
UmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6Z2V0TmFtZWRJdGVtTlMoY29uc3QgU3RyaW5nJiBu
YW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdAogewotICAgIHJldHVy
biBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlTm9kZShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSksIG1fZWxlbWVudCk7CisgICAgcmV0dXJuIG1fZWxl
bWVudC0+YXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVOb2RlKFF1YWxpZmllZE5hbWUobnVs
bEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSwgbV9lbGVtZW50KTsKIH0KIAogUGFzc1Jl
ZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVkSXRlbShjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQpOworICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVE
YXRhKCk7CiAKLSAgICBzaXplX3QgaW5kZXggPSBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRl
SXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVtZW50KSk7Cisg
ICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5h
bWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UobV9lbGVtZW50KSk7CiAgICAgaWYgKGluZGV4
ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogICAgIAotICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEudGFrZUF0dHJp
YnV0ZShpbmRleCwgbV9lbGVtZW50KTsKKyAgICByZXR1cm4gYXR0cmlidXRlRGF0YS0+dGFrZUF0
dHJpYnV0ZShpbmRleCwgbV9lbGVtZW50KTsKIH0KIAogUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5v
ZGVNYXA6OnJlbW92ZU5hbWVkSXRlbU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25z
dCBTdHJpbmcmIGxvY2FsTmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgcmV0dXJuIHJl
bW92ZU5hbWVkSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSksIGVjKTsKKyAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IG1f
ZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpOworCisgICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRl
RGF0YS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2Fs
TmFtZSwgbmFtZXNwYWNlVVJJKSk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CisgICAg
ICAgIGVjID0gTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
cmV0dXJuIGF0dHJpYnV0ZURhdGEtPnRha2VBdHRyaWJ1dGUoaW5kZXgsIG1fZWxlbWVudCk7CiB9
CiAKIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpzZXROYW1lZEl0ZW0oTm9kZSogbm9k
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgaWYgKCFtX2VsZW1lbnQgfHwgIW5vZGUpIHsK
KyAgICBpZiAoIW5vZGUpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CkBAIC0xMDEsNDIgKzEwNywxNiBAQCBQYXNzUmVmUHRyPE5vZGU+IE5h
bWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVtTlMoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiAgICAgcmV0dXJuIHNldE5hbWVkSXRlbShub2RlLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9k
ZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0KLSAgICBz
aXplX3QgaW5kZXggPSBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUp
OwotICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgewotICAgICAgICBlYyA9IE5PVF9GT1VORF9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBtX2F0dHJpYnV0ZURh
dGEudGFrZUF0dHJpYnV0ZShpbmRleCwgbV9lbGVtZW50KTsKLX0KLQogUGFzc1JlZlB0cjxOb2Rl
PiBOYW1lZE5vZGVNYXA6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYgKGlu
ZGV4ID49IGxlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2F0dHJp
YnV0ZURhdGEubV9hdHRyaWJ1dGVzW2luZGV4XS0+Y3JlYXRlQXR0cklmTmVlZGVkKG1fZWxlbWVu
dCk7Ci19Ci0KLXZvaWQgTmFtZWROb2RlTWFwOjpkZXRhY2hGcm9tRWxlbWVudCgpCi17Ci0gICAg
Ly8gVGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIGhvbGRlciBvZiB0aGUgbWFwIGlzIEphdmFTY3Jp
cHQsIGJlY2F1c2Ugd2UgbWFyayB0aGUKLSAgICAvLyBlbGVtZW50IGlmIHRoZSBtYXAgaXMgYWxp
dmUuIFNvIGl0IGhhcyBubyBpbXBhY3Qgb24gd2ViIHBhZ2UgYmVoYXZpb3IuIEJlY2F1c2UKLSAg
ICAvLyBvZiB0aGF0LCB3ZSBjYW4gc2ltcGx5IGNsZWFyIGFsbCB0aGUgYXR0cmlidXRlcyB0byBh
dm9pZCBhY2Nlc3Npbmcgc3RhbGUKLSAgICAvLyBwb2ludGVycyB0byBkbyB0aGluZ3MgbGlrZSBj
cmVhdGUgQXR0ciBvYmplY3RzLgotICAgIG1fZWxlbWVudCA9IDA7Ci0gICAgbV9hdHRyaWJ1dGVE
YXRhLmNsZWFyQXR0cmlidXRlcygpOworICAgIHJldHVybiBtX2VsZW1lbnQtPmF0dHJpYnV0ZUl0
ZW0oaW5kZXgpLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKIH0KIAotYm9vbCBOYW1l
ZE5vZGVNYXA6Om1hcHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkTm9kZU1hcCogb3RoZXJNYXApIGNv
bnN0CitzaXplX3QgTmFtZWROb2RlTWFwOjpsZW5ndGgoKSBjb25zdAogewotICAgIGlmICghb3Ro
ZXJNYXApCi0gICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZURhdGEuaXNFbXB0eSgpOwotICAgIHJl
dHVybiBtX2F0dHJpYnV0ZURhdGEuaXNFcXVpdmFsZW50KG90aGVyTWFwLT5hdHRyaWJ1dGVEYXRh
KCkpOworICAgIHJldHVybiBtX2VsZW1lbnQtPmF0dHJpYnV0ZUNvdW50KCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5v
ZGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAppbmRleCBkYWQzMTk4
ZTcxOGE4MWFmODE0NzgxMTI1OWVkMDcwNDQwMzVkZWJiLi5kNDJkNTJkMjM3NWQ3MWRkOTEyODZi
NjAyMWMwOGYyMjU5YzZlM2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWRO
b2RlTWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oCkBAIC0yNSwx
OSArMjUsMjEgQEAKICNpZm5kZWYgTmFtZWROb2RlTWFwX2gKICNkZWZpbmUgTmFtZWROb2RlTWFw
X2gKIAotI2luY2x1ZGUgIkVsZW1lbnRBdHRyaWJ1dGVEYXRhLmgiCi0jaW5jbHVkZSAiU3BhY2VT
cGxpdFN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBOb2RlOworY2xhc3MgRWxlbWVudDsKIAogdHlwZWRlZiBp
bnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgTmFtZWROb2RlTWFwIHsKICAgICBmcmllbmQgY2xh
c3MgRWxlbWVudDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxOYW1lZE5vZGVNYXA+
IGNyZWF0ZShFbGVtZW50KiBlbGVtZW50ID0gMCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxOYW1l
ZE5vZGVNYXA+IGNyZWF0ZShFbGVtZW50KiBlbGVtZW50KQogICAgIHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBOYW1lZE5vZGVNYXAoZWxlbWVudCkpOwogICAgIH0KQEAgLTUzLDM3ICs1
NSwyMiBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxOb2RlPiBnZXROYW1lZEl0ZW1OUyhjb25z
dCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0Owog
ICAgIFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgU3RyaW5nJiBuYW1l
c3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJik7CiAKLSAg
ICBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFzc1JlZlB0cjxOb2RlPiBzZXROYW1lZEl0ZW0o
Tm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPE5vZGU+IHNldE5hbWVkSXRl
bU5TKE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBQYXNzUmVmUHRyPE5vZGU+IGl0ZW0o
dW5zaWduZWQgaW5kZXgpIGNvbnN0OwotICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2F0dHJpYnV0ZURhdGEubGVuZ3RoKCk7IH0KLQotICAgIGJvb2wgbWFwc0VxdWl2YWxlbnQo
Y29uc3QgTmFtZWROb2RlTWFwKiBvdGhlck1hcCkgY29uc3Q7Ci0KLSAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgZG8gbm8gZXJyb3IgY2hlY2tpbmcuCi0gICAgdm9pZCBhZGRBdHRyaWJ1dGUoUGFzc1Jl
ZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSkgeyBtX2F0dHJpYnV0ZURhdGEuYWRkQXR0cmlidXRl
KGF0dHJpYnV0ZSwgbV9lbGVtZW50KTsgfQorICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdDsKIAog
ICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7IH0KIAotICAg
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhKCkgeyByZXR1cm4gJm1fYXR0cmli
dXRlRGF0YTsgfQotICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRh
KCkgY29uc3QgeyByZXR1cm4gJm1fYXR0cmlidXRlRGF0YTsgfQotCiBwcml2YXRlOgogICAgIE5h
bWVkTm9kZU1hcChFbGVtZW50KiBlbGVtZW50KQogICAgICAgICA6IG1fZWxlbWVudChlbGVtZW50
KQogICAgIHsKKyAgICAgICAgLy8gT25seSBzdXBwb3J0cyBOYW1lZE5vZGVNYXBzIHdpdGggRWxl
bWVudCBhc3NvY2lhdGVkLCBEb2N1bWVudFR5cGUuZW50aXRpZXMgYW5kIERvY3VtZW50VHlwZS5u
b3RhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgICAgICBBU1NFUlQobV9lbGVtZW50
KTsKICAgICB9CiAKLSAgICB2b2lkIGRldGFjaEZyb21FbGVtZW50KCk7Ci0gICAgQXR0cmlidXRl
KiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVB
dHRyaWJ1dGVDYXNlKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuZ2V0QXR0cmlidXRl
SXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsgfQotCi0gICAgLy8gRklYTUU6
IE5hbWVkTm9kZU1hcCBpcyBiZWluZyBicm9rZW4gdXAgaW50byB0d28gY2xhc3Nlcywgb25lIGNv
bnRhaW5pbmcgZGF0YQotICAgIC8vICAgICAgICBmb3IgZWxlbWVudHMgd2l0aCBhdHRyaWJ1dGVz
LCBhbmQgb25lIGZvciBleHBvc3VyZSB0byB0aGUgRE9NLgotICAgIC8vICAgICAgICBTZWUgPGh0
dHA6Ly93ZWJraXQub3JnL2IvNzUwNjk+IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhIG1fYXR0cmlidXRlRGF0YTsKLQogICAgIEVsZW1lbnQqIG1fZWxlbWVu
dDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCAzYjcxNmFhZWViODM4YWRhYmU2NzBiN2ViOGIz
ZmE0M2Q5NjYwN2E3Li5mMDZkOWJkMjhjOTg2MDA0YjU4NzIzNjIyM2E2MmFhYmY0Yjg4N2QxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCkBAIC0xNjAsMTMgKzE2MCwyMCBAQCB2b2lkIE5vZGU6OmR1bXBTdGF0
aXN0aWNzKCkKICAgICBzaXplX3QgYXR0cmlidXRlcyA9IDA7CiAgICAgc2l6ZV90IGF0dHJpYnV0
ZXNXaXRoQXR0ciA9IDA7CiAgICAgc2l6ZV90IGVsZW1lbnRzV2l0aEF0dHJpYnV0ZVN0b3JhZ2Ug
PSAwOworICAgIHNpemVfdCBlbGVtZW50c1dpdGhSYXJlRGF0YSA9IDA7CiAgICAgc2l6ZV90IGVs
ZW1lbnRzV2l0aE5hbWVkTm9kZU1hcCA9IDA7CiAKICAgICBmb3IgKEhhc2hTZXQ8Tm9kZSo+Ojpp
dGVyYXRvciBpdCA9IGxpdmVOb2RlU2V0LmJlZ2luKCk7IGl0ICE9IGxpdmVOb2RlU2V0LmVuZCgp
OyArK2l0KSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSAqaXQ7CiAKLSAgICAgICAgaWYgKG5vZGUt
Pmhhc1JhcmVEYXRhKCkpCisgICAgICAgIGlmIChub2RlLT5oYXNSYXJlRGF0YSgpKSB7CiAgICAg
ICAgICAgICArK25vZGVzV2l0aFJhcmVEYXRhOworICAgICAgICAgICAgaWYgKG5vZGUtPmlzRWxl
bWVudE5vZGUoKSkgeworICAgICAgICAgICAgICAgICsrZWxlbWVudHNXaXRoUmFyZURhdGE7Cisg
ICAgICAgICAgICAgICAgaWYgKHRvRWxlbWVudChub2RlKS0+aGFzTmFtZWROb2RlTWFwKCkpCisg
ICAgICAgICAgICAgICAgICAgICsrZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwOworICAgICAgICAg
ICAgfQorICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7CiAg
ICAgICAgICAgICBjYXNlIEVMRU1FTlRfTk9ERTogewpAQCAtMTgxLDggKzE4OCw2IEBAIHZvaWQg
Tm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIGlmIChFbGVtZW50QXR0cmli
dXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSkgewogICAg
ICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOwog
ICAgICAgICAgICAgICAgICAgICArK2VsZW1lbnRzV2l0aEF0dHJpYnV0ZVN0b3JhZ2U7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY2hhbmdlIG9uY2UgYXR0cmlidXRl
IHN0b3JhZ2UgZ29lcyBvdXQgb2YgTmFtZWROb2RlTWFwLgotICAgICAgICAgICAgICAgICAgICAr
K2VsZW1lbnRzV2l0aE5hbWVkTm9kZU1hcDsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0
ZUl0ZW0oaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ci0+YXR0cigpKQpAQCAt
MjcyLDYgKzI3Nyw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgIHByaW50Zigi
ICBOdW1iZXIgb2YgQXR0cmlidXRlcyAobm9uLU5vZGUgYW5kIE5vZGUpOiAlenUgWyV6dV1cbiIs
IGF0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUpKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9m
IEF0dHJpYnV0ZXMgd2l0aCBhbiBBdHRyOiAlenVcbiIsIGF0dHJpYnV0ZXNXaXRoQXR0cik7CiAg
ICAgcHJpbnRmKCIgIE51bWJlciBvZiBFbGVtZW50cyB3aXRoIGF0dHJpYnV0ZSBzdG9yYWdlOiAl
enUgWyV6dV1cbiIsIGVsZW1lbnRzV2l0aEF0dHJpYnV0ZVN0b3JhZ2UsIHNpemVvZihFbGVtZW50
QXR0cmlidXRlRGF0YSkpOworICAgIHByaW50ZigiICBOdW1iZXIgb2YgRWxlbWVudHMgd2l0aCBS
YXJlRGF0YTogJXp1XG4iLCBlbGVtZW50c1dpdGhSYXJlRGF0YSk7CiAgICAgcHJpbnRmKCIgIE51
bWJlciBvZiBFbGVtZW50cyB3aXRoIE5hbWVkTm9kZU1hcDogJXp1IFslenVdXG4iLCBlbGVtZW50
c1dpdGhOYW1lZE5vZGVNYXAsIHNpemVvZihOYW1lZE5vZGVNYXApKTsKICNlbmRpZgogfQpAQCAt
MTgwMywxOSArMTgwOSw3IEBAIGJvb2wgTm9kZTo6aXNFcXVhbE5vZGUoTm9kZSogb3RoZXIpIGNv
bnN0CiAgICAgICAgIGlmIChkb2N1bWVudFR5cGVUaGlzLT5pbnRlcm5hbFN1YnNldCgpICE9IGRv
Y3VtZW50VHlwZU90aGVyLT5pbnRlcm5hbFN1YnNldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIE5hbWVkTm9kZU1hcCogZW50aXRpZXMgPSBkb2N1bWVudFR5cGVUaGlz
LT5lbnRpdGllcygpOwotICAgICAgICBOYW1lZE5vZGVNYXAqIG90aGVyRW50aXRpZXMgPSBkb2N1
bWVudFR5cGVPdGhlci0+ZW50aXRpZXMoKTsKLSAgICAgICAgaWYgKCFlbnRpdGllcyAmJiBvdGhl
ckVudGl0aWVzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoZW50aXRp
ZXMgJiYgIWVudGl0aWVzLT5tYXBzRXF1aXZhbGVudChvdGhlckVudGl0aWVzKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBOYW1lZE5vZGVNYXAqIG5vdGF0aW9ucyA9IGRv
Y3VtZW50VHlwZVRoaXMtPm5vdGF0aW9ucygpOwotICAgICAgICBOYW1lZE5vZGVNYXAqIG90aGVy
Tm90YXRpb25zID0gZG9jdW1lbnRUeXBlT3RoZXItPm5vdGF0aW9ucygpOwotICAgICAgICBpZiAo
IW5vdGF0aW9ucyAmJiBvdGhlck5vdGF0aW9ucykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKG5vdGF0aW9ucyAmJiAhbm90YXRpb25zLT5tYXBzRXF1aXZhbGVudChvdGhl
ck5vdGF0aW9ucykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBkb24ndCBjb21wYXJlIGVudGl0aWVzIG9yIG5vdGF0aW9ucyBiZWNhdXNlIGN1cnJlbnRs
eSBib3RoIGFyZSBhbHdheXMgZW1wdHkuCiAgICAgfQogICAgIAogICAgIHJldHVybiB0cnVlOwpA
QCAtMjExNCw3ICsyMTA4LDcgQEAgdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3VtZW50
UG9zaXRpb24oTm9kZSogb3RoZXJOb2RlKQogICAgIGlmIChhdHRyMSAmJiBhdHRyMiAmJiBzdGFy
dDEgPT0gc3RhcnQyICYmIHN0YXJ0MSkgewogICAgICAgICAvLyBXZSBhcmUgY29tcGFyaW5nIHR3
byBhdHRyaWJ1dGVzIG9uIHRoZSBzYW1lIG5vZGUuIENyYXdsIG91ciBhdHRyaWJ1dGUgbWFwIGFu
ZCBzZWUgd2hpY2ggb25lIHdlIGhpdCBmaXJzdC4KICAgICAgICAgRWxlbWVudCogb3duZXIxID0g
YXR0cjEtPm93bmVyRWxlbWVudCgpOwotICAgICAgICBvd25lcjEtPnVwZGF0ZWRBdHRyaWJ1dGVz
KCk7IC8vIEZvcmNlIHVwZGF0ZSBpbnZhbGlkIGF0dHJpYnV0ZXMuCisgICAgICAgIG93bmVyMS0+
dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsgLy8gRm9yY2UgdXBkYXRlIGludmFsaWQgYXR0cmlidXRl
cy4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3duZXIxLT5hdHRyaWJ1dGVDb3VudCgpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgIC8vIElmIG5laXRoZXIgb2YgdGhlIHR3byBkZXRlcm1pbmluZyBub2RlcyBpcyBhIGNoaWxk
IG5vZGUgYW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1lIGZvciBib3RoIGRldGVybWluaW5nIG5vZGVz
LCB0aGVuIGFuIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNo
U3VwcG9ydC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oCmlu
ZGV4IDRkMDQwZjA4Yjk2ZDNkN2ZiYzFiNjQ4MmU0ZGQwNjkxZDRkMTZlZjEuLmRkNjdhNjMxMTAx
MzQ0YWMwOTJmYWEyNDQxMjRiMTg5OTY3MTY4ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NUGF0Y2hTdXBwb3J0LmgKQEAgLTQ0LDcgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNzIERPTUVkaXRvcjsKIGNsYXNzIERvY3VtZW50
OwotY2xhc3MgTmFtZWROb2RlTWFwOwogY2xhc3MgTm9kZTsKIAogI2lmIEVOQUJMRShJTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKaW5kZXggZTY1ZjVhYjQxOGY5YTkwOGRkNTM3
MTE0NTkzZGRmOTcyYTg4NTNmNy4uZjA0ODZhOGEyNDgwZmExYzMyZTI4ZjhlZmVlOTY5OGJjNjUw
MzEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAtNDE1LDcgKzQxNSw3IEBAIHZv
aWQgU1ZHRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIpCiAKICAgICAv
LyBXaGVuIGFuIGFuaW1hdGVkIFNWRyBwcm9wZXJ0eSBjaGFuZ2VzIHRocm91Z2ggU1ZHIERPTSwg
c3ZnQXR0cmlidXRlQ2hhbmdlZCgpIGlzIGNhbGxlZCwgbm90IGF0dHJpYnV0ZUNoYW5nZWQoKS4K
ICAgICAvLyBOZXh0IHRpbWUgc29tZW9uZSB0cmllcyB0byBhY2Nlc3MgdGhlIFhNTCBhdHRyaWJ1
dGVzLCB0aGUgc3luY2hyb25pemF0aW9uIGNvZGUgc3RhcnRzLiBEdXJpbmcgdGhhdCBzeW5jaHJv
bml6YXRpb24KLSAgICAvLyBTVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyIG1heSBjYWxs
IE5hbWVkTm9kZU1hcDo6cmVtb3ZlQXR0cmlidXRlKCksIHdoaWNoIGluIHR1cm4gY2FsbHMgYXR0
cmlidXRlQ2hhbmdlZCgpLgorICAgIC8vIFNWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIg
bWF5IGNhbGwgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZSgpLCB3aGljaCBp
biB0dXJuIGNhbGxzIGF0dHJpYnV0ZUNoYW5nZWQoKS4KICAgICAvLyBBdCB0aGlzIHBvaW50IHdl
J3JlIG5vdCBhbGxvd2VkIHRvIGNhbGwgc3ZnQXR0cmlidXRlQ2hhbmdlZCgpIGFnYWluIC0gaXQg
bWF5IGxlYWQgdG8gZXh0cmEgd29yayBiZWluZyBkb25lLCBvciBjcmFzaGVzCiAgICAgLy8gc2Vl
IGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDA5OTQuCiAgICAg
aWYgKGlzU3luY2hyb25pemluZ1NWR0F0dHJpYnV0ZXMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRWxlbWVudC5jcHAKaW5kZXggNDNlNTFkNGJmYmY1NzhhYWUxNzdhZGYxZDg2MWMy
MmQ5ZGU3ZDA5ZC4uZTZhMWI2ZTRlYzE3ZjIxNTQwYzhlZTc4N2FmMDZlMGNlOGVlNmExNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRWxlbWVudC5jcHAKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJXZWJEb2N1bWVudC5oIgogCiAjaW5jbHVkZSAiRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgogI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>