<?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>174002</bug_id>
          
          <creation_ts>2017-06-29 18:31:25 -0700</creation_ts>
          <short_desc>[Curl] Safe access and life cycle management of bare Curl handle by wrapping with C++ class</short_desc>
          <delta_ts>2017-07-09 12:11:10 -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>
          
          
          <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>117300</blocked>
    
    <blocked>174003</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>galpeter</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1324208</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-06-29 18:31:25 -0700</bug_when>
    <thetext>libcurl is a low-end C API library which is powerful, but easy to make a mistake and hard to find the source of issue. Wrapping by C++ class makes the code confident and accelerate the speed of refactoring, especially for upcoming NetworkLoad implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326565</commentid>
    <comment_count>1</comment_count>
      <attachid>314865</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-07 13:05:17 -0700</bug_when>
    <thetext>Created attachment 314865
implemented</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326568</commentid>
    <comment_count>2</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-07 13:07:55 -0700</bug_when>
    <thetext>This is the first step to make libcurl native resources handling into wrapped class. More refactoring is applying by upcoming patches for other bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326825</commentid>
    <comment_count>3</comment_count>
      <attachid>314865</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-07-08 19:31:04 -0700</bug_when>
    <thetext>Comment on attachment 314865
implemented

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

Let&apos;s land this and do more improvements on top of this.  The curl code was a big mess and is getting much better.  Thanks!

&gt; Source/WebCore/platform/network/curl/CookieJarCurl.cpp:271
&gt; +    struct curl_slist* list = curlHandle.getCookieList();

auto* list

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:334
&gt; +        fastFree(m_url);

Let&apos;s use a MallocPtr or std::unique_ptr&lt;char[]&gt; for m_url instead of having to do manual memory management here.

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:665
&gt; +    // The size of a curl_off_t could be different in WebKit and in cURL depending on
&gt; +    // compilation flags of both.

This doesn&apos;t seem good.  Maybe we should get rid of this and require consistent compilation flags.

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:684
&gt; +#ifndef NDEBUG
&gt; +
&gt; +void CurlHandle::enableVerboseIfUsed()
&gt; +{
&gt; +    if (CurlContext::singleton().isVerbose())
&gt; +        curl_easy_setopt(m_handle, CURLOPT_VERBOSE, 1);
&gt; +}

We could have the functions exist and do nothing in release builds to reduce the number of #ifndef checks.

&gt; Source/WebCore/platform/network/curl/ResourceHandleManager.h:29
&gt;  #ifndef ResourceHandleManager_h
&gt;  #define ResourceHandleManager_h

#pragma once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326826</commentid>
    <comment_count>4</comment_count>
      <attachid>314865</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-08 19:58:39 -0700</bug_when>
    <thetext>Comment on attachment 314865
implemented

Clearing flags on attachment: 314865

Committed r219279: &lt;http://trac.webkit.org/changeset/219279&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326827</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-07-08 19:58:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1326881</commentid>
    <comment_count>6</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-07-09 12:11:10 -0700</bug_when>
    <thetext>Thanks Alex. This makes much safer for us to improve our code base.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>314865</attachid>
            <date>2017-07-07 13:05:17 -0700</date>
            <delta_ts>2017-07-08 19:58:39 -0700</delta_ts>
            <desc>implemented</desc>
            <filename>174002-2.diff</filename>
            <type>text/plain</type>
            <size>75695</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMTIwY2NmMGU2NC4uNzFkYTYxZTRhNjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDUgQEAKKzIwMTctMDctMDcgIEJhc3VrZSBTdXp1a2kgIDxCYXN1a2UuU3V6dWtpQHNv
bnkuY29tPgorCisgICAgICAgIFtDdXJsXSBTYWZlIGFjY2VzcyBhbmQgbGlmZSBjeWNsZSBtYW5h
Z2VtZW50IG9mIGJhcmUgQ3VybCBoYW5kbGUKKyAgICAgICAgYnkgd3JhcHBpbmcgd2l0aCBDKysg
Y2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NDAwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25l
dHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdv
cmsvY3VybC9Db29raWVKYXJDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldENvb2tpZXNG
cm9tRE9NKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JTZXNzaW9uKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybENvbnRleHQ6OkN1cmxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250
ZXh0Ojp+Q3VybENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OmluaXRD
b29raWVTZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTaGFyZUhhbmRsZTo6Q3VybFNo
YXJlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTaGFyZUhhbmRsZTo6fkN1cmxTaGFy
ZUhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU2hhcmVIYW5kbGU6OmxvY2tDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU2hhcmVIYW5kbGU6OnVubG9ja0NhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxTaGFyZUhhbmRsZTo6bXV0ZXhGb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybE11bHRpSGFuZGxlOjpDdXJsTXVsdGlIYW5kbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybE11bHRpSGFuZGxlOjp+Q3VybE11bHRpSGFuZGxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxNdWx0aUhhbmRsZTo6YWRkSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxN
dWx0aUhhbmRsZTo6cmVtb3ZlSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNdWx0aUhh
bmRsZTo6Z2V0RmRTZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybE11bHRpSGFuZGxlOjpwZXJm
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxNdWx0aUhhbmRsZTo6cmVhZEluZm8pOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Q3VybEhhbmRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsSGFuZGxlOjp+Q3VybEhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxl
OjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnBhdXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZVNoYXJlSGFuZGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxIYW5kbGU6OnNldFByaXZhdGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxIYW5kbGU6OnNldFVybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpjbGVhclVy
bCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpjbGVhclJlcXVlc3RIZWFkZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlUmVxdWVzdEhlYWRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlSHR0cEdldFJlcXVlc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEhhbmRsZTo6ZW5hYmxlSHR0cEhlYWRSZXF1ZXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZUh0dHBQb3N0UmVxdWVzdCk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsSGFuZGxlOjpzZXRQb3N0RmllbGRzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxI
YW5kbGU6OnNldFBvc3RGaWVsZExhcmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OmVuYWJsZUh0dHBQdXRSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNl
dEluRmlsZVNpemVMYXJnZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpzZXRIdHRw
Q3VzdG9tUmVxdWVzdCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFibGVBY2Nl
cHRFbmNvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplbmFibGVBbGxvd2Vk
UHJvdG9jb2xzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZUZvbGxvd0xv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZUF1dG9SZWZlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZUh0dHBBdXRoZW50aWNhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpzZXRIdHRwQXV0aFVzZXJQYXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZUNBSW5mb0lmRXhpc3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNldFNzbFZlcmlmeVBlZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0U3NsVmVyaWZ5SG9zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXJsSGFuZGxlOjpzZXRTc2xDZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OnNldFNzbENlcnRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNldFNzbEtl
eVBhc3N3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVuYWJsZUNvb2tpZUph
cklmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNldENvb2tpZUxpc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0Q29va2llTGlzdCk6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsSGFuZGxlOjpjbGVhckNvb2tpZUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEhhbmRsZTo6ZW5hYmxlUHJveHlJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpD
dXJsSGFuZGxlOjplbmFibGVUaW1lb3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRs
ZTo6c2V0V3JpdGVDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5k
bGU6OnNldFJlYWRDYWxsYmFja0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5k
bGU6OnNldFNzbEN0eENhbGxiYWNrRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhh
bmRsZTo6Z2V0RWZmZWN0aXZlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6Omdl
dFByaW1hcnlQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmdldFJlc3BvbnNl
Q29kZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpnZXRDb250ZW50TGVuZ2h0RG93
bmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0SHR0cEF1dGhBdmFpbCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpnZXRUaW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpDdXJsSGFuZGxlOjptYXhDdXJsT2ZmVCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFu
ZGxlOjpleHBlY3RlZFNpemVPZkN1cmxPZmZUKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5k
bGU6OmVuYWJsZVZlcmJvc2VJZlVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6
ZW5hYmxlU3RkRXJySWZVc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0OjpnZXRF
ZmZlY3RpdmVVUkwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OmNy
ZWF0ZU11bHRpSGFuZGxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxDb250ZXh0
OjptdXRleEZvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6bG9j
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsQ29udGV4dDo6dW5sb2NrKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxHbG9iYWw6OkN1cmxHbG9iYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEdsb2JhbDo6fkN1cmxHbG9iYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNoYXJl
SGFuZGxlOjpoYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6OnNoYXJlSGFu
ZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmhhbmRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsSGFuZGxlOjp1cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybENvbnRleHQ6
OmN1cmxTaGFyZUhhbmRsZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxEb3dubG9hZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6On5D
dXJsRG93bmxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjppbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybERvd25sb2FkOjpjYW5jZWwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpn
ZXRVcmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjphZGRIZWFkZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZUhlYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OndyaXRlQ2FsbGJhY2spOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1h
bmFnZXI6OkN1cmxKb2JNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxKb2JNYW5hZ2Vy
Ojp+Q3VybEpvYk1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OmFk
ZFRvQ3VybCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1
cmwpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEpvYk1hbmFnZXI6OndvcmtlclRocmVhZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmg6CisgICAgICAg
IChXZWJDb3JlOjpDdXJsSm9iTWFuYWdlcjo6Z2V0TXVsdGlIYW5kbGUpOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OnBsYXRmb3JtU2V0RGVm
ZXJzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlOjpyZWNlaXZlZENyZWRlbnRpYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OnJlY2VpdmVkUmVxdWVzdFRvQ29udGludWVXaXRob3V0Q3JlZGVudGlhbCk6CisgICAgICAg
IChXZWJDb3JlOjpjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6d3Jp
dGVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQcm90ZWN0aW9uU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6aGVhZGVyQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6cmVhZENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnNldHVwRm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGU6OnNldHVwUFVUKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlOjpzZXR1cFBPU1QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6
OmRpc3BhdGNoU3luY2hyb25vdXNKb2IpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmFwcGx5QXV0aGVudGljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5k
bGU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmhhbmRs
ZUN1cmxNc2cpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpS
ZXNvdXJjZUhhbmRsZU1hbmFnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291
cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlc291cmNlSGFuZGxlTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzdGFydEpvYik6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0U1NM
Q2xpZW50Q2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Y2VydFZlcmlmeUNhbGxiYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNTTFZlcmlmeU9wdGlvbnMpOgorCiAyMDE3LTA1LTI0
ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtT
VkddIExlYWsgaW4gU1ZHQW5pbWF0ZWRMaXN0UHJvcGVydHlUZWFyT2ZmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggNTI1YzQ2ZmYw
NzMuLjJjMGI0MWMxM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9SZXNvdXJjZUhhbmRsZS5oCkBAIC0yOTUsMTIgKzI5NSwxMCBAQCBwcml2YXRlOgogI2lmIFVT
RShDVVJMKQogICAgIHZvaWQgZGlzcGF0Y2hTeW5jaHJvbm91c0pvYigpOwogCi0gICAgdm9pZCBz
ZXR1cFBPU1Qoc3RydWN0IGN1cmxfc2xpc3QqKik7Ci0gICAgdm9pZCBzZXR1cFBVVChzdHJ1Y3Qg
Y3VybF9zbGlzdCoqKTsKKyAgICB2b2lkIHNldHVwUE9TVCgpOworICAgIHZvaWQgc2V0dXBQVVQo
KTsKIAogICAgIHZvaWQgYXBwbHlBdXRoZW50aWNhdGlvbigpOwotCi0gICAgY2hhciBtX2N1cmxF
cnJvckJ1ZmZlcltDVVJMX0VSUk9SX1NJWkVdOwogI2VuZGlmCiAKICAgICBmcmllbmQgY2xhc3Mg
UmVzb3VyY2VIYW5kbGVJbnRlcm5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKaW5kZXggYzA5YjY2NjczYmIu
LjA5YWY3NTFjMDY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtNDMsNyArNDMsNyBAQAogI2VuZGlm
CiAKICNpZiBVU0UoQ1VSTCkKLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KKyNpbmNsdWRlICJDdXJs
Q29udGV4dC5oIgogI2luY2x1ZGUgIkZvcm1EYXRhU3RyZWFtQ3VybC5oIgogI2luY2x1ZGUgIk11
bHRpcGFydEhhbmRsZS5oIgogI2VuZGlmCkBAIC0xMzcsOSArMTM3LDggQEAgcHVibGljOgogICAg
IFJldGFpblB0cjxDRlVSTFN0b3JhZ2VTZXNzaW9uUmVmPiBtX3N0b3JhZ2VTZXNzaW9uOwogI2Vu
ZGlmCiAjaWYgVVNFKENVUkwpCi0gICAgQ1VSTCogbV9oYW5kbGUgeyBudWxscHRyIH07Ci0gICAg
Y2hhciogbV91cmwgeyBudWxscHRyIH07Ci0gICAgc3RydWN0IGN1cmxfc2xpc3QqIG1fY3VzdG9t
SGVhZGVycyB7IG51bGxwdHIgfTsKKyAgICBDdXJsSGFuZGxlIG1fY3VybEhhbmRsZTsKKwogICAg
IFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICBib29sIG1fY2FuY2VsbGVkIHsgZmFs
c2UgfTsKICAgICB1bnNpZ25lZCBzaG9ydCBtX2F1dGhGYWlsdXJlQ291bnQgeyAwIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3Vy
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3Vy
bC5jcHAKaW5kZXggMWFkMzAxNmU5YWIuLjI5MDE3YTU2YWY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmwuY3BwCkBAIC0y
NDIsMTggKzI0MiwxMCBAQCBzdGF0aWMgU3RyaW5nIGdldE5ldHNjYXBlQ29va2llRm9ybWF0KGNv
bnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogCiB2b2lkIHNldENvb2tpZXNGcm9t
RE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYsIGNvbnN0IFVSTCYsIGNvbnN0IFVSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGNvbnN0IEN1cmxDb250ZXh0JiBjb250
ZXh0ID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOworICAgIEN1cmxIYW5kbGUgY3VybEhhbmRs
ZTsKIAotICAgIENVUkwqIGN1cmwgPSBjdXJsX2Vhc3lfaW5pdCgpOwotCi0gICAgaWYgKCFjdXJs
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBjaGFyKiBjb29raWVKYXJGaWxlTmFtZSA9
IGNvbnRleHQuZ2V0Q29va2llSmFyRmlsZU5hbWUoKTsKLSAgICBDVVJMU0gqIGN1cmxzaCA9IGNv
bnRleHQuY3VybFNoYXJlSGFuZGxlKCk7Ci0KLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENV
UkxPUFRfQ09PS0lFSkFSLCBjb29raWVKYXJGaWxlTmFtZSk7Ci0gICAgY3VybF9lYXN5X3NldG9w
dChjdXJsLCBDVVJMT1BUX1NIQVJFLCBjdXJsc2gpOworICAgIGN1cmxIYW5kbGUuZW5hYmxlU2hh
cmVIYW5kbGUoKTsKKyAgICBjdXJsSGFuZGxlLmVuYWJsZUNvb2tpZUphcklmRXhpc3RzKCk7CiAK
ICAgICAvLyBDVVJMIGFjY2VwdHMgY29va2llcyBpbiBlaXRoZXIgU2V0LUNvb2tpZSBvciBOZXRz
Y2FwZSBmaWxlIGZvcm1hdC4KICAgICAvLyBIb3dldmVyIHdpdGggU2V0LUNvb2tpZSBmb3JtYXQs
IHRoZXJlIGlzIG5vIHdheSB0byBzcGVjaWZ5IHRoYXQgd2UKQEAgLTI2NiwyNiArMjU4LDE3IEBA
IHZvaWQgc2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29u
c3QgVVJMJiwgY29uc3QgVVJMJiB1cmwsCiAKICAgICBDU3RyaW5nIHN0ckNvb2tpZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihjb29raWUuY2hhcmFjdGVyczgoKSksIGNvb2tpZS5sZW5n
dGgoKSk7CiAKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGN1cmwsIENVUkxPUFRfQ09PS0lFTElTVCwg
c3RyQ29va2llLmRhdGEoKSk7Ci0KLSAgICBjdXJsX2Vhc3lfY2xlYW51cChjdXJsKTsKKyAgICBj
dXJsSGFuZGxlLnNldENvb2tpZUxpc3Qoc3RyQ29va2llLmRhdGEoKSk7CiB9CiAKIHN0YXRpYyBT
dHJpbmcgY29va2llc0ZvclNlc3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29u
c3QgVVJMJiwgY29uc3QgVVJMJiB1cmwsIGJvb2wgaHR0cG9ubHkpCiB7CiAgICAgU3RyaW5nIGNv
b2tpZXM7Ci0gICAgQ1VSTCogY3VybCA9IGN1cmxfZWFzeV9pbml0KCk7CiAKLSAgICBpZiAoIWN1
cmwpCi0gICAgICAgIHJldHVybiBjb29raWVzOwotCi0gICAgQ1VSTFNIKiBjdXJsc2ggPSBDdXJs
Q29udGV4dDo6c2luZ2xldG9uKCkuY3VybFNoYXJlSGFuZGxlKCk7Ci0KLSAgICBjdXJsX2Vhc3lf
c2V0b3B0KGN1cmwsIENVUkxPUFRfU0hBUkUsIGN1cmxzaCk7Ci0KLSAgICBzdHJ1Y3QgY3VybF9z
bGlzdCogbGlzdCA9IDA7Ci0gICAgY3VybF9lYXN5X2dldGluZm8oY3VybCwgQ1VSTElORk9fQ09P
S0lFTElTVCwgJmxpc3QpOworICAgIEN1cmxIYW5kbGUgY3VybEhhbmRsZTsKKyAgICBjdXJsSGFu
ZGxlLmVuYWJsZVNoYXJlSGFuZGxlKCk7CiAKKyAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbGlzdCA9
IGN1cmxIYW5kbGUuZ2V0Q29va2llTGlzdCgpOwogICAgIGlmIChsaXN0KSB7CiAgICAgICAgIFN0
cmluZyBkb21haW4gPSB1cmwuaG9zdCgpOwogICAgICAgICBTdHJpbmcgcGF0aCA9IHVybC5wYXRo
KCk7CkBAIC0yOTksMTEgKzI4Miw4IEBAIHN0YXRpYyBTdHJpbmcgY29va2llc0ZvclNlc3Npb24o
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgVVJMJiwgY29uc3QKICAgICAgICAg
fQogCiAgICAgICAgIGNvb2tpZXMgPSBjb29raWVzQnVpbGRlci50b1N0cmluZygpOwotICAgICAg
ICBjdXJsX3NsaXN0X2ZyZWVfYWxsKGxpc3QpOwogICAgIH0KIAotICAgIGN1cmxfZWFzeV9jbGVh
bnVwKGN1cmwpOwotCiAgICAgcmV0dXJuIGNvb2tpZXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCmluZGV4IGIwODdk
MTZkOWFiLi5lYzJiZTBlYTVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwCkBAIC0xMDIsMTYgKzEwMiw5IEBAIHN0YXRp
YyBDU3RyaW5nIGNvb2tpZUphclBhdGgoKQogLy8gQ3VybENvbnRleHQgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBD
dXJsQ29udGV4dDo6Q3VybENvbnRleHQoKQotICAgIDogbV9jb29raWVKYXJGaWxlTmFtZShjb29r
aWVKYXJQYXRoKCkpCi0gICAgLCBtX2NlcnRpZmljYXRlUGF0aChjZXJ0aWZpY2F0ZVBhdGgoKSkK
KzogbV9jb29raWVKYXJGaWxlTmFtZSB7IGNvb2tpZUphclBhdGgoKSB9CissIG1fY2VydGlmaWNh
dGVQYXRoIHsgY2VydGlmaWNhdGVQYXRoKCkgfQogewotICAgIGN1cmxfZ2xvYmFsX2luaXQoQ1VS
TF9HTE9CQUxfQUxMKTsKLSAgICBtX2N1cmxTaGFyZUhhbmRsZSA9IGN1cmxfc2hhcmVfaW5pdCgp
OwotICAgIGN1cmxfc2hhcmVfc2V0b3B0KG1fY3VybFNoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hB
UkUsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7Ci0gICAgY3VybF9zaGFyZV9zZXRvcHQobV9jdXJs
U2hhcmVIYW5kbGUsIENVUkxTSE9QVF9TSEFSRSwgQ1VSTF9MT0NLX0RBVEFfRE5TKTsKLSAgICBj
dXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BUX0xPQ0tGVU5DLCBs
b2NrKTsKLSAgICBjdXJsX3NoYXJlX3NldG9wdChtX2N1cmxTaGFyZUhhbmRsZSwgQ1VSTFNIT1BU
X1VOTE9DS0ZVTkMsIHVubG9jayk7Ci0KICAgICBpbml0Q29va2llU2Vzc2lvbigpOwogCiAgICAg
bV9pZ25vcmVTU0xFcnJvcnMgPSBnZXRlbnYoIldFQktJVF9JR05PUkVfU1NMX0VSUk9SUyIpOwpA
QCAtMTI3LDkgKzEyMCw2IEBAIEN1cmxDb250ZXh0OjpDdXJsQ29udGV4dCgpCiAKIEN1cmxDb250
ZXh0Ojp+Q3VybENvbnRleHQoKQogewotICAgIGN1cmxfc2hhcmVfY2xlYW51cChtX2N1cmxTaGFy
ZUhhbmRsZSk7Ci0gICAgY3VybF9nbG9iYWxfY2xlYW51cCgpOwotCiAjaWZuZGVmIE5ERUJVRwog
ICAgIGlmIChtX2xvZ0ZpbGUpCiAgICAgICAgIGZjbG9zZShtX2xvZ0ZpbGUpOwpAQCAtMTQ4LDcg
KzEzOCw3IEBAIHZvaWQgQ3VybENvbnRleHQ6OmluaXRDb29raWVTZXNzaW9uKCkKICAgICBpZiAo
IWN1cmwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGN1cmxfZWFzeV9zZXRvcHQoY3VybCwgQ1VS
TE9QVF9TSEFSRSwgY3VybFNoYXJlSGFuZGxlKCkpOworICAgIGN1cmxfZWFzeV9zZXRvcHQoY3Vy
bCwgQ1VSTE9QVF9TSEFSRSwgbV9zaGFyZUhhbmRsZS5oYW5kbGUoKSk7CiAKICAgICBpZiAoIW1f
Y29va2llSmFyRmlsZU5hbWUuaXNOdWxsKCkpIHsKICAgICAgICAgY3VybF9lYXN5X3NldG9wdChj
dXJsLCBDVVJMT1BUX0NPT0tJRUZJTEUsIG1fY29va2llSmFyRmlsZU5hbWUuZGF0YSgpKTsKQEAg
LTE4OCw1OCArMTc4LDUxOSBAQCB2b2lkIEN1cmxDb250ZXh0OjpzZXRQcm94eUluZm8oY29uc3Qg
U3RyaW5nJiBob3N0LAogICAgIHNldFByb3h5SW5mbyhpbmZvKTsKIH0KIAotLy8gQ3VybCBVdGls
aXRpZXMgPT09PT09PT09PT09PT09PT09PT09PT0KIAotVVJMIEN1cmxDb250ZXh0OjpnZXRFZmZl
Y3RpdmVVUkwoQ1VSTCogaGFuZGxlKQorCisvLyBDdXJsU2hhcmVIYW5kbGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3VybFNoYXJlSGFuZGxlOjpDdXJs
U2hhcmVIYW5kbGUoKQogewotICAgIGNvbnN0IGNoYXIqIHVybDsKLSAgICBDVVJMY29kZSBlcnIg
PSBjdXJsX2Vhc3lfZ2V0aW5mbyhoYW5kbGUsIENVUkxJTkZPX0VGRkVDVElWRV9VUkwsICZ1cmwp
OwotICAgIGlmIChDVVJMRV9PSyAhPSBlcnIpCi0gICAgICAgIHJldHVybiBVUkwoKTsKLSAgICBy
ZXR1cm4gVVJMKFVSTCgpLCB1cmwpOworICAgIG1fc2hhcmVIYW5kbGUgPSBjdXJsX3NoYXJlX2lu
aXQoKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX3NoYXJlSGFuZGxlLCBDVVJMU0hPUFRfU0hB
UkUsIENVUkxfTE9DS19EQVRBX0NPT0tJRSk7CisgICAgY3VybF9zaGFyZV9zZXRvcHQobV9zaGFy
ZUhhbmRsZSwgQ1VSTFNIT1BUX1NIQVJFLCBDVVJMX0xPQ0tfREFUQV9ETlMpOworICAgIGN1cmxf
c2hhcmVfc2V0b3B0KG1fc2hhcmVIYW5kbGUsIENVUkxTSE9QVF9MT0NLRlVOQywgbG9ja0NhbGxi
YWNrKTsKKyAgICBjdXJsX3NoYXJlX3NldG9wdChtX3NoYXJlSGFuZGxlLCBDVVJMU0hPUFRfVU5M
T0NLRlVOQywgdW5sb2NrQ2FsbGJhY2spOworfQorCitDdXJsU2hhcmVIYW5kbGU6On5DdXJsU2hh
cmVIYW5kbGUoKQoreworICAgIGlmIChtX3NoYXJlSGFuZGxlKSB7CisgICAgICAgIGN1cmxfc2hh
cmVfY2xlYW51cChtX3NoYXJlSGFuZGxlKTsKKyAgICAgICAgbV9zaGFyZUhhbmRsZSA9IG51bGxw
dHI7CisgICAgfQogfQogCi1DVVJMTSogQ3VybENvbnRleHQ6OmNyZWF0ZU11bHRpSGFuZGxlKCkK
K3ZvaWQgQ3VybFNoYXJlSGFuZGxlOjpsb2NrQ2FsbGJhY2soQ1VSTCosIGN1cmxfbG9ja19kYXRh
IGRhdGEsIGN1cmxfbG9ja19hY2Nlc3MsIHZvaWQqKQogewotICAgIHJldHVybiBjdXJsX211bHRp
X2luaXQoKTsKKyAgICBpZiAoTG9jayogbXV0ZXggPSBtdXRleEZvcihkYXRhKSkKKyAgICAgICAg
bXV0ZXgtPmxvY2soKTsKIH0KIAotLy8gU2hhcmVkIFJlc291cmNlIG1hbmFnZW1lbnQgPT09PT09
PT09PT09PT09PT09PT09PT0KK3ZvaWQgQ3VybFNoYXJlSGFuZGxlOjp1bmxvY2tDYWxsYmFjayhD
VVJMKiwgY3VybF9sb2NrX2RhdGEgZGF0YSwgdm9pZCopCit7CisgICAgaWYgKExvY2sqIG11dGV4
ID0gbXV0ZXhGb3IoZGF0YSkpCisgICAgICAgIG11dGV4LT51bmxvY2soKTsKK30KIAotTG9jayog
Q3VybENvbnRleHQ6Om11dGV4Rm9yKGN1cmxfbG9ja19kYXRhIGRhdGEpCitMb2NrKiBDdXJsU2hh
cmVIYW5kbGU6Om11dGV4Rm9yKGN1cmxfbG9ja19kYXRhIGRhdGEpCiB7Ci0gICAgREVQUkVDQVRF
RF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIGNvb2tpZU11dGV4LCAoKSk7Ci0gICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIGRuc011dGV4LCAoKSk7Ci0gICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExvY2ssIHNoYXJlTXV0ZXgsICgpKTsKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8TG9jaz4gY29va2llTXV0ZXg7CisgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPExvY2s+IGRuc011dGV4OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxMb2NrPiBz
aGFyZU11dGV4OwogCiAgICAgc3dpdGNoIChkYXRhKSB7CiAgICAgY2FzZSBDVVJMX0xPQ0tfREFU
QV9DT09LSUU6Ci0gICAgICAgIHJldHVybiAmY29va2llTXV0ZXg7CisgICAgICAgIHJldHVybiAm
Y29va2llTXV0ZXguZ2V0KCk7CiAgICAgY2FzZSBDVVJMX0xPQ0tfREFUQV9ETlM6Ci0gICAgICAg
IHJldHVybiAmZG5zTXV0ZXg7CisgICAgICAgIHJldHVybiAmZG5zTXV0ZXguZ2V0KCk7CiAgICAg
Y2FzZSBDVVJMX0xPQ0tfREFUQV9TSEFSRToKLSAgICAgICAgcmV0dXJuICZzaGFyZU11dGV4Owor
ICAgICAgICByZXR1cm4gJnNoYXJlTXV0ZXguZ2V0KCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIH0K
IAotLy8gbGliY3VybCBkb2VzIG5vdCBpbXBsZW1lbnQgaXRzIG93biB0aHJlYWQgc3luY2hyb25p
emF0aW9uIHByaW1pdGl2ZXMuCi0vLyB0aGVzZSB0d28gZnVuY3Rpb25zIHByb3ZpZGUgbXV0ZXhl
cyBmb3IgY29va2llcywgYW5kIGZvciB0aGUgZ2xvYmFsIEROUwotLy8gY2FjaGUuCi12b2lkIEN1
cmxDb250ZXh0Ojpsb2NrKENVUkwqIC8qIGhhbmRsZSAqLywgY3VybF9sb2NrX2RhdGEgZGF0YSwg
Y3VybF9sb2NrX2FjY2VzcyAvKiBhY2Nlc3MgKi8sIHZvaWQqIC8qIHVzZXJQdHIgKi8pCisvLyBD
dXJsTXVsdGlIYW5kbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworQ3VybE11bHRpSGFuZGxlOjpDdXJsTXVsdGlIYW5kbGUoKQogewotICAgIGlmIChMb2Nr
KiBtdXRleCA9IG11dGV4Rm9yKGRhdGEpKQotICAgICAgICBtdXRleC0+bG9jaygpOworICAgIEN1
cmxDb250ZXh0OjpzaW5nbGV0b24oKTsKKworICAgIG1fbXVsdGlIYW5kbGUgPSBjdXJsX211bHRp
X2luaXQoKTsKIH0KIAotdm9pZCBDdXJsQ29udGV4dDo6dW5sb2NrKENVUkwqIC8qIGhhbmRsZSAq
LywgY3VybF9sb2NrX2RhdGEgZGF0YSwgdm9pZCogLyogdXNlclB0ciAqLykKK0N1cmxNdWx0aUhh
bmRsZTo6fkN1cmxNdWx0aUhhbmRsZSgpCiB7Ci0gICAgaWYgKExvY2sqIG11dGV4ID0gbXV0ZXhG
b3IoZGF0YSkpCi0gICAgICAgIG11dGV4LT51bmxvY2soKTsKKyAgICBpZiAobV9tdWx0aUhhbmRs
ZSkgeworICAgICAgICBjdXJsX211bHRpX2NsZWFudXAobV9tdWx0aUhhbmRsZSk7CisgICAgICAg
IG1fbXVsdGlIYW5kbGUgPSBudWxscHRyOworICAgIH0KK30KKworQ1VSTE1jb2RlIEN1cmxNdWx0
aUhhbmRsZTo6YWRkSGFuZGxlKENVUkwqIGhhbmRsZSkKK3sKKyAgICByZXR1cm4gY3VybF9tdWx0
aV9hZGRfaGFuZGxlKG1fbXVsdGlIYW5kbGUsIGhhbmRsZSk7Cit9CisKK0NVUkxNY29kZSBDdXJs
TXVsdGlIYW5kbGU6OnJlbW92ZUhhbmRsZShDVVJMKiBoYW5kbGUpCit7CisgICAgcmV0dXJuIGN1
cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZShtX211bHRpSGFuZGxlLCBoYW5kbGUpOworfQorCitDVVJM
TWNvZGUgQ3VybE11bHRpSGFuZGxlOjpnZXRGZFNldChmZF9zZXQmIHJlYWRGZFNldCwgZmRfc2V0
JiB3cml0ZUZkU2V0LCBmZF9zZXQmIGV4Y0ZkU2V0LCBpbnQmIG1heEZkKQoreworICAgIEZEX1pF
Uk8oJnJlYWRGZFNldCk7CisgICAgRkRfWkVSTygmd3JpdGVGZFNldCk7CisgICAgRkRfWkVSTygm
ZXhjRmRTZXQpOworICAgIG1heEZkID0gMDsKKworICAgIHJldHVybiBjdXJsX211bHRpX2Zkc2V0
KG1fbXVsdGlIYW5kbGUsICZyZWFkRmRTZXQsICZ3cml0ZUZkU2V0LCAmZXhjRmRTZXQsICZtYXhG
ZCk7CiB9CiAKK0NVUkxNY29kZSBDdXJsTXVsdGlIYW5kbGU6OnBlcmZvcm0oaW50JiBydW5uaW5n
SGFuZGxlcykKK3sKKyAgICByZXR1cm4gY3VybF9tdWx0aV9wZXJmb3JtKG1fbXVsdGlIYW5kbGUs
ICZydW5uaW5nSGFuZGxlcyk7Cit9CisKK0NVUkxNc2cqIEN1cmxNdWx0aUhhbmRsZTo6cmVhZElu
Zm8oaW50JiBtZXNzYWdlc0luUXVldWUpCit7CisgICAgcmV0dXJuIGN1cmxfbXVsdGlfaW5mb19y
ZWFkKG1fbXVsdGlIYW5kbGUsICZtZXNzYWdlc0luUXVldWUpOworfQorCisvLyBDdXJsSGFuZGxl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ3Vy
bEhhbmRsZTo6Q3VybEhhbmRsZSgpCit7CisgICAgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpOwor
CisgICAgbV9oYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOworICAgIGN1cmxfZWFzeV9zZXRvcHQo
bV9oYW5kbGUsIENVUkxPUFRfRVJST1JCVUZGRVIsIG1fZXJyb3JCdWZmZXIpOworfQorCitDdXJs
SGFuZGxlOjp+Q3VybEhhbmRsZSgpCit7CisgICAgY2xlYXJDb29raWVMaXN0KCk7CisgICAgY2xl
YXJVcmwoKTsKKyAgICBjbGVhclJlcXVlc3RIZWFkZXJzKCk7CisKKyAgICBpZiAobV9oYW5kbGUp
IHsKKyAgICAgICAgY3VybF9lYXN5X2NsZWFudXAobV9oYW5kbGUpOworICAgICAgICBtX2hhbmRs
ZSA9IG51bGxwdHI7CisgICAgfQorfQorCitDVVJMY29kZSBDdXJsSGFuZGxlOjpwZXJmb3JtKCkK
K3sKKyAgICByZXR1cm4gY3VybF9lYXN5X3BlcmZvcm0obV9oYW5kbGUpOworfQorCitDVVJMY29k
ZSBDdXJsSGFuZGxlOjpwYXVzZShpbnQgYml0bWFzaykKK3sKKyAgICByZXR1cm4gY3VybF9lYXN5
X3BhdXNlKG1faGFuZGxlLCBDVVJMUEFVU0VfQUxMKTsKK30KKwordm9pZCBDdXJsSGFuZGxlOjpl
bmFibGVTaGFyZUhhbmRsZSgpCit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VS
TE9QVF9TSEFSRSwgQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLnNoYXJlSGFuZGxlKCkuaGFuZGxl
KCkpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OnNldFByaXZhdGVEYXRhKHZvaWQqIHVzZXJEYXRh
KQoreworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfUFJJVkFURSwgdXNl
ckRhdGEpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OnNldFVybChjb25zdCBTdHJpbmcmIHVybCkK
K3sKKyAgICBjbGVhclVybCgpOworCisgICAgLy8gdXJsIGlzIGluIEFTQ0lJIHNvIGxhdGluMSgp
IHdpbGwgb25seSBjb252ZXJ0IGl0IHRvIGNoYXIqIHdpdGhvdXQgY2hhcmFjdGVyIHRyYW5zbGF0
aW9uLgorICAgIG1fdXJsID0gZmFzdFN0ckR1cCh1cmwubGF0aW4xKCkuZGF0YSgpKTsKKyAgICBj
dXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1VSTCwgbV91cmwpOworfQorCit2b2lk
IEN1cmxIYW5kbGU6OmNsZWFyVXJsKCkKK3sKKyAgICBpZiAobV91cmwpIHsKKyAgICAgICAgZmFz
dEZyZWUobV91cmwpOworICAgICAgICBtX3VybCA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lk
IEN1cmxIYW5kbGU6OmNsZWFyUmVxdWVzdEhlYWRlcnMoKQoreworICAgIGlmIChtX3JlcXVlc3RI
ZWFkZXJzKSB7CisgICAgICAgIGN1cmxfc2xpc3RfZnJlZV9hbGwobV9yZXF1ZXN0SGVhZGVycyk7
CisgICAgICAgIG1fcmVxdWVzdEhlYWRlcnMgPSBudWxscHRyOworICAgIH0KK30KKwordm9pZCBD
dXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBTdHJpbmcgaGVhZGVyKG5hbWUpOworCisgICAgaWYgKHZh
bHVlLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBJbnNlcnQgdGhlIDsgdG8gdGVsbCBjdXJsIHRo
YXQgdGhpcyBoZWFkZXIgaGFzIGFuIGVtcHR5IHZhbHVlLgorICAgICAgICBoZWFkZXIuYXBwZW5k
KCI7Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGVhZGVyLmFwcGVuZCgiOiAiKTsKKyAgICAg
ICAgaGVhZGVyLmFwcGVuZCh2YWx1ZSk7CisgICAgfQorCisgICAgYXBwZW5kUmVxdWVzdEhlYWRl
cihoZWFkZXIpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXIoY29u
c3QgU3RyaW5nJiBoZWFkZXIpCit7CisgICAgbV9yZXF1ZXN0SGVhZGVycyA9IGN1cmxfc2xpc3Rf
YXBwZW5kKG1fcmVxdWVzdEhlYWRlcnMsIGhlYWRlci5sYXRpbjEoKS5kYXRhKCkpOworfQorCit2
b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVJlcXVlc3RIZWFkZXJzKCkKK3sKKyAgICBpZiAobV9yZXF1
ZXN0SGVhZGVycykKKyAgICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9I
VFRQSEVBREVSLCBtX3JlcXVlc3RIZWFkZXJzKTsKK30KKwordm9pZCBDdXJsSGFuZGxlOjplbmFi
bGVIdHRwR2V0UmVxdWVzdCgpCit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VS
TE9QVF9IVFRQR0VULCAxTCk7Cit9CisKK3ZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlSHR0cEhlYWRS
ZXF1ZXN0KCkKK3sKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX05PQk9E
WSwgMUwpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUh0dHBQb3N0UmVxdWVzdCgpCit7
CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QT1NULCAxTCk7CisgICAg
Y3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklFTERTSVpFLCAwTCk7Cit9
CisKK3ZvaWQgQ3VybEhhbmRsZTo6c2V0UG9zdEZpZWxkcyhjb25zdCBjaGFyKiBkYXRhLCBsb25n
IHNpemUpCit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QT1NURklF
TERTLCBkYXRhKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BPU1RG
SUVMRFNJWkUsIHNpemUpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OnNldFBvc3RGaWVsZExhcmdl
KGN1cmxfb2ZmX3Qgc2l6ZSkKK3sKKyAgICBpZiAoZXhwZWN0ZWRTaXplT2ZDdXJsT2ZmVCgpICE9
IHNpemVvZihsb25nIGxvbmcpKQorICAgICAgICBzaXplID0gc3RhdGljX2Nhc3Q8aW50PihzaXpl
KTsKKworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEU0la
RV9MQVJHRSwgc2l6ZSk7Cit9CisKK3ZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlSHR0cFB1dFJlcXVl
c3QoKQoreworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfVVBMT0FELCAx
TCk7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9JTkZJTEVTSVpFLCAw
TCk7Cit9CisKK3ZvaWQgQ3VybEhhbmRsZTo6c2V0SW5GaWxlU2l6ZUxhcmdlKGN1cmxfb2ZmX3Qg
c2l6ZSkKK3sKKyAgICBpZiAoZXhwZWN0ZWRTaXplT2ZDdXJsT2ZmVCgpICE9IHNpemVvZihsb25n
IGxvbmcpKQorICAgICAgICBzaXplID0gc3RhdGljX2Nhc3Q8aW50PihzaXplKTsKKworICAgIGN1
cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfSU5GSUxFU0laRV9MQVJHRSwgc2l6ZSk7
Cit9CisKK3ZvaWQgQ3VybEhhbmRsZTo6c2V0SHR0cEN1c3RvbVJlcXVlc3QoY29uc3QgU3RyaW5n
JiBtZXRob2QpCit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9DVVNU
T01SRVFVRVNULCBtZXRob2QuYXNjaWkoKS5kYXRhKCkpOworfQorCit2b2lkIEN1cmxIYW5kbGU6
OmVuYWJsZUFjY2VwdEVuY29kaW5nKCkKK3sKKyAgICAvLyBlbmFibGUgYWxsIHN1cHBvcnRlZCBi
dWlsdC1pbiBjb21wcmVzc2lvbnMgKGd6aXAgYW5kIGRlZmxhdGUpIHRocm91Z2ggQWNjZXB0LUVu
Y29kaW5nOgorICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfRU5DT0RJTkcs
ICIiKTsKK30KKwordm9pZCBDdXJsSGFuZGxlOjplbmFibGVBbGxvd2VkUHJvdG9jb2xzKCkKK3sK
KyAgICBzdGF0aWMgY29uc3QgbG9uZyBhbGxvd2VkUHJvdG9jb2xzID0gQ1VSTFBST1RPX0ZJTEUg
fCBDVVJMUFJPVE9fRlRQIHwgQ1VSTFBST1RPX0ZUUFMgfCBDVVJMUFJPVE9fSFRUUCB8IENVUkxQ
Uk9UT19IVFRQUzsKKworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfUFJP
VE9DT0xTLCBhbGxvd2VkUHJvdG9jb2xzKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxl
LCBDVVJMT1BUX1JFRElSX1BST1RPQ09MUywgYWxsb3dlZFByb3RvY29scyk7Cit9CisKK3ZvaWQg
Q3VybEhhbmRsZTo6ZW5hYmxlRm9sbG93TG9jYXRpb24oKQoreworICAgIHN0YXRpYyBjb25zdCBs
b25nIG1heE51bWJlck9mUmVkaXJlY3RDb3VudCA9IDEwOworCisgICAgY3VybF9lYXN5X3NldG9w
dChtX2hhbmRsZSwgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgMUwpOworICAgIGN1cmxfZWFzeV9z
ZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfTUFYUkVESVJTLCBtYXhOdW1iZXJPZlJlZGlyZWN0Q291
bnQpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUF1dG9SZWZlcmVyKCkKK3sKKyAgICBj
dXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0FVVE9SRUZFUkVSLCAxTCk7Cit9CisK
K3ZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlSHR0cEF1dGhlbnRpY2F0aW9uKGxvbmcgb3B0aW9uKQor
eworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfSFRUUEFVVEgsIG9wdGlv
bik7Cit9CisKK3ZvaWQgQ3VybEhhbmRsZTo6c2V0SHR0cEF1dGhVc2VyUGFzcyhjb25zdCBTdHJp
bmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpCit7CisgICAgU3RyaW5nIHVzZXJwYXNz
ID0gZW1wdHlTdHJpbmcoKTsKKworICAgIGlmICghdXNlci5pc0VtcHR5KCkgfHwgIXBhc3N3b3Jk
LmlzRW1wdHkoKSkKKyAgICAgICAgdXNlcnBhc3MgPSB1c2VyICsgIjoiICsgcGFzc3dvcmQ7CisK
KyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNz
LnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUNBSW5mb0lmRXhp
c3RzKCkKK3sKKyAgICBjb25zdCBjaGFyKiBjZXJ0UGF0aCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0
b24oKS5nZXRDZXJ0aWZpY2F0ZVBhdGgoKTsKKyAgICBpZiAoY2VydFBhdGgpCisgICAgICAgIGN1
cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBjZXJ0UGF0aCk7Cit9CisK
K3ZvaWQgQ3VybEhhbmRsZTo6c2V0U3NsVmVyaWZ5UGVlcihWZXJpZnlQZWVyIHZlcmlmeVBlZXIp
Cit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVF
Uiwgc3RhdGljX2Nhc3Q8bG9uZz4odmVyaWZ5UGVlcikpOworfQorCit2b2lkIEN1cmxIYW5kbGU6
OnNldFNzbFZlcmlmeUhvc3QoVmVyaWZ5SG9zdCB2ZXJpZnlIb3N0KQoreworICAgIGN1cmxfZWFz
eV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIHN0YXRpY19jYXN0PGxv
bmc+KHZlcmlmeUhvc3QpKTsKK30KKwordm9pZCBDdXJsSGFuZGxlOjpzZXRTc2xDZXJ0KGNvbnN0
IGNoYXIqIGNlcnQpCit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9T
U0xDRVJULCBjZXJ0KTsKK30KKwordm9pZCBDdXJsSGFuZGxlOjpzZXRTc2xDZXJ0VHlwZShjb25z
dCBjaGFyKiB0eXBlKQoreworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRf
U1NMQ0VSVFRZUEUsIHR5cGUpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OnNldFNzbEtleVBhc3N3
b3JkKGNvbnN0IGNoYXIqIHBhc3N3b3JkKQoreworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5k
bGUsIENVUkxPUFRfS0VZUEFTU1dELCBwYXNzd29yZCk7Cit9CisKK3ZvaWQgQ3VybEhhbmRsZTo6
ZW5hYmxlQ29va2llSmFySWZFeGlzdHMoKQoreworICAgIGNvbnN0IGNoYXIqIGNvb2tpZUphciA9
IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRDb29raWVKYXJGaWxlTmFtZSgpOworICAgIGlm
IChjb29raWVKYXIpCisgICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRf
Q09PS0lFSkFSLCBjb29raWVKYXIpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OnNldENvb2tpZUxp
c3QoY29uc3QgY2hhciogY29va2llTGlzdCkKK3sKKyAgICBpZiAoIWNvb2tpZUxpc3QpCisgICAg
ICAgIHJldHVybjsKKworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfQ09P
S0lFTElTVCwgY29va2llTGlzdCk7Cit9CisKK3N0cnVjdCBjdXJsX3NsaXN0KiBDdXJsSGFuZGxl
OjpnZXRDb29raWVMaXN0KCkKK3sKKyAgICBjbGVhckNvb2tpZUxpc3QoKTsKKworICAgIGN1cmxf
ZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJMSU5GT19DT09LSUVMSVNULCAmbV9jb29raWVMaXN0
KTsKKworICAgIHJldHVybiBtX2Nvb2tpZUxpc3Q7Cit9CisKK3ZvaWQgQ3VybEhhbmRsZTo6Y2xl
YXJDb29raWVMaXN0KCkKK3sKKyAgICBpZiAoIW1fY29va2llTGlzdCkKKyAgICAgICAgY3VybF9z
bGlzdF9mcmVlX2FsbChtX2Nvb2tpZUxpc3QpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OmVuYWJs
ZVByb3h5SWZFeGlzdHMoKQoreworICAgIGF1dG8mIHByb3h5ID0gQ3VybENvbnRleHQ6OnNpbmds
ZXRvbigpLnByb3h5SW5mbygpOworCisgICAgaWYgKHByb3h5LnR5cGUgIT0gQ3VybFByb3h5VHlw
ZTo6SW52YWxpZCkgeworICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BU
X1BST1hZLCBwcm94eS51cmwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWVRZUEUsIHByb3h5LnR5cGUpOworICAgIH0KK30K
Kwordm9pZCBDdXJsSGFuZGxlOjplbmFibGVUaW1lb3V0KCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
bG9uZyBkbnNDYWNoZVRpbWVvdXQgPSA1ICogNjA7IC8vIFtzZWMuXQorCisgICAgY3VybF9lYXN5
X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9ETlNfQ0FDSEVfVElNRU9VVCwgZG5zQ2FjaGVUaW1l
b3V0KTsKK30KKwordm9pZCBDdXJsSGFuZGxlOjpzZXRIZWFkZXJDYWxsYmFja0Z1bmN0aW9uKGN1
cmxfd3JpdGVfY2FsbGJhY2sgY2FsbGJhY2tGdW5jLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBj
dXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBjYWxsYmFj
a0Z1bmMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfSEVBREVSREFU
QSwgdXNlckRhdGEpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OnNldFdyaXRlQ2FsbGJhY2tGdW5j
dGlvbihjdXJsX3dyaXRlX2NhbGxiYWNrIGNhbGxiYWNrRnVuYywgdm9pZCogdXNlckRhdGEpCit7
CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBj
YWxsYmFja0Z1bmMpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfV1JJ
VEVEQVRBLCB1c2VyRGF0YSk7Cit9CisKK3ZvaWQgQ3VybEhhbmRsZTo6c2V0UmVhZENhbGxiYWNr
RnVuY3Rpb24oY3VybF9yZWFkX2NhbGxiYWNrIGNhbGxiYWNrRnVuYywgdm9pZCogdXNlckRhdGEp
Cit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9SRUFERlVOQ1RJT04s
IGNhbGxiYWNrRnVuYyk7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9S
RUFEREFUQSwgdXNlckRhdGEpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OnNldFNzbEN0eENhbGxi
YWNrRnVuY3Rpb24oY3VybF9zc2xfY3R4X2NhbGxiYWNrIGNhbGxiYWNrRnVuYywgdm9pZCogdXNl
ckRhdGEpCit7CisgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9TU0xfQ1RY
X0RBVEEsIHVzZXJEYXRhKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BU
X1NTTF9DVFhfRlVOQ1RJT04sIGNhbGxiYWNrRnVuYyk7Cit9CisKK1VSTCBDdXJsSGFuZGxlOjpn
ZXRFZmZlY3RpdmVVUkwoKQoreworICAgIENVUkxjb2RlIGVyckNkID0gQ1VSTEVfRkFJTEVEX0lO
SVQ7CisgICAgY2hhciogdXJsID0gbnVsbHB0cjsKKworICAgIGlmIChtX2hhbmRsZSkKKyAgICAg
ICAgZXJyQ2QgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhtX2hhbmRsZSwgQ1VSTElORk9fRUZGRUNUSVZF
X1VSTCwgJnVybCk7CisKKyAgICBpZiAoKGVyckNkID09IENVUkxFX09LKSAmJiB1cmwpCisgICAg
ICAgIHJldHVybiBVUkwoVVJMKCksIHVybCk7CisKKyAgICByZXR1cm4gVVJMKCk7Cit9CisKK0NV
Ukxjb2RlIEN1cmxIYW5kbGU6OmdldFByaW1hcnlQb3J0KGxvbmcmIHBvcnQpCit7CisgICAgQ1VS
TGNvZGUgZXJyQ2QgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICBwb3J0ID0gMDsKKworICAgIGlm
IChtX2hhbmRsZSkKKyAgICAgICAgZXJyQ2QgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhtX2hhbmRsZSwg
Q1VSTElORk9fUFJJTUFSWV9QT1JULCAmcG9ydCk7CisKKyAgICByZXR1cm4gZXJyQ2Q7Cit9CisK
K0NVUkxjb2RlIEN1cmxIYW5kbGU6OmdldFJlc3BvbnNlQ29kZShsb25nJiByZXNwb25zZUNvZGUp
Cit7CisgICAgQ1VSTGNvZGUgZXJyQ2QgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICByZXNwb25z
ZUNvZGUgPSAwTDsKKworICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgZXJyQ2QgPSBjdXJsX2Vh
c3lfZ2V0aW5mbyhtX2hhbmRsZSwgQ1VSTElORk9fUkVTUE9OU0VfQ09ERSwgJnJlc3BvbnNlQ29k
ZSk7CisKKyAgICByZXR1cm4gZXJyQ2Q7Cit9CisKK0NVUkxjb2RlIEN1cmxIYW5kbGU6OmdldENv
bnRlbnRMZW5naHREb3dubG9hZChsb25nIGxvbmcmIGNvbnRlbnRMZW5ndGgpCit7CisgICAgQ1VS
TGNvZGUgZXJyQ2QgPSBDVVJMRV9GQUlMRURfSU5JVDsKKyAgICBjb250ZW50TGVuZ3RoID0gMDsK
KworICAgIGlmIChtX2hhbmRsZSkgeworICAgICAgICBkb3VibGUgdG1wQ29udGVudExlbmd0aCA9
IDA7CisKKyAgICAgICAgZXJyQ2QgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhtX2hhbmRsZSwgQ1VSTElO
Rk9fQ09OVEVOVF9MRU5HVEhfRE9XTkxPQUQsICZ0bXBDb250ZW50TGVuZ3RoKTsKKyAgICAgICAg
aWYgKGVyckNkID09IENVUkxFX09LKQorICAgICAgICAgICAgY29udGVudExlbmd0aCA9IHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4odG1wQ29udGVudExlbmd0aCk7CisgICAgfQorCisgICAgcmV0dXJu
IGVyckNkOworfQorCitDVVJMY29kZSBDdXJsSGFuZGxlOjpnZXRIdHRwQXV0aEF2YWlsKGxvbmcm
IGh0dHBBdXRoQXZhaWwpCit7CisgICAgQ1VSTGNvZGUgZXJyQ2QgPSBDVVJMRV9GQUlMRURfSU5J
VDsKKworICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgZXJyQ2QgPSBjdXJsX2Vhc3lfZ2V0aW5m
byhtX2hhbmRsZSwgQ1VSTElORk9fSFRUUEFVVEhfQVZBSUwsICZodHRwQXV0aEF2YWlsKTsKKwor
ICAgIHJldHVybiBlcnJDZDsKK30KKworQ1VSTGNvZGUgQ3VybEhhbmRsZTo6Z2V0VGltZXMoZG91
YmxlJiBuYW1lbG9va3VwLCBkb3VibGUmIGNvbm5lY3QsIGRvdWJsZSYgYXBwY29ubmVjdCwgZG91
YmxlJiBwcmV0cmFuc2ZlcikKK3sKKyAgICBDVVJMY29kZSBlcnJDZCA9IENVUkxFX0ZBSUxFRF9J
TklUOworCisgICAgaWYgKCFtX2hhbmRsZSkKKyAgICAgICAgcmV0dXJuIGVyckNkOworCisgICAg
ZXJyQ2QgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhtX2hhbmRsZSwgQ1VSTElORk9fTkFNRUxPT0tVUF9U
SU1FLCAmbmFtZWxvb2t1cCk7CisgICAgaWYgKGVyckNkICE9IENVUkxFX09LKQorICAgICAgICBy
ZXR1cm4gZXJyQ2Q7CisKKyAgICBlcnJDZCA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBD
VVJMSU5GT19DT05ORUNUX1RJTUUsICZjb25uZWN0KTsKKyAgICBpZiAoZXJyQ2QgIT0gQ1VSTEVf
T0spCisgICAgICAgIHJldHVybiBlcnJDZDsKKworICAgIGVyckNkID0gY3VybF9lYXN5X2dldGlu
Zm8obV9oYW5kbGUsIENVUkxJTkZPX0FQUENPTk5FQ1RfVElNRSwgJmFwcGNvbm5lY3QpOworICAg
IGlmIChlcnJDZCAhPSBDVVJMRV9PSykKKyAgICAgICAgcmV0dXJuIGVyckNkOworCisgICAgZXJy
Q2QgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhtX2hhbmRsZSwgQ1VSTElORk9fUFJFVFJBTlNGRVJfVElN
RSwgJnByZXRyYW5zZmVyKTsKKyAgICBpZiAoZXJyQ2QgIT0gQ1VSTEVfT0spCisgICAgICAgIHJl
dHVybiBlcnJDZDsKKworICAgIHJldHVybiBlcnJDZDsKK30KKworbG9uZyBsb25nIEN1cmxIYW5k
bGU6Om1heEN1cmxPZmZUKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBsb25nIG1heEN1cmxP
ZmZUID0gKDFMTCA8PCAoZXhwZWN0ZWRTaXplT2ZDdXJsT2ZmVCgpICogOCAtIDEpKSAtIDE7CisK
KyAgICByZXR1cm4gbWF4Q3VybE9mZlQ7Cit9CisKK2ludCBDdXJsSGFuZGxlOjpleHBlY3RlZFNp
emVPZkN1cmxPZmZUKCkKK3sKKyAgICAvLyBUaGUgc2l6ZSBvZiBhIGN1cmxfb2ZmX3QgY291bGQg
YmUgZGlmZmVyZW50IGluIFdlYktpdCBhbmQgaW4gY1VSTCBkZXBlbmRpbmcgb24KKyAgICAvLyBj
b21waWxhdGlvbiBmbGFncyBvZiBib3RoLgorICAgIHN0YXRpYyBpbnQgZXhwZWN0ZWRTaXplT2ZD
dXJsT2ZmVCA9IDA7CisgICAgaWYgKCFleHBlY3RlZFNpemVPZkN1cmxPZmZUKSB7CisgICAgICAg
IGN1cmxfdmVyc2lvbl9pbmZvX2RhdGEqIGluZm9EYXRhID0gY3VybF92ZXJzaW9uX2luZm8oQ1VS
TFZFUlNJT05fTk9XKTsKKyAgICAgICAgaWYgKGluZm9EYXRhLT5mZWF0dXJlcyAmIENVUkxfVkVS
U0lPTl9MQVJHRUZJTEUpCisgICAgICAgICAgICBleHBlY3RlZFNpemVPZkN1cmxPZmZUID0gc2l6
ZW9mKGxvbmcgbG9uZyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV4cGVjdGVkU2l6ZU9m
Q3VybE9mZlQgPSBzaXplb2YoaW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gZXhwZWN0ZWRTaXpl
T2ZDdXJsT2ZmVDsKK30KKworI2lmbmRlZiBOREVCVUcKKwordm9pZCBDdXJsSGFuZGxlOjplbmFi
bGVWZXJib3NlSWZVc2VkKCkKK3sKKyAgICBpZiAoQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmlz
VmVyYm9zZSgpKQorICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1ZF
UkJPU0UsIDEpOworfQorCit2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVN0ZEVycklmVXNlZCgpCit7
CisgICAgaWYgKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRMb2dGaWxlKCkpCisgICAgICAg
IGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfVkVSQk9TRSwgMSk7Cit9CisKKyNl
bmRpZgorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybENvbnRleHQuaAppbmRleCAxMjk5MTNjZWJmNS4uY2ExOGI5OGQyZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4
dC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiVVJMLmgiCiAKICNpbmNsdWRlIDx3dGYv
TG9jay5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNTAsNyArNTEs
NDQgQEAgZW51bSBjbGFzcyBDdXJsUHJveHlUeXBlIHsKICAgICBTb2NrczVIb3N0bmFtZSA9IENV
UkxQUk9YWV9TT0NLUzVfSE9TVE5BTUUKIH07CiAKLWNsYXNzIEN1cmxDb250ZXh0IHsKKy8vIEN1
cmxHbG9iYWwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8v
IHRvIG1ha2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIGxpYmN1cmwgaGFwcGVuIGJlZm9yZSBvdGhl
ciBpbml0aWFsaXphdGlvbiBvZiBDdXJsQ29udGV4dAorCitjbGFzcyBDdXJsR2xvYmFsIHsKK3By
b3RlY3RlZDoKKyAgICBDdXJsR2xvYmFsKCkKKyAgICB7CisgICAgICAgIGN1cmxfZ2xvYmFsX2lu
aXQoQ1VSTF9HTE9CQUxfQUxMKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+Q3VybEdsb2Jh
bCgpCisgICAgeworICAgICAgICBjdXJsX2dsb2JhbF9jbGVhbnVwKCk7CisgICAgfQorfTsKKwor
Ly8gQ3VybFNoYXJlSGFuZGxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK2NsYXNzIEN1cmxTaGFyZUhhbmRsZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ3VybFNoYXJlSGFuZGxlKTsKKworcHVibGljOgorICAgIEN1cmxTaGFyZUhhbmRsZSgpOwor
ICAgIH5DdXJsU2hhcmVIYW5kbGUoKTsKKworICAgIENVUkxTSCogaGFuZGxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFyZUhhbmRsZTsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGxvY2tD
YWxsYmFjayhDVVJMKiwgY3VybF9sb2NrX2RhdGEsIGN1cmxfbG9ja19hY2Nlc3MsIHZvaWQqKTsK
KyAgICBzdGF0aWMgdm9pZCB1bmxvY2tDYWxsYmFjayhDVVJMKiwgY3VybF9sb2NrX2RhdGEsIHZv
aWQqKTsKKyAgICBzdGF0aWMgTG9jayogbXV0ZXhGb3IoY3VybF9sb2NrX2RhdGEpOworCisgICAg
Q1VSTFNIKiBtX3NoYXJlSGFuZGxlIHsgbnVsbHB0ciB9OworfTsKKworLy8gQ3VybENvbnRleHQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQ3Vy
bENvbnRleHQgOiBwdWJsaWMgQ3VybEdsb2JhbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q3VybENvbnRleHQpOwogCiBwdWJsaWM6CkBAIC03MCwxMSArMTA4LDkgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc2hhcmVkOwogICAgIH0KIAotICAgIH5DdXJsQ29udGV4dCgpOworICAgIHZp
cnR1YWwgfkN1cmxDb250ZXh0KCk7CiAKLSAgICBDVVJMU0gqIGN1cmxTaGFyZUhhbmRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY3VybFNoYXJlSGFuZGxlOyB9Ci0KLSAgICBDVVJMTSogY3JlYXRlTXVs
dGlIYW5kbGUoKTsKKyAgICBjb25zdCBDdXJsU2hhcmVIYW5kbGUmIHNoYXJlSGFuZGxlKCkgeyBy
ZXR1cm4gbV9zaGFyZUhhbmRsZTsgfQogCiAgICAgLy8gQ29va2llCiAgICAgY29uc3QgY2hhciog
Z2V0Q29va2llSmFyRmlsZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2Nvb2tpZUphckZpbGVOYW1l
LmRhdGEoKTsgfQpAQCAtODksMzEgKzEyNSwyMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQcm94
eUluZm8oY29uc3QgUHJveHlJbmZvJiBpbmZvKSB7IG1fcHJveHkgPSBpbmZvOyAgfQogICAgIHZv
aWQgc2V0UHJveHlJbmZvKGNvbnN0IFN0cmluZyYgaG9zdCA9IGVtcHR5U3RyaW5nKCksIHVuc2ln
bmVkIGxvbmcgcG9ydCA9IDAsIEN1cmxQcm94eVR5cGUgPSBDdXJsUHJveHlUeXBlOjpIVFRQLCBj
b25zdCBTdHJpbmcmIHVzZXJuYW1lID0gZW1wdHlTdHJpbmcoKSwgY29uc3QgU3RyaW5nJiBwYXNz
d29yZCA9IGVtcHR5U3RyaW5nKCkpOwogCi0gICAgLy8gVXRpbGl0aWVzCi0gICAgVVJMIGdldEVm
ZmVjdGl2ZVVSTChDVVJMKiBoYW5kbGUpOwotCiAjaWZuZGVmIE5ERUJVRwogICAgIEZJTEUqIGdl
dExvZ0ZpbGUoKSBjb25zdCB7IHJldHVybiBtX2xvZ0ZpbGU7IH0KICAgICBib29sIGlzVmVyYm9z
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVyYm9zZTsgfQogI2VuZGlmCiAKIHByaXZhdGU6Ci0KLSAg
ICBDVVJMU0gqIG1fY3VybFNoYXJlSGFuZGxlIHsgbnVsbHB0ciB9OwotCisgICAgUHJveHlJbmZv
IG1fcHJveHk7CiAgICAgQ1N0cmluZyBtX2Nvb2tpZUphckZpbGVOYW1lOwotCiAgICAgQ1N0cmlu
ZyBtX2NlcnRpZmljYXRlUGF0aDsKKyAgICBDdXJsU2hhcmVIYW5kbGUgbV9zaGFyZUhhbmRsZTsK
ICAgICBib29sIG1faWdub3JlU1NMRXJyb3JzIHsgZmFsc2UgfTsKIAotICAgIFByb3h5SW5mbyBt
X3Byb3h5OwotCiAgICAgQ3VybENvbnRleHQoKTsKICAgICB2b2lkIGluaXRDb29raWVTZXNzaW9u
KCk7CiAKLSAgICBzdGF0aWMgdm9pZCBsb2NrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSwgY3VybF9s
b2NrX2FjY2Vzcywgdm9pZCopOwotICAgIHN0YXRpYyB2b2lkIHVubG9jayhDVVJMKiwgY3VybF9s
b2NrX2RhdGEsIHZvaWQqKTsKLSAgICBzdGF0aWMgTG9jayogbXV0ZXhGb3IoY3VybF9sb2NrX2Rh
dGEpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIEZJTEUqIG1fbG9nRmlsZSB7IG51bGxwdHIgfTsK
QEAgLTEyMSw0ICsxNDcsMTI5IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKy8vIEN1cmxNdWx0
aUhhbmRsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitj
bGFzcyBDdXJsTXVsdGlIYW5kbGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxNdWx0
aUhhbmRsZSk7CisKK3B1YmxpYzoKKyAgICBDdXJsTXVsdGlIYW5kbGUoKTsKKyAgICB+Q3VybE11
bHRpSGFuZGxlKCk7CisKKyAgICBDVVJMTWNvZGUgYWRkSGFuZGxlKENVUkwqKTsKKyAgICBDVVJM
TWNvZGUgcmVtb3ZlSGFuZGxlKENVUkwqKTsKKworICAgIENVUkxNY29kZSBnZXRGZFNldChmZF9z
ZXQmLCBmZF9zZXQmLCBmZF9zZXQmLCBpbnQmKTsKKyAgICBDVVJMTWNvZGUgcGVyZm9ybShpbnQm
KTsKKyAgICBDVVJMTXNnKiByZWFkSW5mbyhpbnQmKTsKKworcHJpdmF0ZToKKyAgICBDVVJMTSog
bV9tdWx0aUhhbmRsZSB7IG51bGxwdHIgfTsKK307CisKKworCisvLyBDdXJsSGFuZGxlIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworY2xhc3MgQ3Vy
bEhhbmRsZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybEhhbmRsZSk7CisKK3B1Ymxp
YzoKKyAgICBlbnVtIFZlcmlmeVBlZXIgeworICAgICAgICBWZXJpZnlQZWVyRGlzYWJsZSA9IDBM
LAorICAgICAgICBWZXJpZnlQZWVyRW5hYmxlID0gMUwKKyAgICB9OworCisgICAgZW51bSBWZXJp
ZnlIb3N0IHsKKyAgICAgICAgVmVyaWZ5SG9zdExvb3NlTmFtZUNoZWNrID0gMCwKKyAgICAgICAg
VmVyaWZ5SG9zdFN0cmljdE5hbWVDaGVjayA9IDIKKyAgICB9OworCisgICAgQ3VybEhhbmRsZSgp
OworICAgIH5DdXJsSGFuZGxlKCk7CisKKyAgICBDVVJMKiBoYW5kbGUoKSBjb25zdCB7IHJldHVy
biBtX2hhbmRsZTsgfQorCisgICAgQ1VSTGNvZGUgcGVyZm9ybSgpOworICAgIENVUkxjb2RlIHBh
dXNlKGludCk7CisKKyAgICB2b2lkIGVuYWJsZVNoYXJlSGFuZGxlKCk7CisgICAgdm9pZCBzZXRQ
cml2YXRlRGF0YSh2b2lkKiB1c2VyRGF0YSk7CisKKyAgICB2b2lkIHNldFVybChjb25zdCBTdHJp
bmcmKTsKKyAgICBjb25zdCBjaGFyKiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQorCisg
ICAgdm9pZCBjbGVhclJlcXVlc3RIZWFkZXJzKCk7CisgICAgdm9pZCBhcHBlbmRSZXF1ZXN0SGVh
ZGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgYXBwZW5kUmVxdWVz
dEhlYWRlcihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIGVuYWJsZVJlcXVlc3RIZWFkZXJzKCk7
CisKKyAgICB2b2lkIGVuYWJsZUh0dHBHZXRSZXF1ZXN0KCk7CisgICAgdm9pZCBlbmFibGVIdHRw
SGVhZFJlcXVlc3QoKTsKKyAgICB2b2lkIGVuYWJsZUh0dHBQb3N0UmVxdWVzdCgpOworICAgIHZv
aWQgc2V0UG9zdEZpZWxkcyhjb25zdCBjaGFyKiwgbG9uZyk7CisgICAgdm9pZCBzZXRQb3N0Rmll
bGRMYXJnZShjdXJsX29mZl90KTsKKyAgICB2b2lkIGVuYWJsZUh0dHBQdXRSZXF1ZXN0KCk7Cisg
ICAgdm9pZCBzZXRJbkZpbGVTaXplTGFyZ2UoY3VybF9vZmZfdCk7CisgICAgdm9pZCBzZXRIdHRw
Q3VzdG9tUmVxdWVzdChjb25zdCBTdHJpbmcmKTsKKworICAgIHZvaWQgZW5hYmxlQWNjZXB0RW5j
b2RpbmcoKTsKKyAgICB2b2lkIGVuYWJsZUFsbG93ZWRQcm90b2NvbHMoKTsKKworICAgIHZvaWQg
ZW5hYmxlRm9sbG93TG9jYXRpb24oKTsKKyAgICB2b2lkIGVuYWJsZUF1dG9SZWZlcmVyKCk7CisK
KyAgICB2b2lkIGVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihsb25nKTsKKyAgICB2b2lkIHNldEh0
dHBBdXRoVXNlclBhc3MoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisKKyAgICB2b2lk
IGVuYWJsZUNBSW5mb0lmRXhpc3RzKCk7CisgICAgdm9pZCBzZXRTc2xWZXJpZnlQZWVyKFZlcmlm
eVBlZXIpOworICAgIHZvaWQgc2V0U3NsVmVyaWZ5SG9zdChWZXJpZnlIb3N0KTsKKyAgICB2b2lk
IHNldFNzbENlcnQoY29uc3QgY2hhciopOworICAgIHZvaWQgc2V0U3NsQ2VydFR5cGUoY29uc3Qg
Y2hhciopOworICAgIHZvaWQgc2V0U3NsS2V5UGFzc3dvcmQoY29uc3QgY2hhciopOworCisgICAg
dm9pZCBlbmFibGVDb29raWVKYXJJZkV4aXN0cygpOworICAgIHZvaWQgc2V0Q29va2llTGlzdChj
b25zdCBjaGFyKik7CisgICAgc3RydWN0IGN1cmxfc2xpc3QqIGdldENvb2tpZUxpc3QoKTsKKwor
ICAgIHZvaWQgZW5hYmxlUHJveHlJZkV4aXN0cygpOworCisgICAgdm9pZCBlbmFibGVUaW1lb3V0
KCk7CisKKyAgICAvLyBDYWxsYmFjayBmdW5jdGlvbgorICAgIHZvaWQgc2V0SGVhZGVyQ2FsbGJh
Y2tGdW5jdGlvbihjdXJsX3dyaXRlX2NhbGxiYWNrLCB2b2lkKik7CisgICAgdm9pZCBzZXRXcml0
ZUNhbGxiYWNrRnVuY3Rpb24oY3VybF93cml0ZV9jYWxsYmFjaywgdm9pZCopOworICAgIHZvaWQg
c2V0UmVhZENhbGxiYWNrRnVuY3Rpb24oY3VybF9yZWFkX2NhbGxiYWNrLCB2b2lkKik7CisgICAg
dm9pZCBzZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKGN1cmxfc3NsX2N0eF9jYWxsYmFjaywgdm9p
ZCopOworCisgICAgLy8gU3RhdHVzCisgICAgVVJMIGdldEVmZmVjdGl2ZVVSTCgpOworICAgIENV
Ukxjb2RlIGdldFByaW1hcnlQb3J0KGxvbmcmKTsKKyAgICBDVVJMY29kZSBnZXRSZXNwb25zZUNv
ZGUobG9uZyYpOworICAgIENVUkxjb2RlIGdldENvbnRlbnRMZW5naHREb3dubG9hZChsb25nIGxv
bmcmKTsKKyAgICBDVVJMY29kZSBnZXRIdHRwQXV0aEF2YWlsKGxvbmcmKTsKKyAgICBDVVJMY29k
ZSBnZXRUaW1lcyhkb3VibGUmLCBkb3VibGUmLCBkb3VibGUmLCBkb3VibGUmKTsKKworICAgIHN0
YXRpYyBsb25nIGxvbmcgbWF4Q3VybE9mZlQoKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lk
IGVuYWJsZVZlcmJvc2VJZlVzZWQoKTsKKyAgICB2b2lkIGVuYWJsZVN0ZEVycklmVXNlZCgpOwor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBjbGVhclVybCgpOworICAgIHZvaWQgY2xlYXJD
b29raWVMaXN0KCk7CisKKyAgICBzdGF0aWMgaW50IGV4cGVjdGVkU2l6ZU9mQ3VybE9mZlQoKTsK
KworICAgIENVUkwqIG1faGFuZGxlIHsgbnVsbHB0ciB9OworICAgIGNoYXIgbV9lcnJvckJ1ZmZl
cltDVVJMX0VSUk9SX1NJWkVdIHsgfTsKKworICAgIGNoYXIqIG1fdXJsIHsgbnVsbHB0ciB9Owor
ICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBtX3JlcXVlc3RIZWFkZXJzIHsgbnVsbHB0ciB9OworICAg
IHN0cnVjdCBjdXJsX3NsaXN0KiBtX2Nvb2tpZUxpc3QgeyBudWxscHRyIH07Cit9OworCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25s
b2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxv
YWQuY3BwCmluZGV4IGQzMzJjZjU3MjBjLi4wOThkOGM0NGU5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAKQEAgLTEs
NSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2ZSBFbnRl
cnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsMTYg
KzQ4LDYgQEAgQ3VybERvd25sb2FkOjpDdXJsRG93bmxvYWQoKSA9IGRlZmF1bHQ7CiAKIEN1cmxE
b3dubG9hZDo6fkN1cmxEb3dubG9hZCgpCiB7Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcihtX211dGV4KTsKLQotICAgICAgICBpZiAobV91cmwpCi0gICAgICAgICAgICBmYXN0RnJl
ZShtX3VybCk7Ci0KLSAgICAgICAgaWYgKG1fY3VzdG9tSGVhZGVycykKLSAgICAgICAgICAgIGN1
cmxfc2xpc3RfZnJlZV9hbGwobV9jdXN0b21IZWFkZXJzKTsKLSAgICB9Ci0KICAgICBjbG9zZUZp
bGUoKTsKICAgICBtb3ZlRmlsZVRvRGVzdGluYXRpb24oKTsKIH0KQEAgLTY4LDI4ICs1OSwxNSBA
QCB2b2lkIEN1cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxvYWRMaXN0ZW5lciogbGlzdGVuZXIs
IGNvbnN0IFVSTCYgdXJsKQogCiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRleCk7CiAKLSAg
ICBtX2N1cmxIYW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwotCi0gICAgU3RyaW5nIHVybFN0ciA9
IHVybC5zdHJpbmcoKTsKLSAgICBtX3VybCA9IGZhc3RTdHJEdXAodXJsU3RyLmxhdGluMSgpLmRh
dGEoKSk7Ci0KLSAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9VUkws
IG1fdXJsKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9QUklW
QVRFLCB0aGlzKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9X
UklURUZVTkNUSU9OLCB3cml0ZUNhbGxiYWNrKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3Vy
bEhhbmRsZSwgQ1VSTE9QVF9XUklURURBVEEsIHRoaXMpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQo
bV9jdXJsSGFuZGxlLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBoZWFkZXJDYWxsYmFjayk7Ci0g
ICAgY3VybF9lYXN5X3NldG9wdChtX2N1cmxIYW5kbGUsIENVUkxPUFRfV1JJVEVIRUFERVIsIHRo
aXMpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJMT1BUX0ZPTExPV0xP
Q0FUSU9OLCAxKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9N
QVhSRURJUlMsIDEwKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9Q
VF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKKyAgICBtX2N1cmxIYW5kbGUuZW5hYmxlU2hhcmVI
YW5kbGUoKTsKIAotICAgIGNvbnN0IGNoYXIqIGNlcnRQYXRoID0gZ2V0ZW52KCJDVVJMX0NBX0JV
TkRMRV9QQVRIIik7Ci0gICAgaWYgKGNlcnRQYXRoKQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0
KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9DQUlORk8sIGNlcnRQYXRoKTsKLQotICAgIENVUkxTSCog
Y3VybHNoID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmN1cmxTaGFyZUhhbmRsZSgpOwotICAg
IGlmIChjdXJsc2gpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQobV9jdXJsSGFuZGxlLCBDVVJM
T1BUX1NIQVJFLCBjdXJsc2gpOworICAgIG1fY3VybEhhbmRsZS5zZXRVcmwodXJsKTsKKyAgICBt
X2N1cmxIYW5kbGUuc2V0UHJpdmF0ZURhdGEodGhpcyk7CisgICAgbV9jdXJsSGFuZGxlLnNldEhl
YWRlckNhbGxiYWNrRnVuY3Rpb24oaGVhZGVyQ2FsbGJhY2ssIHRoaXMpOworICAgIG1fY3VybEhh
bmRsZS5zZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24od3JpdGVDYWxsYmFjaywgdGhpcyk7CisgICAg
bV9jdXJsSGFuZGxlLmVuYWJsZUZvbGxvd0xvY2F0aW9uKCk7CisgICAgbV9jdXJsSGFuZGxlLmVu
YWJsZUh0dHBBdXRoZW50aWNhdGlvbihDVVJMQVVUSF9BTlkpOworICAgIG1fY3VybEhhbmRsZS5l
bmFibGVDQUluZm9JZkV4aXN0cygpOwogCiAgICAgbV9saXN0ZW5lciA9IGxpc3RlbmVyOwogfQpA
QCAtMTA5LDEyICs4NywxMiBAQCB2b2lkIEN1cmxEb3dubG9hZDo6aW5pdChDdXJsRG93bmxvYWRM
aXN0ZW5lciogbGlzdGVuZXIsIFJlc291cmNlSGFuZGxlKiwgY29uc3QgUgogYm9vbCBDdXJsRG93
bmxvYWQ6OnN0YXJ0KCkKIHsKICAgICByZWYoKTsgLy8gQ3VybEpvYk1hbmFnZXIgd2lsbCBjYWxs
IGRlcmVmIHdoZW4gdGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZC4KLSAgICByZXR1cm4gQ3VybEpv
Yk1hbmFnZXI6OnNpbmdsZXRvbigpLmFkZChtX2N1cmxIYW5kbGUpOworICAgIHJldHVybiBDdXJs
Sm9iTWFuYWdlcjo6c2luZ2xldG9uKCkuYWRkKG1fY3VybEhhbmRsZS5oYW5kbGUoKSk7CiB9CiAK
IGJvb2wgQ3VybERvd25sb2FkOjpjYW5jZWwoKQogewotICAgIHJldHVybiBDdXJsSm9iTWFuYWdl
cjo6c2luZ2xldG9uKCkucmVtb3ZlKG1fY3VybEhhbmRsZSk7CisgICAgcmV0dXJuIEN1cmxKb2JN
YW5hZ2VyOjpzaW5nbGV0b24oKS5yZW1vdmUobV9jdXJsSGFuZGxlLmhhbmRsZSgpKTsKIH0KIAog
U3RyaW5nIEN1cmxEb3dubG9hZDo6Z2V0VGVtcFBhdGgoKSBjb25zdApAQCAtMTI2LDcgKzEwNCw3
IEBAIFN0cmluZyBDdXJsRG93bmxvYWQ6OmdldFRlbXBQYXRoKCkgY29uc3QKIFN0cmluZyBDdXJs
RG93bmxvYWQ6OmdldFVybCgpIGNvbnN0CiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tdXRl
eCk7Ci0gICAgcmV0dXJuIFN0cmluZyhtX3VybCk7CisgICAgcmV0dXJuIFN0cmluZyhtX2N1cmxI
YW5kbGUudXJsKCkpOwogfQogCiBSZXNvdXJjZVJlc3BvbnNlIEN1cmxEb3dubG9hZDo6Z2V0UmVz
cG9uc2UoKSBjb25zdApAQCAtMTY4LDkgKzE0Niw5IEBAIHZvaWQgQ3VybERvd25sb2FkOjphZGRI
ZWFkZXJzKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBMb2NrSG9sZGVy
IGxvY2tlcihtX211dGV4KTsKIAotICAgIGlmIChyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKS5z
aXplKCkgPiAwKSB7Ci0gICAgICAgIHN0cnVjdCBjdXJsX3NsaXN0KiBoZWFkZXJzID0gMDsKKyAg
ICBtX2N1cmxIYW5kbGUuY2xlYXJSZXF1ZXN0SGVhZGVycygpOwogCisgICAgaWYgKHJlcXVlc3Qu
aHR0cEhlYWRlckZpZWxkcygpLnNpemUoKSA+IDApIHsKICAgICAgICAgSFRUUEhlYWRlck1hcCBj
dXN0b21IZWFkZXJzID0gcmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCk7CiAgICAgICAgIEhUVFBI
ZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGN1c3RvbUhlYWRlcnMuZW5kKCk7CiAgICAg
ICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjdXN0b21IZWFkZXJz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtMTgzLDE0ICsxNjEsMTEgQEAgdm9pZCBD
dXJsRG93bmxvYWQ6OmFkZEhlYWRlcnMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQog
ICAgICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQoIjogIik7CiAgICAgICAgICAgICAg
ICAgaGVhZGVyU3RyaW5nLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBDU3RyaW5nIGhlYWRlckxhdGluMSA9IGhlYWRlclN0cmluZy5sYXRpbjEoKTsKLSAgICAgICAg
ICAgIGhlYWRlcnMgPSBjdXJsX3NsaXN0X2FwcGVuZChoZWFkZXJzLCBoZWFkZXJMYXRpbjEuZGF0
YSgpKTsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChoZWFkZXJzKSB7Ci0gICAgICAgICAgICBj
dXJsX2Vhc3lfc2V0b3B0KG1fY3VybEhhbmRsZSwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFkZXJz
KTsKLSAgICAgICAgICAgIG1fY3VzdG9tSGVhZGVycyA9IGhlYWRlcnM7CisgICAgICAgICAgICBt
X2N1cmxIYW5kbGUuYXBwZW5kUmVxdWVzdEhlYWRlcihoZWFkZXJTdHJpbmcpOwogICAgICAgICB9
CisKKyAgICAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZVJlcXVlc3RIZWFkZXJzKCk7CiAgICAgfQog
fQogCkBAIC0yMDEsMTEgKzE3NiwxMCBAQCB2b2lkIEN1cmxEb3dubG9hZDo6ZGlkUmVjZWl2ZUhl
YWRlcihjb25zdCBTdHJpbmcmIGhlYWRlcikKICAgICBpZiAoaGVhZGVyID09ICJcclxuIiB8fCBo
ZWFkZXIgPT0gIlxuIikgewogCiAgICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOwotICAgICAgICBD
VVJMY29kZSBlcnIgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhtX2N1cmxIYW5kbGUsIENVUkxJTkZPX1JF
U1BPTlNFX0NPREUsICZodHRwQ29kZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShlcnIpOworICAg
ICAgICBtX2N1cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKIAogICAgICAgICBp
ZiAoaHR0cENvZGUgPj0gMjAwICYmIGh0dHBDb2RlIDwgMzAwKSB7Ci0gICAgICAgICAgICBVUkwg
dXJsID0gQ3VybENvbnRleHQ6OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChtX2N1cmxIYW5k
bGUpOworICAgICAgICAgICAgVVJMIHVybCA9IG1fY3VybEhhbmRsZS5nZXRFZmZlY3RpdmVVUkwo
KTsKICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHVybCA9IHVybC5pc29sYXRl
ZENvcHkoKSwgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CiAgICAgICAgICAgICAg
ICAgbV9yZXNwb25zZS5zZXRVUkwodXJsKTsKICAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlLnNl
dE1pbWVUeXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUobV9yZXNwb25zZS5odHRwSGVh
ZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkpOwpAQCAtMjcwLDEzICsyNDQs
MTMgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OmRpZEZhaWwoKQogICAgICAgICBtX2xpc3RlbmVyLT5k
aWRGYWlsKCk7CiB9CiAKLXNpemVfdCBDdXJsRG93bmxvYWQ6OndyaXRlQ2FsbGJhY2sodm9pZCog
cHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQorc2l6ZV90IEN1cmxE
b3dubG9hZDo6d3JpdGVDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1l
bWIsIHZvaWQqIGRhdGEpCiB7CiAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IHNpemUgKiBubWVtYjsK
ICAgICBDdXJsRG93bmxvYWQqIGRvd25sb2FkID0gcmVpbnRlcnByZXRfY2FzdDxDdXJsRG93bmxv
YWQqPihkYXRhKTsKIAogICAgIGlmIChkb3dubG9hZCkKLSAgICAgICAgZG93bmxvYWQtPmRpZFJl
Y2VpdmVEYXRhKHB0ciwgdG90YWxTaXplKTsKKyAgICAgICAgZG93bmxvYWQtPmRpZFJlY2VpdmVE
YXRhKHN0YXRpY19jYXN0PHZvaWQqPihwdHIpLCB0b3RhbFNpemUpOwogCiAgICAgcmV0dXJuIHRv
dGFsU2l6ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsRG93bmxvYWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsRG93bmxvYWQuaAppbmRleCBmOTAzMDZjNmYwNS4uNjc2MjY4YTdjYWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmgK
QEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgU29ueSBJbnRlcmFjdGl2
ZSBFbnRlcnRhaW5tZW50IEluYy4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzYsNiArMzcsNyBAQAogI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAjZW5kaWYKIAorI2luY2x1ZGUg
IkN1cmxDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtODksNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmluaXNo
KCk7CiAgICAgdm9pZCBkaWRGYWlsKCk7CiAKLSAgICBzdGF0aWMgc2l6ZV90IHdyaXRlQ2FsbGJh
Y2sodm9pZCogcHRyLCBzaXplX3QsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSk7CisgICAgc3Rh
dGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKGNoYXIqIHB0ciwgc2l6ZV90LCBzaXplX3Qgbm1lbWIs
IHZvaWQqIGRhdGEpOwogICAgIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRy
LCBzaXplX3QsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSk7CiAKICAgICBzdGF0aWMgdm9pZCBk
b3dubG9hZEZpbmlzaGVkQ2FsbGJhY2soQ3VybERvd25sb2FkKik7CkBAIC05Nyw5ICs5OSw4IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgcmVjZWl2ZWREYXRhQ2FsbGJhY2soQ3VybERvd25s
b2FkKiwgaW50IHNpemUpOwogICAgIHN0YXRpYyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFj
ayhDdXJsRG93bmxvYWQqKTsKIAotICAgIENVUkwqIG1fY3VybEhhbmRsZSB7IG51bGxwdHIgfTsK
LSAgICBzdHJ1Y3QgY3VybF9zbGlzdCogbV9jdXN0b21IZWFkZXJzIHsgbnVsbHB0ciB9OwotICAg
IGNoYXIqIG1fdXJsIHsgbnVsbHB0ciB9OworICAgIEN1cmxIYW5kbGUgbV9jdXJsSGFuZGxlOwor
CiAgICAgU3RyaW5nIG1fdGVtcFBhdGg7CiAgICAgU3RyaW5nIG1fZGVzdGluYXRpb247CiAgICAg
V2ViQ29yZTo6UGxhdGZvcm1GaWxlSGFuZGxlIG1fdGVtcEhhbmRsZSB7IGludmFsaWRQbGF0Zm9y
bUZpbGVIYW5kbGUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DdXJsSm9iTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuY3BwCmluZGV4IDNkMDBlZTM3ODU5Li40MmNmOTAwMTc1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxK
b2JNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybEpvYk1hbmFnZXIuY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAjaWYgVVNFKENVUkwpCiAjaW5j
bHVkZSAiQ3VybEpvYk1hbmFnZXIuaCIKIAotI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCi0KICNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IApAQCAtNDAsMTMgKzM4LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ3VybEpvYk1hbmFn
ZXI6OkN1cmxKb2JNYW5hZ2VyKCkKIHsKLSAgICBtX2N1cmxNdWx0aUhhbmRsZSA9IEN1cmxDb250
ZXh0OjpzaW5nbGV0b24oKS5jcmVhdGVNdWx0aUhhbmRsZSgpOworCiB9CiAKIEN1cmxKb2JNYW5h
Z2VyOjp+Q3VybEpvYk1hbmFnZXIoKQogewogICAgIHN0b3BUaHJlYWQoKTsKLSAgICBjdXJsX211
bHRpX2NsZWFudXAobV9jdXJsTXVsdGlIYW5kbGUpOwogfQogCiBib29sIEN1cmxKb2JNYW5hZ2Vy
OjphZGQoQ1VSTCogY3VybEhhbmRsZSkKQEAgLTEzNSw3ICsxMzIsNyBAQCB2b2lkIEN1cmxKb2JN
YW5hZ2VyOjp1cGRhdGVIYW5kbGVMaXN0KCkKIAogYm9vbCBDdXJsSm9iTWFuYWdlcjo6YWRkVG9D
dXJsKENVUkwqIGN1cmxIYW5kbGUpCiB7Ci0gICAgQ1VSTE1jb2RlIHJldHZhbCA9IGN1cmxfbXVs
dGlfYWRkX2hhbmRsZShtX2N1cmxNdWx0aUhhbmRsZSwgY3VybEhhbmRsZSk7CisgICAgQ1VSTE1j
b2RlIHJldHZhbCA9IG1fY3VybE11bHRpSGFuZGxlLmFkZEhhbmRsZShjdXJsSGFuZGxlKTsKICAg
ICBpZiAocmV0dmFsID09IENVUkxNX09LKSB7CiAgICAgICAgIG1fYWN0aXZlSGFuZGxlTGlzdC5h
cHBlbmQoY3VybEhhbmRsZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQ5LDExICsxNDYs
MTAgQEAgYm9vbCBDdXJsSm9iTWFuYWdlcjo6cmVtb3ZlRnJvbUN1cmwoQ1VSTCogY3VybEhhbmRs
ZSkKIAogICAgIGlmIChoYW5kbGVQb3MgPCAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAK
LSAgICBDVVJMTWNvZGUgcmV0dmFsID0gY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKG1fY3VybE11
bHRpSGFuZGxlLCBjdXJsSGFuZGxlKTsKKworICAgIENVUkxNY29kZSByZXR2YWwgPSBtX2N1cmxN
dWx0aUhhbmRsZS5yZW1vdmVIYW5kbGUoY3VybEhhbmRsZSk7CiAgICAgaWYgKHJldHZhbCA9PSBD
VVJMTV9PSykgewogICAgICAgICBtX2FjdGl2ZUhhbmRsZUxpc3QucmVtb3ZlKGhhbmRsZVBvcyk7
Ci0gICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKGN1cmxIYW5kbGUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTczLDcgKzE2OSw2IEBAIHZvaWQg
Q3VybEpvYk1hbmFnZXI6OndvcmtlclRocmVhZCgpCiAgICAgICAgICAgICBmZF9zZXQgZmRyZWFk
OwogICAgICAgICAgICAgZmRfc2V0IGZkd3JpdGU7CiAgICAgICAgICAgICBmZF9zZXQgZmRleGNl
cDsKLQogICAgICAgICAgICAgaW50IG1heGZkID0gMDsKIAogICAgICAgICAgICAgY29uc3QgaW50
IHNlbGVjdFRpbWVvdXRNUyA9IDU7CkBAIC0xODIsMTAgKzE3Nyw4IEBAIHZvaWQgQ3VybEpvYk1h
bmFnZXI6OndvcmtlclRocmVhZCgpCiAgICAgICAgICAgICB0aW1lb3V0LnR2X3NlYyA9IDA7CiAg
ICAgICAgICAgICB0aW1lb3V0LnR2X3VzZWMgPSBzZWxlY3RUaW1lb3V0TVMgKiAxMDAwOyAvLyBz
ZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRzCiAKLSAgICAgICAgICAgIEZEX1pFUk8oJmZkcmVhZCk7
Ci0gICAgICAgICAgICBGRF9aRVJPKCZmZHdyaXRlKTsKLSAgICAgICAgICAgIEZEX1pFUk8oJmZk
ZXhjZXApOwotICAgICAgICAgICAgY3VybF9tdWx0aV9mZHNldChnZXRNdWx0aUhhbmRsZSgpLCAm
ZmRyZWFkLCAmZmR3cml0ZSwgJmZkZXhjZXAsICZtYXhmZCk7CisgICAgICAgICAgICBtX2N1cmxN
dWx0aUhhbmRsZS5nZXRGZFNldChmZHJlYWQsIGZkd3JpdGUsIGZkZXhjZXAsIG1heGZkKTsKKwog
ICAgICAgICAgICAgLy8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBlbXB0eSwgd2lu
c29jayB3aWxsIHJldHVybiAtMQogICAgICAgICAgICAgLy8gYW5kIGJhaWwgb3V0LCBzdG9wcGlu
ZyB0aGUgZmlsZSBkb3dubG9hZC4gU28gbWFrZSBzdXJlIHdlCiAgICAgICAgICAgICAvLyBoYXZl
IHZhbGlkIGZpbGUgZGVzY3JpcHRvcnMgYmVmb3JlIGNhbGxpbmcgc2VsZWN0LgpAQCAtMTkzLDEy
ICsxODYsMTEgQEAgdm9pZCBDdXJsSm9iTWFuYWdlcjo6d29ya2VyVGhyZWFkKCkKICAgICAgICAg
ICAgICAgICByYyA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgJmZkd3JpdGUsICZmZGV4
Y2VwLCAmdGltZW91dCk7CiAgICAgICAgIH0gd2hpbGUgKHJjID09IC0xICYmIGVycm5vID09IEVJ
TlRSKTsKIAotICAgICAgICBpbnQgYWN0aXZlQ291bnQgPSAwOwotICAgICAgICB3aGlsZSAoY3Vy
bF9tdWx0aV9wZXJmb3JtKGdldE11bHRpSGFuZGxlKCksICZhY3RpdmVDb3VudCkgPT0gQ1VSTE1f
Q0FMTF9NVUxUSV9QRVJGT1JNKSB7IH0KKyAgICAgICAgaW50IHJ1bm5pbmdIYW5kbGVzID0gMDsK
KyAgICAgICAgd2hpbGUgKG1fY3VybE11bHRpSGFuZGxlLnBlcmZvcm0ocnVubmluZ0hhbmRsZXMp
ID09IENVUkxNX0NBTExfTVVMVElfUEVSRk9STSkgeyB9CiAKICAgICAgICAgaW50IG1lc3NhZ2Vz
SW5RdWV1ZSA9IDA7Ci0gICAgICAgIENVUkxNc2cqIG1zZyA9IGN1cmxfbXVsdGlfaW5mb19yZWFk
KGdldE11bHRpSGFuZGxlKCksICZtZXNzYWdlc0luUXVldWUpOwotCisgICAgICAgIENVUkxNc2cq
IG1zZyA9IG1fY3VybE11bHRpSGFuZGxlLnJlYWRJbmZvKG1lc3NhZ2VzSW5RdWV1ZSk7CiAgICAg
ICAgIGlmICghbXNnKQogICAgICAgICAgICAgY29udGludWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsSm9iTWFuYWdlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxKb2JNYW5hZ2VyLmgKaW5kZXggODI5
YjQ2ZGFkMWYuLmZjMmYwZjg0MGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybEpvYk1hbmFnZXIuaApAQCAtMjYsNiArMjYsOCBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCisKICNpbmNsdWRlIDx3dGYv
TG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC0zNSw3ICszNyw2IEBACiAjaW5jbHVkZSA8d2luc29jazIuaD4KICNlbmRpZgogCi0j
aW5jbHVkZSA8Y3VybC9jdXJsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzQsOCAr
NzUsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVIYW5kbGVMaXN0KCk7CiAKLSAgICBD
VVJMTSogZ2V0TXVsdGlIYW5kbGUoKSBjb25zdCB7IHJldHVybiBtX2N1cmxNdWx0aUhhbmRsZTsg
fQotCiAgICAgYm9vbCBydW5UaHJlYWQoKSBjb25zdCB7IExvY2tIb2xkZXIgbG9ja2VyKG1fbXV0
ZXgpOyByZXR1cm4gbV9ydW5UaHJlYWQ7IH0KICAgICB2b2lkIHNldFJ1blRocmVhZChib29sIHJ1
blRocmVhZCkgeyBMb2NrSG9sZGVyIGxvY2tlcihtX211dGV4KTsgbV9ydW5UaHJlYWQgPSBydW5U
aHJlYWQ7IH0KIApAQCAtODUsMTMgKzg0LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3b3JrZXJU
aHJlYWQoKTsKIAogICAgIFJlZlB0cjxUaHJlYWQ+IG1fdGhyZWFkOwotICAgIENVUkxNKiBtX2N1
cmxNdWx0aUhhbmRsZSB7IG51bGxwdHIgfTsKICAgICBWZWN0b3I8Q1VSTCo+IG1fcGVuZGluZ0hh
bmRsZUxpc3Q7CiAgICAgVmVjdG9yPENVUkwqPiBtX2FjdGl2ZUhhbmRsZUxpc3Q7CiAgICAgVmVj
dG9yPENVUkwqPiBtX3JlbW92ZWRIYW5kbGVMaXN0OwogICAgIG11dGFibGUgTG9jayBtX211dGV4
OwogICAgIGJvb2wgbV9ydW5UaHJlYWQgeyBmYWxzZSB9OwogCisgICAgQ3VybE11bHRpSGFuZGxl
IG1fY3VybE11bHRpSGFuZGxlOworCiAgICAgZnJpZW5kIGNsYXNzIEN1cmxKb2I7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VI
YW5kbGVDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNv
dXJjZUhhbmRsZUN1cmwuY3BwCmluZGV4IDY3ZDI2NTJlOTBlLi5mM2ZlYjc5Y2UzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
Q3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291
cmNlSGFuZGxlQ3VybC5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDUsIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29w
eXJpZ2h0IChDKSAyMDE3IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNDksOSArNTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5SZXNvdXJjZUhh
bmRsZUludGVybmFsKCkKIHsKLSAgICBmYXN0RnJlZShtX3VybCk7Ci0gICAgaWYgKG1fY3VzdG9t
SGVhZGVycykKLSAgICAgICAgY3VybF9zbGlzdF9mcmVlX2FsbChtX2N1c3RvbUhlYWRlcnMpOwor
CiB9CiAKIFJlc291cmNlSGFuZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQpAQCAtMTA1LDE2ICsxMDQs
MTYgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0Q2xpZW50Q2VydGlmaWNhdGUoY29uc3QgU3Ry
aW5nJiwgQ0ZEYXRhUmVmKQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwbGF0Zm9ybVNldERlZmVy
c0xvYWRpbmcoYm9vbCBkZWZlcnMpCiB7Ci0gICAgaWYgKCFkLT5tX2hhbmRsZSkKKyAgICBpZiAo
IWQtPm1fY3VybEhhbmRsZS5oYW5kbGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGRl
ZmVycykgewotICAgICAgICBDVVJMY29kZSBlcnJvciA9IGN1cmxfZWFzeV9wYXVzZShkLT5tX2hh
bmRsZSwgQ1VSTFBBVVNFX0FMTCk7CisgICAgICAgIENVUkxjb2RlIGVycm9yID0gZC0+bV9jdXJs
SGFuZGxlLnBhdXNlKENVUkxQQVVTRV9BTEwpOwogICAgICAgICAvLyBJZiB3ZSBjb3VsZCBub3Qg
ZGVmZXIgdGhlIGhhbmRsZSwgc28gZG9uJ3QgZG8gaXQuCiAgICAgICAgIGlmIChlcnJvciAhPSBD
VVJMRV9PSykKICAgICAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2UgewotICAgICAgICBDVVJM
Y29kZSBlcnJvciA9IGN1cmxfZWFzeV9wYXVzZShkLT5tX2hhbmRsZSwgQ1VSTFBBVVNFX0NPTlQp
OworICAgICAgICBDVVJMY29kZSBlcnJvciA9IGQtPm1fY3VybEhhbmRsZS5wYXVzZShDVVJMUEFV
U0VfQ09OVCk7CiAgICAgICAgIGlmIChlcnJvciAhPSBDVVJMRV9PSykKICAgICAgICAgICAgIC8v
IFJlc3RhcnRpbmcgdGhlIGhhbmRsZSBoYXMgZmFpbGVkIHNvIGp1c3QgY2FuY2VsIGl0LgogICAg
ICAgICAgICAgY2FuY2VsKCk7CkBAIC0xNTAsOCArMTQ5LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9u
Q2hhbGwKICAgICAgICAgICAgIHVybFRvU3RvcmUgPSBjaGFsbGVuZ2UuZmFpbHVyZVJlc3BvbnNl
KCkudXJsKCk7CiAgICAgICAgIENyZWRlbnRpYWxTdG9yYWdlOjpkZWZhdWx0Q3JlZGVudGlhbFN0
b3JhZ2UoKS5zZXQocGFydGl0aW9uLCBjcmVkZW50aWFsLCBjaGFsbGVuZ2UucHJvdGVjdGlvblNw
YWNlKCksIHVybFRvU3RvcmUpOwogICAgICAgICAKLSAgICAgICAgU3RyaW5nIHVzZXJwYXNzID0g
Y3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3b3JkKCk7Ci0gICAgICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVNFUlBXRCwgdXNlcnBhc3Mu
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgIGQtPm1fY3VybEhhbmRsZS5zZXRIdHRwQXV0aFVzZXJQ
YXNzKGNyZWRlbnRpYWwudXNlcigpLCBjcmVkZW50aWFsLnBhc3N3b3JkKCkpOwogCiAgICAgICAg
IGQtPm1fdXNlciA9IFN0cmluZygpOwogICAgICAgICBkLT5tX3Bhc3MgPSBTdHJpbmcoKTsKQEAg
LTE3NSw4ICsxNzMsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbAogICAgICAgICAgICAgICAg
ICAgICAvLyBTdG9yZSB0aGUgY3JlZGVudGlhbCBiYWNrLCBwb3NzaWJseSBhZGRpbmcgaXQgYXMg
YSBkZWZhdWx0IGZvciB0aGlzIGRpcmVjdG9yeS4KICAgICAgICAgICAgICAgICAgICAgQ3JlZGVu
dGlhbFN0b3JhZ2U6OmRlZmF1bHRDcmVkZW50aWFsU3RvcmFnZSgpLnNldChwYXJ0aXRpb24sIGNy
ZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdlLmZhaWx1cmVS
ZXNwb25zZSgpLnVybCgpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nIHVzZXJwYXNzID0gY3JlZGVudGlhbC51c2VyKCkgKyAiOiIgKyBjcmVkZW50aWFsLnBhc3N3
b3JkKCk7Ci0gICAgICAgICAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VS
TE9QVF9VU0VSUFdELCB1c2VycGFzcy51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAgICAgICAg
IGQtPm1fY3VybEhhbmRsZS5zZXRIdHRwQXV0aFVzZXJQYXNzKGNyZWRlbnRpYWwudXNlcigpLCBj
cmVkZW50aWFsLnBhc3N3b3JkKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMjA3LDkgKzIwNSw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6
OnJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hhbGxl
bmdlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTdHJpbmcgdXNlcnBhc3MgPSBjcmVkZW50aWFs
LnVzZXIoKSArICI6IiArIGNyZWRlbnRpYWwucGFzc3dvcmQoKTsKLSAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0ZjgoKS5kYXRhKCkp
OwotCisgICAgZC0+bV9jdXJsSGFuZGxlLnNldEh0dHBBdXRoVXNlclBhc3MoY3JlZGVudGlhbC51
c2VyKCksIGNyZWRlbnRpYWwucGFzc3dvcmQoKSk7CiAgICAgY2xlYXJBdXRoZW50aWNhdGlvbigp
OwogfQogCkBAIC0yMTgsOSArMjE0LDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6cmVjZWl2ZWRS
ZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2EKICAgICBp
ZiAoY2hhbGxlbmdlICE9IGQtPm1fY3VycmVudFdlYkNoYWxsZW5nZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RyaW5nIHVzZXJwYXNzID0gZW1wdHlTdHJpbmcoKTsKLSAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0ZjgoKS5kYXRh
KCkpOwotCisgICAgZC0+bV9jdXJsSGFuZGxlLnNldEh0dHBBdXRoVXNlclBhc3MoIiIsICIiKTsK
ICAgICBjbGVhckF1dGhlbnRpY2F0aW9uKCk7CiB9CiAKQEAgLTI1MywxMCArMjQ3LDcgQEAgc3Rh
dGljIHZvaWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKFJlc291cmNlSGFuZGxlSW50
ZXJuYWwqIGQpCiAgICAgZG91YmxlIGNvbm5lY3RUaW1lID0gMDsKICAgICBkb3VibGUgYXBwQ29u
bmVjdFRpbWUgPSAwOwogCi0gICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJ
TkZPX05BTUVMT09LVVBfVElNRSwgJmRuc2xvb2t1cFRpbWUpOwotICAgIGN1cmxfZWFzeV9nZXRp
bmZvKGQtPm1faGFuZGxlLCBDVVJMSU5GT19DT05ORUNUX1RJTUUsICZjb25uZWN0VGltZSk7Ci0g
ICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUsIENVUkxJTkZPX0FQUENPTk5FQ1RfVElN
RSwgJmFwcENvbm5lY3RUaW1lKTsKLSAgICBjdXJsX2Vhc3lfZ2V0aW5mbyhkLT5tX2hhbmRsZSwg
Q1VSTElORk9fUFJFVFJBTlNGRVJfVElNRSwgJnByZVRyYW5zZmVyVGltZSk7CisgICAgZC0+bV9j
dXJsSGFuZGxlLmdldFRpbWVzKHByZVRyYW5zZmVyVGltZSwgZG5zbG9va3VwVGltZSwgY29ubmVj
dFRpbWUsIGFwcENvbm5lY3RUaW1lKTsKIAogICAgIGQtPm1fcmVzcG9uc2UuZGVwcmVjYXRlZE5l
dHdvcmtMb2FkTWV0cmljcygpLmRvbWFpbkxvb2t1cFN0YXJ0ID0gU2Vjb25kcygwKTsKICAgICBk
LT5tX3Jlc3BvbnNlLmRlcHJlY2F0ZWROZXR3b3JrTG9hZE1ldHJpY3MoKS5kb21haW5Mb29rdXBF
bmQgPSBTZWNvbmRzKGRuc2xvb2t1cFRpbWUpOwpAQCAtMjcyLDE0ICsyNjMsMTQgQEAgc3RhdGlj
IHZvaWQgY2FsY3VsYXRlV2ViVGltaW5nSW5mb3JtYXRpb25zKFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQpCiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9u
c2UoQ1VSTCogaGFuZGxlLCBSZXNvdXJjZUhhbmRsZSogam9iLCBSZXNvdXJjZUhhbmRsZUludGVy
bmFsKiBkKQorc3RhdGljIHZvaWQgaGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoUmVzb3VyY2VI
YW5kbGUqIGpvYiwgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCkKIHsKICAgICAvLyBzaW5jZSB0
aGUgY29kZSBpbiBoZWFkZXJDYWxsYmFjayB3aWxsIG5vdCBoYXZlIHJ1biBmb3IgbG9jYWwgZmls
ZXMKICAgICAvLyB0aGUgY29kZSB0byBzZXQgdGhlIFVSTCBhbmQgZmlyZSBkaWRSZWNlaXZlUmVz
cG9uc2UgaXMgbmV2ZXIgcnVuLAogICAgIC8vIHdoaWNoIG1lYW5zIHRoZSBSZXNvdXJjZUxvYWRl
cidzIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gdGhlIFVSTC4KICAgICAvLyBSdW4gdGhlIGNv
ZGUgaGVyZSBmb3IgbG9jYWwgZmlsZXMgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuCiAgICAgLy8gVE9E
TzogU2VlIGlmIHRoZXJlIGlzIGEgYmV0dGVyIGFwcHJvYWNoIGZvciBoYW5kbGluZyB0aGlzLgot
ICAgIFVSTCB1cmwgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCkuZ2V0RWZmZWN0aXZlVVJMKGhh
bmRsZSk7CisgICAgVVJMIHVybCA9IGQtPm1fY3VybEhhbmRsZS5nZXRFZmZlY3RpdmVVUkwoKTsK
ICAgICBBU1NFUlQodXJsLmlzVmFsaWQoKSk7CiAgICAgZC0+bV9yZXNwb25zZS5zZXRVUkwodXJs
KTsKICAgICBpZiAoZC0+Y2xpZW50KCkpCkBAIC0yODcsOSArMjc4LDggQEAgc3RhdGljIHZvaWQg
aGFuZGxlTG9jYWxSZWNlaXZlUmVzcG9uc2UoQ1VSTCogaGFuZGxlLCBSZXNvdXJjZUhhbmRsZSog
am9iLCBSZXNvdXIKICAgICBkLT5tX3Jlc3BvbnNlLnNldFJlc3BvbnNlRmlyZWQodHJ1ZSk7CiB9
CiAKLQogLy8gY2FsbGVkIHdpdGggZGF0YSBhZnRlciBhbGwgaGVhZGVycyBoYXZlIGJlZW4gcHJv
Y2Vzc2VkIHZpYSBoZWFkZXJDYWxsYmFjawotc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZv
aWQqIHB0ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3N0YXRpYyBz
aXplX3Qgd3JpdGVDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIs
IHZvaWQqIGRhdGEpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGUqIGpvYiA9IHN0YXRpY19jYXN0PFJl
c291cmNlSGFuZGxlKj4oZGF0YSk7CiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpv
Yi0+Z2V0SW50ZXJuYWwoKTsKQEAgLTMwNCwxNCArMjk0LDEzIEBAIHN0YXRpYyBzaXplX3Qgd3Jp
dGVDYWxsYmFjayh2b2lkKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRh
dGEpCiAgICAgLy8gdGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGJ1dCBhcHBhcmVudGx5IGlz
LiBDVVJMIHdyaXRlcyB0aGUgZGF0YQogICAgIC8vIG9mIGh0bWwgcGFnZSBldmVuIGlmIGl0IGlz
IGEgcmVkaXJlY3QgdGhhdCB3YXMgaGFuZGxlZCBpbnRlcm5hbGx5CiAgICAgLy8gY2FuIGJlIG9i
c2VydmVkIGUuZy4gb24gZ21haWwuY29tCi0gICAgQ1VSTCogaCA9IGQtPm1faGFuZGxlOwogICAg
IGxvbmcgaHR0cENvZGUgPSAwOwotICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZv
KGgsIENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZodHRwQ29kZSk7Ci0gICAgaWYgKENVUkxFX09L
ID09IGVyciAmJiBodHRwQ29kZSA+PSAzMDAgJiYgaHR0cENvZGUgPCA0MDApCisgICAgQ1VSTGNv
ZGUgZXJyQ2QgPSBkLT5tX2N1cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKKyAg
ICBpZiAoQ1VSTEVfT0sgPT0gZXJyQ2QgJiYgaHR0cENvZGUgPj0gMzAwICYmIGh0dHBDb2RlIDwg
NDAwKQogICAgICAgICByZXR1cm4gdG90YWxTaXplOwogCiAgICAgaWYgKCFkLT5tX3Jlc3BvbnNl
LnJlc3BvbnNlRmlyZWQoKSkgewotICAgICAgICBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSho
LCBqb2IsIGQpOworICAgICAgICBoYW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZShqb2IsIGQpOwog
ICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9
CkBAIC0zMTksOCArMzA4LDggQEAgc3RhdGljIHNpemVfdCB3cml0ZUNhbGxiYWNrKHZvaWQqIHB0
ciwgc2l6ZV90IHNpemUsIHNpemVfdCBubWVtYiwgdm9pZCogZGF0YSkKICAgICBpZiAoZC0+bV9t
dWx0aXBhcnRIYW5kbGUpCiAgICAgICAgIGQtPm1fbXVsdGlwYXJ0SGFuZGxlLT5jb250ZW50UmVj
ZWl2ZWQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CiAgICAgZWxz
ZSBpZiAoZC0+Y2xpZW50KCkpIHsKLSAgICAgICAgZC0+Y2xpZW50KCktPmRpZFJlY2VpdmVEYXRh
KGpvYiwgc3RhdGljX2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSwgMCk7Ci0gICAgICAgIEN1
cmxDYWNoZU1hbmFnZXI6OmdldEluc3RhbmNlKCkuZGlkUmVjZWl2ZURhdGEoKmpvYiwgc3RhdGlj
X2Nhc3Q8Y2hhcio+KHB0ciksIHRvdGFsU2l6ZSk7CisgICAgICAgIGQtPmNsaWVudCgpLT5kaWRS
ZWNlaXZlRGF0YShqb2IsIHB0ciwgdG90YWxTaXplLCAwKTsKKyAgICAgICAgQ3VybENhY2hlTWFu
YWdlcjo6Z2V0SW5zdGFuY2UoKS5kaWRSZWNlaXZlRGF0YSgqam9iLCBwdHIsIHRvdGFsU2l6ZSk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHRvdGFsU2l6ZTsKQEAgLTM5NiwyMSArMzg1LDIzIEBAIHN0
YXRpYyB2b2lkIHJlbW92ZUxlYWRpbmdBbmRUcmFpbGluZ1F1b3RlcyhTdHJpbmcmIHZhbHVlKQog
ICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCBsZW5ndGggLSAyKTsKIH0KIAotc3Rh
dGljIGJvb2wgZ2V0UHJvdGVjdGlvblNwYWNlKENVUkwqIGgsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25TcGFjZSkKK3N0YXRpYyBi
b29sIGdldFByb3RlY3Rpb25TcGFjZShSZXNvdXJjZUhhbmRsZSogam9iLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiByZXNwb25zZSwgUHJvdGVjdGlvblNwYWNlJiBwcm90ZWN0aW9uU3BhY2UpCiB7
CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKKwog
ICAgIENVUkxjb2RlIGVycjsKIAogICAgIGxvbmcgcG9ydCA9IDA7Ci0gICAgZXJyID0gY3VybF9l
YXN5X2dldGluZm8oaCwgQ1VSTElORk9fUFJJTUFSWV9QT1JULCAmcG9ydCk7CisgICAgZXJyID0g
ZC0+bV9jdXJsSGFuZGxlLmdldFByaW1hcnlQb3J0KHBvcnQpOwogICAgIGlmIChlcnIgIT0gQ1VS
TEVfT0spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGxvbmcgYXZhaWxhYmxlQXV0aCA9
IENVUkxBVVRIX05PTkU7Ci0gICAgZXJyID0gY3VybF9lYXN5X2dldGluZm8oaCwgQ1VSTElORk9f
SFRUUEFVVEhfQVZBSUwsICZhdmFpbGFibGVBdXRoKTsKKyAgICBlcnIgPSBkLT5tX2N1cmxIYW5k
bGUuZ2V0SHR0cEF1dGhBdmFpbChhdmFpbGFibGVBdXRoKTsKICAgICBpZiAoZXJyICE9IENVUkxF
X09LKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBVUkwgdXJsID0gQ3VybENvbnRleHQ6
OnNpbmdsZXRvbigpLmdldEVmZmVjdGl2ZVVSTChoKTsKKyAgICBVUkwgdXJsID0gZC0+bV9jdXJs
SGFuZGxlLmdldEVmZmVjdGl2ZVVSTCgpOwogICAgIGlmICghdXJsLmlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC00ODAsMTAgKzQ3MSw4IEBAIHN0YXRpYyBzaXplX3QgaGVh
ZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBk
YXRhKQogICAgICogYWNjZXB0IGFsc28gXG4uCiAgICAgKi8KICAgICBpZiAoaGVhZGVyID09IFN0
cmluZygiXHJcbiIpIHx8IGhlYWRlciA9PSBTdHJpbmcoIlxuIikpIHsKLSAgICAgICAgQ1VSTCog
aCA9IGQtPm1faGFuZGxlOwotCiAgICAgICAgIGxvbmcgaHR0cENvZGUgPSAwOwotICAgICAgICBj
dXJsX2Vhc3lfZ2V0aW5mbyhoLCBDVVJMSU5GT19SRVNQT05TRV9DT0RFLCAmaHR0cENvZGUpOwor
ICAgICAgICBkLT5tX2N1cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKIAogICAg
ICAgICBpZiAoIWh0dHBDb2RlKSB7CiAgICAgICAgICAgICAvLyBDb21lcyBoZXJlIHdoZW4gcmVj
ZWl2aW5nIDIwMCBDb25uZWN0aW9uIEVzdGFibGlzaGVkLiBKdXN0IHJldHVybi4KQEAgLTQ5NSwx
MSArNDg0LDExIEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXpl
X3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHRv
dGFsU2l6ZTsKICAgICAgICAgfQogCi0gICAgICAgIGRvdWJsZSBjb250ZW50TGVuZ3RoID0gMDsK
LSAgICAgICAgY3VybF9lYXN5X2dldGluZm8oaCwgQ1VSTElORk9fQ09OVEVOVF9MRU5HVEhfRE9X
TkxPQUQsICZjb250ZW50TGVuZ3RoKTsKLSAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRFeHBlY3Rl
ZENvbnRlbnRMZW5ndGgoc3RhdGljX2Nhc3Q8bG9uZyBsb25nIGludD4oY29udGVudExlbmd0aCkp
OworICAgICAgICBsb25nIGxvbmcgY29udGVudExlbmd0aCA9IDA7CisgICAgICAgIGQtPm1fY3Vy
bEhhbmRsZS5nZXRDb250ZW50TGVuZ2h0RG93bmxvYWQoY29udGVudExlbmd0aCk7CisgICAgICAg
IGQtPm1fcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGNvbnRlbnRMZW5ndGgpOwog
Ci0gICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0VVJMKEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5n
ZXRFZmZlY3RpdmVVUkwoaCkpOworICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldFVSTChkLT5tX2N1
cmxIYW5kbGUuZ2V0RWZmZWN0aXZlVVJMKCkpOwogCiAgICAgICAgIGQtPm1fcmVzcG9uc2Uuc2V0
SFRUUFN0YXR1c0NvZGUoaHR0cENvZGUpOwogICAgICAgICBkLT5tX3Jlc3BvbnNlLnNldE1pbWVU
eXBlKGV4dHJhY3RNSU1FVHlwZUZyb21NZWRpYVR5cGUoZC0+bV9yZXNwb25zZS5odHRwSGVhZGVy
RmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkuY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKSk7CkBAIC01MzAsNyArNTE5LDcgQEAgc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhj
aGFyKiBwdHIsIHNpemVfdCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXNIdHRwQXV0aGVudGljYXRpb24oaHR0cENvZGUp
KSB7CiAgICAgICAgICAgICBQcm90ZWN0aW9uU3BhY2UgcHJvdGVjdGlvblNwYWNlOwotICAgICAg
ICAgICAgaWYgKGdldFByb3RlY3Rpb25TcGFjZShkLT5tX2hhbmRsZSwgZC0+bV9yZXNwb25zZSwg
cHJvdGVjdGlvblNwYWNlKSkgeworICAgICAgICAgICAgaWYgKGdldFByb3RlY3Rpb25TcGFjZShq
b2IsIGQtPm1fcmVzcG9uc2UsIHByb3RlY3Rpb25TcGFjZSkpIHsKICAgICAgICAgICAgICAgICBD
cmVkZW50aWFsIGNyZWRlbnRpYWw7CiAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UgY2hhbGxlbmdlKHByb3RlY3Rpb25TcGFjZSwgY3JlZGVudGlhbCwgZC0+bV9hdXRoRmFp
bHVyZUNvdW50LCBkLT5tX3Jlc3BvbnNlLCBSZXNvdXJjZUVycm9yKCkpOwogICAgICAgICAgICAg
ICAgIGNoYWxsZW5nZS5zZXRBdXRoZW50aWNhdGlvbkNsaWVudChqb2IpOwpAQCAtNTczLDcgKzU2
Miw3IEBAIHN0YXRpYyBzaXplX3QgaGVhZGVyQ2FsbGJhY2soY2hhciogcHRyLCBzaXplX3Qgc2l6
ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogICAgICAgICAgICAgLy8gY3VybCB3aWxsIGZv
bGxvdyB0aGUgcmVkaXJlY3Rpb25zIGludGVybmFsbHkuIFRodXMgdGhpcyBoZWFkZXIgY2FsbGJh
Y2sKICAgICAgICAgICAgIC8vIHdpbGwgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmUgdGltZSB3aXRo
IHRoZSBsaW5lIHN0YXJ0aW5nICJIVFRQIiBmb3Igb25lIGpvYi4KICAgICAgICAgICAgIGxvbmcg
aHR0cENvZGUgPSAwOwotICAgICAgICAgICAgY3VybF9lYXN5X2dldGluZm8oZC0+bV9oYW5kbGUs
IENVUkxJTkZPX1JFU1BPTlNFX0NPREUsICZodHRwQ29kZSk7CisgICAgICAgICAgICBkLT5tX2N1
cmxIYW5kbGUuZ2V0UmVzcG9uc2VDb2RlKGh0dHBDb2RlKTsKIAogICAgICAgICAgICAgU3RyaW5n
IGh0dHBDb2RlU3RyaW5nID0gU3RyaW5nOjpudW1iZXIoaHR0cENvZGUpOwogICAgICAgICAgICAg
aW50IHN0YXR1c0NvZGVQb3MgPSBoZWFkZXIuZmluZChodHRwQ29kZVN0cmluZyk7CkBAIC01OTQs
NyArNTgzLDcgQEAgc3RhdGljIHNpemVfdCBoZWFkZXJDYWxsYmFjayhjaGFyKiBwdHIsIHNpemVf
dCBzaXplLCBzaXplX3Qgbm1lbWIsIHZvaWQqIGRhdGEpCiBJdGVyYXRlIHRocm91Z2ggRm9ybURh
dGEgZWxlbWVudHMgYW5kIHVwbG9hZCBmaWxlcy4KIENhcmVmdWxseSByZXNwZWN0IHRoZSBnaXZl
biBidWZmZXIgc2l6ZSBhbmQgZmlsbCB0aGUgcmVzdCBvZiB0aGUgZGF0YSBhdCB0aGUgbmV4dCBj
YWxscy4KICovCi1zaXplX3QgcmVhZENhbGxiYWNrKHZvaWQqIHB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgdm9pZCogZGF0YSkKK3NpemVfdCByZWFkQ2FsbGJhY2soY2hhciogcHRyLCBz
aXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCB2b2lkKiBkYXRhKQogewogICAgIFJlc291cmNlSGFu
ZGxlKiBqb2IgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpOwogICAgIFJlc291
cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7CkBAIC02MzUsMjQgKzYy
NCwxNCBAQCBzdGF0aWMgaW5saW5lIHNpemVfdCBnZXRGb3JtRWxlbWVudHNDb3VudChSZXNvdXJj
ZUhhbmRsZSogam9iKQogICAgIHJldHVybiBzaXplOwogfQogCi1zdGF0aWMgdm9pZCBzZXR1cEZv
cm1EYXRhKFJlc291cmNlSGFuZGxlKiBqb2IsIENVUkxvcHRpb24gc2l6ZU9wdGlvbiwgc3RydWN0
IGN1cmxfc2xpc3QqKiBoZWFkZXJzKQorc3RhdGljIHZvaWQgc2V0dXBGb3JtRGF0YShSZXNvdXJj
ZUhhbmRsZSogam9iLCBib29sIGlzUG9zdFJlcXVlc3QpCiB7CiAgICAgUmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCogZCA9IGpvYi0+Z2V0SW50ZXJuYWwoKTsKICAgICBWZWN0b3I8Rm9ybURhdGFFbGVt
ZW50PiBlbGVtZW50cyA9IGpvYi0+Zmlyc3RSZXF1ZXN0KCkuaHR0cEJvZHkoKS0+ZWxlbWVudHMo
KTsKICAgICBzaXplX3QgbnVtRWxlbWVudHMgPSBlbGVtZW50cy5zaXplKCk7CiAKLSAgICAvLyBU
aGUgc2l6ZSBvZiBhIGN1cmxfb2ZmX3QgY291bGQgYmUgZGlmZmVyZW50IGluIFdlYktpdCBhbmQg
aW4gY1VSTCBkZXBlbmRpbmcgb24KLSAgICAvLyBjb21waWxhdGlvbiBmbGFncyBvZiBib3RoLgot
ICAgIHN0YXRpYyBpbnQgZXhwZWN0ZWRTaXplT2ZDdXJsT2ZmVCA9IDA7Ci0gICAgaWYgKCFleHBl
Y3RlZFNpemVPZkN1cmxPZmZUKSB7Ci0gICAgICAgIGN1cmxfdmVyc2lvbl9pbmZvX2RhdGEqIGlu
Zm9EYXRhID0gY3VybF92ZXJzaW9uX2luZm8oQ1VSTFZFUlNJT05fTk9XKTsKLSAgICAgICAgaWYg
KGluZm9EYXRhLT5mZWF0dXJlcyAmIENVUkxfVkVSU0lPTl9MQVJHRUZJTEUpCi0gICAgICAgICAg
ICBleHBlY3RlZFNpemVPZkN1cmxPZmZUID0gc2l6ZW9mKGxvbmcgbG9uZyk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGV4cGVjdGVkU2l6ZU9mQ3VybE9mZlQgPSBzaXplb2YoaW50KTsKLSAg
ICB9CisgICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyBtYXhDdXJsT2ZmVCA9IGQtPm1fY3VybEhh
bmRsZS5tYXhDdXJsT2ZmVCgpOwogCi0gICAgc3RhdGljIGNvbnN0IGxvbmcgbG9uZyBtYXhDdXJs
T2ZmVCA9ICgxTEwgPDwgKGV4cGVjdGVkU2l6ZU9mQ3VybE9mZlQgKiA4IC0gMSkpIC0gMTsKICAg
ICAvLyBPYnRhaW4gdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZvcm0gZGF0YQogICAgIGN1cmxfb2Zm
X3Qgc2l6ZSA9IDA7CiAgICAgYm9vbCBjaHVua2VkVHJhbnNmZXIgPSBmYWxzZTsKQEAgLTY3Nywz
OSArNjU2LDM2IEBAIHN0YXRpYyB2b2lkIHNldHVwRm9ybURhdGEoUmVzb3VyY2VIYW5kbGUqIGpv
YiwgQ1VSTG9wdGlvbiBzaXplT3B0aW9uLCBzdHJ1Y3QgY3VyCiAKICAgICAvLyBjVVJMIGd1ZXNz
ZXMgdGhhdCB3ZSB3YW50IGNodW5rZWQgZW5jb2RpbmcgYXMgbG9uZyBhcyB3ZSBzcGVjaWZ5IHRo
ZSBoZWFkZXIKICAgICBpZiAoY2h1bmtlZFRyYW5zZmVyKQotICAgICAgICAqaGVhZGVycyA9IGN1
cmxfc2xpc3RfYXBwZW5kKCpoZWFkZXJzLCAiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiKTsK
KyAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmFwcGVuZFJlcXVlc3RIZWFkZXIoIlRyYW5zZmVyLUVu
Y29kaW5nOiBjaHVua2VkIik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChzaXplb2YobG9uZyBs
b25nKSA9PSBleHBlY3RlZFNpemVPZkN1cmxPZmZUKQotICAgICAgICAgICAgY3VybF9lYXN5X3Nl
dG9wdChkLT5tX2hhbmRsZSwgc2l6ZU9wdGlvbiwgKGxvbmcgbG9uZylzaXplKTsKKyAgICAgICAg
aWYgKGlzUG9zdFJlcXVlc3QpCisgICAgICAgICAgICBkLT5tX2N1cmxIYW5kbGUuc2V0UG9zdEZp
ZWxkTGFyZ2Uoc2l6ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cmxfZWFzeV9zZXRv
cHQoZC0+bV9oYW5kbGUsIHNpemVPcHRpb24sIChpbnQpc2l6ZSk7CisgICAgICAgICAgICBkLT5t
X2N1cmxIYW5kbGUuc2V0SW5GaWxlU2l6ZUxhcmdlKHNpemUpOwogICAgIH0KIAotICAgIGN1cmxf
ZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUkVBREZVTkNUSU9OLCByZWFkQ2FsbGJh
Y2spOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUkVBRERBVEEs
IGpvYik7CisgICAgZC0+bV9jdXJsSGFuZGxlLnNldFJlYWRDYWxsYmFja0Z1bmN0aW9uKHJlYWRD
YWxsYmFjaywgam9iKTsKIH0KIAotdm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0dXBQVVQoc3RydWN0
IGN1cmxfc2xpc3QqKiBoZWFkZXJzKQordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0dXBQVVQoKQog
ewogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBnZXRJbnRlcm5hbCgpOwotICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfVVBMT0FELCBUUlVFKTsKLSAgICBj
dXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0lORklMRVNJWkUsIDApOworICAg
IGQtPm1fY3VybEhhbmRsZS5lbmFibGVIdHRwUHV0UmVxdWVzdCgpOwogCiAgICAgLy8gRGlzYWJs
ZSB0aGUgRXhwZWN0OiAxMDAgY29udGludWUgaGVhZGVyCi0gICAgKmhlYWRlcnMgPSBjdXJsX3Ns
aXN0X2FwcGVuZCgqaGVhZGVycywgIkV4cGVjdDoiKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuYXBw
ZW5kUmVxdWVzdEhlYWRlcigiRXhwZWN0OiIpOwogCiAgICAgc2l6ZV90IG51bUVsZW1lbnRzID0g
Z2V0Rm9ybUVsZW1lbnRzQ291bnQodGhpcyk7CiAgICAgaWYgKCFudW1FbGVtZW50cykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgc2V0dXBGb3JtRGF0YSh0aGlzLCBDVVJMT1BUX0lORklMRVNJWkVf
TEFSR0UsIGhlYWRlcnMpOworICAgIHNldHVwRm9ybURhdGEodGhpcywgZmFsc2UpOwogfQogCi12
b2lkIFJlc291cmNlSGFuZGxlOjpzZXR1cFBPU1Qoc3RydWN0IGN1cmxfc2xpc3QqKiBoZWFkZXJz
KQordm9pZCBSZXNvdXJjZUhhbmRsZTo6c2V0dXBQT1NUKCkKIHsKICAgICBSZXNvdXJjZUhhbmRs
ZUludGVybmFsKiBkID0gZ2V0SW50ZXJuYWwoKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1BPU1QsIFRSVUUpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfUE9TVEZJRUxEU0laRSwgMCk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVu
YWJsZUh0dHBQb3N0UmVxdWVzdCgpOwogCiAgICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9y
bUVsZW1lbnRzQ291bnQodGhpcyk7CiAgICAgaWYgKCFudW1FbGVtZW50cykKQEAgLTcxOCwxNCAr
Njk0LDEyIEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnNldHVwUE9TVChzdHJ1Y3QgY3VybF9zbGlz
dCoqIGhlYWRlcnMpCiAgICAgLy8gRG8gbm90IHN0cmVhbSBmb3Igc2ltcGxlIFBPU1QgZGF0YQog
ICAgIGlmIChudW1FbGVtZW50cyA9PSAxKSB7CiAgICAgICAgIGZpcnN0UmVxdWVzdCgpLmh0dHBC
b2R5KCktPmZsYXR0ZW4oZC0+bV9wb3N0Qnl0ZXMpOwotICAgICAgICBpZiAoZC0+bV9wb3N0Qnl0
ZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX1BPU1RGSUVMRFNJWkUsIGQtPm1fcG9zdEJ5dGVzLnNpemUoKSk7Ci0gICAgICAgICAg
ICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGQtPm1f
cG9zdEJ5dGVzLmRhdGEoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGQtPm1fcG9zdEJ5dGVz
LnNpemUoKSkKKyAgICAgICAgICAgIGQtPm1fY3VybEhhbmRsZS5zZXRQb3N0RmllbGRzKGQtPm1f
cG9zdEJ5dGVzLmRhdGEoKSwgZC0+bV9wb3N0Qnl0ZXMuc2l6ZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHNldHVwRm9ybURhdGEodGhpcywgQ1VSTE9QVF9QT1NURklFTERTSVpF
X0xBUkdFLCBoZWFkZXJzKTsKKyAgICBzZXR1cEZvcm1EYXRhKHRoaXMsIHRydWUpOwogfQogCiB2
b2lkIFJlc291cmNlSGFuZGxlOjpoYW5kbGVEYXRhVVJMKCkKQEAgLTgwOCw3ICs3ODIsNyBAQCB2
b2lkIFJlc291cmNlSGFuZGxlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKICAgICBpbml0aWFs
aXplKCk7CiAKICAgICAvLyBjdXJsX2Vhc3lfcGVyZm9ybSBibG9ja3MgdW50aWwgdGhlIHRyYW5z
ZmVydCBpcyBmaW5pc2hlZC4KLSAgICBDVVJMY29kZSByZXQgPSBjdXJsX2Vhc3lfcGVyZm9ybShk
LT5tX2hhbmRsZSk7CisgICAgQ1VSTGNvZGUgcmV0ID0gZC0+bV9jdXJsSGFuZGxlLnBlcmZvcm0o
KTsKIAogICAgIGlmIChyZXQgIT0gQ1VSTEVfT0spIHsKICAgICAgICAgUmVzb3VyY2VFcnJvciBl
cnJvcihBU0NJSUxpdGVyYWwoZXJyb3JEb21haW5DdXJsKSwgcmV0LCBrdXJsLCBTdHJpbmcoY3Vy
bF9lYXN5X3N0cmVycm9yKHJldCkpKTsKQEAgLTgyMiw4ICs3OTYsNiBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjpkaXNwYXRjaFN5bmNocm9ub3VzSm9iKCkKICNpZiBFTkFCTEUoV0VCX1RJTUlORykK
ICAgICBjYWxjdWxhdGVXZWJUaW1pbmdJbmZvcm1hdGlvbnMoZCk7CiAjZW5kaWYKLQotICAgIGN1
cmxfZWFzeV9jbGVhbnVwKGQtPm1faGFuZGxlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6
YXBwbHlBdXRoZW50aWNhdGlvbigpCkBAIC04NTQsMjIgKzgyNiwyMCBAQCB2b2lkIFJlc291cmNl
SGFuZGxlOjphcHBseUF1dGhlbnRpY2F0aW9uKCkKICAgICBpZiAoIWQtPm1faW5pdGlhbENyZWRl
bnRpYWwuaXNFbXB0eSgpKSB7CiAgICAgICAgIHVzZXIgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFs
LnVzZXIoKTsKICAgICAgICAgcGFzc3dvcmQgPSBkLT5tX2luaXRpYWxDcmVkZW50aWFsLnBhc3N3
b3JkKCk7Ci0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRU
UEFVVEgsIENVUkxBVVRIX0JBU0lDKTsKKyAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0
dHBBdXRoZW50aWNhdGlvbihDVVJMQVVUSF9CQVNJQyk7CiAgICAgfQogCiAgICAgLy8gSXQgc2Vl
bXMgd2UgbmVlZCB0byBzZXQgQ1VSTE9QVF9VU0VSUFdEIGV2ZW4gaWYgdXNlcm5hbWUgYW5kIHBh
c3N3b3JkIGlzIGVtcHR5LgogICAgIC8vIE90aGVyd2lzZSBjVVJMIHdpbGwgbm90IGF1dG9tYXRp
Y2FsbHkgY29udGludWUgd2l0aCBhIG5ldyByZXF1ZXN0IGFmdGVyIGEgNDAxIHJlc3BvbnNlLgog
CiAgICAgLy8gY3VybCBDVVJMT1BUX1VTRVJQV0QgZXhwZWN0cyB1c2VybmFtZTpwYXNzd29yZAot
ICAgIFN0cmluZyB1c2VycGFzcyA9IHVzZXIgKyAiOiIgKyBwYXNzd29yZDsKLSAgICBjdXJsX2Vh
c3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1VTRVJQV0QsIHVzZXJwYXNzLnV0ZjgoKS5k
YXRhKCkpOworICAgIGQtPm1fY3VybEhhbmRsZS5zZXRIdHRwQXV0aFVzZXJQYXNzKHVzZXIsIHBh
c3N3b3JkKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6aW5pdGlhbGl6ZSgpCiB7CiAgICAg
Q3VybENvbnRleHQmIGNvbnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9uKCk7CiAKLSAgICBz
dGF0aWMgY29uc3QgaW50IGFsbG93ZWRQcm90b2NvbHMgPSBDVVJMUFJPVE9fRklMRSB8IENVUkxQ
Uk9UT19GVFAgfCBDVVJMUFJPVE9fRlRQUyB8IENVUkxQUk9UT19IVFRQIHwgQ1VSTFBST1RPX0hU
VFBTOwogICAgIFVSTCB1cmwgPSBmaXJzdFJlcXVlc3QoKS51cmwoKTsKIAogICAgIC8vIFJlbW92
ZSBhbnkgZnJhZ21lbnQgcGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5kIGl0IGFzIHBhcnQg
b2YgdGhlIHJlcXVlc3QuCkBAIC04ODksNjIgKzg1OSw0NCBAQCB2b2lkIFJlc291cmNlSGFuZGxl
Ojppbml0aWFsaXplKCkKICAgICAgICAgZC0+bV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlw
ZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgodXJsKSk7CiAgICAgfQogCi0gICAgZC0+bV9o
YW5kbGUgPSBjdXJsX2Vhc3lfaW5pdCgpOwotCiAgICAgaWYgKGQtPm1fZGVmZXJzTG9hZGluZykg
ewotICAgICAgICBDVVJMY29kZSBlcnJvciA9IGN1cmxfZWFzeV9wYXVzZShkLT5tX2hhbmRsZSwg
Q1VSTFBBVVNFX0FMTCk7CisgICAgICAgIENVUkxjb2RlIGVycm9yID0gZC0+bV9jdXJsSGFuZGxl
LnBhdXNlKENVUkxQQVVTRV9BTEwpOwogICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IHBhdXNlIHRo
ZSBoYW5kbGUsIHdlIHdvdWxkIEFTU0VSVCBpbiB0aGUKICAgICAgICAgLy8gaGVhZGVyIGNhbGxi
YWNrLiBTbyBqdXN0IGFzc2VydCBoZXJlLgogICAgICAgICBBU1NFUlRfVU5VU0VEKGVycm9yLCBl
cnJvciA9PSBDVVJMRV9PSyk7CiAgICAgfQorCiAjaWZuZGVmIE5ERUJVRwotICAgIGlmIChjb250
ZXh0LmlzVmVyYm9zZSgpKQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX1ZFUkJPU0UsIDEpOwotICAgIGlmIChjb250ZXh0LmdldExvZ0ZpbGUoKSkKLSAgICAg
ICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TVERFUlIsIGNvbnRleHQu
Z2V0TG9nRmlsZSgpKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlVmVyYm9zZUlmVXNlZCgp
OworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVTdGRFcnJJZlVzZWQoKTsKICNlbmRpZgotICAg
IGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIDFM
KTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllI
T1NULCAyTCk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUklW
QVRFLCB0aGlzKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0VS
Uk9SQlVGRkVSLCBtX2N1cmxFcnJvckJ1ZmZlcik7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCB3cml0ZUNhbGxiYWNrKTsKLSAgICBjdXJs
X2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1dSSVRFREFUQSwgdGhpcyk7Ci0gICAg
Y3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9IRUFERVJGVU5DVElPTiwgaGVh
ZGVyQ2FsbGJhY2spOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRf
V1JJVEVIRUFERVIsIHRoaXMpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfQVVUT1JFRkVSRVIsIDEpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUs
IENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfTUFYUkVESVJTLCAxMCk7Ci0gICAgY3VybF9lYXN5X3NldG9wdChkLT5t
X2hhbmRsZSwgQ1VSTE9QVF9IVFRQQVVUSCwgQ1VSTEFVVEhfQU5ZKTsKLSAgICBjdXJsX2Vhc3lf
c2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBDdXJsQ29udGV4dDo6c2luZ2xldG9u
KCkuY3VybFNoYXJlSGFuZGxlKCkpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUs
IENVUkxPUFRfRE5TX0NBQ0hFX1RJTUVPVVQsIDYwICogNSk7IC8vIDUgbWludXRlcwotICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfUFJPVE9DT0xTLCBhbGxvd2VkUHJv
dG9jb2xzKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1JFRElS
X1BST1RPQ09MUywgYWxsb3dlZFByb3RvY29scyk7CisKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0
U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRW5hYmxlKTsKKyAgICBkLT5tX2N1
cmxIYW5kbGUuc2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0U3RyaWN0TmFt
ZUNoZWNrKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0UHJpdmF0ZURhdGEodGhpcyk7CisgICAg
ZC0+bV9jdXJsSGFuZGxlLnNldFdyaXRlQ2FsbGJhY2tGdW5jdGlvbih3cml0ZUNhbGxiYWNrLCB0
aGlzKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0SGVhZGVyQ2FsbGJhY2tGdW5jdGlvbihoZWFk
ZXJDYWxsYmFjaywgdGhpcyk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUF1dG9SZWZlcmVy
KCk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUZvbGxvd0xvY2F0aW9uKCk7CisgICAgZC0+
bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBBdXRoZW50aWNhdGlvbihDVVJMQVVUSF9BTlkpOworICAg
IGQtPm1fY3VybEhhbmRsZS5lbmFibGVTaGFyZUhhbmRsZSgpOworICAgIGQtPm1fY3VybEhhbmRs
ZS5lbmFibGVUaW1lb3V0KCk7CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUFsbG93ZWRQcm90
b2NvbHMoKTsKICAgICBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZSh0aGlzKTsKIAotICAgIGlmIChj
b250ZXh0LnNob3VsZElnbm9yZVNTTEVycm9ycygpKQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0
KGQtPm1faGFuZGxlLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBmYWxzZSk7CisgICAgaWYgKEN1
cmxDb250ZXh0OjpzaW5nbGV0b24oKS5zaG91bGRJZ25vcmVTU0xFcnJvcnMoKSkKKyAgICAgICAg
ZC0+bV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckRp
c2FibGUpOwogICAgIGVsc2UKICAgICAgICAgc2V0U1NMVmVyaWZ5T3B0aW9ucyh0aGlzKTsKIAot
ICAgIGNvbnN0IGNoYXIqIGNlcnRpZmljYXRlID0gY29udGV4dC5nZXRDZXJ0aWZpY2F0ZVBhdGgo
KTsKLSAgICBpZiAoY2VydGlmaWNhdGUpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9o
YW5kbGUsIENVUkxPUFRfQ0FJTkZPLCBjZXJ0aWZpY2F0ZSk7Ci0KLSAgICAvLyBlbmFibGUgZ3pp
cCBhbmQgZGVmbGF0ZSB0aHJvdWdoIEFjY2VwdC1FbmNvZGluZzoKLSAgICBjdXJsX2Vhc3lfc2V0
b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX0VOQ09ESU5HLCAiIik7Ci0KLSAgICAvLyB1cmwgbXVz
dCByZW1haW4gdmFsaWQgdGhyb3VnaCB0aGUgcmVxdWVzdAotICAgIEFTU0VSVCghZC0+bV91cmwp
OworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFibGVDQUluZm9JZkV4aXN0cygpOwogCi0gICAgLy8g
dXJsIGlzIGluIEFTQ0lJIHNvIGxhdGluMSgpIHdpbGwgb25seSBjb252ZXJ0IGl0IHRvIGNoYXIq
IHdpdGhvdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uLgotICAgIGQtPm1fdXJsID0gZmFzdFN0ckR1
cCh1cmxTdHJpbmcubGF0aW4xKCkuZGF0YSgpKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1f
aGFuZGxlLCBDVVJMT1BUX1VSTCwgZC0+bV91cmwpOworICAgIGQtPm1fY3VybEhhbmRsZS5lbmFi
bGVBY2NlcHRFbmNvZGluZygpOworICAgIGQtPm1fY3VybEhhbmRsZS5zZXRVcmwodXJsU3RyaW5n
KTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlQ29va2llSmFySWZFeGlzdHMoKTsKIAotICAg
IGNvbnN0IGNoYXIqIGNvb2tpZUphciA9IGNvbnRleHQuZ2V0Q29va2llSmFyRmlsZU5hbWUoKTsK
LSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxl
LCBDVVJMT1BUX0NPT0tJRUpBUiwgY29va2llSmFyKTsKKyAgICBkLT5tX2N1cmxIYW5kbGUuY2xl
YXJSZXF1ZXN0SGVhZGVycygpOwogCi0gICAgc3RydWN0IGN1cmxfc2xpc3QqIGhlYWRlcnMgPSAw
OwogICAgIGlmIChmaXJzdFJlcXVlc3QoKS5odHRwSGVhZGVyRmllbGRzKCkuc2l6ZSgpID4gMCkg
ewogICAgICAgICBIVFRQSGVhZGVyTWFwIGN1c3RvbUhlYWRlcnMgPSBmaXJzdFJlcXVlc3QoKS5o
dHRwSGVhZGVyRmllbGRzKCk7CiAKQEAgLTk2Myw1MCArOTE1LDI5IEBAIHZvaWQgUmVzb3VyY2VI
YW5kbGU6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgZC0+bV9hZGRlZENhY2hlVmFsaWRhdGlv
bkhlYWRlcnMgPSB0cnVlOwogICAgICAgICB9CiAKLSAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gY3VzdG9tSGVhZGVycy5lbmQoKTsKLSAgICAgICAgZm9yIChIVFRQ
SGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGN1c3RvbUhlYWRlcnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBTdHJpbmcga2V5ID0gaXQtPmtleTsKLSAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZSA9IGl0LT52YWx1ZTsKLSAgICAgICAgICAgIFN0cmluZyBoZWFk
ZXJTdHJpbmcoa2V5KTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBJbnNlcnQgdGhlIDsgdG8gdGVsbCBjdXJsIHRoYXQgdGhpcyBoZWFkZXIg
aGFzIGFuIGVtcHR5IHZhbHVlLgotICAgICAgICAgICAgICAgIGhlYWRlclN0cmluZy5hcHBlbmQo
IjsiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGVhZGVyU3RyaW5n
LmFwcGVuZCgiOiAiKTsKLSAgICAgICAgICAgICAgICBoZWFkZXJTdHJpbmcuYXBwZW5kKHZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIENTdHJpbmcgaGVhZGVyTGF0aW4xID0gaGVh
ZGVyU3RyaW5nLmxhdGluMSgpOwotICAgICAgICAgICAgaGVhZGVycyA9IGN1cmxfc2xpc3RfYXBw
ZW5kKGhlYWRlcnMsIGhlYWRlckxhdGluMS5kYXRhKCkpOwotICAgICAgICB9CisgICAgICAgIGZv
ciAoYXV0byBjdXN0b21IZWFkZXIgOiBjdXN0b21IZWFkZXJzKQorICAgICAgICAgICAgZC0+bV9j
dXJsSGFuZGxlLmFwcGVuZFJlcXVlc3RIZWFkZXIoY3VzdG9tSGVhZGVyLmtleSwgY3VzdG9tSGVh
ZGVyLnZhbHVlKTsKICAgICB9CiAKICAgICBTdHJpbmcgbWV0aG9kID0gZmlyc3RSZXF1ZXN0KCku
aHR0cE1ldGhvZCgpOwogICAgIGlmICgiR0VUIiA9PSBtZXRob2QpCi0gICAgICAgIGN1cmxfZWFz
eV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfSFRUUEdFVCwgVFJVRSk7CisgICAgICAgIGQt
Pm1fY3VybEhhbmRsZS5lbmFibGVIdHRwR2V0UmVxdWVzdCgpOwogICAgIGVsc2UgaWYgKCJQT1NU
IiA9PSBtZXRob2QpCi0gICAgICAgIHNldHVwUE9TVCgmaGVhZGVycyk7CisgICAgICAgIHNldHVw
UE9TVCgpOwogICAgIGVsc2UgaWYgKCJQVVQiID09IG1ldGhvZCkKLSAgICAgICAgc2V0dXBQVVQo
JmhlYWRlcnMpOworICAgICAgICBzZXR1cFBVVCgpOwogICAgIGVsc2UgaWYgKCJIRUFEIiA9PSBt
ZXRob2QpCi0gICAgICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfTk9C
T0RZLCBUUlVFKTsKKyAgICAgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBIZWFkUmVxdWVz
dCgpOwogICAgIGVsc2UgewotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBD
VVJMT1BUX0NVU1RPTVJFUVVFU1QsIG1ldGhvZC5hc2NpaSgpLmRhdGEoKSk7Ci0gICAgICAgIHNl
dHVwUFVUKCZoZWFkZXJzKTsKKyAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNldEh0dHBDdXN0b21S
ZXF1ZXN0KG1ldGhvZCk7CisgICAgICAgIHNldHVwUFVUKCk7CiAgICAgfQogCi0gICAgaWYgKGhl
YWRlcnMpIHsKLSAgICAgICAgY3VybF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9I
VFRQSEVBREVSLCBoZWFkZXJzKTsKLSAgICAgICAgZC0+bV9jdXN0b21IZWFkZXJzID0gaGVhZGVy
czsKLSAgICB9CisgICAgZC0+bV9jdXJsSGFuZGxlLmVuYWJsZVJlcXVlc3RIZWFkZXJzKCk7CiAK
ICAgICBhcHBseUF1dGhlbnRpY2F0aW9uKCk7CiAKLSAgICAvLyBTZXQgcHJveHkgb3B0aW9ucyBp
ZiB3ZSBoYXZlIHRoZW0uCi0gICAgYXV0byYgcHJveHkgPSBDdXJsQ29udGV4dDo6c2luZ2xldG9u
KCkucHJveHlJbmZvKCk7Ci0gICAgaWYgKHByb3h5LnR5cGUgIT0gQ3VybFByb3h5VHlwZTo6SW52
YWxpZCkgewotICAgICAgICBjdXJsX2Vhc3lfc2V0b3B0KGQtPm1faGFuZGxlLCBDVVJMT1BUX1BS
T1hZLCBwcm94eS51cmwoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgY3VybF9lYXN5X3NldG9w
dChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9QUk9YWVRZUEUsIHByb3h5LnR5cGUpOwotICAgIH0KKyAg
ICBkLT5tX2N1cmxIYW5kbGUuZW5hYmxlUHJveHlJZkV4aXN0cygpOwogfQogCiB2b2lkIFJlc291
cmNlSGFuZGxlOjpoYW5kbGVDdXJsTXNnKENVUkxNc2cqIG1zZykKQEAgLTEwMTgsNyArOTQ5LDcg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlQ3VybE1zZyhDVVJMTXNnKiBtc2cpCiAgICAg
ICAgIGNhbGN1bGF0ZVdlYlRpbWluZ0luZm9ybWF0aW9ucyhkKTsKICNlbmRpZgogICAgICAgICBp
ZiAoIWQtPm1fcmVzcG9uc2UucmVzcG9uc2VGaXJlZCgpKSB7Ci0gICAgICAgICAgICBoYW5kbGVM
b2NhbFJlY2VpdmVSZXNwb25zZShkLT5tX2hhbmRsZSwgdGhpcywgZCk7CisgICAgICAgICAgICBo
YW5kbGVMb2NhbFJlY2VpdmVSZXNwb25zZSh0aGlzLCBkKTsKICAgICAgICAgICAgIGlmIChkLT5t
X2NhbmNlbGxlZCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEwMzEs
NyArOTYyLDcgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6aGFuZGxlQ3VybE1zZyhDVVJMTXNnKiBt
c2cpCiAgICAgICAgICAgICBDdXJsQ2FjaGVNYW5hZ2VyOjpnZXRJbnN0YW5jZSgpLmRpZEZpbmlz
aExvYWRpbmcoKnRoaXMpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgVVJMIHVy
bCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0b24oKS5nZXRFZmZlY3RpdmVVUkwoZC0+bV9oYW5kbGUp
OworICAgICAgICBVUkwgdXJsID0gZC0+bV9jdXJsSGFuZGxlLmdldEVmZmVjdGl2ZVVSTCgpOwog
I2lmbmRlZiBOREVCVUcKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDdXJsIEVSUk9SIGZvciB1
cmw9JyVzJywgZXJyb3I6ICclcydcbiIsIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBjdXJs
X2Vhc3lfc3RyZXJyb3IobXNnLT5kYXRhLnJlc3VsdCkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwCmluZGV4IGQyZjRiNWYzNDA5Li45ZjQ0ZWExYzZlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlTWFuYWdlci5jcHAKQEAgLTQxLDcgKzQxLDYgQEAKICNpZiBVU0UoQ1VSTCkKIAogI2lu
Y2x1ZGUgIkNyZWRlbnRpYWxTdG9yYWdlLmgiCi0jaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNp
bmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2lu
Y2x1ZGUgIk11bHRpcGFydEhhbmRsZS5oIgpAQCAtODEsMTIgKzgwLDEyIEBAIFJlc291cmNlSGFu
ZGxlTWFuYWdlcjo6UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKICAgICA6IG1fZG93bmxvYWRUaW1l
cigqdGhpcywgJlJlc291cmNlSGFuZGxlTWFuYWdlcjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKQog
ICAgICwgbV9ydW5uaW5nSm9icygwKQogewotICAgIG1fY3VybE11bHRpSGFuZGxlID0gQ3VybENv
bnRleHQ6OnNpbmdsZXRvbigpLmNyZWF0ZU11bHRpSGFuZGxlKCk7CisKIH0KIAogUmVzb3VyY2VI
YW5kbGVNYW5hZ2VyOjp+UmVzb3VyY2VIYW5kbGVNYW5hZ2VyKCkKIHsKLSAgICBjdXJsX211bHRp
X2NsZWFudXAobV9jdXJsTXVsdGlIYW5kbGUpOworCiB9CiAKIFJlc291cmNlSGFuZGxlTWFuYWdl
ciogUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpCkBAIC0xMTMsMTAgKzEx
Miw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2so
KQogICAgIC8vIFJldHJ5ICdzZWxlY3QnIGlmIGl0IHdhcyBpbnRlcnJ1cHRlZCBieSBhIHByb2Nl
c3Mgc2lnbmFsLgogICAgIGludCByYyA9IDA7CiAgICAgZG8gewotICAgICAgICBGRF9aRVJPKCZm
ZHJlYWQpOwotICAgICAgICBGRF9aRVJPKCZmZHdyaXRlKTsKLSAgICAgICAgRkRfWkVSTygmZmRl
eGNlcCk7Ci0gICAgICAgIGN1cmxfbXVsdGlfZmRzZXQobV9jdXJsTXVsdGlIYW5kbGUsICZmZHJl
YWQsICZmZHdyaXRlLCAmZmRleGNlcCwgJm1heGZkKTsKKyAgICAgICAgbV9jdXJsTXVsdGlIYW5k
bGUuZ2V0RmRTZXQoZmRyZWFkLCBmZHdyaXRlLCBmZGV4Y2VwLCBtYXhmZCk7CisKICAgICAgICAg
Ly8gV2hlbiB0aGUgMyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBlbXB0eSwgd2luc29jayB3aWxsIHJl
dHVybiAtMQogICAgICAgICAvLyBhbmQgYmFpbCBvdXQsIHN0b3BwaW5nIHRoZSBmaWxlIGRvd25s
b2FkLiBTbyBtYWtlIHN1cmUgd2UKICAgICAgICAgLy8gaGF2ZSB2YWxpZCBmaWxlIGRlc2NyaXB0
b3JzIGJlZm9yZSBjYWxsaW5nIHNlbGVjdC4KQEAgLTEzMiwxMyArMTI5LDEzIEBAIHZvaWQgUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soKQogICAgIH0KIAogICAg
IGludCBydW5uaW5nSGFuZGxlcyA9IDA7Ci0gICAgd2hpbGUgKGN1cmxfbXVsdGlfcGVyZm9ybSht
X2N1cmxNdWx0aUhhbmRsZSwgJnJ1bm5pbmdIYW5kbGVzKSA9PSBDVVJMTV9DQUxMX01VTFRJX1BF
UkZPUk0pIHsgfQorICAgIHdoaWxlIChtX2N1cmxNdWx0aUhhbmRsZS5wZXJmb3JtKHJ1bm5pbmdI
YW5kbGVzKSA9PSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsgfQogCiAgICAgLy8gY2hlY2sg
dGhlIGN1cmwgbWVzc2FnZXMgaW5kaWNhdGluZyBjb21wbGV0ZWQgdHJhbnNmZXJzCiAgICAgLy8g
YW5kIGZyZWUgdGhlaXIgcmVzb3VyY2VzCiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgaW50
IG1lc3NhZ2VzSW5RdWV1ZTsKLSAgICAgICAgQ1VSTE1zZyogbXNnID0gY3VybF9tdWx0aV9pbmZv
X3JlYWQobV9jdXJsTXVsdGlIYW5kbGUsICZtZXNzYWdlc0luUXVldWUpOworICAgICAgICBpbnQg
bWVzc2FnZXNJblF1ZXVlID0gMDsKKyAgICAgICAgQ1VSTE1zZyogbXNnID0gbV9jdXJsTXVsdGlI
YW5kbGUucmVhZEluZm8obWVzc2FnZXNJblF1ZXVlKTsKICAgICAgICAgaWYgKCFtc2cpCiAgICAg
ICAgICAgICBicmVhazsKIApAQCAtMTUyLDcgKzE0OSw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVN
YW5hZ2VyOjpkb3dubG9hZFRpbWVyQ2FsbGJhY2soKQogICAgICAgICBpZiAoIWpvYikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gam9i
LT5nZXRJbnRlcm5hbCgpOwotICAgICAgICBBU1NFUlQoZC0+bV9oYW5kbGUgPT0gaGFuZGxlKTsK
IAogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKICAgICAgICAgICAgIHJlbW92ZUZyb21D
dXJsKGpvYik7CkBAIC0xNzUsMTMgKzE3MSwxMiBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdl
cjo6ZG93bmxvYWRUaW1lckNhbGxiYWNrKCkKIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpy
ZW1vdmVGcm9tQ3VybChSZXNvdXJjZUhhbmRsZSogam9iKQogewogICAgIFJlc291cmNlSGFuZGxl
SW50ZXJuYWwqIGQgPSBqb2ItPmdldEludGVybmFsKCk7Ci0gICAgQVNTRVJUKGQtPm1faGFuZGxl
KTsKLSAgICBpZiAoIWQtPm1faGFuZGxlKQorICAgIEFTU0VSVChkLT5tX2N1cmxIYW5kbGUuaGFu
ZGxlKCkpOworICAgIGlmICghZC0+bV9jdXJsSGFuZGxlLmhhbmRsZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgbV9ydW5uaW5nSm9icy0tOwotICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSht
X2N1cmxNdWx0aUhhbmRsZSwgZC0+bV9oYW5kbGUpOwotICAgIGN1cmxfZWFzeV9jbGVhbnVwKGQt
Pm1faGFuZGxlKTsKLSAgICBkLT5tX2hhbmRsZSA9IDA7CisKKyAgICBtX2N1cmxNdWx0aUhhbmRs
ZS5yZW1vdmVIYW5kbGUoZC0+bV9jdXJsSGFuZGxlLmhhbmRsZSgpKTsKICAgICBqb2ItPmRlcmVm
KCk7CiB9CiAKQEAgLTIzNSw3ICsyMzAsOSBAQCB2b2lkIFJlc291cmNlSGFuZGxlTWFuYWdlcjo6
c3RhcnRKb2IoUmVzb3VyY2VIYW5kbGUqIGpvYikKICAgICBqb2ItPmluaXRpYWxpemUoKTsKIAog
ICAgIG1fcnVubmluZ0pvYnMrKzsKLSAgICBDVVJMTWNvZGUgcmV0ID0gY3VybF9tdWx0aV9hZGRf
aGFuZGxlKG1fY3VybE11bHRpSGFuZGxlLCBqb2ItPmdldEludGVybmFsKCktPm1faGFuZGxlKTsK
KworICAgIENVUkxNY29kZSByZXQgPSBtX2N1cmxNdWx0aUhhbmRsZS5hZGRIYW5kbGUoam9iLT5n
ZXRJbnRlcm5hbCgpLT5tX2N1cmxIYW5kbGUuaGFuZGxlKCkpOworCiAgICAgLy8gZG9uJ3QgY2Fs
bCBwZXJmb3JtLCBiZWNhdXNlIGV2ZW50cyBtdXN0IGJlIGFzeW5jCiAgICAgLy8gdGltZW91dCB3
aWxsIG9jY3VyIGFuZCBkbyBjdXJsX211bHRpX3BlcmZvcm0KICAgICBpZiAocmV0ICYmIHJldCAh
PSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAppbmRl
eCAyYmY0YzdjNWVkOC4uZWM4ZjUxMmU5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmgKQEAg
LTI4LDYgKzI4LDcgQEAKICNpZm5kZWYgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyX2gKICNkZWZpbmUg
UmVzb3VyY2VIYW5kbGVNYW5hZ2VyX2gKIAorI2luY2x1ZGUgIkN1cmxDb250ZXh0LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlQ2xpZW50LmgiCkBAIC0zNyw3ICszOCw2IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2Vu
ZGlmCiAKLSNpbmNsdWRlIDxjdXJsL2N1cmwuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgpAQCAtNjAsOSArNjAsMTAgQEAgcHJpdmF0ZToKICAgICBib29sIHN0YXJ0U2NoZWR1bGVk
Sm9icygpOwogCiAgICAgVGltZXIgbV9kb3dubG9hZFRpbWVyOwotICAgIENVUkxNKiBtX2N1cmxN
dWx0aUhhbmRsZTsKICAgICBWZWN0b3I8UmVzb3VyY2VIYW5kbGUqPiBtX3Jlc291cmNlSGFuZGxl
TGlzdDsKICAgICBpbnQgbV9ydW5uaW5nSm9iczsKKworICAgIEN1cmxNdWx0aUhhbmRsZSBtX2N1
cmxNdWx0aUhhbmRsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9TU0xIYW5kbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL1NTTEhhbmRsZS5jcHAKaW5kZXggYmYwYjAzOGY5ZmYuLmY4Zjk3NTU1YzNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFu
ZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU1NMSGFu
ZGxlLmNwcApAQCAtNzUsOSArNzUsMTAgQEAgdm9pZCBzZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogCiAgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9
IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKICAgICBjbGllbnRDZXJ0aWZpY2F0ZSBjbGllbnRJbmZv
ID0gaXQtPnZhbHVlOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRf
U1NMQ0VSVCwgc3RkOjpnZXQ8MD4oY2xpZW50SW5mbykudXRmOCgpLmRhdGEoKSk7Ci0gICAgY3Vy
bF9lYXN5X3NldG9wdChkLT5tX2hhbmRsZSwgQ1VSTE9QVF9TU0xDRVJUVFlQRSwgIlAxMiIpOwot
ICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1NMQ0VSVFBBU1NXRCwg
c3RkOjpnZXQ8MT4oY2xpZW50SW5mbykudXRmOCgpLmRhdGEoKSk7CisKKyAgICBkLT5tX2N1cmxI
YW5kbGUuc2V0U3NsQ2VydChzdGQ6OmdldDwwPihjbGllbnRJbmZvKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBkLT5tX2N1cmxIYW5kbGUuc2V0U3NsQ2VydFR5cGUoIlAxMiIpOworICAgIGQtPm1fY3Vy
bEhhbmRsZS5zZXRTc2xLZXlQYXNzd29yZChzdGQ6OmdldDwxPihjbGllbnRJbmZvKS51dGY4KCku
ZGF0YSgpKTsKIH0KIAogYm9vbCBzc2xJZ25vcmVIVFRQU0NlcnRpZmljYXRlKGNvbnN0IFN0cmlu
ZyYgaG9zdCwgY29uc3QgTGlzdEhhc2hTZXQ8U3RyaW5nPiYgY2VydGlmaWNhdGVzKQpAQCAtMjIx
LDcgKzIyMiw3IEBAIHN0YXRpYyBpbnQgY2VydFZlcmlmeUNhbGxiYWNrKGludCBvaywgWDUwOV9T
VE9SRV9DVFgqIGN0eCkKICAgICBpZiAob2spIHsKICAgICAgICAgLy8gaWYgdGhlIGhvc3QgYW5k
IHRoZSBjZXJ0aWZpY2F0ZSBhcmUgc3RvcmVkIGZvciB0aGUgY3VycmVudCBoYW5kbGUgdGhhdCBt
ZWFucyBpcyBlbmFibGVkLAogICAgICAgICAvLyBzbyBkb24ndCBuZWVkIHRvIGN1cmwgdmVyaWZp
ZXMgdGhlIGF1dGhlbnRpY2l0eSBvZiB0aGUgcGVlcidzIGNlcnRpZmljYXRlCi0gICAgICAgIGN1
cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIGZhbHNl
KTsKKyAgICAgICAgZC0+bV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6
VmVyaWZ5UGVlckRpc2FibGUpOwogICAgIH0KICAgICByZXR1cm4gb2s7CiB9CkBAIC0yMzYsOCAr
MjM3LDggQEAgc3RhdGljIENVUkxjb2RlIHNzbGN0eGZ1bihDVVJMKiBjdXJsLCB2b2lkKiBzc2xj
dHgsIHZvaWQqIHBhcm0pCiB2b2lkIHNldFNTTFZlcmlmeU9wdGlvbnMoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSkKIHsKICAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJ
bnRlcm5hbCgpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENVUkxPUFRfU1NM
X0NUWF9EQVRBLCBoYW5kbGUpOwotICAgIGN1cmxfZWFzeV9zZXRvcHQoZC0+bV9oYW5kbGUsIENV
UkxPUFRfU1NMX0NUWF9GVU5DVElPTiwgc3NsY3R4ZnVuKTsKKworICAgIGQtPm1fY3VybEhhbmRs
ZS5zZXRTc2xDdHhDYWxsYmFja0Z1bmN0aW9uKHNzbGN0eGZ1biwgaGFuZGxlKTsKIH0KIAogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>