<?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>80325</bug_id>
          
          <creation_ts>2012-03-05 13:46:38 -0800</creation_ts>
          <short_desc>Merge AsyncFileStream with FileStreamProxy</short_desc>
          <delta_ts>2012-03-07 11:58:53 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>79327</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>dimich</cc>
    
    <cc>ericu</cc>
    
    <cc>fpizlo</cc>
    
    <cc>japhet</cc>
    
    <cc>jianli</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin+threading</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>571008</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-05 13:46:38 -0800</bug_when>
    <thetext>There is only one subclass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571041</commentid>
    <comment_count>1</comment_count>
      <attachid>130204</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-05 14:16:31 -0800</bug_when>
    <thetext>Created attachment 130204
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571044</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-05 14:19:18 -0800</bug_when>
    <thetext>ResourceHandle still serves as interface to blob: URL loading, and has a subclass, but it no longer knows anything about these directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571048</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-05 14:20:29 -0800</bug_when>
    <thetext>So this improves modularization of WebKit, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571072</commentid>
    <comment_count>4</comment_count>
      <attachid>130209</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-05 14:58:56 -0800</bug_when>
    <thetext>Created attachment 130209
updated to ToT

Would like EWS to run...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572554</commentid>
    <comment_count>5</comment_count>
      <attachid>130209</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-06 22:53:40 -0800</bug_when>
    <thetext>Comment on attachment 130209
updated to ToT

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

I am not an expert on this code, but this feels like a refactoring step that leaves the code in an irregular state.  Is this the only way to do it?

&gt; Source/WebCore/ChangeLog:26
&gt; +        * fileapi/AsyncFileStream.cpp: Copied from Source/WebCore/fileapi/FileStreamProxy.cpp.

It feels strange to me that this creates files called &quot;AsyncFileStream.[h|cpp]&quot; that have a class called &quot;FileStreamProxy&quot;.

&gt; Source/WebCore/fileapi/AsyncFileStream.h:37
&gt; +#include &quot;AsyncFileStream.h&quot;

Is this file including itself?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572564</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-06 23:03:21 -0800</bug_when>
    <thetext>&gt; I am not an expert on this code, but this feels like a refactoring step that leaves the code in an irregular state.  Is this the only way to do it?

It does not. This is how svn-create-patch works for moved files - it first shows the whole moved file, and then modifications to it.

&gt; Is this file including itself?

Yes, that include is wrong and should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572568</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-06 23:10:23 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; I am not an expert on this code, but this feels like a refactoring step that leaves the code in an irregular state.  Is this the only way to do it?
&gt; 
&gt; It does not. This is how svn-create-patch works for moved files - it first shows the whole moved file, and then modifications to it.

Aha!!  I was massively confused, apparently.

&gt; 
&gt; &gt; Is this file including itself?
&gt; 
&gt; Yes, that include is wrong and should be removed.

Looks like you did remove the #include.  I just missed it because of my confusion regarding how svn-create-patch worked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572572</commentid>
    <comment_count>8</comment_count>
      <attachid>130209</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-03-06 23:15:57 -0800</bug_when>
    <thetext>Comment on attachment 130209
updated to ToT

R=me.  After learning how to grok svn-create-patch&apos;s handling of moved-and-modified files, I find this patch to be perfectly sensible. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572926</commentid>
    <comment_count>9</comment_count>
      <attachid>130209</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-07 08:54:28 -0800</bug_when>
    <thetext>Comment on attachment 130209
updated to ToT

Thank you for review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572930</commentid>
    <comment_count>10</comment_count>
      <attachid>130209</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-07 08:57:57 -0800</bug_when>
    <thetext>Comment on attachment 130209
updated to ToT

Rejecting attachment 130209 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
ileStream.h&apos;
patching file Source/WebCore/platform/network/BlobRegistry.h
patching file Source/WebCore/platform/network/BlobRegistryImpl.cpp
patching file Source/WebCore/platform/network/BlobRegistryImpl.h
patching file Source/WebCore/platform/network/ResourceHandle.cpp
patching file Source/WebCore/platform/network/ResourceHandle.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Filip Pizlo&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/11852116</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572973</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-07 09:48:36 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/110066&gt;. Post-landing comments from CC&apos;ed experts are still welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>573093</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-03-07 11:58:53 -0800</bug_when>
    <thetext>Build fix in &lt;http://trac.webkit.org/changeset/110080&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130204</attachid>
            <date>2012-03-05 14:16:31 -0800</date>
            <delta_ts>2012-03-05 14:58:56 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>AsyncFileStream.txt</filename>
            <type>text/plain</type>
            <size>69764</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTc5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBACisyMDEyLTAzLTA1ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIEFzeW5jRmlsZVN0
cmVhbSB3aXRoIEZpbGVTdHJlYW1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODAzMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBc3luY0ZpbGVTdHJlYW0gc291bmRzIGxpa2UgYSBwbGF0Zm9ybSBj
b25jZXB0LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIHdlYiBzcGVjaWZpYy4KKyAgICAgICAg
QmV0dGVyIHRvIGp1c3Qga2VlcCBpdCBpbiBvbmUgcGxhY2UuCisKKyAgICAgICAgVGhpcyBpcyBh
IHN0ZXAgdG93YXJkIGRlY291cGxpbmcgYmxvYiBzY2hlbWUgc3VwcG9ydCBmcm9tIFJlc291cmNl
SGFuZGxlLCB3aGljaCBpcyBzdXBwb3NlZAorICAgICAgICB0byBiZSBhbiBpbnRlcmZhY2UgdG8g
cGxhdGZvcm0gbmV0d29ya2luZyBBUElzIG9ubHksIGFuZCBkZWZpbml0ZWx5IHNob3VsZG4ndCBr
bm93IGFib3V0CisgICAgICAgIFdlYiBjb25jZXB0cy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
ZnVuY3Rpb25hbGl0eSwgc28gbm8gdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgVXBkYXRlZCBmb3IgbW92ZWQgYW5kIHJlbW92ZWQgZmlsZXMuIE5hbWVseSwgcGxhdGZv
cm0vQXN5bmNGaWxlU3RyZWFtIGlzIGRlYWQsIGFuZAorICAgICAgICBmaWxlYXBpL0ZpbGVTdHJl
YW1Qcm94eSBpcyBub3cgZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uCisKKyAgICAgICAgKiBmaWxl
YXBpL0FzeW5jRmlsZVN0cmVhbS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVN0cmVhbVByb3h5LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVh
bTo6QXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6fkFzeW5jRmlsZVN0
cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OmZpbGVUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGlkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxl
U3RyZWFtOjpzdGFydE9uRmlsZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVT
dHJlYW06OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6ZGVyZWZQcm94eU9uQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OnN0b3BPbkZpbGVUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6ZGlkR2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVT
dHJlYW06OmdldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpnZXRT
aXplT25GaWxlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZE9wZW4pOgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkT25GaWxlVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlT25GaWxlVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNG
aWxlU3RyZWFtOjpjbG9zZU9uRmlsZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpkaWRSZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6cmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OnJlYWRPbkZpbGVUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGlkV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjp3cml0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OndyaXRlT25GaWxlVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFRydW5jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFz
eW5jRmlsZVN0cmVhbTo6dHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3Ry
ZWFtOjp0cnVuY2F0ZU9uRmlsZVRocmVhZCk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVT
dHJlYW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3RyZWFtUHJv
eHkuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQXN5bmNGaWxlU3RyZWFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jRmlsZVN0cmVhbTo6c2V0Q2xpZW50KToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVT
dHJlYW1Qcm94eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlU3RyZWFtUHJv
eHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmNyZWF0ZUFzeW5jRmlsZVN0cmVhbSk6Cisg
ICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAgIEZl
d2VyIGZpbGVzIQorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaDog
UmVtb3ZlZCBjcmVhdGVSZXNvdXJjZUhhbmRsZSgpLiBJdCdzIGxvZ2ljYWxseSBhIG1ldGhvZAor
ICAgICAgICBvbiBpbi1wcm9jZXNzIEJsb2JSZWdpc3RyeUltcGwgb25seSwgYW5kIHdlIG5vIGxv
bmdlciBuZWVkIHRvIGNhbGwgdGhpcyBmcm9tIHBsYXRmb3JtIGNvZGUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlUmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJCbG9iUmVz
b3VyY2VIYW5kbGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJ
bXBsOjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJl
Z2lzdHJ5SW1wbC5oOgorICAgICAgICBFeGNlcHQgZm9yIGNocm9taXVtLCAiYmxvYiIgaXMgYSBz
Y2hlbWUgdGhhdCdzIGhhbmRsZWQgaW50ZXJuYWxseS4gQWRkZWQgaG9va3MgZm9yIHRoYXQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgIEFkZGVkIGEgd2F5IGZvciBv
dGhlciBjb2RlIHRvIHJlZ2lzdGVyIGhhbmRsZXJzIGZvciBVUkwgc2NoZW1lcy4gTm9uLUNocm9t
aXVtIHBsYXRmb3JtcworICAgICAgICB1c2UgdGhpcyBmb3IgYmxvYjogbm93LgorCiAyMDEyLTAz
LTA1ICBCZW4gVmFuaWsgIDxiZW52YW5pa0Bnb29nbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVu
dCBXZWJHTCBleHRlbnNpb24gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTA5NzYwKQorKysgU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0OTQsMTEgKzE0OTQsMTEgQEAgU0VUKFdl
YkNvcmVfVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMKIAogSUYgKEVOQUJMRV9CTE9CKQogICAgIExJ
U1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAgICBmaWxlYXBpL0FzeW5jRmlsZVN0cmVh
bS5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAogICAgICAgICBmaWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXIuY3BwCiAgICAgICAgIGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCiAg
ICAgICAgIGZpbGVhcGkvRmlsZVRocmVhZC5jcHAKLSAgICAgICAgZmlsZWFwaS9GaWxlU3RyZWFt
UHJveHkuY3BwCiAgICAgICAgIHBsYXRmb3JtL0ZpbGVTdHJlYW0uY3BwCiAgICAgKQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEwOTc2MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTE5NzQsNiAr
MTk3NCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9X
cmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1dyaXRpbmdEaXJlY3Rpb24uaCBcCisJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3lu
Y0ZpbGVTdHJlYW0uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVh
bS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVdyaXRlci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVdyaXRlckNsaWVudC5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0Jsb2IuY3BwIFwKQEAgLTIwMzEsOCArMjAzMyw2IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50
LmggXAogCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmggXAotCVNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVN0cmVhbVByb3h5LmNwcCBcCi0JU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxl
U3RyZWFtUHJveHkuaCBcCiAJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2suaCBcCiAJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmggXApAQCAtMjky
Niw3ICsyOTI2LDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hbmltYXRpb24vVGltaW5nRnVuY3Rpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQXJlbmEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9BcmVuYS5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaCBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQXN5bmNGaWxlU3lzdGVtLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
QXN5bmNGaWxlU3lzdGVtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0F1dG9kcmFpbmVk
UG9vbC5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTA5NzYwKQorKysgU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtNjUzLDYgKzY1Myw4IEBAIFNPVVJD
RVMgKz0gXAogICAgIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgXAogICAgIGVkaXRpbmcv
dmlzaWJsZV91bml0cy5jcHAgXAogICAgIGVkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5D
b21tYW5kLmNwcCBcCisgICAgZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwIFwKKyAgICBmaWxl
YXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAgXAogICAgIGZpbGVhcGkvQmxvYi5jcHAgXAogICAgIGZp
bGVhcGkvQmxvYlVSTC5jcHAgXAogICAgIGZpbGVhcGkvRE9NRmlsZVBhdGguY3BwIFwKQEAgLTY3
Nyw4ICs2NzksNiBAQCBTT1VSQ0VTICs9IFwKICAgICBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwIFwK
ICAgICBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwIFwKICAgICBmaWxlYXBpL0ZpbGVSZWFk
ZXJTeW5jLmNwcCBcCi0gICAgZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuY3BwIFwKLSAgICBmaWxl
YXBpL0ZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwIFwKICAgICBmaWxlYXBpL0ZpbGVUaHJlYWQuY3Bw
IFwKICAgICBmaWxlYXBpL0ZpbGVXcml0ZXIuY3BwIFwKICAgICBmaWxlYXBpL0ZpbGVXcml0ZXJC
YXNlLmNwcCBcCkBAIC0yMTA4LDcgKzIxMDgsNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9y
bS9hbmltYXRpb24vQW5pbWF0aW9uTGlzdC5oIFwKICAgICBwbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uVXRpbGl0aWVzLmggXAogICAgIHBsYXRmb3JtL0FyZW5hLmggXAotICAgIHBsYXRmb3Jt
L0FzeW5jRmlsZVN0cmVhbS5oIFwKICAgICBwbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmggXAog
ICAgIHBsYXRmb3JtL0Nsb2NrLmggXAogICAgIHBsYXRmb3JtL0Nsb2NrR2VuZXJpYy5oIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEwOTc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw2IEBACiAgICAgICAgICAg
ICAncGFnZS9XaW5kb3dGZWF0dXJlcy5oJywKICAgICAgICAgICAgICdwYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25Db250cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3BhZ2UvbWFjL1dlYkNvcmVGcmFt
ZVZpZXcuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vQXN5bmNGaWxlU3RyZWFtLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL0Nsb2NrLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL0NvbG9y
Q2hvb3Nlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaCcs
CkBAIC0yMzU0LDYgKzIzNTMsOCBAQAogICAgICAgICAgICAgJ2VkaXRpbmcvcXQvU21hcnRSZXBs
YWNlUXQuY3BwJywKICAgICAgICAgICAgICdlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwJywKICAg
ICAgICAgICAgICdlZGl0aW5nL3d4L0VkaXRvcld4LmNwcCcsCisgICAgICAgICAgICAnZmlsZWFw
aS9Bc3luY0ZpbGVTdHJlYW0uY3BwJywKKyAgICAgICAgICAgICdmaWxlYXBpL0FzeW5jRmlsZVN0
cmVhbS5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0FzeW5jRmlsZVdyaXRlci5oJywKICAgICAg
ICAgICAgICdmaWxlYXBpL0FzeW5jRmlsZVdyaXRlckNsaWVudC5oJywKICAgICAgICAgICAgICdm
aWxlYXBpL0Jsb2IuY3BwJywKQEAgLTI0MTEsOCArMjQxMiw2IEBACiAgICAgICAgICAgICAnZmls
ZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmls
ZVJlYWRlclN5bmMuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmgn
LAotICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmNwcCcsCi0gICAgICAgICAg
ICAnZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxl
U3lzdGVtQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJh
Y2tzLmNwcCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmgnLApJ
bmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJl
dmlzaW9uIDEwOTc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgyNiwxMCArMjY4MjYsNiBAQAogCQkJCT4KIAkJ
CTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxBc3luY0Zp
bGVTdHJlYW0uaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0
aD0iLi5ccGxhdGZvcm1cQXN5bmNGaWxlU3lzdGVtLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBA
IC01NjE4Niw2ICs1NjE4MiwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXEFzeW5jRmlsZVN0cmVhbS5jcHAiCisJCQkJPgorCQkJ
PC9GaWxlPgorCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcQXN5bmNGaWxl
U3RyZWFtLmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGZpbGVhcGlcRW50cmllc0NhbGxiYWNrLmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNTYz
MTgsMTQgKzU2MzIyLDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZmlsZWFwaVxGaWxlU3RyZWFtUHJveHkuY3BwIgotCQkJCT4KLQkJCTwvRmls
ZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXEZpbGVTdHJlYW1Qcm94
eS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxm
aWxlYXBpXEZpbGVTeXN0ZW1DYWxsYmFjay5oIgogCQkJCT4KIAkJCTwvRmlsZT4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDEwOTc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODM0LDcgKzgzNCw2IEBACiAJCTJFREYzNjlG
MTIyQzk0QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRURGMzY5RTEyMkM5NEM4MDAyRjdENEUgLyogRmls
ZUV4Y2VwdGlvbi5oICovOyB9OwogCQkyRUYxQkZFQTEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0
cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RUYxQkZFODEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgKi87IH07CiAJCTJFRjFC
RkVCMTIxQzlGNDIwMEMyNzYyNyAvKiBGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUYxQkZFOTEyMUM5RjQyMDBDMjc2MjcgLyogRmls
ZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTJFRjFCRkY3MTIxQ0IwQkQwMEMyNzYyNyAvKiBBc3luY0ZpbGVTdHJlYW0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRjFCRkY2MTIxQ0IwQkQw
MEMyNzYyNyAvKiBBc3luY0ZpbGVTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyRUYxQkZGOTEyMUNCMENFMDBDMjc2MjcgLyogRmlsZVN0
cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkVGMUJGRjgxMjFDQjBDRTAwQzI3NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTA2MDM2RjE0MzI3
RDJFMDBBQkY0QkEgLyogV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwNjAzNkMxNDMyN0QyRTAwQUJGNEJBIC8q
IFdlYktpdENTU0ZpbHRlclZhbHVlLmNwcCAqLzsgfTsKIAkJMzEwNjAzNzAxNDMyN0QyRTAwQUJG
NEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTA2MDM2RDE0MzI3RDJFMDBBQkY0QkEgLyogV2ViS2l0Q1NT
RmlsdGVyVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMzQ0NSw4ICszNDQ0LDYgQEAKIAkJOTc2RDZDODYxMjJCOEEzRDAwMUZEMUY3IC8q
IEZpbGVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCAqLzsgfTsKIAkJOTc2RDZD
ODgxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNjkxMjJCOEEzRDAwMUZEMUY3IC8qIEZp
bGVSZWFkZXIuY3BwICovOyB9OwogCQk5NzZENkM4OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJl
YWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2
RDZDNkExMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuaCAqLzsgfTsKLQkJOTc2RDZDOEIx
MjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2QzEyMkI4QTNEMDAxRkQxRjcgLyog
RmlsZVN0cmVhbVByb3h5LmNwcCAqLzsgfTsKLQkJOTc2RDZDOEMxMjJCOEEzRDAwMUZEMUY3IC8q
IEZpbGVTdHJlYW1Qcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTc2RDZDNkQxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5oICov
OyB9OwogCQk5NzZENkM4RDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NzZENkM2RTEyMkI4QTNE
MDAxRkQxRjcgLyogRmlsZVRocmVhZC5jcHAgKi87IH07CiAJCTk3NkQ2QzhFMTIyQjhBM0QwMDFG
RDFGNyAvKiBGaWxlVGhyZWFkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5NzZENkM2RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oICovOyB9
OwogCQk5NzZENkM4RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZFRhc2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzcwMTIyQjhBM0Qw
MDFGRDFGNyAvKiBGaWxlVGhyZWFkVGFzay5oICovOyB9OwpAQCAtNTg2MSw2ICs1ODU4LDggQEAK
IAkJRTFDOEJFNUQwRThCRDE1QTAwNjRDQjdEIC8qIEpTV29ya2VyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQzhCRTVDMEU4QkQxNUEwMDY0Q0I3
RCAvKiBKU1dvcmtlci5jcHAgKi87IH07CiAJCUUxQ0E1Q0JDMEU4Q0RDQUYwMEU4RUY5MCAvKiBK
U1dvcmtlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUNBNUNCQjBFOENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICov
OyB9OwogCQlFMUNBQTVDNjBFOEJEMjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQ0FBNUM1MEU4QkQyMzYwMEE3
M0VDQSAvKiBKU1dvcmtlci5oICovOyB9OworCQlFMUNERTkyMDE1MDE4RUQwMDA4NjJDQzUgLyog
QXN5bmNGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxQ0RFOTFGMTUwMThFRDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3Bw
ICovOyB9OworCQlFMUNERTkyMjE1MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNERTkyMTE1
MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmggKi87IH07CiAJCUUxRTFCRjAwMTE1
RkY2RkIwMDZGNTJDQSAvKiBXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFMUJFRkYxMTVGRjZGQjAwNkY1MkNBIC8q
IFdpbmRvd3NLZXlib2FyZENvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTFFNkVFQTQwQjYyOERBODAwNUYyRjcwIC8qIEpTSFRNTFNlbGVj
dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFFNkVFQTMwQjYyOERBODAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuY3BwICov
OyB9OwogCQlFMUU2RUVBODBCNjI4REIzMDA1RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFNkVFQTcw
QjYyOERCMzAwNUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCAqLzsgfTsKQEAgLTc2Njks
NyArNzY2OCw2IEBACiAJCTJFREYzNjlFMTIyQzk0QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVFeGNlcHRpb24uaDsgcGF0
aCA9IGZpbGVhcGkvRmlsZUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyRUYxQkZFODEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkVGMUJGRTkxMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyRUYxQkZGNjEyMUNCMEJEMDBDMjc2MjcgLyogQXN5bmNGaWxl
U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzeW5jRmlsZVN0cmVh
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUYxQkZGODEyMUNCMENFMDBDMjc2
MjcgLyogRmlsZVN0cmVhbUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGaWxlU3RyZWFtQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDYw
MzZDMTQzMjdEMkUwMEFCRjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxMDYwMzZEMTQzMjdEMkUwMEFCRjRCQSAvKiBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAz
NzksOCArMTAzNzcsNiBAQAogCQk5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZUxpc3QuaDsgcGF0aCA9IGZp
bGVhcGkvRmlsZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNjkx
MjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRmlsZVJlYWRlci5jcHA7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM2QTEyMkI4QTNEMDAxRkQx
RjcgLyogRmlsZVJlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxl
UmVhZGVyLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJOTc2RDZDNkMxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWxlU3RyZWFtUHJveHku
Y3BwOyBwYXRoID0gZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk5NzZENkM2RDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVN0cmVhbVByb3h5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVTdHJlYW1Qcm94eS5oOyBw
YXRoID0gZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJOTc2RDZDNkUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRmlsZVRocmVhZC5jcHA7IHBhdGggPSBmaWxl
YXBpL0ZpbGVUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NzZENkM2
RjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGaWxlVGhyZWFkLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVUaHJlYWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNzAxMjJCOEEzRDAwMUZEMUY3IC8qIEZp
bGVUaHJlYWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVUaHJl
YWRUYXNrLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVUaHJlYWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMjkzOCw2ICsxMjkzNCw4IEBACiAJCUUxQzhCRTVDMEU4QkQxNUEw
MDY0Q0I3RCAvKiBKU1dvcmtlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1dvcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxQ0E1Q0JC
MEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1dvcmtlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUUxQ0FBNUM1MEU4QkQyMzYwMEE3M0VDQSAvKiBKU1dvcmtlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dvcmtlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlFMUNERTkxRjE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFt
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFzeW5jRmlsZVN0cmVh
bS5jcHA7IHBhdGggPSBmaWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUUxQ0RFOTIxMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJl
YW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQXN5bmNGaWxlU3RyZWFtLmg7
IHBhdGggPSBmaWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMUUxQkVGRjExNUZGNkZCMDA2RjUyQ0EgLyogV2luZG93c0tleWJvYXJkQ29kZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2luZG93c0tleWJvYXJkQ29kZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFNkVFQTMwQjYyOERBODAwNUYyRjcw
IC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNIVE1MU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxRTZFRUE3MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBwYXRoID0gSlNIVE1MU2VsZWN0RWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTcyMTYsNiArMTcyMTQsOCBAQAogCQk5
NzZENkM1NzEyMkI4QTE4MDAxRkQxRjcgLyogZmlsZWFwaSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJRTFDREU5MUYxNTAxOEVEMDAwODYyQ0M1IC8qIEFz
eW5jRmlsZVN0cmVhbS5jcHAgKi8sCisJCQkJRTFDREU5MjExNTAxOTE2OTAwODYyQ0M1IC8qIEFz
eW5jRmlsZVN0cmVhbS5oICovLAogCQkJCTk3NkQ2QzU4MTIyQjhBM0QwMDFGRDFGNyAvKiBBc3lu
Y0ZpbGVXcml0ZXIuaCAqLywKIAkJCQk5NzZENkM3NDEyMkI4QTNEMDAxRkQxRjcgLyogQXN5bmNG
aWxlV3JpdGVyQ2xpZW50LmggKi8sCiAJCQkJOTc2RDZDNTkxMjJCOEEzRDAwMUZEMUY3IC8qIEJs
b2IuY3BwICovLApAQCAtMTcyOTUsOCArMTcyOTUsNiBAQAogCQkJCTJFREYzNjlBMTIyQzk0QjQw
MDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAgKi8sCiAJCQkJMkVERjM2OUIxMjJDOTRCNDAw
MkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi8sCiAJCQkJRTFBQjFFQkQxNEU5RTNBODAwNDQ5
RTEzIC8qIEZpbGVSZWFkZXJTeW5jLmlkbCAqLywKLQkJCQk5NzZENkM2QzEyMkI4QTNEMDAxRkQx
RjcgLyogRmlsZVN0cmVhbVByb3h5LmNwcCAqLywKLQkJCQk5NzZENkM2RDEyMkI4QTNEMDAxRkQx
RjcgLyogRmlsZVN0cmVhbVByb3h5LmggKi8sCiAJCQkJODk4Nzg1NEExMjJDQTA2NDAwM0FBQkRB
IC8qIEZpbGVTeXN0ZW1DYWxsYmFjay5oICovLAogCQkJCUUxQUIxRUJFMTRFOUUzQjIwMDQ0OUUx
MyAvKiBGaWxlU3lzdGVtQ2FsbGJhY2suaWRsICovLAogCQkJCTg5ODc4NTRCMTIyQ0EwNjQwMDNB
QUJEQSAvKiBGaWxlU3lzdGVtQ2FsbGJhY2tzLmNwcCAqLywKQEAgLTE5OTUxLDcgKzE5OTQ5LDYg
QEAKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZGMjYgLyogdGV4dCAqLywKIAkJCQlCQ0ZCMkY3
NDA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuY3BwICovLAogCQkJCUJDRkIyRjc1MDk3QTJFMUEw
MEJBNzAzRCAvKiBBcmVuYS5oICovLAotCQkJCTJFRjFCRkY2MTIxQ0IwQkQwMEMyNzYyNyAvKiBB
c3luY0ZpbGVTdHJlYW0uaCAqLywKIAkJCQk4OUQwOEQ5QzEyMjI4NDUxMDAxMjQxREYgLyogQXN5
bmNGaWxlU3lzdGVtLmNwcCAqLywKIAkJCQk4OUQwOEQ5RDEyMjI4NDUxMDAxMjQxREYgLyogQXN5
bmNGaWxlU3lzdGVtLmggKi8sCiAJCQkJODlEMDhEOUUxMjIyODQ1MTAwMTI0MURGIC8qIEFzeW5j
RmlsZVN5c3RlbUNhbGxiYWNrcy5oICovLApAQCAtMjE0MDMsNyArMjE0MDAsNiBAQAogCQkJCTUx
MkREOEY4MEQ5MUU2QUYwMDBGODlFRSAvKiBBcmNoaXZlUmVzb3VyY2VDb2xsZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0ZCMkY3NzA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZENTY4NkNBMTNBQzE4MDIwMEI2OUM2OCAvKiBBc3luY0F1ZGlvRGVj
b2Rlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkVGMUJGRjcxMjFDQjBCRDAwQzI3NjI3IC8qIEFz
eW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODlEMDhEQTAxMjIyODQ1MTAwMTI0
MURGIC8qIEFzeW5jRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODlEMDhEQTExMjIy
ODQ1MTAwMTI0MURGIC8qIEFzeW5jRmlsZVN5c3RlbUNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTc2RDZDNzcxMjJCOEEzRDAwMUZEMUY3IC8qIEFzeW5jRmlsZVdyaXRlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yMjQ2Miw3ICsyMjQ1OCw2IEBACiAJCQkJMkVERjM2OUQxMjJDOTRCNDAw
MkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRUYxQkZFQjEy
MUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkVGMUJG
RjkxMjFDQjBDRTAwQzI3NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICovLAot
CQkJCTk3NkQ2QzhDMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxNEIzRjczMEM3MjIwNDcwMDA1MzBERiAvKiBGaWxlU3lzdGVtLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4OTg3ODU2MzEyMkNBMDY0MDAzQUFCREEgLyogRmlsZVN5c3RlbUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk4OTg3ODU2NTEyMkNBMDY0MDAzQUFCREEgLyog
RmlsZVN5c3RlbUNhbGxiYWNrcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNDUwNiw2ICsyNDUwMSw3
IEBACiAJCQkJRTFCRTUxMkUwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc3RTJFMEYxMkYwRkM5QzAwQzEzMzc5IC8qIFhTU0F1ZGl0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9s
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTFDREU5MjIxNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5j
RmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTU2Nyw3ICsyNTU2Myw2IEBACiAJCQkJ
MkU3NTg0MUQxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkVERjM2OUMxMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJFRjFCRkVBMTIxQzlGNDIwMEMyNzYyNyAvKiBGaWxlU3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTk3NkQ2QzhCMTIyQjhBM0QwMDFGRDFGNyAvKiBG
aWxlU3RyZWFtUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU3RkVERTExMjEyRUU5QzAw
OTdCRTY1IC8qIEZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODk4Nzg1NjQxMjJD
QTA2NDAwM0FBQkRBIC8qIEZpbGVTeXN0ZW1DYWxsYmFja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTE2MDMwNkMwQ0M0MzYyMzAwQzhBQzI1IC8qIEZpbGVTeXN0ZW1DRi5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI3NDc2LDYgKzI3NDcxLDcgQEAKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5
NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJG
MEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENTM3
MzUyMTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlF
MUNERTkyMDE1MDE4RUQwMDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAko
cmV2aXNpb24gMTA5NzYwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTdHJlYW1Q
cm94eS5jcHA6MTA5NzYwKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJl
YW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2luY2x1ZGUg
IkZpbGVTdHJlYW1Qcm94eS5oIgorCisjaW5jbHVkZSAiQmxvYi5oIgorI2luY2x1ZGUgIkNyb3Nz
VGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIkZpbGVTdHJlYW0uaCIKKyNpbmNsdWRlICJGaWxlU3Ry
ZWFtQ2xpZW50LmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZC5oIgorI2luY2x1ZGUgIkZpbGVUaHJl
YWRUYXNrLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRF
eGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIEZpbGVT
dHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKKyAgICA6IEFzeW5jRmlsZVN0cmVhbShjbGll
bnQpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc3RyZWFtKEZpbGVTdHJlYW06
OmNyZWF0ZSgpKQoreworfQorCitQYXNzUmVmUHRyPEZpbGVTdHJlYW1Qcm94eT4gRmlsZVN0cmVh
bVByb3h5OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVh
bUNsaWVudCogY2xpZW50KQoreworICAgIFJlZlB0cjxGaWxlU3RyZWFtUHJveHk+IHByb3h5ID0g
YWRvcHRSZWYobmV3IEZpbGVTdHJlYW1Qcm94eShjb250ZXh0LCBjbGllbnQpKTsKKworICAgIC8v
IEhvbGQgYSByZWZlcmVuY2Ugc28gdGhhdCB0aGUgaW5zdGFuY2Ugd2lsbCBub3QgZ2V0IGRlbGV0
ZWQgd2hpbGUgdGhlcmUgYXJlIHRhc2tzIG9uIHRoZSBmaWxlIHRocmVhZC4KKyAgICAvLyBUaGlz
IGlzIGJhbGFuY2VkIGJ5IHRoZSBkZXJlZiBpbiBkZXJlZlByb3h5T25Db250ZXh0IGJlbG93Lgor
ICAgIHByb3h5LT5yZWYoKTsKKworICAgIHByb3h5LT5maWxlVGhyZWFkKCktPnBvc3RUYXNrKGNy
ZWF0ZUZpbGVUaHJlYWRUYXNrKHByb3h5LmdldCgpLCAmRmlsZVN0cmVhbVByb3h5OjpzdGFydE9u
RmlsZVRocmVhZCkpOworCisgICAgcmV0dXJuIHByb3h5LnJlbGVhc2UoKTsKK30KKworRmlsZVN0
cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVByb3h5KCkKK3sKK30KKworRmlsZVRocmVhZCogRmlsZVN0
cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0LT5pc0NvbnRl
eHRUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fY29udGV4dC0+ZmlsZVRocmVhZCgpKTsKKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5maWxlVGhyZWFkKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFN0YXJ0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5KQoreworICAg
IGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkU3RhcnQo
KTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0YXJ0T25GaWxlVGhyZWFkKCkKK3sKKyAg
ICBpZiAoIWNsaWVudCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9zdHJlYW0tPnN0YXJ0KCk7
CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZFN0YXJ0LCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5
OjpzdG9wKCkKK3sKKyAgICAvLyBDbGVhciB0aGUgY2xpZW50IHNvIHRoYXQgd2Ugd29uJ3QgYmUg
Y2FsbGluZyBjYWxsYmFja3Mgb24gdGhlIGNsaWVudC4KKyAgICBzZXRDbGllbnQoMCk7CisKKyAg
ICBmaWxlVGhyZWFkKCktPnVuc2NoZWR1bGVUYXNrcyhtX3N0cmVhbS5nZXQoKSk7CisgICAgZmls
ZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmlsZVN0cmVh
bVByb3h5OjpzdG9wT25GaWxlVGhyZWFkKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlcmVmUHJveHlP
bkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHkp
Cit7CisgICAgQVNTRVJUKHByb3h5LT5oYXNPbmVSZWYoKSk7CisgICAgcHJveHktPmRlcmVmKCk7
Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpzdG9wT25GaWxlVGhyZWFkKCkKK3sKKyAgICBt
X3N0cmVhbS0+c3RvcCgpOworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tU
YXNrKCZkZXJlZlByb3h5T25Db250ZXh0LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7
Cit9CisKK3N0YXRpYyB2b2lkIGRpZEdldFNpemUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZp
bGVTdHJlYW1Qcm94eSogcHJveHksIGxvbmcgbG9uZyBzaXplKQoreworICAgIGlmIChwcm94eS0+
Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkR2V0U2l6ZShzaXplKTsKK30K
Kwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmdldFNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBkb3Vi
bGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRh
c2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94eTo6Z2V0U2l6ZU9u
RmlsZVRocmVhZCwgcGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSk7Cit9CisKK3ZvaWQg
RmlsZVN0cmVhbVByb3h5OjpnZXRTaXplT25GaWxlVGhyZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwg
ZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKK3sKKyAgICBsb25nIGxvbmcgc2l6ZSA9
IG1fc3RyZWFtLT5nZXRTaXplKHBhdGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAg
bV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZEdldFNpemUsIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHNpemUpKTsKK30KKworc3RhdGljIHZvaWQgZGlkT3Bl
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgYm9vbCBz
dWNjZXNzKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGll
bnQoKS0+ZGlkT3BlbihzdWNjZXNzKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5G
b3JSZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxl
bmd0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNr
KHRoaXMsICZGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkT25GaWxlVGhyZWFkLCBwYXRoLCBv
ZmZzZXQsIGxlbmd0aCkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6b3BlbkZvclJlYWRP
bkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxv
bmcgbGVuZ3RoKQoreworICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT5vcGVuRm9yUmVhZChw
YXRoLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJmRpZE9wZW4sIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHN1Y2Nlc3Mp
KTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcm
IHBhdGgpCit7CisgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzaygKKyAgICAgICAgY3JlYXRlRmls
ZVRocmVhZFRhc2sodGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVTdHJl
YW1Qcm94eTo6b3BlbkZvcldyaXRlT25GaWxlVGhyZWFkLCBwYXRoKSk7Cit9CisKK3ZvaWQgRmls
ZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGVPbkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT5vcGVuRm9yV3JpdGUocGF0aCk7Cisg
ICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZE9wZW4sIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHN1Y2Nlc3MpKTsKK30KKwordm9pZCBGaWxlU3RyZWFt
UHJveHk6OmNsb3NlKCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVU
aHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFtUHJveHk6OmNsb3NlT25GaWxlVGhyZWFkKSk7Cit9
CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpjbG9zZU9uRmlsZVRocmVhZCgpCit7CisgICAgbV9z
dHJlYW0tPmNsb3NlKCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJlYWQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGludCBieXRlc1JlYWQpCit7CisgICAg
aWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRSZWFkKGJ5
dGVzUmVhZCk7Cit9CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5OjpyZWFkKGNoYXIqIGJ1ZmZlciwg
aW50IGxlbmd0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKAorICAgICAgICBjcmVh
dGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmlsZVN0cmVhbVByb3h5OjpyZWFkT25GaWxlVGhyZWFk
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGJ1
ZmZlciksIGxlbmd0aCkpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6cmVhZE9uRmlsZVRo
cmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCit7CisgICAgaW50IGJ5dGVzUmVhZCA9IG1f
c3RyZWFtLT5yZWFkKGJ1ZmZlciwgbGVuZ3RoKTsKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmZGlkUmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwg
Ynl0ZXNSZWFkKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFdyaXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBpbnQgYnl0ZXNXcml0dGVuKQoreworICAg
IGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkV3JpdGUo
Ynl0ZXNXcml0dGVuKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OndyaXRlKGNvbnN0IEtV
UkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCkKK3sKKyAgICBmaWxl
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFt
UHJveHk6OndyaXRlT25GaWxlVGhyZWFkLCBibG9iVVJMLCBwb3NpdGlvbiwgbGVuZ3RoKSk7Cit9
CisKK3ZvaWQgRmlsZVN0cmVhbVByb3h5Ojp3cml0ZU9uRmlsZVRocmVhZChjb25zdCBLVVJMJiBi
bG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpCit7CisgICAgaW50IGJ5dGVz
V3JpdHRlbiA9IG1fc3RyZWFtLT53cml0ZShibG9iVVJMLCBwb3NpdGlvbiwgbGVuZ3RoKTsKKyAg
ICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkV3JpdGUsIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIGJ5dGVzV3JpdHRlbikpOworfQorCitzdGF0aWMgdm9p
ZCBkaWRUcnVuY2F0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBw
cm94eSwgYm9vbCBzdWNjZXNzKQoreworICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCisgICAgICAg
IHByb3h5LT5jbGllbnQoKS0+ZGlkVHJ1bmNhdGUoc3VjY2Vzcyk7Cit9CisKK3ZvaWQgRmlsZVN0
cmVhbVByb3h5Ojp0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pCit7CisgICAgZmlsZVRocmVh
ZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmlsZVN0cmVhbVByb3h5
Ojp0cnVuY2F0ZU9uRmlsZVRocmVhZCwgcG9zaXRpb24pKTsKK30KKwordm9pZCBGaWxlU3RyZWFt
UHJveHk6OnRydW5jYXRlT25GaWxlVGhyZWFkKGxvbmcgbG9uZyBwb3NpdGlvbikKK3sKKyAgICBi
b29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+dHJ1bmNhdGUocG9zaXRpb24pOworICAgIG1fY29udGV4
dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRUcnVuY2F0ZSwgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyh0aGlzKSwgc3VjY2VzcykpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lTVEVNKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcAkocmV2aXNpb24gMTA5
NzYwKQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKQEAgLTMzLDcgKzMzLDcgQEAKIAogI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklM
RV9TWVNURU0pCiAKLSNpbmNsdWRlICJGaWxlU3RyZWFtUHJveHkuaCIKKyNpbmNsdWRlICJBc3lu
Y0ZpbGVTdHJlYW0uaCIKIAogI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJDcm9zc1RocmVh
ZFRhc2suaCIKQEAgLTQ2LDQ0ICs0Niw0NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWlu
bGluZSBGaWxlU3RyZWFtUHJveHk6OkZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCi0gICAgOiBBc3luY0ZpbGVT
dHJlYW0oY2xpZW50KQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCitpbmxpbmUgQXN5bmNGaWxl
U3RyZWFtOjpBc3luY0ZpbGVTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
RmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiAgICAg
LCBtX3N0cmVhbShGaWxlU3RyZWFtOjpjcmVhdGUoKSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkK
IHsKIH0KIAotUGFzc1JlZlB0cjxGaWxlU3RyZWFtUHJveHk+IEZpbGVTdHJlYW1Qcm94eTo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNs
aWVudCkKK1Bhc3NSZWZQdHI8QXN5bmNGaWxlU3RyZWFtPiBBc3luY0ZpbGVTdHJlYW06OmNyZWF0
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGll
bnQpCiB7Ci0gICAgUmVmUHRyPEZpbGVTdHJlYW1Qcm94eT4gcHJveHkgPSBhZG9wdFJlZihuZXcg
RmlsZVN0cmVhbVByb3h5KGNvbnRleHQsIGNsaWVudCkpOworICAgIFJlZlB0cjxBc3luY0ZpbGVT
dHJlYW0+IHByb3h5ID0gYWRvcHRSZWYobmV3IEFzeW5jRmlsZVN0cmVhbShjb250ZXh0LCBjbGll
bnQpKTsKIAogICAgIC8vIEhvbGQgYSByZWZlcmVuY2Ugc28gdGhhdCB0aGUgaW5zdGFuY2Ugd2ls
bCBub3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlcmUgYXJlIHRhc2tzIG9uIHRoZSBmaWxlIHRocmVh
ZC4KICAgICAvLyBUaGlzIGlzIGJhbGFuY2VkIGJ5IHRoZSBkZXJlZiBpbiBkZXJlZlByb3h5T25D
b250ZXh0IGJlbG93LgogICAgIHByb3h5LT5yZWYoKTsKIAotICAgIHByb3h5LT5maWxlVGhyZWFk
KCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHByb3h5LmdldCgpLCAmRmlsZVN0cmVh
bVByb3h5OjpzdGFydE9uRmlsZVRocmVhZCkpOworICAgIHByb3h5LT5maWxlVGhyZWFkKCktPnBv
c3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHByb3h5LmdldCgpLCAmQXN5bmNGaWxlU3RyZWFt
OjpzdGFydE9uRmlsZVRocmVhZCkpOwogCiAgICAgcmV0dXJuIHByb3h5LnJlbGVhc2UoKTsKIH0K
IAotRmlsZVN0cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVByb3h5KCkKK0FzeW5jRmlsZVN0cmVhbTo6
fkFzeW5jRmlsZVN0cmVhbSgpCiB7CiB9CiAKLUZpbGVUaHJlYWQqIEZpbGVTdHJlYW1Qcm94eTo6
ZmlsZVRocmVhZCgpCitGaWxlVGhyZWFkKiBBc3luY0ZpbGVTdHJlYW06OmZpbGVUaHJlYWQoKQog
ewogICAgIEFTU0VSVChtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKICAgICBBU1NFUlQo
bV9jb250ZXh0LT5maWxlVGhyZWFkKCkpOwogICAgIHJldHVybiBtX2NvbnRleHQtPmZpbGVUaHJl
YWQoKTsKIH0KIAotc3RhdGljIHZvaWQgZGlkU3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEZpbGVTdHJlYW1Qcm94eSogcHJveHkpCitzdGF0aWMgdm9pZCBkaWRTdGFydChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3RyZWFtKiBwcm94eSkKIHsKICAgICBpZiAocHJveHkt
PmNsaWVudCgpKQogICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZFN0YXJ0KCk7CiB9CiAKLXZv
aWQgRmlsZVN0cmVhbVByb3h5OjpzdGFydE9uRmlsZVRocmVhZCgpCit2b2lkIEFzeW5jRmlsZVN0
cmVhbTo6c3RhcnRPbkZpbGVUaHJlYWQoKQogewogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTkxLDEzMiArOTEsMTMyIEBAIHZvaWQgRmlsZVN0cmVhbVByb3h5OjpzdGFy
dE9uRmlsZVRocmVhZCgKICAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFz
aygmZGlkU3RhcnQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKIH0KIAotdm9pZCBG
aWxlU3RyZWFtUHJveHk6OnN0b3AoKQordm9pZCBBc3luY0ZpbGVTdHJlYW06OnN0b3AoKQogewog
ICAgIC8vIENsZWFyIHRoZSBjbGllbnQgc28gdGhhdCB3ZSB3b24ndCBiZSBjYWxsaW5nIGNhbGxi
YWNrcyBvbiB0aGUgY2xpZW50LgogICAgIHNldENsaWVudCgwKTsKIAogICAgIGZpbGVUaHJlYWQo
KS0+dW5zY2hlZHVsZVRhc2tzKG1fc3RyZWFtLmdldCgpKTsKLSAgICBmaWxlVGhyZWFkKCktPnBv
c3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFtUHJveHk6OnN0b3BP
bkZpbGVUaHJlYWQpKTsKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJl
YWRUYXNrKHRoaXMsICZBc3luY0ZpbGVTdHJlYW06OnN0b3BPbkZpbGVUaHJlYWQpKTsKIH0KIAot
c3RhdGljIHZvaWQgZGVyZWZQcm94eU9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RmlsZVN0cmVhbVByb3h5KiBwcm94eSkKK3N0YXRpYyB2b2lkIGRlcmVmUHJveHlPbkNvbnRleHQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEFzeW5jRmlsZVN0cmVhbSogcHJveHkpCiB7CiAgICAg
QVNTRVJUKHByb3h5LT5oYXNPbmVSZWYoKSk7CiAgICAgcHJveHktPmRlcmVmKCk7CiB9CiAKLXZv
aWQgRmlsZVN0cmVhbVByb3h5OjpzdG9wT25GaWxlVGhyZWFkKCkKK3ZvaWQgQXN5bmNGaWxlU3Ry
ZWFtOjpzdG9wT25GaWxlVGhyZWFkKCkKIHsKICAgICBtX3N0cmVhbS0+c3RvcCgpOwogICAgIG1f
Y29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkZXJlZlByb3h5T25Db250ZXh0
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZEdl
dFNpemUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGxv
bmcgbG9uZyBzaXplKQorc3RhdGljIHZvaWQgZGlkR2V0U2l6ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgQXN5bmNGaWxlU3RyZWFtKiBwcm94eSwgbG9uZyBsb25nIHNpemUpCiB7CiAgICAgaWYg
KHByb3h5LT5jbGllbnQoKSkKICAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRHZXRTaXplKHNp
emUpOwogfQogCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6Z2V0U2l6ZShjb25zdCBTdHJpbmcmIHBh
dGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCit2b2lkIEFzeW5jRmlsZVN0cmVh
bTo6Z2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlv
blRpbWUpCiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFz
ayh0aGlzLCAmRmlsZVN0cmVhbVByb3h5OjpnZXRTaXplT25GaWxlVGhyZWFkLCBwYXRoLCBleHBl
Y3RlZE1vZGlmaWNhdGlvblRpbWUpKTsKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0
ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZBc3luY0ZpbGVTdHJlYW06OmdldFNpemVPbkZpbGVUaHJl
YWQsIHBhdGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOwogfQogCi12b2lkIEZpbGVTdHJl
YW1Qcm94eTo6Z2V0U2l6ZU9uRmlsZVRocmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBl
eHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6Z2V0U2l6ZU9u
RmlsZVRocmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlv
blRpbWUpCiB7CiAgICAgbG9uZyBsb25nIHNpemUgPSBtX3N0cmVhbS0+Z2V0U2l6ZShwYXRoLCBl
eHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOwogICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRl
Q2FsbGJhY2tUYXNrKCZkaWRHZXRTaXplLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBz
aXplKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZE9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGJvb2wgc3VjY2VzcykKK3N0YXRpYyB2b2lkIGRpZE9w
ZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEFzeW5jRmlsZVN0cmVhbSogcHJveHksIGJvb2wg
c3VjY2VzcykKIHsKICAgICBpZiAocHJveHktPmNsaWVudCgpKQogICAgICAgICBwcm94eS0+Y2xp
ZW50KCktPmRpZE9wZW4oc3VjY2Vzcyk7CiB9CiAKLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpvcGVu
Rm9yUmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBs
ZW5ndGgpCit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvclJlYWQoY29uc3QgU3RyaW5nJiBw
YXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQogewotICAgIGZpbGVUaHJl
YWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94
eTo6b3BlbkZvclJlYWRPbkZpbGVUaHJlYWQsIHBhdGgsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAg
ZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmQXN5bmNG
aWxlU3RyZWFtOjpvcGVuRm9yUmVhZE9uRmlsZVRocmVhZCwgcGF0aCwgb2Zmc2V0LCBsZW5ndGgp
KTsKIH0KIAotdm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkT25GaWxlVGhyZWFkKGNv
bnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKK3Zv
aWQgQXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZE9uRmlsZVRocmVhZChjb25zdCBTdHJpbmcm
IHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCiB7CiAgICAgYm9vbCBz
dWNjZXNzID0gbV9zdHJlYW0tPm9wZW5Gb3JSZWFkKHBhdGgsIG9mZnNldCwgbGVuZ3RoKTsKICAg
ICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkT3BlbiwgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgc3VjY2VzcykpOwogfQogCi12b2lkIEZpbGVTdHJlYW1Q
cm94eTo6b3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3ZvaWQgQXN5bmNGaWxlU3Ry
ZWFtOjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGZpbGVUaHJlYWQo
KS0+cG9zdFRhc2soCiAgICAgICAgIGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JXcml0ZU9uRmls
ZVRocmVhZCwgcGF0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQXN5bmNGaWxl
U3RyZWFtOjpvcGVuRm9yV3JpdGVPbkZpbGVUaHJlYWQsIHBhdGgpKTsKIH0KIAotdm9pZCBGaWxl
U3RyZWFtUHJveHk6Om9wZW5Gb3JXcml0ZU9uRmlsZVRocmVhZChjb25zdCBTdHJpbmcmIHBhdGgp
Cit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlT25GaWxlVGhyZWFkKGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+b3BlbkZvcldyaXRl
KHBhdGgpOwogICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRP
cGVuLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBzdWNjZXNzKSk7CiB9CiAKLXZvaWQg
RmlsZVN0cmVhbVByb3h5OjpjbG9zZSgpCit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6Y2xvc2UoKQog
ewotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywg
JkZpbGVTdHJlYW1Qcm94eTo6Y2xvc2VPbkZpbGVUaHJlYWQpKTsKKyAgICBmaWxlVGhyZWFkKCkt
PnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZBc3luY0ZpbGVTdHJlYW06OmNs
b3NlT25GaWxlVGhyZWFkKSk7CiB9CiAKLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpjbG9zZU9uRmls
ZVRocmVhZCgpCit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6Y2xvc2VPbkZpbGVUaHJlYWQoKQogewog
ICAgIG1fc3RyZWFtLT5jbG9zZSgpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRSZWFkKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBpbnQgYnl0ZXNSZWFkKQor
c3RhdGljIHZvaWQgZGlkUmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3Ry
ZWFtKiBwcm94eSwgaW50IGJ5dGVzUmVhZCkKIHsKICAgICBpZiAocHJveHktPmNsaWVudCgpKQog
ICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZFJlYWQoYnl0ZXNSZWFkKTsKIH0KIAotdm9pZCBG
aWxlU3RyZWFtUHJveHk6OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQordm9pZCBBc3lu
Y0ZpbGVTdHJlYW06OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogewogICAgIGZpbGVU
aHJlYWQoKS0+cG9zdFRhc2soCi0gICAgICAgIGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZG
aWxlU3RyZWFtUHJveHk6OnJlYWRPbkZpbGVUaHJlYWQsCisgICAgICAgIGNyZWF0ZUZpbGVUaHJl
YWRUYXNrKHRoaXMsICZBc3luY0ZpbGVTdHJlYW06OnJlYWRPbkZpbGVUaHJlYWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoYnVmZmVyKSwgbGVu
Z3RoKSk7CiB9CiAKLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpyZWFkT25GaWxlVGhyZWFkKGNoYXIq
IGJ1ZmZlciwgaW50IGxlbmd0aCkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjpyZWFkT25GaWxlVGhy
ZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKIHsKICAgICBpbnQgYnl0ZXNSZWFkID0gbV9z
dHJlYW0tPnJlYWQoYnVmZmVyLCBsZW5ndGgpOwogICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZkaWRSZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBi
eXRlc1JlYWQpKTsKIH0KIAotc3RhdGljIHZvaWQgZGlkV3JpdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGludCBieXRlc1dyaXR0ZW4pCitzdGF0aWMg
dm9pZCBkaWRXcml0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxlU3RyZWFtKiBw
cm94eSwgaW50IGJ5dGVzV3JpdHRlbikKIHsKICAgICBpZiAocHJveHktPmNsaWVudCgpKQogICAg
ICAgICBwcm94eS0+Y2xpZW50KCktPmRpZFdyaXRlKGJ5dGVzV3JpdHRlbik7CiB9CiAKLXZvaWQg
RmlsZVN0cmVhbVByb3h5Ojp3cml0ZShjb25zdCBLVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9z
aXRpb24sIGludCBsZW5ndGgpCit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6d3JpdGUoY29uc3QgS1VS
TCYgYmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKQogewotICAgIGZpbGVU
aHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Q
cm94eTo6d3JpdGVPbkZpbGVUaHJlYWQsIGJsb2JVUkwsIHBvc2l0aW9uLCBsZW5ndGgpKTsKKyAg
ICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZBc3lu
Y0ZpbGVTdHJlYW06OndyaXRlT25GaWxlVGhyZWFkLCBibG9iVVJMLCBwb3NpdGlvbiwgbGVuZ3Ro
KSk7CiB9CiAKLXZvaWQgRmlsZVN0cmVhbVByb3h5Ojp3cml0ZU9uRmlsZVRocmVhZChjb25zdCBL
VVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpCit2b2lkIEFzeW5j
RmlsZVN0cmVhbTo6d3JpdGVPbkZpbGVUaHJlYWQoY29uc3QgS1VSTCYgYmxvYlVSTCwgbG9uZyBs
b25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKQogewogICAgIGludCBieXRlc1dyaXR0ZW4gPSBtX3N0
cmVhbS0+d3JpdGUoYmxvYlVSTCwgcG9zaXRpb24sIGxlbmd0aCk7CiAgICAgbV9jb250ZXh0LT5w
b3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZFdyaXRlLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKHRoaXMpLCBieXRlc1dyaXR0ZW4pKTsKIH0KIAotc3RhdGljIHZvaWQgZGlkVHJ1bmNhdGUo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGJvb2wgc3Vj
Y2VzcykKK3N0YXRpYyB2b2lkIGRpZFRydW5jYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBB
c3luY0ZpbGVTdHJlYW0qIHByb3h5LCBib29sIHN1Y2Nlc3MpCiB7CiAgICAgaWYgKHByb3h5LT5j
bGllbnQoKSkKICAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRUcnVuY2F0ZShzdWNjZXNzKTsK
IH0KIAotdm9pZCBGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbikK
K3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjp0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pCiB7Ci0g
ICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmls
ZVN0cmVhbVByb3h5Ojp0cnVuY2F0ZU9uRmlsZVRocmVhZCwgcG9zaXRpb24pKTsKKyAgICBmaWxl
VGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZBc3luY0ZpbGVT
dHJlYW06OnRydW5jYXRlT25GaWxlVGhyZWFkLCBwb3NpdGlvbikpOwogfQogCi12b2lkIEZpbGVT
dHJlYW1Qcm94eTo6dHJ1bmNhdGVPbkZpbGVUaHJlYWQobG9uZyBsb25nIHBvc2l0aW9uKQordm9p
ZCBBc3luY0ZpbGVTdHJlYW06OnRydW5jYXRlT25GaWxlVGhyZWFkKGxvbmcgbG9uZyBwb3NpdGlv
bikKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+dHJ1bmNhdGUocG9zaXRpb24pOwog
ICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRUcnVuY2F0ZSwg
QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgc3VjY2VzcykpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCShyZXZpc2lvbiAxMDk3NjApCShmcm9tIFNv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5Lmg6MTA5NzYwKQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIEZpbGVTdHJlYW1Qcm94eV9oCisjZGVmaW5lIEZpbGVTdHJlYW1Qcm94
eV9oCisKKyNpZiBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lTVEVNKQorCisjaW5jbHVk
ZSAiQXN5bmNGaWxlU3RyZWFtLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEZpbGVTdHJl
YW07CitjbGFzcyBGaWxlVGhyZWFkOworY2xhc3MgS1VSTDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CisKKy8vIEEgcHJveHkgbW9kdWxlIHRoYXQgYXN5bmNocm9ub3VzbHkgY2FsbHMg
Y29ycmVzcG9uZGluZyBGaWxlU3RyZWFtIG1ldGhvZHMgb24gdGhlIGZpbGUgdGhyZWFkLiAgTm90
ZTogeW91IG11c3QgY2FsbCBzdG9wKCkgZmlyc3QgYW5kIHRoZW4gcmVsZWFzZSB0aGUgcmVmZXJl
bmNlIHRvIGRlc3RydWN0IHRoZSBGaWxlU3RyZWFtUHJveHkgaW5zdGFuY2UuCisvLyBGSVhNRTog
TG9naWNhbGx5LCB0aGlzIGNsYXNzIGlzIHBhcnQgb2YgcGxhdGZvcm0uIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgaXMgd2hhdCBrZWVwcyBpdCBvdXRzaWRlIGZvciBub3cuCitjbGFzcyBGaWxlU3Ry
ZWFtUHJveHkgOiBwdWJsaWMgQXN5bmNGaWxlU3RyZWFtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGaWxlU3RyZWFtUHJveHk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRmlsZVN0cmVhbUNsaWVudCopOworICAgIHZpcnR1YWwgfkZpbGVTdHJlYW1Qcm94eSgpOwor
CisgICAgdmlydHVhbCB2b2lkIGdldFNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhw
ZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgb3BlbkZvclJlYWQoY29u
c3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdmly
dHVhbCB2b2lkIGNsb3NlKCk7CisgICAgdmlydHVhbCB2b2lkIHJlYWQoY2hhciogYnVmZmVyLCBp
bnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd3JpdGUoY29uc3QgS1VSTCYgYmxvYlVSTCwg
bG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJ1bmNh
dGUobG9uZyBsb25nIHBvc2l0aW9uKTsKKworICAgIC8vIFN0b3BzIHRoZSBwcm94eSBhbmQgc2No
ZWR1bGVzIGl0IHRvIGJlIGRlc3RydWN0ZWQuIEFsbCB0aGUgcGVuZGluZyB0YXNrcyB3aWxsIGJl
IGFib3J0ZWQgYW5kIHRoZSBmaWxlIHN0cmVhbSB3aWxsIGJlIGNsb3NlZC4KKyAgICAvLyBOb3Rl
OiB0aGUgY2FsbGVyIHNob3VsZCBkZXJlZiB0aGUgaW5zdGFuY2UgaW1tZWRpYXRlbHkgYWZ0ZXIg
Y2FsbGluZyBzdG9wKCkuCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworcHJpdmF0ZToKKyAg
ICBGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1DbGll
bnQqKTsKKworICAgIEZpbGVUaHJlYWQqIGZpbGVUaHJlYWQoKTsKKworICAgIC8vIENhbGxlZCBv
biBGaWxlIHRocmVhZC4KKyAgICB2b2lkIHN0YXJ0T25GaWxlVGhyZWFkKCk7CisgICAgdm9pZCBz
dG9wT25GaWxlVGhyZWFkKCk7CisgICAgdm9pZCBnZXRTaXplT25GaWxlVGhyZWFkKGNvbnN0IFN0
cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CisgICAgdm9pZCBv
cGVuRm9yUmVhZE9uRmlsZVRocmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZz
ZXQsIGxvbmcgbG9uZyBsZW5ndGgpOworICAgIHZvaWQgb3BlbkZvcldyaXRlT25GaWxlVGhyZWFk
KGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgdm9pZCBjbG9zZU9uRmlsZVRocmVhZCgpOworICAg
IHZvaWQgcmVhZE9uRmlsZVRocmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpOworICAgIHZv
aWQgd3JpdGVPbkZpbGVUaHJlYWQoY29uc3QgS1VSTCYgYmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0
aW9uLCBpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIHRydW5jYXRlT25GaWxlVGhyZWFkKGxvbmcgbG9u
ZyBwb3NpdGlvbik7CisKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9jb250
ZXh0OworICAgIFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVhbTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNU
RU0pCisKKyNlbmRpZiAvLyBGaWxlU3RyZWFtUHJveHlfaApJbmRleDogU291cmNlL1dlYkNvcmUv
ZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9m
aWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCShyZXZpc2lvbiAxMDk3NjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjksNDUg
KzI5LDQ1IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgRmlsZVN0cmVhbVByb3h5
X2gKLSNkZWZpbmUgRmlsZVN0cmVhbVByb3h5X2gKKyNpZm5kZWYgQXN5bmNGaWxlU3RyZWFtX2gK
KyNkZWZpbmUgQXN5bmNGaWxlU3RyZWFtX2gKIAogI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUo
RklMRV9TWVNURU0pCiAKLSNpbmNsdWRlICJBc3luY0ZpbGVTdHJlYW0uaCIKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKIGNsYXNzIEZpbGVTdHJlYW07CiBjbGFz
cyBGaWxlVGhyZWFkOwogY2xhc3MgS1VSTDsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7
CiAKLS8vIEEgcHJveHkgbW9kdWxlIHRoYXQgYXN5bmNocm9ub3VzbHkgY2FsbHMgY29ycmVzcG9u
ZGluZyBGaWxlU3RyZWFtIG1ldGhvZHMgb24gdGhlIGZpbGUgdGhyZWFkLiAgTm90ZTogeW91IG11
c3QgY2FsbCBzdG9wKCkgZmlyc3QgYW5kIHRoZW4gcmVsZWFzZSB0aGUgcmVmZXJlbmNlIHRvIGRl
c3RydWN0IHRoZSBGaWxlU3RyZWFtUHJveHkgaW5zdGFuY2UuCi0vLyBGSVhNRTogTG9naWNhbGx5
LCB0aGlzIGNsYXNzIGlzIHBhcnQgb2YgcGxhdGZvcm0uIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
aXMgd2hhdCBrZWVwcyBpdCBvdXRzaWRlIGZvciBub3cuCi1jbGFzcyBGaWxlU3RyZWFtUHJveHkg
OiBwdWJsaWMgQXN5bmNGaWxlU3RyZWFtIHsKK2NsYXNzIEFzeW5jRmlsZVN0cmVhbSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEFzeW5jRmlsZVN0cmVhbT4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEZpbGVTdHJlYW1Qcm94eT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBG
aWxlU3RyZWFtQ2xpZW50Kik7Ci0gICAgdmlydHVhbCB+RmlsZVN0cmVhbVByb3h5KCk7CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8QXN5bmNGaWxlU3RyZWFtPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEZpbGVTdHJlYW1DbGllbnQqKTsKKyAgICB+QXN5bmNGaWxlU3RyZWFtKCk7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBl
Y3RlZE1vZGlmaWNhdGlvblRpbWUpOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuRm9yUmVhZChjb25z
dCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOwotICAg
IHZpcnR1YWwgdm9pZCBvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xvc2UoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZChjaGFyKiBidWZmZXIsIGlu
dCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZShjb25zdCBLVVJMJiBibG9iVVJMLCBs
b25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCB0cnVuY2F0
ZShsb25nIGxvbmcgcG9zaXRpb24pOworICAgIHZvaWQgZ2V0U2l6ZShjb25zdCBTdHJpbmcmIHBh
dGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgIHZvaWQgb3BlbkZvclJl
YWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3Ro
KTsKKyAgICB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIHZvaWQg
Y2xvc2UoKTsKKyAgICB2b2lkIHJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKTsKKyAgICB2
b2lkIHdyaXRlKGNvbnN0IEtVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxl
bmd0aCk7CisgICAgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pOwogCiAgICAgLy8g
U3RvcHMgdGhlIHByb3h5IGFuZCBzY2hlZHVsZXMgaXQgdG8gYmUgZGVzdHJ1Y3RlZC4gQWxsIHRo
ZSBwZW5kaW5nIHRhc2tzIHdpbGwgYmUgYWJvcnRlZCBhbmQgdGhlIGZpbGUgc3RyZWFtIHdpbGwg
YmUgY2xvc2VkLgogICAgIC8vIE5vdGU6IHRoZSBjYWxsZXIgc2hvdWxkIGRlcmVmIHRoZSBpbnN0
YW5jZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHN0b3AoKS4KLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpOworICAgIHZvaWQgc3RvcCgpOworCisgICAgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50
KCkgY29uc3QgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICB2b2lkIHNldENsaWVudChGaWxlU3Ry
ZWFtQ2xpZW50KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KIAogcHJpdmF0ZToKLSAg
ICBGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1DbGll
bnQqKTsKKyAgICBBc3luY0ZpbGVTdHJlYW0oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVT
dHJlYW1DbGllbnQqKTsKIAogICAgIEZpbGVUaHJlYWQqIGZpbGVUaHJlYWQoKTsKIApAQCAtODQs
MTAgKzg0LDEyIEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gbV9jb250ZXh0OwogICAgIFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVhbTsKKworICAgIEZp
bGVTdHJlYW1DbGllbnQqIG1fY2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKIAotI2VuZGlm
IC8vIEZpbGVTdHJlYW1Qcm94eV9oCisjZW5kaWYgLy8gQXN5bmNGaWxlU3RyZWFtX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAJKHJldmlzaW9uIDEw
OTc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSwyMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
Ci0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJGaWxlU3RyZWFt
UHJveHkuaCIKLQotI2luY2x1ZGUgIkJsb2IuaCIKLSNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2su
aCIKLSNpbmNsdWRlICJGaWxlU3RyZWFtLmgiCi0jaW5jbHVkZSAiRmlsZVN0cmVhbUNsaWVudC5o
IgotI2luY2x1ZGUgIkZpbGVUaHJlYWQuaCIKLSNpbmNsdWRlICJGaWxlVGhyZWFkVGFzay5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlubGluZSBGaWxlU3RyZWFtUHJveHk6
OkZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3Ry
ZWFtQ2xpZW50KiBjbGllbnQpCi0gICAgOiBBc3luY0ZpbGVTdHJlYW0oY2xpZW50KQotICAgICwg
bV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3N0cmVhbShGaWxlU3RyZWFtOjpjcmVhdGUoKSkK
LXsKLX0KLQotUGFzc1JlZlB0cjxGaWxlU3RyZWFtUHJveHk+IEZpbGVTdHJlYW1Qcm94eTo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNs
aWVudCkKLXsKLSAgICBSZWZQdHI8RmlsZVN0cmVhbVByb3h5PiBwcm94eSA9IGFkb3B0UmVmKG5l
dyBGaWxlU3RyZWFtUHJveHkoY29udGV4dCwgY2xpZW50KSk7Ci0KLSAgICAvLyBIb2xkIGEgcmVm
ZXJlbmNlIHNvIHRoYXQgdGhlIGluc3RhbmNlIHdpbGwgbm90IGdldCBkZWxldGVkIHdoaWxlIHRo
ZXJlIGFyZSB0YXNrcyBvbiB0aGUgZmlsZSB0aHJlYWQuCi0gICAgLy8gVGhpcyBpcyBiYWxhbmNl
ZCBieSB0aGUgZGVyZWYgaW4gZGVyZWZQcm94eU9uQ29udGV4dCBiZWxvdy4KLSAgICBwcm94eS0+
cmVmKCk7Ci0KLSAgICBwcm94eS0+ZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhy
ZWFkVGFzayhwcm94eS5nZXQoKSwgJkZpbGVTdHJlYW1Qcm94eTo6c3RhcnRPbkZpbGVUaHJlYWQp
KTsKLQotICAgIHJldHVybiBwcm94eS5yZWxlYXNlKCk7Ci19Ci0KLUZpbGVTdHJlYW1Qcm94eTo6
fkZpbGVTdHJlYW1Qcm94eSgpCi17Ci19Ci0KLUZpbGVUaHJlYWQqIEZpbGVTdHJlYW1Qcm94eTo6
ZmlsZVRocmVhZCgpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkp
OwotICAgIEFTU0VSVChtX2NvbnRleHQtPmZpbGVUaHJlYWQoKSk7Ci0gICAgcmV0dXJuIG1fY29u
dGV4dC0+ZmlsZVRocmVhZCgpOwotfQotCi1zdGF0aWMgdm9pZCBkaWRTdGFydChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSkKLXsKLSAgICBpZiAocHJveHkt
PmNsaWVudCgpKQotICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZFN0YXJ0KCk7Ci19Ci0KLXZv
aWQgRmlsZVN0cmVhbVByb3h5OjpzdGFydE9uRmlsZVRocmVhZCgpCi17Ci0gICAgaWYgKCFjbGll
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RyZWFtLT5zdGFydCgpOwotICAgIG1fY29u
dGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRTdGFydCwgQWxsb3dDcm9zc1Ro
cmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6c3RvcCgpCi17
Ci0gICAgLy8gQ2xlYXIgdGhlIGNsaWVudCBzbyB0aGF0IHdlIHdvbid0IGJlIGNhbGxpbmcgY2Fs
bGJhY2tzIG9uIHRoZSBjbGllbnQuCi0gICAgc2V0Q2xpZW50KDApOwotCi0gICAgZmlsZVRocmVh
ZCgpLT51bnNjaGVkdWxlVGFza3MobV9zdHJlYW0uZ2V0KCkpOwotICAgIGZpbGVUaHJlYWQoKS0+
cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94eTo6c3Rv
cE9uRmlsZVRocmVhZCkpOwotfQotCi1zdGF0aWMgdm9pZCBkZXJlZlByb3h5T25Db250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5KQotewotICAgIEFT
U0VSVChwcm94eS0+aGFzT25lUmVmKCkpOwotICAgIHByb3h5LT5kZXJlZigpOwotfQotCi12b2lk
IEZpbGVTdHJlYW1Qcm94eTo6c3RvcE9uRmlsZVRocmVhZCgpCi17Ci0gICAgbV9zdHJlYW0tPnN0
b3AoKTsKLSAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGVyZWZQ
cm94eU9uQ29udGV4dCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwotfQotCi1zdGF0
aWMgdm9pZCBkaWRHZXRTaXplKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJv
eHkqIHByb3h5LCBsb25nIGxvbmcgc2l6ZSkKLXsKLSAgICBpZiAocHJveHktPmNsaWVudCgpKQot
ICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZEdldFNpemUoc2l6ZSk7Ci19Ci0KLXZvaWQgRmls
ZVN0cmVhbVByb3h5OjpnZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVk
TW9kaWZpY2F0aW9uVGltZSkKLXsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZp
bGVUaHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFtUHJveHk6OmdldFNpemVPbkZpbGVUaHJlYWQs
IHBhdGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOwotfQotCi12b2lkIEZpbGVTdHJlYW1Q
cm94eTo6Z2V0U2l6ZU9uRmlsZVRocmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBl
Y3RlZE1vZGlmaWNhdGlvblRpbWUpCi17Ci0gICAgbG9uZyBsb25nIHNpemUgPSBtX3N0cmVhbS0+
Z2V0U2l6ZShwYXRoLCBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOwotICAgIG1fY29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRHZXRTaXplLCBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKHRoaXMpLCBzaXplKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZE9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGJvb2wgc3VjY2VzcykKLXsK
LSAgICBpZiAocHJveHktPmNsaWVudCgpKQotICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZE9w
ZW4oc3VjY2Vzcyk7Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yUmVhZChjb25z
dCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCi17Ci0g
ICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmls
ZVN0cmVhbVByb3h5OjpvcGVuRm9yUmVhZE9uRmlsZVRocmVhZCwgcGF0aCwgb2Zmc2V0LCBsZW5n
dGgpKTsKLX0KLQotdm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkT25GaWxlVGhyZWFk
KGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkK
LXsKLSAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+b3BlbkZvclJlYWQocGF0aCwgb2Zmc2V0
LCBsZW5ndGgpOwotICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZk
aWRPcGVuLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBzdWNjZXNzKSk7Ci19Ci0KLXZv
aWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewot
ICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soCi0gICAgICAgIGNyZWF0ZUZpbGVUaHJlYWRUYXNr
KHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZGaWxlU3RyZWFtUHJveHk6Om9w
ZW5Gb3JXcml0ZU9uRmlsZVRocmVhZCwgcGF0aCkpOwotfQotCi12b2lkIEZpbGVTdHJlYW1Qcm94
eTo6b3BlbkZvcldyaXRlT25GaWxlVGhyZWFkKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBi
b29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+b3BlbkZvcldyaXRlKHBhdGgpOwotICAgIG1fY29udGV4
dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRPcGVuLCBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKHRoaXMpLCBzdWNjZXNzKSk7Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpjbG9z
ZSgpCi17Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0
aGlzLCAmRmlsZVN0cmVhbVByb3h5OjpjbG9zZU9uRmlsZVRocmVhZCkpOwotfQotCi12b2lkIEZp
bGVTdHJlYW1Qcm94eTo6Y2xvc2VPbkZpbGVUaHJlYWQoKQotewotICAgIG1fc3RyZWFtLT5jbG9z
ZSgpOwotfQotCi1zdGF0aWMgdm9pZCBkaWRSZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBG
aWxlU3RyZWFtUHJveHkqIHByb3h5LCBpbnQgYnl0ZXNSZWFkKQotewotICAgIGlmIChwcm94eS0+
Y2xpZW50KCkpCi0gICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkUmVhZChieXRlc1JlYWQpOwot
fQotCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6cmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgp
Ci17Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzaygKLSAgICAgICAgY3JlYXRlRmlsZVRocmVh
ZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94eTo6cmVhZE9uRmlsZVRocmVhZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhidWZmZXIpLCBsZW5n
dGgpKTsKLX0KLQotdm9pZCBGaWxlU3RyZWFtUHJveHk6OnJlYWRPbkZpbGVUaHJlYWQoY2hhciog
YnVmZmVyLCBpbnQgbGVuZ3RoKQotewotICAgIGludCBieXRlc1JlYWQgPSBtX3N0cmVhbS0+cmVh
ZChidWZmZXIsIGxlbmd0aCk7Ci0gICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJmRpZFJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIGJ5dGVzUmVhZCkp
OwotfQotCi1zdGF0aWMgdm9pZCBkaWRXcml0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmls
ZVN0cmVhbVByb3h5KiBwcm94eSwgaW50IGJ5dGVzV3JpdHRlbikKLXsKLSAgICBpZiAocHJveHkt
PmNsaWVudCgpKQotICAgICAgICBwcm94eS0+Y2xpZW50KCktPmRpZFdyaXRlKGJ5dGVzV3JpdHRl
bik7Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5Ojp3cml0ZShjb25zdCBLVVJMJiBibG9iVVJM
LCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpCi17Ci0gICAgZmlsZVRocmVhZCgpLT5w
b3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmlsZVN0cmVhbVByb3h5Ojp3cml0
ZU9uRmlsZVRocmVhZCwgYmxvYlVSTCwgcG9zaXRpb24sIGxlbmd0aCkpOwotfQotCi12b2lkIEZp
bGVTdHJlYW1Qcm94eTo6d3JpdGVPbkZpbGVUaHJlYWQoY29uc3QgS1VSTCYgYmxvYlVSTCwgbG9u
ZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKQotewotICAgIGludCBieXRlc1dyaXR0ZW4gPSBt
X3N0cmVhbS0+d3JpdGUoYmxvYlVSTCwgcG9zaXRpb24sIGxlbmd0aCk7Ci0gICAgbV9jb250ZXh0
LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZFdyaXRlLCBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKHRoaXMpLCBieXRlc1dyaXR0ZW4pKTsKLX0KLQotc3RhdGljIHZvaWQgZGlkVHJ1bmNh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGJvb2wg
c3VjY2VzcykKLXsKLSAgICBpZiAocHJveHktPmNsaWVudCgpKQotICAgICAgICBwcm94eS0+Y2xp
ZW50KCktPmRpZFRydW5jYXRlKHN1Y2Nlc3MpOwotfQotCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6
dHJ1bmNhdGUobG9uZyBsb25nIHBvc2l0aW9uKQotewotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRh
c2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGVP
bkZpbGVUaHJlYWQsIHBvc2l0aW9uKSk7Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5Ojp0cnVu
Y2F0ZU9uRmlsZVRocmVhZChsb25nIGxvbmcgcG9zaXRpb24pCi17Ci0gICAgYm9vbCBzdWNjZXNz
ID0gbV9zdHJlYW0tPnRydW5jYXRlKHBvc2l0aW9uKTsKLSAgICBtX2NvbnRleHQtPnBvc3RUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkVHJ1bmNhdGUsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
dGhpcyksIHN1Y2Nlc3MpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuaAkocmV2aXNpb24gMTA5NzYwKQorKysgU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMSw5
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIEZpbGVTdHJlYW1Qcm94eV9oCi0jZGVmaW5lIEZpbGVTdHJlYW1Qcm94
eV9oCi0KLSNpZiBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jaW5jbHVk
ZSAiQXN5bmNGaWxlU3RyZWFtLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbGVTdHJl
YW07Ci1jbGFzcyBGaWxlVGhyZWFkOwotY2xhc3MgS1VSTDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7Ci0KLS8vIEEgcHJveHkgbW9kdWxlIHRoYXQgYXN5bmNocm9ub3VzbHkgY2FsbHMg
Y29ycmVzcG9uZGluZyBGaWxlU3RyZWFtIG1ldGhvZHMgb24gdGhlIGZpbGUgdGhyZWFkLiAgTm90
ZTogeW91IG11c3QgY2FsbCBzdG9wKCkgZmlyc3QgYW5kIHRoZW4gcmVsZWFzZSB0aGUgcmVmZXJl
bmNlIHRvIGRlc3RydWN0IHRoZSBGaWxlU3RyZWFtUHJveHkgaW5zdGFuY2UuCi0vLyBGSVhNRTog
TG9naWNhbGx5LCB0aGlzIGNsYXNzIGlzIHBhcnQgb2YgcGxhdGZvcm0uIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgaXMgd2hhdCBrZWVwcyBpdCBvdXRzaWRlIGZvciBub3cuCi1jbGFzcyBGaWxlU3Ry
ZWFtUHJveHkgOiBwdWJsaWMgQXN5bmNGaWxlU3RyZWFtIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxGaWxlU3RyZWFtUHJveHk+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgRmlsZVN0cmVhbUNsaWVudCopOwotICAgIHZpcnR1YWwgfkZpbGVTdHJlYW1Qcm94eSgpOwot
Ci0gICAgdmlydHVhbCB2b2lkIGdldFNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhw
ZWN0ZWRNb2RpZmljYXRpb25UaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgb3BlbkZvclJlYWQoY29u
c3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdmly
dHVhbCB2b2lkIGNsb3NlKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlYWQoY2hhciogYnVmZmVyLCBp
bnQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGUoY29uc3QgS1VSTCYgYmxvYlVSTCwg
bG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZvaWQgdHJ1bmNh
dGUobG9uZyBsb25nIHBvc2l0aW9uKTsKLQotICAgIC8vIFN0b3BzIHRoZSBwcm94eSBhbmQgc2No
ZWR1bGVzIGl0IHRvIGJlIGRlc3RydWN0ZWQuIEFsbCB0aGUgcGVuZGluZyB0YXNrcyB3aWxsIGJl
IGFib3J0ZWQgYW5kIHRoZSBmaWxlIHN0cmVhbSB3aWxsIGJlIGNsb3NlZC4KLSAgICAvLyBOb3Rl
OiB0aGUgY2FsbGVyIHNob3VsZCBkZXJlZiB0aGUgaW5zdGFuY2UgaW1tZWRpYXRlbHkgYWZ0ZXIg
Y2FsbGluZyBzdG9wKCkuCi0gICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKLQotcHJpdmF0ZToKLSAg
ICBGaWxlU3RyZWFtUHJveHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1DbGll
bnQqKTsKLQotICAgIEZpbGVUaHJlYWQqIGZpbGVUaHJlYWQoKTsKLQotICAgIC8vIENhbGxlZCBv
biBGaWxlIHRocmVhZC4KLSAgICB2b2lkIHN0YXJ0T25GaWxlVGhyZWFkKCk7Ci0gICAgdm9pZCBz
dG9wT25GaWxlVGhyZWFkKCk7Ci0gICAgdm9pZCBnZXRTaXplT25GaWxlVGhyZWFkKGNvbnN0IFN0
cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgdm9pZCBv
cGVuRm9yUmVhZE9uRmlsZVRocmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZz
ZXQsIGxvbmcgbG9uZyBsZW5ndGgpOwotICAgIHZvaWQgb3BlbkZvcldyaXRlT25GaWxlVGhyZWFk
KGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgdm9pZCBjbG9zZU9uRmlsZVRocmVhZCgpOwotICAg
IHZvaWQgcmVhZE9uRmlsZVRocmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpOwotICAgIHZv
aWQgd3JpdGVPbkZpbGVUaHJlYWQoY29uc3QgS1VSTCYgYmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0
aW9uLCBpbnQgbGVuZ3RoKTsKLSAgICB2b2lkIHRydW5jYXRlT25GaWxlVGhyZWFkKGxvbmcgbG9u
ZyBwb3NpdGlvbik7Ci0KLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gbV9jb250
ZXh0OwotICAgIFJlZlB0cjxGaWxlU3RyZWFtPiBtX3N0cmVhbTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNU
RU0pCi0KLSNlbmRpZiAvLyBGaWxlU3RyZWFtUHJveHlfaApJbmRleDogU291cmNlL1dlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxMDk3NjApCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4ICsz
MSw4IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkZXIuaCIKIAogI2luY2x1ZGUgIkFwcGxpY2F0
aW9uQ2FjaGVIb3N0LmgiCisjaW5jbHVkZSAiQXN5bmNGaWxlU3RyZWFtLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnRMb2FkZXIuaCIKLSNpbmNsdWRlICJGaWxlU3RyZWFtUHJveHkuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKQEAgLTU1OSw4ICs1NTksOCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjp3aWxs
Q2FjaGVSZXNwb25zZShSCiAjaWYgRU5BQkxFKEJMT0IpCiBBc3luY0ZpbGVTdHJlYW0qIFJlc291
cmNlTG9hZGVyOjpjcmVhdGVBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNsaWVudCogY2xpZW50
KQogewotICAgIC8vIEl0IGlzIE9LIHRvIHNpbXBseSByZXR1cm4gYSBwb2ludGVyIHNpbmNlIEZp
bGVTdHJlYW1Qcm94eTo6Y3JlYXRlIGFkZHMgYW4gZXh0cmEgcmVmLgotICAgIHJldHVybiBGaWxl
U3RyZWFtUHJveHk6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIGNsaWVudCkuZ2V0KCk7CisgICAgLy8gSXQgaXMgT0sgdG8gc2ltcGx5IHJldHVy
biBhIHBvaW50ZXIgc2luY2UgQXN5bmNGaWxlU3RyZWFtOjpjcmVhdGUgYWRkcyBhbiBleHRyYSBy
ZWYuCisgICAgcmV0dXJuIEFzeW5jRmlsZVN0cmVhbTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50
KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY2xpZW50KS5nZXQoKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaAkocmV2aXNp
b24gMTA5NzYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNGaWxlU3RyZWFtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwot
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEFzeW5jRmlsZVN0cmVhbV9o
Ci0jZGVmaW5lIEFzeW5jRmlsZVN0cmVhbV9oCi0KLSNpZiBFTkFCTEUoQkxPQikgfHwgRU5BQkxF
KEZJTEVfU1lTVEVNKQotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEZpbGVTdHJlYW1D
bGllbnQ7Ci1jbGFzcyBLVVJMOwotCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbWVyZ2VkIHdp
dGggdGhlIG9ubHkgZGVyaXZlZCBjbGFzcyAoRmlsZVN0cmVhbVByb3h5KSBvbmNlIFJ1bkxvb3Ag
aXMgYWJzdHJhY3RlZCBhd2F5IGluIHBsYXRmb3JtLgotY2xhc3MgQXN5bmNGaWxlU3RyZWFtIDog
cHVibGljIFJlZkNvdW50ZWQ8QXN5bmNGaWxlU3RyZWFtPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVh
bCB+QXN5bmNGaWxlU3RyZWFtKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2l6ZShjb25z
dCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkZvclJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcg
b2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gb3JX
cml0ZShjb25zdCBTdHJpbmcmIHBhdGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IEtVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBw
b3NpdGlvbiwgaW50IGxlbmd0aCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB0cnVuY2F0ZShsb25n
IGxvbmcgcG9zaXRpb24pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsKLQotICAg
IEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0g
ICAgdm9pZCBzZXRDbGllbnQoRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0g
Y2xpZW50OyB9Ci0KLXByb3RlY3RlZDoKLSAgICBBc3luY0ZpbGVTdHJlYW0oRmlsZVN0cmVhbUNs
aWVudCogY2xpZW50KQotICAgICAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICB7Ci0gICAgfQot
Ci1wcml2YXRlOgotICAgIEZpbGVTdHJlYW1DbGllbnQqIG1fY2xpZW50OwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxF
X1NZU1RFTSkKLQotI2VuZGlmIC8vIEFzeW5jRmlsZVN0cmVhbV9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHJldmlzaW9uIDEwOTc2
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBy
ZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCkgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKSA9IDA7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRsZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopID0gMDsKICAgICB2
aXJ0dWFsIGJvb2wgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0
YSkgPSAwOwogCiBwcm90ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHJldmlzaW9uIDEwOTc2MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDI2IEBAIEJsb2JSZWdpc3RyeSYgYmxvYlJlZ2lzdHJ5
KCkKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEJsb2JSZWdpc3RyeUltcGwsIGluc3RhbmNlLCAo
KSk7CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQorCitzdGF0aWMgUGFzc1JlZlB0cjxSZXNvdXJj
ZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KQoreworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxCbG9iUmVnaXN0cnlJbXBsJj4oYmxvYlJlZ2lzdHJ5KCkpLmNyZWF0ZVJlc291cmNlSGFu
ZGxlKHJlcXVlc3QsIGNsaWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ2lzdGVyQmxvYlJlc291
cmNlSGFuZGxlQ29uc3RydWN0b3IoKQoreworICAgIHN0YXRpYyBib29sIGRpZFJlZ2lzdGVyID0g
ZmFsc2U7CisgICAgaWYgKCFkaWRSZWdpc3RlcikgeworICAgICAgICBSZXNvdXJjZUhhbmRsZTo6
cmVnaXN0ZXJCdWlsdGluQ29uc3RydWN0b3IoImJsb2IiLCBjcmVhdGVSZXNvdXJjZUhhbmRsZSk7
CisgICAgICAgIGRpZFJlZ2lzdGVyID0gdHJ1ZTsKKyAgICB9Cit9CisKKyNlbHNlCisKK3N0YXRp
YyB2b2lkIHJlZ2lzdGVyQmxvYlJlc291cmNlSGFuZGxlQ29uc3RydWN0b3IoKQoreworfQogI2Vu
ZGlmCiAKIGJvb2wgQmxvYlJlZ2lzdHJ5SW1wbDo6c2hvdWxkTG9hZFJlc291cmNlKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkgY29uc3QKQEAgLTEyNSw2ICsxNDUsNyBAQCB2b2lkIEJs
b2JSZWdpc3RyeUltcGw6OmFwcGVuZFN0b3JhZ2VJdGVtCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6
OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJs
b2JEYXRhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmVnaXN0ZXJCbG9i
UmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3RvcigpOwogCiAgICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0
YT4gYmxvYlN0b3JhZ2VEYXRhID0gQmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoYmxvYkRhdGEtPmNv
bnRlbnRUeXBlKCksIGJsb2JEYXRhLT5jb250ZW50RGlzcG9zaXRpb24oKSk7CiAKQEAgLTE1NCw2
ICsxNzUsNyBAQCB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjCiB2b2lk
IEJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IEtVUkwmIHNyY1VSTCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJlZ2lz
dGVyQmxvYlJlc291cmNlSGFuZGxlQ29uc3RydWN0b3IoKTsKIAogICAgIFJlZlB0cjxCbG9iU3Rv
cmFnZURhdGE+IHNyYyA9IG1fYmxvYnMuZ2V0KHNyY1VSTC5zdHJpbmcoKSk7CiAgICAgQVNTRVJU
KHNyYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3Ry
eUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Js
b2JSZWdpc3RyeUltcGwuaAkocmV2aXNpb24gMTA5NzYwKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEx
ICs1NiwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25z
dCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOwogICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
ckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7CiAgICAgdmlydHVhbCB2
b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50Kik7CiAgICAgdmlydHVhbCBib29sIGxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYs
IFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpOwogCiAgICAgUGFzc1JlZlB0
cjxCbG9iU3RvcmFnZURhdGE+IGdldEJsb2JEYXRhRnJvbVVSTChjb25zdCBLVVJMJikgY29uc3Q7
CiAKKyAgICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRsZShj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopOworCiBwcml2YXRl
OgogICAgIGJvb2wgc2hvdWxkTG9hZFJlc291cmNlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCkgY29uc3Q7CiAgICAgdm9pZCBhcHBlbmRTdG9yYWdlSXRlbXMoQmxvYlN0b3JhZ2VEYXRh
KiwgY29uc3QgQmxvYkRhdGFJdGVtTGlzdCYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5jcHAJKHJldmlzaW9uIDEwOTc2MCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMsMjYgQEAKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRs
ZUNsaWVudC5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBib29sIHNob3VsZEZvcmNlQ29udGVudFNu
aWZmaW5nOwogCit0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZXNvdXJjZUhhbmRsZTo6
QnVpbHRpbkNvbnN0cnVjdG9yPiBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDsK
K3N0YXRpYyBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCYgYnVpbHRpblJlc291
cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rv
ck1hcCwgbWFwLCAoKSk7CisgICAgcmV0dXJuIG1hcDsKK30KKwordm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cmVnaXN0ZXJCdWlsdGluQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiBwcm90b2Nv
bCwgUmVzb3VyY2VIYW5kbGU6OkJ1aWx0aW5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikKK3sKKyAg
ICBidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCgpLmFkZChwcm90b2NvbCwgY29u
c3RydWN0b3IpOworfQorCiBSZXNvdXJjZUhhbmRsZTo6UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50LCBib29s
IGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKQogICAgIDogZChhZG9wdFB0
cihuZXcgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCh0aGlzLCByZXF1ZXN0LCBjbGllbnQsIGRlZmVy
c0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZiAmJiBzaG91bGRDb250ZW50U25pZmZVUkwocmVx
dWVzdC51cmwoKSkpKSkKIHsKQEAgLTU1LDEzICs2OSwxMCBAQCBSZXNvdXJjZUhhbmRsZTo6UmVz
b3VyY2VIYW5kbGUoY29uc3QgUmVzCiAKIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IFJlc291
cmNlSGFuZGxlOjpjcmVhdGUoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCwgYm9vbCBk
ZWZlcnNMb2FkaW5nLCBib29sIHNob3VsZENvbnRlbnRTbmlmZikKIHsKLSNpZiBFTkFCTEUoQkxP
QikKLSAgICBpZiAocmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJibG9iIikpIHsKLSAgICAgICAg
UGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gYmxvYlJlZ2lzdHJ5KCkuY3JlYXRl
UmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50KTsKLSAgICAgICAgaWYgKGhhbmRsZSkKLSAg
ICAgICAgICAgIHJldHVybiBoYW5kbGU7Ci0gICAgfQotI2VuZGlmCisgICAgQnVpbHRpblJlc291
cmNlSGFuZGxlQ29uc3RydWN0b3JNYXA6Oml0ZXJhdG9yIHByb3RvY29sTWFwSXRlbSA9IGJ1aWx0
aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKCkuZmluZChyZXF1ZXN0LnVybCgpLnByb3Rv
Y29sKCkpOworCisgICAgaWYgKHByb3RvY29sTWFwSXRlbSAhPSBidWlsdGluUmVzb3VyY2VIYW5k
bGVDb25zdHJ1Y3Rvck1hcCgpLmVuZCgpKQorICAgICAgICByZXR1cm4gcHJvdG9jb2xNYXBJdGVt
LT5zZWNvbmQocmVxdWVzdCwgY2xpZW50KTsKIAogICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
bmV3SGFuZGxlKGFkb3B0UmVmKG5ldyBSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQsIGRl
ZmVyc0xvYWRpbmcsIHNob3VsZENvbnRlbnRTbmlmZikpKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAkocmV2aXNpb24gMTA5
NzYwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNiArMjE3LDkgQEAgcHVibGljOgogICAgIHZvaWQgaGFu
ZGxlRGF0YUFycmF5KENGQXJyYXlSZWYgZGF0YUFycmF5KTsKICNlbmRpZgogCisgICAgdHlwZWRl
ZiBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiAoKkJ1aWx0aW5Db25zdHJ1Y3RvcikoY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50KTsK
KyAgICBzdGF0aWMgdm9pZCByZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3Rvcihjb25zdCBBdG9taWNT
dHJpbmcmIHByb3RvY29sLCBCdWlsdGluQ29uc3RydWN0b3IpOworCiBwcm90ZWN0ZWQ6CiAgICAg
UmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGll
bnQqLCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNuaWZmKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130209</attachid>
            <date>2012-03-05 14:58:56 -0800</date>
            <delta_ts>2012-03-07 08:57:57 -0800</delta_ts>
            <desc>updated to ToT</desc>
            <filename>AsyncFileStream.txt</filename>
            <type>text/plain</type>
            <size>70015</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBACisyMDEyLTAzLTA1ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIE1lcmdlIEFzeW5jRmlsZVN0
cmVhbSB3aXRoIEZpbGVTdHJlYW1Qcm94eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODAzMjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBc3luY0ZpbGVTdHJlYW0gc291bmRzIGxpa2UgYSBwbGF0Zm9ybSBj
b25jZXB0LCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIHdlYiBzcGVjaWZpYy4KKyAgICAgICAg
QmV0dGVyIHRvIGp1c3Qga2VlcCBpdCBpbiBvbmUgcGxhY2UuCisKKyAgICAgICAgVGhpcyBpcyBh
IHN0ZXAgdG93YXJkIGRlY291cGxpbmcgYmxvYiBzY2hlbWUgc3VwcG9ydCBmcm9tIFJlc291cmNl
SGFuZGxlLCB3aGljaCBpcyBzdXBwb3NlZAorICAgICAgICB0byBiZSBhbiBpbnRlcmZhY2UgdG8g
cGxhdGZvcm0gbmV0d29ya2luZyBBUElzIG9ubHksIGFuZCBkZWZpbml0ZWx5IHNob3VsZG4ndCBr
bm93IGFib3V0CisgICAgICAgIFdlYiBjb25jZXB0cy4KKworICAgICAgICBObyBjaGFuZ2UgaW4g
ZnVuY3Rpb25hbGl0eSwgc28gbm8gdGVzdHMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgVXBkYXRlZCBmb3IgbW92ZWQgYW5kIHJlbW92ZWQgZmlsZXMuIE5hbWVseSwgcGxhdGZv
cm0vQXN5bmNGaWxlU3RyZWFtIGlzIGRlYWQsIGFuZAorICAgICAgICBmaWxlYXBpL0ZpbGVTdHJl
YW1Qcm94eSBpcyBub3cgZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uCisKKyAgICAgICAgKiBmaWxl
YXBpL0FzeW5jRmlsZVN0cmVhbS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVN0cmVhbVByb3h5LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVh
bTo6QXN5bmNGaWxlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6fkFzeW5jRmlsZVN0
cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OmZpbGVUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGlkU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxl
U3RyZWFtOjpzdGFydE9uRmlsZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVT
dHJlYW06OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6ZGVyZWZQcm94eU9uQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OnN0b3BPbkZpbGVUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6ZGlkR2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVT
dHJlYW06OmdldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpnZXRT
aXplT25GaWxlVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OmRpZE9wZW4pOgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yUmVhZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkT25GaWxlVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFzeW5jRmlsZVN0cmVhbTo6b3BlbkZvcldyaXRlT25GaWxlVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNG
aWxlU3RyZWFtOjpjbG9zZU9uRmlsZVRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpkaWRSZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6cmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OnJlYWRPbkZpbGVUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGlkV3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3RyZWFtOjp3cml0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBc3luY0ZpbGVTdHJlYW06OndyaXRlT25GaWxlVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OmRpZFRydW5jYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFz
eW5jRmlsZVN0cmVhbTo6dHJ1bmNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QXN5bmNGaWxlU3Ry
ZWFtOjp0cnVuY2F0ZU9uRmlsZVRocmVhZCk6CisgICAgICAgICogZmlsZWFwaS9Bc3luY0ZpbGVT
dHJlYW0uaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3RyZWFtUHJv
eHkuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQXN5bmNGaWxlU3RyZWFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jRmlsZVN0cmVhbTo6Y2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkFzeW5jRmlsZVN0cmVhbTo6c2V0Q2xpZW50KToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVT
dHJlYW1Qcm94eS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlU3RyZWFtUHJv
eHkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VMb2FkZXI6OmNyZWF0ZUFzeW5jRmlsZVN0cmVhbSk6Cisg
ICAgICAgICogcGxhdGZvcm0vQXN5bmNGaWxlU3RyZWFtLmg6IFJlbW92ZWQuCisgICAgICAgIEZl
d2VyIGZpbGVzIQorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnkuaDog
UmVtb3ZlZCBjcmVhdGVSZXNvdXJjZUhhbmRsZSgpLiBJdCdzIGxvZ2ljYWxseSBhIG1ldGhvZAor
ICAgICAgICBvbiBpbi1wcm9jZXNzIEJsb2JSZWdpc3RyeUltcGwgb25seSwgYW5kIHdlIG5vIGxv
bmdlciBuZWVkIHRvIGNhbGwgdGhpcyBmcm9tIHBsYXRmb3JtIGNvZGUuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlUmVzb3VyY2VIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVnaXN0ZXJCbG9iUmVz
b3VyY2VIYW5kbGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpCbG9iUmVnaXN0cnlJ
bXBsOjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvQmxvYlJl
Z2lzdHJ5SW1wbC5oOgorICAgICAgICBFeGNlcHQgZm9yIGNocm9taXVtLCAiYmxvYiIgaXMgYSBz
Y2hlbWUgdGhhdCdzIGhhbmRsZWQgaW50ZXJuYWxseS4gQWRkZWQgaG9va3MgZm9yIHRoYXQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpyZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6CisgICAgICAgIEFkZGVkIGEgd2F5IGZvciBv
dGhlciBjb2RlIHRvIHJlZ2lzdGVyIGhhbmRsZXJzIGZvciBVUkwgc2NoZW1lcy4gTm9uLUNocm9t
aXVtIHBsYXRmb3JtcworICAgICAgICB1c2UgdGhpcyBmb3IgYmxvYjogbm93LgorCiAyMDEyLTAz
LTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWx3
YXlzIHVwZGF0ZSB0aGUgc2Nyb2xsIGxheWVyIHBvc2l0aW9uIG9uIHRoZSBtYWluIHRocmVhZCB3
aGVuIHdlIGhhdmUgYW4gb3ZlcmxheQpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDEwOTgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xNDk0LDExICsxNDk0LDExIEBAIFNFVChXZWJDb3JlX1VTRVJfQUdFTlRfU1RZTEVfU0hF
RVRTCiAKIElGIChFTkFCTEVfQkxPQikKICAgICBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
KyAgICAgICAgZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwCiAgICAgICAgIGZpbGVhcGkvRmls
ZVJlYWRlci5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcAogICAgICAg
ICBmaWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAogICAgICAgICBmaWxlYXBpL0ZpbGVUaHJlYWQu
Y3BwCi0gICAgICAgIGZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmNwcAogICAgICAgICBwbGF0Zm9y
bS9GaWxlU3RyZWFtLmNwcAogICAgICkKIApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiAxMDk4MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTc3LDYgKzE5NzcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21t
YW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9XcmFwQ29udGVudHNJbkR1bW15U3Bh
bkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9Xcml0aW5nRGlyZWN0aW9uLmgg
XAorCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaCBcCiAJU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9Bc3luY0ZpbGVXcml0ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0Zp
bGVXcml0ZXJDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcCBcCkBA
IC0yMDM0LDggKzIwMzYsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVSZWFkZXJTeW5jLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyU3luYy5oIFwKLQlTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAg
XAotCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmggXAogCVNvdXJjZS9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrLmggXAogCVNvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVN5c3RlbUNhbGxiYWNrcy5oIFwKQEAgLTI5MjksNyArMjkyOSw2IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL1RpbWluZ0Z1bmN0
aW9uLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FyZW5hLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQXJlbmEuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQXN5bmNG
aWxlU3RyZWFtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0FzeW5jRmlsZVN5c3RlbS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9BdXRvZHJhaW5lZFBvb2wuaCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJ
KHJldmlzaW9uIDEwOTgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcg
Y29weSkKQEAgLTY1Myw2ICs2NTMsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwIFwKICAgICBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIFwKICAgICBl
ZGl0aW5nL1dyYXBDb250ZW50c0luRHVtbXlTcGFuQ29tbWFuZC5jcHAgXAorICAgIGZpbGVhcGkv
QXN5bmNGaWxlU3RyZWFtLmNwcCBcCisgICAgZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uY3BwIFwK
ICAgICBmaWxlYXBpL0Jsb2IuY3BwIFwKICAgICBmaWxlYXBpL0Jsb2JVUkwuY3BwIFwKICAgICBm
aWxlYXBpL0RPTUZpbGVQYXRoLmNwcCBcCkBAIC02NzcsOCArNjc5LDYgQEAgU09VUkNFUyArPSBc
CiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyLmNwcCBcCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyTG9h
ZGVyLmNwcCBcCiAgICAgZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAgXAotICAgIGZpbGVhcGkv
RmlsZVN0cmVhbVByb3h5LmNwcCBcCi0gICAgZmlsZWFwaS9GaWxlU3lzdGVtQ2FsbGJhY2tzLmNw
cCBcCiAgICAgZmlsZWFwaS9GaWxlVGhyZWFkLmNwcCBcCiAgICAgZmlsZWFwaS9GaWxlV3JpdGVy
LmNwcCBcCiAgICAgZmlsZWFwaS9GaWxlV3JpdGVyQmFzZS5jcHAgXApAQCAtMjEwOCw3ICsyMTA4
LDYgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbkxpc3Qu
aCBcCiAgICAgcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvblV0aWxpdGllcy5oIFwKICAgICBw
bGF0Zm9ybS9BcmVuYS5oIFwKLSAgICBwbGF0Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaCBcCiAgICAg
cGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5oIFwKICAgICBwbGF0Zm9ybS9DbG9jay5oIFwKICAg
ICBwbGF0Zm9ybS9DbG9ja0dlbmVyaWMuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biAxMDk4MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTI0MCw3ICsyNDAsNiBAQAogICAgICAgICAgICAgJ3BhZ2UvV2luZG93RmVhdHVyZXMuaCcs
CiAgICAgICAgICAgICAncGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5oJywKICAg
ICAgICAgICAgICdwYWdlL21hYy9XZWJDb3JlRnJhbWVWaWV3LmgnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL0FzeW5jRmlsZVN0cmVhbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9DbG9jay5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9Db2xvckNob29zZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vQ29sb3JDaG9vc2VyQ2xpZW50LmgnLApAQCAtMjM1NSw2ICsyMzU0LDggQEAKICAg
ICAgICAgICAgICdlZGl0aW5nL3F0L1NtYXJ0UmVwbGFjZVF0LmNwcCcsCiAgICAgICAgICAgICAn
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcCcsCiAgICAgICAgICAgICAnZWRpdGluZy93eC9FZGl0
b3JXeC5jcHAnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmNwcCcsCisg
ICAgICAgICAgICAnZmlsZWFwaS9Bc3luY0ZpbGVTdHJlYW0uaCcsCiAgICAgICAgICAgICAnZmls
ZWFwaS9Bc3luY0ZpbGVXcml0ZXIuaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9Bc3luY0ZpbGVX
cml0ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9CbG9iLmNwcCcsCkBAIC0yNDEy
LDggKzI0MTMsNiBAQAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVu
dC5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcCcsCiAgICAgICAg
ICAgICAnZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oJywKLSAgICAgICAgICAgICdmaWxlYXBpL0Zp
bGVTdHJlYW1Qcm94eS5jcHAnLAotICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5
LmgnLAogICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrLmgnLAogICAgICAg
ICAgICAgJ2ZpbGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5jcHAnLAogICAgICAgICAgICAgJ2Zp
bGVhcGkvRmlsZVN5c3RlbUNhbGxiYWNrcy5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiAxMDk4MDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MjY4MjYsMTAgKzI2ODI2LDYgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cQXN5bmNGaWxlU3RyZWFtLmgiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXEFzeW5jRmlsZVN5
c3RlbS5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNTYxODYsNiArNTYxODIsMTQgQEAKIAkJ
CQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxB
c3luY0ZpbGVTdHJlYW0uY3BwIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxmaWxlYXBpXEFzeW5jRmlsZVN0cmVhbS5oIgorCQkJCT4KKwkJCTwvRmls
ZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxlYXBpXEVudHJpZXNDYWxsYmFj
ay5oIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTU2MzE4LDE0ICs1NjMyMiw2IEBACiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVN0
cmVhbVByb3h5LmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZl
UGF0aD0iLi5cZmlsZWFwaVxGaWxlU3RyZWFtUHJveHkuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0J
CQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmlsZWFwaVxGaWxlU3lzdGVtQ2FsbGJhY2su
aCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDk4MDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTgzNCw3ICs4MzQsNiBAQAogCQkyRURGMzY5RjEyMkM5NEM4MDAyRjdENEUgLyogRmlsZUV4
Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVERjM2OUUxMjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNlcHRpb24uaCAqLzsgfTsKIAkJMkVG
MUJGRUExMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVGMUJGRTgxMjFDOUY0MjAwQzI3NjI3IC8q
IEZpbGVTdHJlYW0uY3BwICovOyB9OwogCQkyRUYxQkZFQjEyMUM5RjQyMDBDMjc2MjcgLyogRmls
ZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkVGMUJGRTkxMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRUYxQkZGNzEyMUNCMEJEMDBDMjc2
MjcgLyogQXN5bmNGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRUYxQkZGNjEyMUNCMEJEMDBDMjc2MjcgLyogQXN5bmNGaWxlU3RyZWFt
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMkVG
MUJGRjkxMjFDQjBDRTAwQzI3NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRjFCRkY4MTIxQ0IwQ0UwMEMyNzYy
NyAvKiBGaWxlU3RyZWFtQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMzEwNjAzNkYxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0Zp
bHRlclZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxMDYwMzZDMTQzMjdEMkUwMEFCRjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHAg
Ki87IH07CiAJCTMxMDYwMzcwMTQzMjdEMkUwMEFCRjRCQSAvKiBXZWJLaXRDU1NGaWx0ZXJWYWx1
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzEwNjAz
NkQxNDMyN0QyRTAwQUJGNEJBIC8qIFdlYktpdENTU0ZpbHRlclZhbHVlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTM0NDksOCArMzQ0OCw2IEBA
CiAJCTk3NkQ2Qzg2MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlTGlzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNjcxMjJCOEEzRDAwMUZEMUY3
IC8qIEZpbGVMaXN0LmggKi87IH07CiAJCTk3NkQ2Qzg4MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxl
UmVhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDk3NkQ2QzY5MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVhZGVyLmNwcCAqLzsgfTsKIAkJOTc2
RDZDODkxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzZBMTIyQjhBM0QwMDFGRDFGNyAvKiBG
aWxlUmVhZGVyLmggKi87IH07Ci0JCTk3NkQ2QzhCMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlU3Ry
ZWFtUHJveHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gOTc2RDZDNkMxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgKi87IH07
Ci0JCTk3NkQ2QzhDMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlU3RyZWFtUHJveHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDk3NkQ2QzZEMTIyQjhBM0Qw
MDFGRDFGNyAvKiBGaWxlU3RyZWFtUHJveHkuaCAqLzsgfTsKIAkJOTc2RDZDOEQxMjJCOEEzRDAw
MUZEMUY3IC8qIEZpbGVUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gOTc2RDZDNkUxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuY3Bw
ICovOyB9OwogCQk5NzZENkM4RTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTc2RDZDNkYxMjJCOEEz
RDAwMUZEMUY3IC8qIEZpbGVUaHJlYWQuaCAqLzsgfTsKIAkJOTc2RDZDOEYxMjJCOEEzRDAwMUZE
MUY3IC8qIEZpbGVUaHJlYWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5NzZENkM3MDEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVRocmVhZFRhc2su
aCAqLzsgfTsKQEAgLTU4NjUsNiArNTg2Miw4IEBACiAJCUUxQzhCRTVEMEU4QkQxNUEwMDY0Q0I3
RCAvKiBKU1dvcmtlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNXb3JrZXIuY3BwICovOyB9Owog
CQlFMUNBNUNCQzBFOENEQ0FGMDBFOEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDQTVDQkIwRThDRENBRjAw
RThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJRTFDQUE1QzYwRThCRDIzNjAw
QTczRUNBIC8qIEpTV29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMUNBQTVDNTBFOEJEMjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCAqLzsgfTsK
KwkJRTFDREU5MjAxNTAxOEVEMDAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUNERTkxRjE1MDE4RUQw
MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmNwcCAqLzsgfTsKKwkJRTFDREU5MjIxNTAxOTE2
OTAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTFDREU5MjExNTAxOTE2OTAwODYyQ0M1IC8qIEFzeW5jRmls
ZVN0cmVhbS5oICovOyB9OwogCQlFMUUxQkYwMDExNUZGNkZCMDA2RjUyQ0EgLyogV2luZG93c0tl
eWJvYXJkQ29kZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxRTFCRUZGMTE1RkY2RkIwMDZGNTJDQSAvKiBXaW5kb3dzS2V5Ym9hcmRDb2Rlcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxRTZFRUE0
MEI2MjhEQTgwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTZFRUEzMEI2MjhEQTgwMDVGMkY3
MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsgfTsKIAkJRTFFNkVFQTgwQjYyOERCMzAw
NUYyRjcwIC8qIEpTSFRNTFNlbGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRTZFRUE3MEI2MjhEQjMwMDVGMkY3MCAvKiBKU0hUTUxT
ZWxlY3RFbGVtZW50LmggKi87IH07CkBAIC03NjczLDcgKzc2NzIsNiBAQAogCQkyRURGMzY5RTEy
MkM5NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGaWxlRXhjZXB0aW9uLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVFeGNlcHRpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVGMUJGRTgxMjFDOUY0MjAwQzI3NjI3
IC8qIEZpbGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RmlsZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRjFCRkU5MTIx
QzlGNDIwMEMyNzYyNyAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMkVGMUJG
RjYxMjFDQjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBc3luY0ZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkVGMUJGRjgxMjFDQjBDRTAwQzI3NjI3IC8qIEZpbGVTdHJlYW1DbGllbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbUNsaWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTA2MDM2QzE0MzI3RDJFMDBBQkY0QkEgLyogV2Vi
S2l0Q1NTRmlsdGVyVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzMTA2MDM2RDE0MzI3RDJFMDBBQkY0QkEgLyogV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTRmlsdGVyVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwMzg4LDggKzEwMzg2LDYgQEAKIAkJOTc2RDZD
NjcxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZpbGVMaXN0Lmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3NkQ2QzY5MTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlUmVh
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZpbGVSZWFkZXIu
Y3BwOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOTc2RDZDNkExMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVJlYWRlci5oOyBwYXRoID0gZmlsZWFwaS9G
aWxlUmVhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTk3NkQ2QzZDMTIyQjhB
M0QwMDFGRDFGNyAvKiBGaWxlU3RyZWFtUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRmlsZVN0cmVhbVByb3h5LmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVN0
cmVhbVByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOTc2RDZDNkQxMjJC
OEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGaWxlU3RyZWFtUHJveHkuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVN0cmVhbVBy
b3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTk3NkQ2QzZFMTIyQjhBM0QwMDFG
RDFGNyAvKiBGaWxlVGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZpbGVUaHJlYWQuY3BwOyBwYXRoID0gZmlsZWFwaS9GaWxlVGhyZWFkLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTc2RDZDNkYxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVU
aHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVRocmVhZC5oOyBw
YXRoID0gZmlsZWFwaS9GaWxlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTk3NkQ2QzcwMTIyQjhBM0QwMDFGRDFGNyAvKiBGaWxlVGhyZWFkVGFzay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxlVGhyZWFkVGFzay5oOyBwYXRoID0gZmlsZWFwaS9G
aWxlVGhyZWFkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5NDcsNiAr
MTI5NDMsOCBAQAogCQlFMUM4QkU1QzBFOEJEMTVBMDA2NENCN0QgLyogSlNXb3JrZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3JrZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMUNBNUNCQjBFOENEQ0FGMDBFOEVGOTAgLyogSlNXb3Jr
ZXJDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXb3Jr
ZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUNBQTVDNTBFOEJE
MjM2MDBBNzNFQ0EgLyogSlNXb3JrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNXb3JrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTFDREU5MUYxNTAx
OEVEMDAwODYyQ0M1IC8qIEFzeW5jRmlsZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBc3luY0ZpbGVTdHJlYW0uY3BwOyBwYXRoID0gZmlsZWFwaS9Bc3lu
Y0ZpbGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUNERTkyMTE1
MDE5MTY5MDA4NjJDQzUgLyogQXN5bmNGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFzeW5jRmlsZVN0cmVhbS5oOyBwYXRoID0gZmlsZWFwaS9Bc3luY0ZpbGVT
dHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTFFMUJFRkYxMTVGRjZGQjAw
NkY1MkNBIC8qIFdpbmRvd3NLZXlib2FyZENvZGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdpbmRvd3NLZXlib2FyZENvZGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxRTZFRUEzMEI2MjhEQTgwMDVGMkY3MCAvKiBKU0hUTUxTZWxlY3RFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFNlbGVjdEVsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUU2RUVBNzBCNjI4REIzMDA1
RjJGNzAgLyogSlNIVE1MU2VsZWN0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
aDsgcGF0aCA9IEpTSFRNTFNlbGVjdEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE3MjI4LDYgKzE3MjI2LDggQEAKIAkJOTc2RDZDNTcxMjJCOEExODAwMUZEMUY3IC8q
IGZpbGVhcGkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CUUxQ0RFOTFGMTUwMThFRDAwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uY3BwICovLAorCQkJ
CUUxQ0RFOTIxMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uaCAqLywKIAkJCQk5
NzZENkM1ODEyMkI4QTNEMDAxRkQxRjcgLyogQXN5bmNGaWxlV3JpdGVyLmggKi8sCiAJCQkJOTc2
RDZDNzQxMjJCOEEzRDAwMUZEMUY3IC8qIEFzeW5jRmlsZVdyaXRlckNsaWVudC5oICovLAogCQkJ
CTk3NkQ2QzU5MTIyQjhBM0QwMDFGRDFGNyAvKiBCbG9iLmNwcCAqLywKQEAgLTE3MzA3LDggKzE3
MzA3LDYgQEAKIAkJCQkyRURGMzY5QTEyMkM5NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMu
Y3BwICovLAogCQkJCTJFREYzNjlCMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5o
ICovLAogCQkJCUUxQUIxRUJEMTRFOUUzQTgwMDQ0OUUxMyAvKiBGaWxlUmVhZGVyU3luYy5pZGwg
Ki8sCi0JCQkJOTc2RDZDNkMxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAg
Ki8sCi0JCQkJOTc2RDZDNkQxMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5oICov
LAogCQkJCTg5ODc4NTRBMTIyQ0EwNjQwMDNBQUJEQSAvKiBGaWxlU3lzdGVtQ2FsbGJhY2suaCAq
LywKIAkJCQlFMUFCMUVCRTE0RTlFM0IyMDA0NDlFMTMgLyogRmlsZVN5c3RlbUNhbGxiYWNrLmlk
bCAqLywKIAkJCQk4OTg3ODU0QjEyMkNBMDY0MDAzQUFCREEgLyogRmlsZVN5c3RlbUNhbGxiYWNr
cy5jcHAgKi8sCkBAIC0xOTk2NSw3ICsxOTk2Myw2IEBACiAJCQkJQjJDM0Q5RUMwRDAwNkMxRDAw
RUY2RjI2IC8qIHRleHQgKi8sCiAJCQkJQkNGQjJGNzQwOTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5h
LmNwcCAqLywKIAkJCQlCQ0ZCMkY3NTA5N0EyRTFBMDBCQTcwM0QgLyogQXJlbmEuaCAqLywKLQkJ
CQkyRUYxQkZGNjEyMUNCMEJEMDBDMjc2MjcgLyogQXN5bmNGaWxlU3RyZWFtLmggKi8sCiAJCQkJ
ODlEMDhEOUMxMjIyODQ1MTAwMTI0MURGIC8qIEFzeW5jRmlsZVN5c3RlbS5jcHAgKi8sCiAJCQkJ
ODlEMDhEOUQxMjIyODQ1MTAwMTI0MURGIC8qIEFzeW5jRmlsZVN5c3RlbS5oICovLAogCQkJCTg5
RDA4RDlFMTIyMjg0NTEwMDEyNDFERiAvKiBBc3luY0ZpbGVTeXN0ZW1DYWxsYmFja3MuaCAqLywK
QEAgLTIxNDE3LDcgKzIxNDE0LDYgQEAKIAkJCQk1MTJERDhGODBEOTFFNkFGMDAwRjg5RUUgLyog
QXJjaGl2ZVJlc291cmNlQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGQjJGNzcw
OTdBMkUxQTAwQkE3MDNEIC8qIEFyZW5hLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU2ODZDQTEz
QUMxODAyMDBCNjlDNjggLyogQXN5bmNBdWRpb0RlY29kZXIuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTJFRjFCRkY3MTIxQ0IwQkQwMEMyNzYyNyAvKiBBc3luY0ZpbGVTdHJlYW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg5RDA4REEwMTIyMjg0NTEwMDEyNDFERiAvKiBBc3luY0ZpbGVTeXN0ZW0uaCBp
biBIZWFkZXJzICovLAogCQkJCTg5RDA4REExMTIyMjg0NTEwMDEyNDFERiAvKiBBc3luY0ZpbGVT
eXN0ZW1DYWxsYmFja3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NkQ2Qzc3MTIyQjhBM0QwMDFG
RDFGNyAvKiBBc3luY0ZpbGVXcml0ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjI0NzYsNyArMjI0
NzIsNiBAQAogCQkJCTJFREYzNjlEMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkVGMUJGRUIxMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJl
YW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTJFRjFCRkY5MTIxQ0IwQ0UwMEMyNzYyNyAvKiBGaWxl
U3RyZWFtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk5NzZENkM4QzEyMkI4QTNEMDAxRkQx
RjcgLyogRmlsZVN0cmVhbVByb3h5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTRCM0Y3MzBDNzIy
MDQ3MDAwNTMwREYgLyogRmlsZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODk4Nzg1NjMx
MjJDQTA2NDAwM0FBQkRBIC8qIEZpbGVTeXN0ZW1DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODk4Nzg1NjUxMjJDQTA2NDAwM0FBQkRBIC8qIEZpbGVTeXN0ZW1DYWxsYmFja3MuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjQ1MjAsNiArMjQ1MTUsNyBAQAogCQkJCUUxQkU1MTJFMENGNkM1MTIw
MDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3N0UyRTBG
MTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDUz
NzM1MzEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUUx
Q0RFOTIyMTUwMTkxNjkwMDg2MkNDNSAvKiBBc3luY0ZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTc3Mjg2OTRGMTRGODg4MjUwMEY0ODREQyAvKiBFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc3Mjg2OTg0MTRGRDlBREEwMEY0ODREQyAvKiBK
U0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwpAQCAt
MjU1ODMsNyArMjU1NzksNiBAQAogCQkJCTJFNzU4NDFEMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxl
UmVhZGVyTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJFREYzNjlDMTIyQzk0QjQwMDJG
N0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRUYxQkZFQTEy
MUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk5NzZE
NkM4QjEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVN0cmVhbVByb3h5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUM1N0ZFREUxMTIxMkVFOUMwMDk3QkU2NSAvKiBGaWxlU3lzdGVtLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg5ODc4NTY0MTIyQ0EwNjQwMDNBQUJEQSAvKiBGaWxlU3lzdGVtQ2FsbGJh
Y2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxNjAzMDZDMENDNDM2MjMwMEM4QUMyNSAvKiBG
aWxlU3lzdGVtQ0YuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNzQ5Miw2ICsyNzQ4Nyw3IEBACiAJ
CQkJRTFCRTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzdFMkUwRTEyRjBGQzlDMDBDMTMzNzkgLyogWFNTQXVkaXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRDUzNzM1MjEzN0I2NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRTFDREU5MjAxNTAxOEVEMDAwODYyQ0M1IC8qIEFzeW5j
RmlsZVN0cmVhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NzI4Njk0RTE0Rjg4ODI1MDBGNDg0
REMgLyogRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc3Mjg2OTgzMTRGRDlBREEwMEY0ODREQyAvKiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBp
L0FzeW5jRmlsZVN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9Bc3luY0ZpbGVTdHJlYW0uY3BwCShyZXZpc2lvbiAxMDk3NjApCShmcm9tIFNvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVN0cmVhbVByb3h5LmNwcDoxMDk3NjApCisrKyBTb3VyY2UvV2ViQ29y
ZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJ
TEVfU1lTVEVNKQorCisjaW5jbHVkZSAiRmlsZVN0cmVhbVByb3h5LmgiCisKKyNpbmNsdWRlICJC
bG9iLmgiCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiRmlsZVN0cmVh
bS5oIgorI2luY2x1ZGUgIkZpbGVTdHJlYW1DbGllbnQuaCIKKyNpbmNsdWRlICJGaWxlVGhyZWFk
LmgiCisjaW5jbHVkZSAiRmlsZVRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitpbmxpbmUgRmlsZVN0cmVhbVByb3h5OjpGaWxlU3RyZWFtUHJveHkoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQorICAg
IDogQXN5bmNGaWxlU3RyZWFtKGNsaWVudCkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAg
ICwgbV9zdHJlYW0oRmlsZVN0cmVhbTo6Y3JlYXRlKCkpCit7Cit9CisKK1Bhc3NSZWZQdHI8Rmls
ZVN0cmVhbVByb3h5PiBGaWxlU3RyZWFtUHJveHk6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCit7CisgICAgUmVmUHRyPEZp
bGVTdHJlYW1Qcm94eT4gcHJveHkgPSBhZG9wdFJlZihuZXcgRmlsZVN0cmVhbVByb3h5KGNvbnRl
eHQsIGNsaWVudCkpOworCisgICAgLy8gSG9sZCBhIHJlZmVyZW5jZSBzbyB0aGF0IHRoZSBpbnN0
YW5jZSB3aWxsIG5vdCBnZXQgZGVsZXRlZCB3aGlsZSB0aGVyZSBhcmUgdGFza3Mgb24gdGhlIGZp
bGUgdGhyZWFkLgorICAgIC8vIFRoaXMgaXMgYmFsYW5jZWQgYnkgdGhlIGRlcmVmIGluIGRlcmVm
UHJveHlPbkNvbnRleHQgYmVsb3cuCisgICAgcHJveHktPnJlZigpOworCisgICAgcHJveHktPmZp
bGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2socHJveHkuZ2V0KCksICZG
aWxlU3RyZWFtUHJveHk6OnN0YXJ0T25GaWxlVGhyZWFkKSk7CisKKyAgICByZXR1cm4gcHJveHku
cmVsZWFzZSgpOworfQorCitGaWxlU3RyZWFtUHJveHk6On5GaWxlU3RyZWFtUHJveHkoKQorewor
fQorCitGaWxlVGhyZWFkKiBGaWxlU3RyZWFtUHJveHk6OmZpbGVUaHJlYWQoKQoreworICAgIEFT
U0VSVChtX2NvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICBBU1NFUlQobV9jb250ZXh0
LT5maWxlVGhyZWFkKCkpOworICAgIHJldHVybiBtX2NvbnRleHQtPmZpbGVUaHJlYWQoKTsKK30K
Kworc3RhdGljIHZvaWQgZGlkU3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJl
YW1Qcm94eSogcHJveHkpCit7CisgICAgaWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJv
eHktPmNsaWVudCgpLT5kaWRTdGFydCgpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6c3Rh
cnRPbkZpbGVUaHJlYWQoKQoreworICAgIGlmICghY2xpZW50KCkpCisgICAgICAgIHJldHVybjsK
KyAgICBtX3N0cmVhbS0+c3RhcnQoKTsKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNh
bGxiYWNrVGFzaygmZGlkU3RhcnQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30K
Kwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0b3AoKQoreworICAgIC8vIENsZWFyIHRoZSBjbGll
bnQgc28gdGhhdCB3ZSB3b24ndCBiZSBjYWxsaW5nIGNhbGxiYWNrcyBvbiB0aGUgY2xpZW50Lgor
ICAgIHNldENsaWVudCgwKTsKKworICAgIGZpbGVUaHJlYWQoKS0+dW5zY2hlZHVsZVRhc2tzKG1f
c3RyZWFtLmdldCgpKTsKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJl
YWRUYXNrKHRoaXMsICZGaWxlU3RyZWFtUHJveHk6OnN0b3BPbkZpbGVUaHJlYWQpKTsKK30KKwor
c3RhdGljIHZvaWQgZGVyZWZQcm94eU9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
RmlsZVN0cmVhbVByb3h5KiBwcm94eSkKK3sKKyAgICBBU1NFUlQocHJveHktPmhhc09uZVJlZigp
KTsKKyAgICBwcm94eS0+ZGVyZWYoKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0b3BP
bkZpbGVUaHJlYWQoKQoreworICAgIG1fc3RyZWFtLT5zdG9wKCk7CisgICAgbV9jb250ZXh0LT5w
b3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRlcmVmUHJveHlPbkNvbnRleHQsIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKK30KKworc3RhdGljIHZvaWQgZGlkR2V0U2l6ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgbG9uZyBsb25nIHNp
emUpCit7CisgICAgaWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgp
LT5kaWRHZXRTaXplKHNpemUpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6Z2V0U2l6ZShj
b25zdCBTdHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpCit7Cisg
ICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmls
ZVN0cmVhbVByb3h5OjpnZXRTaXplT25GaWxlVGhyZWFkLCBwYXRoLCBleHBlY3RlZE1vZGlmaWNh
dGlvblRpbWUpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmdldFNpemVPbkZpbGVUaHJl
YWQoY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQor
eworICAgIGxvbmcgbG9uZyBzaXplID0gbV9zdHJlYW0tPmdldFNpemUocGF0aCwgZXhwZWN0ZWRN
b2RpZmljYXRpb25UaW1lKTsKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNr
VGFzaygmZGlkR2V0U2l6ZSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgc2l6ZSkpOwor
fQorCitzdGF0aWMgdm9pZCBkaWRPcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3Ry
ZWFtUHJveHkqIHByb3h5LCBib29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKHByb3h5LT5jbGllbnQo
KSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRPcGVuKHN1Y2Nlc3MpOworfQorCit2b2lk
IEZpbGVTdHJlYW1Qcm94eTo6b3BlbkZvclJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxv
bmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRh
c2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94eTo6b3BlbkZvclJl
YWRPbkZpbGVUaHJlYWQsIHBhdGgsIG9mZnNldCwgbGVuZ3RoKSk7Cit9CisKK3ZvaWQgRmlsZVN0
cmVhbVByb3h5OjpvcGVuRm9yUmVhZE9uRmlsZVRocmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxv
bmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgYm9vbCBzdWNjZXNzID0g
bV9zdHJlYW0tPm9wZW5Gb3JSZWFkKHBhdGgsIG9mZnNldCwgbGVuZ3RoKTsKKyAgICBtX2NvbnRl
eHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkT3BlbiwgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyh0aGlzKSwgc3VjY2VzcykpOworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6b3Bl
bkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RU
YXNrKAorICAgICAgICBjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGVPbkZpbGVUaHJlYWQs
IHBhdGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JXcml0ZU9uRmlsZVRo
cmVhZChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYm9vbCBzdWNjZXNzID0gbV9zdHJlYW0t
Pm9wZW5Gb3JXcml0ZShwYXRoKTsKKyAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmZGlkT3BlbiwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgc3VjY2Vzcykp
OworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6Y2xvc2UoKQoreworICAgIGZpbGVUaHJlYWQo
KS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94eTo6
Y2xvc2VPbkZpbGVUaHJlYWQpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OmNsb3NlT25G
aWxlVGhyZWFkKCkKK3sKKyAgICBtX3N0cmVhbS0+Y2xvc2UoKTsKK30KKworc3RhdGljIHZvaWQg
ZGlkUmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwg
aW50IGJ5dGVzUmVhZCkKK3sKKyAgICBpZiAocHJveHktPmNsaWVudCgpKQorICAgICAgICBwcm94
eS0+Y2xpZW50KCktPmRpZFJlYWQoYnl0ZXNSZWFkKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJv
eHk6OnJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQoreworICAgIGZpbGVUaHJlYWQoKS0+
cG9zdFRhc2soCisgICAgICAgIGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFt
UHJveHk6OnJlYWRPbkZpbGVUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3MoYnVmZmVyKSwgbGVuZ3RoKSk7Cit9CisKK3ZvaWQgRmlsZVN0
cmVhbVByb3h5OjpyZWFkT25GaWxlVGhyZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKK3sK
KyAgICBpbnQgYnl0ZXNSZWFkID0gbV9zdHJlYW0tPnJlYWQoYnVmZmVyLCBsZW5ndGgpOworICAg
IG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRSZWFkLCBBbGxvd0Ny
b3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBieXRlc1JlYWQpKTsKK30KKworc3RhdGljIHZvaWQgZGlk
V3JpdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGlu
dCBieXRlc1dyaXR0ZW4pCit7CisgICAgaWYgKHByb3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJv
eHktPmNsaWVudCgpLT5kaWRXcml0ZShieXRlc1dyaXR0ZW4pOworfQorCit2b2lkIEZpbGVTdHJl
YW1Qcm94eTo6d3JpdGUoY29uc3QgS1VSTCYgYmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0aW9uLCBp
bnQgbGVuZ3RoKQoreworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVh
ZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94eTo6d3JpdGVPbkZpbGVUaHJlYWQsIGJsb2JVUkws
IHBvc2l0aW9uLCBsZW5ndGgpKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OndyaXRlT25G
aWxlVGhyZWFkKGNvbnN0IEtVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxl
bmd0aCkKK3sKKyAgICBpbnQgYnl0ZXNXcml0dGVuID0gbV9zdHJlYW0tPndyaXRlKGJsb2JVUkws
IHBvc2l0aW9uLCBsZW5ndGgpOworICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZkaWRXcml0ZSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgYnl0ZXNXcml0
dGVuKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFRydW5jYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBib29sIHN1Y2Nlc3MpCit7CisgICAgaWYgKHBy
b3h5LT5jbGllbnQoKSkKKyAgICAgICAgcHJveHktPmNsaWVudCgpLT5kaWRUcnVuY2F0ZShzdWNj
ZXNzKTsKK30KKwordm9pZCBGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlKGxvbmcgbG9uZyBwb3Np
dGlvbikKK3sKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNr
KHRoaXMsICZGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlT25GaWxlVGhyZWFkLCBwb3NpdGlvbikp
OworfQorCit2b2lkIEZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNhdGVPbkZpbGVUaHJlYWQobG9uZyBs
b25nIHBvc2l0aW9uKQoreworICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT50cnVuY2F0ZShw
b3NpdGlvbik7CisgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRp
ZFRydW5jYXRlLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBzdWNjZXNzKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKSB8fCBFTkFC
TEUoRklMRV9TWVNURU0pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0
cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9Bc3luY0ZpbGVT
dHJlYW0uY3BwCShyZXZpc2lvbiAxMDk3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Fz
eW5jRmlsZVN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzMsNyArMzMsNyBAQAogCiAjaWYgRU5B
QkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKIAotI2luY2x1ZGUgIkZpbGVTdHJlYW1Q
cm94eS5oIgorI2luY2x1ZGUgIkFzeW5jRmlsZVN0cmVhbS5oIgogCiAjaW5jbHVkZSAiQmxvYi5o
IgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgpAQCAtNDYsNDQgKzQ2LDQ0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIEZpbGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVBy
b3h5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNs
aWVudCkKLSAgICA6IEFzeW5jRmlsZVN0cmVhbShjbGllbnQpCi0gICAgLCBtX2NvbnRleHQoY29u
dGV4dCkKK2lubGluZSBBc3luY0ZpbGVTdHJlYW06OkFzeW5jRmlsZVN0cmVhbShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCisgICAgOiBt
X2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fc3RyZWFtKEZpbGVTdHJlYW06OmNyZWF0ZSgpKQor
ICAgICwgbV9jbGllbnQoY2xpZW50KQogewogfQogCi1QYXNzUmVmUHRyPEZpbGVTdHJlYW1Qcm94
eT4gRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQorUGFzc1JlZlB0cjxBc3luY0ZpbGVTdHJlYW0+
IEFzeW5jRmlsZVN0cmVhbTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKIHsKLSAgICBSZWZQdHI8RmlsZVN0cmVhbVByb3h5
PiBwcm94eSA9IGFkb3B0UmVmKG5ldyBGaWxlU3RyZWFtUHJveHkoY29udGV4dCwgY2xpZW50KSk7
CisgICAgUmVmUHRyPEFzeW5jRmlsZVN0cmVhbT4gcHJveHkgPSBhZG9wdFJlZihuZXcgQXN5bmNG
aWxlU3RyZWFtKGNvbnRleHQsIGNsaWVudCkpOwogCiAgICAgLy8gSG9sZCBhIHJlZmVyZW5jZSBz
byB0aGF0IHRoZSBpbnN0YW5jZSB3aWxsIG5vdCBnZXQgZGVsZXRlZCB3aGlsZSB0aGVyZSBhcmUg
dGFza3Mgb24gdGhlIGZpbGUgdGhyZWFkLgogICAgIC8vIFRoaXMgaXMgYmFsYW5jZWQgYnkgdGhl
IGRlcmVmIGluIGRlcmVmUHJveHlPbkNvbnRleHQgYmVsb3cuCiAgICAgcHJveHktPnJlZigpOwog
Ci0gICAgcHJveHktPmZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2so
cHJveHkuZ2V0KCksICZGaWxlU3RyZWFtUHJveHk6OnN0YXJ0T25GaWxlVGhyZWFkKSk7CisgICAg
cHJveHktPmZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2socHJveHku
Z2V0KCksICZBc3luY0ZpbGVTdHJlYW06OnN0YXJ0T25GaWxlVGhyZWFkKSk7CiAKICAgICByZXR1
cm4gcHJveHkucmVsZWFzZSgpOwogfQogCi1GaWxlU3RyZWFtUHJveHk6On5GaWxlU3RyZWFtUHJv
eHkoKQorQXN5bmNGaWxlU3RyZWFtOjp+QXN5bmNGaWxlU3RyZWFtKCkKIHsKIH0KIAotRmlsZVRo
cmVhZCogRmlsZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKK0ZpbGVUaHJlYWQqIEFzeW5jRmls
ZVN0cmVhbTo6ZmlsZVRocmVhZCgpCiB7CiAgICAgQVNTRVJUKG1fY29udGV4dC0+aXNDb250ZXh0
VGhyZWFkKCkpOwogICAgIEFTU0VSVChtX2NvbnRleHQtPmZpbGVUaHJlYWQoKSk7CiAgICAgcmV0
dXJuIG1fY29udGV4dC0+ZmlsZVRocmVhZCgpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRTdGFydChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSkKK3N0YXRpYyB2
b2lkIGRpZFN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0ZpbGVTdHJlYW0qIHBy
b3h5KQogewogICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCiAgICAgICAgIHByb3h5LT5jbGllbnQo
KS0+ZGlkU3RhcnQoKTsKIH0KIAotdm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0YXJ0T25GaWxlVGhy
ZWFkKCkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjpzdGFydE9uRmlsZVRocmVhZCgpCiB7CiAgICAg
aWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTEsMTMyICs5MSwxMzIgQEAgdm9p
ZCBGaWxlU3RyZWFtUHJveHk6OnN0YXJ0T25GaWxlVGhyZWFkKAogICAgIG1fY29udGV4dC0+cG9z
dFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRTdGFydCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cyh0aGlzKSkpOwogfQogCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6c3RvcCgpCit2b2lkIEFzeW5j
RmlsZVN0cmVhbTo6c3RvcCgpCiB7CiAgICAgLy8gQ2xlYXIgdGhlIGNsaWVudCBzbyB0aGF0IHdl
IHdvbid0IGJlIGNhbGxpbmcgY2FsbGJhY2tzIG9uIHRoZSBjbGllbnQuCiAgICAgc2V0Q2xpZW50
KDApOwogCiAgICAgZmlsZVRocmVhZCgpLT51bnNjaGVkdWxlVGFza3MobV9zdHJlYW0uZ2V0KCkp
OwotICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywg
JkZpbGVTdHJlYW1Qcm94eTo6c3RvcE9uRmlsZVRocmVhZCkpOworICAgIGZpbGVUaHJlYWQoKS0+
cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkFzeW5jRmlsZVN0cmVhbTo6c3Rv
cE9uRmlsZVRocmVhZCkpOwogfQogCi1zdGF0aWMgdm9pZCBkZXJlZlByb3h5T25Db250ZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5KQorc3RhdGljIHZv
aWQgZGVyZWZQcm94eU9uQ29udGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNGaWxl
U3RyZWFtKiBwcm94eSkKIHsKICAgICBBU1NFUlQocHJveHktPmhhc09uZVJlZigpKTsKICAgICBw
cm94eS0+ZGVyZWYoKTsKIH0KIAotdm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0b3BPbkZpbGVUaHJl
YWQoKQordm9pZCBBc3luY0ZpbGVTdHJlYW06OnN0b3BPbkZpbGVUaHJlYWQoKQogewogICAgIG1f
c3RyZWFtLT5zdG9wKCk7CiAgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rh
c2soJmRlcmVmUHJveHlPbkNvbnRleHQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsK
IH0KIAotc3RhdGljIHZvaWQgZGlkR2V0U2l6ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmls
ZVN0cmVhbVByb3h5KiBwcm94eSwgbG9uZyBsb25nIHNpemUpCitzdGF0aWMgdm9pZCBkaWRHZXRT
aXplKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBBc3luY0ZpbGVTdHJlYW0qIHByb3h5LCBsb25n
IGxvbmcgc2l6ZSkKIHsKICAgICBpZiAocHJveHktPmNsaWVudCgpKQogICAgICAgICBwcm94eS0+
Y2xpZW50KCktPmRpZEdldFNpemUoc2l6ZSk7CiB9CiAKLXZvaWQgRmlsZVN0cmVhbVByb3h5Ojpn
ZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZSkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjpnZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91
YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKIHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RU
YXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFtUHJveHk6OmdldFNpemVP
bkZpbGVUaHJlYWQsIHBhdGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkpOworICAgIGZpbGVU
aHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkFzeW5jRmlsZVN0
cmVhbTo6Z2V0U2l6ZU9uRmlsZVRocmVhZCwgcGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1l
KSk7CiB9CiAKLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpnZXRTaXplT25GaWxlVGhyZWFkKGNvbnN0
IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKK3ZvaWQgQXN5
bmNGaWxlU3RyZWFtOjpnZXRTaXplT25GaWxlVGhyZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91
YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKIHsKICAgICBsb25nIGxvbmcgc2l6ZSA9IG1f
c3RyZWFtLT5nZXRTaXplKHBhdGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7CiAgICAgbV9j
b250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZEdldFNpemUsIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3ModGhpcyksIHNpemUpKTsKIH0KIAotc3RhdGljIHZvaWQgZGlkT3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgYm9vbCBzdWNj
ZXNzKQorc3RhdGljIHZvaWQgZGlkT3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQXN5bmNG
aWxlU3RyZWFtKiBwcm94eSwgYm9vbCBzdWNjZXNzKQogewogICAgIGlmIChwcm94eS0+Y2xpZW50
KCkpCiAgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkT3BlbihzdWNjZXNzKTsKIH0KIAotdm9p
ZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBs
b25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjpvcGVu
Rm9yUmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBs
ZW5ndGgpCiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFz
ayh0aGlzLCAmRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yUmVhZE9uRmlsZVRocmVhZCwgcGF0aCwg
b2Zmc2V0LCBsZW5ndGgpKTsKKyAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVU
aHJlYWRUYXNrKHRoaXMsICZBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkT25GaWxlVGhyZWFk
LCBwYXRoLCBvZmZzZXQsIGxlbmd0aCkpOwogfQogCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6b3Bl
bkZvclJlYWRPbkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zmc2V0
LCBsb25nIGxvbmcgbGVuZ3RoKQordm9pZCBBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JSZWFkT25G
aWxlVGhyZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25n
IGxlbmd0aCkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+b3BlbkZvclJlYWQocGF0
aCwgb2Zmc2V0LCBsZW5ndGgpOwogICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZkaWRPcGVuLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBzdWNjZXNzKSk7
CiB9CiAKLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGUoY29uc3QgU3RyaW5nJiBw
YXRoKQordm9pZCBBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JXcml0ZShjb25zdCBTdHJpbmcmIHBh
dGgpCiB7CiAgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzaygKICAgICAgICAgY3JlYXRlRmlsZVRo
cmVhZFRhc2sodGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkZpbGVTdHJlYW1Q
cm94eTo6b3BlbkZvcldyaXRlT25GaWxlVGhyZWFkLCBwYXRoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZBc3luY0ZpbGVTdHJlYW06Om9wZW5Gb3JXcml0ZU9uRmlsZVRocmVhZCwg
cGF0aCkpOwogfQogCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6b3BlbkZvcldyaXRlT25GaWxlVGhy
ZWFkKGNvbnN0IFN0cmluZyYgcGF0aCkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjpvcGVuRm9yV3Jp
dGVPbkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIGJvb2wgc3VjY2VzcyA9
IG1fc3RyZWFtLT5vcGVuRm9yV3JpdGUocGF0aCk7CiAgICAgbV9jb250ZXh0LT5wb3N0VGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJmRpZE9wZW4sIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyks
IHN1Y2Nlc3MpKTsKIH0KIAotdm9pZCBGaWxlU3RyZWFtUHJveHk6OmNsb3NlKCkKK3ZvaWQgQXN5
bmNGaWxlU3RyZWFtOjpjbG9zZSgpCiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVh
dGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmlsZVN0cmVhbVByb3h5OjpjbG9zZU9uRmlsZVRocmVh
ZCkpOworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhp
cywgJkFzeW5jRmlsZVN0cmVhbTo6Y2xvc2VPbkZpbGVUaHJlYWQpKTsKIH0KIAotdm9pZCBGaWxl
U3RyZWFtUHJveHk6OmNsb3NlT25GaWxlVGhyZWFkKCkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjpj
bG9zZU9uRmlsZVRocmVhZCgpCiB7CiAgICAgbV9zdHJlYW0tPmNsb3NlKCk7CiB9CiAKLXN0YXRp
YyB2b2lkIGRpZFJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSog
cHJveHksIGludCBieXRlc1JlYWQpCitzdGF0aWMgdm9pZCBkaWRSZWFkKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBBc3luY0ZpbGVTdHJlYW0qIHByb3h5LCBpbnQgYnl0ZXNSZWFkKQogewogICAg
IGlmIChwcm94eS0+Y2xpZW50KCkpCiAgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkUmVhZChi
eXRlc1JlYWQpOwogfQogCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6cmVhZChjaGFyKiBidWZmZXIs
IGludCBsZW5ndGgpCit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6cmVhZChjaGFyKiBidWZmZXIsIGlu
dCBsZW5ndGgpCiB7CiAgICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzaygKLSAgICAgICAgY3JlYXRl
RmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94eTo6cmVhZE9uRmlsZVRocmVhZCwK
KyAgICAgICAgY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkFzeW5jRmlsZVN0cmVhbTo6cmVh
ZE9uRmlsZVRocmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1Ro
cmVhZEFjY2VzcyhidWZmZXIpLCBsZW5ndGgpKTsKIH0KIAotdm9pZCBGaWxlU3RyZWFtUHJveHk6
OnJlYWRPbkZpbGVUaHJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQordm9pZCBBc3luY0Zp
bGVTdHJlYW06OnJlYWRPbkZpbGVUaHJlYWQoY2hhciogYnVmZmVyLCBpbnQgbGVuZ3RoKQogewog
ICAgIGludCBieXRlc1JlYWQgPSBtX3N0cmVhbS0+cmVhZChidWZmZXIsIGxlbmd0aCk7CiAgICAg
bV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZFJlYWQsIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3ModGhpcyksIGJ5dGVzUmVhZCkpOwogfQogCi1zdGF0aWMgdm9pZCBkaWRX
cml0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBwcm94eSwgaW50
IGJ5dGVzV3JpdHRlbikKK3N0YXRpYyB2b2lkIGRpZFdyaXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBBc3luY0ZpbGVTdHJlYW0qIHByb3h5LCBpbnQgYnl0ZXNXcml0dGVuKQogewogICAgIGlm
IChwcm94eS0+Y2xpZW50KCkpCiAgICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkV3JpdGUoYnl0
ZXNXcml0dGVuKTsKIH0KIAotdm9pZCBGaWxlU3RyZWFtUHJveHk6OndyaXRlKGNvbnN0IEtVUkwm
IGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCkKK3ZvaWQgQXN5bmNGaWxl
U3RyZWFtOjp3cml0ZShjb25zdCBLVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGlu
dCBsZW5ndGgpCiB7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFk
VGFzayh0aGlzLCAmRmlsZVN0cmVhbVByb3h5Ojp3cml0ZU9uRmlsZVRocmVhZCwgYmxvYlVSTCwg
cG9zaXRpb24sIGxlbmd0aCkpOworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmls
ZVRocmVhZFRhc2sodGhpcywgJkFzeW5jRmlsZVN0cmVhbTo6d3JpdGVPbkZpbGVUaHJlYWQsIGJs
b2JVUkwsIHBvc2l0aW9uLCBsZW5ndGgpKTsKIH0KIAotdm9pZCBGaWxlU3RyZWFtUHJveHk6Ondy
aXRlT25GaWxlVGhyZWFkKGNvbnN0IEtVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwg
aW50IGxlbmd0aCkKK3ZvaWQgQXN5bmNGaWxlU3RyZWFtOjp3cml0ZU9uRmlsZVRocmVhZChjb25z
dCBLVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpCiB7CiAgICAg
aW50IGJ5dGVzV3JpdHRlbiA9IG1fc3RyZWFtLT53cml0ZShibG9iVVJMLCBwb3NpdGlvbiwgbGVu
Z3RoKTsKICAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkV3Jp
dGUsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIGJ5dGVzV3JpdHRlbikpOwogfQogCi1z
dGF0aWMgdm9pZCBkaWRUcnVuY2F0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVh
bVByb3h5KiBwcm94eSwgYm9vbCBzdWNjZXNzKQorc3RhdGljIHZvaWQgZGlkVHJ1bmNhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIEFzeW5jRmlsZVN0cmVhbSogcHJveHksIGJvb2wgc3VjY2Vz
cykKIHsKICAgICBpZiAocHJveHktPmNsaWVudCgpKQogICAgICAgICBwcm94eS0+Y2xpZW50KCkt
PmRpZFRydW5jYXRlKHN1Y2Nlc3MpOwogfQogCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6dHJ1bmNh
dGUobG9uZyBsb25nIHBvc2l0aW9uKQordm9pZCBBc3luY0ZpbGVTdHJlYW06OnRydW5jYXRlKGxv
bmcgbG9uZyBwb3NpdGlvbikKIHsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZp
bGVUaHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlT25GaWxlVGhyZWFk
LCBwb3NpdGlvbikpOworICAgIGZpbGVUaHJlYWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVh
ZFRhc2sodGhpcywgJkFzeW5jRmlsZVN0cmVhbTo6dHJ1bmNhdGVPbkZpbGVUaHJlYWQsIHBvc2l0
aW9uKSk7CiB9CiAKLXZvaWQgRmlsZVN0cmVhbVByb3h5Ojp0cnVuY2F0ZU9uRmlsZVRocmVhZChs
b25nIGxvbmcgcG9zaXRpb24pCit2b2lkIEFzeW5jRmlsZVN0cmVhbTo6dHJ1bmNhdGVPbkZpbGVU
aHJlYWQobG9uZyBsb25nIHBvc2l0aW9uKQogewogICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFt
LT50cnVuY2F0ZShwb3NpdGlvbik7CiAgICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJmRpZFRydW5jYXRlLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCBzdWNj
ZXNzKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgJKHJl
dmlzaW9uIDEwOTc2MCkJKGZyb20gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3RyZWFtUHJv
eHkuaDoxMDk3NjApCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVN0cmVhbVByb3h5X2gK
KyNkZWZpbmUgRmlsZVN0cmVhbVByb3h5X2gKKworI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUo
RklMRV9TWVNURU0pCisKKyNpbmNsdWRlICJBc3luY0ZpbGVTdHJlYW0uaCIKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRmlsZVN0cmVhbTsKK2NsYXNzIEZpbGVUaHJlYWQ7CitjbGFzcyBLVVJM
OworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworLy8gQSBwcm94eSBtb2R1bGUgdGhh
dCBhc3luY2hyb25vdXNseSBjYWxscyBjb3JyZXNwb25kaW5nIEZpbGVTdHJlYW0gbWV0aG9kcyBv
biB0aGUgZmlsZSB0aHJlYWQuICBOb3RlOiB5b3UgbXVzdCBjYWxsIHN0b3AoKSBmaXJzdCBhbmQg
dGhlbiByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gZGVzdHJ1Y3QgdGhlIEZpbGVTdHJlYW1Qcm94
eSBpbnN0YW5jZS4KKy8vIEZJWE1FOiBMb2dpY2FsbHksIHRoaXMgY2xhc3MgaXMgcGFydCBvZiBw
bGF0Zm9ybS4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBpcyB3aGF0IGtlZXBzIGl0IG91dHNpZGUg
Zm9yIG5vdy4KK2NsYXNzIEZpbGVTdHJlYW1Qcm94eSA6IHB1YmxpYyBBc3luY0ZpbGVTdHJlYW0g
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVTdHJlYW1Qcm94eT4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtQ2xpZW50Kik7CisgICAgdmlydHVh
bCB+RmlsZVN0cmVhbVByb3h5KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2l6ZShjb25zdCBT
dHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOworICAgIHZpcnR1
YWwgdm9pZCBvcGVuRm9yUmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQs
IGxvbmcgbG9uZyBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBvcGVuRm9yV3JpdGUoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCB3cml0
ZShjb25zdCBLVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpOwor
ICAgIHZpcnR1YWwgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pOworCisgICAgLy8g
U3RvcHMgdGhlIHByb3h5IGFuZCBzY2hlZHVsZXMgaXQgdG8gYmUgZGVzdHJ1Y3RlZC4gQWxsIHRo
ZSBwZW5kaW5nIHRhc2tzIHdpbGwgYmUgYWJvcnRlZCBhbmQgdGhlIGZpbGUgc3RyZWFtIHdpbGwg
YmUgY2xvc2VkLgorICAgIC8vIE5vdGU6IHRoZSBjYWxsZXIgc2hvdWxkIGRlcmVmIHRoZSBpbnN0
YW5jZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHN0b3AoKS4KKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpOworCitwcml2YXRlOgorICAgIEZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgRmlsZVN0cmVhbUNsaWVudCopOworCisgICAgRmlsZVRocmVhZCogZmlsZVRocmVh
ZCgpOworCisgICAgLy8gQ2FsbGVkIG9uIEZpbGUgdGhyZWFkLgorICAgIHZvaWQgc3RhcnRPbkZp
bGVUaHJlYWQoKTsKKyAgICB2b2lkIHN0b3BPbkZpbGVUaHJlYWQoKTsKKyAgICB2b2lkIGdldFNp
emVPbkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lKTsKKyAgICB2b2lkIG9wZW5Gb3JSZWFkT25GaWxlVGhyZWFkKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7CisgICAgdm9pZCBv
cGVuRm9yV3JpdGVPbkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2b2lkIGNs
b3NlT25GaWxlVGhyZWFkKCk7CisgICAgdm9pZCByZWFkT25GaWxlVGhyZWFkKGNoYXIqIGJ1ZmZl
ciwgaW50IGxlbmd0aCk7CisgICAgdm9pZCB3cml0ZU9uRmlsZVRocmVhZChjb25zdCBLVVJMJiBi
bG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpOworICAgIHZvaWQgdHJ1bmNh
dGVPbkZpbGVUaHJlYWQobG9uZyBsb25nIHBvc2l0aW9uKTsKKworICAgIFJlZlB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEZpbGVTdHJlYW0+IG1fc3Ry
ZWFtOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJM
T0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKKworI2VuZGlmIC8vIEZpbGVTdHJlYW1Qcm94eV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0FzeW5jRmlsZVN0cmVhbS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgJKHJldmlzaW9u
IDEwOTc2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQXN5bmNGaWxlU3RyZWFtLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCkBAIC0yOSw0NSArMjksNDUgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBGaWxlU3RyZWFtUHJveHlfaAotI2RlZmluZSBGaWxlU3RyZWFtUHJveHlfaAorI2lm
bmRlZiBBc3luY0ZpbGVTdHJlYW1faAorI2RlZmluZSBBc3luY0ZpbGVTdHJlYW1faAogCiAjaWYg
RU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKIAotI2luY2x1ZGUgIkFzeW5jRmls
ZVN0cmVhbS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGaWxlU3RyZWFtQ2xpZW50Owog
Y2xhc3MgRmlsZVN0cmVhbTsKIGNsYXNzIEZpbGVUaHJlYWQ7CiBjbGFzcyBLVVJMOwogY2xhc3Mg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAotLy8gQSBwcm94eSBtb2R1bGUgdGhhdCBhc3luY2hy
b25vdXNseSBjYWxscyBjb3JyZXNwb25kaW5nIEZpbGVTdHJlYW0gbWV0aG9kcyBvbiB0aGUgZmls
ZSB0aHJlYWQuICBOb3RlOiB5b3UgbXVzdCBjYWxsIHN0b3AoKSBmaXJzdCBhbmQgdGhlbiByZWxl
YXNlIHRoZSByZWZlcmVuY2UgdG8gZGVzdHJ1Y3QgdGhlIEZpbGVTdHJlYW1Qcm94eSBpbnN0YW5j
ZS4KLS8vIEZJWE1FOiBMb2dpY2FsbHksIHRoaXMgY2xhc3MgaXMgcGFydCBvZiBwbGF0Zm9ybS4g
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCBpcyB3aGF0IGtlZXBzIGl0IG91dHNpZGUgZm9yIG5vdy4K
LWNsYXNzIEZpbGVTdHJlYW1Qcm94eSA6IHB1YmxpYyBBc3luY0ZpbGVTdHJlYW0geworY2xhc3Mg
QXN5bmNGaWxlU3RyZWFtIDogcHVibGljIFJlZkNvdW50ZWQ8QXN5bmNGaWxlU3RyZWFtPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVN0cmVhbVByb3h5PiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1DbGllbnQqKTsKLSAgICB2aXJ0dWFsIH5G
aWxlU3RyZWFtUHJveHkoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBc3luY0ZpbGVTdHJlYW0+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbUNsaWVudCopOworICAg
IH5Bc3luY0ZpbGVTdHJlYW0oKTsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXRTaXplKGNvbnN0IFN0
cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSk7Ci0gICAgdmlydHVh
bCB2b2lkIG9wZW5Gb3JSZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwg
bG9uZyBsb25nIGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5Gb3JXcml0ZShjb25zdCBT
dHJpbmcmIHBhdGgpOwotICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwotICAgIHZpcnR1YWwgdm9p
ZCByZWFkKGNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRl
KGNvbnN0IEtVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbik7CisgICAgdm9pZCBn
ZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZSk7CisgICAgdm9pZCBvcGVuRm9yUmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBv
ZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOworICAgIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0
cmluZyYgcGF0aCk7CisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgcmVhZChjaGFyKiBidWZm
ZXIsIGludCBsZW5ndGgpOworICAgIHZvaWQgd3JpdGUoY29uc3QgS1VSTCYgYmxvYlVSTCwgbG9u
ZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKTsKKyAgICB2b2lkIHRydW5jYXRlKGxvbmcgbG9u
ZyBwb3NpdGlvbik7CiAKICAgICAvLyBTdG9wcyB0aGUgcHJveHkgYW5kIHNjaGVkdWxlcyBpdCB0
byBiZSBkZXN0cnVjdGVkLiBBbGwgdGhlIHBlbmRpbmcgdGFza3Mgd2lsbCBiZSBhYm9ydGVkIGFu
ZCB0aGUgZmlsZSBzdHJlYW0gd2lsbCBiZSBjbG9zZWQuCiAgICAgLy8gTm90ZTogdGhlIGNhbGxl
ciBzaG91bGQgZGVyZWYgdGhlIGluc3RhbmNlIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgc3Rv
cCgpLgotICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisgICAgdm9pZCBzdG9wKCk7CisKKyAgICBG
aWxlU3RyZWFtQ2xpZW50KiBjbGllbnQoKSBjb25zdCB7IHJldHVybiBtX2NsaWVudDsgfQorICAg
IHZvaWQgc2V0Q2xpZW50KEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNs
aWVudDsgfQogCiBwcml2YXRlOgotICAgIEZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgRmlsZVN0cmVhbUNsaWVudCopOworICAgIEFzeW5jRmlsZVN0cmVhbShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbUNsaWVudCopOwogCiAgICAgRmlsZVRocmVhZCog
ZmlsZVRocmVhZCgpOwogCkBAIC04NCwxMCArODQsMTIgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0
cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7CiAgICAgUmVmUHRyPEZpbGVTdHJl
YW0+IG1fc3RyZWFtOworCisgICAgRmlsZVN0cmVhbUNsaWVudCogbV9jbGllbnQ7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoQkxPQikgfHwgRU5BQkxF
KEZJTEVfU1lTVEVNKQogCi0jZW5kaWYgLy8gRmlsZVN0cmVhbVByb3h5X2gKKyNlbmRpZiAvLyBB
c3luY0ZpbGVTdHJlYW1faApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3RyZWFt
UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVN0cmVh
bVByb3h5LmNwcAkocmV2aXNpb24gMTA5ODA0KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9G
aWxlU3RyZWFtUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEJMT0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkK
LQotI2luY2x1ZGUgIkZpbGVTdHJlYW1Qcm94eS5oIgotCi0jaW5jbHVkZSAiQmxvYi5oIgotI2lu
Y2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgIkZpbGVTdHJlYW0uaCIKLSNpbmNs
dWRlICJGaWxlU3RyZWFtQ2xpZW50LmgiCi0jaW5jbHVkZSAiRmlsZVRocmVhZC5oIgotI2luY2x1
ZGUgIkZpbGVUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
aW5saW5lIEZpbGVTdHJlYW1Qcm94eTo6RmlsZVN0cmVhbVByb3h5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIEZpbGVTdHJlYW1DbGllbnQqIGNsaWVudCkKLSAgICA6IEFzeW5jRmls
ZVN0cmVhbShjbGllbnQpCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc3RyZWFt
KEZpbGVTdHJlYW06OmNyZWF0ZSgpKQotewotfQotCi1QYXNzUmVmUHRyPEZpbGVTdHJlYW1Qcm94
eT4gRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KQotewotICAgIFJlZlB0cjxGaWxlU3RyZWFtUHJv
eHk+IHByb3h5ID0gYWRvcHRSZWYobmV3IEZpbGVTdHJlYW1Qcm94eShjb250ZXh0LCBjbGllbnQp
KTsKLQotICAgIC8vIEhvbGQgYSByZWZlcmVuY2Ugc28gdGhhdCB0aGUgaW5zdGFuY2Ugd2lsbCBu
b3QgZ2V0IGRlbGV0ZWQgd2hpbGUgdGhlcmUgYXJlIHRhc2tzIG9uIHRoZSBmaWxlIHRocmVhZC4K
LSAgICAvLyBUaGlzIGlzIGJhbGFuY2VkIGJ5IHRoZSBkZXJlZiBpbiBkZXJlZlByb3h5T25Db250
ZXh0IGJlbG93LgotICAgIHByb3h5LT5yZWYoKTsKLQotICAgIHByb3h5LT5maWxlVGhyZWFkKCkt
PnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHByb3h5LmdldCgpLCAmRmlsZVN0cmVhbVBy
b3h5OjpzdGFydE9uRmlsZVRocmVhZCkpOwotCi0gICAgcmV0dXJuIHByb3h5LnJlbGVhc2UoKTsK
LX0KLQotRmlsZVN0cmVhbVByb3h5Ojp+RmlsZVN0cmVhbVByb3h5KCkKLXsKLX0KLQotRmlsZVRo
cmVhZCogRmlsZVN0cmVhbVByb3h5OjpmaWxlVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQobV9jb250
ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fY29udGV4dC0+ZmlsZVRocmVh
ZCgpKTsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5maWxlVGhyZWFkKCk7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRpZFN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHBy
b3h5KQotewotICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCi0gICAgICAgIHByb3h5LT5jbGllbnQo
KS0+ZGlkU3RhcnQoKTsKLX0KLQotdm9pZCBGaWxlU3RyZWFtUHJveHk6OnN0YXJ0T25GaWxlVGhy
ZWFkKCkKLXsKLSAgICBpZiAoIWNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zdHJl
YW0tPnN0YXJ0KCk7Ci0gICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2so
JmRpZFN0YXJ0LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7Ci19Ci0KLXZvaWQgRmls
ZVN0cmVhbVByb3h5OjpzdG9wKCkKLXsKLSAgICAvLyBDbGVhciB0aGUgY2xpZW50IHNvIHRoYXQg
d2Ugd29uJ3QgYmUgY2FsbGluZyBjYWxsYmFja3Mgb24gdGhlIGNsaWVudC4KLSAgICBzZXRDbGll
bnQoMCk7Ci0KLSAgICBmaWxlVGhyZWFkKCktPnVuc2NoZWR1bGVUYXNrcyhtX3N0cmVhbS5nZXQo
KSk7Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlz
LCAmRmlsZVN0cmVhbVByb3h5OjpzdG9wT25GaWxlVGhyZWFkKSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IGRlcmVmUHJveHlPbkNvbnRleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Q
cm94eSogcHJveHkpCi17Ci0gICAgQVNTRVJUKHByb3h5LT5oYXNPbmVSZWYoKSk7Ci0gICAgcHJv
eHktPmRlcmVmKCk7Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpzdG9wT25GaWxlVGhyZWFk
KCkKLXsKLSAgICBtX3N0cmVhbS0+c3RvcCgpOwotICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZkZXJlZlByb3h5T25Db250ZXh0LCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKHRoaXMpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZEdldFNpemUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGxvbmcgbG9uZyBzaXplKQotewotICAg
IGlmIChwcm94eS0+Y2xpZW50KCkpCi0gICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkR2V0U2l6
ZShzaXplKTsKLX0KLQotdm9pZCBGaWxlU3RyZWFtUHJveHk6OmdldFNpemUoY29uc3QgU3RyaW5n
JiBwYXRoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKQotewotICAgIGZpbGVUaHJl
YWQoKS0+cG9zdFRhc2soY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywgJkZpbGVTdHJlYW1Qcm94
eTo6Z2V0U2l6ZU9uRmlsZVRocmVhZCwgcGF0aCwgZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lKSk7
Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpnZXRTaXplT25GaWxlVGhyZWFkKGNvbnN0IFN0
cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZSkKLXsKLSAgICBsb25n
IGxvbmcgc2l6ZSA9IG1fc3RyZWFtLT5nZXRTaXplKHBhdGgsIGV4cGVjdGVkTW9kaWZpY2F0aW9u
VGltZSk7Ci0gICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZEdl
dFNpemUsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHNpemUpKTsKLX0KLQotc3RhdGlj
IHZvaWQgZGlkT3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0cmVhbVByb3h5KiBw
cm94eSwgYm9vbCBzdWNjZXNzKQotewotICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCi0gICAgICAg
IHByb3h5LT5jbGllbnQoKS0+ZGlkT3BlbihzdWNjZXNzKTsKLX0KLQotdm9pZCBGaWxlU3RyZWFt
UHJveHk6Om9wZW5Gb3JSZWFkKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwg
bG9uZyBsb25nIGxlbmd0aCkKLXsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZp
bGVUaHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JSZWFkT25GaWxlVGhy
ZWFkLCBwYXRoLCBvZmZzZXQsIGxlbmd0aCkpOwotfQotCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6
b3BlbkZvclJlYWRPbkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcgb2Zm
c2V0LCBsb25nIGxvbmcgbGVuZ3RoKQotewotICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT5v
cGVuRm9yUmVhZChwYXRoLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgbV9jb250ZXh0LT5wb3N0VGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJmRpZE9wZW4sIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhp
cyksIHN1Y2Nlc3MpKTsKLX0KLQotdm9pZCBGaWxlU3RyZWFtUHJveHk6Om9wZW5Gb3JXcml0ZShj
b25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzaygKLSAgICAg
ICAgY3JlYXRlRmlsZVRocmVhZFRhc2sodGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJkZpbGVTdHJlYW1Qcm94eTo6b3BlbkZvcldyaXRlT25GaWxlVGhyZWFkLCBwYXRoKSk7Ci19
Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpvcGVuRm9yV3JpdGVPbkZpbGVUaHJlYWQoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIGJvb2wgc3VjY2VzcyA9IG1fc3RyZWFtLT5vcGVuRm9yV3Jp
dGUocGF0aCk7Ci0gICAgbV9jb250ZXh0LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmRp
ZE9wZW4sIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHN1Y2Nlc3MpKTsKLX0KLQotdm9p
ZCBGaWxlU3RyZWFtUHJveHk6OmNsb3NlKCkKLXsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNr
KGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMsICZGaWxlU3RyZWFtUHJveHk6OmNsb3NlT25GaWxl
VGhyZWFkKSk7Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpjbG9zZU9uRmlsZVRocmVhZCgp
Ci17Ci0gICAgbV9zdHJlYW0tPmNsb3NlKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZFJlYWQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVTdHJlYW1Qcm94eSogcHJveHksIGludCBieXRlc1Jl
YWQpCi17Ci0gICAgaWYgKHByb3h5LT5jbGllbnQoKSkKLSAgICAgICAgcHJveHktPmNsaWVudCgp
LT5kaWRSZWFkKGJ5dGVzUmVhZCk7Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5OjpyZWFkKGNo
YXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKLXsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKAot
ICAgICAgICBjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmlsZVN0cmVhbVByb3h5OjpyZWFk
T25GaWxlVGhyZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKGJ1ZmZlciksIGxlbmd0aCkpOwotfQotCi12b2lkIEZpbGVTdHJlYW1Qcm94eTo6
cmVhZE9uRmlsZVRocmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpCi17Ci0gICAgaW50IGJ5
dGVzUmVhZCA9IG1fc3RyZWFtLT5yZWFkKGJ1ZmZlciwgbGVuZ3RoKTsKLSAgICBtX2NvbnRleHQt
PnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkUmVhZCwgQWxsb3dDcm9zc1RocmVhZEFj
Y2Vzcyh0aGlzKSwgYnl0ZXNSZWFkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpZFdyaXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtUHJveHkqIHByb3h5LCBpbnQgYnl0ZXNXcml0
dGVuKQotewotICAgIGlmIChwcm94eS0+Y2xpZW50KCkpCi0gICAgICAgIHByb3h5LT5jbGllbnQo
KS0+ZGlkV3JpdGUoYnl0ZXNXcml0dGVuKTsKLX0KLQotdm9pZCBGaWxlU3RyZWFtUHJveHk6Ondy
aXRlKGNvbnN0IEtVUkwmIGJsb2JVUkwsIGxvbmcgbG9uZyBwb3NpdGlvbiwgaW50IGxlbmd0aCkK
LXsKLSAgICBmaWxlVGhyZWFkKCktPnBvc3RUYXNrKGNyZWF0ZUZpbGVUaHJlYWRUYXNrKHRoaXMs
ICZGaWxlU3RyZWFtUHJveHk6OndyaXRlT25GaWxlVGhyZWFkLCBibG9iVVJMLCBwb3NpdGlvbiwg
bGVuZ3RoKSk7Ci19Ci0KLXZvaWQgRmlsZVN0cmVhbVByb3h5Ojp3cml0ZU9uRmlsZVRocmVhZChj
b25zdCBLVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpCi17Ci0g
ICAgaW50IGJ5dGVzV3JpdHRlbiA9IG1fc3RyZWFtLT53cml0ZShibG9iVVJMLCBwb3NpdGlvbiwg
bGVuZ3RoKTsKLSAgICBtX2NvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlk
V3JpdGUsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIGJ5dGVzV3JpdHRlbikpOwotfQot
Ci1zdGF0aWMgdm9pZCBkaWRUcnVuY2F0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVN0
cmVhbVByb3h5KiBwcm94eSwgYm9vbCBzdWNjZXNzKQotewotICAgIGlmIChwcm94eS0+Y2xpZW50
KCkpCi0gICAgICAgIHByb3h5LT5jbGllbnQoKS0+ZGlkVHJ1bmNhdGUoc3VjY2Vzcyk7Ci19Ci0K
LXZvaWQgRmlsZVN0cmVhbVByb3h5Ojp0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pCi17Ci0g
ICAgZmlsZVRocmVhZCgpLT5wb3N0VGFzayhjcmVhdGVGaWxlVGhyZWFkVGFzayh0aGlzLCAmRmls
ZVN0cmVhbVByb3h5Ojp0cnVuY2F0ZU9uRmlsZVRocmVhZCwgcG9zaXRpb24pKTsKLX0KLQotdm9p
ZCBGaWxlU3RyZWFtUHJveHk6OnRydW5jYXRlT25GaWxlVGhyZWFkKGxvbmcgbG9uZyBwb3NpdGlv
bikKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBtX3N0cmVhbS0+dHJ1bmNhdGUocG9zaXRpb24pOwot
ICAgIG1fY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRUcnVuY2F0ZSwg
QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgc3VjY2VzcykpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lT
VEVNKQpJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlU3RyZWFtUHJveHkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5oCShyZXZp
c2lvbiAxMDk4MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgRmlsZVN0cmVhbVByb3h5X2gK
LSNkZWZpbmUgRmlsZVN0cmVhbVByb3h5X2gKLQotI2lmIEVOQUJMRShCTE9CKSB8fCBFTkFCTEUo
RklMRV9TWVNURU0pCi0KLSNpbmNsdWRlICJBc3luY0ZpbGVTdHJlYW0uaCIKLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgRmlsZVN0cmVhbTsKLWNsYXNzIEZpbGVUaHJlYWQ7Ci1jbGFzcyBLVVJM
OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKLQotLy8gQSBwcm94eSBtb2R1bGUgdGhh
dCBhc3luY2hyb25vdXNseSBjYWxscyBjb3JyZXNwb25kaW5nIEZpbGVTdHJlYW0gbWV0aG9kcyBv
biB0aGUgZmlsZSB0aHJlYWQuICBOb3RlOiB5b3UgbXVzdCBjYWxsIHN0b3AoKSBmaXJzdCBhbmQg
dGhlbiByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gZGVzdHJ1Y3QgdGhlIEZpbGVTdHJlYW1Qcm94
eSBpbnN0YW5jZS4KLS8vIEZJWE1FOiBMb2dpY2FsbHksIHRoaXMgY2xhc3MgaXMgcGFydCBvZiBw
bGF0Zm9ybS4gU2NyaXB0RXhlY3V0aW9uQ29udGV4dCBpcyB3aGF0IGtlZXBzIGl0IG91dHNpZGUg
Zm9yIG5vdy4KLWNsYXNzIEZpbGVTdHJlYW1Qcm94eSA6IHB1YmxpYyBBc3luY0ZpbGVTdHJlYW0g
ewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVTdHJlYW1Qcm94eT4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBGaWxlU3RyZWFtQ2xpZW50Kik7Ci0gICAgdmlydHVh
bCB+RmlsZVN0cmVhbVByb3h5KCk7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2l6ZShjb25zdCBT
dHJpbmcmIHBhdGgsIGRvdWJsZSBleHBlY3RlZE1vZGlmaWNhdGlvblRpbWUpOwotICAgIHZpcnR1
YWwgdm9pZCBvcGVuRm9yUmVhZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQs
IGxvbmcgbG9uZyBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuRm9yV3JpdGUoY29uc3Qg
U3RyaW5nJiBwYXRoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVhZChjaGFyKiBidWZmZXIsIGludCBsZW5ndGgpOwotICAgIHZpcnR1YWwgdm9pZCB3cml0
ZShjb25zdCBLVVJMJiBibG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpOwot
ICAgIHZpcnR1YWwgdm9pZCB0cnVuY2F0ZShsb25nIGxvbmcgcG9zaXRpb24pOwotCi0gICAgLy8g
U3RvcHMgdGhlIHByb3h5IGFuZCBzY2hlZHVsZXMgaXQgdG8gYmUgZGVzdHJ1Y3RlZC4gQWxsIHRo
ZSBwZW5kaW5nIHRhc2tzIHdpbGwgYmUgYWJvcnRlZCBhbmQgdGhlIGZpbGUgc3RyZWFtIHdpbGwg
YmUgY2xvc2VkLgotICAgIC8vIE5vdGU6IHRoZSBjYWxsZXIgc2hvdWxkIGRlcmVmIHRoZSBpbnN0
YW5jZSBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIHN0b3AoKS4KLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpOwotCi1wcml2YXRlOgotICAgIEZpbGVTdHJlYW1Qcm94eShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgRmlsZVN0cmVhbUNsaWVudCopOwotCi0gICAgRmlsZVRocmVhZCogZmlsZVRocmVh
ZCgpOwotCi0gICAgLy8gQ2FsbGVkIG9uIEZpbGUgdGhyZWFkLgotICAgIHZvaWQgc3RhcnRPbkZp
bGVUaHJlYWQoKTsKLSAgICB2b2lkIHN0b3BPbkZpbGVUaHJlYWQoKTsKLSAgICB2b2lkIGdldFNp
emVPbkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRoLCBkb3VibGUgZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lKTsKLSAgICB2b2lkIG9wZW5Gb3JSZWFkT25GaWxlVGhyZWFkKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7Ci0gICAgdm9pZCBv
cGVuRm9yV3JpdGVPbkZpbGVUaHJlYWQoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICB2b2lkIGNs
b3NlT25GaWxlVGhyZWFkKCk7Ci0gICAgdm9pZCByZWFkT25GaWxlVGhyZWFkKGNoYXIqIGJ1ZmZl
ciwgaW50IGxlbmd0aCk7Ci0gICAgdm9pZCB3cml0ZU9uRmlsZVRocmVhZChjb25zdCBLVVJMJiBi
bG9iVVJMLCBsb25nIGxvbmcgcG9zaXRpb24sIGludCBsZW5ndGgpOwotICAgIHZvaWQgdHJ1bmNh
dGVPbkZpbGVUaHJlYWQobG9uZyBsb25nIHBvc2l0aW9uKTsKLQotICAgIFJlZlB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgUmVmUHRyPEZpbGVTdHJlYW0+IG1fc3Ry
ZWFtOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKEJM
T0IpIHx8IEVOQUJMRShGSUxFX1NZU1RFTSkKLQotI2VuZGlmIC8vIEZpbGVTdHJlYW1Qcm94eV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9u
IDEwOTgwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJSZXNvdXJjZUxvYWRlci5o
IgogCiAjaW5jbHVkZSAiQXBwbGljYXRpb25DYWNoZUhvc3QuaCIKKyNpbmNsdWRlICJBc3luY0Zp
bGVTdHJlYW0uaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkZpbGVT
dHJlYW1Qcm94eS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNTU5LDggKzU1OSw4IEBAIHZv
aWQgUmVzb3VyY2VMb2FkZXI6OndpbGxDYWNoZVJlc3BvbnNlKFIKICNpZiBFTkFCTEUoQkxPQikK
IEFzeW5jRmlsZVN0cmVhbSogUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZUFzeW5jRmlsZVN0cmVhbShG
aWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgLy8gSXQgaXMgT0sgdG8gc2ltcGx5IHJl
dHVybiBhIHBvaW50ZXIgc2luY2UgRmlsZVN0cmVhbVByb3h5OjpjcmVhdGUgYWRkcyBhbiBleHRy
YSByZWYuCi0gICAgcmV0dXJuIEZpbGVTdHJlYW1Qcm94eTo6Y3JlYXRlKG1fZnJhbWUtPmRvY3Vt
ZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY2xpZW50KS5nZXQoKTsKKyAgICAvLyBJ
dCBpcyBPSyB0byBzaW1wbHkgcmV0dXJuIGEgcG9pbnRlciBzaW5jZSBBc3luY0ZpbGVTdHJlYW06
OmNyZWF0ZSBhZGRzIGFuIGV4dHJhIHJlZi4KKyAgICByZXR1cm4gQXN5bmNGaWxlU3RyZWFtOjpj
cmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjbGll
bnQpLmdldCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Fz
eW5jRmlsZVN0cmVhbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Fz
eW5jRmlsZVN0cmVhbS5oCShyZXZpc2lvbiAxMDk4MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Bc3luY0ZpbGVTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgQXN5bmNGaWxlU3RyZWFtX2gKLSNkZWZpbmUgQXN5bmNGaWxlU3RyZWFtX2gKLQotI2lm
IEVOQUJMRShCTE9CKSB8fCBFTkFCTEUoRklMRV9TWVNURU0pCi0KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgRmlsZVN0cmVhbUNsaWVudDsKLWNsYXNzIEtVUkw7Ci0KLS8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBtZXJnZWQgd2l0aCB0aGUgb25seSBkZXJpdmVkIGNsYXNzIChGaWxlU3Ry
ZWFtUHJveHkpIG9uY2UgUnVuTG9vcCBpcyBhYnN0cmFjdGVkIGF3YXkgaW4gcGxhdGZvcm0uCi1j
bGFzcyBBc3luY0ZpbGVTdHJlYW0gOiBwdWJsaWMgUmVmQ291bnRlZDxBc3luY0ZpbGVTdHJlYW0+
IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5Bc3luY0ZpbGVTdHJlYW0oKSB7IH0KLQotICAgIHZp
cnR1YWwgdm9pZCBnZXRTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgZG91YmxlIGV4cGVjdGVkTW9k
aWZpY2F0aW9uVGltZSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuRm9yUmVhZChjb25zdCBT
dHJpbmcmIHBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgb3BlbkZvcldyaXRlKGNvbnN0IFN0cmluZyYgcGF0aCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVhZChjaGFyKiBi
dWZmZXIsIGludCBsZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGUoY29uc3QgS1VS
TCYgYmxvYlVSTCwgbG9uZyBsb25nIHBvc2l0aW9uLCBpbnQgbGVuZ3RoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHRydW5jYXRlKGxvbmcgbG9uZyBwb3NpdGlvbikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBzdG9wKCkgPSAwOwotCi0gICAgRmlsZVN0cmVhbUNsaWVudCogY2xpZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9jbGllbnQ7IH0KLSAgICB2b2lkIHNldENsaWVudChGaWxlU3RyZWFtQ2xpZW50
KiBjbGllbnQpIHsgbV9jbGllbnQgPSBjbGllbnQ7IH0KLQotcHJvdGVjdGVkOgotICAgIEFzeW5j
RmlsZVN0cmVhbShGaWxlU3RyZWFtQ2xpZW50KiBjbGllbnQpCi0gICAgICAgIDogbV9jbGllbnQo
Y2xpZW50KQotICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgRmlsZVN0cmVhbUNsaWVudCog
bV9jbGllbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoQkxPQikgfHwgRU5BQkxFKEZJTEVfU1lTVEVNKQotCi0jZW5kaWYgLy8gQXN5bmNGaWxlU3Ry
ZWFtX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVn
aXN0cnkuaAkocmV2aXNpb24gMTA5ODA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9CbG9iUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3Qg
S1VSTCYgc3JjVVJMKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwo
Y29uc3QgS1VSTCYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFu
ZGxlQ2xpZW50KikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91
c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3Bv
bnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSA9IDA7CiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNw
cAkocmV2aXNpb24gMTA5ODA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9C
bG9iUmVnaXN0cnlJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsMjYgQEAgQmxv
YlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQmxvYlJl
Z2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CisKK3N0
YXRpYyBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRsZShjb25z
dCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQp
Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEJsb2JSZWdpc3RyeUltcGwmPihibG9iUmVnaXN0
cnkoKSkuY3JlYXRlUmVzb3VyY2VIYW5kbGUocmVxdWVzdCwgY2xpZW50KTsKK30KKworc3RhdGlj
IHZvaWQgcmVnaXN0ZXJCbG9iUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3RvcigpCit7CisgICAgc3Rh
dGljIGJvb2wgZGlkUmVnaXN0ZXIgPSBmYWxzZTsKKyAgICBpZiAoIWRpZFJlZ2lzdGVyKSB7Cisg
ICAgICAgIFJlc291cmNlSGFuZGxlOjpyZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3RvcigiYmxvYiIs
IGNyZWF0ZVJlc291cmNlSGFuZGxlKTsKKyAgICAgICAgZGlkUmVnaXN0ZXIgPSB0cnVlOworICAg
IH0KK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgcmVnaXN0ZXJCbG9iUmVzb3VyY2VIYW5kbGVD
b25zdHJ1Y3RvcigpCit7Cit9CiAjZW5kaWYKIAogYm9vbCBCbG9iUmVnaXN0cnlJbXBsOjpzaG91
bGRMb2FkUmVzb3VyY2UoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBjb25zdApAQCAt
MTI1LDYgKzE0NSw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6YXBwZW5kU3RvcmFnZUl0ZW0K
IHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwg
UGFzc093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICByZWdpc3RlckJsb2JSZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yKCk7CiAKICAg
ICBSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiBibG9iU3RvcmFnZURhdGEgPSBCbG9iU3RvcmFnZURh
dGE6OmNyZWF0ZShibG9iRGF0YS0+Y29udGVudFR5cGUoKSwgYmxvYkRhdGEtPmNvbnRlbnREaXNw
b3NpdGlvbigpKTsKIApAQCAtMTU0LDYgKzE3NSw3IEBAIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6
cmVnaXN0ZXJCbG9iVVJMKGMKIHZvaWQgQmxvYlJlZ2lzdHJ5SW1wbDo6cmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJMKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgcmVnaXN0ZXJCbG9iUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvcigp
OwogCiAgICAgUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gc3JjID0gbV9ibG9icy5nZXQoc3JjVVJM
LnN0cmluZygpKTsKICAgICBBU1NFUlQoc3JjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1wbC5oCShyZXZpc2lvbiAxMDk4MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYsMTEgKzU2LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JEYXRhPik7CiAg
ICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VSTCYg
c3JjVVJMKTsKICAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYp
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VI
YW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKTsKICAg
ICB2aXJ0dWFsIGJvb2wgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYg
ZGF0YSk7CiAKICAgICBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4gZ2V0QmxvYkRhdGFGcm9t
VVJMKGNvbnN0IEtVUkwmKSBjb25zdDsKIAorICAgIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+
IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFu
ZGxlQ2xpZW50Kik7CisKIHByaXZhdGU6CiAgICAgYm9vbCBzaG91bGRMb2FkUmVzb3VyY2UoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KSBjb25zdDsKICAgICB2b2lkIGFwcGVuZFN0b3Jh
Z2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqLCBjb25zdCBCbG9iRGF0YUl0ZW1MaXN0Jik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmNwcAkocmV2aXNpb24gMTA5ODA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEyICszMywyNiBAQAog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJv
b2wgc2hvdWxkRm9yY2VDb250ZW50U25pZmZpbmc7CiAKK3R5cGVkZWYgSGFzaE1hcDxBdG9taWNT
dHJpbmcsIFJlc291cmNlSGFuZGxlOjpCdWlsdGluQ29uc3RydWN0b3I+IEJ1aWx0aW5SZXNvdXJj
ZUhhbmRsZUNvbnN0cnVjdG9yTWFwOworc3RhdGljIEJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0
cnVjdG9yTWFwJiBidWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcCgpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEJ1aWx0aW5S
ZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwLCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOwor
fQorCit2b2lkIFJlc291cmNlSGFuZGxlOjpyZWdpc3RlckJ1aWx0aW5Db25zdHJ1Y3Rvcihjb25z
dCBBdG9taWNTdHJpbmcmIHByb3RvY29sLCBSZXNvdXJjZUhhbmRsZTo6QnVpbHRpbkNvbnN0cnVj
dG9yIGNvbnN0cnVjdG9yKQoreworICAgIGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9y
TWFwKCkuYWRkKHByb3RvY29sLCBjb25zdHJ1Y3Rvcik7Cit9CisKIFJlc291cmNlSGFuZGxlOjpS
ZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNlSGFu
ZGxlQ2xpZW50KiBjbGllbnQsIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91bGRDb250ZW50
U25pZmYpCiAgICAgOiBkKGFkb3B0UHRyKG5ldyBSZXNvdXJjZUhhbmRsZUludGVybmFsKHRoaXMs
IHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmICYmIHNo
b3VsZENvbnRlbnRTbmlmZlVSTChyZXF1ZXN0LnVybCgpKSkpKQogewpAQCAtNTUsMTMgKzY5LDEw
IEBAIFJlc291cmNlSGFuZGxlOjpSZXNvdXJjZUhhbmRsZShjb25zdCBSZXMKIAogUGFzc1JlZlB0
cjxSZXNvdXJjZUhhbmRsZT4gUmVzb3VyY2VIYW5kbGU6OmNyZWF0ZShOZXR3b3JraW5nQ29udGV4
dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBSZXNvdXJjZUhhbmRs
ZUNsaWVudCogY2xpZW50LCBib29sIGRlZmVyc0xvYWRpbmcsIGJvb2wgc2hvdWxkQ29udGVudFNu
aWZmKQogewotI2lmIEVOQUJMRShCTE9CKQotICAgIGlmIChyZXF1ZXN0LnVybCgpLnByb3RvY29s
SXMoImJsb2IiKSkgewotICAgICAgICBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUg
PSBibG9iUmVnaXN0cnkoKS5jcmVhdGVSZXNvdXJjZUhhbmRsZShyZXF1ZXN0LCBjbGllbnQpOwot
ICAgICAgICBpZiAoaGFuZGxlKQotICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICB9Ci0j
ZW5kaWYKKyAgICBCdWlsdGluUmVzb3VyY2VIYW5kbGVDb25zdHJ1Y3Rvck1hcDo6aXRlcmF0b3Ig
cHJvdG9jb2xNYXBJdGVtID0gYnVpbHRpblJlc291cmNlSGFuZGxlQ29uc3RydWN0b3JNYXAoKS5m
aW5kKHJlcXVlc3QudXJsKCkucHJvdG9jb2woKSk7CisKKyAgICBpZiAocHJvdG9jb2xNYXBJdGVt
ICE9IGJ1aWx0aW5SZXNvdXJjZUhhbmRsZUNvbnN0cnVjdG9yTWFwKCkuZW5kKCkpCisgICAgICAg
IHJldHVybiBwcm90b2NvbE1hcEl0ZW0tPnNlY29uZChyZXF1ZXN0LCBjbGllbnQpOwogCiAgICAg
UmVmUHRyPFJlc291cmNlSGFuZGxlPiBuZXdIYW5kbGUoYWRvcHRSZWYobmV3IFJlc291cmNlSGFu
ZGxlKHJlcXVlc3QsIGNsaWVudCwgZGVmZXJzTG9hZGluZywgc2hvdWxkQ29udGVudFNuaWZmKSkp
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUhhbmRsZS5oCShyZXZpc2lvbiAxMDk4MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw2ICsyMTcsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBoYW5kbGVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRhQXJyYXkp
OwogI2VuZGlmCiAKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+ICgqQnVp
bHRpbkNvbnN0cnVjdG9yKShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFJlc291cmNl
SGFuZGxlQ2xpZW50KiBjbGllbnQpOworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQnVpbHRpbkNv
bnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYgcHJvdG9jb2wsIEJ1aWx0aW5Db25zdHJ1Y3Rv
cik7CisKIHByb3RlY3RlZDoKICAgICBSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCosIGJvb2wgZGVmZXJzTG9hZGluZywgYm9vbCBzaG91
bGRDb250ZW50U25pZmYpOwogCg==
</data>
<flag name="review"
          id="133144"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="133704"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>