<?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>158293</bug_id>
          
          <creation_ts>2016-06-01 22:56:25 -0700</creation_ts>
          <short_desc>Overhaul cross-thread use of ResourceRequest, ResourceResponse, and ResourceError</short_desc>
          <delta_ts>2016-06-02 21:41:56 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=158313</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=158338</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>japhet</cc>
    
    <cc>ossy</cc>
    
    <cc>peavo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1198460</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-01 22:56:25 -0700</bug_when>
    <thetext>Add isolatedCopy() to ResourceRequest, ResourceResponse, and ResourceError</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198461</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-01 22:57:20 -0700</bug_when>
    <thetext>Note ResourceError.copy() is already an isolatedCopy, but you wouldn&apos;t know that by name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198535</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 09:00:53 -0700</bug_when>
    <thetext>Note: The network/cf Request/Response/Errors already have isolatedCopy().

But the other platforms do not.

isolatedCopy() should really be a function of RequestBase/ResponseBase/ErrorBase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198536</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 09:02:56 -0700</bug_when>
    <thetext>The entire notion of &quot;CrossThreadResourceRequestData&quot; (and equivalent for Response/Error) is silly and should probably be abolished.

Fortunately, abolishing it will be easy - It&apos;s not used in too many places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198538</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 09:05:21 -0700</bug_when>
    <thetext>Two steps here:

1 - Make the crossThread*Data objects private, expose a public isolatedCopy that uses crossThread*Data internally, and update all uses in WebCore.

2 - Get rid of crossThread*Data internally.

I&apos;ll file another bug for #2 later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198557</commentid>
    <comment_count>5</comment_count>
      <attachid>280337</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 10:17:31 -0700</bug_when>
    <thetext>Created attachment 280337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198558</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-06-02 10:19:59 -0700</bug_when>
    <thetext>Attachment 280337 did not pass style-queue:


ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:42:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:53:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:64:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:69:  The parameter name &quot;cachePolicy&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:72:  The parameter name &quot;timeoutInterval&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:78:  The parameter name &quot;httpMethod&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:126:  The parameter name &quot;allowCookies&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/platform/network/ResourceRequestBase.h:151:  enum members should use InterCaps with an initial capital letter or initial &apos;k&apos; for C-style enums.  [readability/enum_casing] [4]
Total errors found: 8 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198573</commentid>
    <comment_count>7</comment_count>
      <attachid>280337</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-06-02 10:58:56 -0700</bug_when>
    <thetext>Comment on attachment 280337
Patch

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

Looks fine. Really inconvenient for Youenn who has a patch for this same file. The re-indenting is what will screw him up.

Seems like we need even more functions that make it clear they do isolated copying with proper naming. Function names like deepCopy and copyData don’t make it clear enough, I think.

&gt; Source/WebCore/platform/network/ResourceRequestBase.cpp:93
&gt;  std::unique_ptr&lt;CrossThreadResourceRequestData&gt; ResourceRequestBase::copyData() const

Unclear why this returns a unique_ptr instead of a CrossThreadResourceRequestData. Maybe predates move semantics.

Seems like this function needs “isolated” in its name.

&gt; Source/WebCore/platform/network/cf/ResourceRequest.h:160
&gt; +inline bool ResourceRequest::resourcePrioritiesEnabled()
&gt; +{
&gt;  #if PLATFORM(MAC)
&gt; -    return true;
&gt; +return true;
&gt;  #elif PLATFORM(IOS)
&gt; -    return true;
&gt; +return true;
&gt;  #elif PLATFORM(WIN)
&gt; -    return false;
&gt; +return false;
&gt;  #endif
&gt; -    }
&gt; +}

Wrong indenting here for the return statements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198577</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 11:10:53 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 280337 [details]
&gt; Patch

&gt; Seems like we need even more functions that make it clear they do isolated
&gt; copying with proper naming. Function names like deepCopy and copyData don’t
&gt; make it clear enough, I think.

From now on, whenever I see such a function, I plan on changing it.

That said, for these classes, the CrossThread*Data will be going away next (mentioned in https://bugs.webkit.org/show_bug.cgi?id=158293#c4)

&gt; &gt; Source/WebCore/platform/network/ResourceRequestBase.cpp:93
&gt; &gt;  std::unique_ptr&lt;CrossThreadResourceRequestData&gt; ResourceRequestBase::copyData() const
&gt; 
&gt; Unclear why this returns a unique_ptr instead of a
&gt; CrossThreadResourceRequestData. Maybe predates move semantics.

Yup, it predated Move semantics.

&gt; 
&gt; Seems like this function needs “isolated” in its name.

Not too concerned, as it will be going away in the next patch.

&gt; &gt; Source/WebCore/platform/network/cf/ResourceRequest.h:160
&gt; &gt; +inline bool ResourceRequest::resourcePrioritiesEnabled()
&gt; &gt; +{
&gt; &gt;  #if PLATFORM(MAC)
&gt; &gt; -    return true;
&gt; &gt; +return true;
&gt; &gt;  #elif PLATFORM(IOS)
&gt; &gt; -    return true;
&gt; &gt; +return true;
&gt; &gt;  #elif PLATFORM(WIN)
&gt; &gt; -    return false;
&gt; &gt; +return false;
&gt; &gt;  #endif
&gt; &gt; -    }
&gt; &gt; +}
&gt; 
&gt; Wrong indenting here for the return statements.

Whoops! Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198578</commentid>
    <comment_count>9</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 11:16:40 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/201603</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198603</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-06-02 12:03:21 -0700</bug_when>
    <thetext>It broke the WinCairo build. cc-ing port maintainers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198617</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 12:33:01 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; It broke the WinCairo build. cc-ing port maintainers

One of these days, the response to &quot;this broke WinCairo&quot; will either be &quot;Let&apos;s drop WinCairo&quot; or &quot;let&apos;s actually get a WinCairo EWS&quot;

*sigh*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198797</commentid>
    <comment_count>12</comment_count>
      <attachid>280337</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-06-02 19:19:09 -0700</bug_when>
    <thetext>Comment on attachment 280337
Patch

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

&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:69
&gt; +    auto data = copyData();

copyData() de-atomizes our data members....

&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:72
&gt; +    response.setMimeType(data-&gt;m_mimeType);

... but then you call the data members right away (in the same thread) which re-atomizes them in the wrong thread.

The previous code was fine because we would call copyData() in threadA and adopt() in threadB. So we would de-atomize in thread A and re-atomize them in threadB.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198798</commentid>
    <comment_count>13</comment_count>
      <attachid>280337</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-06-02 19:22:08 -0700</bug_when>
    <thetext>Comment on attachment 280337
Patch

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

&gt;&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:72
&gt;&gt; +    response.setMimeType(data-&gt;m_mimeType);
&gt; 
&gt; ... but then you call the data members right away (in the same thread) which re-atomizes them in the wrong thread.
&gt; 
&gt; The previous code was fine because we would call copyData() in threadA and adopt() in threadB. So we would de-atomize in thread A and re-atomize them in threadB.

I don&apos;t think there is a &quot;quick&quot; fix for this so I would suggest rolling out the patch until we figure out a nice and safe way of doing this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198840</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 20:19:54 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 280337 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=280337&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/network/ResourceResponseBase.cpp:72
&gt; &gt;&gt; +    response.setMimeType(data-&gt;m_mimeType);
&gt; &gt; 
&gt; &gt; ... but then you call the data members right away (in the same thread) which re-atomizes them in the wrong thread.
&gt; &gt; 
&gt; &gt; The previous code was fine because we would call copyData() in threadA and adopt() in threadB. So we would de-atomize in thread A and re-atomize them in threadB.

I see. That&apos;s a detail of AtomicStrings I didn&apos;t fully grok.

&gt; 
&gt; I don&apos;t think there is a &quot;quick&quot; fix for this so I would suggest rolling out
&gt; the patch until we figure out a nice and safe way of doing this.

Other patches have gone in on top of this in the meantime. I&apos;m going to stare at it for a little bit first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198845</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 20:31:45 -0700</bug_when>
    <thetext>I&apos;m going to restore (an updated...) cross thread data just for ResourceResponse, which is the only one with this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198846</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-06-02 20:39:20 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I&apos;m going to restore (an updated...) cross thread data just for
&gt; ResourceResponse, which is the only one with this problem.

If you do, it&apos;d be nice if isolatedCopy() returned a CrossThreadResourceResponseData instead of a std::unique_ptr&lt;CrossThreadResourceResponseData&gt;. Also, it&apos;d be nice if we could implicitly construct a ResourceResponse from a CrossThreadResourceResponseData I think. This way, the lambda capture side would look pretty much identical as after your initial patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198857</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-06-02 21:41:56 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; I&apos;m going to restore (an updated...) cross thread data just for
&gt; &gt; ResourceResponse, which is the only one with this problem.
&gt; 
&gt; If you do, it&apos;d be nice if isolatedCopy() returned a
&gt; CrossThreadResourceResponseData instead of a
&gt; std::unique_ptr&lt;CrossThreadResourceResponseData&gt;. Also, it&apos;d be nice if we
&gt; could implicitly construct a ResourceResponse from a
&gt; CrossThreadResourceResponseData I think. 

I commented in the other bug why I think the implicit constructor is a bad idea.

&gt; This way, the lambda capture side would look pretty much identical as after your initial patch.

I don&apos;t think it&apos;s worth covering up the heavy handedness of the cross thread data object just to keep the lambda capture/body looking the same way they do now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280337</attachid>
            <date>2016-06-02 10:17:31 -0700</date>
            <delta_ts>2016-06-02 10:58:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158293-20160602101850.patch</filename>
            <type>text/plain</type>
            <size>48164</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTE1YTFlMDRlMjYyNGVk
YmYxYWY5MGYxZjY4MzhkYjQwZjU4OWVjNC4uMDk4MzhmZDQwYzcwZjI2NGEyZjA3NzcyYTI3MGYz
OTdiMTc1NzgzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE2LTA2LTAyICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBPdmVyaGF1bCBjcm9zcy10
aHJlYWQgdXNlIG9mIFJlc291cmNlUmVxdWVzdCwgUmVzb3VyY2VSZXNwb25zZSwgYW5kIFJlc291
cmNlRXJyb3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTgyOTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKFJlZmFjdG9yLCBubyBiZWhhdmlvciBjaGFuZ2UpLgorCisgICAgICAg
ICogbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6TWFpblRocmVhZEJyaWRn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFk
QnJpZGdlOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRGYWlsQWNj
ZXNzQ29udHJvbENoZWNrKToKKworICAgICAgICAqIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlDYWNoZTo6cmVtb3ZlUmVxdWVzdEZyb21TZXNz
aW9uQ2FjaGVzKToKKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VFcnJvckJhc2U6Omlzb2xhdGVkQ29w
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yQmFzZTo6Y29weSk6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yQmFzZS5oOgorCisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRBc0lzb2xhdGVkQ29weSk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjphZG9wdCk6IERlbGV0ZWQuCisgICAgICAg
IAorICAgICAgICBNYWRlIGNvcHlEYXRhIHByaXZhdGUsIGFuZCBtYWRlICJhZG9wdCIgYmUgImlz
b2xhdGVkQ29weSIuCisgICAgICAgIFJlc3Qgb2YgdGhlIGNoYW5nZXMgYXJlIGFsbCByZS1pbmRl
bnRpbmcgdGhlIGZpbGUuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVl
c3RCYXNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZXBvcnRVcGxvYWRQcm9ncmVzcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpyZXBvcnRMb2FkVGltaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6OnNldFJlcG9ydExvYWRU
aW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZTo6cmVwb3J0UmF3
SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpzZXRSZXBv
cnRSYXdIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJhc2U6Omhp
ZGRlbkZyb21JbnNwZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0QmFz
ZTo6c2V0SGlkZGVuRnJvbUluc3BlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3RCYXNlOjpyZXF1ZXN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
QmFzZTo6c2V0UmVxdWVzdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdEJh
c2U6OmVuY29kaW5nUmVxdWlyZXNQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0QmFzZTo6UmVzb3VyY2VSZXF1ZXN0QmFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpwbGF0Zm9ybUNvbXBhcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKworICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZUJhc2U6Omlzb2xhdGVkQ29weSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlQmFzZTo6YWRvcHQpOiBEZWxldGVkLgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaDoKKworICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VFcnJvci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVz
b3VyY2VFcnJvcjo6aXNvbGF0ZWRDb3B5KTogRGVsZXRlZC4KKworICAgICAgICBSZW1vdmVkIHBs
YXRmb3JtLXNwZWNpZmljIGlzb2xhdGVkQ29weSwgYW5kIHJlLWluZGVudGVkIHRoZSBoZWFkZXI6
CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJlcXVlc3QuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6UmVzb3VyY2VSZXF1ZXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6ZW5jb2RpbmdSZXF1aXJlc1BsYXRmb3JtRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OmNhY2hlUGFydGl0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdDo6c2V0Q2FjaGVQYXJ0aXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjpzZXREb21haW5Gb3JDYWNoZVBhcnRpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Q6OnJlc291cmNlUHJpb3JpdGll
c0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojppc29sYXRlZENv
cHkpOiBEZWxldGVkLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZVJl
c3BvbnNlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlOjppc29sYXRlZENv
cHkpOiBEZWxldGVkLgorCiAyMDE2LTA2LTAyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxl
dEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgVXNlIG1vcmUgcmVmZXJlbmNlcyBpbiBSZXNvdXJj
ZUxvYWRlciByZWxhdGVkIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1ODdhYTI1YzA1MTQwN2VkMzk4NDA5
NmZlNzRjYjUzZDY5YThiMTNlLi4yYzVhZGM2ODFmNThmZjE3MmZjZjRkNjg0NjFmZmJiZmRhNTQy
NjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYtMDYtMDIgIEJyYWR5IEVpZHNv
biAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIE92ZXJoYXVsIGNyb3NzLXRocmVhZCB1
c2Ugb2YgUmVzb3VyY2VSZXF1ZXN0LCBSZXNvdXJjZVJlc3BvbnNlLCBhbmQgUmVzb3VyY2VFcnJv
ci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODI5
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrQ2FjaGU6OkVudHJ5OjpFbnRyeSk6CisKIDIwMTYtMDYtMDIgIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBVc2UgbW9yZSByZWZl
cmVuY2VzIGluIFJlc291cmNlTG9hZGVyIHJlbGF0ZWQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCmluZGV4IDQxMDExOGI1NTExNzY4
M2U5NDFjYzdlNGU5MDZmZGEwMjQxMWZlYTcuLmE2YTY3MGI3NDZiZWRkYTYxYTE2YzkzZDhmNWRl
ZjY2NjkwZGI5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJl
YWRhYmxlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFk
YWJsZUxvYWRlci5jcHAKQEAgLTk2LDE3ICs5NiwxNiBAQCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVy
OjpNYWluVGhyZWFkQnJpZGdlOjpNYWluVGhyZWFkQnJpZGdlKFRocmVhZGFibGVMb2FkZXJDbGll
bgogICAgIGF1dG8gY29udGVudFNlY3VyaXR5UG9saWN5Q29weSA9IHN0ZDo6bWFrZV91bmlxdWU8
Q29udGVudFNlY3VyaXR5UG9saWN5Pigqc2VjdXJpdHlPcmlnaW4pOwogICAgIGNvbnRlbnRTZWN1
cml0eVBvbGljeUNvcHktPmNvcHlTdGF0ZUZyb20oY29udGVudFNlY3VyaXR5UG9saWN5KTsKIAot
ICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihbdGhpcywgcmVxdWVzdERhdGEgPSBy
ZXF1ZXN0LmNvcHlEYXRhKCksIG9wdGlvbnMgPSBvcHRpb25zLmlzb2xhdGVkQ29weSgpLCBjb250
ZW50U2VjdXJpdHlQb2xpY3lDb3B5ID0gV1RGTW92ZShjb250ZW50U2VjdXJpdHlQb2xpY3lDb3B5
KSwgb3V0Z29pbmdSZWZlcnJlciA9IG91dGdvaW5nUmVmZXJyZXIuaXNvbGF0ZWRDb3B5KCldKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIG11dGFibGUgeworICAgIG1fbG9hZGVyUHJv
eHkucG9zdFRhc2tUb0xvYWRlcihbdGhpcywgcmVxdWVzdCA9IHJlcXVlc3QuaXNvbGF0ZWRDb3B5
KCksIG9wdGlvbnMgPSBvcHRpb25zLmlzb2xhdGVkQ29weSgpLCBjb250ZW50U2VjdXJpdHlQb2xp
Y3lDb3B5ID0gV1RGTW92ZShjb250ZW50U2VjdXJpdHlQb2xpY3lDb3B5KSwgb3V0Z29pbmdSZWZl
cnJlciA9IG91dGdvaW5nUmVmZXJyZXIuaXNvbGF0ZWRDb3B5KCldKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQpIG11dGFibGUgewogICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4
dCk7CiAKLSAgICAgICAgYXV0byByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0OjphZG9wdChXVEZN
b3ZlKHJlcXVlc3REYXRhKSk7Ci0gICAgICAgIHJlcXVlc3QtPnNldEhUVFBSZWZlcnJlcihvdXRn
b2luZ1JlZmVycmVyKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQUmVmZXJyZXIob3V0Z29pbmdS
ZWZlcnJlcik7CiAKICAgICAgICAgLy8gRklYTUU6IElmIHRoZSBhIHNpdGUgcmVxdWVzdHMgYSBs
b2NhbCByZXNvdXJjZSwgdGhlbiB0aGlzIHdpbGwgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUgYnV0
IHRoZSBzeW5jIHBhdGgKICAgICAgICAgLy8gd2lsbCByZXR1cm4gYSAwIHZhbHVlLiBFaXRoZXIg
dGhpcyBzaG91bGQgcmV0dXJuIDAgb3IgdGhlIG90aGVyIGNvZGUgcGF0aCBzaG91bGQgZG8gYSBj
YWxsYmFjayB3aXRoCiAgICAgICAgIC8vIGEgZmFpbHVyZS4KLSAgICAgICAgbV9tYWluVGhyZWFk
TG9hZGVyID0gRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoZG9jdW1lbnQsICp0aGlz
LCAqcmVxdWVzdCwgKm9wdGlvbnMsIFdURk1vdmUoY29udGVudFNlY3VyaXR5UG9saWN5Q29weSkp
OworICAgICAgICBtX21haW5UaHJlYWRMb2FkZXIgPSBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6
OmNyZWF0ZShkb2N1bWVudCwgKnRoaXMsIHJlcXVlc3QsICpvcHRpb25zLCBXVEZNb3ZlKGNvbnRl
bnRTZWN1cml0eVBvbGljeUNvcHkpKTsKICAgICAgICAgQVNTRVJUKG1fbWFpblRocmVhZExvYWRl
ciB8fCBtX2xvYWRpbmdGaW5pc2hlZCk7CiAgICAgfSk7CiB9CkBAIC0xNjQsMTMgKzE2MywxMCBA
QCB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFNlbmRE
YXRhKHVuc2lnbmVkIGxvbmcgbG9uZyBieQogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpN
YWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBSZWZQdHI8VGhy
ZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIgPSBtX3dvcmtl
ckNsaWVudFdyYXBwZXI7Ci0gICAgYXV0byogcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UuY29weURh
dGEoKS5yZWxlYXNlKCk7Ci0gICAgaWYgKCFtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRv
V29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIsIGlkZW50aWZpZXIsIHJlc3Bv
bnNlRGF0YV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICBtX2xvYWRl
clByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoW3dvcmtlckNsaWVudFdy
YXBwZXIsIGlkZW50aWZpZXIsIHJlc3BvbnNlID0gcmVzcG9uc2UuaXNvbGF0ZWRDb3B5KCldIChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQo
Y29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkpOwotICAgICAgICBhdXRvIHJl
c3BvbnNlKFJlc291cmNlUmVzcG9uc2U6OmFkb3B0KHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVh
ZFJlc291cmNlUmVzcG9uc2VEYXRhPihyZXNwb25zZURhdGEpKSk7Ci0gICAgICAgIHdvcmtlckNs
aWVudFdyYXBwZXItPmRpZFJlY2VpdmVSZXNwb25zZShpZGVudGlmaWVyLCAqcmVzcG9uc2UpOwot
ICAgIH0sIG1fdGFza01vZGUpKQotICAgICAgICBkZWxldGUgcmVzcG9uc2VEYXRhOworICAgICAg
ICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRSZWNlaXZlUmVzcG9uc2UoaWRlbnRpZmllciwgcmVz
cG9uc2UpOworICAgIH0sIG1fdGFza01vZGUpOwogfQogCiB2b2lkIFdvcmtlclRocmVhZGFibGVM
b2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBkYXRhTGVuZ3RoKQpAQCAtMTk5LDI3ICsxOTUsMTkgQEAgdm9pZCBXb3JrZXJUaHJlYWRh
YmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxv
bmcgaWQKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlk
RmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBtX2xvYWRpbmdGaW5pc2hl
ZCA9IHRydWU7Ci0gICAgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3Jr
ZXJDbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyOwotICAgIFJlc291cmNlRXJy
b3IqIGNhcHR1cmVkRXJyb3IgPSBuZXcgUmVzb3VyY2VFcnJvcihlcnJvci5jb3B5KCkpOwotICAg
IGlmICghbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKFt3
b3JrZXJDbGllbnRXcmFwcGVyLCBjYXB0dXJlZEVycm9yXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCYgY29udGV4dCkgeworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJH
bG9iYWxTY29wZShbd29ya2VyQ2xpZW50V3JhcHBlciA9IFJlZjxUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50V3JhcHBlcj4oKm1fd29ya2VyQ2xpZW50V3JhcHBlciksIGVycm9yID0gZXJyb3IuaXNvbGF0
ZWRDb3B5KCldIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSBtdXRhYmxlIHsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LmlzV29ya2VyR2xvYmFsU2NvcGUo
KSk7Ci0gICAgICAgIHdvcmtlckNsaWVudFdyYXBwZXItPmRpZEZhaWwoKmNhcHR1cmVkRXJyb3Ip
OwotICAgICAgICBkZWxldGUgY2FwdHVyZWRFcnJvcjsKLSAgICB9LCBtX3Rhc2tNb2RlKSkKLSAg
ICAgICAgZGVsZXRlIGNhcHR1cmVkRXJyb3I7CisgICAgICAgIHdvcmtlckNsaWVudFdyYXBwZXIt
PmRpZEZhaWwoZXJyb3IpOworICAgIH0sIG1fdGFza01vZGUpOwogfQogCiB2b2lkIFdvcmtlclRo
cmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZhaWxBY2Nlc3NDb250cm9sQ2hl
Y2soY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CiAgICAgbV9sb2FkaW5nRmluaXNoZWQg
PSB0cnVlOwotICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2Vy
Q2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKLSAgICBSZXNvdXJjZUVycm9y
KiBjYXB0dXJlZEVycm9yID0gbmV3IFJlc291cmNlRXJyb3IoZXJyb3IuY29weSgpKTsKLSAgICBp
ZiAoIW1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShbd29y
a2VyQ2xpZW50V3JhcHBlciwgY2FwdHVyZWRFcnJvcl0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQpIHsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xv
YmFsU2NvcGUoW3dvcmtlckNsaWVudFdyYXBwZXIgPSBSZWY8VGhyZWFkYWJsZUxvYWRlckNsaWVu
dFdyYXBwZXI+KCptX3dvcmtlckNsaWVudFdyYXBwZXIpLCBlcnJvciA9IGVycm9yLmlzb2xhdGVk
Q29weSgpXSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgbXV0YWJsZSB7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC5pc1dvcmtlckdsb2JhbFNjb3BlKCkp
OwotICAgICAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5kaWRGYWlsQWNjZXNzQ29udHJvbENoZWNr
KCpjYXB0dXJlZEVycm9yKTsKLSAgICAgICAgZGVsZXRlIGNhcHR1cmVkRXJyb3I7Ci0gICAgfSwg
bV90YXNrTW9kZSkpCi0gICAgICAgIGRlbGV0ZSBjYXB0dXJlZEVycm9yOworICAgICAgICB3b3Jr
ZXJDbGllbnRXcmFwcGVyLT5kaWRGYWlsQWNjZXNzQ29udHJvbENoZWNrKGVycm9yKTsKKyAgICB9
LCBtX3Rhc2tNb2RlKTsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpkaWRGYWlsUmVkaXJlY3RDaGVjaygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL01lbW9yeUNhY2hlLmNwcAppbmRleCA2ZjVhNDJhZjQzNTlhNjRiNWM0MWE2MmQ3NWU2
MmEwZjYxZmYwZTBkLi42OTM1MDFlNGIyOWY2YjgyOWE2MjUxOGE4NWQ4NTBiMWVmMDQ2ZGZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKQEAgLTY1NSwx
MCArNjU1LDggQEAgdm9pZCBNZW1vcnlDYWNoZTo6YWRqdXN0U2l6ZShib29sIGxpdmUsIGludCBk
ZWx0YSkKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlcyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCiB7CiAgICAgaWYgKGlzPFdvcmtlckdsb2JhbFNjb3BlPihjb250ZXh0KSkgewotICAg
ICAgICBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGEqIHJlcXVlc3REYXRhID0gcmVxdWVz
dC5jb3B5RGF0YSgpLnJlbGVhc2UoKTsKLSAgICAgICAgZG93bmNhc3Q8V29ya2VyR2xvYmFsU2Nv
cGU+KGNvbnRleHQpLnRocmVhZCgpLndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRl
cihbcmVxdWVzdERhdGFdIChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7Ci0gICAg
ICAgICAgICBhdXRvIHJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0OjphZG9wdChzdGQ6OnVuaXF1ZV9w
dHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPihyZXF1ZXN0RGF0YSkpKTsKLSAgICAg
ICAgICAgIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMoY29udGV4
dCwgKnJlcXVlc3QpOworICAgICAgICBkb3duY2FzdDxXb3JrZXJHbG9iYWxTY29wZT4oY29udGV4
dCkudGhyZWFkKCkud29ya2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKFtyZXF1ZXN0
ID0gcmVxdWVzdC5pc29sYXRlZENvcHkoKV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQpIHsKKyAgICAgICAgICAgIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25D
YWNoZXMoY29udGV4dCwgcmVxdWVzdCk7CiAgICAgICAgIH0pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUVycm9yQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNl
RXJyb3JCYXNlLmNwcAppbmRleCBjZTU4ZjhlMzQ5Yjg0MTdiZThlZmM3NzY1ZGNlN2I1YzY2ZGRi
NTA4Li4xMGJiYmFhNmM1MDk1MTBkYjczZDRiN2NkZDRkMWY3ZGVmZjdjMTlkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmNw
cApAQCAtMzEsNyArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IGNoYXIqIGNv
bnN0IGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwgPSAiV2ViS2l0SW50ZXJuYWwiOwogCi1SZXNv
dXJjZUVycm9yIFJlc291cmNlRXJyb3JCYXNlOjpjb3B5KCkgY29uc3QKK1Jlc291cmNlRXJyb3Ig
UmVzb3VyY2VFcnJvckJhc2U6Omlzb2xhdGVkQ29weSgpIGNvbnN0CiB7CiAgICAgbGF6eUluaXQo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJj
ZUVycm9yQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVy
cm9yQmFzZS5oCmluZGV4IGE4MGU3NjE5YjVhZDlkZGRkZTg1NjgyMzc2MmVjZTRmNTUxYmFkM2Yu
Ljc3ZjRkNjA1ZTUwMmNhNzFhOTdkNmMzYmFhY2Q2ZDAwOGY2ZmEzMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvckJhc2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3JCYXNlLmgKQEAgLTIz
LDggKzIzLDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUmVzb3VyY2VFcnJv
ckJhc2VfaAotI2RlZmluZSBSZXNvdXJjZUVycm9yQmFzZV9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMzcsOCAr
MzYsNyBAQCBleHRlcm4gY29uc3QgY2hhciogY29uc3QgZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bDsgLy8gVXNlZCBmb3IgZXJyb3JzIHRoYXQgd29uJwogCiBjbGFzcyBSZXNvdXJjZUVycm9yQmFz
ZSB7CiBwdWJsaWM6Ci0gICAgLy8gTWFrZXMgYSBkZWVwIGNvcHkuIFVzZWZ1bCBmb3Igd2hlbiB5
b3UgbmVlZCB0byB1c2UgYSBSZXNvdXJjZUVycm9yIG9uIGFub3RoZXIgdGhyZWFkLgotICAgIFJl
c291cmNlRXJyb3IgY29weSgpIGNvbnN0OworICAgIFJlc291cmNlRXJyb3IgaXNvbGF0ZWRDb3B5
KCkgY29uc3Q7CiAKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOdWxsOyB9
CiAKQEAgLTk5LDUgKzk3LDMgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZXNvdXJj
ZUVycm9yJiBhLCBjb25zdCBSZXNvdXJjZUVycm9yJiBiKSB7IHJldHVybgogaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBSZXNvdXJjZUVycm9yJiBhLCBjb25zdCBSZXNvdXJjZUVycm9yJiBi
KSB7IHJldHVybiAhKGEgPT0gYik7IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gUmVzb3VyY2VFcnJvckJhc2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKaW5kZXggNjI0Zjk5YjI0ODQy
ZmZiMTFmOGQ2NGYwYzM3OGIzZGJmZTI0ZmRlNC4uMzRiYjc2YTQwZDRkZmFjOTczMDUwMjUyOTZk
NWI4YTgzYmZhZmMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCkBAIC00OSwxOSArNDksMjcgQEAgaW5saW5l
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YXNSZXNvdXJjZVJl
cXVlc3QoKSBjb25zdAogICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8Y29uc3QgUmVzb3VyY2VSZXF1
ZXN0Kj4odGhpcyk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZXNvdXJjZVJlcXVlc3Q+IFJlc291
cmNlUmVxdWVzdEJhc2U6OmFkb3B0KHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNl
UmVxdWVzdERhdGE+IGRhdGEpCitSZXNvdXJjZVJlcXVlc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZTo6
aXNvbGF0ZWRDb3B5KCkgY29uc3QKIHsKLSAgICBhdXRvIHJlcXVlc3QgPSBzdGQ6Om1ha2VfdW5p
cXVlPFJlc291cmNlUmVxdWVzdD4oKTsKLSAgICByZXF1ZXN0LT5zZXRVUkwoZGF0YS0+dXJsKTsK
LSAgICByZXF1ZXN0LT5zZXRDYWNoZVBvbGljeShkYXRhLT5jYWNoZVBvbGljeSk7Ci0gICAgcmVx
dWVzdC0+c2V0VGltZW91dEludGVydmFsKGRhdGEtPnRpbWVvdXRJbnRlcnZhbCk7Ci0gICAgcmVx
dWVzdC0+c2V0Rmlyc3RQYXJ0eUZvckNvb2tpZXMoZGF0YS0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMp
OwotICAgIHJlcXVlc3QtPnNldEhUVFBNZXRob2QoZGF0YS0+aHR0cE1ldGhvZCk7Ci0gICAgcmVx
dWVzdC0+c2V0UHJpb3JpdHkoZGF0YS0+cHJpb3JpdHkpOwotICAgIHJlcXVlc3QtPnNldFJlcXVl
c3RlcihkYXRhLT5yZXF1ZXN0ZXIpOworICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0OworICAg
IHJlcXVlc3Quc2V0QXNJc29sYXRlZENvcHkoKnRoaXMpOworICAgIHJldHVybiByZXF1ZXN0Owor
fQorCit2b2lkIFJlc291cmNlUmVxdWVzdEJhc2U6OnNldEFzSXNvbGF0ZWRDb3B5KGNvbnN0IFJl
c291cmNlUmVxdWVzdEJhc2UmIG90aGVyKQoreworICAgIGF1dG8gZGF0YSA9IG90aGVyLmNvcHlE
YXRhKCk7CiAKLSAgICByZXF1ZXN0LT51cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsKLSAgICByZXF1
ZXN0LT5tX2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQoV1RGTW92ZShkYXRhLT5odHRwSGVhZGVycykp
OworICAgIHNldFVSTChkYXRhLT51cmwpOworICAgIHNldENhY2hlUG9saWN5KGRhdGEtPmNhY2hl
UG9saWN5KTsKKyAgICBzZXRUaW1lb3V0SW50ZXJ2YWwoZGF0YS0+dGltZW91dEludGVydmFsKTsK
KyAgICBzZXRGaXJzdFBhcnR5Rm9yQ29va2llcyhkYXRhLT5maXJzdFBhcnR5Rm9yQ29va2llcyk7
CisgICAgc2V0SFRUUE1ldGhvZChkYXRhLT5odHRwTWV0aG9kKTsKKyAgICBzZXRQcmlvcml0eShk
YXRhLT5wcmlvcml0eSk7CisgICAgc2V0UmVxdWVzdGVyKGRhdGEtPnJlcXVlc3Rlcik7CisKKyAg
ICB1cGRhdGVSZXNvdXJjZVJlcXVlc3QoKTsKKyAgICBtX2h0dHBIZWFkZXJGaWVsZHMuYWRvcHQo
V1RGTW92ZShkYXRhLT5odHRwSGVhZGVycykpOwogCiAgICAgc2l6ZV90IGVuY29kaW5nQ291bnQg
PSBkYXRhLT5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5z
aXplKCk7CiAgICAgaWYgKGVuY29kaW5nQ291bnQgPiAwKSB7CkBAIC03NCwxMiArODIsMTIgQEAg
c3RkOjp1bmlxdWVfcHRyPFJlc291cmNlUmVxdWVzdD4gUmVzb3VyY2VSZXF1ZXN0QmFzZTo6YWRv
cHQoc3RkOjp1bmlxdWVfcHRyPENyb3MKICAgICAgICAgICAgICAgICBlbmNvZGluZzMgPSBkYXRh
LT5yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheVsyXTsKICAg
ICAgICAgfQogICAgICAgICBBU1NFUlQoZW5jb2RpbmdDb3VudCA8PSAzKTsKLSAgICAgICAgcmVx
dWVzdC0+c2V0UmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXko
ZW5jb2RpbmcxLCBlbmNvZGluZzIsIGVuY29kaW5nMyk7CisgICAgICAgIHNldFJlc3BvbnNlQ29u
dGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KGVuY29kaW5nMSwgZW5jb2Rpbmcy
LCBlbmNvZGluZzMpOwogICAgIH0KLSAgICByZXF1ZXN0LT5zZXRIVFRQQm9keShkYXRhLT5odHRw
Qm9keS5jb3B5UmVmKCkpOwotICAgIHJlcXVlc3QtPnNldEFsbG93Q29va2llcyhkYXRhLT5hbGxv
d0Nvb2tpZXMpOwotICAgIHJlcXVlc3QtPmRvUGxhdGZvcm1BZG9wdChXVEZNb3ZlKGRhdGEpKTsK
LSAgICByZXR1cm4gcmVxdWVzdDsKKyAgICBzZXRIVFRQQm9keShkYXRhLT5odHRwQm9keS5jb3B5
UmVmKCkpOworICAgIHNldEFsbG93Q29va2llcyhkYXRhLT5hbGxvd0Nvb2tpZXMpOworCisgICAg
Y29uc3RfY2FzdDxSZXNvdXJjZVJlcXVlc3QmPihhc1Jlc291cmNlUmVxdWVzdCgpKS5kb1BsYXRm
b3JtQWRvcHQoV1RGTW92ZShkYXRhKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVh
ZFJlc291cmNlUmVxdWVzdERhdGE+IFJlc291cmNlUmVxdWVzdEJhc2U6OmNvcHlEYXRhKCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VS
ZXF1ZXN0QmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJl
cXVlc3RCYXNlLmgKaW5kZXggMjg1ZmRhY2I3YjNiOTU4NDIxY2VmMzU1N2E1MzMyMTE5MDcxOGVk
YS4uNmIxNjNjYjkxNzE4Yjg0MzA3NTY1MWIxZWIzMWE5NGFkYjJlMzQzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmgK
QEAgLTM1LDIyMSArMzUsMjIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGVudW0g
UmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgewotICAgICAgICBVc2VQcm90b2NvbENhY2hlUG9s
aWN5LCAvLyBub3JtYWwgbG9hZAotICAgICAgICBSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSwgLy8g
cmVsb2FkCi0gICAgICAgIFJldHVybkNhY2hlRGF0YUVsc2VMb2FkLCAvLyBiYWNrL2ZvcndhcmQg
b3IgZW5jb2RpbmcgY2hhbmdlIC0gYWxsb3cgc3RhbGUgZGF0YQotICAgICAgICBSZXR1cm5DYWNo
ZURhdGFEb250TG9hZCAgLy8gcmVzdWx0cyBvZiBhIHBvc3QgLSBhbGxvdyBzdGFsZSBkYXRhIGFu
ZCBvbmx5IHVzZSBjYWNoZQotICAgIH07Ci0KLSAgICBlbnVtIEhUVFBCb2R5VXBkYXRlUG9saWN5
IHsKLSAgICAgICAgRG9Ob3RVcGRhdGVIVFRQQm9keSwKLSAgICAgICAgVXBkYXRlSFRUUEJvZHkK
LSAgICB9OwotCi0gICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0OwotICAgIHN0cnVjdCBDcm9zc1Ro
cmVhZFJlc291cmNlUmVxdWVzdERhdGE7Ci0KLSAgICAvLyBEbyBub3QgdXNlIHRoaXMgdHlwZSBk
aXJlY3RseS4gIFVzZSBSZXNvdXJjZVJlcXVlc3QgaW5zdGVhZC4KLSAgICBjbGFzcyBSZXNvdXJj
ZVJlcXVlc3RCYXNlIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVi
bGljOgotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlc291
cmNlUmVxdWVzdD4gYWRvcHQoc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1
ZXN0RGF0YT4pOwotCi0gICAgICAgIC8vIEdldHMgYSBjb3B5IG9mIHRoZSBkYXRhIHN1aXRhYmxl
IGZvciBwYXNzaW5nIHRvIGFub3RoZXIgdGhyZWFkLgotICAgICAgICBXRUJDT1JFX0VYUE9SVCBz
dGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBjb3B5RGF0YSgp
IGNvbnN0OwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0g
ICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotCi0gICAgICAgIFdF
QkNPUkVfRVhQT1JUIGNvbnN0IFVSTCYgdXJsKCkgY29uc3Q7Ci0gICAgICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0VVJMKGNvbnN0IFVSTCYgdXJsKTsKLQotICAgICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZUNyZWRlbnRpYWxzKCk7Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgUmVz
b3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3koKSBjb25zdDsKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRDYWNoZVBvbGljeShSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGlj
eSBjYWNoZVBvbGljeSk7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgdGltZW91dEludGVydmFs
KCkgY29uc3Q7IC8vIE1heSByZXR1cm4gMCB3aGVuIHVzaW5nIHBsYXRmb3JtIGRlZmF1bHQuCi0g
ICAgICAgIHZvaWQgc2V0VGltZW91dEludGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpOwot
ICAgICAgICAKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgVVJMJiBmaXJzdFBhcnR5Rm9y
Q29va2llcygpIGNvbnN0OwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpcnN0UGFy
dHlGb3JDb29raWVzKGNvbnN0IFVSTCYpOwotICAgICAgICAKLSAgICAgICAgV0VCQ09SRV9FWFBP
UlQgY29uc3QgU3RyaW5nJiBodHRwTWV0aG9kKCkgY29uc3Q7Ci0gICAgICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0SFRUUE1ldGhvZChjb25zdCBTdHJpbmcmIGh0dHBNZXRob2QpOwotICAgICAg
ICAKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgSFRUUEhlYWRlck1hcCYgaHR0cEhlYWRl
ckZpZWxkcygpIGNvbnN0OwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhUVFBIZWFk
ZXJGaWVsZHMoSFRUUEhlYWRlck1hcCk7Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGh0dHBIZWFkZXJGaWVsZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgICAgICBXRUJD
T1JFX0VYUE9SVCBTdHJpbmcgaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lKSBjb25zdDsK
LSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpOwotICAgICAgICB2b2lkIGFkZEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0KLSAgICAgICAgLy8gSW5zdGVh
ZCBvZiBwYXNzaW5nIGEgc3RyaW5nIGxpdGVyYWwgdG8gYW55IG9mIHRoZXNlIGZ1bmN0aW9ucywg
anVzdCB1c2UgYSBIVFRQSGVhZGVyTmFtZSBpbnN0ZWFkLgotICAgICAgICB0ZW1wbGF0ZTxzaXpl
X3QgbGVuZ3RoPiBTdHJpbmcgaHR0cEhlYWRlckZpZWxkKGNvbnN0IGNoYXIgKCYpW2xlbmd0aF0p
IGNvbnN0ID0gZGVsZXRlOwotICAgICAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiB2b2lkIHNl
dEhUVFBIZWFkZXJGaWVsZChjb25zdCBjaGFyICgmKVtsZW5ndGhdLCBjb25zdCBTdHJpbmcmKSA9
IGRlbGV0ZTsKLSAgICAgICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4gdm9pZCBhZGRIVFRQSGVh
ZGVyRmllbGQoY29uc3QgY2hhciAoJilbbGVuZ3RoXSwgY29uc3QgU3RyaW5nJikgPSBkZWxldGU7
Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckhUVFBBdXRob3JpemF0aW9uKCk7
Ci0KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGh0dHBDb250ZW50VHlwZSgpIGNvbnN0
OwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhUVFBDb250ZW50VHlwZShjb25zdCBT
dHJpbmcmKTsKLSAgICAgICAgdm9pZCBjbGVhckhUVFBDb250ZW50VHlwZSgpOwotCi0gICAgICAg
IFdFQkNPUkVfRVhQT1JUIFN0cmluZyBodHRwUmVmZXJyZXIoKSBjb25zdDsKLSAgICAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRIVFRQUmVmZXJyZXIoY29uc3QgU3RyaW5nJik7Ci0gICAgICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJIVFRQUmVmZXJyZXIoKTsKLSAgICAgICAgCi0gICAg
ICAgIFN0cmluZyBodHRwT3JpZ2luKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0SFRUUE9yaWdp
bihjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckhUVFBP
cmlnaW4oKTsKLQotICAgICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaHR0cFVzZXJBZ2VudCgp
IGNvbnN0OwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhUVFBVc2VyQWdlbnQoY29u
c3QgU3RyaW5nJik7Ci0gICAgICAgIHZvaWQgY2xlYXJIVFRQVXNlckFnZW50KCk7Ci0KLSAgICAg
ICAgU3RyaW5nIGh0dHBBY2NlcHQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRIVFRQQWNjZXB0
KGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2b2lkIGNsZWFySFRUUEFjY2VwdCgpOwotCi0gICAg
ICAgIHZvaWQgY2xlYXJIVFRQQWNjZXB0RW5jb2RpbmcoKTsKLQotICAgICAgICBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJy
YXkoKSBjb25zdCB7IHJldHVybiBtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdG
YWxsYmFja0FycmF5OyB9Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoY29uc3QgU3RyaW5nJiBlbmNv
ZGluZzEsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcyID0gU3RyaW5nKCksIGNvbnN0IFN0cmluZyYg
ZW5jb2RpbmczID0gU3RyaW5nKCkpOwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIEZvcm1EYXRh
KiBodHRwQm9keSgpIGNvbnN0OwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhUVFBC
b2R5KFJlZlB0cjxGb3JtRGF0YT4mJik7Ci0KLSAgICAgICAgYm9vbCBhbGxvd0Nvb2tpZXMoKSBj
b25zdDsKLSAgICAgICAgdm9pZCBzZXRBbGxvd0Nvb2tpZXMoYm9vbCBhbGxvd0Nvb2tpZXMpOwot
Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KCkg
Y29uc3Q7Ci0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UHJpb3JpdHkoUmVzb3VyY2VM
b2FkUHJpb3JpdHkpOwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNDb25kaXRpb25h
bCgpIGNvbnN0OwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIG1ha2VVbmNvbmRpdGlvbmFs
KCk7Ci0KLSAgICAgICAgLy8gV2hldGhlciB0aGUgYXNzb2NpYXRlZCBSZXNvdXJjZUhhbmRsZUNs
aWVudCBuZWVkcyB0byBiZSBub3RpZmllZCBvZgotICAgICAgICAvLyB1cGxvYWQgcHJvZ3Jlc3Mg
bWFkZSBmb3IgdGhhdCByZXNvdXJjZS4KLSAgICAgICAgYm9vbCByZXBvcnRVcGxvYWRQcm9ncmVz
cygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0VXBsb2FkUHJvZ3Jlc3M7IH0KLSAgICAgICAgdm9p
ZCBzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9hZFByb2dyZXNzKSB7IG1f
cmVwb3J0VXBsb2FkUHJvZ3Jlc3MgPSByZXBvcnRVcGxvYWRQcm9ncmVzczsgfQotCi0gICAgICAg
IC8vIFdoZXRoZXIgdGhlIHRpbWluZyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgY29sbGVjdGVkIGZv
ciB0aGUgcmVxdWVzdC4KLSAgICAgICAgYm9vbCByZXBvcnRMb2FkVGltaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXBvcnRMb2FkVGltaW5nOyB9Ci0gICAgICAgIHZvaWQgc2V0UmVwb3J0TG9hZFRp
bWluZyhib29sIHJlcG9ydExvYWRUaW1pbmcpIHsgbV9yZXBvcnRMb2FkVGltaW5nID0gcmVwb3J0
TG9hZFRpbWluZzsgfQotCi0gICAgICAgIC8vIFdoZXRoZXIgYWN0dWFsIGhlYWRlcnMgYmVpbmcg
c2VudC9yZWNlaXZlZCBzaG91bGQgYmUgY29sbGVjdGVkIGFuZCByZXBvcnRlZCBmb3IgdGhlIHJl
cXVlc3QuCi0gICAgICAgIGJvb2wgcmVwb3J0UmF3SGVhZGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVwb3J0UmF3SGVhZGVyczsgfQotICAgICAgICB2b2lkIHNldFJlcG9ydFJhd0hlYWRlcnMoYm9v
bCByZXBvcnRSYXdIZWFkZXJzKSB7IG1fcmVwb3J0UmF3SGVhZGVycyA9IHJlcG9ydFJhd0hlYWRl
cnM7IH0KLQotICAgICAgICAvLyBXaGV0aGVyIHRoaXMgcmVxdWVzdCBzaG91bGQgYmUgaGlkZGVu
IGZyb20gdGhlIEluc3BlY3Rvci4KLSAgICAgICAgYm9vbCBoaWRkZW5Gcm9tSW5zcGVjdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9oaWRkZW5Gcm9tSW5zcGVjdG9yOyB9Ci0gICAgICAgIHZvaWQgc2V0
SGlkZGVuRnJvbUluc3BlY3Rvcihib29sIGhpZGRlbkZyb21JbnNwZWN0b3IpIHsgbV9oaWRkZW5G
cm9tSW5zcGVjdG9yID0gaGlkZGVuRnJvbUluc3BlY3RvcjsgfQotCi0gICAgICAgIGVudW0gY2xh
c3MgUmVxdWVzdGVyIHsgVW5zcGVjaWZpZWQsIE1haW4sIFhIUiwgTWVkaWEgfTsKLSAgICAgICAg
UmVxdWVzdGVyIHJlcXVlc3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWVzdGVyOyB9Ci0gICAg
ICAgIHZvaWQgc2V0UmVxdWVzdGVyKFJlcXVlc3RlciByZXF1ZXN0ZXIpIHsgbV9yZXF1ZXN0ZXIg
PSByZXF1ZXN0ZXI7IH0KK2VudW0gUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgeworICAgIFVz
ZVByb3RvY29sQ2FjaGVQb2xpY3ksIC8vIG5vcm1hbCBsb2FkCisgICAgUmVsb2FkSWdub3JpbmdD
YWNoZURhdGEsIC8vIHJlbG9hZAorICAgIFJldHVybkNhY2hlRGF0YUVsc2VMb2FkLCAvLyBiYWNr
L2ZvcndhcmQgb3IgZW5jb2RpbmcgY2hhbmdlIC0gYWxsb3cgc3RhbGUgZGF0YQorICAgIFJldHVy
bkNhY2hlRGF0YURvbnRMb2FkICAvLyByZXN1bHRzIG9mIGEgcG9zdCAtIGFsbG93IHN0YWxlIGRh
dGEgYW5kIG9ubHkgdXNlIGNhY2hlCit9OworCitlbnVtIEhUVFBCb2R5VXBkYXRlUG9saWN5IHsK
KyAgICBEb05vdFVwZGF0ZUhUVFBCb2R5LAorICAgIFVwZGF0ZUhUVFBCb2R5Cit9OworCitjbGFz
cyBSZXNvdXJjZVJlcXVlc3Q7CitzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRh
OworCisvLyBEbyBub3QgdXNlIHRoaXMgdHlwZSBkaXJlY3RseS4gIFVzZSBSZXNvdXJjZVJlcXVl
c3QgaW5zdGVhZC4KK2NsYXNzIFJlc291cmNlUmVxdWVzdEJhc2UgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFJlc291cmNlUmVxdWVzdCBpc29sYXRlZENvcHko
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEFzSXNvbGF0ZWRDb3B5KGNvbnN0
IFJlc291cmNlUmVxdWVzdEJhc2UmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNOdWxs
KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCBjb25zdCBVUkwmIHVybCgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0VVJMKGNvbnN0IFVSTCYgdXJsKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVtb3ZlQ3JlZGVudGlhbHMoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlc291cmNlUmVx
dWVzdENhY2hlUG9saWN5IGNhY2hlUG9saWN5KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRDYWNoZVBvbGljeShSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBjYWNoZVBvbGlj
eSk7CisgICAgCisgICAgZG91YmxlIHRpbWVvdXRJbnRlcnZhbCgpIGNvbnN0OyAvLyBNYXkgcmV0
dXJuIDAgd2hlbiB1c2luZyBwbGF0Zm9ybSBkZWZhdWx0LgorICAgIHZvaWQgc2V0VGltZW91dElu
dGVydmFsKGRvdWJsZSB0aW1lb3V0SW50ZXJ2YWwpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JU
IGNvbnN0IFVSTCYgZmlyc3RQYXJ0eUZvckNvb2tpZXMoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldEZpcnN0UGFydHlGb3JDb29raWVzKGNvbnN0IFVSTCYpOworICAgIAorICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IFN0cmluZyYgaHR0cE1ldGhvZCgpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUE1ldGhvZChjb25zdCBTdHJpbmcmIGh0dHBNZXRob2Qp
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGh0dHBIZWFk
ZXJGaWVsZHMoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhUVFBIZWFkZXJG
aWVsZHMoSFRUUEhlYWRlck1hcCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgaHR0cEhl
YWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZSkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRIVFRQSGVhZGVyRmllbGQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhUVFBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhZGRI
VFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAg
IHZvaWQgYWRkSFRUUEhlYWRlckZpZWxkKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CisKKyAgICAvLyBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBzdHJpbmcgbGl0ZXJhbCB0
byBhbnkgb2YgdGhlc2UgZnVuY3Rpb25zLCBqdXN0IHVzZSBhIEhUVFBIZWFkZXJOYW1lIGluc3Rl
YWQuCisgICAgdGVtcGxhdGU8c2l6ZV90IGxlbmd0aD4gU3RyaW5nIGh0dHBIZWFkZXJGaWVsZChj
b25zdCBjaGFyICgmKVtsZW5ndGhdKSBjb25zdCA9IGRlbGV0ZTsKKyAgICB0ZW1wbGF0ZTxzaXpl
X3QgbGVuZ3RoPiB2b2lkIHNldEhUVFBIZWFkZXJGaWVsZChjb25zdCBjaGFyICgmKVtsZW5ndGhd
LCBjb25zdCBTdHJpbmcmKSA9IGRlbGV0ZTsKKyAgICB0ZW1wbGF0ZTxzaXplX3QgbGVuZ3RoPiB2
b2lkIGFkZEhUVFBIZWFkZXJGaWVsZChjb25zdCBjaGFyICgmKVtsZW5ndGhdLCBjb25zdCBTdHJp
bmcmKSA9IGRlbGV0ZTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJIVFRQQXV0aG9y
aXphdGlvbigpOworCisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGh0dHBDb250ZW50VHlwZSgp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SFRUUENvbnRlbnRUeXBlKGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgY2xlYXJIVFRQQ29udGVudFR5cGUoKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyBodHRwUmVmZXJyZXIoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEhUVFBSZWZlcnJlcihjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIGNsZWFySFRUUFJlZmVycmVyKCk7CisgICAgCisgICAgU3RyaW5nIGh0dHBPcmlnaW4o
KSBjb25zdDsKKyAgICB2b2lkIHNldEhUVFBPcmlnaW4oY29uc3QgU3RyaW5nJik7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGVhckhUVFBPcmlnaW4oKTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBodHRwVXNlckFnZW50KCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRIVFRQVXNlckFnZW50KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgY2xlYXJIVFRQVXNlckFn
ZW50KCk7CisKKyAgICBTdHJpbmcgaHR0cEFjY2VwdCgpIGNvbnN0OworICAgIHZvaWQgc2V0SFRU
UEFjY2VwdChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGNsZWFySFRUUEFjY2VwdCgpOworCisg
ICAgdm9pZCBjbGVhckhUVFBBY2NlcHRFbmNvZGluZygpOworCisgICAgY29uc3QgVmVjdG9yPFN0
cmluZz4mIHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJh
Y2tBcnJheTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzcG9uc2VDb250ZW50RGlz
cG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkoY29uc3QgU3RyaW5nJiBlbmNvZGluZzEsIGNv
bnN0IFN0cmluZyYgZW5jb2RpbmcyID0gU3RyaW5nKCksIGNvbnN0IFN0cmluZyYgZW5jb2Rpbmcz
ID0gU3RyaW5nKCkpOworCisgICAgV0VCQ09SRV9FWFBPUlQgRm9ybURhdGEqIGh0dHBCb2R5KCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIVFRQQm9keShSZWZQdHI8Rm9ybURh
dGE+JiYpOworCisgICAgYm9vbCBhbGxvd0Nvb2tpZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldEFs
bG93Q29va2llcyhib29sIGFsbG93Q29va2llcyk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZXNv
dXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0UHJpb3JpdHkoUmVzb3VyY2VMb2FkUHJpb3JpdHkpOworCisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBt
YWtlVW5jb25kaXRpb25hbCgpOworCisgICAgLy8gV2hldGhlciB0aGUgYXNzb2NpYXRlZCBSZXNv
dXJjZUhhbmRsZUNsaWVudCBuZWVkcyB0byBiZSBub3RpZmllZCBvZgorICAgIC8vIHVwbG9hZCBw
cm9ncmVzcyBtYWRlIGZvciB0aGF0IHJlc291cmNlLgorICAgIGJvb2wgcmVwb3J0VXBsb2FkUHJv
Z3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3JlcG9ydFVwbG9hZFByb2dyZXNzOyB9CisgICAgdm9p
ZCBzZXRSZXBvcnRVcGxvYWRQcm9ncmVzcyhib29sIHJlcG9ydFVwbG9hZFByb2dyZXNzKSB7IG1f
cmVwb3J0VXBsb2FkUHJvZ3Jlc3MgPSByZXBvcnRVcGxvYWRQcm9ncmVzczsgfQorCisgICAgLy8g
V2hldGhlciB0aGUgdGltaW5nIGluZm9ybWF0aW9uIHNob3VsZCBiZSBjb2xsZWN0ZWQgZm9yIHRo
ZSByZXF1ZXN0LgorICAgIGJvb2wgcmVwb3J0TG9hZFRpbWluZygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVwb3J0TG9hZFRpbWluZzsgfQorICAgIHZvaWQgc2V0UmVwb3J0TG9hZFRpbWluZyhib29sIHJl
cG9ydExvYWRUaW1pbmcpIHsgbV9yZXBvcnRMb2FkVGltaW5nID0gcmVwb3J0TG9hZFRpbWluZzsg
fQorCisgICAgLy8gV2hldGhlciBhY3R1YWwgaGVhZGVycyBiZWluZyBzZW50L3JlY2VpdmVkIHNo
b3VsZCBiZSBjb2xsZWN0ZWQgYW5kIHJlcG9ydGVkIGZvciB0aGUgcmVxdWVzdC4KKyAgICBib29s
IHJlcG9ydFJhd0hlYWRlcnMoKSBjb25zdCB7IHJldHVybiBtX3JlcG9ydFJhd0hlYWRlcnM7IH0K
KyAgICB2b2lkIHNldFJlcG9ydFJhd0hlYWRlcnMoYm9vbCByZXBvcnRSYXdIZWFkZXJzKSB7IG1f
cmVwb3J0UmF3SGVhZGVycyA9IHJlcG9ydFJhd0hlYWRlcnM7IH0KKworICAgIC8vIFdoZXRoZXIg
dGhpcyByZXF1ZXN0IHNob3VsZCBiZSBoaWRkZW4gZnJvbSB0aGUgSW5zcGVjdG9yLgorICAgIGJv
b2wgaGlkZGVuRnJvbUluc3BlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuRnJvbUluc3Bl
Y3RvcjsgfQorICAgIHZvaWQgc2V0SGlkZGVuRnJvbUluc3BlY3Rvcihib29sIGhpZGRlbkZyb21J
bnNwZWN0b3IpIHsgbV9oaWRkZW5Gcm9tSW5zcGVjdG9yID0gaGlkZGVuRnJvbUluc3BlY3Rvcjsg
fQorCisgICAgZW51bSBjbGFzcyBSZXF1ZXN0ZXIgeyBVbnNwZWNpZmllZCwgTWFpbiwgWEhSLCBN
ZWRpYSB9OworICAgIFJlcXVlc3RlciByZXF1ZXN0ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcXVl
c3RlcjsgfQorICAgIHZvaWQgc2V0UmVxdWVzdGVyKFJlcXVlc3RlciByZXF1ZXN0ZXIpIHsgbV9y
ZXF1ZXN0ZXIgPSByZXF1ZXN0ZXI7IH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKLSAgICAgICAg
Ym9vbCBlbmNvZGluZ1JlcXVpcmVzUGxhdGZvcm1EYXRhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIGJvb2wgZW5jb2RpbmdSZXF1aXJlc1BsYXRmb3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICNlbmRpZgotICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPiB2b2lkIGVu
Y29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoRW5jb2RlciYpIGNvbnN0OwotICAgICAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBib29sIGRlY29kZVdpdGhvdXRQbGF0Zm9ybURhdGEoRGVjb2RlciYp
OworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlV2l0aG91dFBsYXRmb3Jt
RGF0YShFbmNvZGVyJikgY29uc3Q7CisgICAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gYm9vbCBk
ZWNvZGVXaXRob3V0UGxhdGZvcm1EYXRhKERlY29kZXImKTsKIAotICAgICAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgZG91YmxlIGRlZmF1bHRUaW1lb3V0SW50ZXJ2YWwoKTsgLy8gTWF5IHJldHVy
biAwIHdoZW4gdXNpbmcgcGxhdGZvcm0gZGVmYXVsdC4KLSAgICAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHZvaWQgc2V0RGVmYXVsdFRpbWVvdXRJbnRlcnZhbChkb3VibGUpOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBkb3VibGUgZGVmYXVsdFRpbWVvdXRJbnRlcnZhbCgpOyAvLyBNYXkg
cmV0dXJuIDAgd2hlbiB1c2luZyBwbGF0Zm9ybSBkZWZhdWx0LgorICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIHNldERlZmF1bHRUaW1lb3V0SW50ZXJ2YWwoZG91YmxlKTsKIAogI2lmIFBM
QVRGT1JNKElPUykKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVmYXVsdEFs
bG93Q29va2llcygpOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXREZWZh
dWx0QWxsb3dDb29raWVzKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGRl
ZmF1bHRBbGxvd0Nvb2tpZXMoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRE
ZWZhdWx0QWxsb3dDb29raWVzKGJvb2wpOwogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIGJvb2wg
Y29tcGFyZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
LQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgLy8gVXNlZCB3aGVuIFJlc291cmNlUmVxdWVzdCBp
cyBpbml0aWFsaXplZCBmcm9tIGEgcGxhdGZvcm0gcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlcXVl
c3QKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCi0gICAgICAgICAgICA6IG1fcGxhdGZv
cm1SZXF1ZXN0VXBkYXRlZCh0cnVlKQotICAgICAgICAgICAgLCBtX3BsYXRmb3JtUmVxdWVzdEJv
ZHlVcGRhdGVkKHRydWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFJlc291cmNl
UmVxdWVzdEJhc2UoY29uc3QgVVJMJiB1cmwsIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IHBv
bGljeSkKLSAgICAgICAgICAgIDogbV91cmwodXJsKQotICAgICAgICAgICAgLCBtX3RpbWVvdXRJ
bnRlcnZhbChzX2RlZmF1bHRUaW1lb3V0SW50ZXJ2YWwpCi0gICAgICAgICAgICAsIG1faHR0cE1l
dGhvZChBU0NJSUxpdGVyYWwoIkdFVCIpKQotICAgICAgICAgICAgLCBtX2NhY2hlUG9saWN5KHBv
bGljeSkKKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gVXNlZCB3aGVuIFJl
c291cmNlUmVxdWVzdCBpcyBpbml0aWFsaXplZCBmcm9tIGEgcGxhdGZvcm0gcmVwcmVzZW50YXRp
b24gb2YgdGhlIHJlcXVlc3QKKyAgICBSZXNvdXJjZVJlcXVlc3RCYXNlKCkKKyAgICAgICAgOiBt
X3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQodHJ1ZSkKKyAgICAgICAgLCBtX3BsYXRmb3JtUmVxdWVz
dEJvZHlVcGRhdGVkKHRydWUpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdEJh
c2UoY29uc3QgVVJMJiB1cmwsIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5IHBvbGljeSkKKyAg
ICAgICAgOiBtX3VybCh1cmwpCisgICAgICAgICwgbV90aW1lb3V0SW50ZXJ2YWwoc19kZWZhdWx0
VGltZW91dEludGVydmFsKQorICAgICAgICAsIG1faHR0cE1ldGhvZChBU0NJSUxpdGVyYWwoIkdF
VCIpKQorICAgICAgICAsIG1fY2FjaGVQb2xpY3kocG9saWN5KQogI2lmICFQTEFURk9STShJT1Mp
Ci0gICAgICAgICAgICAsIG1fYWxsb3dDb29raWVzKHRydWUpCisgICAgICAgICwgbV9hbGxvd0Nv
b2tpZXModHJ1ZSkKICNlbHNlCi0gICAgICAgICAgICAsIG1fYWxsb3dDb29raWVzKFJlc291cmNl
UmVxdWVzdEJhc2U6OmRlZmF1bHRBbGxvd0Nvb2tpZXMoKSkKKyAgICAgICAgLCBtX2FsbG93Q29v
a2llcyhSZXNvdXJjZVJlcXVlc3RCYXNlOjpkZWZhdWx0QWxsb3dDb29raWVzKCkpCiAjZW5kaWYK
LSAgICAgICAgICAgICwgbV9yZXNvdXJjZVJlcXVlc3RVcGRhdGVkKHRydWUpCi0gICAgICAgICAg
ICAsIG1fcmVzb3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQodHJ1ZSkKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVQbGF0Zm9ybVJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQ
b2xpY3kgPSBEb05vdFVwZGF0ZUhUVFBCb2R5KSBjb25zdDsKLSAgICAgICAgdm9pZCB1cGRhdGVS
ZXNvdXJjZVJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3kgPSBEb05vdFVwZGF0ZUhUVFBCb2R5
KSBjb25zdDsKLQotICAgICAgICAvLyBUaGUgUmVzb3VyY2VSZXF1ZXN0IHN1YmNsYXNzIG1heSAi
c2hhZG93IiB0aGlzIG1ldGhvZCB0byBjb21wYXJlIHBsYXRmb3JtIHNwZWNpZmljIGZpZWxkcwot
ICAgICAgICBzdGF0aWMgYm9vbCBwbGF0Zm9ybUNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIFVS
TCBtX3VybDsKLSAgICAgICAgZG91YmxlIG1fdGltZW91dEludGVydmFsOyAvLyAwIGlzIGEgbWFn
aWMgdmFsdWUgZm9yIHBsYXRmb3JtIGRlZmF1bHQgb24gcGxhdGZvcm1zIHRoYXQgaGF2ZSBvbmUu
Ci0gICAgICAgIFVSTCBtX2ZpcnN0UGFydHlGb3JDb29raWVzOwotICAgICAgICBTdHJpbmcgbV9o
dHRwTWV0aG9kOwotICAgICAgICBIVFRQSGVhZGVyTWFwIG1faHR0cEhlYWRlckZpZWxkczsKLSAg
ICAgICAgVmVjdG9yPFN0cmluZz4gbV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5n
RmFsbGJhY2tBcnJheTsKLSAgICAgICAgUmVmUHRyPEZvcm1EYXRhPiBtX2h0dHBCb2R5OwotICAg
ICAgICBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeSBtX2NhY2hlUG9saWN5IHsgVXNlUHJvdG9j
b2xDYWNoZVBvbGljeSB9OwotICAgICAgICBib29sIG1fYWxsb3dDb29raWVzIHsgZmFsc2UgfTsK
LSAgICAgICAgbXV0YWJsZSBib29sIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZCB7IGZhbHNlIH07
Ci0gICAgICAgIG11dGFibGUgYm9vbCBtX3BsYXRmb3JtUmVxdWVzdFVwZGF0ZWQgeyBmYWxzZSB9
OwotICAgICAgICBtdXRhYmxlIGJvb2wgbV9yZXNvdXJjZVJlcXVlc3RCb2R5VXBkYXRlZCB7IGZh
bHNlIH07Ci0gICAgICAgIG11dGFibGUgYm9vbCBtX3BsYXRmb3JtUmVxdWVzdEJvZHlVcGRhdGVk
IHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBtX3JlcG9ydFVwbG9hZFByb2dyZXNzIHsgZmFsc2Ug
fTsKLSAgICAgICAgYm9vbCBtX3JlcG9ydExvYWRUaW1pbmcgeyBmYWxzZSB9OwotICAgICAgICBi
b29sIG1fcmVwb3J0UmF3SGVhZGVycyB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9oaWRkZW5G
cm9tSW5zcGVjdG9yIHsgZmFsc2UgfTsKLSAgICAgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgbV9w
cmlvcml0eSB7IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cgfTsKLSAgICAgICAgUmVxdWVzdGVy
IG1fcmVxdWVzdGVyIHsgUmVxdWVzdGVyOjpVbnNwZWNpZmllZCB9OwotCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVzdCgpIGNvbnN0
OwotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBkb3VibGUgc19kZWZhdWx0VGltZW91
dEludGVydmFsOworICAgICAgICAsIG1fcmVzb3VyY2VSZXF1ZXN0VXBkYXRlZCh0cnVlKQorICAg
ICAgICAsIG1fcmVzb3VyY2VSZXF1ZXN0Qm9keVVwZGF0ZWQodHJ1ZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCB1cGRhdGVQbGF0Zm9ybVJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3kgPSBE
b05vdFVwZGF0ZUhUVFBCb2R5KSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZVJlc291cmNlUmVxdWVz
dChIVFRQQm9keVVwZGF0ZVBvbGljeSA9IERvTm90VXBkYXRlSFRUUEJvZHkpIGNvbnN0OworCisg
ICAgLy8gVGhlIFJlc291cmNlUmVxdWVzdCBzdWJjbGFzcyBtYXkgInNoYWRvdyIgdGhpcyBtZXRo
b2QgdG8gY29tcGFyZSBwbGF0Zm9ybSBzcGVjaWZpYyBmaWVsZHMKKyAgICBzdGF0aWMgYm9vbCBw
bGF0Zm9ybUNvbXBhcmUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JikgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVVJMIG1fdXJsOworICAgIGRvdWJsZSBtX3Rp
bWVvdXRJbnRlcnZhbDsgLy8gMCBpcyBhIG1hZ2ljIHZhbHVlIGZvciBwbGF0Zm9ybSBkZWZhdWx0
IG9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgb25lLgorICAgIFVSTCBtX2ZpcnN0UGFydHlGb3JDb29r
aWVzOworICAgIFN0cmluZyBtX2h0dHBNZXRob2Q7CisgICAgSFRUUEhlYWRlck1hcCBtX2h0dHBI
ZWFkZXJGaWVsZHM7CisgICAgVmVjdG9yPFN0cmluZz4gbV9yZXNwb25zZUNvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheTsKKyAgICBSZWZQdHI8Rm9ybURhdGE+IG1faHR0cEJv
ZHk7CisgICAgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgbV9jYWNoZVBvbGljeSB7IFVzZVBy
b3RvY29sQ2FjaGVQb2xpY3kgfTsKKyAgICBib29sIG1fYWxsb3dDb29raWVzIHsgZmFsc2UgfTsK
KyAgICBtdXRhYmxlIGJvb2wgbV9yZXNvdXJjZVJlcXVlc3RVcGRhdGVkIHsgZmFsc2UgfTsKKyAg
ICBtdXRhYmxlIGJvb2wgbV9wbGF0Zm9ybVJlcXVlc3RVcGRhdGVkIHsgZmFsc2UgfTsKKyAgICBt
dXRhYmxlIGJvb2wgbV9yZXNvdXJjZVJlcXVlc3RCb2R5VXBkYXRlZCB7IGZhbHNlIH07CisgICAg
bXV0YWJsZSBib29sIG1fcGxhdGZvcm1SZXF1ZXN0Qm9keVVwZGF0ZWQgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9yZXBvcnRVcGxvYWRQcm9ncmVzcyB7IGZhbHNlIH07CisgICAgYm9vbCBtX3JlcG9y
dExvYWRUaW1pbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9yZXBvcnRSYXdIZWFkZXJzIHsgZmFs
c2UgfTsKKyAgICBib29sIG1faGlkZGVuRnJvbUluc3BlY3RvciB7IGZhbHNlIH07CisgICAgUmVz
b3VyY2VMb2FkUHJpb3JpdHkgbV9wcmlvcml0eSB7IFJlc291cmNlTG9hZFByaW9yaXR5OjpMb3cg
fTsKKyAgICBSZXF1ZXN0ZXIgbV9yZXF1ZXN0ZXIgeyBSZXF1ZXN0ZXI6OlVuc3BlY2lmaWVkIH07
CisKK3ByaXZhdGU6CisgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhc1Jlc291cmNlUmVxdWVz
dCgpIGNvbnN0OworCisgICAgLy8gR2V0cyBhIGNvcHkgb2YgdGhlIGRhdGEgc3VpdGFibGUgZm9y
IHBhc3NpbmcgdG8gYW5vdGhlciB0aHJlYWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4gY29weURhdGEoKSBjb25zdDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBkb3VibGUgc19kZWZhdWx0VGltZW91dEludGVydmFsOwogI2lmIFBMQVRG
T1JNKElPUykKLSAgICAgICAgc3RhdGljIGJvb2wgc19kZWZhdWx0QWxsb3dDb29raWVzOworICAg
IHN0YXRpYyBib29sIHNfZGVmYXVsdEFsbG93Q29va2llczsKICNlbmRpZgotICAgIH07Ci0KLSAg
ICBib29sIGVxdWFsSWdub3JpbmdIZWFkZXJGaWVsZHMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFz
ZSYsIGNvbnN0IFJlc291cmNlUmVxdWVzdEJhc2UmKTsKLQotICAgIGlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBhLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGIp
IHsgcmV0dXJuIFJlc291cmNlUmVxdWVzdEJhc2U6OmNvbXBhcmUoYSwgYik7IH0KLSAgICBpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KFJlc291cmNlUmVxdWVzdCYgYSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KLQotICAgIHN0cnVjdCBDcm9zc1RocmVhZFJl
c291cmNlUmVxdWVzdERhdGFCYXNlIHsKLSAgICAgICAgVVJMIHVybDsKLSAgICAgICAgUmVzb3Vy
Y2VSZXF1ZXN0Q2FjaGVQb2xpY3kgY2FjaGVQb2xpY3k7Ci0gICAgICAgIGRvdWJsZSB0aW1lb3V0
SW50ZXJ2YWw7Ci0gICAgICAgIFVSTCBmaXJzdFBhcnR5Rm9yQ29va2llczsKLSAgICAgICAgU3Ry
aW5nIGh0dHBNZXRob2Q7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZEhUVFBI
ZWFkZXJNYXBEYXRhPiBodHRwSGVhZGVyczsKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gcmVzcG9u
c2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXk7Ci0gICAgICAgIFJlZlB0
cjxGb3JtRGF0YT4gaHR0cEJvZHk7Ci0gICAgICAgIGJvb2wgYWxsb3dDb29raWVzOwotICAgICAg
ICBSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eTsKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
QmFzZTo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKLSAgICB9OwotICAgIAotICAgIFdFQkNPUkVfRVhQ
T1JUIHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3Qo
KTsKK307CisKK2Jvb2wgZXF1YWxJZ25vcmluZ0hlYWRlckZpZWxkcyhjb25zdCBSZXNvdXJjZVJl
cXVlc3RCYXNlJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0QmFzZSYpOworCitpbmxpbmUgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgYSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiBiKSB7IHJldHVybiBSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb21wYXJlKGEsIGIpOyB9Citpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KFJlc291cmNlUmVxdWVzdCYgYSwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KKworc3RydWN0IENyb3NzVGhyZWFkUmVzb3Vy
Y2VSZXF1ZXN0RGF0YUJhc2UgeworICAgIFVSTCB1cmw7CisgICAgUmVzb3VyY2VSZXF1ZXN0Q2Fj
aGVQb2xpY3kgY2FjaGVQb2xpY3k7CisgICAgZG91YmxlIHRpbWVvdXRJbnRlcnZhbDsKKyAgICBV
UkwgZmlyc3RQYXJ0eUZvckNvb2tpZXM7CisgICAgU3RyaW5nIGh0dHBNZXRob2Q7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IGh0dHBIZWFkZXJzOwor
ICAgIFZlY3RvcjxTdHJpbmc+IHJlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxs
YmFja0FycmF5OworICAgIFJlZlB0cjxGb3JtRGF0YT4gaHR0cEJvZHk7CisgICAgYm9vbCBhbGxv
d0Nvb2tpZXM7CisgICAgUmVzb3VyY2VMb2FkUHJpb3JpdHkgcHJpb3JpdHk7CisgICAgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZTo6UmVxdWVzdGVyIHJlcXVlc3RlcjsKK307CisKK1dFQkNPUkVfRVhQT1JU
IHVuc2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKTsK
ICNpZiBQTEFURk9STShJT1MpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0aWFsaXplSFRU
UENvbm5lY3Rpb25TZXR0aW5nc09uU3RhcnR1cCgpOworV0VCQ09SRV9FWFBPUlQgdm9pZCBpbml0
aWFsaXplSFRUUENvbm5lY3Rpb25TZXR0aW5nc09uU3RhcnR1cCgpOwogI2VuZGlmCiAKIHRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCmluZGV4IDhhYWQ5OGMwY2Q0M2YxM2Q1
YTBkZDY2MjIxYTYwMzc2YjVjNzlmOWMuLjMxZmY0ZmExOTQzMDJmZDM2Zjg0ZDhjMWFiMjRhODEw
YTMzYTQxOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVz
b3VyY2VSZXNwb25zZUJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuY3BwCkBAIC02MywyMyArNjMsMjYgQEAgUmVzb3VyY2VS
ZXNwb25zZUJhc2U6OlJlc291cmNlUmVzcG9uc2VCYXNlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXAKIHsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlUmVzcG9uc2U+
IFJlc291cmNlUmVzcG9uc2VCYXNlOjphZG9wdChzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRS
ZXNvdXJjZVJlc3BvbnNlRGF0YT4gZGF0YSkKLXsKLSAgICBhdXRvIHJlc3BvbnNlID0gc3RkOjpt
YWtlX3VuaXF1ZTxSZXNvdXJjZVJlc3BvbnNlPigpOwotICAgIHJlc3BvbnNlLT5zZXRVUkwoZGF0
YS0+bV91cmwpOwotICAgIHJlc3BvbnNlLT5zZXRNaW1lVHlwZShkYXRhLT5tX21pbWVUeXBlKTsK
LSAgICByZXNwb25zZS0+c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGRhdGEtPm1fZXhwZWN0ZWRD
b250ZW50TGVuZ3RoKTsKLSAgICByZXNwb25zZS0+c2V0VGV4dEVuY29kaW5nTmFtZShkYXRhLT5t
X3RleHRFbmNvZGluZ05hbWUpOwotCi0gICAgcmVzcG9uc2UtPnNldEhUVFBTdGF0dXNDb2RlKGRh
dGEtPm1faHR0cFN0YXR1c0NvZGUpOwotICAgIHJlc3BvbnNlLT5zZXRIVFRQU3RhdHVzVGV4dChk
YXRhLT5tX2h0dHBTdGF0dXNUZXh0KTsKLSAgICByZXNwb25zZS0+c2V0SFRUUFZlcnNpb24oZGF0
YS0+bV9odHRwVmVyc2lvbik7Ci0KLSAgICByZXNwb25zZS0+bGF6eUluaXQoQWxsRmllbGRzKTsK
LSAgICByZXNwb25zZS0+bV9odHRwSGVhZGVyRmllbGRzLmFkb3B0KFdURk1vdmUoZGF0YS0+bV9o
dHRwSGVhZGVycykpOwotICAgIHJlc3BvbnNlLT5tX3Jlc291cmNlTG9hZFRpbWluZyA9IGRhdGEt
Pm1fcmVzb3VyY2VMb2FkVGltaW5nOwotICAgIHJlc3BvbnNlLT5tX3R5cGUgPSBkYXRhLT5tX3R5
cGU7Ci0gICAgcmVzcG9uc2UtPmRvUGxhdGZvcm1BZG9wdChXVEZNb3ZlKGRhdGEpKTsKK1Jlc291
cmNlUmVzcG9uc2UgUmVzb3VyY2VSZXNwb25zZUJhc2U6Omlzb2xhdGVkQ29weSgpIGNvbnN0Cit7
CisgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKyAgICBhdXRvIGRhdGEgPSBjb3B5RGF0
YSgpOworCisgICAgcmVzcG9uc2Uuc2V0VVJMKGRhdGEtPm1fdXJsKTsKKyAgICByZXNwb25zZS5z
ZXRNaW1lVHlwZShkYXRhLT5tX21pbWVUeXBlKTsKKyAgICByZXNwb25zZS5zZXRFeHBlY3RlZENv
bnRlbnRMZW5ndGgoZGF0YS0+bV9leHBlY3RlZENvbnRlbnRMZW5ndGgpOworICAgIHJlc3BvbnNl
LnNldFRleHRFbmNvZGluZ05hbWUoZGF0YS0+bV90ZXh0RW5jb2RpbmdOYW1lKTsKKworICAgIHJl
c3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKGRhdGEtPm1faHR0cFN0YXR1c0NvZGUpOworICAgIHJl
c3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KGRhdGEtPm1faHR0cFN0YXR1c1RleHQpOworICAgIHJl
c3BvbnNlLnNldEhUVFBWZXJzaW9uKGRhdGEtPm1faHR0cFZlcnNpb24pOworCisgICAgcmVzcG9u
c2UubGF6eUluaXQoQWxsRmllbGRzKTsKKyAgICByZXNwb25zZS5tX2h0dHBIZWFkZXJGaWVsZHMu
YWRvcHQoV1RGTW92ZShkYXRhLT5tX2h0dHBIZWFkZXJzKSk7CisgICAgcmVzcG9uc2UubV9yZXNv
dXJjZUxvYWRUaW1pbmcgPSBkYXRhLT5tX3Jlc291cmNlTG9hZFRpbWluZzsKKyAgICByZXNwb25z
ZS5tX3R5cGUgPSBkYXRhLT5tX3R5cGU7CisgICAgcmVzcG9uc2UuZG9QbGF0Zm9ybUFkb3B0KFdU
Rk1vdmUoZGF0YSkpOworCiAgICAgcmV0dXJuIHJlc3BvbnNlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVzcG9uc2VCYXNlLmgKaW5k
ZXggNmFmNDkwYWM0NTRmOTI5NTllNzY3ZDNkNThiZjkwZTZkM2ZjNjhjOS4uNWZmZjM1OTk0OTE0
MTI4ODMyZGU3NjAwOWFjZTU3YmJmMjY0MjMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXNwb25zZUJhc2UuaApAQCAtMjQsOCArMjQs
NyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBSZXNvdXJjZVJlc3BvbnNlQmFz
ZV9oCi0jZGVmaW5lIFJlc291cmNlUmVzcG9uc2VCYXNlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQ2FjaGVWYWxpZGF0aW9uLmgiCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCkBA
IC00NywxMCArNDYsNyBAQCBzdHJ1Y3QgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlc3BvbnNlRGF0YTsK
IGNsYXNzIFJlc291cmNlUmVzcG9uc2VCYXNlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlc291cmNlUmVzcG9uc2U+
IGFkb3B0KHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9uc2VEYXRhPik7
Ci0KLSAgICAvLyBHZXRzIGEgY29weSBvZiB0aGUgZGF0YSBzdWl0YWJsZSBmb3IgcGFzc2luZyB0
byBhbm90aGVyIHRocmVhZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJj
ZVJlc3BvbnNlRGF0YT4gY29weURhdGEoKSBjb25zdDsKKyAgICBSZXNvdXJjZVJlc3BvbnNlIGlz
b2xhdGVkQ29weSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBt
X2lzTnVsbDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNIVFRQKCkgY29uc3Q7CkBAIC0x
NjMsNiArMTU5LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQ2FjaGVDb250cm9sRGlyZWN0
aXZlcygpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlSGVhZGVyUGFyc2VkU3RhdGUoSFRUUEhlYWRl
ck5hbWUpOwogCisgICAgLy8gR2V0cyBhIGNvcHkgb2YgdGhlIGRhdGEgc3VpdGFibGUgZm9yIHBh
c3NpbmcgdG8gYW5vdGhlciB0aHJlYWQuCisgICAgc3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFk
UmVzb3VyY2VSZXNwb25zZURhdGE+IGNvcHlEYXRhKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAg
ICBib29sIG1faXNOdWxsOwogICAgIFVSTCBtX3VybDsKQEAgLTI5Myw1ICsyOTIsMyBAQCBwdWJs
aWM6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBSZXNvdXJjZVJl
c3BvbnNlQmFzZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL1Jlc291cmNlRXJyb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2Yv
UmVzb3VyY2VFcnJvci5oCmluZGV4IGI4ZmQ2YTc5ZTlhNTdkYjJlN2NkMmQ4ZWU0N2ExNTc0ZmZj
NWZiNzYuLmMzNmJkY2E3MmIzMTEwNGNiZTA0MjRmMjhmZmQzZDQzYmE0ZGI5NmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VFcnJvci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VFcnJvci5oCkBA
IC0yMyw4ICsyMyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFJlc291cmNl
RXJyb3JfaAotI2RlZmluZSBSZXNvdXJjZUVycm9yX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiUmVzb3VyY2VFcnJvckJhc2UuaCIKIApAQCAtNjEsOCArNjAsNiBAQCBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgQ0ZFcnJvclJlZiBjZkVycm9yKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9F
WFBPUlQgb3BlcmF0b3IgQ0ZFcnJvclJlZigpIGNvbnN0OwogCi0gICAgUmVzb3VyY2VFcnJvciBp
c29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiBjb3B5KCk7IH0KLQogI2lmIFVTRShDRk5FVFdP
UkspCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFJlc291cmNlRXJyb3IoY29uc3QgU3RyaW5nJiBk
b21haW4sIGludCBlcnJvckNvZGUsIGNvbnN0IFVSTCYgZmFpbGluZ1VSTCwgY29uc3QgU3RyaW5n
JiBsb2NhbGl6ZWREZXNjcmlwdGlvbiwgQ0ZEYXRhUmVmIGNlcnRpZmljYXRlKTsKQEAgLTEwMiw1
ICs5OSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBSZXNvdXJjZUVycm9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL1Jlc291cmNlUmVxdWVzdC5oCmluZGV4IGMzMGY0YTExMmUyNWJkNzQ2YTc0ZmM0
NGE3MTEzN2M0ZWU1Njc3NjkuLmI1NmQ1NWUxNWQ3Nzg3ZGVmMDBjZDY5OWMyMDIxMDQwMzQxNjdi
MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3Vy
Y2VSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNv
dXJjZVJlcXVlc3QuaApAQCAtMzgsMTI4ICszOCwxMjYgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
X19DRlVSTFN0b3JhZ2VTZXNzaW9uKiBDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBSZXNvdXJjZVJlcXVlc3QgOiBwdWJsaWMgUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSB7Ci0gICAgcHVibGljOgotICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29u
c3QgU3RyaW5nJiB1cmwpIAotICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTChQ
YXJzZWRVUkxTdHJpbmcsIHVybCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBVUkwmIHVybCkgCi0g
ICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBVc2VQcm90b2NvbENhY2hlUG9s
aWN5KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29u
c3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIFJlc291cmNlUmVxdWVzdENhY2hl
UG9saWN5IHBvbGljeSA9IFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICAgICA6IFJl
c291cmNlUmVxdWVzdEJhc2UodXJsLCBwb2xpY3kpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNl
dEhUVFBSZWZlcnJlcihyZWZlcnJlcik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFJl
c291cmNlUmVxdWVzdCgpCi0gICAgICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoVVJMKCks
IFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAK
K2NsYXNzIFJlc291cmNlUmVxdWVzdCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVlc3RCYXNlIHsKK3B1
YmxpYzoKKyAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3RyaW5nJiB1cmwpIAorICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2UoVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgVXNlUHJvdG9j
b2xDYWNoZVBvbGljeSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0
IFVSTCYgdXJsKSAKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgVXNlUHJvdG9j
b2xDYWNoZVBvbGljeSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0
IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBv
bGljeSBwb2xpY3kgPSBVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICA6IFJlc291cmNl
UmVxdWVzdEJhc2UodXJsLCBwb2xpY3kpCisgICAgeworICAgICAgICBzZXRIVFRQUmVmZXJyZXIo
cmVmZXJyZXIpOworICAgIH0KKyAgICAKKyAgICBSZXNvdXJjZVJlcXVlc3QoKQorICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2UoVVJMKCksIFVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAg
eworICAgIH0KKyAgICAKICNpZiBVU0UoQ0ZORVRXT1JLKQogI2lmIFBMQVRGT1JNKENPQ09BKQot
ICAgICAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICopOwot
ICAgICAgICB2b2lkIHVwZGF0ZU5TVVJMUmVxdWVzdCgpOwotICAgICAgICB2b2lkIGNsZWFyT3JV
cGRhdGVOU1VSTFJlcXVlc3QoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBSZXNvdXJjZVJlcXVlc3Qo
TlNVUkxSZXF1ZXN0ICopOworICAgIHZvaWQgdXBkYXRlTlNVUkxSZXF1ZXN0KCk7CisgICAgdm9p
ZCBjbGVhck9yVXBkYXRlTlNVUkxSZXF1ZXN0KCk7CiAjZW5kaWYKIAotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QoQ0ZVUkxSZXF1ZXN0UmVmIGNmUmVxdWVzdCkKLSAgICAgICAgICAgIDogUmVzb3Vy
Y2VSZXF1ZXN0QmFzZSgpCi0gICAgICAgICAgICAsIG1fY2ZSZXF1ZXN0KGNmUmVxdWVzdCkKLSAg
ICAgICAgewotICAgICAgICB9CisgICAgUmVzb3VyY2VSZXF1ZXN0KENGVVJMUmVxdWVzdFJlZiBj
ZlJlcXVlc3QpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSgpCisgICAgICAgICwgbV9j
ZlJlcXVlc3QoY2ZSZXF1ZXN0KQorICAgIHsKKyAgICB9CiAjZWxzZQotICAgICAgICBSZXNvdXJj
ZVJlcXVlc3QoTlNVUkxSZXF1ZXN0ICpuc1JlcXVlc3QpCi0gICAgICAgICAgICA6IFJlc291cmNl
UmVxdWVzdEJhc2UoKQotICAgICAgICAgICAgLCBtX25zUmVxdWVzdChuc1JlcXVlc3QpCi0gICAg
ICAgIHsKLSAgICAgICAgfQorICAgIFJlc291cmNlUmVxdWVzdChOU1VSTFJlcXVlc3QgKm5zUmVx
dWVzdCkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKCkKKyAgICAgICAgLCBtX25zUmVx
dWVzdChuc1JlcXVlc3QpCisgICAgeworICAgIH0KICNlbmRpZgogCi0gICAgICAgIFJlc291cmNl
UmVxdWVzdCBpc29sYXRlZENvcHkoKSBjb25zdCB7IHJldHVybiAqUmVzb3VyY2VSZXF1ZXN0Ojph
ZG9wdChjb3B5RGF0YSgpKTsgfQotCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRl
RnJvbURlbGVnYXRlUHJlc2VydmluZ09sZFByb3BlcnRpZXMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5n
T2xkUHJvcGVydGllcyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAogI2lmIFBMQVRGT1JNKE1B
QykKLSAgICAgICAgdm9pZCBhcHBseVdlYkFyY2hpdmVIYWNrRm9yTWFpbCgpOworICAgIHZvaWQg
YXBwbHlXZWJBcmNoaXZlSGFja0Zvck1haWwoKTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09B
KQogI2lmIFVTRShDRk5FVFdPUkspCi0gICAgICAgIGJvb2wgZW5jb2RpbmdSZXF1aXJlc1BsYXRm
b3JtRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faHR0cEJvZHkgfHwgbV9jZlJlcXVlc3Q7IH0KKyAg
ICBib29sIGVuY29kaW5nUmVxdWlyZXNQbGF0Zm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBtX2h0
dHBCb2R5IHx8IG1fY2ZSZXF1ZXN0OyB9CiAjZWxzZQotICAgICAgICBib29sIGVuY29kaW5nUmVx
dWlyZXNQbGF0Zm9ybURhdGEoKSBjb25zdCB7IHJldHVybiBtX2h0dHBCb2R5IHx8IG1fbnNSZXF1
ZXN0OyB9CisgICAgYm9vbCBlbmNvZGluZ1JlcXVpcmVzUGxhdGZvcm1EYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9odHRwQm9keSB8fCBtX25zUmVxdWVzdDsgfQogI2VuZGlmCi0gICAgICAgIFdFQkNP
UkVfRVhQT1JUIE5TVVJMUmVxdWVzdCAqbnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5
KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBOU1VSTFJlcXVlc3QgKm5zVVJMUmVxdWVzdChI
VFRQQm9keVVwZGF0ZVBvbGljeSkgY29uc3Q7CiAKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIENGU3RyaW5nUmVmIGlzVXNlckluaXRpYXRlZEtleSgpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBDRlN0cmluZ1JlZiBpc1VzZXJJbml0aWF0ZWRLZXkoKTsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKENBQ0hFX1BBUlRJVElPTklORykKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFN0cmluZyBwYXJ0aXRpb25OYW1lKGNvbnN0IFN0cmluZyYgZG9tYWluKTsKLSAgICAgICAgY29u
c3QgU3RyaW5nJiBjYWNoZVBhcnRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVQYXJ0aXRp
b24uaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogbV9jYWNoZVBhcnRpdGlvbjsgfQotICAgICAg
ICB2b2lkIHNldENhY2hlUGFydGl0aW9uKGNvbnN0IFN0cmluZyYgY2FjaGVQYXJ0aXRpb24pCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChjYWNoZVBhcnRpdGlvbiA9PSBwYXJ0aXRpb25O
YW1lKGNhY2hlUGFydGl0aW9uKSk7Ci0gICAgICAgICAgICBtX2NhY2hlUGFydGl0aW9uID0gY2Fj
aGVQYXJ0aXRpb247Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXREb21haW5Gb3JDYWNoZVBh
cnRpdGlvbihjb25zdCBTdHJpbmcmIGRvbWFpbikgeyBtX2NhY2hlUGFydGl0aW9uID0gcGFydGl0
aW9uTmFtZShkb21haW4pOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBwYXJ0
aXRpb25OYW1lKGNvbnN0IFN0cmluZyYgZG9tYWluKTsKKyAgICBjb25zdCBTdHJpbmcmIGNhY2hl
UGFydGl0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZVBhcnRpdGlvbi5pc051bGwoKSA/IGVt
cHR5U3RyaW5nKCkgOiBtX2NhY2hlUGFydGl0aW9uOyB9CisgICAgdm9pZCBzZXRDYWNoZVBhcnRp
dGlvbihjb25zdCBTdHJpbmcmIGNhY2hlUGFydGl0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGNhY2hlUGFydGl0aW9uID09IHBhcnRpdGlvbk5hbWUoY2FjaGVQYXJ0aXRpb24pKTsKKyAgICAg
ICAgbV9jYWNoZVBhcnRpdGlvbiA9IGNhY2hlUGFydGl0aW9uOworICAgIH0KKyAgICB2b2lkIHNl
dERvbWFpbkZvckNhY2hlUGFydGl0aW9uKGNvbnN0IFN0cmluZyYgZG9tYWluKSB7IG1fY2FjaGVQ
YXJ0aXRpb24gPSBwYXJ0aXRpb25OYW1lKGRvbWFpbik7IH0KICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFVTRShDRk5FVFdPUkspCi0gICAgICAgIFdFQkNPUkVfRVhQT1JUIENGVVJM
UmVxdWVzdFJlZiBjZlVSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3kpIGNvbnN0OwotICAg
ICAgICB2b2lkIHNldFN0b3JhZ2VTZXNzaW9uKENGVVJMU3RvcmFnZVNlc3Npb25SZWYpOworICAg
IFdFQkNPUkVfRVhQT1JUIENGVVJMUmVxdWVzdFJlZiBjZlVSTFJlcXVlc3QoSFRUUEJvZHlVcGRh
dGVQb2xpY3kpIGNvbnN0OworICAgIHZvaWQgc2V0U3RvcmFnZVNlc3Npb24oQ0ZVUkxTdG9yYWdl
U2Vzc2lvblJlZik7CiAjZW5kaWYKIAotICAgICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBodHRwUGlwZWxpbmluZ0VuYWJsZWQoKTsKLSAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgc2V0SFRUUFBpcGVsaW5pbmdFbmFibGVkKGJvb2wpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBib29sIGh0dHBQaXBlbGluaW5nRW5hYmxlZCgpOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIHNldEhUVFBQaXBlbGluaW5nRW5hYmxlZChib29sKTsKIAotICAgICAgICBz
dGF0aWMgYm9vbCByZXNvdXJjZVByaW9yaXRpZXNFbmFibGVkKCk7CisgICAgc3RhdGljIGJvb2wg
cmVzb3VyY2VQcmlvcml0aWVzRW5hYmxlZCgpOwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJp
ZW5kIGNsYXNzIFJlc291cmNlUmVxdWVzdEJhc2U7Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBSZXNvdXJjZVJlcXVlc3RCYXNlOwogCi0gICAgICAgIHZvaWQgZG9VcGRhdGVQbGF0Zm9ybVJl
cXVlc3QoKTsKLSAgICAgICAgdm9pZCBkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpOwotICAgICAg
ICB2b2lkIGRvVXBkYXRlUGxhdGZvcm1IVFRQQm9keSgpOwotICAgICAgICB2b2lkIGRvVXBkYXRl
UmVzb3VyY2VIVFRQQm9keSgpOworICAgIHZvaWQgZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKTsK
KyAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCk7CisgICAgdm9pZCBkb1VwZGF0ZVBs
YXRmb3JtSFRUUEJvZHkoKTsKKyAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VIVFRQQm9keSgpOwog
Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+
IGRvUGxhdGZvcm1Db3B5RGF0YShzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJl
cXVlc3REYXRhPikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZG9QbGF0Zm9ybUFkb3B0KHN0ZDo6dW5p
cXVlX3B0cjxDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGE+KTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhPiBkb1BsYXRmb3JtQ29weURhdGEo
c3RkOjp1bmlxdWVfcHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4pIGNvbnN0Owor
ICAgIHZvaWQgZG9QbGF0Zm9ybUFkb3B0KHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVhZFJlc291
cmNlUmVxdWVzdERhdGE+KTsKIAogI2lmIFVTRShDRk5FVFdPUkspCi0gICAgICAgIFJldGFpblB0
cjxDRlVSTFJlcXVlc3RSZWY+IG1fY2ZSZXF1ZXN0OworICAgIFJldGFpblB0cjxDRlVSTFJlcXVl
c3RSZWY+IG1fY2ZSZXF1ZXN0OwogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgICAg
IFJldGFpblB0cjxOU1VSTFJlcXVlc3Q+IG1fbnNSZXF1ZXN0OworICAgIFJldGFpblB0cjxOU1VS
TFJlcXVlc3Q+IG1fbnNSZXF1ZXN0OwogI2VuZGlmCiAjaWYgRU5BQkxFKENBQ0hFX1BBUlRJVElP
TklORykKLSAgICAgICAgU3RyaW5nIG1fY2FjaGVQYXJ0aXRpb247CisgICAgU3RyaW5nIG1fY2Fj
aGVQYXJ0aXRpb247CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMgYm9vbCBzX2h0dHBQaXBlbGlu
aW5nRW5hYmxlZDsKLSAgICB9OworICAgIHN0YXRpYyBib29sIHNfaHR0cFBpcGVsaW5pbmdFbmFi
bGVkOworfTsKIAotICAgIHN0cnVjdCBDcm9zc1RocmVhZFJlc291cmNlUmVxdWVzdERhdGEgOiBw
dWJsaWMgQ3Jvc3NUaHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhQmFzZSB7CitzdHJ1Y3QgQ3Jvc3NU
aHJlYWRSZXNvdXJjZVJlcXVlc3REYXRhIDogcHVibGljIENyb3NzVGhyZWFkUmVzb3VyY2VSZXF1
ZXN0RGF0YUJhc2UgewogI2lmIEVOQUJMRShDQUNIRV9QQVJUSVRJT05JTkcpCi0gICAgICAgIFN0
cmluZyBtX2NhY2hlUGFydGl0aW9uOworICAgIFN0cmluZyBtX2NhY2hlUGFydGl0aW9uOwogI2Vu
ZGlmCi0gICAgfTsKK307CiAKLSAgICBpbmxpbmUgYm9vbCBSZXNvdXJjZVJlcXVlc3Q6OnJlc291
cmNlUHJpb3JpdGllc0VuYWJsZWQoKQotICAgIHsKK2lubGluZSBib29sIFJlc291cmNlUmVxdWVz
dDo6cmVzb3VyY2VQcmlvcml0aWVzRW5hYmxlZCgpCit7CiAjaWYgUExBVEZPUk0oTUFDKQotICAg
IHJldHVybiB0cnVlOworcmV0dXJuIHRydWU7CiAjZWxpZiBQTEFURk9STShJT1MpCi0gICAgcmV0
dXJuIHRydWU7CityZXR1cm4gdHJ1ZTsKICNlbGlmIFBMQVRGT1JNKFdJTikKLSAgICByZXR1cm4g
ZmFsc2U7CityZXR1cm4gZmFsc2U7CiAjZW5kaWYKLSAgICB9Cit9CiAKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9SZXNvdXJjZVJlc3BvbnNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L1Jlc291cmNlUmVzcG9uc2UuaAppbmRleCBhMGY3ZDJkZGUxMDU4MmY3ZTFhZWU2MmZjZjg3OWEw
OWI4OTdiOTdkLi44Mzk0NmNmYTU4ODhmMjkyOTZhMTk3MWQ1MzFjOTVjY2UxODljMzA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVzcG9u
c2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Jlc291cmNlUmVz
cG9uc2UuaApAQCAtNzIsOCArNzIsNiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFJl
c291cmNlUmVzcG9uc2UgaXNvbGF0ZWRDb3B5KCkgY29uc3QgeyByZXR1cm4gKlJlc291cmNlUmVz
cG9uc2U6OmFkb3B0KGNvcHlEYXRhKCkpOyB9Ci0KICAgICB1bnNpZ25lZCBtZW1vcnlVc2FnZSgp
IGNvbnN0CiAgICAgewogICAgICAgICAvLyBGSVhNRTogRmluZCBzb21lIHByb2dyYW1tYXRpYyBs
aWdod2VpZ2h0IHdheSB0byBjYWxjdWxhdGUgUmVzb3VyY2VSZXNwb25zZSBhbmQgYXNzb2NpYXRl
ZCBjbGFzc2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2Fj
aGUvTmV0d29ya0NhY2hlRW50cnkuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlRW50cnkuY3BwCmluZGV4IGY3NGNlY2ZmZmFiZWViODQ0ZTBhMjY0
MThhZmI2MTljYzUwYzMzOTAuLmI5NzhiOTk5MzM4YjM3ODZjMWUxMjFkYzBlZTc3OGQ1YmZhZDY5
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdv
cmtDYWNoZUVudHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNo
ZS9OZXR3b3JrQ2FjaGVFbnRyeS5jcHAKQEAgLTU0LDEwICs1NCwxMiBAQCBFbnRyeTo6RW50cnko
Y29uc3QgS2V5JiBrZXksIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
LCBjb25zdCBXZQogICAgICwgbV90aW1lU3RhbXAoc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
bm93KCkpCiAgICAgLCBtX3Jlc3BvbnNlKHJlc3BvbnNlKQogICAgICwgbV92YXJ5aW5nUmVxdWVz
dEhlYWRlcnModmFyeWluZ1JlcXVlc3RIZWFkZXJzKQotICAgICwgbV9yZWRpcmVjdFJlcXVlc3Qo
V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0OjphZG9wdChyZWRpcmVjdFJlcXVlc3QuY29weURhdGEo
KSkpIC8vIERvbid0IGluY2x1ZGUgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gcmVxdWVzdCBvYmpl
Y3QuCiB7CiAgICAgQVNTRVJUKG1fa2V5LnR5cGUoKSA9PSAicmVzb3VyY2UiKTsKICAgICAvLyBS
ZWRpcmVjdCBib2R5IGlzIG5vdCBuZWVkZWQgZXZlbiBpZiBleGlzdHMuCisKKyAgICBtX3JlZGly
ZWN0UmVxdWVzdCA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Pigp
OworICAgIG1fcmVkaXJlY3RSZXF1ZXN0LT5zZXRBc0lzb2xhdGVkQ29weShyZWRpcmVjdFJlcXVl
c3QpOwogICAgIG1fcmVkaXJlY3RSZXF1ZXN0LT5zZXRIVFRQQm9keShudWxscHRyKTsKIH0KIAo=
</data>
<flag name="review"
          id="304295"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>