<?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>140984</bug_id>
          
          <creation_ts>2015-01-27 20:32:54 -0800</creation_ts>
          <short_desc>Make SVGElement::instancesForElement point to elements in the shadow tree, not SVGElementInstance objects</short_desc>
          <delta_ts>2015-01-28 09:59:54 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140602</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1064789</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-27 20:32:54 -0800</bug_when>
    <thetext>Make SVGElement::instancesForElement point to elements in the shadow tree, not SVGElementInstance objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064824</commentid>
    <comment_count>1</comment_count>
      <attachid>245518</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-27 23:48:35 -0800</bug_when>
    <thetext>Created attachment 245518
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064934</commentid>
    <comment_count>2</comment_count>
      <attachid>245518</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-28 09:59:51 -0800</bug_when>
    <thetext>Comment on attachment 245518
Patch

Clearing flags on attachment: 245518

Committed r179260: &lt;http://trac.webkit.org/changeset/179260&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064935</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-28 09:59:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245518</attachid>
            <date>2015-01-27 23:48:35 -0800</date>
            <delta_ts>2015-01-28 09:59:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140984-20150127234839.patch</filename>
            <type>text/plain</type>
            <size>77050</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTFiZWNhNTUyZWFhNDNi
YTQ3NzJhMmRlNmQxOWVjOGU3ZTFjN2E1OS4uNGE1NWI1NDY5NDU2NzQ3MDk5YWQ0NjA2OWI4OTc4
ZWY2MWYxMDZlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2NSBAQAorMjAxNS0wMS0yNyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBTVkdFbGVtZW50Ojpp
bnN0YW5jZXNGb3JFbGVtZW50IHBvaW50IHRvIGVsZW1lbnRzIGluIHRoZSBzaGFkb3cgdHJlZSwg
bm90IFNWR0VsZW1lbnRJbnN0YW5jZSBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDA5ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmluZyBvZiBjb2RlIHRoYXQgaXMgcHJldHR5
IHdlbGwgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0cywgc28KKyAgICAgICAgbm90IGFkZGluZyBu
ZXcgdGVzdHMuCisKKyAgICAgICAgSW5zcGlyZWQgYnkgd29yayBSb2IgQnVpcyBkaWQgaW4gQmxp
bms6CisKKyAgICAgICAgICAgIGh0dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9ibGluaz92
aWV3PXJldmlzaW9uJnJldmlzaW9uPTE3MzI3NQorCisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjbGVhcik6IFJlbW92ZWQg
Y29kZSB0byB6ZXJvIG1fbGFzdEluc3RhbmNlVW5kZXJNb3VzZS4KKyAgICAgICAgKFdlYkNvcmU6
Omluc3RhbmNlQXNzb2NpYXRlZFdpdGhTaGFkb3dUcmVlRWxlbWVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKTog
UmVtb3ZlZCBjb2RlIHRoYXQgdXNlZAorICAgICAgICBtX2xhc3RJbnN0YW5jZVVuZGVyTW91c2Ug
dG8gdHJhY2sgZXZlbnRzIG9uIGFuIG9iamVjdCBhZnRlciByZWNsb25pbmcuCisgICAgICAgIFRo
aXMgYmVoYXZpb3IgZG9lc24ndCBzZWVtIHRvIGJlIG5lZWRlZCB0byBwYXNzIGFueSBleGlzdGlu
ZyB0ZXN0cywgYW5kIFJvYgorICAgICAgICByZW1vdmVkIGl0IGZyb20gQmxpbmssIHNvIEknbGwg
dGFrZSBpdCBvdXQgYW5kIHdlIGNhbiBicmluZyBpZiBiYWNrLCBiYXNlZAorICAgICAgICBvbiB0
aGUgb3JpZ2luYWwgZWxlbWVudCByYXRoZXIgdGhhbiBvbiB0aGUgU1ZHRWxlbWVudEluc3RhbmNl
LCBpZiB3ZSBmaW5kIHdlCisgICAgICAgIG5lZWQgdG8gcmVzdG9yZSB0aGUgYmVoYXZpb3IgaW4g
dGhlIGZ1dHVyZS4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmg6IFJlbW92ZWQgbV9s
YXN0SW5zdGFuY2VVbmRlck1vdXNlLgorCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50
QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmRldGVy
bWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKToKKyAgICAgICAgQ2hhbmdlZCB0aGlzIGZ1bmN0aW9u
IHRvIHRha2UgYSByZWZlcmVuY2UgYW5kIHRvIGNhbGwgdGhlIHVwZGF0ZWQgdmVyc2lvbgorICAg
ICAgICBvZiB0aGUgdGFyZ2V0RWxlbWVudC5hbmltYXRlZFByb3BlcnR5VHlwZXNGb3JBdHRyaWJ1
dGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJhc2U6OmNh
bGN1bGF0ZUFuaW1hdGVkVmFsdWUpOiBVcGRhdGVkIHRvIHBhc3MKKyAgICAgICAgYSByZWZlcmVu
Y2UgcmF0aGVyIHRoYW4gYSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVs
ZW1lbnRCYXNlOjpyZXNldEFuaW1hdGVkVHlwZSk6IFVwZGF0ZWQgdG8gcGFzcworICAgICAgICBy
ZWZlcmVuY2VzIHJhdGhlciB0aGFuIHBvaW50ZXJzLgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlD
U1NQcm9wZXJ0eVRvVGFyZ2V0KTogVXBkYXRlZCB0byB0YWtlIGEgcmVmZXJlbmNlLgorICAgICAg
ICAoV2ViQ29yZTo6cmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjphcHBseUNTU1Byb3BlcnR5VG9UYXJnZXRBbmRJbnN0YW5jZXMpOiBEaXR0by4g
QWxzbyB1c2UgYSBtb2Rlcm4KKyAgICAgICAgZm9yIGxvb3AsIGFuZCBpdGVyYXRlIG92ZXIgc2hh
ZG93IHRyZWUgaW5zdGFuY2VzLCBub3Qgb3ZlciBTVkdFbGVtZW50SW5zdGFuY2UuCisgICAgICAg
IChXZWJDb3JlOjpyZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6Om5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRBbmlt
VmFsQ2hhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlRWxlbWVudEJh
c2U6OmNsZWFyQW5pbWF0ZWRUeXBlKTogTW9yZSBvZiB0aGUgc2FtZS4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6YXBwbHlSZXN1bHRzVG9UYXJnZXQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVFbGVtZW50QmFzZTo6cmVzZXRBbmltYXRlZFBy
b3BlcnR5VHlwZSk6IERpdHRvLgorCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFz
ZS5oOiBDaGFuZ2VkIGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlIHRvIHRha2UKKyAgICAg
ICAgYSByZWZlcmVuY2UgcmFodGVyIHRoYW4gYSBwb2ludGVyLgorCisgICAgICAgICogc3ZnL1NW
R0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVN
b3Rpb25FbGVtZW50OjphcHBseVJlc3VsdHNUb1RhcmdldCk6IFVwZGF0ZWQgdG8gdXNlIHRoZQor
ICAgICAgICBuZXcgaW5zdGFuY2VzIGluc3RlYWQgb2YgU1ZHRWxlbWVudEluc3RhbmNlLiBBbHNv
IGFkZGVkIGNvZGUgdG8gc2tpcCB3b3JrIGlmCisgICAgICAgIHRoZSB0cmFuc2Zvcm0gaXMgbm90
IGNoYW5naW5nLCBhbmQgdXNlIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGluc3RlYWQgb2YKKyAg
ICAgICAgYnJlYWtpbmcgb25lIG1hdHJpeCBkb3duIGFuZCBjYWxsaW5nIHNldE1hdHJpeCBvbiB0
aGUgb3RoZXIuCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6OmZpbmRBbmltYXRlZFBy
b3BlcnRpZXNGb3JBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgQ2hhbmdlZCB0byB0YWtlIGEgcmVm
ZXJlbmNlIHJhdGhlciB0aGFuIGEgcG9pbnRlciwgYW5kIHJld3JvdGUgdG8gc3RyZWFtbGluZSwK
KyAgICAgICAgdXNpbmcgbW9kZXJuIGZvciBsb29wcyBhbmQgdXNpbmcgdGhlIG5ldyBpbnN0YW5j
ZXMgc2V0LgorCisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmg6IFJlbW92
ZWQgdGhlIGNvbnN0cnVjdG9ycyBmcm9tIHRoZQorICAgICAgICBTVkdFbGVtZW50QW5pbWF0ZWRQ
cm9wZXJ0aWVzIHN0cnVjdCBzaW5jZSB3ZSBjYW4gYnVpbGQgdGhlbSBqdXN0IGZpbmUgd2l0aG91
dAorICAgICAgICB0aGVtLiBDaGFuZ2VkIGZpbmRBbmltYXRlZFByb3BlcnRpZXNGb3JBdHRyaWJ1
dGVOYW1lIHRvIHRha2UgYSByZWZlcmVuY2UuCisKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9u
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpjdXJy
ZW50VmFsdWVzRm9yVmFsdWVzQW5pbWF0aW9uKTogUGFzcyBhCisgICAgICAgIHJlZmVyZW5jZSBy
YXRoZXIgdGhhbiBhIHBvaW50ZXIuIEFsc28gc3RyZWFtbGluZWQgdGhlIGNvZGUgYSBiaXQgYW5k
IHJlbW92ZWQKKyAgICAgICAgYSBjb21tZW50IHRoYXQgdHJpZWQgdG8gc2F5IGV4YWN0bHkgd2hh
dCB0aGUgY29kZSB3YXMgZG9pbmcsIGJ1dCB3YXMgb3V0ZGF0ZWQuCisKKyAgICAgICAgKiBzdmcv
U1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojp+U1ZHRWxlbWVu
dCk6IERpc2Nvbm5lY3QgYWxsIGluc3RhbmNlcyBmcm9tIHRoaXMgZWxlbWVudAorICAgICAgICBh
bmQgYWxzbyBkaXNjb25uZWN0IHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZnJvbSB0aGlzIGVs
ZW1lbnQgaWYgaXQgaXRzZWxmCisgICAgICAgIGlzIGFuIGluc3RhbmNlLiBUaGlzIGd1YXJhbnRl
ZXMgd2UgaGF2ZSBubyBkYW5nbGluZyBwb2ludGVycy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0Vs
ZW1lbnQ6Om1hcEluc3RhbmNlVG9FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsZW1lbnQ6OnJlbW92ZUluc3RhbmNlTWFwcGluZyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTVkdFbGVtZW50OjppbnN0YW5jZXMpOiBSZW5hbWVkIGZyb20gaW5zdGFuY2VzRm9y
RWxlbWVudCBhbmQgY2hhbmdlZAorICAgICAgICB0byBiZSBhIHNldCBvZiBTVkcgZWxlbWVudCBp
bnN0YW5jZXMgaW4gdGhlIHNoYWRvdyB0cmVlLCByYXRoZXIgdGhhbgorICAgICAgICBTVkdFbGVt
ZW50SW5zdGFuY2Ugb2JqZWN0cy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmNvcnJl
c3BvbmRpbmdFbGVtZW50KTogVHdlYWtlZCBhc3NlcnRpb24gYSBsaXR0bGUgYW5kIHVzZQorICAg
ICAgICBudWxscHRyIGluc3RlYWQgb2YgMC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6
OmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KTogQWRkZWQuIEZpbmRzIHRoZSB1c2UgZWxlbWVudAor
ICAgICAgICB0aGF0IG93bnMgdGhlIHNoYWRvdyB0cmVlIHRoaXMgZWxlbWVudCBpcyBpbiBieSBm
b2xsb3dpbmcgdGhlIGhvc3QgZWxlbWVudAorICAgICAgICBwb2ludGVyIGZyb20gdGhlIHNoYWRv
dyByb290LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6c2V0Q29ycmVzcG9uZGluZ0Vs
ZW1lbnQpOiBBZGRlZCBjb2RlIHRvIGluc2VydCBvciByZW1vdmUKKyAgICAgICAgdGhpcyBlbGVt
ZW50IGZyb20gdGhlIGluc3RhbmNlcyBzZXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudC4K
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmFuaW1hdGVkUHJvcGVydHlUeXBlc0ZvckF0
dHJpYnV0ZSk6IFJlbmFtZWQgZnJvbQorICAgICAgICBhbmltYXRlZFByb3BlcnR5VHlwZUZvckF0
dHJpYnV0ZSBhbmQgc3dpdGNoZWQgdG8gdXNlIGEgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YKKyAg
ICAgICAgYW4gb3V0IGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6YWRk
RXZlbnRMaXN0ZW5lcik6IFVwZGF0ZWQgdG8gdXNlIGluc3RhbmNlcyByYXRoZXIgdGhhbgorICAg
ICAgICB0aGUgb2xkIGluc3RhbmNlc0ZvckVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTVkdF
bGVtZW50OjpyZW1vdmVFdmVudExpc3RlbmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpT
VkdFbGVtZW50OjpzeW5jaHJvbml6ZUFsbEFuaW1hdGVkU1ZHQXR0cmlidXRlKTogUGFzcyBhIHJl
ZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXplQW5pbWF0
ZWRTVkdBdHRyaWJ1dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Omlz
UHJlc2VudGF0aW9uQXR0cmlidXRlV2l0aFNWR0RPTSk6IFVwZGF0ZWQgdG8gdXNlIHRoZQorICAg
ICAgICBuZXcgZnVuY3Rpb24gZnJvbSBBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwLgorCisgICAgICAg
ICogc3ZnL1NWR0VsZW1lbnQuaDogQ2hhbmdlZCBhbmltYXRlZFByb3BlcnR5VHlwZXNGb3JBdHRy
aWJ1dGUgbmFtZSB0byBiZSBwbHVyYWwKKyAgICAgICAgc2luY2UgaXQgcmV0dXJucyBhIHZlY3Rv
ciBvZiB0eXBlcywgYW5kIG1hZGUgaXQgdXNlIGEgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YKKyAg
ICAgICAgYW4gb3V0IGFyZ3VtZW50LiBBZGRlZCB0aGUgY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQg
ZnVuY3Rpb24sIGFuZCByZW1vdmVkIHRoZQorICAgICAgICBtYXBJbnN0YW5jZVRvRWxlbWVudCBh
bmQgcmVtb3ZlSW5zdGFuY2VNYXBwaW5nIGZ1bmN0aW9ucy4KKworICAgICAgICAqIHN2Zy9TVkdF
bGVtZW50SW5zdGFuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNl
OjpTVkdFbGVtZW50SW5zdGFuY2UpOiBSZW1vdmVkIG5vdy11bm5lZWRlZCBjYWxsIHRvCisgICAg
ICAgIG1hcEluc3RhbmNlVG9FbGVtZW50LiBUaGlzIGlzIG5vdyBoYW5kbGVkIGVudGlyZWx5IGJ5
IHRoZSBTVkdFbGVtZW50IGl0c2VsZi4KKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnRJbnN0
YW5jZTo6ZGV0YWNoKTogUmVtb3ZlZCBub3ctdW5uZWVkZWQgY2FsbCB0bworICAgICAgICByZW1v
dmVJbnN0YW5jZU1hcHBpbmcuIFRoaXMgaXMgbm93IGhhbmRsZWQgZW50aXJlbHkgYnkgdGhlIFNW
R0VsZW1lbnQgaXRzZWxmLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudEluc3RhbmNlOjpp
bnZhbGlkYXRlQWxsSW5zdGFuY2VzT2ZFbGVtZW50KTogUmV3cm90ZSB0byBiZQorICAgICAgICBi
YXNlZCBvbiB0aGUgaW5zdGFuY2VzIHNldDsgbG9naWMgaXMgZGlmZmVyZW50IG5vdyBiZWNhdXNl
IHdlIHJlbW92ZSBlYWNoCisgICAgICAgIGVsZW1lbnQgZnJvbSB0aGF0IHNldCBhcyB3ZSBnby4K
KworICAgICAgICAqIHN2Zy9TVkdFbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0VsZW1lbnRSYXJlRGF0YTo6U1ZHRWxlbWVudFJhcmVEYXRhKTogUmVtb3ZlZCBpbml0aWFs
aXphdGlvbiBvZgorICAgICAgICBwb2ludGVycyBzaW5jZSB3ZSBjYW4gZG8gdGhhdCB3aGVyZSB0
aGV5IGFyZSBkZWZpbmVkIGluc3RlYWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50UmFy
ZURhdGE6Omluc3RhbmNlcyk6IFJlbmFtZWQgZnJvbSBlbGVtZW50SW5zdGFuY2VzIGFuZAorICAg
ICAgICBjaGFuZ2VkIHRoZSB0eXBlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVE
YXRhOjpkZXN0cm95QW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAg
ICAgVW5uZWVkZWQgc2luY2UgaXQgd2FzIGFscmVhZHkgY2FsbGVkIGp1c3QgYmVmb3JlIGRlbGV0
aW5nIHRoZSByYXJlIGRhdGEuCisKKyAgICAgICAgKiBzdmcvU1ZHVGVzdHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHVGVzdHM6OlNWR1Rlc3RzKTogVG9vayBhZHZhbnRhZ2Ugb2YgdXNpbmcg
bmFtZXNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU1ZHVGVzdFByb3BlcnR5SW5mbyk6
IEFkZGVkLiBIZWxwZXIgZm9yIGZ1bmN0aW9uIGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlU1ZHVGV4dEF0dHJpYnV0ZVRvUHJvcGVydHlNYXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR1Rlc3RzOjphdHRyaWJ1dGVUb1Byb3BlcnR5TWFwKTogQ2hhbmdlZCB0byB1c2UgdGhl
IGNyZWF0ZSBmdW5jdGlvbgorICAgICAgICBhYm92ZS4gTm8gbG9uZ2VyIGFsbG9jYXRlcyBvYmpl
Y3RzIG9uIHRoZSBoZWFwLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGVzdHM6Omhhc0V4dGVuc2lv
bik6IFJld29ya2VkICNpZiBjb2RlIHRvIG1ha2UgdGhlIE1hdGhNTCBwYXJ0CisgICAgICAgIGlu
ZGVwZW5kZW50IHJhdGhlciB0aGFuIHJlcGVhdGluZyB0aGUgcmV0dXJuIHN0YXRlbWVudC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjpzeW5jaHJvbml6ZUF0dHJpYnV0ZSk6IEFkZGVkLiBI
ZWxwZXIgZm9yIGZ1bmN0aW9ucyBiZWxvdy4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1Rlc3RzOjpz
eW5jaHJvbml6ZVJlcXVpcmVkRmVhdHVyZXMpOiBDYWxsIHN5bmNocm9uaXplQXR0cmlidXRlLgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25z
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXN0czo6c3luY2hyb25pemVTeXN0ZW1M
YW5ndWFnZSk6IERpdHRvLgorCisgICAgICAgICogc3ZnL1NWR1Rlc3RzLmg6IFJlbW92ZWQgdW5u
ZWVkZWQgZm9yd2FyZCBkZWNsYXJhdGlvbnMuIE1hcmsgdGhlIG1hbnkgZnVuY3Rpb25zCisgICAg
ICAgIHRoYXQgZG8gbm90IGRlcGVuZCBvbiBvYmplY3Qgc3RhdGUgYXMgc3RhdGljIHNvIHRoZSBj
YWxsIHNpdGVzIGRvbid0IHdhc3RlZnVsbHkKKyAgICAgICAgcGFzcyBhIHRoaXMgcG9pbnRlci4g
UmVtb3ZlZCB0aGUgdW5uZWVkZWQgcmVxdWlyZWRGZWF0dXJlc1Byb3BlcnR5SW5mbywKKyAgICAg
ICAgcmVxdWlyZWRFeHRlbnNpb25zUHJvcGVydHlJbmZvLCBhbmQgc3lzdGVtTGFuZ3VhZ2VQcm9w
ZXJ0eUluZm8gZnVuY3Rpb25zLgorICAgICAgICBBZGRlZCBzeW5jaHJvbml6ZUF0dHJpYnV0ZSBo
ZWxwZXIgZnVuY3Rpb24uCisKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjppbnZhbGlkYXRlRGVwZW5kZW50U2hhZG93VHJl
ZXMpOiBVcGRhdGVkIHRvIHVzZSB0aGUKKyAgICAgICAgbmV3IGluc3RhbmNlcyBzZXQgYW5kIGEg
bW9kZXJuIGZvciBsb29wLgorCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eU1hY3Jvcy5oOiBQYXNzIHJlZmVyZW5jZSB0byBhZGRQcm9wZXJ0eSBhbmQKKyAgICAg
ICAgbWFkZSBhIGZldyBvdGhlciBzbWFsbCByZWZpbmVtZW50cy4KKworICAgICAgICAqIHN2Zy9w
cm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVydGllcyk6IEZpeGVkIHByb2Js
ZW1zIG1lbnRpb25lZAorICAgICAgICBpbiBGSVhNRSB3aGVyZSB3ZSBkaWQgdG9vIG11Y2ggaGFz
aGluZyBhbmQgdmVjdG9yIHJlc2l6aW5nLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRl
VG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVydHkpOiBTdHJlYW1saW5lZCB0byB1c2UgYSBzaW5nbGUK
KyAgICAgICAgaGFzaCB0YWJsZSBsb29rdXAuCisgICAgICAgIChXZWJDb3JlOjpTVkdBdHRyaWJ1
dGVUb1Byb3BlcnR5TWFwOjpwcm9wZXJ0aWVzKTogUmVuYW1lZCBmcm9tCisgICAgICAgIGFuaW1h
dGVkUHJvcGVydGllc0ZvckF0dHJpYnV0ZSBhbmQgY2hhbmdlZCB0byByZXR1cm4gYSB2ZWN0b3Ig
cmF0aGVyIHRoYW4gdXNpbmcKKyAgICAgICAgYW4gb3V0IGFyZ3VtZW50LiBBbHNvIGhhZCB0byBj
aGFuZ2Ugc29tZSBzaW5jZSB0aGUgdmVjdG9ycyBhcmUgaW4gdGhlIGhhc2ggdGFibGUKKyAgICAg
ICAgbm93IHJhdGhlciB0aGFuIGFsbG9jYXRlZCBvbiB0aGUgaGVhcC4KKyAgICAgICAgKFdlYkNv
cmU6OlNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnR5cGVzKTogUmVuYW1lZCBmcm9tCisgICAg
ICAgIGFuaW1hdGVkUHJvcGVydHlUeXBlRm9yQXR0cmlidXRlIGFuZCBtYWRlIGNoYW5nZXMganVz
dCBsaWtlIHRoZSBvbmVzIGFib3ZlLgorICAgICAgICAoV2ViQ29yZTo6U1ZHQXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKTogVXNlIG1vZGVybiBmb3IKKyAgICAg
ICAgbG9vcHMsIHRha2UgYSByZWZlcmVuY2UgcmF0aGVyIHRoYW4gYSBwb2ludGVyLCBhbmQgdXNl
IHRoZSBmdW5jdGlvbiBwb2ludGVyCisgICAgICAgIGRpcmVjdGx5IGluc3RlYWQgb2YgY2FsbGlu
ZyB0aHJvdWdoIGEgaGVscGVyIHdpdGggdmFyaW91cyBhc3NlcnRpb25zLgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6c3luY2hyb25pemVQcm9wZXJ0eSk6IERp
dHRvLgorCisgICAgICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1h
cC5oOiBVcGRhdGVkIHRvIG1hdGNoIHRoZSBjaGFuZ2VzCisgICAgICAgIGFib3ZlLiBBbHNvIGNo
YW5nZWQgdGhlIG1hcCB0byBjb250YWluIHZlY3RvcnMgaW5zdGVhZCBvZiBwb2ludGVycyB0byB2
ZWN0b3JzLgorCiAyMDE1LTAxLTI3ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29t
PgogCiAgICAgICAgIE1vcmUgYnVpbGQgZml4ZXMgZm9yIG5ld2VyIGNsYW5nLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDYwNjFhMzk1YTExMmViNDM3ZmVlODQ2MmI2NGNm
MDI0MDJmMTU4ZjUuLmRkYmM1ODI3NTU5MWJlMTkxNWM3MDM4MWNkMzIzY2FhZjVlZWFmNjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTQ1OSw3ICs0NTksNiBAQCB2b2lk
IEV2ZW50SGFuZGxlcjo6Y2xlYXIoKQogICAgIG1fcmVzaXplTGF5ZXIgPSBudWxscHRyOwogICAg
IG1fZWxlbWVudFVuZGVyTW91c2UgPSBudWxscHRyOwogICAgIG1fbGFzdEVsZW1lbnRVbmRlck1v
dXNlID0gbnVsbHB0cjsKLSAgICBtX2xhc3RJbnN0YW5jZVVuZGVyTW91c2UgPSBudWxscHRyOwog
ICAgIG1fbGFzdE1vdXNlTW92ZUV2ZW50U3ViZnJhbWUgPSBudWxscHRyOwogICAgIG1fbGFzdFNj
cm9sbGJhclVuZGVyTW91c2UgPSBudWxscHRyOwogICAgIG1fY2xpY2tDb3VudCA9IDA7CkBAIC0y
MzUyLDIyICsyMzUxLDYgQEAgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyBFdmVudEhhbmRs
ZXI6OnByZXBhcmVNb3VzZUV2ZW50KGNvbnN0IEhpdFRlc3RSZXF1ZXMKICAgICByZXR1cm4gbV9m
cmFtZS5kb2N1bWVudCgpLT5wcmVwYXJlTW91c2VFdmVudChyZXF1ZXN0LCBkb2N1bWVudFBvaW50
Rm9yV2luZG93UG9pbnQobV9mcmFtZSwgbW91c2VFdmVudC5wb3NpdGlvbigpKSwgbW91c2VFdmVu
dCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZUFzc29j
aWF0ZWRXaXRoU2hhZG93VHJlZUVsZW1lbnQoTm9kZSogcmVmZXJlbmNlTm9kZSkKLXsKLSAgICBp
ZiAoIXJlZmVyZW5jZU5vZGUgfHwgIXJlZmVyZW5jZU5vZGUtPmlzU1ZHRWxlbWVudCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QgPSByZWZl
cmVuY2VOb2RlLT5jb250YWluaW5nU2hhZG93Um9vdCgpOwotICAgIGlmICghc2hhZG93Um9vdCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBFbGVtZW50KiBzaGFkb3dUcmVlUGFyZW50
RWxlbWVudCA9IHNoYWRvd1Jvb3QtPmhvc3RFbGVtZW50KCk7Ci0gICAgaWYgKCFzaGFkb3dUcmVl
UGFyZW50RWxlbWVudCB8fCAhc2hhZG93VHJlZVBhcmVudEVsZW1lbnQtPmhhc1RhZ05hbWUodXNl
VGFnKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8U1ZH
VXNlRWxlbWVudD4oKnNoYWRvd1RyZWVQYXJlbnRFbGVtZW50KS5pbnN0YW5jZUZvclNoYWRvd1Ry
ZWVFbGVtZW50KHJlZmVyZW5jZU5vZGUpOwotfQotCiBzdGF0aWMgUmVuZGVyRWxlbWVudCogbmVh
cmVzdENvbW1vbkhvdmVyQW5jZXN0b3IoUmVuZGVyRWxlbWVudCogb2JqMSwgUmVuZGVyRWxlbWVu
dCogb2JqMikKIHsKICAgICBpZiAoIW9iajEgfHwgIW9iajIpCkBAIC0yNDA5LDM3ICsyMzkyLDYg
QEAgdm9pZCBFdmVudEhhbmRsZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKE5vZGUqIHRh
cmdldE5vZGUsIGNvbnN0IFBsYXRmb3JtTW8KIAogICAgIG1fZWxlbWVudFVuZGVyTW91c2UgPSB0
YXJnZXRFbGVtZW50OwogCi0gICAgLy8gPHVzZT4gc2hhZG93IHRyZWUgZWxlbWVudHMgbWF5IGhh
dmUgYmVlbiByZWNsb25lZCwgdXBkYXRlIG5vZGUgdW5kZXIgbW91c2UgaW4gYW55IGNhc2UKLSAg
ICBpZiAobV9sYXN0SW5zdGFuY2VVbmRlck1vdXNlKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIGxh
c3RDb3JyZXNwb25kaW5nRWxlbWVudCA9IG1fbGFzdEluc3RhbmNlVW5kZXJNb3VzZS0+Y29ycmVz
cG9uZGluZ0VsZW1lbnQoKTsKLSAgICAgICAgU1ZHRWxlbWVudCogbGFzdENvcnJlc3BvbmRpbmdV
c2VFbGVtZW50ID0gbV9sYXN0SW5zdGFuY2VVbmRlck1vdXNlLT5jb3JyZXNwb25kaW5nVXNlRWxl
bWVudCgpOwotCi0gICAgICAgIGlmIChsYXN0Q29ycmVzcG9uZGluZ0VsZW1lbnQgJiYgbGFzdENv
cnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7Ci0gICAgICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnRJ
bnN0YW5jZSo+IGluc3RhbmNlcyA9IGxhc3RDb3JyZXNwb25kaW5nRWxlbWVudC0+aW5zdGFuY2Vz
Rm9yRWxlbWVudCgpOwotCi0gICAgICAgICAgICAvLyBMb2NhdGUgdGhlIHJlY2xvbmVkIHNoYWRv
dyB0cmVlIGVsZW1lbnQgZm9yIG91ciBjb3JyZXNwb25kaW5nIGluc3RhbmNlCi0gICAgICAgICAg
ICBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+OjppdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMu
ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46Oml0
ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAg
ICAgICAgICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSAoKml0KTsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoaW5zdGFuY2UtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgPT0gbGFzdENv
cnJlc3BvbmRpbmdFbGVtZW50KTsKLQotICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZSA9PSBt
X2xhc3RJbnN0YW5jZVVuZGVyTW91c2UpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLT5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCgp
ICE9IGxhc3RDb3JyZXNwb25kaW5nVXNlRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgICAgICAgICBTVkdFbGVtZW50KiBzaGFkb3dUcmVlRWxlbWVudCA9
IGluc3RhbmNlLT5zaGFkb3dUcmVlRWxlbWVudCgpOwotICAgICAgICAgICAgICAgIGlmICghc2hh
ZG93VHJlZUVsZW1lbnQtPmluRG9jdW1lbnQoKSB8fCBtX2xhc3RFbGVtZW50VW5kZXJNb3VzZSA9
PSBzaGFkb3dUcmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgICAgICBtX2xhc3RFbGVtZW50VW5kZXJNb3VzZSA9IHNoYWRvd1RyZWVFbGVtZW50
OwotICAgICAgICAgICAgICAgIG1fbGFzdEluc3RhbmNlVW5kZXJNb3VzZSA9IGluc3RhbmNlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
CiAgICAgLy8gRmlyZSBtb3VzZW91dC9tb3VzZW92ZXIgaWYgdGhlIG1vdXNlIGhhcyBzaGlmdGVk
IHRvIGEgZGlmZmVyZW50IG5vZGUuCiAgICAgaWYgKGZpcmVNb3VzZU92ZXJPdXQpIHsKICAgICAg
ICAgUmVuZGVyTGF5ZXIqIGxheWVyRm9yTGFzdE5vZGUgPSBsYXllckZvck5vZGUobV9sYXN0RWxl
bWVudFVuZGVyTW91c2UuZ2V0KCkpOwpAQCAtMjQ4MSw3ICsyNDMzLDYgQEAgdm9pZCBFdmVudEhh
bmRsZXI6OnVwZGF0ZU1vdXNlRXZlbnRUYXJnZXROb2RlKE5vZGUqIHRhcmdldE5vZGUsIGNvbnN0
IFBsYXRmb3JtTW8KICAgICAgICAgaWYgKG1fbGFzdEVsZW1lbnRVbmRlck1vdXNlICYmICZtX2xh
c3RFbGVtZW50VW5kZXJNb3VzZS0+ZG9jdW1lbnQoKSAhPSBtX2ZyYW1lLmRvY3VtZW50KCkpIHsK
ICAgICAgICAgICAgIG1fbGFzdEVsZW1lbnRVbmRlck1vdXNlID0gbnVsbHB0cjsKICAgICAgICAg
ICAgIG1fbGFzdFNjcm9sbGJhclVuZGVyTW91c2UgPSBudWxscHRyOwotICAgICAgICAgICAgbV9s
YXN0SW5zdGFuY2VVbmRlck1vdXNlID0gbnVsbHB0cjsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChtX2xhc3RFbGVtZW50VW5kZXJNb3VzZSAhPSBtX2VsZW1lbnRVbmRlck1vdXNlKSB7CkBAIC0y
NTM5LDcgKzI0OTAsNiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6dXBkYXRlTW91c2VFdmVudFRhcmdl
dE5vZGUoTm9kZSogdGFyZ2V0Tm9kZSwgY29uc3QgUGxhdGZvcm1NbwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIG1fbGFzdEVsZW1lbnRVbmRlck1vdXNlID0gbV9lbGVtZW50VW5k
ZXJNb3VzZTsKLSAgICAgICAgbV9sYXN0SW5zdGFuY2VVbmRlck1vdXNlID0gaW5zdGFuY2VBc3Nv
Y2lhdGVkV2l0aFNoYWRvd1RyZWVFbGVtZW50KG1fZWxlbWVudFVuZGVyTW91c2UuZ2V0KCkpOwog
ICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKaW5kZXggNDVmMzhkOThmNGE5
NTk5ZTg4YzdmYzc2YzhkOWQ1NWViNzIxZTlhYy4uZDhlYTc0ODQ4MGIxNzY4YTQ5M2JjNjBhZDU0
NDBjMjY2MzczMDg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCkBAIC05Miw3ICs5
Miw2IEBAIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJMYXllcjsKIGNsYXNzIFJl
bmRlcldpZGdldDsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwotY2xhc3MgU1ZHRWxlbWVudEluc3Rh
bmNlOwogY2xhc3MgU2Nyb2xsYmFyOwogY2xhc3MgVGV4dEV2ZW50OwogY2xhc3MgVG91Y2g7CkBA
IC00ODgsNyArNDg3LDYgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgYm9vbCBtX3N2Z1BhbjsK
LSAgICBSZWZQdHI8U1ZHRWxlbWVudEluc3RhbmNlPiBtX2xhc3RJbnN0YW5jZVVuZGVyTW91c2U7
CiAKICAgICBSZW5kZXJMYXllciogbV9yZXNpemVMYXllcjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcAppbmRleCA3YTQxMjI4OWVjMzJhNDYxNGZhOGI3
MzE5ZWMwZjk4MjBjN2VlODUxLi5iZGUyYjcxOWU1YjNiMGFhMjkwM2U1NjZlN2Y0N2I1MjhhZmRm
YjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmNwcApA
QCAtNTUsMTIgKzU1LDkgQEAgYm9vbCBTVkdBbmltYXRlRWxlbWVudEJhc2U6Omhhc1ZhbGlkQXR0
cmlidXRlVHlwZSgpCiAgICAgcmV0dXJuIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgIT0gQW5pbWF0
ZWRVbmtub3duICYmICFoYXNJbnZhbGlkQ1NTQXR0cmlidXRlVHlwZSgpOwogfQogCi1BbmltYXRl
ZFByb3BlcnR5VHlwZSBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmRldGVybWluZUFuaW1hdGVkUHJv
cGVydHlUeXBlKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQpIGNvbnN0CitBbmltYXRlZFByb3Bl
cnR5VHlwZSBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmRldGVybWluZUFuaW1hdGVkUHJvcGVydHlU
eXBlKFNWR0VsZW1lbnQmIHRhcmdldEVsZW1lbnQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHRhcmdl
dEVsZW1lbnQpOwotCi0gICAgVmVjdG9yPEFuaW1hdGVkUHJvcGVydHlUeXBlPiBwcm9wZXJ0eVR5
cGVzOwotICAgIHRhcmdldEVsZW1lbnQtPmFuaW1hdGVkUHJvcGVydHlUeXBlRm9yQXR0cmlidXRl
KGF0dHJpYnV0ZU5hbWUoKSwgcHJvcGVydHlUeXBlcyk7CisgICAgYXV0byBwcm9wZXJ0eVR5cGVz
ID0gdGFyZ2V0RWxlbWVudC5hbmltYXRlZFByb3BlcnR5VHlwZXNGb3JBdHRyaWJ1dGUoYXR0cmli
dXRlTmFtZSgpKTsKICAgICBpZiAocHJvcGVydHlUeXBlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBBbmltYXRlZFVua25vd247CiAKQEAgLTc3LDcgKzc0LDcgQEAgQW5pbWF0ZWRQcm9wZXJ0
eVR5cGUgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlw
ZShTVkdFbGUKICAgICAvLyBGb3J0dW5hdGVseSB0aGVyZSdzIGp1c3Qgb25lIHNwZWNpYWwgY2Fz
ZSBuZWVkZWQgaGVyZTogU1ZHTWFya2VyRWxlbWVudHMgb3JpZW50QXR0ciwgd2hpY2gKICAgICAv
LyBjb3JyZXNwb25kcyB0byBTVkdBbmltYXRlZEFuZ2xlIG9yaWVudEFuZ2xlIGFuZCBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uIG9yaWVudFR5cGUuIFdlIGhhdmUgdG8KICAgICAvLyBmaWd1cmUgb3V0
IHdob3NlIHZhbHVlIHRvIGNoYW5nZSBoZXJlLgotICAgIGlmICh0YXJnZXRFbGVtZW50LT5oYXNU
YWdOYW1lKFNWR05hbWVzOjptYXJrZXJUYWcpICYmIHR5cGUgPT0gQW5pbWF0ZWRBbmdsZSkgewor
ICAgIGlmICh0YXJnZXRFbGVtZW50Lmhhc1RhZ05hbWUoU1ZHTmFtZXM6Om1hcmtlclRhZykgJiYg
dHlwZSA9PSBBbmltYXRlZEFuZ2xlKSB7CiAgICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzLnNp
emUoKSA9PSAyKTsKICAgICAgICAgQVNTRVJUKHByb3BlcnR5VHlwZXNbMF0gPT0gQW5pbWF0ZWRB
bmdsZSk7CiAgICAgICAgIEFTU0VSVChwcm9wZXJ0eVR5cGVzWzFdID09IEFuaW1hdGVkRW51bWVy
YXRpb24pOwpAQCAtOTQsNyArOTEsNyBAQCB2b2lkIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6Y2Fs
Y3VsYXRlQW5pbWF0ZWRWYWx1ZShmbG9hdCBwZXJjZW50YWdlLCB1bnNpZ25lZCByZQogICAgIGlm
ICghdGFyZ2V0RWxlbWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fYW5pbWF0
ZWRQcm9wZXJ0eVR5cGUgPT0gZGV0ZXJtaW5lQW5pbWF0ZWRQcm9wZXJ0eVR5cGUodGFyZ2V0RWxl
bWVudCkpOworICAgIEFTU0VSVChtX2FuaW1hdGVkUHJvcGVydHlUeXBlID09IGRldGVybWluZUFu
aW1hdGVkUHJvcGVydHlUeXBlKCp0YXJnZXRFbGVtZW50KSk7CiAKICAgICBBU1NFUlQocGVyY2Vu
dGFnZSA+PSAwICYmIHBlcmNlbnRhZ2UgPD0gMSk7CiAgICAgQVNTRVJUKG1fYW5pbWF0ZWRQcm9w
ZXJ0eVR5cGUgIT0gQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0IHx8IGhhc1RhZ05hbWUoU1ZHTmFtZXM6
OmFuaW1hdGVUcmFuc2Zvcm1UYWcpKTsKQEAgLTE5Niw2ICsxOTMsOSBAQCB2b2lkIFNWR0FuaW1h
dGVFbGVtZW50QmFzZTo6cmVzZXRBbmltYXRlZFR5cGUoKQogICAgIEFTU0VSVChtX2FuaW1hdGVk
UHJvcGVydHlUeXBlID09IGFuaW1hdG9yLT50eXBlKCkpOwogCiAgICAgU1ZHRWxlbWVudCogdGFy
Z2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1lbnQoKTsKKyAgICBpZiAoIXRhcmdldEVsZW1l
bnQpCisgICAgICAgIHJldHVybjsKKwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUgPSB0aGlzLT5hdHRyaWJ1dGVOYW1lKCk7CiAgICAgU2hvdWxkQXBwbHlBbmltYXRpb24g
c2hvdWxkQXBwbHkgPSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50LCBhdHRyaWJ1
dGVOYW1lKTsKIApAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNl
OjpyZXNldEFuaW1hdGVkVHlwZSgpCiAKICAgICBpZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlYTUxB
bmltYXRpb24gfHwgc2hvdWxkQXBwbHkgPT0gQXBwbHlYTUxhbmRDU1NBbmltYXRpb24pIHsKICAg
ICAgICAgLy8gU1ZHIERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2RlLXBhdGguCi0gICAgICAgIG1f
YW5pbWF0ZWRQcm9wZXJ0aWVzID0gYW5pbWF0b3ItPmZpbmRBbmltYXRlZFByb3BlcnRpZXNGb3JB
dHRyaWJ1dGVOYW1lKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICBtX2Fu
aW1hdGVkUHJvcGVydGllcyA9IGFuaW1hdG9yLT5maW5kQW5pbWF0ZWRQcm9wZXJ0aWVzRm9yQXR0
cmlidXRlTmFtZSgqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CiAgICAgICAgIGlmICht
X2FuaW1hdGVkUHJvcGVydGllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAg
LTIzMyw4NSArMjMzLDcyIEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpyZXNldEFuaW1h
dGVkVHlwZSgpCiAgICAgICAgIG1fYW5pbWF0ZWRUeXBlLT5zZXRWYWx1ZUFzU3RyaW5nKGF0dHJp
YnV0ZU5hbWUsIGJhc2VWYWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1By
b3BlcnR5VG9UYXJnZXQoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBp
ZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcHBseUNTU1Byb3Bl
cnR5VG9UYXJnZXQoU1ZHRWxlbWVudCYgdGFyZ2V0RWxlbWVudCwgQ1NTUHJvcGVydHlJRCBpZCwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoIXRhcmdldEVsZW1lbnQtPm1fZGVs
ZXRpb25IYXNCZWd1bik7CisgICAgQVNTRVJUKCF0YXJnZXRFbGVtZW50Lm1fZGVsZXRpb25IYXNC
ZWd1bik7CiAKLSAgICBpZiAoIXRhcmdldEVsZW1lbnQtPmVuc3VyZUFuaW1hdGVkU01JTFN0eWxl
UHJvcGVydGllcygpLnNldFByb3BlcnR5KGlkLCB2YWx1ZSwgZmFsc2UsIDApKQorICAgIGlmICgh
dGFyZ2V0RWxlbWVudC5lbnN1cmVBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKS5zZXRQcm9w
ZXJ0eShpZCwgdmFsdWUsIGZhbHNlLCAwKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdGFyZ2V0
RWxlbWVudC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAg
dGFyZ2V0RWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdldChTVkdF
bGVtZW50KiB0YXJnZXRFbGVtZW50LCBDU1NQcm9wZXJ0eUlEIGlkKQorc3RhdGljIGlubGluZSB2
b2lkIHJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdldChTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50
LCBDU1NQcm9wZXJ0eUlEIGlkKQogewotICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVudC0+bV9kZWxl
dGlvbkhhc0JlZ3VuKTsKLSAgICB0YXJnZXRFbGVtZW50LT5lbnN1cmVBbmltYXRlZFNNSUxTdHls
ZVByb3BlcnRpZXMoKS5yZW1vdmVQcm9wZXJ0eShpZCk7Ci0gICAgdGFyZ2V0RWxlbWVudC0+c2V0
TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CisgICAgQVNTRVJUKCF0YXJn
ZXRFbGVtZW50Lm1fZGVsZXRpb25IYXNCZWd1bik7CisgICAgdGFyZ2V0RWxlbWVudC5lbnN1cmVB
bmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKS5yZW1vdmVQcm9wZXJ0eShpZCk7CisgICAgdGFy
Z2V0RWxlbWVudC5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIGFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldEFuZEluc3RhbmNl
cyhTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlQXNTdHJpbmcpCitzdGF0aWMgaW5saW5lIHZvaWQg
YXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0VsZW1lbnQmIHRhcmdldEVs
ZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsdWVBc1N0cmluZykKIHsKLSAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0gICAgaWYgKGF0
dHJpYnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC0+aW5Eb2N1bWVudCgp
IHx8ICF0YXJnZXRFbGVtZW50LT5wYXJlbnROb2RlKCkpCisgICAgLy8gRklYTUU6IERvIHdlIHJl
YWxseSBuZWVkIHRvIGNoZWNrIGJvdGggaW5Eb2N1bWVudCBhbmQgIXBhcmVudE5vZGU/CisgICAg
aWYgKGF0dHJpYnV0ZU5hbWUgPT0gYW55UU5hbWUoKSB8fCAhdGFyZ2V0RWxlbWVudC5pbkRvY3Vt
ZW50KCkgfHwgIXRhcmdldEVsZW1lbnQucGFyZW50Tm9kZSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBDU1NQcm9wZXJ0eUlEIGlkID0gY3NzUHJvcGVydHlJRChhdHRyaWJ1dGVOYW1lLmxvY2Fs
TmFtZSgpKTsKIAotICAgIFNWR0VsZW1lbnRJbnN0YW5jZTo6SW5zdGFuY2VVcGRhdGVCbG9ja2Vy
IGJsb2NrZXIodGFyZ2V0RWxlbWVudCk7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnN0YW5j
ZVVwZGF0ZUJsb2NrZXIgYmxvY2tlcigmdGFyZ2V0RWxlbWVudCk7CiAgICAgYXBwbHlDU1NQcm9w
ZXJ0eVRvVGFyZ2V0KHRhcmdldEVsZW1lbnQsIGlkLCB2YWx1ZUFzU3RyaW5nKTsKIAogICAgIC8v
IElmIHRoZSB0YXJnZXQgZWxlbWVudCBoYXMgaW5zdGFuY2VzLCB1cGRhdGUgdGhlbSBhcyB3ZWxs
LCB3L28gcmVxdWlyaW5nIHRoZSA8dXNlPiB0cmVlIHRvIGJlIHJlYnVpbHQuCi0gICAgY29uc3Qg
SGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2VzID0gdGFyZ2V0RWxlbWVudC0+
aW5zdGFuY2VzRm9yRWxlbWVudCgpOwotICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3Rh
bmNlKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGluc3RhbmNlcy5lbmQoKTsKLSAgICBmb3IgKEhh
c2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2Vz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoU1ZHRWxlbWVudCogc2hh
ZG93VHJlZUVsZW1lbnQgPSAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKSkKLSAgICAgICAgICAg
IGFwcGx5Q1NTUHJvcGVydHlUb1RhcmdldChzaGFkb3dUcmVlRWxlbWVudCwgaWQsIHZhbHVlQXNT
dHJpbmcpOwotICAgIH0KKyAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDogdGFyZ2V0RWxlbWVudC5p
bnN0YW5jZXMoKSkKKyAgICAgICAgYXBwbHlDU1NQcm9wZXJ0eVRvVGFyZ2V0KCppbnN0YW5jZSwg
aWQsIHZhbHVlQXNTdHJpbmcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlQ1NTUHJv
cGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0VsZW1lbnQqIHRhcmdldEVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCitzdGF0aWMgaW5saW5lIHZvaWQgcmVt
b3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFuY2VzKFNWR0VsZW1lbnQmIHRhcmdldEVs
ZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiB7Ci0gICAgQVNTRVJU
KHRhcmdldEVsZW1lbnQpOwotICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1lKCkgfHwg
IXRhcmdldEVsZW1lbnQtPmluRG9jdW1lbnQoKSB8fCAhdGFyZ2V0RWxlbWVudC0+cGFyZW50Tm9k
ZSgpKQorICAgIC8vIEZJWE1FOiBEbyB3ZSByZWFsbHkgbmVlZCB0byBjaGVjayBib3RoIGluRG9j
dW1lbnQgYW5kICFwYXJlbnROb2RlPworICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGFueVFOYW1l
KCkgfHwgIXRhcmdldEVsZW1lbnQuaW5Eb2N1bWVudCgpIHx8ICF0YXJnZXRFbGVtZW50LnBhcmVu
dE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ1NTUHJvcGVydHlJRCBpZCA9IGNzc1By
b3BlcnR5SUQoYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSk7CiAKLSAgICBTVkdFbGVtZW50SW5z
dGFuY2U6Okluc3RhbmNlVXBkYXRlQmxvY2tlciBibG9ja2VyKHRhcmdldEVsZW1lbnQpOworICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6SW5zdGFuY2VVcGRhdGVCbG9ja2VyIGJsb2NrZXIoJnRhcmdl
dEVsZW1lbnQpOwogICAgIHJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdldCh0YXJnZXRFbGVtZW50
LCBpZCk7CiAKICAgICAvLyBJZiB0aGUgdGFyZ2V0IGVsZW1lbnQgaGFzIGluc3RhbmNlcywgdXBk
YXRlIHRoZW0gYXMgd2VsbCwgdy9vIHJlcXVpcmluZyB0aGUgPHVzZT4gdHJlZSB0byBiZSByZWJ1
aWx0LgotICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlcyA9
IHRhcmdldEVsZW1lbnQtPmluc3RhbmNlc0ZvckVsZW1lbnQoKTsKLSAgICBjb25zdCBIYXNoU2V0
PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5k
KCk7Ci0gICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYg
KFNWR0VsZW1lbnQqIHNoYWRvd1RyZWVFbGVtZW50ID0gKCppdCktPnNoYWRvd1RyZWVFbGVtZW50
KCkpCi0gICAgICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXQoc2hhZG93VHJlZUVs
ZW1lbnQsIGlkKTsKLSAgICB9CisgICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6IHRhcmdldEVsZW1l
bnQuaW5zdGFuY2VzKCkpCisgICAgICAgIHJlbW92ZUNTU1Byb3BlcnR5RnJvbVRhcmdldCgqaW5z
dGFuY2UsIGlkKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRhcmdldEFib3V0QW5p
bVZhbENoYW5nZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lKQorc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRhcmdldEFib3V0QW5p
bVZhbENoYW5nZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lKQogewotICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVudC0+bV9kZWxldGlv
bkhhc0JlZ3VuKTsKLSAgICB0YXJnZXRFbGVtZW50LT5zdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJp
YnV0ZU5hbWUpOworICAgIEFTU0VSVCghdGFyZ2V0RWxlbWVudC5tX2RlbGV0aW9uSGFzQmVndW4p
OworICAgIHRhcmdldEVsZW1lbnQuc3ZnQXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGVOYW1lKTsK
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fib3V0QW5p
bVZhbENoYW5nZShTVkdFbGVtZW50KiB0YXJnZXRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lKQorc3RhdGljIGlubGluZSB2b2lkIG5vdGlmeVRhcmdldEFuZEluc3Rh
bmNlc0Fib3V0QW5pbVZhbENoYW5nZShTVkdFbGVtZW50JiB0YXJnZXRFbGVtZW50LCBjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQogewotICAgIEFTU0VSVCh0YXJnZXRFbGVtZW50
KTsKLSAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBhbnlRTmFtZSgpIHx8ICF0YXJnZXRFbGVtZW50
LT5pbkRvY3VtZW50KCkgfHwgIXRhcmdldEVsZW1lbnQtPnBhcmVudE5vZGUoKSkKKyAgICBpZiAo
YXR0cmlidXRlTmFtZSA9PSBhbnlRTmFtZSgpIHx8ICF0YXJnZXRFbGVtZW50LmluRG9jdW1lbnQo
KSB8fCAhdGFyZ2V0RWxlbWVudC5wYXJlbnROb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFNWR0VsZW1lbnRJbnN0YW5jZTo6SW5zdGFuY2VVcGRhdGVCbG9ja2VyIGJsb2NrZXIodGFyZ2V0
RWxlbWVudCk7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlOjpJbnN0YW5jZVVwZGF0ZUJsb2NrZXIg
YmxvY2tlcigmdGFyZ2V0RWxlbWVudCk7CiAgICAgbm90aWZ5VGFyZ2V0QWJvdXRBbmltVmFsQ2hh
bmdlKHRhcmdldEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUpOwogCiAgICAgLy8gSWYgdGhlIHRhcmdl
dCBlbGVtZW50IGhhcyBpbnN0YW5jZXMsIHVwZGF0ZSB0aGVtIGFzIHdlbGwsIHcvbyByZXF1aXJp
bmcgdGhlIDx1c2U+IHRyZWUgdG8gYmUgcmVidWlsdC4KLSAgICBjb25zdCBIYXNoU2V0PFNWR0Vs
ZW1lbnRJbnN0YW5jZSo+JiBpbnN0YW5jZXMgPSB0YXJnZXRFbGVtZW50LT5pbnN0YW5jZXNGb3JF
bGVtZW50KCk7Ci0gICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaW5zdGFuY2VzLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxTVkdFbGVt
ZW50SW5zdGFuY2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChTVkdFbGVtZW50KiBzaGFkb3dUcmVlRWxlbWVu
dCA9ICgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgpKQotICAgICAgICAgICAgbm90aWZ5VGFyZ2V0
QWJvdXRBbmltVmFsQ2hhbmdlKHNoYWRvd1RyZWVFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKLSAg
ICB9CisgICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6IHRhcmdldEVsZW1lbnQuaW5zdGFuY2VzKCkp
CisgICAgICAgIG5vdGlmeVRhcmdldEFib3V0QW5pbVZhbENoYW5nZSgqaW5zdGFuY2UsIGF0dHJp
YnV0ZU5hbWUpOwogfQogCiB2b2lkIFNWR0FuaW1hdGVFbGVtZW50QmFzZTo6Y2xlYXJBbmltYXRl
ZFR5cGUoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCkKQEAgLTMyNiwxOSArMzEzLDE5IEBAIHZv
aWQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpjbGVhckFuaW1hdGVkVHlwZShTVkdFbGVtZW50KiB0
YXJnZXRFbGVtZW50KQogCiAgICAgaWYgKG1fYW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkg
ewogICAgICAgICAvLyBDU1MgcHJvcGVydGllcyBhbmltYXRpb24gY29kZS1wYXRoLgotICAgICAg
ICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRBbmRJbnN0YW5jZXModGFyZ2V0RWxlbWVudCwg
YXR0cmlidXRlTmFtZSgpKTsKKyAgICAgICAgcmVtb3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5k
SW5zdGFuY2VzKCp0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpOwogICAgICAgICBtX2Fu
aW1hdGVkVHlwZSA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBTaG91
bGRBcHBseUFuaW1hdGlvbiBzaG91bGRBcHBseSA9IHNob3VsZEFwcGx5QW5pbWF0aW9uKHRhcmdl
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgaWYgKHNob3VsZEFwcGx5ID09IEFwcGx5
WE1MYW5kQ1NTQW5pbWF0aW9uKQotICAgICAgICByZW1vdmVDU1NQcm9wZXJ0eUZyb21UYXJnZXRB
bmRJbnN0YW5jZXModGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSgpKTsKKyAgICAgICAgcmVt
b3ZlQ1NTUHJvcGVydHlGcm9tVGFyZ2V0QW5kSW5zdGFuY2VzKCp0YXJnZXRFbGVtZW50LCBhdHRy
aWJ1dGVOYW1lKCkpOwogCiAgICAgLy8gU1ZHIERPTSBhbmltVmFsIGFuaW1hdGlvbiBjb2RlLXBh
dGguCiAgICAgaWYgKG1fYW5pbWF0b3IpIHsKICAgICAgICAgbV9hbmltYXRvci0+c3RvcEFuaW1W
YWxBbmltYXRpb24obV9hbmltYXRlZFByb3BlcnRpZXMpOwotICAgICAgICBub3RpZnlUYXJnZXRB
bmRJbnN0YW5jZXNBYm91dEFuaW1WYWxDaGFuZ2UodGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFt
ZSgpKTsKKyAgICAgICAgbm90aWZ5VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRBbmltVmFsQ2hhbmdl
KCp0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKCkpOwogICAgIH0KIAogICAgIG1fYW5pbWF0
ZWRQcm9wZXJ0aWVzLmNsZWFyKCk7CkBAIC0zNTEsMjkgKzMzOCwzMiBAQCB2b2lkIFNWR0FuaW1h
dGVFbGVtZW50QmFzZTo6YXBwbHlSZXN1bHRzVG9UYXJnZXQoKQogICAgIEFTU0VSVChtX2FuaW1h
dGVkUHJvcGVydHlUeXBlICE9IEFuaW1hdGVkVW5rbm93bik7CiAgICAgQVNTRVJUKG1fYW5pbWF0
b3IpOwogCi0gICAgLy8gRWFybHkgZXhpdCBpZiBvdXIgYW5pbWF0ZWQgdHlwZSBnb3QgZGVzdHJ1
Y3RlZCBieSBhIHByZXZpb3VzIGVuZGVkQWN0aXZlSW50ZXJ2YWwoKS4KKyAgICAvLyBFYXJseSBl
eGl0IGlmIG91ciBhbmltYXRlZCB0eXBlIGdvdCBkZXN0cm95ZWQgYnkgYSBwcmV2aW91cyBlbmRl
ZEFjdGl2ZUludGVydmFsKCkuCiAgICAgaWYgKCFtX2FuaW1hdGVkVHlwZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IHRoaXMtPnRhcmdldEVsZW1l
bnQoKTsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lID0gdGhpcy0+YXR0
cmlidXRlTmFtZSgpOworCisgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQpOworCiAgICAgaWYgKG1f
YW5pbWF0ZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDU1MgcHJvcGVydGll
cyBhbmltYXRpb24gY29kZS1wYXRoLgogICAgICAgICAvLyBDb252ZXJ0IHRoZSByZXN1bHQgb2Yg
dGhlIGFuaW1hdGlvbiB0byBhIFN0cmluZyBhbmQgYXBwbHkgaXQgYXMgQ1NTIHByb3BlcnR5IG9u
IHRoZSB0YXJnZXQgJiBhbGwgaW5zdGFuY2VzLgotICAgICAgICBhcHBseUNTU1Byb3BlcnR5VG9U
YXJnZXRBbmRJbnN0YW5jZXModGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgbV9hbmltYXRl
ZFR5cGUtPnZhbHVlQXNTdHJpbmcoKSk7CisgICAgICAgIGFwcGx5Q1NTUHJvcGVydHlUb1Rhcmdl
dEFuZEluc3RhbmNlcygqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgbV9hbmltYXRlZFR5
cGUtPnZhbHVlQXNTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBX
ZSBkbyB1cGRhdGUgdGhlIHN0eWxlIGFuZCB0aGUgYW5pbWF0aW9uIHByb3BlcnR5IGluZGVwZW5k
ZW50IG9mIGVhY2ggb3RoZXIuCiAgICAgU2hvdWxkQXBwbHlBbmltYXRpb24gc2hvdWxkQXBwbHkg
PSBzaG91bGRBcHBseUFuaW1hdGlvbih0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTsKICAg
ICBpZiAoc2hvdWxkQXBwbHkgPT0gQXBwbHlYTUxhbmRDU1NBbmltYXRpb24pCi0gICAgICAgIGFw
cGx5Q1NTUHJvcGVydHlUb1RhcmdldEFuZEluc3RhbmNlcyh0YXJnZXRFbGVtZW50LCBhdHRyaWJ1
dGVOYW1lLCBtX2FuaW1hdGVkVHlwZS0+dmFsdWVBc1N0cmluZygpKTsKKyAgICAgICAgYXBwbHlD
U1NQcm9wZXJ0eVRvVGFyZ2V0QW5kSW5zdGFuY2VzKCp0YXJnZXRFbGVtZW50LCBhdHRyaWJ1dGVO
YW1lLCBtX2FuaW1hdGVkVHlwZS0+dmFsdWVBc1N0cmluZygpKTsKIAogICAgIC8vIFNWRyBET00g
YW5pbVZhbCBhbmltYXRpb24gY29kZS1wYXRoLgogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIFNW
RyBET00gdmFsdWVzIGFyZSBhbHJlYWR5IGNoYW5nZWQsIHVubGlrZSBmb3IgQ1NTLgogICAgIC8v
IFdlIG9ubHkgaGF2ZSB0byB0cmlnZ2VyIHVwZGF0ZSBub3RpZmljYXRpb25zIGhlcmUuCiAgICAg
bV9hbmltYXRvci0+YW5pbVZhbERpZENoYW5nZShtX2FuaW1hdGVkUHJvcGVydGllcyk7Ci0gICAg
bm90aWZ5VGFyZ2V0QW5kSW5zdGFuY2VzQWJvdXRBbmltVmFsQ2hhbmdlKHRhcmdldEVsZW1lbnQs
IGF0dHJpYnV0ZU5hbWUpOworICAgIG5vdGlmeVRhcmdldEFuZEluc3RhbmNlc0Fib3V0QW5pbVZh
bENoYW5nZSgqdGFyZ2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CiB9CiAKIGJvb2wgU1ZHQW5p
bWF0ZUVsZW1lbnRCYXNlOjphbmltYXRlZFByb3BlcnR5VHlwZVN1cHBvcnRzQWRkaXRpb24oKSBj
b25zdApAQCAtNDQ1LDcgKzQzNSw3IEBAIHZvaWQgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpyZXNl
dEFuaW1hdGVkUHJvcGVydHlUeXBlKCkKICAgICBtX3RvVHlwZSA9IG51bGxwdHI7CiAgICAgbV90
b0F0RW5kT2ZEdXJhdGlvblR5cGUgPSBudWxscHRyOwogICAgIG1fYW5pbWF0b3IgPSBudWxscHRy
OwotICAgIG1fYW5pbWF0ZWRQcm9wZXJ0eVR5cGUgPSB0YXJnZXRFbGVtZW50KCkgPyBkZXRlcm1p
bmVBbmltYXRlZFByb3BlcnR5VHlwZSh0YXJnZXRFbGVtZW50KCkpIDogQW5pbWF0ZWRTdHJpbmc7
CisgICAgbV9hbmltYXRlZFByb3BlcnR5VHlwZSA9IHRhcmdldEVsZW1lbnQoKSA/IGRldGVybWlu
ZUFuaW1hdGVkUHJvcGVydHlUeXBlKCp0YXJnZXRFbGVtZW50KCkpIDogQW5pbWF0ZWRTdHJpbmc7
CiB9CiAKIFNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKiBTVkdBbmltYXRlRWxlbWVudEJhc2U6OmVu
c3VyZUFuaW1hdG9yKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
RWxlbWVudEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2Uu
aAppbmRleCBlNzIxMWIzOTI5ZjE5NjA4ZTUyY2ViZTkwZGE5NWUyN2I1MjI4ZDMzLi5mMjQxOGE0
YTFmMDZmZTg0NWEzMjZkYzYzNTI4NDdmZDZlYzljOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0FuaW1hdGVFbGVtZW50QmFzZS5oCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIFNWR0FuaW1h
dGVFbGVtZW50QmFzZSA6IHB1YmxpYyBTVkdBbmltYXRpb25FbGVtZW50IHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5TVkdBbmltYXRlRWxlbWVudEJhc2UoKTsKIAotICAgIEFuaW1hdGVkUHJvcGVy
dHlUeXBlIGRldGVybWluZUFuaW1hdGVkUHJvcGVydHlUeXBlKFNWR0VsZW1lbnQqKSBjb25zdDsK
KyAgICBBbmltYXRlZFByb3BlcnR5VHlwZSBkZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZShT
VkdFbGVtZW50JikgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICBTVkdBbmltYXRlRWxlbWVudEJh
c2UoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmNwcAppbmRleCA4OWU5MjIxZDZjMjg2ZGNmZjJi
YTYxYzQ2MTVhNWM4NmEyNzY1NjM3Li5kMWNjNmVjYmYzOWQ0NzkzZjIyYjlhMTQ4NmYwYmVjYzQ3
YmI1YWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZU1vdGlvbkVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlTW90aW9uRWxlbWVu
dC5jcHAKQEAgLTI5MywxOSArMjkzLDE3IEBAIHZvaWQgU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6
OmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCkKICAgICBpZiAoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIg
PSB0YXJnZXRFbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6
bWFya0ZvckxheW91dEFuZFBhcmVudFJlc291cmNlSW52YWxpZGF0aW9uKCpyZW5kZXJlcik7CiAK
LSAgICBBZmZpbmVUcmFuc2Zvcm0qIHQgPSB0YXJnZXRFbGVtZW50LT5zdXBwbGVtZW50YWxUcmFu
c2Zvcm0oKTsKLSAgICBpZiAoIXQpCisgICAgQWZmaW5lVHJhbnNmb3JtKiB0YXJnZXRTdXBwbGVt
ZW50YWxUcmFuc2Zvcm0gPSB0YXJnZXRFbGVtZW50LT5zdXBwbGVtZW50YWxUcmFuc2Zvcm0oKTsK
KyAgICBpZiAoIXRhcmdldFN1cHBsZW1lbnRhbFRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gLi4uZXhjZXB0IGluIGNhc2Ugd2hlcmUgd2UgaGF2ZSBhZGRpdGlvbmFsIGluc3Rh
bmNlcyBpbiA8dXNlPiB0cmVlcy4KLSAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDogdGFyZ2V0RWxl
bWVudC0+aW5zdGFuY2VzRm9yRWxlbWVudCgpKSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHNoYWRv
d1RyZWVFbGVtZW50ID0gaW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCk7Ci0gICAgICAgIEFT
U0VSVChzaGFkb3dUcmVlRWxlbWVudCk7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSogdHJhbnNm
b3JtID0gc2hhZG93VHJlZUVsZW1lbnQtPnN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpOwotICAgICAg
ICBpZiAoIXRyYW5zZm9ybSkKKyAgICBmb3IgKGF1dG8qIGluc3RhbmNlIDogdGFyZ2V0RWxlbWVu
dC0+aW5zdGFuY2VzKCkpIHsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtKiB0cmFuc2Zvcm0gPSBp
bnN0YW5jZS0+c3VwcGxlbWVudGFsVHJhbnNmb3JtKCk7CisgICAgICAgIGlmICghdHJhbnNmb3Jt
IHx8ICp0cmFuc2Zvcm0gPT0gKnRhcmdldFN1cHBsZW1lbnRhbFRyYW5zZm9ybSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB0cmFuc2Zvcm0tPnNldE1hdHJpeCh0LT5hKCksIHQtPmIo
KSwgdC0+YygpLCB0LT5kKCksIHQtPmUoKSwgdC0+ZigpKTsKLSAgICAgICAgaWYgKFJlbmRlckVs
ZW1lbnQqIHJlbmRlcmVyID0gc2hhZG93VHJlZUVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAg
ICAgKnRyYW5zZm9ybSA9ICp0YXJnZXRTdXBwbGVtZW50YWxUcmFuc2Zvcm07CisgICAgICAgIGlm
IChSZW5kZXJFbGVtZW50KiByZW5kZXJlciA9IGluc3RhbmNlLT5yZW5kZXJlcigpKSB7CiAgICAg
ICAgICAgICByZW5kZXJlci0+c2V0TmVlZHNUcmFuc2Zvcm1VcGRhdGUoKTsKICAgICAgICAgICAg
IFJlbmRlclNWR1Jlc291cmNlOjptYXJrRm9yTGF5b3V0QW5kUGFyZW50UmVzb3VyY2VJbnZhbGlk
YXRpb24oKnJlbmRlcmVyKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZFR5cGVBbmltYXRvci5jcHAKaW5kZXggZTMwZTMxYTYyODdmMGNjZWMxNzEwMDk0OTlm
M2NiZTJlNmY3ZDc3OS4uNmM0ZWJiNDgwMTk3NDFlM2RiYjUwODgwNDkyYzM4M2E5M2FiZDlhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuY3BwCkBA
IC0yNywxNSArMjcsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR0VsZW1lbnRBbmlt
YXRlZFByb3BlcnRpZXM6OlNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnRpZXMoKQotICAgIDogZWxl
bWVudCgwKQoteyB9Ci0KLVNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnRpZXM6OlNWR0VsZW1lbnRB
bmltYXRlZFByb3BlcnRpZXMoU1ZHRWxlbWVudCogZWxlbWVudCwgVmVjdG9yPFJlZlB0cjxTVkdB
bmltYXRlZFByb3BlcnR5Pj4mIHByb3BlcnRpZXMpCi0gICAgOiBlbGVtZW50KGVsZW1lbnQpCi0g
ICAgLCBwcm9wZXJ0aWVzKHByb3BlcnRpZXMpCi17IH0KLQogU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0
b3I6OlNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5cGUsIFNW
R0FuaW1hdGlvbkVsZW1lbnQqIGFuaW1hdGlvbkVsZW1lbnQsIFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50KQogICAgIDogbV90eXBlKHR5cGUpCiAgICAgLCBtX2FuaW1hdGlvbkVsZW1lbnQoYW5p
bWF0aW9uRWxlbWVudCkKQEAgLTQ0LDcgKzM1LDggQEAgU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6
OlNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yKEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5cGUsIFNWR0EK
IH0KIAogU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6On5TVkdBbmltYXRlZFR5cGVBbmltYXRvcigp
Ci17IH0KK3sKK30KIAogdm9pZCBTVkdBbmltYXRlZFR5cGVBbmltYXRvcjo6Y2FsY3VsYXRlRnJv
bUFuZFRvVmFsdWVzKHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+JiBmcm9tLCBzdGQ6
OnVuaXF1ZV9wdHI8U1ZHQW5pbWF0ZWRUeXBlPiYgdG8sIGNvbnN0IFN0cmluZyYgZnJvbVN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0b1N0cmluZykKIHsKQEAgLTU5LDQxICs1MSwyNyBAQCB2b2lkIFNW
R0FuaW1hdGVkVHlwZUFuaW1hdG9yOjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoc3RkOjp1bmlx
dWVfcHRyPFNWR0FuaW1hdAogICAgIGFkZEFuaW1hdGVkVHlwZXMoZnJvbS5nZXQoKSwgdG8uZ2V0
KCkpOwogfQogCi1TVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QgU1ZHQW5pbWF0ZWRUeXBl
QW5pbWF0b3I6OmZpbmRBbmltYXRlZFByb3BlcnRpZXNGb3JBdHRyaWJ1dGVOYW1lKFNWR0VsZW1l
bnQqIHRhcmdldEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCitT
VkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QgU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3I6OmZp
bmRBbmltYXRlZFByb3BlcnRpZXNGb3JBdHRyaWJ1dGVOYW1lKFNWR0VsZW1lbnQmIHRhcmdldEVs
ZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiB7Ci0gICAgQVNTRVJU
KHRhcmdldEVsZW1lbnQpOworICAgIFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdCByZXN1
bHQ7CiAKLSAgICBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QgcHJvcGVydGllc0J5SW5z
dGFuY2U7CisgICAgaWYgKCFTVkdBbmltYXRlZFR5cGU6OnN1cHBvcnRzQW5pbVZhbChtX3R5cGUp
KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCi0gICAgVmVjdG9yPFJlZlB0cjxTVkdBbmltYXRl
ZFByb3BlcnR5Pj4gdGFyZ2V0UHJvcGVydGllczsKLSAgICB0YXJnZXRFbGVtZW50LT5sb2NhbEF0
dHJpYnV0ZVRvUHJvcGVydHlNYXAoKS5hbmltYXRlZFByb3BlcnRpZXNGb3JBdHRyaWJ1dGUodGFy
Z2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSwgdGFyZ2V0UHJvcGVydGllcyk7CisgICAgYXV0byYg
cHJvcGVydHlNYXAgPSB0YXJnZXRFbGVtZW50LmxvY2FsQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCgp
OworICAgIGF1dG8gdGFyZ2V0UHJvcGVydGllcyA9IHByb3BlcnR5TWFwLnByb3BlcnRpZXModGFy
Z2V0RWxlbWVudCwgYXR0cmlidXRlTmFtZSk7CiAKLSAgICBpZiAoIVNWR0FuaW1hdGVkVHlwZTo6
c3VwcG9ydHNBbmltVmFsKG1fdHlwZSkgfHwgdGFyZ2V0UHJvcGVydGllcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QoKTsKKyAgICBpZiAo
dGFyZ2V0UHJvcGVydGllcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAg
ICBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0aWVzIHByb3BlcnRpZXNQYWlyKHRhcmdldEVsZW1l
bnQsIHRhcmdldFByb3BlcnRpZXMpOwotICAgIHByb3BlcnRpZXNCeUluc3RhbmNlLmFwcGVuZChw
cm9wZXJ0aWVzUGFpcik7CisgICAgcmVzdWx0LmFwcGVuZChTVkdFbGVtZW50QW5pbWF0ZWRQcm9w
ZXJ0aWVzIHsgJnRhcmdldEVsZW1lbnQsIFdURjo6bW92ZSh0YXJnZXRQcm9wZXJ0aWVzKSB9KTsK
IAotICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlcyA9IHRh
cmdldEVsZW1lbnQtPmluc3RhbmNlc0ZvckVsZW1lbnQoKTsKLSAgICBjb25zdCBIYXNoU2V0PFNW
R0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7
Ci0gICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGluc3RhbmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHRWxl
bWVudCogc2hhZG93VHJlZUVsZW1lbnQgPSAoKml0KS0+c2hhZG93VHJlZUVsZW1lbnQoKTsKLSAg
ICAgICAgaWYgKCFzaGFkb3dUcmVlRWxlbWVudCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIFZlY3RvcjxSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4+IGluc3RhbmNlUHJvcGVy
dGllczsKLSAgICAgICAgdGFyZ2V0RWxlbWVudC0+bG9jYWxBdHRyaWJ1dGVUb1Byb3BlcnR5TWFw
KCkuYW5pbWF0ZWRQcm9wZXJ0aWVzRm9yQXR0cmlidXRlKHNoYWRvd1RyZWVFbGVtZW50LCBhdHRy
aWJ1dGVOYW1lLCBpbnN0YW5jZVByb3BlcnRpZXMpOwotCi0gICAgICAgIFNWR0VsZW1lbnRBbmlt
YXRlZFByb3BlcnRpZXMgaW5zdGFuY2VQcm9wZXJ0aWVzUGFpcihzaGFkb3dUcmVlRWxlbWVudCwg
aW5zdGFuY2VQcm9wZXJ0aWVzKTsKLSAgICAgICAgcHJvcGVydGllc0J5SW5zdGFuY2UuYXBwZW5k
KGluc3RhbmNlUHJvcGVydGllc1BhaXIpOwotICAgIH0KKyAgICBmb3IgKFNWR0VsZW1lbnQqIGlu
c3RhbmNlIDogdGFyZ2V0RWxlbWVudC5pbnN0YW5jZXMoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0aWVzIHsgaW5zdGFuY2UsIHByb3BlcnR5TWFwLnBy
b3BlcnRpZXMoKmluc3RhbmNlLCBhdHRyaWJ1dGVOYW1lKSB9KTsKIAogI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Q6OmNvbnN0X2l0ZXJhdG9y
IHByb3BlcnRpZXNFbmQgPSBwcm9wZXJ0aWVzQnlJbnN0YW5jZS5lbmQoKTsKLSAgICBmb3IgKFNW
R0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9wZXJ0
aWVzQnlJbnN0YW5jZS5iZWdpbigpOyBpdCAhPSBwcm9wZXJ0aWVzRW5kOyArK2l0KSB7Ci0gICAg
ICAgIHNpemVfdCBwcm9wZXJ0aWVzU2l6ZSA9IGl0LT5wcm9wZXJ0aWVzLnNpemUoKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzU2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4gcHJvcGVydHkgPSBpdC0+cHJvcGVydGll
c1tpXTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGVkUHJvcGVydGllcyA6IHJlc3VsdCkgeworICAg
ICAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogYW5pbWF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMp
IHsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKSAhPSBt
X3R5cGUpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV90eXBlID09IEFuaW1hdGVkQW5nbGUp
OwogICAgICAgICAgICAgICAgIEFTU0VSVChwcm9wZXJ0eS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUo
KSA9PSBBbmltYXRlZEVudW1lcmF0aW9uKTsKQEAgLTEwMiw3ICs4MCw3IEBAIFNWR0VsZW1lbnRB
bmltYXRlZFByb3BlcnR5TGlzdCBTVkdBbmltYXRlZFR5cGVBbmltYXRvcjo6ZmluZEFuaW1hdGVk
UHJvcGVydGllc0ZvCiAgICAgfQogI2VuZGlmCiAKLSAgICByZXR1cm4gcHJvcGVydGllc0J5SW5z
dGFuY2U7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaAppbmRleCA2YWQ3
NDZiZmJhOGFkMWY3NzYzNGIxZTA1NWUyNGJjN2MxNTcwNTBmLi5jOTMzNmY4NDU1ZjcyYWQyZWM4
YmFlNzYyYWMxYWEyMDQyNTE5ZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRUeXBlQW5pbWF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
ZWRUeXBlQW5pbWF0b3IuaApAQCAtMjksMTAgKzI5LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RydWN0IFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnRpZXMgewotICAgIFNWR0VsZW1lbnRB
bmltYXRlZFByb3BlcnRpZXMoKTsKLQotICAgIFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnRpZXMo
U1ZHRWxlbWVudCosIFZlY3RvcjxSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9wZXJ0eT4+Jik7Ci0KICAg
ICBTVkdFbGVtZW50KiBlbGVtZW50OwogICAgIFZlY3RvcjxSZWZQdHI8U1ZHQW5pbWF0ZWRQcm9w
ZXJ0eT4+IHByb3BlcnRpZXM7CiB9OwpAQCAtNjIsNyArNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRDb250ZXh0RWxlbWVudChTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkgeyBtX2NvbnRl
eHRFbGVtZW50ID0gY29udGV4dEVsZW1lbnQ7IH0KICAgICBBbmltYXRlZFByb3BlcnR5VHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKLSAgICBTVkdFbGVtZW50QW5pbWF0ZWRQ
cm9wZXJ0eUxpc3QgZmluZEFuaW1hdGVkUHJvcGVydGllc0ZvckF0dHJpYnV0ZU5hbWUoU1ZHRWxl
bWVudCosIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKKyAgICBTVkdFbGVtZW50QW5pbWF0ZWRQcm9w
ZXJ0eUxpc3QgZmluZEFuaW1hdGVkUHJvcGVydGllc0ZvckF0dHJpYnV0ZU5hbWUoU1ZHRWxlbWVu
dCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKIAogcHJvdGVjdGVkOgogICAgIFNWR0FuaW1hdGVk
VHlwZUFuaW1hdG9yKEFuaW1hdGVkUHJvcGVydHlUeXBlLCBTVkdBbmltYXRpb25FbGVtZW50Kiwg
U1ZHRWxlbWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlv
bkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3Bw
CmluZGV4IDAwYmMwYjkxOTZiZDgzN2Q0MzcyODhiODE0MWYxYWZhMTA3YWVkZmMuLjJjN2Y1MWY3
ODAwMDAyYjIyNTQ5MDMzZjc1ZDc5NjhjOWYwN2M1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKQEAgLTUwOCwxMiArNTA4LDkgQEAgdm9pZCBTVkdBbmlt
YXRpb25FbGVtZW50OjpjdXJyZW50VmFsdWVzRm9yVmFsdWVzQW5pbWF0aW9uKGZsb2F0IHBlcmNl
bnQsIGZsb2F0JgogCiAgICAgQ2FsY01vZGUgY2FsY01vZGUgPSB0aGlzLT5jYWxjTW9kZSgpOwog
ICAgIGlmIChpczxTVkdBbmltYXRlRWxlbWVudD4oKnRoaXMpIHx8IGlzPFNWR0FuaW1hdGVDb2xv
ckVsZW1lbnQ+KCp0aGlzKSkgewotICAgICAgICBBbmltYXRlZFByb3BlcnR5VHlwZSBhdHRyaWJ1
dGVUeXBlID0gZG93bmNhc3Q8U1ZHQW5pbWF0ZUVsZW1lbnRCYXNlPigqdGhpcykuZGV0ZXJtaW5l
QW5pbWF0ZWRQcm9wZXJ0eVR5cGUodGFyZ2V0RWxlbWVudCgpKTsKLSAgICAgICAgLy8gRmFsbCBi
YWNrIHRvIGRpc2NyZXRlIGFuaW1hdGlvbnMgZm9yIFN0cmluZ3MuCi0gICAgICAgIGlmIChhdHRy
aWJ1dGVUeXBlID09IEFuaW1hdGVkQm9vbGVhbgotICAgICAgICAgICAgfHwgYXR0cmlidXRlVHlw
ZSA9PSBBbmltYXRlZEVudW1lcmF0aW9uCi0gICAgICAgICAgICB8fCBhdHRyaWJ1dGVUeXBlID09
IEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbwotICAgICAgICAgICAgfHwgYXR0cmlidXRlVHlw
ZSA9PSBBbmltYXRlZFN0cmluZykKKyAgICAgICAgQVNTRVJUKHRhcmdldEVsZW1lbnQoKSk7Cisg
ICAgICAgIEFuaW1hdGVkUHJvcGVydHlUeXBlIHR5cGUgPSBkb3duY2FzdDxTVkdBbmltYXRlRWxl
bWVudEJhc2U+KCp0aGlzKS5kZXRlcm1pbmVBbmltYXRlZFByb3BlcnR5VHlwZSgqdGFyZ2V0RWxl
bWVudCgpKTsKKyAgICAgICAgaWYgKHR5cGUgPT0gQW5pbWF0ZWRCb29sZWFuIHx8IHR5cGUgPT0g
QW5pbWF0ZWRFbnVtZXJhdGlvbiB8fCB0eXBlID09IEFuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
byB8fCB0eXBlID09IEFuaW1hdGVkU3RyaW5nKQogICAgICAgICAgICAgY2FsY01vZGUgPSBDYWxj
TW9kZURpc2NyZXRlOwogICAgIH0KICAgICBpZiAoIW1fa2V5UG9pbnRzLmlzRW1wdHkoKSAmJiBj
YWxjTW9kZSAhPSBDYWxjTW9kZVBhY2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCmluZGV4
IGQ4MzkwNWU3YTU5ZjI3Y2JiNjQ4MTM0MmFlMTY5M2I3ZDkwNDlkY2MuLmEzMjU2Y2Y1YmRhZWE4
ZjBiNTMwZjRhZjc1YzAxZjRiZDgwMWQ3ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAK
QEAgLTI4MSwxMSArMjgxLDE0IEBAIFNWR0VsZW1lbnQ6OlNWR0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogU1ZHRWxlbWVudDo6flNWR0Vs
ZW1lbnQoKQogewogICAgIGlmIChtX3N2Z1JhcmVEYXRhKSB7Ci0gICAgICAgIG1fc3ZnUmFyZURh
dGEtPmRlc3Ryb3lBbmltYXRlZFNNSUxTdHlsZVByb3BlcnRpZXMoKTsKKyAgICAgICAgZm9yIChT
VkdFbGVtZW50KiBpbnN0YW5jZSA6IG1fc3ZnUmFyZURhdGEtPmluc3RhbmNlcygpKQorICAgICAg
ICAgICAgaW5zdGFuY2UtPm1fc3ZnUmFyZURhdGEtPnNldENvcnJlc3BvbmRpbmdFbGVtZW50KG51
bGxwdHIpOwogICAgICAgICBpZiAoU1ZHQ3Vyc29yRWxlbWVudCogY3Vyc29yRWxlbWVudCA9IG1f
c3ZnUmFyZURhdGEtPmN1cnNvckVsZW1lbnQoKSkKICAgICAgICAgICAgIGN1cnNvckVsZW1lbnQt
PnJlbW92ZUNsaWVudCh0aGlzKTsKICAgICAgICAgaWYgKENTU0N1cnNvckltYWdlVmFsdWUqIGN1
cnNvckltYWdlVmFsdWUgPSBtX3N2Z1JhcmVEYXRhLT5jdXJzb3JJbWFnZVZhbHVlKCkpCiAgICAg
ICAgICAgICBjdXJzb3JJbWFnZVZhbHVlLT5yZW1vdmVSZWZlcmVuY2VkRWxlbWVudCh0aGlzKTsK
KyAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGNvcnJlc3BvbmRpbmdFbGVtZW50ID0gbV9zdmdSYXJl
RGF0YS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvcnJlc3BvbmRpbmdF
bGVtZW50LT5tX3N2Z1JhcmVEYXRhLT5pbnN0YW5jZXMoKS5yZW1vdmUodGhpcyk7CiAKICAgICAg
ICAgbV9zdmdSYXJlRGF0YSA9IG51bGxwdHI7CiAgICAgfQpAQCAtNDIwLDM0ICs0MjMsMTMgQEAg
U1ZHRWxlbWVudCogU1ZHRWxlbWVudDo6dmlld3BvcnRFbGVtZW50KCkgY29uc3QKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KICAKLXZvaWQgU1ZHRWxlbWVudDo6bWFwSW5zdGFuY2VUb0VsZW1lbnQo
U1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSkKLXsKLSAgICBBU1NFUlQoaW5zdGFuY2UpOwot
Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2VzID0gZW5zdXJlU1ZH
UmFyZURhdGEoKS5lbGVtZW50SW5zdGFuY2VzKCk7Ci0gICAgQVNTRVJUKCFpbnN0YW5jZXMuY29u
dGFpbnMoaW5zdGFuY2UpKTsKLQotICAgIGluc3RhbmNlcy5hZGQoaW5zdGFuY2UpOwotfQotIAot
dm9pZCBTVkdFbGVtZW50OjpyZW1vdmVJbnN0YW5jZU1hcHBpbmcoU1ZHRWxlbWVudEluc3RhbmNl
KiBpbnN0YW5jZSkKLXsKLSAgICBBU1NFUlQoaW5zdGFuY2UpOwotICAgIEFTU0VSVChtX3N2Z1Jh
cmVEYXRhKTsKLQotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlcyA9
IG1fc3ZnUmFyZURhdGEtPmVsZW1lbnRJbnN0YW5jZXMoKTsKLSAgICBBU1NFUlQoaW5zdGFuY2Vz
LmNvbnRhaW5zKGluc3RhbmNlKSk7Ci0KLSAgICBpbnN0YW5jZXMucmVtb3ZlKGluc3RhbmNlKTsK
LX0KLQotY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgU1ZHRWxlbWVudDo6aW5z
dGFuY2VzRm9yRWxlbWVudCgpIGNvbnN0Citjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnQqPiYgU1ZH
RWxlbWVudDo6aW5zdGFuY2VzKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc3ZnUmFyZURhdGEpIHsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNl
Kj4+IGVtcHR5SW5zdGFuY2VzOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaFNl
dDxTVkdFbGVtZW50Kj4+IGVtcHR5SW5zdGFuY2VzOwogICAgICAgICByZXR1cm4gZW1wdHlJbnN0
YW5jZXM7CiAgICAgfQotICAgIHJldHVybiBtX3N2Z1JhcmVEYXRhLT5lbGVtZW50SW5zdGFuY2Vz
KCk7CisgICAgcmV0dXJuIG1fc3ZnUmFyZURhdGEtPmluc3RhbmNlcygpOwogfQogCiBib29sIFNW
R0VsZW1lbnQ6OmdldEJvdW5kaW5nQm94KEZsb2F0UmVjdCYgcmVjdCwgU1ZHTG9jYXRhYmxlOjpT
dHlsZVVwZGF0ZVN0cmF0ZWd5IHN0eWxlVXBkYXRlU3RyYXRlZ3kpCkBAIC00OTUsMTMgKzQ3Nywz
MiBAQCB2b2lkIFNWR0VsZW1lbnQ6OmN1cnNvckltYWdlVmFsdWVSZW1vdmVkKCkKIAogU1ZHRWxl
bWVudCogU1ZHRWxlbWVudDo6Y29ycmVzcG9uZGluZ0VsZW1lbnQoKQogewotICAgIEFTU0VSVCgh
bV9zdmdSYXJlRGF0YSB8fCAhbV9zdmdSYXJlRGF0YS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSB8
fCBjb250YWluaW5nU2hhZG93Um9vdCgpKTsKLSAgICByZXR1cm4gbV9zdmdSYXJlRGF0YSA/IG1f
c3ZnUmFyZURhdGEtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgOiAwOworICAgIEFTU0VSVCghbV9z
dmdSYXJlRGF0YSB8fCAhbV9zdmdSYXJlRGF0YS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSB8fCBj
b3JyZXNwb25kaW5nVXNlRWxlbWVudCgpKTsKKyAgICByZXR1cm4gbV9zdmdSYXJlRGF0YSA/IG1f
c3ZnUmFyZURhdGEtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkgOiBudWxscHRyOworfQorCitTVkdV
c2VFbGVtZW50KiBTVkdFbGVtZW50Ojpjb3JyZXNwb25kaW5nVXNlRWxlbWVudCgpIGNvbnN0Cit7
CisgICAgYXV0byogcm9vdCA9IGNvbnRhaW5pbmdTaGFkb3dSb290KCk7CisgICAgaWYgKCFyb290
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocm9vdC0+dHlwZSgpICE9IFNoYWRv
d1Jvb3Q6OlVzZXJBZ2VudFNoYWRvd1Jvb3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGF1dG8qIGhvc3QgPSByb290LT5ob3N0RWxlbWVudCgpOworICAgIGlmICghaXM8U1ZHVXNlRWxl
bWVudD4oaG9zdCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAmZG93bmNh
c3Q8U1ZHVXNlRWxlbWVudD4oKmhvc3QpOwogfQogCiB2b2lkIFNWR0VsZW1lbnQ6OnNldENvcnJl
c3BvbmRpbmdFbGVtZW50KFNWR0VsZW1lbnQqIGNvcnJlc3BvbmRpbmdFbGVtZW50KQogeworICAg
IGlmIChtX3N2Z1JhcmVEYXRhKSB7CisgICAgICAgIGlmIChTVkdFbGVtZW50KiBvbGRDb3JyZXNw
b25kaW5nRWxlbWVudCA9IG1fc3ZnUmFyZURhdGEtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkpCisg
ICAgICAgICAgICBvbGRDb3JyZXNwb25kaW5nRWxlbWVudC0+bV9zdmdSYXJlRGF0YS0+aW5zdGFu
Y2VzKCkucmVtb3ZlKHRoaXMpOworICAgIH0KICAgICBlbnN1cmVTVkdSYXJlRGF0YSgpLnNldENv
cnJlc3BvbmRpbmdFbGVtZW50KGNvcnJlc3BvbmRpbmdFbGVtZW50KTsKKyAgICBpZiAoY29ycmVz
cG9uZGluZ0VsZW1lbnQpCisgICAgICAgIGNvcnJlc3BvbmRpbmdFbGVtZW50LT5lbnN1cmVTVkdS
YXJlRGF0YSgpLmluc3RhbmNlcygpLmFkZCh0aGlzKTsKIH0KIAogdm9pZCBTVkdFbGVtZW50Ojpw
YXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlKQpAQCAtNTMzLDIzICs1MzQsMzEgQEAgdm9pZCBTVkdFbGVtZW50OjpwYXJzZUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHYK
ICAgICB9CiB9CiAKLXZvaWQgU1ZHRWxlbWVudDo6YW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3JBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgVmVjdG9yPEFuaW1hdGVk
UHJvcGVydHlUeXBlPiYgcHJvcGVydHlUeXBlcykKK1ZlY3RvcjxBbmltYXRlZFByb3BlcnR5VHlw
ZT4gU1ZHRWxlbWVudDo6YW5pbWF0ZWRQcm9wZXJ0eVR5cGVzRm9yQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpCiB7Ci0gICAgbG9jYWxBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwKCkuYW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3JBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwg
cHJvcGVydHlUeXBlcyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVR5cGVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgIGF1dG8gdHlwZXMgPSBsb2NhbEF0dHJpYnV0ZVRvUHJvcGVydHlNYXAo
KS50eXBlcyhhdHRyaWJ1dGVOYW1lKTsKKyAgICBpZiAoIXR5cGVzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHR5cGVzOwogCi0gICAgYXV0byYgbWFwID0gYXR0cmlidXRlTmFtZVRvQW5pbWF0
ZWRQcm9wZXJ0eVR5cGVNYXAoKTsKLSAgICBhdXRvIGl0ID0gbWFwLmZpbmQoYXR0cmlidXRlTmFt
ZS5pbXBsKCkpOwotICAgIGlmIChpdCAhPSBtYXAuZW5kKCkpIHsKLSAgICAgICAgcHJvcGVydHlU
eXBlcy5hcHBlbmQoaXQtPnZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAg
YXV0byYgbWFwID0gYXR0cmlidXRlTmFtZVRvQW5pbWF0ZWRQcm9wZXJ0eVR5cGVNYXAoKTsKKyAg
ICAgICAgYXV0byBpdCA9IG1hcC5maW5kKGF0dHJpYnV0ZU5hbWUuaW1wbCgpKTsKKyAgICAgICAg
aWYgKGl0ICE9IG1hcC5lbmQoKSkgeworICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGl0LT52YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gdHlwZXM7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBh
dXRvJiBjc3NQcm9wZXJ0eVdpdGhTVkdET01NYXAgPSBjc3NQcm9wZXJ0eVdpdGhTVkdET01OYW1l
VG9BbmltYXRlZFByb3BlcnR5VHlwZU1hcCgpOwotICAgIGF1dG8gc3ZnUHJvcGVydHlJdGVyYXRv
ciA9IGNzc1Byb3BlcnR5V2l0aFNWR0RPTU1hcC5maW5kKGF0dHJpYnV0ZU5hbWUuaW1wbCgpKTsK
LSAgICBpZiAoc3ZnUHJvcGVydHlJdGVyYXRvciAhPSBjc3NQcm9wZXJ0eVdpdGhTVkdET01NYXAu
ZW5kKCkpCi0gICAgICAgIHByb3BlcnR5VHlwZXMuYXBwZW5kKHN2Z1Byb3BlcnR5SXRlcmF0b3It
PnZhbHVlKTsKKyAgICB7CisgICAgICAgIGF1dG8mIG1hcCA9IGNzc1Byb3BlcnR5V2l0aFNWR0RP
TU5hbWVUb0FuaW1hdGVkUHJvcGVydHlUeXBlTWFwKCk7CisgICAgICAgIGF1dG8gaXQgPSBtYXAu
ZmluZChhdHRyaWJ1dGVOYW1lLmltcGwoKSk7CisgICAgICAgIGlmIChpdCAhPSBtYXAuZW5kKCkp
IHsKKyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChpdC0+dmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIHR5cGVzOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVzOwogfQogCiBi
b29sIFNWR0VsZW1lbnQ6OmhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpCkBAIC01NzQsMTEg
KzU4Myw5IEBAIGJvb2wgU1ZHRWxlbWVudDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNT
dHJpbmcmIGV2ZW50VHlwZSwgUGFzc1JlZlB0cjxFdmVuCiAKICAgICAvLyBBZGQgZXZlbnQgbGlz
dGVuZXIgdG8gYWxsIHNoYWRvdyB0cmVlIERPTSBlbGVtZW50IGluc3RhbmNlcwogICAgIEFTU0VS
VCghaW5zdGFuY2VVcGRhdGVzQmxvY2tlZCgpKTsKLSAgICBmb3IgKGF1dG8mIGluc3RhbmNlIDog
aW5zdGFuY2VzRm9yRWxlbWVudCgpKSB7Ci0gICAgICAgIEFTU0VSVChpbnN0YW5jZS0+c2hhZG93
VHJlZUVsZW1lbnQoKSk7CisgICAgZm9yIChhdXRvKiBpbnN0YW5jZSA6IGluc3RhbmNlcygpKSB7
CiAgICAgICAgIEFTU0VSVChpbnN0YW5jZS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSB0aGlz
KTsKLQotICAgICAgICBib29sIHJlc3VsdCA9IGluc3RhbmNlLT5zaGFkb3dUcmVlRWxlbWVudCgp
LT5Ob2RlOjphZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUp
OworICAgICAgICBib29sIHJlc3VsdCA9IGluc3RhbmNlLT5Ob2RlOjphZGRFdmVudExpc3RlbmVy
KGV2ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpOwogICAgICAgICBBU1NFUlRfVU5VU0VE
KHJlc3VsdCwgcmVzdWx0KTsKICAgICB9CiAKQEAgLTYwMywxMyArNjEwLDEwIEBAIGJvb2wgU1ZH
RWxlbWVudDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgRXZlbnRMaXN0ZW5lCiAKICAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVuZXIgZnJvbSBhbGwg
c2hhZG93IHRyZWUgRE9NIGVsZW1lbnQgaW5zdGFuY2VzCiAgICAgQVNTRVJUKCFpbnN0YW5jZVVw
ZGF0ZXNCbG9ja2VkKCkpOwotICAgIGZvciAoYXV0byYgaW5zdGFuY2UgOiBpbnN0YW5jZXNGb3JF
bGVtZW50KCkpIHsKKyAgICBmb3IgKGF1dG8mIGluc3RhbmNlIDogaW5zdGFuY2VzKCkpIHsKICAg
ICAgICAgQVNTRVJUKGluc3RhbmNlLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpID09IHRoaXMpOwog
Ci0gICAgICAgIFNWR0VsZW1lbnQqIHNoYWRvd1RyZWVFbGVtZW50ID0gaW5zdGFuY2UtPnNoYWRv
d1RyZWVFbGVtZW50KCk7Ci0gICAgICAgIEFTU0VSVChzaGFkb3dUcmVlRWxlbWVudCk7Ci0KLSAg
ICAgICAgaWYgKHNoYWRvd1RyZWVFbGVtZW50LT5Ob2RlOjpyZW1vdmVFdmVudExpc3RlbmVyKGV2
ZW50VHlwZSwgbGlzdGVuZXIsIHVzZUNhcHR1cmUpKQorICAgICAgICBpZiAoaW5zdGFuY2UtPk5v
ZGU6OnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdXNlQ2FwdHVyZSkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBUaGlzIGNhc2UgY2FuIG9ubHkg
YmUgaGl0IGZvciBldmVudCBsaXN0ZW5lcnMgY3JlYXRlZCBmcm9tIG1hcmt1cApAQCAtNjIwLDEx
ICs2MjQsOSBAQCBib29sIFNWR0VsZW1lbnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZQogICAgICAgICAvLyBoYXMgYmVlbiBj
cmVhdGVkIChyZWFkOiBpdCdzIG5vdCAwIGFueW1vcmUpLiBEdXJpbmcgc2hhZG93IHRyZWUgY3Jl
YXRpb24sIHRoZSBldmVudAogICAgICAgICAvLyBsaXN0ZW5lciBET00gYXR0cmlidXRlIGhhcyBi
ZWVuIGNsb25lZCwgYW5kIGFub3RoZXIgZXZlbnQgbGlzdGVuZXIgaGFzIGJlZW4gc2V0dXAgaW4K
ICAgICAgICAgLy8gdGhlIHNoYWRvdyB0cmVlLiBJZiB0aGF0IGV2ZW50IGxpc3RlbmVyIGhhcyBu
b3QgYmVlbiB1c2VkIHlldCwgbV9qc0Z1bmN0aW9uIGlzIHN0aWxsIDAsCi0gICAgICAgIC8vIGFu
ZCB0cnlSZW1vdmVFdmVudExpc3RlbmVyKCkgYWJvdmUgd2lsbCBmYWlsLiBXb3JrIGFyb3VuZCB0
aGF0IHZlcnkgc2VsZG9tIHByb2JsZW0uCi0gICAgICAgIEV2ZW50VGFyZ2V0RGF0YSogZGF0YSA9
IHNoYWRvd1RyZWVFbGVtZW50LT5ldmVudFRhcmdldERhdGEoKTsKLSAgICAgICAgQVNTRVJUKGRh
dGEpOwotCi0gICAgICAgIGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAucmVtb3ZlRmlyc3RFdmVudExp
c3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoZXZlbnRUeXBlKTsKKyAgICAgICAgLy8gYW5kIHRyeVJl
bW92ZUV2ZW50TGlzdGVuZXIoKSBhYm92ZSB3aWxsIGZhaWwuIFdvcmsgYXJvdW5kIHRoYXQgdmVy
eSByYXJlIHByb2JsZW0uCisgICAgICAgIEFTU0VSVChpbnN0YW5jZS0+ZXZlbnRUYXJnZXREYXRh
KCkpOworICAgICAgICBpbnN0YW5jZS0+ZXZlbnRUYXJnZXREYXRhKCktPmV2ZW50TGlzdGVuZXJN
YXAucmVtb3ZlRmlyc3RFdmVudExpc3RlbmVyQ3JlYXRlZEZyb21NYXJrdXAoZXZlbnRUeXBlKTsK
ICAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTc1NCw3ICs3NTYsNyBAQCB2b2lkIFNWR0Vs
ZW1lbnQ6OnN5bmNocm9uaXplQWxsQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoU1ZHRWxlbWVudCogc3Zn
RWxlbWVudCkKICAgICBBU1NFUlQoc3ZnRWxlbWVudC0+ZWxlbWVudERhdGEoKSk7CiAgICAgQVNT
RVJUKHN2Z0VsZW1lbnQtPmVsZW1lbnREYXRhKCktPmFuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURp
cnR5KCkpOwogCi0gICAgc3ZnRWxlbWVudC0+bG9jYWxBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwKCku
c3luY2hyb25pemVQcm9wZXJ0aWVzKHN2Z0VsZW1lbnQpOworICAgIHN2Z0VsZW1lbnQtPmxvY2Fs
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCgpLnN5bmNocm9uaXplUHJvcGVydGllcygqc3ZnRWxlbWVu
dCk7CiAgICAgc3ZnRWxlbWVudC0+ZWxlbWVudERhdGEoKS0+c2V0QW5pbWF0ZWRTVkdBdHRyaWJ1
dGVzQXJlRGlydHkoZmFsc2UpOwogfQogCkBAIC03NjcsNyArNzY5LDcgQEAgdm9pZCBTVkdFbGVt
ZW50OjpzeW5jaHJvbml6ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnMKICAgICBpZiAobmFtZSA9PSBhbnlRTmFtZSgpKQogICAgICAgICBzeW5jaHJv
bml6ZUFsbEFuaW1hdGVkU1ZHQXR0cmlidXRlKG5vbkNvbnN0VGhpcyk7CiAgICAgZWxzZQotICAg
ICAgICBub25Db25zdFRoaXMtPmxvY2FsQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCgpLnN5bmNocm9u
aXplUHJvcGVydHkobm9uQ29uc3RUaGlzLCBuYW1lKTsKKyAgICAgICAgbm9uQ29uc3RUaGlzLT5s
b2NhbEF0dHJpYnV0ZVRvUHJvcGVydHlNYXAoKS5zeW5jaHJvbml6ZVByb3BlcnR5KCpub25Db25z
dFRoaXMsIG5hbWUpOwogfQogCiB2b2lkIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUmVxdWlyZWRG
ZWF0dXJlcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKQEAgLTEwMTYsOSArMTAxOCw3IEBA
IGJvb2wgU1ZHRWxlbWVudDo6aXNBbmltYXRhYmxlQ1NTUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlTmFtZSkKIAogYm9vbCBTVkdFbGVtZW50Ojppc1ByZXNlbnRhdGlvbkF0
dHJpYnV0ZVdpdGhTVkdET00oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSkKIHsK
LSAgICBWZWN0b3I8QW5pbWF0ZWRQcm9wZXJ0eVR5cGU+IHByb3BlcnR5VHlwZXM7Ci0gICAgbG9j
YWxBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwKCkuYW5pbWF0ZWRQcm9wZXJ0eVR5cGVGb3JBdHRyaWJ1
dGUoYXR0cmlidXRlTmFtZSwgcHJvcGVydHlUeXBlcyk7Ci0gICAgcmV0dXJuICFwcm9wZXJ0eVR5
cGVzLmlzRW1wdHkoKTsKKyAgICByZXR1cm4gIWxvY2FsQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCgp
LnR5cGVzKGF0dHJpYnV0ZU5hbWUpLmlzRW1wdHkoKTsKIH0KIAogYm9vbCBTVkdFbGVtZW50Ojpp
c1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50LmgKaW5kZXggM2IyNDQzYTFmMzM3MjNiODQyMzRmOTg3M2U5Yjli
ODhjZmMxYmM3MS4uNWM4NWNhN2JkMGU1OGU5YTYxNzViY2IzZjMxMWJmNmEyMGNkOTkxOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRWxlbWVudC5oCkBAIC00OSw2ICs0OSw3IEBAIGNsYXNzIFNWR0RvY3VtZW50
RXh0ZW5zaW9uczsKIGNsYXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKIGNsYXNzIFNWR0VsZW1lbnRS
YXJlRGF0YTsKIGNsYXNzIFNWR1NWR0VsZW1lbnQ7CitjbGFzcyBTVkdVc2VFbGVtZW50OwogCiB2
b2lkIG1hcEF0dHJpYnV0ZVRvQ1NTUHJvcGVydHkoSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwg
Q1NTUHJvcGVydHlJRD4qIHByb3BlcnR5TmFtZVRvSWRNYXAsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKTsKIApAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgc3ZnQXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKLSAgICB2b2lk
IGFuaW1hdGVkUHJvcGVydHlUeXBlRm9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBW
ZWN0b3I8QW5pbWF0ZWRQcm9wZXJ0eVR5cGU+Jik7CisgICAgVmVjdG9yPEFuaW1hdGVkUHJvcGVy
dHlUeXBlPiBhbmltYXRlZFByb3BlcnR5VHlwZXNGb3JBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYpOwogCiAgICAgdm9pZCBzZW5kU1ZHTG9hZEV2ZW50SWZQb3NzaWJsZShib29sIHNlbmRQ
YXJlbnRMb2FkRXZlbnRzID0gZmFsc2UpOwogICAgIHZvaWQgc2VuZFNWR0xvYWRFdmVudElmUG9z
c2libGVBc3luY2hyb25vdXNseSgpOwpAQCAtMTAyLDcgKzEwMyw4IEBAIHB1YmxpYzoKICAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CiAgICAgfQogCi0gICAg
Y29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2VzRm9yRWxlbWVudCgp
IGNvbnN0OworICAgIC8vIFRoZSBpbnN0YW5jZXMgb2YgYW4gZWxlbWVudCBhcmUgY2xvbmVzIG1h
ZGUgaW4gc2hhZG93IHRyZWVzIHRvIGltcGxlbWVudCA8dXNlPi4KKyAgICBjb25zdCBIYXNoU2V0
PFNWR0VsZW1lbnQqPiYgaW5zdGFuY2VzKCkgY29uc3Q7CiAKICAgICBib29sIGdldEJvdW5kaW5n
Qm94KEZsb2F0UmVjdCYsIFNWR0xvY2F0YWJsZTo6U3R5bGVVcGRhdGVTdHJhdGVneSA9IFNWR0xv
Y2F0YWJsZTo6QWxsb3dTdHlsZVVwZGF0ZSk7CiAKQEAgLTExMiw2ICsxMTQsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjdXJzb3JJbWFnZVZhbHVlUmVtb3ZlZCgpOwogCiAgICAgU1ZHRWxlbWVudCog
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKKyAgICBTVkdVc2VFbGVtZW50KiBjb3JyZXNwb25kaW5n
VXNlRWxlbWVudCgpIGNvbnN0OworCiAgICAgdm9pZCBzZXRDb3JyZXNwb25kaW5nRWxlbWVudChT
VkdFbGVtZW50Kik7CiAKICAgICB2b2lkIHN5bmNocm9uaXplQW5pbWF0ZWRTVkdBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwpAQCAtMTg5LDkgKzE5Myw2IEBAIHByaXZhdGU6
CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJUYXJnZXQoKSB7IH0KIAotICAgIHZvaWQgbWFwSW5z
dGFuY2VUb0VsZW1lbnQoU1ZHRWxlbWVudEluc3RhbmNlKik7Ci0gICAgdm9pZCByZW1vdmVJbnN0
YW5jZU1hcHBpbmcoU1ZHRWxlbWVudEluc3RhbmNlKik7Ci0KICAgICB2b2lkIGJ1aWxkUGVuZGlu
Z1Jlc291cmNlc0lmTmVlZGVkKCk7CiAgICAgdmlydHVhbCB2b2lkIGFjY2Vzc0tleUFjdGlvbihi
b29sIHNlbmRNb3VzZUV2ZW50cykgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50SW5zdGFuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnRJbnN0YW5jZS5jcHAKaW5kZXggNWEzYThlNDExNDRmYWIyODYzYzdjZjk0NDE1MTBkNGZl
MGZlYWNlZS4uYWJkZjU4ZmFmOGI0YWVlMDRiYjU3MWVkY2IzZWM0MzU0ODljNDlmYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRJbnN0YW5jZS5jcHAKQEAgLTEwMSw5ICsxMDEsNiBA
QCBTVkdFbGVtZW50SW5zdGFuY2U6OlNWR0VsZW1lbnRJbnN0YW5jZShTVkdVc2VFbGVtZW50KiBj
b3JyZXNwb25kaW5nVXNlRWxlbWVudCwgUwogICAgIEFTU0VSVChtX2NvcnJlc3BvbmRpbmdVc2VF
bGVtZW50KTsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKIAotICAgIC8vIFJlZ2lzdGVyIGFzIGlu
c3RhbmNlIGZvciBwYXNzZWQgZWxlbWVudC4KLSAgICBtX2VsZW1lbnQtPm1hcEluc3RhbmNlVG9F
bGVtZW50KHRoaXMpOwotCiAjaWZuZGVmIE5ERUJVRwogICAgIGluc3RhbmNlQ291bnRlci5pbmNy
ZW1lbnQoKTsKICNlbmRpZgpAQCAtMTQ0LDkgKzE0MSw2IEBAIHZvaWQgU1ZHRWxlbWVudEluc3Rh
bmNlOjpkZXRhY2goKQogICAgIGZvciAoU1ZHRWxlbWVudEluc3RhbmNlKiBub2RlID0gZmlyc3RD
aGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgbm9kZS0+
ZGV0YWNoKCk7CiAKLSAgICAvLyBEZXJlZ2lzdGVyIGFzIGluc3RhbmNlIGZvciBwYXNzZWQgZWxl
bWVudCwgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgotICAgIGlmIChtX2VsZW1lbnQtPmluc3RhbmNl
c0ZvckVsZW1lbnQoKS5jb250YWlucyh0aGlzKSkKLSAgICAgICAgbV9lbGVtZW50LT5yZW1vdmVJ
bnN0YW5jZU1hcHBpbmcodGhpcyk7CiAgICAgLy8gRE8gTk9UIGNsZWFyIHJlZiB0byBtX2VsZW1l
bnQgYmVjYXVzZSBKYXZhU2NyaXB0Q29yZSB1c2VzIGl0IGZvciBnYXJiYWdlIGNvbGxlY3Rpb24K
IAogICAgIG1fc2hhZG93VHJlZUVsZW1lbnQgPSAwOwpAQCAtMTgxLDI0ICsxNzUsMTkgQEAgdm9p
ZCBTVkdFbGVtZW50SW5zdGFuY2U6OmludmFsaWRhdGVBbGxJbnN0YW5jZXNPZkVsZW1lbnQoU1ZH
RWxlbWVudCogZWxlbWVudCkKICAgICBpZiAoZWxlbWVudC0+aW5zdGFuY2VVcGRhdGVzQmxvY2tl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0
YW5jZSo+JiBzZXQgPSBlbGVtZW50LT5pbnN0YW5jZXNGb3JFbGVtZW50KCk7Ci0gICAgaWYgKHNl
dC5pc0VtcHR5KCkpCisgICAgYXV0byYgaW5zdGFuY2VzID0gZWxlbWVudC0+aW5zdGFuY2VzKCk7
CisgICAgaWYgKGluc3RhbmNlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IE1hcmsgYWxsIHVzZSBlbGVtZW50cyByZWZlcmVuY2luZyAnZWxlbWVudCcgZm9yIHJlYnVpbGRp
bmcKLSAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzZXQuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IHNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgQVNTRVJUKCgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgpKTsKLSAgICAgICAgQVNTRVJU
KCgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgpLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKTsKLSAg
ICAgICAgQVNTRVJUKCgqaXQpLT5zaGFkb3dUcmVlRWxlbWVudCgpLT5jb3JyZXNwb25kaW5nRWxl
bWVudCgpID09ICgqaXQpLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpKTsKLSAgICAgICAgQVNTRVJU
KCgqaXQpLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpID09IGVsZW1lbnQpOwotICAgICAgICAoKml0
KS0+c2hhZG93VHJlZUVsZW1lbnQoKS0+c2V0Q29ycmVzcG9uZGluZ0VsZW1lbnQoMCk7Ci0KLSAg
ICAgICAgaWYgKFNWR1VzZUVsZW1lbnQqIGVsZW1lbnQgPSAoKml0KS0+Y29ycmVzcG9uZGluZ1Vz
ZUVsZW1lbnQoKSkgeworICAgIGRvIHsKKyAgICAgICAgU1ZHRWxlbWVudCogaW5zdGFuY2UgPSAq
aW5zdGFuY2VzLmJlZ2luKCk7CisgICAgICAgIGlmIChTVkdVc2VFbGVtZW50KiBlbGVtZW50ID0g
aW5zdGFuY2UtPmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50LT5pbkRvY3VtZW50KCkpOwogICAgICAgICAgICAgZWxlbWVudC0+aW52YWxpZGF0
ZVNoYWRvd1RyZWUoKTsKICAgICAgICAgfQotICAgIH0KKyAgICAgICAgaW5zdGFuY2UtPnNldENv
cnJlc3BvbmRpbmdFbGVtZW50KG51bGxwdHIpOworICAgIH0gd2hpbGUgKCFpbnN0YW5jZXMuaXNF
bXB0eSgpKTsKIAogICAgIGVsZW1lbnQtPmRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCmluZGV4IDk4MTQ4MWI5
NzUyN2NlMWQzYmQ0MWEwMDUzNDk4NTNjODI3YzhiNGIuLjE3NzBlZGYyZDgxOTAyM2Y3ZWFjNzQ0
NWM0ZDhiODllMzEyOWJiY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50UmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRh
LmgKQEAgLTMxLDIzICszMSwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NDdXJz
b3JJbWFnZVZhbHVlOwogY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudDsKIGNsYXNzIFNWR0VsZW1lbnQ7
Ci1jbGFzcyBTVkdFbGVtZW50SW5zdGFuY2U7CiAKIGNsYXNzIFNWR0VsZW1lbnRSYXJlRGF0YSB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHRWxlbWVudFJhcmVEYXRhKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgU1ZHRWxlbWVudFJhcmVEYXRhKCkKLSAgICAg
ICAgOiBtX2N1cnNvckVsZW1lbnQoMCkKLSAgICAgICAgLCBtX2N1cnNvckltYWdlVmFsdWUoMCkK
LSAgICAgICAgLCBtX2NvcnJlc3BvbmRpbmdFbGVtZW50KDApCi0gICAgICAgICwgbV9pbnN0YW5j
ZXNVcGRhdGVzQmxvY2tlZChmYWxzZSkKKyAgICAgICAgOiBtX2luc3RhbmNlc1VwZGF0ZXNCbG9j
a2VkKGZhbHNlKQogICAgICAgICAsIG1fdXNlT3ZlcnJpZGVDb21wdXRlZFN0eWxlKGZhbHNlKQog
ICAgICAgICAsIG1fbmVlZHNPdmVycmlkZUNvbXB1dGVkU3R5bGVVcGRhdGUoZmFsc2UpCiAgICAg
ewogICAgIH0KIAotICAgIEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGVsZW1lbnRJbnN0
YW5jZXMoKSB7IHJldHVybiBtX2VsZW1lbnRJbnN0YW5jZXM7IH0KLSAgICBjb25zdCBIYXNoU2V0
PFNWR0VsZW1lbnRJbnN0YW5jZSo+JiBlbGVtZW50SW5zdGFuY2VzKCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50SW5zdGFuY2VzOyB9CisgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4mIGluc3RhbmNl
cygpIHsgcmV0dXJuIG1faW5zdGFuY2VzOyB9CisgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50
Kj4mIGluc3RhbmNlcygpIGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2VzOyB9CiAKICAgICBib29s
IGluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlc1VwZGF0
ZXNCbG9ja2VkOyB9CiAgICAgdm9pZCBzZXRJbnN0YW5jZVVwZGF0ZXNCbG9ja2VkKGJvb2wgdmFs
dWUpIHsgbV9pbnN0YW5jZXNVcGRhdGVzQmxvY2tlZCA9IHZhbHVlOyB9CkBAIC02OSwxMSArNjUs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9hbmltYXRlZFNNSUxTdHlsZVByb3BlcnRp
ZXM7CiAgICAgfQogCi0gICAgdm9pZCBkZXN0cm95QW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVz
KCkKLSAgICB7Ci0gICAgICAgIG1fYW5pbWF0ZWRTTUlMU3R5bGVQcm9wZXJ0aWVzLmNsZWFyKCk7
Ci0gICAgfQotCiAgICAgUmVuZGVyU3R5bGUqIG92ZXJyaWRlQ29tcHV0ZWRTdHlsZShFbGVtZW50
KiBlbGVtZW50LCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiAgICAgewogICAgICAgICBBU1NF
UlQoZWxlbWVudCk7CkBAIC05MywxMCArODQsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVl
ZHNPdmVycmlkZUNvbXB1dGVkU3R5bGVVcGRhdGUoKSB7IG1fbmVlZHNPdmVycmlkZUNvbXB1dGVk
U3R5bGVVcGRhdGUgPSB0cnVlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaFNldDxTVkdFbGVtZW50
SW5zdGFuY2UqPiBtX2VsZW1lbnRJbnN0YW5jZXM7Ci0gICAgU1ZHQ3Vyc29yRWxlbWVudCogbV9j
dXJzb3JFbGVtZW50OwotICAgIENTU0N1cnNvckltYWdlVmFsdWUqIG1fY3Vyc29ySW1hZ2VWYWx1
ZTsKLSAgICBTVkdFbGVtZW50KiBtX2NvcnJlc3BvbmRpbmdFbGVtZW50OworICAgIEhhc2hTZXQ8
U1ZHRWxlbWVudCo+IG1faW5zdGFuY2VzOworICAgIFNWR0N1cnNvckVsZW1lbnQqIG1fY3Vyc29y
RWxlbWVudCB7IG51bGxwdHIgfTsKKyAgICBDU1NDdXJzb3JJbWFnZVZhbHVlKiBtX2N1cnNvcklt
YWdlVmFsdWUgeyBudWxscHRyIH07CisgICAgU1ZHRWxlbWVudCogbV9jb3JyZXNwb25kaW5nRWxl
bWVudCB7IG51bGxwdHIgfTsKICAgICBib29sIG1faW5zdGFuY2VzVXBkYXRlc0Jsb2NrZWQgOiAx
OwogICAgIGJvb2wgbV91c2VPdmVycmlkZUNvbXB1dGVkU3R5bGUgOiAxOwogICAgIGJvb2wgbV9u
ZWVkc092ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSA6IDE7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHVGVzdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmNw
cAppbmRleCAzMjUxMTQxYWU5OGRjNDVkMmVlZGFjYWYyYThiZjIwMTk5MjZjNWFhLi5lYjMzY2Rl
MTkwODA0Y2VhYjE3ODNlNmE4ZDYyYThiZWQwM2Q3MGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXN0cy5j
cHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHQgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTM2LDc3ICszNyw1MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8v
IERlZmluZSBjdXN0b20gbm9uLWFuaW1hdGVkIHByb3BlcnR5ICdyZXF1aXJlZEZlYXR1cmVzJy4K
LWNvbnN0IFNWR1Byb3BlcnR5SW5mbyogU1ZHVGVzdHM6OnJlcXVpcmVkRmVhdHVyZXNQcm9wZXJ0
eUluZm8oKQotewotICAgIHN0YXRpYyBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIHNfcHJvcGVydHlJ
bmZvID0gMDsKLSAgICBpZiAoIXNfcHJvcGVydHlJbmZvKSB7Ci0gICAgICAgIHNfcHJvcGVydHlJ
bmZvID0gbmV3IFNWR1Byb3BlcnR5SW5mbyhBbmltYXRlZFVua25vd24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eUlzUmVhZFdyaXRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1ZHTmFtZXM6OnJlcXVp
cmVkRmVhdHVyZXNBdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU1ZHTmFtZXM6OnJlcXVpcmVkRmVhdHVyZXNBdHRyLmxvY2FsTmFtZSgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNWR0VsZW1lbnQ6OnN5bmNo
cm9uaXplUmVxdWlyZWRGZWF0dXJlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDApOwotICAgIH0KLSAgICByZXR1cm4gc19wcm9wZXJ0eUluZm87Ci19Cit1
c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7CiAKLS8vIERlZmluZSBjdXN0b20gbm9uLWFuaW1hdGVk
IHByb3BlcnR5ICdyZXF1aXJlZEV4dGVuc2lvbnMnLgotY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBT
VkdUZXN0czo6cmVxdWlyZWRFeHRlbnNpb25zUHJvcGVydHlJbmZvKCkKK1NWR1Rlc3RzOjpTVkdU
ZXN0cygpCisgICAgOiBtX3JlcXVpcmVkRmVhdHVyZXMocmVxdWlyZWRGZWF0dXJlc0F0dHIpCisg
ICAgLCBtX3JlcXVpcmVkRXh0ZW5zaW9ucyhyZXF1aXJlZEV4dGVuc2lvbnNBdHRyKQorICAgICwg
bV9zeXN0ZW1MYW5ndWFnZShzeXN0ZW1MYW5ndWFnZUF0dHIpCiB7Ci0gICAgc3RhdGljIGNvbnN0
IFNWR1Byb3BlcnR5SW5mbyogc19wcm9wZXJ0eUluZm8gPSAwOwotICAgIGlmICghc19wcm9wZXJ0
eUluZm8pIHsKLSAgICAgICAgc19wcm9wZXJ0eUluZm8gPSBuZXcgU1ZHUHJvcGVydHlJbmZvKEFu
aW1hdGVkVW5rbm93biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFByb3BlcnR5SXNSZWFkV3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTVkdOYW1lczo6cmVxdWlyZWRFeHRlbnNpb25zQXR0ciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNWR05hbWVzOjpyZXF1aXJlZEV4
dGVuc2lvbnNBdHRyLmxvY2FsTmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJlNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25z
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0gICAg
fQotICAgIHJldHVybiBzX3Byb3BlcnR5SW5mbzsKIH0KIAotLy8gRGVmaW5lIGN1c3RvbSBub24t
YW5pbWF0ZWQgcHJvcGVydHkgJ3N5c3RlbUxhbmd1YWdlJy4KLWNvbnN0IFNWR1Byb3BlcnR5SW5m
byogU1ZHVGVzdHM6OnN5c3RlbUxhbmd1YWdlUHJvcGVydHlJbmZvKCkKK3N0YXRpYyBTVkdQcm9w
ZXJ0eUluZm8gY3JlYXRlU1ZHVGVzdFByb3BlcnR5SW5mbyhjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyaWJ1dGVOYW1lLCBTVkdQcm9wZXJ0eUluZm86OlN5bmNocm9uaXplUHJvcGVydHkgc3luY2hy
b25pemVGdW5jdGlvbikKIHsKLSAgICBzdGF0aWMgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBzX3By
b3BlcnR5SW5mbyA9IDA7Ci0gICAgaWYgKCFzX3Byb3BlcnR5SW5mbykgewotICAgICAgICBzX3By
b3BlcnR5SW5mbyA9IG5ldyBTVkdQcm9wZXJ0eUluZm8oQW5pbWF0ZWRVbmtub3duLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlJc1JlYWRXcml0
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNWR05hbWVz
OjpzeXN0ZW1MYW5ndWFnZUF0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTVkdOYW1lczo6c3lzdGVtTGFuZ3VhZ2VBdHRyLmxvY2FsTmFtZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlNWR0VsZW1lbnQ6OnN5
bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNfcHJvcGVydHlJbmZvOworICAg
IHJldHVybiB7IEFuaW1hdGVkVW5rbm93biwgUHJvcGVydHlJc1JlYWRXcml0ZSwgYXR0cmlidXRl
TmFtZSwgYXR0cmlidXRlTmFtZS5sb2NhbE5hbWUoKSwgc3luY2hyb25pemVGdW5jdGlvbiwgbnVs
bHB0ciB9OwogfQogCi1TVkdUZXN0czo6U1ZHVGVzdHMoKQotICAgIDogbV9yZXF1aXJlZEZlYXR1
cmVzKFNWR05hbWVzOjpyZXF1aXJlZEZlYXR1cmVzQXR0cikKLSAgICAsIG1fcmVxdWlyZWRFeHRl
bnNpb25zKFNWR05hbWVzOjpyZXF1aXJlZEV4dGVuc2lvbnNBdHRyKQotICAgICwgbV9zeXN0ZW1M
YW5ndWFnZShTVkdOYW1lczo6c3lzdGVtTGFuZ3VhZ2VBdHRyKQorc3RhdGljIFNWR0F0dHJpYnV0
ZVRvUHJvcGVydHlNYXAgY3JlYXRlU1ZHVGV4dEF0dHJpYnV0ZVRvUHJvcGVydHlNYXAoKQogewor
ICAgIHR5cGVkZWYgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU1ZHUHJvcGVydHlJbmZvPiBJbmZvOwor
CisgICAgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCBtYXA7CisKKyAgICBzdGF0aWMgSW5mbyBy
ZXF1aXJlZEZlYXR1cmVzID0gY3JlYXRlU1ZHVGVzdFByb3BlcnR5SW5mbyhyZXF1aXJlZEZlYXR1
cmVzQXR0ciwgU1ZHRWxlbWVudDo6c3luY2hyb25pemVSZXF1aXJlZEZlYXR1cmVzKTsKKyAgICBt
YXAuYWRkUHJvcGVydHkocmVxdWlyZWRGZWF0dXJlcy5nZXQoKSk7CisKKyAgICBzdGF0aWMgSW5m
byByZXF1aXJlZEV4dGVuc2lvbnMgPSBjcmVhdGVTVkdUZXN0UHJvcGVydHlJbmZvKHJlcXVpcmVk
RXh0ZW5zaW9uc0F0dHIsIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25z
KTsKKyAgICBtYXAuYWRkUHJvcGVydHkocmVxdWlyZWRFeHRlbnNpb25zLmdldCgpKTsKKworICAg
IHN0YXRpYyBJbmZvIHN5c3RlbUxhbmd1YWdlID0gY3JlYXRlU1ZHVGVzdFByb3BlcnR5SW5mbyhz
eXN0ZW1MYW5ndWFnZUF0dHIsIFNWR0VsZW1lbnQ6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2Up
OworICAgIG1hcC5hZGRQcm9wZXJ0eShzeXN0ZW1MYW5ndWFnZS5nZXQoKSk7CisKKyAgICByZXR1
cm4gbWFwOwogfQogCi1TVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwJiBTVkdUZXN0czo6YXR0cmli
dXRlVG9Qcm9wZXJ0eU1hcCgpCitjb25zdCBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwJiBTVkdU
ZXN0czo6YXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA+IG1hcDsKLSAgICBpZiAoIW1hcC5nZXQoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBtYXA7Ci0gICAgbWFwLmdldCgpLmFkZFByb3BlcnR5
KHJlcXVpcmVkRmVhdHVyZXNQcm9wZXJ0eUluZm8oKSk7Ci0gICAgbWFwLmdldCgpLmFkZFByb3Bl
cnR5KHJlcXVpcmVkRXh0ZW5zaW9uc1Byb3BlcnR5SW5mbygpKTsKLSAgICBtYXAuZ2V0KCkuYWRk
UHJvcGVydHkoc3lzdGVtTGFuZ3VhZ2VQcm9wZXJ0eUluZm8oKSk7CisgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA+IG1hcCA9IGNyZWF0ZVNWR1RleHRB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwKCk7CiAgICAgcmV0dXJuIG1hcDsKIH0KIAotYm9vbCBTVkdU
ZXN0czo6aGFzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKSBjb25zdAorYm9vbCBT
VkdUZXN0czo6aGFzRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewogICAgIC8v
IFdlIHJlY29nbml6ZSBYSFRNTCBhbmQgTWF0aE1MLCBhcyBpbXBsZW1lbnRlZCBpbiBHZWNrbyBh
bmQgc3VnZ2VzdGVkIGluIHRoZSBTVkcgVGlueSByZWNvbW1lbmRhdGlvbiAoaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHMTEvc3RydWN0Lmh0bWwjUmVxdWlyZWRFeHRlbnNpb25zQXR0cmlidXRlKS4K
ICNpZiBFTkFCTEUoTUFUSE1MKQotICAgIHJldHVybiBleHRlbnNpb24gPT0gSFRNTE5hbWVzOjp4
aHRtbE5hbWVzcGFjZVVSSSB8fCBleHRlbnNpb24gPT0gTWF0aE1MTmFtZXM6Om1hdGhtbE5hbWVz
cGFjZVVSSTsKLSNlbHNlCi0gICAgcmV0dXJuIGV4dGVuc2lvbiA9PSBIVE1MTmFtZXM6OnhodG1s
TmFtZXNwYWNlVVJJOworICAgIGlmIChleHRlbnNpb24gPT0gTWF0aE1MTmFtZXM6Om1hdGhtbE5h
bWVzcGFjZVVSSSkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKKyAgICByZXR1cm4gZXh0
ZW5zaW9uID09IEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkk7CiB9CiAKIGJvb2wgU1ZHVGVz
dHM6OmlzVmFsaWQoKSBjb25zdApAQCAtMTE1LDkwICs5MSw4MCBAQCBib29sIFNWR1Rlc3RzOjpp
c1ZhbGlkKCkgY29uc3QKICAgICAgICAgaWYgKGZlYXR1cmUuaXNFbXB0eSgpIHx8ICFET01JbXBs
ZW1lbnRhdGlvbjo6aGFzRmVhdHVyZShmZWF0dXJlLCBTdHJpbmcoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQotCiAgICAgZm9yIChhdXRvJiBsYW5ndWFnZSA6IG1fc3lzdGVt
TGFuZ3VhZ2UudmFsdWUpIHsKICAgICAgICAgaWYgKGxhbmd1YWdlICE9IGRlZmF1bHRMYW5ndWFn
ZSgpLnN1YnN0cmluZygwLCAyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0K
ICAgICBmb3IgKGF1dG8mIGV4dGVuc2lvbiA6IG1fcmVxdWlyZWRFeHRlbnNpb25zLnZhbHVlKSB7
CiAgICAgICAgIGlmICghaGFzRXh0ZW5zaW9uKGV4dGVuc2lvbikpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU1ZHVGVzdHM6
OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpCitib29sIFNWR1Rlc3RzOjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewotICAg
IGlmIChuYW1lID09IFNWR05hbWVzOjpyZXF1aXJlZEZlYXR1cmVzQXR0cikgeworICAgIGlmIChh
dHRyaWJ1dGVOYW1lID09IHJlcXVpcmVkRmVhdHVyZXNBdHRyKSB7CiAgICAgICAgIG1fcmVxdWly
ZWRGZWF0dXJlcy52YWx1ZS5yZXNldCh2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICBpZiAobmFtZSA9PSBTVkdOYW1lczo6cmVxdWlyZWRFeHRlbnNpb25zQXR0cikgewor
ICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IHJlcXVpcmVkRXh0ZW5zaW9uc0F0dHIpIHsKICAgICAg
ICAgbV9yZXF1aXJlZEV4dGVuc2lvbnMudmFsdWUucmVzZXQodmFsdWUpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKG5hbWUgPT0gU1ZHTmFtZXM6OnN5c3RlbUxhbmd1YWdl
QXR0cikgeworICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IHN5c3RlbUxhbmd1YWdlQXR0cikgewog
ICAgICAgICBtX3N5c3RlbUxhbmd1YWdlLnZhbHVlLnJlc2V0KHZhbHVlKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQotICAgIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTVkdU
ZXN0czo6aXNLbm93bkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKK2Jv
b2wgU1ZHVGVzdHM6OmlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSkKIHsKLSAgICByZXR1cm4gYXR0ck5hbWUgPT0gU1ZHTmFtZXM6OnJlcXVpcmVkRmVh
dHVyZXNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpyZXF1aXJlZEV4dGVu
c2lvbnNBdHRyCi0gICAgICAgIHx8IGF0dHJOYW1lID09IFNWR05hbWVzOjpzeXN0ZW1MYW5ndWFn
ZUF0dHI7CisgICAgcmV0dXJuIGF0dHJpYnV0ZU5hbWUgPT0gcmVxdWlyZWRGZWF0dXJlc0F0dHIK
KyAgICAgICAgfHwgYXR0cmlidXRlTmFtZSA9PSByZXF1aXJlZEV4dGVuc2lvbnNBdHRyCisgICAg
ICAgIHx8IGF0dHJpYnV0ZU5hbWUgPT0gc3lzdGVtTGFuZ3VhZ2VBdHRyOwogfQogCi1ib29sIFNW
R1Rlc3RzOjpoYW5kbGVBdHRyaWJ1dGVDaGFuZ2UoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCitib29sIFNWR1Rlc3RzOjpoYW5kbGVBdHRy
aWJ1dGVDaGFuZ2UoU1ZHRWxlbWVudCogdGFyZ2V0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0cmlidXRlTmFtZSkKIHsKICAgICBBU1NFUlQodGFyZ2V0RWxlbWVudCk7Ci0gICAgaWYg
KCFpc0tub3duQXR0cmlidXRlKGF0dHJOYW1lKSkKKyAgICBpZiAoIWlzS25vd25BdHRyaWJ1dGUo
YXR0cmlidXRlTmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAoIXRhcmdldEVs
ZW1lbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICB0YXJnZXRF
bGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFJlY29uc3RydWN0UmVuZGVyVHJlZSk7Ci0KICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBTVkdUZXN0czo6YWRkU3VwcG9ydGVkQXR0cmlidXRl
cyhIYXNoU2V0PFF1YWxpZmllZE5hbWU+JiBzdXBwb3J0ZWRBdHRyaWJ1dGVzKQogewotICAgIHN1
cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpyZXF1aXJlZEZlYXR1cmVzQXR0cik7Ci0g
ICAgc3VwcG9ydGVkQXR0cmlidXRlcy5hZGQoU1ZHTmFtZXM6OnJlcXVpcmVkRXh0ZW5zaW9uc0F0
dHIpOwotICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKFNWR05hbWVzOjpzeXN0ZW1MYW5ndWFn
ZUF0dHIpOworICAgIHN1cHBvcnRlZEF0dHJpYnV0ZXMuYWRkKHJlcXVpcmVkRmVhdHVyZXNBdHRy
KTsKKyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChyZXF1aXJlZEV4dGVuc2lvbnNBdHRyKTsK
KyAgICBzdXBwb3J0ZWRBdHRyaWJ1dGVzLmFkZChzeXN0ZW1MYW5ndWFnZUF0dHIpOwogfQogCi12
b2lkIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZVJlcXVpcmVkRmVhdHVyZXMoU1ZHRWxlbWVudCogY29u
dGV4dEVsZW1lbnQpCit2b2lkIFNWR1Rlc3RzOjpzeW5jaHJvbml6ZUF0dHJpYnV0ZShTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCwgU1ZHU3luY2hyb25pemFibGVBbmltYXRlZFByb3BlcnR5PFNW
R1N0cmluZ0xpc3Q+JiBwcm9wZXJ0eSwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFt
ZSkKIHsKICAgICBBU1NFUlQoY29udGV4dEVsZW1lbnQpOwotICAgIGlmICghbV9yZXF1aXJlZEZl
YXR1cmVzLnNob3VsZFN5bmNocm9uaXplKQorICAgIGlmICghcHJvcGVydHkuc2hvdWxkU3luY2hy
b25pemUpCiAgICAgICAgIHJldHVybjsKLSAgICBBdG9taWNTdHJpbmcgdmFsdWUobV9yZXF1aXJl
ZEZlYXR1cmVzLnZhbHVlLnZhbHVlQXNTdHJpbmcoKSk7Ci0gICAgbV9yZXF1aXJlZEZlYXR1cmVz
LnN5bmNocm9uaXplKGNvbnRleHRFbGVtZW50LCByZXF1aXJlZEZlYXR1cmVzUHJvcGVydHlJbmZv
KCktPmF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKKyAgICBtX3JlcXVpcmVkRmVhdHVyZXMuc3luY2hy
b25pemUoY29udGV4dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHByb3BlcnR5LnZhbHVlLnZhbHVl
QXNTdHJpbmcoKSk7Cit9CisKK3ZvaWQgU1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWlyZWRGZWF0
dXJlcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKK3sKKyAgICBzeW5jaHJvbml6ZUF0dHJp
YnV0ZShjb250ZXh0RWxlbWVudCwgbV9yZXF1aXJlZEZlYXR1cmVzLCByZXF1aXJlZEZlYXR1cmVz
QXR0cik7CiB9CiAKIHZvaWQgU1ZHVGVzdHM6OnN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25z
KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KQogewotICAgIEFTU0VSVChjb250ZXh0RWxlbWVu
dCk7Ci0gICAgaWYgKCFtX3JlcXVpcmVkRXh0ZW5zaW9ucy5zaG91bGRTeW5jaHJvbml6ZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIEF0b21pY1N0cmluZyB2YWx1ZShtX3JlcXVpcmVkRXh0ZW5zaW9u
cy52YWx1ZS52YWx1ZUFzU3RyaW5nKCkpOwotICAgIG1fcmVxdWlyZWRFeHRlbnNpb25zLnN5bmNo
cm9uaXplKGNvbnRleHRFbGVtZW50LCByZXF1aXJlZEV4dGVuc2lvbnNQcm9wZXJ0eUluZm8oKS0+
YXR0cmlidXRlTmFtZSwgdmFsdWUpOworICAgIHN5bmNocm9uaXplQXR0cmlidXRlKGNvbnRleHRF
bGVtZW50LCBtX3JlcXVpcmVkRXh0ZW5zaW9ucywgcmVxdWlyZWRFeHRlbnNpb25zQXR0cik7CiB9
CiAKIHZvaWQgU1ZHVGVzdHM6OnN5bmNocm9uaXplU3lzdGVtTGFuZ3VhZ2UoU1ZHRWxlbWVudCog
Y29udGV4dEVsZW1lbnQpCiB7Ci0gICAgQVNTRVJUKGNvbnRleHRFbGVtZW50KTsKLSAgICBpZiAo
IW1fc3lzdGVtTGFuZ3VhZ2Uuc2hvdWxkU3luY2hyb25pemUpCi0gICAgICAgIHJldHVybjsKLSAg
ICBBdG9taWNTdHJpbmcgdmFsdWUobV9zeXN0ZW1MYW5ndWFnZS52YWx1ZS52YWx1ZUFzU3RyaW5n
KCkpOwotICAgIG1fc3lzdGVtTGFuZ3VhZ2Uuc3luY2hyb25pemUoY29udGV4dEVsZW1lbnQsIHN5
c3RlbUxhbmd1YWdlUHJvcGVydHlJbmZvKCktPmF0dHJpYnV0ZU5hbWUsIHZhbHVlKTsKKyAgICBz
eW5jaHJvbml6ZUF0dHJpYnV0ZShjb250ZXh0RWxlbWVudCwgbV9zeXN0ZW1MYW5ndWFnZSwgc3lz
dGVtTGFuZ3VhZ2VBdHRyKTsKIH0KIAogU1ZHU3RyaW5nTGlzdCYgU1ZHVGVzdHM6OnJlcXVpcmVk
RmVhdHVyZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Rlc3RzLmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaAppbmRleCA1ZDE3OGE1MWFjMDc0YmYwMjdkZjEw
ZWExYThjMGQ2NDg0OWExYjE4Li44ZmY2MGU1YTc2ODcxNWFiNTUyNzA2NzY4ZmU3MmNkN2YzM2Q0
ZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHVGVzdHMuaApAQCAtMjYsOCArMjYsNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIEF0dHJpYnV0ZTsKLWNsYXNzIFF1YWxpZmllZE5hbWU7CiBjbGFz
cyBTVkdFbGVtZW50OwogCiBjbGFzcyBTVkdUZXN0cyB7CkBAIC0zNiwxNiArMzQsMTYgQEAgcHVi
bGljOgogICAgIFNWR1N0cmluZ0xpc3QmIHJlcXVpcmVkRXh0ZW5zaW9ucygpOwogICAgIFNWR1N0
cmluZ0xpc3QmIHN5c3RlbUxhbmd1YWdlKCk7CiAKLSAgICBib29sIGhhc0V4dGVuc2lvbihjb25z
dCBTdHJpbmcmKSBjb25zdDsKKyAgICBzdGF0aWMgYm9vbCBoYXNFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJik7CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAKICAgICBib29sIHBhcnNlQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKLSAgICBib29s
IGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIHN0YXRpYyBib29s
IGlzS25vd25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgdm9pZCBhZGRT
dXBwb3J0ZWRBdHRyaWJ1dGVzKEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4mKTsKLSAgICBib29sIGhh
bmRsZUF0dHJpYnV0ZUNoYW5nZShTVkdFbGVtZW50KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwor
ICAgIHN0YXRpYyB2b2lkIGFkZFN1cHBvcnRlZEF0dHJpYnV0ZXMoSGFzaFNldDxRdWFsaWZpZWRO
YW1lPiYpOworICAgIHN0YXRpYyBib29sIGhhbmRsZUF0dHJpYnV0ZUNoYW5nZShTVkdFbGVtZW50
KiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgc3RhdGljIFNWR0F0dHJpYnV0ZVRvUHJv
cGVydHlNYXAmIGF0dHJpYnV0ZVRvUHJvcGVydHlNYXAoKTsKKyAgICBzdGF0aWMgY29uc3QgU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCYgYXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCgpOwogCiBwcm90
ZWN0ZWQ6CiAgICAgU1ZHVGVzdHMoKTsKQEAgLTU1LDE2ICs1MywxMCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVt
ZW50KTsKIAogcHJpdmF0ZToKLSAgICAvLyBDdXN0b20gJ3JlcXVpcmVkRmVhdHVyZXMnIHByb3Bl
cnR5Ci0gICAgc3RhdGljIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyogcmVxdWlyZWRGZWF0dXJlc1By
b3BlcnR5SW5mbygpOwotICAgIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQcm9wZXJ0eTxTVkdT
dHJpbmdMaXN0PiBtX3JlcXVpcmVkRmVhdHVyZXM7CisgICAgdm9pZCBzeW5jaHJvbml6ZUF0dHJp
YnV0ZShTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgU1ZHU3luY2hyb25pemFibGVBbmltYXRl
ZFByb3BlcnR5PFNWR1N0cmluZ0xpc3Q+JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSk7CiAKLSAgICAvLyBDdXN0b20gJ3JlcXVpcmVkRXh0ZW5zaW9ucycgcHJvcGVydHkKLSAg
ICBzdGF0aWMgY29uc3QgU1ZHUHJvcGVydHlJbmZvKiByZXF1aXJlZEV4dGVuc2lvbnNQcm9wZXJ0
eUluZm8oKTsKKyAgICBTVkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVydHk8U1ZHU3RyaW5n
TGlzdD4gbV9yZXF1aXJlZEZlYXR1cmVzOwogICAgIFNWR1N5bmNocm9uaXphYmxlQW5pbWF0ZWRQ
cm9wZXJ0eTxTVkdTdHJpbmdMaXN0PiBtX3JlcXVpcmVkRXh0ZW5zaW9uczsKLQotICAgIC8vIEN1
c3RvbSAnc3lzdGVtTGFuZ3VhZ2UnIHByb3BlcnR5Ci0gICAgc3RhdGljIGNvbnN0IFNWR1Byb3Bl
cnR5SW5mbyogc3lzdGVtTGFuZ3VhZ2VQcm9wZXJ0eUluZm8oKTsKICAgICBTVkdTeW5jaHJvbml6
YWJsZUFuaW1hdGVkUHJvcGVydHk8U1ZHU3RyaW5nTGlzdD4gbV9zeXN0ZW1MYW5ndWFnZTsKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAppbmRleCBhMjIwYTc4ZGUyMzgxZDkz
OTA0MDMzNGZmMzY5YWE1MDJiNTY1NmIzLi44OGNkOTkxZDljNzU0MWI5N2JiYzYwYjA5YzI2NWM4
ZjUwYWQ5ODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCkBAIC03NzYsMTAg
Kzc3Niw4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6aW52YWxpZGF0ZVNoYWRvd1RyZWUoKQogdm9p
ZCBTVkdVc2VFbGVtZW50OjppbnZhbGlkYXRlRGVwZW5kZW50U2hhZG93VHJlZXMoKQogewogICAg
IC8vIFJlY3Vyc2l2ZWx5IGludmFsaWRhdGUgZGVwZW5kZW50IDx1c2U+IHNoYWRvdyB0cmVlcwot
ICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNlcyA9IGluc3Rh
bmNlc0ZvckVsZW1lbnQoKTsKLSAgICBjb25zdCBIYXNoU2V0PFNWR0VsZW1lbnRJbnN0YW5jZSo+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpbnN0YW5jZXMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0
PFNWR0VsZW1lbnRJbnN0YW5jZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKFNWR1VzZUVsZW1lbnQqIGVsZW1l
bnQgPSAoKml0KS0+Y29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKSkgeworICAgIGZvciAoYXV0byog
aW5zdGFuY2UgOiBpbnN0YW5jZXMoKSkgeworICAgICAgICBpZiAoU1ZHVXNlRWxlbWVudCogZWxl
bWVudCA9IGluc3RhbmNlLT5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCgpKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoZWxlbWVudC0+aW5Eb2N1bWVudCgpKTsKICAgICAgICAgICAgIGVsZW1lbnQtPmlu
dmFsaWRhdGVTaGFkb3dUcmVlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3MuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlNYWNyb3MuaAppbmRleCA0
ODQ1YTIwNjNlMTM0OTBkZDYzN2QyYjRmYWMyZDZjYmExNzc2NmM3Li5iZDJiMDBmMGQ4YWY3ODRj
MjY3MDdiZTNiNWY1YzM0NWJkYTRlZTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5TWFjcm9zLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eU1hY3Jvcy5oCkBAIC0yNiw2ICsy
Niw3IEBACiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5oIgogI2luY2x1ZGUgIlNWR0F0
dHJpYnV0ZVRvUHJvcGVydHlNYXAuaCIKICNpbmNsdWRlICJTVkdQcm9wZXJ0eVRyYWl0cy5oIgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzAsMjMgKzcxLDE5IEBAIHN0cnVjdCBT
VkdTeW5jaHJvbml6YWJsZUFuaW1hdGVkUHJvcGVydHkgewogI2RlZmluZSBCRUdJTl9SRUdJU1RF
Ul9BTklNQVRFRF9QUk9QRVJUSUVTKE93bmVyVHlwZSkgXAogU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0
eU1hcCYgT3duZXJUeXBlOjphdHRyaWJ1dGVUb1Byb3BlcnR5TWFwKCkgXAogeyBcCi0gICAgREVQ
UkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXAsIHNf
YXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCwgKCkpOyBcCi0gICAgcmV0dXJuIHNfYXR0cmlidXRlVG9Q
cm9wZXJ0eU1hcDsgXAorICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTVkdBdHRyaWJ1dGVUb1By
b3BlcnR5TWFwPiBtYXA7IFwKKyAgICByZXR1cm4gbWFwOyBcCiB9IFwKIFwKIHN0YXRpYyB2b2lk
IHJlZ2lzdGVyQW5pbWF0ZWRQcm9wZXJ0aWVzRm9yIyNPd25lclR5cGUoKSBcCiB7IFwKLSAgICBT
VkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwJiBtYXAgPSBPd25lclR5cGU6OmF0dHJpYnV0ZVRvUHJv
cGVydHlNYXAoKTsgXAorICAgIGF1dG8mIG1hcCA9IE93bmVyVHlwZTo6YXR0cmlidXRlVG9Qcm9w
ZXJ0eU1hcCgpOyBcCiAgICAgaWYgKCFtYXAuaXNFbXB0eSgpKSBcCiAgICAgICAgIHJldHVybjsg
XAogICAgIHR5cGVkZWYgT3duZXJUeXBlIFVzZU93bmVyVHlwZTsKIAotI2RlZmluZSBSRUdJU1RF
Ul9MT0NBTF9BTklNQVRFRF9QUk9QRVJUWShMb3dlclByb3BlcnR5KSBcCi0gICAgIG1hcC5hZGRQ
cm9wZXJ0eShVc2VPd25lclR5cGU6Okxvd2VyUHJvcGVydHkjI1Byb3BlcnR5SW5mbygpKTsKLQot
I2RlZmluZSBSRUdJU1RFUl9QQVJFTlRfQU5JTUFURURfUFJPUEVSVElFUyhDbGFzc05hbWUpIFwK
LSAgICAgbWFwLmFkZFByb3BlcnRpZXMoQ2xhc3NOYW1lOjphdHRyaWJ1dGVUb1Byb3BlcnR5TWFw
KCkpOyBcCi0KKyNkZWZpbmUgUkVHSVNURVJfTE9DQUxfQU5JTUFURURfUFJPUEVSVFkoTG93ZXJQ
cm9wZXJ0eSkgbWFwLmFkZFByb3BlcnR5KCpVc2VPd25lclR5cGU6Okxvd2VyUHJvcGVydHkjI1By
b3BlcnR5SW5mbygpKTsKKyNkZWZpbmUgUkVHSVNURVJfUEFSRU5UX0FOSU1BVEVEX1BST1BFUlRJ
RVMoQ2xhc3NOYW1lKSBtYXAuYWRkUHJvcGVydGllcyhDbGFzc05hbWU6OmF0dHJpYnV0ZVRvUHJv
cGVydHlNYXAoKSk7CiAjZGVmaW5lIEVORF9SRUdJU1RFUl9BTklNQVRFRF9QUk9QRVJUSUVTIH0K
IAogLy8gUHJvcGVydHkgZGVmaW5pdGlvbiBoZWxwZXJzICh1c2VkIGluIFNWRyouY3BwIGZpbGVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRl
VG9Qcm9wZXJ0eU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRy
aWJ1dGVUb1Byb3BlcnR5TWFwLmNwcAppbmRleCA3YzRmYzFiNzUxZjYxNTQwYTQzNmE5M2FlYTZk
OTUyMDUyYmI5MThmLi45NjI5ZTU4Y2EyN2UxNGNlNjdkMTkyN2FkZTkzNTFmMGUxODk0OTg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1By
b3BlcnR5TWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRy
aWJ1dGVUb1Byb3BlcnR5TWFwLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMSwxMDYgKzIyLDY1IEBACiAjaW5jbHVkZSAiU1ZHQXR0
cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIgogCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5o
IgotI2luY2x1ZGUgIlNWR1Byb3BlcnR5SW5mby5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHZvaWQgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVydGllcyhjb25zdCBTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwJiBtYXApCiB7Ci0gICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVz
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtYXAubV9tYXAuZW5kKCk7Ci0gICAgZm9yIChBdHRy
aWJ1dGVUb1Byb3BlcnRpZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWFwLm1fbWFwLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBQcm9wZXJ0aWVzVmVjdG9yKiB2
ZWN0b3IgPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgIEFTU0VSVCh2ZWN0b3IpOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGxvb2tzIHVwIHRoZSBhdHRyaWJ1dGUgbmFtZSBpbiB0aGUgaGFz
aCB0YWJsZSBmb3IgZWFjaCBwcm9wZXJ0eSwgZXZlbiB0aG91Z2ggYWxsIHRoZQotICAgICAgICAv
LyBwcm9wZXJ0aWVzIGluIGEgc2luZ2xlIHZlY3RvciBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIHRo
ZSBzYW1lIGF0dHJpYnV0ZSBuYW1lLgotICAgICAgICAvLyBGSVhNRTogVGhpcyBncm93cyB0aGUg
dmVjdG9yIG9uZSBpdGVtIGF0IGEgdGltZSwgZXZlbiB0aG91Z2ggd2Uga25vdyB1cCBmcm9udCBl
eGFjdGx5IGhvdyBtYW55Ci0gICAgICAgIC8vIGVsZW1lbnRzIHdlIGFyZSBhZGRpbmcgdG8gdGhl
IHZlY3Rvci4KLSAgICAgICAgUHJvcGVydGllc1ZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgdmVjdG9y
RW5kID0gdmVjdG9yLT5lbmQoKTsKLSAgICAgICAgZm9yIChQcm9wZXJ0aWVzVmVjdG9yOjpjb25z
dF9pdGVyYXRvciB2ZWN0b3JJdCA9IHZlY3Rvci0+YmVnaW4oKTsgdmVjdG9ySXQgIT0gdmVjdG9y
RW5kOyArK3ZlY3Rvckl0KQotICAgICAgICAgICAgYWRkUHJvcGVydHkoKnZlY3Rvckl0KTsKKyAg
ICBmb3IgKGF1dG8mIHZlY3RvciA6IG1hcC5tX21hcC52YWx1ZXMoKSkgeworICAgICAgICBBU1NF
UlQoIXZlY3Rvci5pc0VtcHR5KCkpOworICAgICAgICBhdXRvJiBwcm9wZXJ0aWVzID0gbV9tYXAu
YWRkKHZlY3RvclswXS0+YXR0cmlidXRlTmFtZSwgUHJvcGVydHlJbmZvVmVjdG9yKCkpLml0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgcHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkocHJvcGVydGll
cy5zaXplKCkgKyB2ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9wZXJ0eSA6
IHZlY3RvcikKKyAgICAgICAgICAgIHByb3BlcnRpZXMudW5jaGVja2VkQXBwZW5kKHByb3BlcnR5
KTsKICAgICB9CiB9CiAKLXZvaWQgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YWRkUHJvcGVy
dHkoY29uc3QgU1ZHUHJvcGVydHlJbmZvKiBpbmZvKQordm9pZCBTVkdBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwOjphZGRQcm9wZXJ0eShjb25zdCBTVkdQcm9wZXJ0eUluZm8mIGluZm8pCiB7Ci0gICAg
QVNTRVJUKGluZm8pOwotICAgIEFTU0VSVChpbmZvLT5hdHRyaWJ1dGVOYW1lICE9IGFueVFOYW1l
KCkpOwotICAgIGlmIChQcm9wZXJ0aWVzVmVjdG9yKiB2ZWN0b3IgPSBtX21hcC5nZXQoaW5mby0+
YXR0cmlidXRlTmFtZSkpIHsKLSAgICAgICAgdmVjdG9yLT5hcHBlbmQoaW5mbyk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgLy8gRklYTUU6IFRoaXMgZG9lcyBhIHNlY29uZCBoYXNoIHRh
YmxlIGxvb2t1cCwgYnV0IHdpdGggSGFzaE1hcDo6YWRkIHdlIGNvdWxkIGluc3RlYWQgZG8gb25s
eSBvbmUuCi0gICAgYXV0byB2ZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFByb3BlcnRpZXNWZWN0
b3I+KCk7Ci0gICAgdmVjdG9yLT5hcHBlbmQoaW5mbyk7Ci0gICAgbV9tYXAuc2V0KGluZm8tPmF0
dHJpYnV0ZU5hbWUsIFdURjo6bW92ZSh2ZWN0b3IpKTsKKyAgICBtX21hcC5hZGQoaW5mby5hdHRy
aWJ1dGVOYW1lLCBQcm9wZXJ0eUluZm9WZWN0b3IoKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCgm
aW5mbyk7CiB9CiAKLXZvaWQgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6YW5pbWF0ZWRQcm9w
ZXJ0aWVzRm9yQXR0cmlidXRlKFNWR0VsZW1lbnQqIG93bmVyVHlwZSwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlTmFtZSwgVmVjdG9yPFJlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5Pj4m
IHByb3BlcnRpZXMpCitWZWN0b3I8UmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+PiBTVkdBdHRy
aWJ1dGVUb1Byb3BlcnR5TWFwOjpwcm9wZXJ0aWVzKFNWR0VsZW1lbnQmIGNvbnRleHRFbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKSBjb25zdAogewotICAgIEFTU0VS
VChvd25lclR5cGUpOwotICAgIFByb3BlcnRpZXNWZWN0b3IqIHZlY3RvciA9IG1fbWFwLmdldChh
dHRyaWJ1dGVOYW1lKTsKLSAgICBpZiAoIXZlY3RvcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKLSAg
ICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdmVjdG9yLT5iZWdp
bigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgIHByb3BlcnRp
ZXMuYXBwZW5kKGFuaW1hdGVkUHJvcGVydHkob3duZXJUeXBlLCBhdHRyaWJ1dGVOYW1lLCAqdmVj
dG9ySXQpKTsKKyAgICBWZWN0b3I8UmVmUHRyPFNWR0FuaW1hdGVkUHJvcGVydHk+PiBwcm9wZXJ0
aWVzOworICAgIGF1dG8gaXQgPSBtX21hcC5maW5kKGF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChp
dCA9PSBtX21hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIHByb3BlcnRpZXM7CisgICAgcHJvcGVy
dGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGl0LT52YWx1ZS5zaXplKCkpOworICAgIGZvciAo
YXV0byogcHJvcGVydHkgOiBpdC0+dmFsdWUpCisgICAgICAgIHByb3BlcnRpZXMudW5jaGVja2Vk
QXBwZW5kKHByb3BlcnR5LT5sb29rdXBPckNyZWF0ZVdyYXBwZXJGb3JBbmltYXRlZFByb3BlcnR5
KCZjb250ZXh0RWxlbWVudCkpOworICAgIHJldHVybiBwcm9wZXJ0aWVzOwogfQogCi12b2lkIFNW
R0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OmFuaW1hdGVkUHJvcGVydHlUeXBlRm9yQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIFZlY3RvcjxBbmltYXRlZFByb3Bl
cnR5VHlwZT4mIHByb3BlcnR5VHlwZXMpCitWZWN0b3I8QW5pbWF0ZWRQcm9wZXJ0eVR5cGU+IFNW
R0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6OnR5cGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZU5hbWUpIGNvbnN0CiB7Ci0gICAgUHJvcGVydGllc1ZlY3RvciogdmVjdG9yID0gbV9tYXAu
Z2V0KGF0dHJpYnV0ZU5hbWUpOwotICAgIGlmICghdmVjdG9yKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVuZCgp
OwotICAgIGZvciAoUHJvcGVydGllc1ZlY3Rvcjo6aXRlcmF0b3IgdmVjdG9ySXQgPSB2ZWN0b3It
PmJlZ2luKCk7IHZlY3Rvckl0ICE9IHZlY3RvckVuZDsgKyt2ZWN0b3JJdCkKLSAgICAgICAgcHJv
cGVydHlUeXBlcy5hcHBlbmQoKCp2ZWN0b3JJdCktPmFuaW1hdGVkUHJvcGVydHlUeXBlKTsKKyAg
ICBWZWN0b3I8QW5pbWF0ZWRQcm9wZXJ0eVR5cGU+IHR5cGVzOworICAgIGF1dG8gaXQgPSBtX21h
cC5maW5kKGF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChpdCA9PSBtX21hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIHR5cGVzOworICAgIHR5cGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaXQtPnZh
bHVlLnNpemUoKSk7CisgICAgZm9yIChhdXRvKiBwcm9wZXJ0eSA6IGl0LT52YWx1ZSkKKyAgICAg
ICAgdHlwZXMudW5jaGVja2VkQXBwZW5kKHByb3BlcnR5LT5hbmltYXRlZFByb3BlcnR5VHlwZSk7
CisgICAgcmV0dXJuIHR5cGVzOwogfQogCi12b2lkIFNWR0F0dHJpYnV0ZVRvUHJvcGVydHlNYXA6
OnN5bmNocm9uaXplUHJvcGVydGllcyhTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCkKK3ZvaWQg
U1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcDo6c3luY2hyb25pemVQcm9wZXJ0aWVzKFNWR0VsZW1l
bnQmIGNvbnRleHRFbGVtZW50KSBjb25zdAogewotICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7
Ci0gICAgQXR0cmlidXRlVG9Qcm9wZXJ0aWVzTWFwOjppdGVyYXRvciBlbmQgPSBtX21hcC5lbmQo
KTsKLSAgICBmb3IgKEF0dHJpYnV0ZVRvUHJvcGVydGllc01hcDo6aXRlcmF0b3IgaXQgPSBtX21h
cC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUHJvcGVydGllc1ZlY3Rvciog
dmVjdG9yID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICBBU1NFUlQodmVjdG9yKTsKLQotICAg
ICAgICBQcm9wZXJ0aWVzVmVjdG9yOjppdGVyYXRvciB2ZWN0b3JFbmQgPSB2ZWN0b3ItPmVuZCgp
OwotICAgICAgICBmb3IgKFByb3BlcnRpZXNWZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdmVj
dG9yLT5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAg
ICAgICBzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnRleHRFbGVtZW50LCBpdC0+a2V5LCAqdmVjdG9y
SXQpOworICAgIGZvciAoYXV0byYgdmVjdG9yIDogbV9tYXAudmFsdWVzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvKiBwcm9wZXJ0eSA6IHZlY3RvcikKKyAgICAgICAgICAgIHByb3BlcnR5LT5zeW5j
aHJvbml6ZVByb3BlcnR5KCZjb250ZXh0RWxlbWVudCk7CiAgICAgfSAKIH0KIAotYm9vbCBTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5jaHJvbml6ZVByb3BlcnR5KFNWR0VsZW1lbnQqIGNv
bnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKQorYm9vbCBT
VkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjpzeW5jaHJvbml6ZVByb3BlcnR5KFNWR0VsZW1lbnQm
IGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKSBjb25z
dAogewotICAgIEFTU0VSVChjb250ZXh0RWxlbWVudCk7Ci0gICAgUHJvcGVydGllc1ZlY3Rvciog
dmVjdG9yID0gbV9tYXAuZ2V0KGF0dHJpYnV0ZU5hbWUpOwotICAgIGlmICghdmVjdG9yKQorICAg
IGF1dG8gaXQgPSBtX21hcC5maW5kKGF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChpdCA9PSBtX21h
cC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUHJvcGVydGllc1ZlY3Rvcjo6
aXRlcmF0b3IgdmVjdG9yRW5kID0gdmVjdG9yLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnRpZXNW
ZWN0b3I6Oml0ZXJhdG9yIHZlY3Rvckl0ID0gdmVjdG9yLT5iZWdpbigpOyB2ZWN0b3JJdCAhPSB2
ZWN0b3JFbmQ7ICsrdmVjdG9ySXQpCi0gICAgICAgIHN5bmNocm9uaXplUHJvcGVydHkoY29udGV4
dEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsICp2ZWN0b3JJdCk7Ci0KKyAgICBmb3IgKGF1dG8qIHBy
b3BlcnR5IDogaXQtPnZhbHVlKQorICAgICAgICBwcm9wZXJ0eS0+c3luY2hyb25pemVQcm9wZXJ0
eSgmY29udGV4dEVsZW1lbnQpOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNWR0F0dHJp
YnV0ZVRvUHJvcGVydHlNYXA6OnN5bmNocm9uaXplUHJvcGVydHkoU1ZHRWxlbWVudCogY29udGV4
dEVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFNWR1By
b3BlcnR5SW5mbyogaW5mbykKLXsKLSAgICBBU1NFUlQoaW5mbyk7Ci0gICAgQVNTRVJUX1VOVVNF
RChhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVOYW1lID09IGluZm8tPmF0dHJpYnV0ZU5hbWUpOwot
ICAgIEFTU0VSVChpbmZvLT5zeW5jaHJvbml6ZVByb3BlcnR5KTsKLSAgICAoKmluZm8tPnN5bmNo
cm9uaXplUHJvcGVydHkpKGNvbnRleHRFbGVtZW50KTsKLX0KLQotUGFzc1JlZlB0cjxTVkdBbmlt
YXRlZFByb3BlcnR5PiBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwOjphbmltYXRlZFByb3BlcnR5
KFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1
dGVOYW1lLCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qIGluZm8pCi17Ci0gICAgQVNTRVJUKGluZm8p
OwotICAgIEFTU0VSVF9VTlVTRUQoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlTmFtZSA9PSBpbmZv
LT5hdHRyaWJ1dGVOYW1lKTsKLSAgICBBU1NFUlQoaW5mby0+bG9va3VwT3JDcmVhdGVXcmFwcGVy
Rm9yQW5pbWF0ZWRQcm9wZXJ0eSk7Ci0gICAgcmV0dXJuICgqaW5mby0+bG9va3VwT3JDcmVhdGVX
cmFwcGVyRm9yQW5pbWF0ZWRQcm9wZXJ0eSkoY29udGV4dEVsZW1lbnQpOwotfQotCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1Byb3Bl
cnR5TWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBdHRyaWJ1dGVUb1By
b3BlcnR5TWFwLmgKaW5kZXggMzc5ZmI5NzRiOTU4ZTIyNTExZmY3ODIzNmY1NzkzZjNmZTZkYWZi
ZC4uMDZiMGM3MzQwMmUzNDU5YzQxNWJhNDkwYjY2MGUzYTIyYzUzMzNlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0F0dHJpYnV0ZVRvUHJvcGVy
dHlNYXAuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0zMiwyNCArMzMsMTggQEAgY2xhc3MgU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcCB7
CiBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuaXNFbXB0
eSgpOyB9CiAKKyAgICB2b2lkIGFkZFByb3BlcnR5KGNvbnN0IFNWR1Byb3BlcnR5SW5mbyYpOwog
ICAgIHZvaWQgYWRkUHJvcGVydGllcyhjb25zdCBTVkdBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwJik7
Ci0gICAgdm9pZCBhZGRQcm9wZXJ0eShjb25zdCBTVkdQcm9wZXJ0eUluZm8qKTsKIAotICAgIC8v
IEZJWE1FOiBUbyBtYXRjaCBXZWJLaXQgY29kaW5nIHN0eWxlIGVpdGhlciB0aGVzZSBmdW5jdGlv
bnMgc2hvdWxkIGhhdmUgcmV0dXJuIHZhbHVlcyBpbnN0ZWFkIG9mIG91dCBwYXJhbWV0ZXJzLAot
ICAgIC8vIG9yIHRoZSB3b3JkICJnZXQiIHNob3VsZCBiZSBhZGRlZCBhcyBhIHByZWZpeCB0byB0
aGVpciBuYW1lcy4KLSAgICB2b2lkIGFuaW1hdGVkUHJvcGVydGllc0ZvckF0dHJpYnV0ZShTVkdF
bGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFt
ZSwgVmVjdG9yPFJlZlB0cjxTVkdBbmltYXRlZFByb3BlcnR5Pj4mKTsKLSAgICB2b2lkIGFuaW1h
dGVkUHJvcGVydHlUeXBlRm9yQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIFZlY3RvcjxBbmltYXRlZFByb3BlcnR5VHlwZT4mKTsKKyAgICBWZWN0b3I8UmVmUHRy
PFNWR0FuaW1hdGVkUHJvcGVydHk+PiBwcm9wZXJ0aWVzKFNWR0VsZW1lbnQmLCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKSBjb25zdDsKKyAgICBWZWN0b3I8QW5pbWF0ZWRQcm9w
ZXJ0eVR5cGU+IHR5cGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpIGNvbnN0
OwogCi0gICAgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxlbWVudCogY29udGV4dEVs
ZW1lbnQpOwotICAgIGJvb2wgc3luY2hyb25pemVQcm9wZXJ0eShTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSk7CisgICAgdm9pZCBz
eW5jaHJvbml6ZVByb3BlcnRpZXMoU1ZHRWxlbWVudCYpIGNvbnN0OworICAgIGJvb2wgc3luY2hy
b25pemVQcm9wZXJ0eShTVkdFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
TmFtZSkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzeW5jaHJvbml6ZVByb3BlcnR5KFNW
R0VsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVO
YW1lLCBjb25zdCBTVkdQcm9wZXJ0eUluZm8qKTsKLSAgICBQYXNzUmVmUHRyPFNWR0FuaW1hdGVk
UHJvcGVydHk+IGFuaW1hdGVkUHJvcGVydHkoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFNWR1Byb3BlcnR5SW5mbyop
OwotCi0gICAgdHlwZWRlZiBWZWN0b3I8Y29uc3QgU1ZHUHJvcGVydHlJbmZvKj4gUHJvcGVydGll
c1ZlY3RvcjsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UXVhbGlmaWVkTmFtZSwgc3RkOjp1bmlxdWVf
cHRyPFByb3BlcnRpZXNWZWN0b3I+PiBBdHRyaWJ1dGVUb1Byb3BlcnRpZXNNYXA7Ci0gICAgQXR0
cmlidXRlVG9Qcm9wZXJ0aWVzTWFwIG1fbWFwOworICAgIHR5cGVkZWYgVmVjdG9yPGNvbnN0IFNW
R1Byb3BlcnR5SW5mbyo+IFByb3BlcnR5SW5mb1ZlY3RvcjsKKyAgICBIYXNoTWFwPFF1YWxpZmll
ZE5hbWUsIFByb3BlcnR5SW5mb1ZlY3Rvcj4gbV9tYXA7CiB9OwogCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>