<?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>177373</bug_id>
          
          <creation_ts>2017-09-22 11:46:46 -0700</creation_ts>
          <short_desc>[Curl] Refactor and improve methods in the CurlHandle</short_desc>
          <delta_ts>2017-09-27 12:17:32 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>bfulgham</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>galpeter</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1351748</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-22 11:46:46 -0700</bug_when>
    <thetext>Cleanup method name, consistent naming, remove unused feature, better enum naming, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352294</commentid>
    <comment_count>1</comment_count>
      <attachid>321714</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-25 11:52:31 -0700</bug_when>
    <thetext>Created attachment 321714
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352312</commentid>
    <comment_count>2</comment_count>
      <attachid>321714</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-09-25 12:14:14 -0700</bug_when>
    <thetext>Comment on attachment 321714
patch

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

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:263
&gt; +        m_handle = nullptr;

It&apos;s probably not necessary to set m_handle to nullptr in the destructor.

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:345
&gt; +void CurlHandle::removeRequestHeader(const String&amp; name)
&gt; +{
&gt; +    // Add a header with no content, the internally used header will get disabled. 
&gt; +    String header(name);
&gt; +    header.append(&quot;:&quot;);
&gt; +
&gt;      appendRequestHeader(header);

This is very confusing.  Are we removing or appending?  We should definitely call it something else.

&gt; Source/WebCore/platform/network/curl/CurlContext.cpp:354
&gt; +void CurlHandle::appendRequestHeader(const String&amp; header, bool appendOnly)
&gt;  {
&gt;      m_requestHeaders.append(header);
&gt; +
&gt; +    if (!appendOnly)
&gt; +        enableRequestHeaders();
&gt;  }

I think adding this bool indicates that we&apos;ve got the responsibilities of these functions all wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352341</commentid>
    <comment_count>3</comment_count>
      <attachid>321723</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-25 12:43:54 -0700</bug_when>
    <thetext>Created attachment 321723
fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352342</commentid>
    <comment_count>4</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-25 12:44:06 -0700</bug_when>
    <thetext>Thank you. I&apos;ve fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352376</commentid>
    <comment_count>5</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-25 13:27:05 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.cpp:345
&gt; &gt; +void CurlHandle::removeRequestHeader(const String&amp; name)
&gt; &gt; +{
&gt; &gt; +    // Add a header with no content, the internally used header will get disabled. 
&gt; &gt; +    String header(name);
&gt; &gt; +    header.append(&quot;:&quot;);
&gt; &gt; +
&gt; &gt;      appendRequestHeader(header);
&gt; 
&gt; This is very confusing.  Are we removing or appending?  We should definitely
&gt; call it something else.

This is the libcurl&apos;s spec. If we need to delete the pre appended header including the default prepared one, we need to append empty value header to the list. The original code has used that behavior directly, so we&apos;ve added a meaningful method and hide the detail inside.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352377</commentid>
    <comment_count>6</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2017-09-25 13:28:47 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #2)
&gt; Comment on attachment 321714 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=321714&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.cpp:263
&gt; &gt; +        m_handle = nullptr;
&gt; 
&gt; It&apos;s probably not necessary to set m_handle to nullptr in the destructor.

removed. Also removed from other class&apos;s destructors.


&gt; &gt; Source/WebCore/platform/network/curl/CurlContext.cpp:354
&gt; &gt; +void CurlHandle::appendRequestHeader(const String&amp; header, bool appendOnly)
&gt; &gt;  {
&gt; &gt;      m_requestHeaders.append(header);
&gt; &gt; +
&gt; &gt; +    if (!appendOnly)
&gt; &gt; +        enableRequestHeaders();
&gt; &gt;  }
&gt; 
&gt; I think adding this bool indicates that we&apos;ve got the responsibilities of
&gt; these functions all wrong.

removed that flag argument and handle the situation internally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352480</commentid>
    <comment_count>7</comment_count>
      <attachid>321723</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-25 16:24:48 -0700</bug_when>
    <thetext>Comment on attachment 321723
fix

Clearing flags on attachment: 321723

Committed r222479: &lt;http://trac.webkit.org/changeset/222479&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1352481</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-25 16:24:53 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353264</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:17:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/34692963&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321714</attachid>
            <date>2017-09-25 11:52:31 -0700</date>
            <delta_ts>2017-09-25 12:43:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>177373-1.diff</filename>
            <type>text/plain</type>
            <size>16264</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwODUyYTZiZGZiMS4uMDlkYWU3Njg5YmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxNy0wOS0yNSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFJlZmFjdG9yIGFuZCBpbXByb3ZlIG1ldGhvZHMgaW4g
dGhlIEN1cmxIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NzM3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxIYW5kbGU6On5DdXJsSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
cmxIYW5kbGU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6cGF1
c2UpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6c2V0VXJsKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybEhhbmRsZTo6cmVtb3ZlUmVxdWVzdEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
SGFuZGxlOjplbmFibGVSZXF1ZXN0SGVhZGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFu
ZGxlOjpnZXRDb250ZW50TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6Omdl
dE5ldHdvcmtMb2FkTWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjplcnJv
ckRlc2NyaXB0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5k
bGU6OmNsZWFyVXJsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6Omdl
dENvbnRlbnRMZW5naHREb3dubG9hZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJs
SGFuZGxlOjpnZXRUaW1lcyk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9j
dXJsL0N1cmxDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpwcml2YXRl
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpzZXRQ
cml2YXRlRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjp1cmwg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93
bmxvYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybERvd25sb2FkOjpzZXR1cFJlcXVlc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjpjZXJ0VmVyaWZ5Q2FsbGJhY2spOgor
ICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0
dXBSZXF1ZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRl
OjpzZXR1cFBVVCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0
ZTo6Z2V0TmV0d29ya0xvYWRNZXRyaWNzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFu
ZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZlSGVhZGVyKToKKwogMjAxNy0wOS0yMiAgVGltIEhv
cnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgZW52KCkgYXMg
YW4gYWxpYXMgb2YgY29uc3RhbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5jcHAKaW5kZXggODllNDIzMDIzNjkuLjU2YmEzYjQx
ODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsQ29udGV4dC5jcHAKQEAgLTI1LDkgKzI1LDkgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKIAogI2lmIFVTRShDVVJMKQotI2luY2x1ZGUg
IkN1cmxDb250ZXh0LmgiCiAjaW5jbHVkZSAiSFRUUEhlYWRlck1hcC5oIgogI2luY2x1ZGUgPE5l
dHdvcmtMb2FkTWV0cmljcy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CkBAIC0yNTgs
OSArMjU4LDEwIEBAIEN1cmxIYW5kbGU6OkN1cmxIYW5kbGUoKQogCiBDdXJsSGFuZGxlOjp+Q3Vy
bEhhbmRsZSgpCiB7Ci0gICAgY2xlYXJVcmwoKTsKLQotICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1f
aGFuZGxlKTsKKyAgICBpZiAobV9oYW5kbGUpIHsKKyAgICAgICAgY3VybF9lYXN5X2NsZWFudXAo
bV9oYW5kbGUpOworICAgICAgICBtX2hhbmRsZSA9IG51bGxwdHI7CisgICAgfQogfQogCiBjb25z
dCBTdHJpbmcgQ3VybEhhbmRsZTo6ZXJyb3JEZXNjcmlwdGlvbihDVVJMY29kZSBlcnJvckNvZGUp
CkBAIC0yNjgsMTUgKzI2OSw5IEBAIGNvbnN0IFN0cmluZyBDdXJsSGFuZGxlOjplcnJvckRlc2Ny
aXB0aW9uKENVUkxjb2RlIGVycm9yQ29kZSkKICAgICByZXR1cm4gU3RyaW5nKGN1cmxfZWFzeV9z
dHJlcnJvcihlcnJvckNvZGUpKTsKIH0KIAotY29uc3QgU3RyaW5nIEN1cmxIYW5kbGU6OmVycm9y
RGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIHJldHVybiBlcnJvckRlc2NyaXB0aW9uKG1fZXJy
b3JDb2RlKTsKLX0KLQogdm9pZCBDdXJsSGFuZGxlOjppbml0aWFsaXplKCkKIHsKICAgICBjdXJs
X2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBtX2Vycm9yQnVmZmVy
KTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1BSSVZBVEUsIHRoaXMp
OwogfQogCiBDVVJMY29kZSBDdXJsSGFuZGxlOjpwZXJmb3JtKCkKQEAgLTI4Nyw3ICsyODIsNyBA
QCBDVVJMY29kZSBDdXJsSGFuZGxlOjpwZXJmb3JtKCkKIAogQ1VSTGNvZGUgQ3VybEhhbmRsZTo6
cGF1c2UoaW50IGJpdG1hc2spCiB7Ci0gICAgbV9lcnJvckNvZGUgPSBjdXJsX2Vhc3lfcGF1c2Uo
bV9oYW5kbGUsIENVUkxQQVVTRV9BTEwpOworICAgIG1fZXJyb3JDb2RlID0gY3VybF9lYXN5X3Bh
dXNlKG1faGFuZGxlLCBiaXRtYXNrKTsKICAgICByZXR1cm4gbV9lcnJvckNvZGU7CiB9CiAKQEAg
LTI5NiwyMSArMjkxLDIyIEBAIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlU2hhcmVIYW5kbGUoKQog
ICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfU0hBUkUsIEN1cmxDb250ZXh0
OjpzaW5nbGV0b24oKS5zaGFyZUhhbmRsZSgpLmhhbmRsZSgpKTsKIH0KIAotdm9pZCBDdXJsSGFu
ZGxlOjpzZXRVcmwoY29uc3QgU3RyaW5nJiB1cmwpCit2b2lkIEN1cmxIYW5kbGU6OnNldFVybChj
b25zdCBVUkwmIHVybCkKIHsKLSAgICBjbGVhclVybCgpOworICAgIFVSTCBjdXJsVXJsID0gdXJs
OwogCi0gICAgLy8gdXJsIGlzIGluIEFTQ0lJIHNvIGxhdGluMSgpIHdpbGwgb25seSBjb252ZXJ0
IGl0IHRvIGNoYXIqIHdpdGhvdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uLgotICAgIG1fdXJsID0g
ZmFzdFN0ckR1cCh1cmwubGF0aW4xKCkuZGF0YSgpKTsKLSAgICBjdXJsX2Vhc3lfc2V0b3B0KG1f
aGFuZGxlLCBDVVJMT1BUX1VSTCwgbV91cmwpOwotfQorICAgIC8vIFJlbW92ZSBhbnkgZnJhZ21l
bnQgcGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5kIGl0IGFzIHBhcnQgb2YgdGhlIHJlcXVl
c3QuCisgICAgY3VybFVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKIAotdm9pZCBDdXJs
SGFuZGxlOjpjbGVhclVybCgpCi17Ci0gICAgaWYgKG1fdXJsKSB7Ci0gICAgICAgIGZhc3RGcmVl
KG1fdXJsKTsKLSAgICAgICAgbV91cmwgPSBudWxscHRyOworICAgIC8vIFJlbW92ZSBhbnkgcXVl
cnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZS4KKyAgICBpZiAoY3VybFVybC5pc0xvY2FsRmls
ZSgpKSB7CisgICAgICAgIC8vIEJ5IHNldHRpbmcgdGhlIHF1ZXJ5IHRvIGEgbnVsbCBzdHJpbmcg
aXQnbGwgYmUgcmVtb3ZlZC4KKyAgICAgICAgaWYgKCFjdXJsVXJsLnF1ZXJ5KCkuaXNFbXB0eSgp
KQorICAgICAgICAgICAgY3VybFVybC5zZXRRdWVyeShTdHJpbmcoKSk7CiAgICAgfQorCisgICAg
Ly8gdXJsIGlzIGluIEFTQ0lJIHNvIGxhdGluMSgpIHdpbGwgb25seSBjb252ZXJ0IGl0IHRvIGNo
YXIqIHdpdGhvdXQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uLgorICAgIGN1cmxfZWFzeV9zZXRvcHQo
bV9oYW5kbGUsIENVUkxPUFRfVVJMLCBjdXJsVXJsLnN0cmluZygpLmxhdGluMSgpLmRhdGEoKSk7
CiB9CiAKIHZvaWQgQ3VybEhhbmRsZTo6YXBwZW5kUmVxdWVzdEhlYWRlcnMoY29uc3QgSFRUUEhl
YWRlck1hcCYgaGVhZGVycykKQEAgLTMxOCwxNCArMzE0LDE0IEBAIHZvaWQgQ3VybEhhbmRsZTo6
YXBwZW5kUmVxdWVzdEhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKICAgICBp
ZiAoaGVhZGVycy5zaXplKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGhlYWRlcnMp
IHsKICAgICAgICAgICAgIGF1dG8mIHZhbHVlID0gZW50cnkudmFsdWU7Ci0gICAgICAgICAgICBh
cHBlbmRSZXF1ZXN0SGVhZGVyKGVudHJ5LmtleSwgZW50cnkudmFsdWUpOworICAgICAgICAgICAg
YXBwZW5kUmVxdWVzdEhlYWRlcihlbnRyeS5rZXksIGVudHJ5LnZhbHVlLCB0cnVlKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGVuYWJsZVJlcXVlc3RIZWFkZXJzKCk7CiAgICAgfQogfQogCi12b2lk
IEN1cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlKQordm9pZCBDdXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0SGVhZGVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBhcHBlbmRPbmx5KQog
ewogICAgIFN0cmluZyBoZWFkZXIobmFtZSk7CiAKQEAgLTMzNywyMCArMzMzLDMzIEBAIHZvaWQg
Q3VybEhhbmRsZTo6YXBwZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgIGhlYWRlci5hcHBlbmQodmFsdWUpOwogICAgIH0KIAor
ICAgIGFwcGVuZFJlcXVlc3RIZWFkZXIoaGVhZGVyLCBhcHBlbmRPbmx5KTsKK30KKwordm9pZCBD
dXJsSGFuZGxlOjpyZW1vdmVSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICAvLyBBZGQgYSBoZWFkZXIgd2l0aCBubyBjb250ZW50LCB0aGUgaW50ZXJuYWxseSB1c2VkIGhl
YWRlciB3aWxsIGdldCBkaXNhYmxlZC4gCisgICAgU3RyaW5nIGhlYWRlcihuYW1lKTsKKyAgICBo
ZWFkZXIuYXBwZW5kKCI6Iik7CisKICAgICBhcHBlbmRSZXF1ZXN0SGVhZGVyKGhlYWRlcik7CiB9
CiAKLXZvaWQgQ3VybEhhbmRsZTo6YXBwZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIGhl
YWRlcikKK3ZvaWQgQ3VybEhhbmRsZTo6YXBwZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcm
IGhlYWRlciwgYm9vbCBhcHBlbmRPbmx5KQogewogICAgIG1fcmVxdWVzdEhlYWRlcnMuYXBwZW5k
KGhlYWRlcik7CisKKyAgICBpZiAoIWFwcGVuZE9ubHkpCisgICAgICAgIGVuYWJsZVJlcXVlc3RI
ZWFkZXJzKCk7CiB9CiAKIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlUmVxdWVzdEhlYWRlcnMoKQog
ewotICAgIGlmICghbV9yZXF1ZXN0SGVhZGVycy5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3Qg
c3RydWN0IGN1cmxfc2xpc3QqIGhlYWRlcnMgPSBtX3JlcXVlc3RIZWFkZXJzLmhlYWQoKTsKLSAg
ICAgICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9IVFRQSEVBREVSLCBoZWFk
ZXJzKTsKLSAgICB9CisgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjb25zdCBzdHJ1Y3QgY3VybF9zbGlzdCogaGVhZGVycyA9IG1fcmVx
dWVzdEhlYWRlcnMuaGVhZCgpOworICAgIGN1cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxP
UFRfSFRUUEhFQURFUiwgaGVhZGVycyk7CiB9CiAKIHZvaWQgQ3VybEhhbmRsZTo6ZW5hYmxlSHR0
cEdldFJlcXVlc3QoKQpAQCAtNTg1LDcgKzU5NCw3IEBAIHN0ZDo6b3B0aW9uYWw8bG9uZz4gQ3Vy
bEhhbmRsZTo6Z2V0UmVzcG9uc2VDb2RlKCkKICAgICByZXR1cm4gcmVzcG9uc2VDb2RlOwogfQog
Ci1zdGQ6Om9wdGlvbmFsPGxvbmcgbG9uZz4gQ3VybEhhbmRsZTo6Z2V0Q29udGVudExlbmdodERv
d25sb2FkKCkKK3N0ZDo6b3B0aW9uYWw8bG9uZyBsb25nPiBDdXJsSGFuZGxlOjpnZXRDb250ZW50
TGVuZ3RoKCkKIHsKICAgICBpZiAoIW1faGFuZGxlKSB7CiAgICAgICAgIG1fZXJyb3JDb2RlID0g
Q1VSTEVfRkFJTEVEX0lOSVQ7CkBAIC02MTYsMTIgKzYyNSwxMSBAQCBzdGQ6Om9wdGlvbmFsPGxv
bmc+IEN1cmxIYW5kbGU6OmdldEh0dHBBdXRoQXZhaWwoKQogICAgIHJldHVybiBodHRwQXV0aEF2
YWlsYWJsZTsKIH0KIAotc3RkOjpvcHRpb25hbDxOZXR3b3JrTG9hZE1ldHJpY3M+IEN1cmxIYW5k
bGU6OmdldFRpbWVzKCkKK3N0ZDo6b3B0aW9uYWw8TmV0d29ya0xvYWRNZXRyaWNzPiBDdXJsSGFu
ZGxlOjpnZXROZXR3b3JrTG9hZE1ldHJpY3MoKQogewogICAgIGRvdWJsZSBuYW1lTG9va3VwID0g
MC4wOwogICAgIGRvdWJsZSBjb25uZWN0ID0gMC4wOwogICAgIGRvdWJsZSBhcHBDb25uZWN0ID0g
MC4wOwotICAgIGRvdWJsZSBwcmVUcmFuc2ZlciA9IDAuMDsKICAgICBkb3VibGUgc3RhcnRUcmFu
c2ZlciA9IDAuMDsKIAogICAgIGlmICghbV9oYW5kbGUpIHsKQEAgLTY0MSwxMCArNjQ5LDYgQEAg
c3RkOjpvcHRpb25hbDxOZXR3b3JrTG9hZE1ldHJpY3M+IEN1cmxIYW5kbGU6OmdldFRpbWVzKCkK
ICAgICBpZiAobV9lcnJvckNvZGUgIT0gQ1VSTEVfT0spCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKLSAgICBtX2Vycm9yQ29kZSA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBD
VVJMSU5GT19QUkVUUkFOU0ZFUl9USU1FLCAmcHJlVHJhbnNmZXIpOwotICAgIGlmIChtX2Vycm9y
Q29kZSAhPSBDVVJMRV9PSykKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLQogICAgIG1f
ZXJyb3JDb2RlID0gY3VybF9lYXN5X2dldGluZm8obV9oYW5kbGUsIENVUkxJTkZPX1NUQVJUVFJB
TlNGRVJfVElNRSwgJnN0YXJ0VHJhbnNmZXIpOwogICAgIGlmIChtX2Vycm9yQ29kZSAhPSBDVVJM
RV9PSykKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmgKaW5kZXggNGRkY2ZiMTJkZDYu
LjNmZDNiYjE5ZTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybENvbnRleHQuaApAQCAtMjA0LDE4ICsyMDQsMTggQEAgY2xhc3MgQ3VybEhhbmRs
ZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybEhhbmRsZSk7CiAKIHB1YmxpYzoKLSAg
ICBlbnVtIFZlcmlmeVBlZXIgewotICAgICAgICBWZXJpZnlQZWVyRGlzYWJsZSA9IDBMLAotICAg
ICAgICBWZXJpZnlQZWVyRW5hYmxlID0gMUwKKyAgICBlbnVtIGNsYXNzIFZlcmlmeVBlZXIgewor
ICAgICAgICBEaXNhYmxlID0gMEwsCisgICAgICAgIEVuYWJsZSA9IDFMCiAgICAgfTsKIAotICAg
IGVudW0gVmVyaWZ5SG9zdCB7Ci0gICAgICAgIFZlcmlmeUhvc3RMb29zZU5hbWVDaGVjayA9IDAs
Ci0gICAgICAgIFZlcmlmeUhvc3RTdHJpY3ROYW1lQ2hlY2sgPSAyCisgICAgZW51bSBjbGFzcyBW
ZXJpZnlIb3N0IHsKKyAgICAgICAgTG9vc2VOYW1lQ2hlY2sgPSAwLAorICAgICAgICBTdHJpY3RO
YW1lQ2hlY2sgPSAyCiAgICAgfTsKIAogICAgIEN1cmxIYW5kbGUoKTsKLSAgICB+Q3VybEhhbmRs
ZSgpOworICAgIHZpcnR1YWwgfkN1cmxIYW5kbGUoKTsKIAogICAgIENVUkwqIGhhbmRsZSgpIGNv
bnN0IHsgcmV0dXJuIG1faGFuZGxlOyB9CiAKQEAgLTIyOCwyMCArMjI4LDE1IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEVycm9yQ29kZShDVVJMY29kZSBlcnJvckNvZGUpIHsgbV9lcnJvckNvZGUg
PSBlcnJvckNvZGU7IH0KIAogICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgZXJyb3JEZXNjcmlwdGlv
bihDVVJMY29kZSk7Ci0gICAgY29uc3QgU3RyaW5nIGVycm9yRGVzY3JpcHRpb24oKSBjb25zdDsK
IAogICAgIHZvaWQgZW5hYmxlU2hhcmVIYW5kbGUoKTsKIAotICAgIHZvaWQqIHByaXZhdGVEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9wcml2YXRlRGF0YTsgfQotICAgIHZvaWQgc2V0UHJpdmF0ZURh
dGEodm9pZCogdXNlckRhdGEpIHsgbV9wcml2YXRlRGF0YSA9IHVzZXJEYXRhOyB9Ci0KLSAgICB2
b2lkIHNldFVybChjb25zdCBTdHJpbmcmKTsKLSAgICBjb25zdCBjaGFyKiB1cmwoKSBjb25zdCB7
IHJldHVybiBtX3VybDsgfQorICAgIHZvaWQgc2V0VXJsKGNvbnN0IFVSTCYpOwogCiAgICAgdm9p
ZCBhcHBlbmRSZXF1ZXN0SGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJik7Ci0gICAgdm9pZCBh
cHBlbmRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOwotICAgIHZv
aWQgYXBwZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGVuYWJsZVJl
cXVlc3RIZWFkZXJzKCk7CisgICAgdm9pZCBhcHBlbmRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBhcHBlbmRPbmx5ID0gZmFsc2UpOwor
ICAgIHZvaWQgYXBwZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgYXBw
ZW5kT25seSA9IGZhbHNlKTsKKyAgICB2b2lkIHJlbW92ZVJlcXVlc3RIZWFkZXIoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKIAogICAgIHZvaWQgZW5hYmxlSHR0cEdldFJlcXVlc3QoKTsKICAgICB2b2lk
IGVuYWJsZUh0dHBIZWFkUmVxdWVzdCgpOwpAQCAtMjg2LDkgKzI4MSw5IEBAIHB1YmxpYzoKICAg
ICBVUkwgZ2V0RWZmZWN0aXZlVVJMKCk7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gZ2V0
UHJpbWFyeVBvcnQoKTsKICAgICBzdGQ6Om9wdGlvbmFsPGxvbmc+IGdldFJlc3BvbnNlQ29kZSgp
OwotICAgIHN0ZDo6b3B0aW9uYWw8bG9uZyBsb25nPiBnZXRDb250ZW50TGVuZ2h0RG93bmxvYWQo
KTsKKyAgICBzdGQ6Om9wdGlvbmFsPGxvbmcgbG9uZz4gZ2V0Q29udGVudExlbmd0aCgpOwogICAg
IHN0ZDo6b3B0aW9uYWw8bG9uZz4gZ2V0SHR0cEF1dGhBdmFpbCgpOwotICAgIHN0ZDo6b3B0aW9u
YWw8TmV0d29ya0xvYWRNZXRyaWNzPiBnZXRUaW1lcygpOworICAgIHN0ZDo6b3B0aW9uYWw8TmV0
d29ya0xvYWRNZXRyaWNzPiBnZXROZXR3b3JrTG9hZE1ldHJpY3MoKTsKIAogICAgIHN0YXRpYyBs
b25nIGxvbmcgbWF4Q3VybE9mZlQoKTsKIApAQCAtMjk4LDE2ICsyOTMsMTMgQEAgcHVibGljOgog
I2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjbGVhclVybCgpOwotCisgICAgdm9pZCBlbmFi
bGVSZXF1ZXN0SGVhZGVycygpOwogICAgIHN0YXRpYyBpbnQgZXhwZWN0ZWRTaXplT2ZDdXJsT2Zm
VCgpOwogCiAgICAgQ1VSTCogbV9oYW5kbGUgeyBudWxscHRyIH07CiAgICAgY2hhciBtX2Vycm9y
QnVmZmVyW0NVUkxfRVJST1JfU0laRV0geyB9OwogICAgIENVUkxjb2RlIG1fZXJyb3JDb2RlOwog
Ci0gICAgY2hhciogbV91cmwgeyBudWxscHRyIH07Ci0gICAgdm9pZCogbV9wcml2YXRlRGF0YSB7
IG51bGxwdHIgfTsKICAgICBDdXJsU0xpc3QgbV9yZXF1ZXN0SGVhZGVyczsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5j
cHAKaW5kZXggYmJmNGRhMTljZmQuLmY1YjMzYTAyMzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNwcApAQCAtMTE1LDcg
KzExNSw2IEBAIHZvaWQgQ3VybERvd25sb2FkOjpzZXR1cFJlcXVlc3QoKQogICAgIG1fY3VybEhh
bmRsZS5lbmFibGVTaGFyZUhhbmRsZSgpOwogCiAgICAgbV9jdXJsSGFuZGxlLnNldFVybChtX3Vy
bCk7Ci0gICAgbV9jdXJsSGFuZGxlLnNldFByaXZhdGVEYXRhKHRoaXMpOwogICAgIG1fY3VybEhh
bmRsZS5zZXRIZWFkZXJDYWxsYmFja0Z1bmN0aW9uKGhlYWRlckNhbGxiYWNrLCB0aGlzKTsKICAg
ICBtX2N1cmxIYW5kbGUuc2V0V3JpdGVDYWxsYmFja0Z1bmN0aW9uKHdyaXRlQ2FsbGJhY2ssIHRo
aXMpOwogICAgIG1fY3VybEhhbmRsZS5lbmFibGVGb2xsb3dMb2NhdGlvbigpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVy
LmNwcAppbmRleCBkMzhjOTIwMDUyYy4uM2U2ODJiMjQ5MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCkBA
IC03Miw3ICs3Miw3IEBAIGludCBDdXJsU1NMVmVyaWZpZXI6OmNlcnRWZXJpZnlDYWxsYmFjayhp
bnQgb2ssIFg1MDlfU1RPUkVfQ1RYKiBzdG9yZUN0eCkKICAgICAgICAgLy8gaWYgdGhlIGhvc3Qg
YW5kIHRoZSBjZXJ0aWZpY2F0ZSBhcmUgc3RvcmVkIGZvciB0aGUgY3VycmVudCBoYW5kbGUgdGhh
dCBtZWFucyBpcyBlbmFibGVkLAogICAgICAgICAvLyBzbyBkb24ndCBuZWVkIHRvIGN1cmwgdmVy
aWZpZXMgdGhlIGF1dGhlbnRpY2l0eSBvZiB0aGUgcGVlcidzIGNlcnRpZmljYXRlCiAgICAgICAg
IGlmICh2ZXJpZmllci0+bV9jdXJsSGFuZGxlKQotICAgICAgICAgICAgdmVyaWZpZXItPm1fY3Vy
bEhhbmRsZS0+c2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRGlzYWJsZSk7
CisgICAgICAgICAgICB2ZXJpZmllci0+bV9jdXJsSGFuZGxlLT5zZXRTc2xWZXJpZnlQZWVyKEN1
cmxIYW5kbGU6OlZlcmlmeVBlZXI6OkRpc2FibGUpOwogICAgIH0KIAogICAgIHJldHVybiBvazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJj
ZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCmluZGV4IGVmMjk5N2I3NzJlLi5m
YzcwMTljNTZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCkBAIC0x
ODAsMjQgKzE4MCw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUmVx
dWVzdCgpCiB7CiAgICAgQ3VybENvbnRleHQmIGNvbnRleHQgPSBDdXJsQ29udGV4dDo6c2luZ2xl
dG9uKCk7CiAKLSAgICBVUkwgdXJsID0gbV9maXJzdFJlcXVlc3QudXJsKCk7Ci0KLSAgICAvLyBS
ZW1vdmUgYW55IGZyYWdtZW50IHBhcnQsIG90aGVyd2lzZSBjdXJsIHdpbGwgc2VuZCBpdCBhcyBw
YXJ0IG9mIHRoZSByZXF1ZXN0LgotICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsK
LQotICAgIFN0cmluZyB1cmxTdHJpbmcgPSB1cmwuc3RyaW5nKCk7Ci0KICAgICBtX2N1cmxIYW5k
bGUuaW5pdGlhbGl6ZSgpOwogCi0gICAgaWYgKHVybC5pc0xvY2FsRmlsZSgpKSB7Ci0gICAgICAg
IC8vIFJlbW92ZSBhbnkgcXVlcnkgcGFydCBzZW50IHRvIGEgbG9jYWwgZmlsZS4KLSAgICAgICAg
aWYgKCF1cmwucXVlcnkoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcg
dGhlIHF1ZXJ5IHRvIGEgbnVsbCBzdHJpbmcgaXQnbGwgYmUgcmVtb3ZlZC4KLSAgICAgICAgICAg
IHVybC5zZXRRdWVyeShTdHJpbmcoKSk7Ci0gICAgICAgICAgICB1cmxTdHJpbmcgPSB1cmwuc3Ry
aW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAobV9kZWZlcnNMb2FkaW5nKSB7CiAg
ICAgICAgIENVUkxjb2RlIGVycm9yID0gbV9jdXJsSGFuZGxlLnBhdXNlKENVUkxQQVVTRV9BTEwp
OwogICAgICAgICAvLyBJZiB3ZSBkaWQgbm90IHBhdXNlIHRoZSBoYW5kbGUsIHdlIHdvdWxkIEFT
U0VSVCBpbiB0aGUKQEAgLTIxMiw5ICsxOTYsOCBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlOjpzZXR1cFJlcXVlc3QoKQogCiAgICAgYXV0byYgc3NsSGFuZGxlID0gQ3VybENvbnRl
eHQ6OnNpbmdsZXRvbigpLnNzbEhhbmRsZSgpOwogCi0gICAgbV9jdXJsSGFuZGxlLnNldFNzbFZl
cmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlckVuYWJsZSk7Ci0gICAgbV9jdXJsSGFuZGxl
LnNldFNzbFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdFN0cmljdE5hbWVDaGVjayk7
Ci0gICAgbV9jdXJsSGFuZGxlLnNldFByaXZhdGVEYXRhKHRoaXMpOworICAgIG1fY3VybEhhbmRs
ZS5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXI6OkVuYWJsZSk7CisgICAg
bV9jdXJsSGFuZGxlLnNldFNzbFZlcmlmeUhvc3QoQ3VybEhhbmRsZTo6VmVyaWZ5SG9zdDo6U3Ry
aWN0TmFtZUNoZWNrKTsKICAgICBtX2N1cmxIYW5kbGUuc2V0V3JpdGVDYWxsYmFja0Z1bmN0aW9u
KGRpZFJlY2VpdmVEYXRhQ2FsbGJhY2ssIHRoaXMpOwogICAgIG1fY3VybEhhbmRsZS5zZXRIZWFk
ZXJDYWxsYmFja0Z1bmN0aW9uKGRpZFJlY2VpdmVIZWFkZXJDYWxsYmFjaywgdGhpcyk7CiAgICAg
bV9jdXJsSGFuZGxlLmVuYWJsZUF1dG9SZWZlcmVyKCk7CkBAIC0yMjQsNyArMjA3LDcgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0dXBSZXF1ZXN0KCkKICAgICBtX2N1cmxI
YW5kbGUuZW5hYmxlVGltZW91dCgpOwogICAgIG1fY3VybEhhbmRsZS5lbmFibGVBbGxvd2VkUHJv
dG9jb2xzKCk7CiAKLSAgICBhdXRvIHNzbENsaWVudENlcnRpZmljYXRlID0gc3NsSGFuZGxlLmdl
dFNTTENsaWVudENlcnRpZmljYXRlKHVybC5ob3N0KCkpOworICAgIGF1dG8gc3NsQ2xpZW50Q2Vy
dGlmaWNhdGUgPSBzc2xIYW5kbGUuZ2V0U1NMQ2xpZW50Q2VydGlmaWNhdGUobV9maXJzdFJlcXVl
c3QudXJsKCkuaG9zdCgpKTsKICAgICBpZiAoc3NsQ2xpZW50Q2VydGlmaWNhdGUpIHsKICAgICAg
ICAgbV9jdXJsSGFuZGxlLnNldFNzbENlcnQoc3NsQ2xpZW50Q2VydGlmaWNhdGUtPmZpcnN0LnV0
ZjgoKS5kYXRhKCkpOwogICAgICAgICBtX2N1cmxIYW5kbGUuc2V0U3NsQ2VydFR5cGUoIlAxMiIp
OwpAQCAtMjMyLDE0ICsyMTUsMTQgQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6
c2V0dXBSZXF1ZXN0KCkKICAgICB9CiAKICAgICBpZiAoc3NsSGFuZGxlLnNob3VsZElnbm9yZVNT
TEVycm9ycygpKQotICAgICAgICBtX2N1cmxIYW5kbGUuc2V0U3NsVmVyaWZ5UGVlcihDdXJsSGFu
ZGxlOjpWZXJpZnlQZWVyRGlzYWJsZSk7CisgICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xWZXJp
ZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXI6OkRpc2FibGUpOwogICAgIGVsc2UKICAgICAg
ICAgbV9jdXJsSGFuZGxlLnNldFNzbEN0eENhbGxiYWNrRnVuY3Rpb24od2lsbFNldHVwU3NsQ3R4
Q2FsbGJhY2ssIHRoaXMpOwogCiAgICAgbV9jdXJsSGFuZGxlLnNldENBQ2VydFBhdGgoc3NsSGFu
ZGxlLmdldENBQ2VydFBhdGgoKSk7CiAKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlQWNjZXB0RW5j
b2RpbmcoKTsKLSAgICBtX2N1cmxIYW5kbGUuc2V0VXJsKHVybFN0cmluZyk7CisgICAgbV9jdXJs
SGFuZGxlLnNldFVybChtX2ZpcnN0UmVxdWVzdC51cmwoKSk7CiAgICAgbV9jdXJsSGFuZGxlLmVu
YWJsZUNvb2tpZUphcklmRXhpc3RzKCk7CiAKICAgICBpZiAobV9jdXN0b21IVFRQSGVhZGVyRmll
bGRzLnNpemUoKSkKQEAgLTI1OSw4ICsyNDIsNiBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERl
bGVnYXRlOjpzZXR1cFJlcXVlc3QoKQogICAgICAgICBzZXR1cFBVVCgpOwogICAgIH0KIAotICAg
IG1fY3VybEhhbmRsZS5lbmFibGVSZXF1ZXN0SGVhZGVycygpOwotCiAgICAgYXBwbHlBdXRoZW50
aWNhdGlvbigpOwogCiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZVByb3h5SWZFeGlzdHMoKTsKQEAg
LTU2Myw3ICs1NDQsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cFBV
VCgpCiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZUh0dHBQdXRSZXF1ZXN0KCk7CiAKICAgICAvLyBE
aXNhYmxlIHRoZSBFeHBlY3Q6IDEwMCBjb250aW51ZSBoZWFkZXIKLSAgICBtX2N1cmxIYW5kbGUu
YXBwZW5kUmVxdWVzdEhlYWRlcigiRXhwZWN0OiIpOworICAgIG1fY3VybEhhbmRsZS5yZW1vdmVS
ZXF1ZXN0SGVhZGVyKCJFeHBlY3QiKTsKIAogICAgIHNpemVfdCBudW1FbGVtZW50cyA9IGdldEZv
cm1FbGVtZW50c0NvdW50KCk7CiAgICAgaWYgKCFudW1FbGVtZW50cykKQEAgLTY1MSw3ICs2MzIs
NyBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjphcHBseUF1dGhlbnRpY2F0aW9u
KCkKIE5ldHdvcmtMb2FkTWV0cmljcyBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6Z2V0TmV0
d29ya0xvYWRNZXRyaWNzKCkKIHsKICAgICBOZXR3b3JrTG9hZE1ldHJpY3MgbmV0d29ya0xvYWRN
ZXRyaWNzOwotICAgIGlmIChhdXRvIG1ldHJpY3MgPSBtX2N1cmxIYW5kbGUuZ2V0VGltZXMoKSkK
KyAgICBpZiAoYXV0byBtZXRyaWNzID0gbV9jdXJsSGFuZGxlLmdldE5ldHdvcmtMb2FkTWV0cmlj
cygpKQogICAgICAgICBuZXR3b3JrTG9hZE1ldHJpY3MgPSAqbWV0cmljczsKIAogICAgIHJldHVy
biBuZXR3b3JrTG9hZE1ldHJpY3M7CkBAIC02OTksNiArNjgwLDcgQEAgc2l6ZV90IFJlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlOjpkaWRSZWNlaXZlSGVhZGVyKFN0cmluZyYmIGhlYWRlcikKICAg
ICAgICAgICAgIC8vIENvbWVzIGhlcmUgd2hlbiByZWNlaXZpbmcgMjAwIENvbm5lY3Rpb24gRXN0
YWJsaXNoZWQuIEp1c3QgcmV0dXJuLgogICAgICAgICAgICAgcmV0dXJuIGhlYWRlci5sZW5ndGgo
KTsKICAgICAgICAgfQorCiAgICAgICAgIGlmIChpc0h0dHBJbmZvKGh0dHBDb2RlKSkgewogICAg
ICAgICAgICAgLy8gSnVzdCByZXR1cm4gd2hlbiByZWNlaXZpbmcgaHR0cCBpbmZvLCBlLmcuIEhU
VFAvMS4xIDEwMCBDb250aW51ZS4KICAgICAgICAgICAgIC8vIElmIG5vdCwgdGhlIHJlcXVlc3Qg
bWlnaHQgYmUgY2FuY2VsbGVkLCBiZWNhdXNlIHRoZSBNSU1FIHR5cGUgd2lsbCBiZSBlbXB0eSBm
b3IgdGhpcyByZXNwb25zZS4KQEAgLTcwNiw3ICs2ODgsNyBAQCBzaXplX3QgUmVzb3VyY2VIYW5k
bGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYgaGVhZGVyKQogICAgICAg
ICB9CiAKICAgICAgICAgbG9uZyBsb25nIGNvbnRlbnRMZW5ndGggPSAwOwotICAgICAgICBpZiAo
YXV0byBsZW5ndGggPSBtX2N1cmxIYW5kbGUuZ2V0Q29udGVudExlbmdodERvd25sb2FkKCkpCisg
ICAgICAgIGlmIChhdXRvIGxlbmd0aCA9IG1fY3VybEhhbmRsZS5nZXRDb250ZW50TGVuZ3RoKCkp
CiAgICAgICAgICAgICBjb250ZW50TGVuZ3RoID0gKmxlbmd0aDsKIAogICAgICAgICB1aW50MTZf
dCBjb25uZWN0UG9ydCA9IDA7Cg==
</data>
<flag name="review"
          id="341675"
          type_id="1"
          status="-"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="341676"
          type_id="3"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321723</attachid>
            <date>2017-09-25 12:43:54 -0700</date>
            <delta_ts>2017-09-25 16:24:48 -0700</delta_ts>
            <desc>fix</desc>
            <filename>177373-2.diff</filename>
            <type>text/plain</type>
            <size>16491</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwODUyYTZiZGZiMS4uM2RjY2VhYmI1MWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAxNy0wOS0yNSAgQmFzdWtlIFN1enVraSAgPEJhc3VrZS5TdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIFJlZmFjdG9yIGFuZCBpbXByb3ZlIG1ldGhvZHMgaW4g
dGhlIEN1cmxIYW5kbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3NzM3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkN1cmxTaGFyZUhhbmRsZTo6fkN1cmxTaGFyZUhhbmRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsTXVsdGlIYW5kbGU6On5DdXJsTXVsdGlIYW5kbGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VybEhhbmRsZTo6fkN1cmxIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhh
bmRsZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpwYXVzZSk6
CisgICAgICAgIChXZWJDb3JlOjpDdXJsSGFuZGxlOjpzZXRVcmwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VybEhhbmRsZTo6YXBwZW5kUmVxdWVzdEhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybEhhbmRsZTo6YXBwZW5kUmVxdWVzdEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJs
SGFuZGxlOjpyZW1vdmVSZXF1ZXN0SGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5k
bGU6OmVuYWJsZVJlcXVlc3RIZWFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6
OmdldENvbnRlbnRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0TmV0
d29ya0xvYWRNZXRyaWNzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OmVycm9yRGVz
Y3JpcHRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6
Y2xlYXJVcmwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3VybEhhbmRsZTo6Z2V0Q29u
dGVudExlbmdodERvd25sb2FkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5k
bGU6OmdldFRpbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybENvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnByaXZhdGVEYXRh
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnNldFByaXZh
dGVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkN1cmxIYW5kbGU6OnVybCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9h
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OnNldHVwUmVxdWVzdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6OmNlcnRWZXJpZnlDYWxsYmFjayk6CisgICAg
ICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cFJl
cXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNl
dHVwUFVUKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpn
ZXROZXR3b3JrTG9hZE1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGVD
dXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVIZWFkZXIpOgorCiAyMDE3LTA5LTIyICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBlbnYoKSBhcyBhbiBh
bGlhcyBvZiBjb25zdGFudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxDb250ZXh0LmNwcAppbmRleCA4OWU0MjMwMjM2OS4uMGZiOWI4NjMzZjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxD
b250ZXh0LmNwcApAQCAtMjUsOSArMjUsOSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogCiAjaWYgVVNFKENVUkwpCi0jaW5jbHVkZSAiQ3Vy
bENvbnRleHQuaCIKICNpbmNsdWRlICJIVFRQSGVhZGVyTWFwLmgiCiAjaW5jbHVkZSA8TmV0d29y
a0xvYWRNZXRyaWNzLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTE2NywxMCAr
MTY3LDggQEAgQ3VybFNoYXJlSGFuZGxlOjpDdXJsU2hhcmVIYW5kbGUoKQogCiBDdXJsU2hhcmVI
YW5kbGU6On5DdXJsU2hhcmVIYW5kbGUoKQogewotICAgIGlmIChtX3NoYXJlSGFuZGxlKSB7Cisg
ICAgaWYgKG1fc2hhcmVIYW5kbGUpCiAgICAgICAgIGN1cmxfc2hhcmVfY2xlYW51cChtX3NoYXJl
SGFuZGxlKTsKLSAgICAgICAgbV9zaGFyZUhhbmRsZSA9IG51bGxwdHI7Ci0gICAgfQogfQogCiB2
b2lkIEN1cmxTaGFyZUhhbmRsZTo6bG9ja0NhbGxiYWNrKENVUkwqLCBjdXJsX2xvY2tfZGF0YSBk
YXRhLCBjdXJsX2xvY2tfYWNjZXNzLCB2b2lkKikKQEAgLTIxMywxMCArMjExLDggQEAgQ3VybE11
bHRpSGFuZGxlOjpDdXJsTXVsdGlIYW5kbGUoKQogCiBDdXJsTXVsdGlIYW5kbGU6On5DdXJsTXVs
dGlIYW5kbGUoKQogewotICAgIGlmIChtX211bHRpSGFuZGxlKSB7CisgICAgaWYgKG1fbXVsdGlI
YW5kbGUpCiAgICAgICAgIGN1cmxfbXVsdGlfY2xlYW51cChtX211bHRpSGFuZGxlKTsKLSAgICAg
ICAgbV9tdWx0aUhhbmRsZSA9IG51bGxwdHI7Ci0gICAgfQogfQogCiBDVVJMTWNvZGUgQ3VybE11
bHRpSGFuZGxlOjphZGRIYW5kbGUoQ1VSTCogaGFuZGxlKQpAQCAtMjU4LDkgKzI1NCw4IEBAIEN1
cmxIYW5kbGU6OkN1cmxIYW5kbGUoKQogCiBDdXJsSGFuZGxlOjp+Q3VybEhhbmRsZSgpCiB7Ci0g
ICAgY2xlYXJVcmwoKTsKLQotICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1faGFuZGxlKTsKKyAgICBp
ZiAobV9oYW5kbGUpCisgICAgICAgIGN1cmxfZWFzeV9jbGVhbnVwKG1faGFuZGxlKTsKIH0KIAog
Y29uc3QgU3RyaW5nIEN1cmxIYW5kbGU6OmVycm9yRGVzY3JpcHRpb24oQ1VSTGNvZGUgZXJyb3JD
b2RlKQpAQCAtMjY4LDE1ICsyNjMsOSBAQCBjb25zdCBTdHJpbmcgQ3VybEhhbmRsZTo6ZXJyb3JE
ZXNjcmlwdGlvbihDVVJMY29kZSBlcnJvckNvZGUpCiAgICAgcmV0dXJuIFN0cmluZyhjdXJsX2Vh
c3lfc3RyZXJyb3IoZXJyb3JDb2RlKSk7CiB9CiAKLWNvbnN0IFN0cmluZyBDdXJsSGFuZGxlOjpl
cnJvckRlc2NyaXB0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZXJyb3JEZXNjcmlwdGlvbiht
X2Vycm9yQ29kZSk7Ci19Ci0KIHZvaWQgQ3VybEhhbmRsZTo6aW5pdGlhbGl6ZSgpCiB7CiAgICAg
Y3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9FUlJPUkJVRkZFUiwgbV9lcnJvckJ1
ZmZlcik7Ci0gICAgY3VybF9lYXN5X3NldG9wdChtX2hhbmRsZSwgQ1VSTE9QVF9QUklWQVRFLCB0
aGlzKTsKIH0KIAogQ1VSTGNvZGUgQ3VybEhhbmRsZTo6cGVyZm9ybSgpCkBAIC0yODcsNyArMjc2
LDcgQEAgQ1VSTGNvZGUgQ3VybEhhbmRsZTo6cGVyZm9ybSgpCiAKIENVUkxjb2RlIEN1cmxIYW5k
bGU6OnBhdXNlKGludCBiaXRtYXNrKQogewotICAgIG1fZXJyb3JDb2RlID0gY3VybF9lYXN5X3Bh
dXNlKG1faGFuZGxlLCBDVVJMUEFVU0VfQUxMKTsKKyAgICBtX2Vycm9yQ29kZSA9IGN1cmxfZWFz
eV9wYXVzZShtX2hhbmRsZSwgYml0bWFzayk7CiAgICAgcmV0dXJuIG1fZXJyb3JDb2RlOwogfQog
CkBAIC0yOTYsMjEgKzI4NSwyMiBAQCB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVNoYXJlSGFuZGxl
KCkKICAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX1NIQVJFLCBDdXJsQ29u
dGV4dDo6c2luZ2xldG9uKCkuc2hhcmVIYW5kbGUoKS5oYW5kbGUoKSk7CiB9CiAKLXZvaWQgQ3Vy
bEhhbmRsZTo6c2V0VXJsKGNvbnN0IFN0cmluZyYgdXJsKQordm9pZCBDdXJsSGFuZGxlOjpzZXRV
cmwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgY2xlYXJVcmwoKTsKKyAgICBVUkwgY3VybFVybCA9
IHVybDsKIAotICAgIC8vIHVybCBpcyBpbiBBU0NJSSBzbyBsYXRpbjEoKSB3aWxsIG9ubHkgY29u
dmVydCBpdCB0byBjaGFyKiB3aXRob3V0IGNoYXJhY3RlciB0cmFuc2xhdGlvbi4KLSAgICBtX3Vy
bCA9IGZhc3RTdHJEdXAodXJsLmxhdGluMSgpLmRhdGEoKSk7Ci0gICAgY3VybF9lYXN5X3NldG9w
dChtX2hhbmRsZSwgQ1VSTE9QVF9VUkwsIG1fdXJsKTsKLX0KKyAgICAvLyBSZW1vdmUgYW55IGZy
YWdtZW50IHBhcnQsIG90aGVyd2lzZSBjdXJsIHdpbGwgc2VuZCBpdCBhcyBwYXJ0IG9mIHRoZSBy
ZXF1ZXN0LgorICAgIGN1cmxVcmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAKLXZvaWQg
Q3VybEhhbmRsZTo6Y2xlYXJVcmwoKQotewotICAgIGlmIChtX3VybCkgewotICAgICAgICBmYXN0
RnJlZShtX3VybCk7Ci0gICAgICAgIG1fdXJsID0gbnVsbHB0cjsKKyAgICAvLyBSZW1vdmUgYW55
IHF1ZXJ5IHBhcnQgc2VudCB0byBhIGxvY2FsIGZpbGUuCisgICAgaWYgKGN1cmxVcmwuaXNMb2Nh
bEZpbGUoKSkgeworICAgICAgICAvLyBCeSBzZXR0aW5nIHRoZSBxdWVyeSB0byBhIG51bGwgc3Ry
aW5nIGl0J2xsIGJlIHJlbW92ZWQuCisgICAgICAgIGlmICghY3VybFVybC5xdWVyeSgpLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGN1cmxVcmwuc2V0UXVlcnkoU3RyaW5nKCkpOwogICAgIH0KKwor
ICAgIC8vIHVybCBpcyBpbiBBU0NJSSBzbyBsYXRpbjEoKSB3aWxsIG9ubHkgY29udmVydCBpdCB0
byBjaGFyKiB3aXRob3V0IGNoYXJhY3RlciB0cmFuc2xhdGlvbi4KKyAgICBjdXJsX2Vhc3lfc2V0
b3B0KG1faGFuZGxlLCBDVVJMT1BUX1VSTCwgY3VybFVybC5zdHJpbmcoKS5sYXRpbjEoKS5kYXRh
KCkpOwogfQogCiB2b2lkIEN1cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXJzKGNvbnN0IEhU
VFBIZWFkZXJNYXAmIGhlYWRlcnMpCkBAIC0zMjAsOCArMzEwLDYgQEAgdm9pZCBDdXJsSGFuZGxl
OjphcHBlbmRSZXF1ZXN0SGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogICAg
ICAgICAgICAgYXV0byYgdmFsdWUgPSBlbnRyeS52YWx1ZTsKICAgICAgICAgICAgIGFwcGVuZFJl
cXVlc3RIZWFkZXIoZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7CiAgICAgICAgIH0KLQotICAgICAg
ICBlbmFibGVSZXF1ZXN0SGVhZGVycygpOwogICAgIH0KIH0KIApAQCAtMzQwLDE3ICszMjgsMzIg
QEAgdm9pZCBDdXJsSGFuZGxlOjphcHBlbmRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBhcHBlbmRSZXF1ZXN0SGVhZGVyKGhlYWRlcik7
CiB9CiAKK3ZvaWQgQ3VybEhhbmRsZTo6cmVtb3ZlUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgLy8gQWRkIGEgaGVhZGVyIHdpdGggbm8gY29udGVudCwgdGhlIGludGVy
bmFsbHkgdXNlZCBoZWFkZXIgd2lsbCBnZXQgZGlzYWJsZWQuIAorICAgIFN0cmluZyBoZWFkZXIo
bmFtZSk7CisgICAgaGVhZGVyLmFwcGVuZCgiOiIpOworCisgICAgYXBwZW5kUmVxdWVzdEhlYWRl
cihoZWFkZXIpOworfQorCiB2b2lkIEN1cmxIYW5kbGU6OmFwcGVuZFJlcXVlc3RIZWFkZXIoY29u
c3QgU3RyaW5nJiBoZWFkZXIpCiB7CisgICAgYm9vbCBuZWVkVG9FbmFibGUgPSBtX3JlcXVlc3RI
ZWFkZXJzLmlzRW1wdHkoKTsKKwogICAgIG1fcmVxdWVzdEhlYWRlcnMuYXBwZW5kKGhlYWRlcik7
CisKKyAgICBpZiAobmVlZFRvRW5hYmxlKQorICAgICAgICBlbmFibGVSZXF1ZXN0SGVhZGVycygp
OwogfQogCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZVJlcXVlc3RIZWFkZXJzKCkKIHsKLSAgICBp
ZiAoIW1fcmVxdWVzdEhlYWRlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNvbnN0IHN0cnVjdCBj
dXJsX3NsaXN0KiBoZWFkZXJzID0gbV9yZXF1ZXN0SGVhZGVycy5oZWFkKCk7Ci0gICAgICAgIGN1
cmxfZWFzeV9zZXRvcHQobV9oYW5kbGUsIENVUkxPUFRfSFRUUEhFQURFUiwgaGVhZGVycyk7Ci0g
ICAgfQorICAgIGlmIChtX3JlcXVlc3RIZWFkZXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3Qgc3RydWN0IGN1cmxfc2xpc3QqIGhlYWRlcnMgPSBtX3JlcXVlc3RIZWFk
ZXJzLmhlYWQoKTsKKyAgICBjdXJsX2Vhc3lfc2V0b3B0KG1faGFuZGxlLCBDVVJMT1BUX0hUVFBI
RUFERVIsIGhlYWRlcnMpOwogfQogCiB2b2lkIEN1cmxIYW5kbGU6OmVuYWJsZUh0dHBHZXRSZXF1
ZXN0KCkKQEAgLTU4NSw3ICs1ODgsNyBAQCBzdGQ6Om9wdGlvbmFsPGxvbmc+IEN1cmxIYW5kbGU6
OmdldFJlc3BvbnNlQ29kZSgpCiAgICAgcmV0dXJuIHJlc3BvbnNlQ29kZTsKIH0KIAotc3RkOjpv
cHRpb25hbDxsb25nIGxvbmc+IEN1cmxIYW5kbGU6OmdldENvbnRlbnRMZW5naHREb3dubG9hZCgp
CitzdGQ6Om9wdGlvbmFsPGxvbmcgbG9uZz4gQ3VybEhhbmRsZTo6Z2V0Q29udGVudExlbmd0aCgp
CiB7CiAgICAgaWYgKCFtX2hhbmRsZSkgewogICAgICAgICBtX2Vycm9yQ29kZSA9IENVUkxFX0ZB
SUxFRF9JTklUOwpAQCAtNjE2LDEyICs2MTksMTEgQEAgc3RkOjpvcHRpb25hbDxsb25nPiBDdXJs
SGFuZGxlOjpnZXRIdHRwQXV0aEF2YWlsKCkKICAgICByZXR1cm4gaHR0cEF1dGhBdmFpbGFibGU7
CiB9CiAKLXN0ZDo6b3B0aW9uYWw8TmV0d29ya0xvYWRNZXRyaWNzPiBDdXJsSGFuZGxlOjpnZXRU
aW1lcygpCitzdGQ6Om9wdGlvbmFsPE5ldHdvcmtMb2FkTWV0cmljcz4gQ3VybEhhbmRsZTo6Z2V0
TmV0d29ya0xvYWRNZXRyaWNzKCkKIHsKICAgICBkb3VibGUgbmFtZUxvb2t1cCA9IDAuMDsKICAg
ICBkb3VibGUgY29ubmVjdCA9IDAuMDsKICAgICBkb3VibGUgYXBwQ29ubmVjdCA9IDAuMDsKLSAg
ICBkb3VibGUgcHJlVHJhbnNmZXIgPSAwLjA7CiAgICAgZG91YmxlIHN0YXJ0VHJhbnNmZXIgPSAw
LjA7CiAKICAgICBpZiAoIW1faGFuZGxlKSB7CkBAIC02NDEsMTAgKzY0Myw2IEBAIHN0ZDo6b3B0
aW9uYWw8TmV0d29ya0xvYWRNZXRyaWNzPiBDdXJsSGFuZGxlOjpnZXRUaW1lcygpCiAgICAgaWYg
KG1fZXJyb3JDb2RlICE9IENVUkxFX09LKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0Owog
Ci0gICAgbV9lcnJvckNvZGUgPSBjdXJsX2Vhc3lfZ2V0aW5mbyhtX2hhbmRsZSwgQ1VSTElORk9f
UFJFVFJBTlNGRVJfVElNRSwgJnByZVRyYW5zZmVyKTsKLSAgICBpZiAobV9lcnJvckNvZGUgIT0g
Q1VSTEVfT0spCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KICAgICBtX2Vycm9yQ29k
ZSA9IGN1cmxfZWFzeV9nZXRpbmZvKG1faGFuZGxlLCBDVVJMSU5GT19TVEFSVFRSQU5TRkVSX1RJ
TUUsICZzdGFydFRyYW5zZmVyKTsKICAgICBpZiAobV9lcnJvckNvZGUgIT0gQ1VSTEVfT0spCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsQ29udGV4dC5oCmluZGV4IDRkZGNmYjEyZGQ2Li43MmUzZGIz
MDY4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxDb250ZXh0LmgKQEAgLTIwNCwxOCArMjA0LDE4IEBAIGNsYXNzIEN1cmxIYW5kbGUgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEN1cmxIYW5kbGUpOwogCiBwdWJsaWM6Ci0gICAgZW51bSBW
ZXJpZnlQZWVyIHsKLSAgICAgICAgVmVyaWZ5UGVlckRpc2FibGUgPSAwTCwKLSAgICAgICAgVmVy
aWZ5UGVlckVuYWJsZSA9IDFMCisgICAgZW51bSBjbGFzcyBWZXJpZnlQZWVyIHsKKyAgICAgICAg
RGlzYWJsZSA9IDBMLAorICAgICAgICBFbmFibGUgPSAxTAogICAgIH07CiAKLSAgICBlbnVtIFZl
cmlmeUhvc3QgewotICAgICAgICBWZXJpZnlIb3N0TG9vc2VOYW1lQ2hlY2sgPSAwLAotICAgICAg
ICBWZXJpZnlIb3N0U3RyaWN0TmFtZUNoZWNrID0gMgorICAgIGVudW0gY2xhc3MgVmVyaWZ5SG9z
dCB7CisgICAgICAgIExvb3NlTmFtZUNoZWNrID0gMCwKKyAgICAgICAgU3RyaWN0TmFtZUNoZWNr
ID0gMgogICAgIH07CiAKICAgICBDdXJsSGFuZGxlKCk7Ci0gICAgfkN1cmxIYW5kbGUoKTsKKyAg
ICB2aXJ0dWFsIH5DdXJsSGFuZGxlKCk7CiAKICAgICBDVVJMKiBoYW5kbGUoKSBjb25zdCB7IHJl
dHVybiBtX2hhbmRsZTsgfQogCkBAIC0yMjgsMjAgKzIyOCwxNSBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRFcnJvckNvZGUoQ1VSTGNvZGUgZXJyb3JDb2RlKSB7IG1fZXJyb3JDb2RlID0gZXJyb3JD
b2RlOyB9CiAKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGVycm9yRGVzY3JpcHRpb24oQ1VSTGNv
ZGUpOwotICAgIGNvbnN0IFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKCkgY29uc3Q7CiAKICAgICB2
b2lkIGVuYWJsZVNoYXJlSGFuZGxlKCk7CiAKLSAgICB2b2lkKiBwcml2YXRlRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJpdmF0ZURhdGE7IH0KLSAgICB2b2lkIHNldFByaXZhdGVEYXRhKHZvaWQq
IHVzZXJEYXRhKSB7IG1fcHJpdmF0ZURhdGEgPSB1c2VyRGF0YTsgfQotCi0gICAgdm9pZCBzZXRV
cmwoY29uc3QgU3RyaW5nJik7Ci0gICAgY29uc3QgY2hhciogdXJsKCkgY29uc3QgeyByZXR1cm4g
bV91cmw7IH0KKyAgICB2b2lkIHNldFVybChjb25zdCBVUkwmKTsKIAogICAgIHZvaWQgYXBwZW5k
UmVxdWVzdEhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYpOwotICAgIHZvaWQgYXBwZW5kUmVx
dWVzdEhlYWRlcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVu
ZFJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBlbmFibGVSZXF1ZXN0SGVh
ZGVycygpOworICAgIHZvaWQgYXBwZW5kUmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHZvaWQgYXBwZW5kUmVxdWVzdEhlYWRlcihjb25z
dCBTdHJpbmcmIG5hbWUpOworICAgIHZvaWQgcmVtb3ZlUmVxdWVzdEhlYWRlcihjb25zdCBTdHJp
bmcmIG5hbWUpOwogCiAgICAgdm9pZCBlbmFibGVIdHRwR2V0UmVxdWVzdCgpOwogICAgIHZvaWQg
ZW5hYmxlSHR0cEhlYWRSZXF1ZXN0KCk7CkBAIC0yODYsOSArMjgxLDkgQEAgcHVibGljOgogICAg
IFVSTCBnZXRFZmZlY3RpdmVVUkwoKTsKICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBnZXRQ
cmltYXJ5UG9ydCgpOwogICAgIHN0ZDo6b3B0aW9uYWw8bG9uZz4gZ2V0UmVzcG9uc2VDb2RlKCk7
Ci0gICAgc3RkOjpvcHRpb25hbDxsb25nIGxvbmc+IGdldENvbnRlbnRMZW5naHREb3dubG9hZCgp
OworICAgIHN0ZDo6b3B0aW9uYWw8bG9uZyBsb25nPiBnZXRDb250ZW50TGVuZ3RoKCk7CiAgICAg
c3RkOjpvcHRpb25hbDxsb25nPiBnZXRIdHRwQXV0aEF2YWlsKCk7Ci0gICAgc3RkOjpvcHRpb25h
bDxOZXR3b3JrTG9hZE1ldHJpY3M+IGdldFRpbWVzKCk7CisgICAgc3RkOjpvcHRpb25hbDxOZXR3
b3JrTG9hZE1ldHJpY3M+IGdldE5ldHdvcmtMb2FkTWV0cmljcygpOwogCiAgICAgc3RhdGljIGxv
bmcgbG9uZyBtYXhDdXJsT2ZmVCgpOwogCkBAIC0yOTgsMTYgKzI5MywxMyBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIGNsZWFyVXJsKCk7Ci0KKyAgICB2b2lkIGVuYWJs
ZVJlcXVlc3RIZWFkZXJzKCk7CiAgICAgc3RhdGljIGludCBleHBlY3RlZFNpemVPZkN1cmxPZmZU
KCk7CiAKICAgICBDVVJMKiBtX2hhbmRsZSB7IG51bGxwdHIgfTsKICAgICBjaGFyIG1fZXJyb3JC
dWZmZXJbQ1VSTF9FUlJPUl9TSVpFXSB7IH07CiAgICAgQ1VSTGNvZGUgbV9lcnJvckNvZGU7CiAK
LSAgICBjaGFyKiBtX3VybCB7IG51bGxwdHIgfTsKLSAgICB2b2lkKiBtX3ByaXZhdGVEYXRhIHsg
bnVsbHB0ciB9OwogICAgIEN1cmxTTGlzdCBtX3JlcXVlc3RIZWFkZXJzOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2FkLmNw
cAppbmRleCBiYmY0ZGExOWNmZC4uZjViMzNhMDIzNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCkBAIC0xMTUsNyAr
MTE1LDYgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OnNldHVwUmVxdWVzdCgpCiAgICAgbV9jdXJsSGFu
ZGxlLmVuYWJsZVNoYXJlSGFuZGxlKCk7CiAKICAgICBtX2N1cmxIYW5kbGUuc2V0VXJsKG1fdXJs
KTsKLSAgICBtX2N1cmxIYW5kbGUuc2V0UHJpdmF0ZURhdGEodGhpcyk7CiAgICAgbV9jdXJsSGFu
ZGxlLnNldEhlYWRlckNhbGxiYWNrRnVuY3Rpb24oaGVhZGVyQ2FsbGJhY2ssIHRoaXMpOwogICAg
IG1fY3VybEhhbmRsZS5zZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24od3JpdGVDYWxsYmFjaywgdGhp
cyk7CiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZUZvbGxvd0xvY2F0aW9uKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIu
Y3BwCmluZGV4IGQzOGM5MjAwNTJjLi4zZTY4MmIyNDkwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKQEAg
LTcyLDcgKzcyLDcgQEAgaW50IEN1cmxTU0xWZXJpZmllcjo6Y2VydFZlcmlmeUNhbGxiYWNrKGlu
dCBvaywgWDUwOV9TVE9SRV9DVFgqIHN0b3JlQ3R4KQogICAgICAgICAvLyBpZiB0aGUgaG9zdCBh
bmQgdGhlIGNlcnRpZmljYXRlIGFyZSBzdG9yZWQgZm9yIHRoZSBjdXJyZW50IGhhbmRsZSB0aGF0
IG1lYW5zIGlzIGVuYWJsZWQsCiAgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgdG8gY3VybCB2ZXJp
ZmllcyB0aGUgYXV0aGVudGljaXR5IG9mIHRoZSBwZWVyJ3MgY2VydGlmaWNhdGUKICAgICAgICAg
aWYgKHZlcmlmaWVyLT5tX2N1cmxIYW5kbGUpCi0gICAgICAgICAgICB2ZXJpZmllci0+bV9jdXJs
SGFuZGxlLT5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5kbGU6OlZlcmlmeVBlZXJEaXNhYmxlKTsK
KyAgICAgICAgICAgIHZlcmlmaWVyLT5tX2N1cmxIYW5kbGUtPnNldFNzbFZlcmlmeVBlZXIoQ3Vy
bEhhbmRsZTo6VmVyaWZ5UGVlcjo6RGlzYWJsZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG9rOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNl
SGFuZGxlQ3VybERlbGVnYXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKaW5kZXggZWYyOTk3Yjc3MmUuLmZj
NzAxOWM1NmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZS5jcHAKQEAgLTE4
MCwyNCArMTgwLDggQEAgdm9pZCBSZXNvdXJjZUhhbmRsZUN1cmxEZWxlZ2F0ZTo6c2V0dXBSZXF1
ZXN0KCkKIHsKICAgICBDdXJsQ29udGV4dCYgY29udGV4dCA9IEN1cmxDb250ZXh0OjpzaW5nbGV0
b24oKTsKIAotICAgIFVSTCB1cmwgPSBtX2ZpcnN0UmVxdWVzdC51cmwoKTsKLQotICAgIC8vIFJl
bW92ZSBhbnkgZnJhZ21lbnQgcGFydCwgb3RoZXJ3aXNlIGN1cmwgd2lsbCBzZW5kIGl0IGFzIHBh
cnQgb2YgdGhlIHJlcXVlc3QuCi0gICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwot
Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9IHVybC5zdHJpbmcoKTsKLQogICAgIG1fY3VybEhhbmRs
ZS5pbml0aWFsaXplKCk7CiAKLSAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpIHsKLSAgICAgICAg
Ly8gUmVtb3ZlIGFueSBxdWVyeSBwYXJ0IHNlbnQgdG8gYSBsb2NhbCBmaWxlLgotICAgICAgICBp
ZiAoIXVybC5xdWVyeSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gQnkgc2V0dGluZyB0
aGUgcXVlcnkgdG8gYSBudWxsIHN0cmluZyBpdCdsbCBiZSByZW1vdmVkLgotICAgICAgICAgICAg
dXJsLnNldFF1ZXJ5KFN0cmluZygpKTsKLSAgICAgICAgICAgIHVybFN0cmluZyA9IHVybC5zdHJp
bmcoKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIGlmIChtX2RlZmVyc0xvYWRpbmcpIHsKICAg
ICAgICAgQ1VSTGNvZGUgZXJyb3IgPSBtX2N1cmxIYW5kbGUucGF1c2UoQ1VSTFBBVVNFX0FMTCk7
CiAgICAgICAgIC8vIElmIHdlIGRpZCBub3QgcGF1c2UgdGhlIGhhbmRsZSwgd2Ugd291bGQgQVNT
RVJUIGluIHRoZQpAQCAtMjEyLDkgKzE5Niw4IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGU6OnNldHVwUmVxdWVzdCgpCiAKICAgICBhdXRvJiBzc2xIYW5kbGUgPSBDdXJsQ29udGV4
dDo6c2luZ2xldG9uKCkuc3NsSGFuZGxlKCk7CiAKLSAgICBtX2N1cmxIYW5kbGUuc2V0U3NsVmVy
aWZ5UGVlcihDdXJsSGFuZGxlOjpWZXJpZnlQZWVyRW5hYmxlKTsKLSAgICBtX2N1cmxIYW5kbGUu
c2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0U3RyaWN0TmFtZUNoZWNrKTsK
LSAgICBtX2N1cmxIYW5kbGUuc2V0UHJpdmF0ZURhdGEodGhpcyk7CisgICAgbV9jdXJsSGFuZGxl
LnNldFNzbFZlcmlmeVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlcjo6RW5hYmxlKTsKKyAgICBt
X2N1cmxIYW5kbGUuc2V0U3NsVmVyaWZ5SG9zdChDdXJsSGFuZGxlOjpWZXJpZnlIb3N0OjpTdHJp
Y3ROYW1lQ2hlY2spOwogICAgIG1fY3VybEhhbmRsZS5zZXRXcml0ZUNhbGxiYWNrRnVuY3Rpb24o
ZGlkUmVjZWl2ZURhdGFDYWxsYmFjaywgdGhpcyk7CiAgICAgbV9jdXJsSGFuZGxlLnNldEhlYWRl
ckNhbGxiYWNrRnVuY3Rpb24oZGlkUmVjZWl2ZUhlYWRlckNhbGxiYWNrLCB0aGlzKTsKICAgICBt
X2N1cmxIYW5kbGUuZW5hYmxlQXV0b1JlZmVyZXIoKTsKQEAgLTIyNCw3ICsyMDcsNyBAQCB2b2lk
IFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpzZXR1cFJlcXVlc3QoKQogICAgIG1fY3VybEhh
bmRsZS5lbmFibGVUaW1lb3V0KCk7CiAgICAgbV9jdXJsSGFuZGxlLmVuYWJsZUFsbG93ZWRQcm90
b2NvbHMoKTsKIAotICAgIGF1dG8gc3NsQ2xpZW50Q2VydGlmaWNhdGUgPSBzc2xIYW5kbGUuZ2V0
U1NMQ2xpZW50Q2VydGlmaWNhdGUodXJsLmhvc3QoKSk7CisgICAgYXV0byBzc2xDbGllbnRDZXJ0
aWZpY2F0ZSA9IHNzbEhhbmRsZS5nZXRTU0xDbGllbnRDZXJ0aWZpY2F0ZShtX2ZpcnN0UmVxdWVz
dC51cmwoKS5ob3N0KCkpOwogICAgIGlmIChzc2xDbGllbnRDZXJ0aWZpY2F0ZSkgewogICAgICAg
ICBtX2N1cmxIYW5kbGUuc2V0U3NsQ2VydChzc2xDbGllbnRDZXJ0aWZpY2F0ZS0+Zmlyc3QudXRm
OCgpLmRhdGEoKSk7CiAgICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xDZXJ0VHlwZSgiUDEyIik7
CkBAIC0yMzIsMTQgKzIxNSwxNCBAQCB2b2lkIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpz
ZXR1cFJlcXVlc3QoKQogICAgIH0KIAogICAgIGlmIChzc2xIYW5kbGUuc2hvdWxkSWdub3JlU1NM
RXJyb3JzKCkpCi0gICAgICAgIG1fY3VybEhhbmRsZS5zZXRTc2xWZXJpZnlQZWVyKEN1cmxIYW5k
bGU6OlZlcmlmeVBlZXJEaXNhYmxlKTsKKyAgICAgICAgbV9jdXJsSGFuZGxlLnNldFNzbFZlcmlm
eVBlZXIoQ3VybEhhbmRsZTo6VmVyaWZ5UGVlcjo6RGlzYWJsZSk7CiAgICAgZWxzZQogICAgICAg
ICBtX2N1cmxIYW5kbGUuc2V0U3NsQ3R4Q2FsbGJhY2tGdW5jdGlvbih3aWxsU2V0dXBTc2xDdHhD
YWxsYmFjaywgdGhpcyk7CiAKICAgICBtX2N1cmxIYW5kbGUuc2V0Q0FDZXJ0UGF0aChzc2xIYW5k
bGUuZ2V0Q0FDZXJ0UGF0aCgpKTsKIAogICAgIG1fY3VybEhhbmRsZS5lbmFibGVBY2NlcHRFbmNv
ZGluZygpOwotICAgIG1fY3VybEhhbmRsZS5zZXRVcmwodXJsU3RyaW5nKTsKKyAgICBtX2N1cmxI
YW5kbGUuc2V0VXJsKG1fZmlyc3RSZXF1ZXN0LnVybCgpKTsKICAgICBtX2N1cmxIYW5kbGUuZW5h
YmxlQ29va2llSmFySWZFeGlzdHMoKTsKIAogICAgIGlmIChtX2N1c3RvbUhUVFBIZWFkZXJGaWVs
ZHMuc2l6ZSgpKQpAQCAtMjU5LDggKzI0Miw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVs
ZWdhdGU6OnNldHVwUmVxdWVzdCgpCiAgICAgICAgIHNldHVwUFVUKCk7CiAgICAgfQogCi0gICAg
bV9jdXJsSGFuZGxlLmVuYWJsZVJlcXVlc3RIZWFkZXJzKCk7Ci0KICAgICBhcHBseUF1dGhlbnRp
Y2F0aW9uKCk7CiAKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlUHJveHlJZkV4aXN0cygpOwpAQCAt
NTYzLDcgKzU0NCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OnNldHVwUFVU
KCkKICAgICBtX2N1cmxIYW5kbGUuZW5hYmxlSHR0cFB1dFJlcXVlc3QoKTsKIAogICAgIC8vIERp
c2FibGUgdGhlIEV4cGVjdDogMTAwIGNvbnRpbnVlIGhlYWRlcgotICAgIG1fY3VybEhhbmRsZS5h
cHBlbmRSZXF1ZXN0SGVhZGVyKCJFeHBlY3Q6Iik7CisgICAgbV9jdXJsSGFuZGxlLnJlbW92ZVJl
cXVlc3RIZWFkZXIoIkV4cGVjdCIpOwogCiAgICAgc2l6ZV90IG51bUVsZW1lbnRzID0gZ2V0Rm9y
bUVsZW1lbnRzQ291bnQoKTsKICAgICBpZiAoIW51bUVsZW1lbnRzKQpAQCAtNjUxLDcgKzYzMiw3
IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVDdXJsRGVsZWdhdGU6OmFwcGx5QXV0aGVudGljYXRpb24o
KQogTmV0d29ya0xvYWRNZXRyaWNzIFJlc291cmNlSGFuZGxlQ3VybERlbGVnYXRlOjpnZXROZXR3
b3JrTG9hZE1ldHJpY3MoKQogewogICAgIE5ldHdvcmtMb2FkTWV0cmljcyBuZXR3b3JrTG9hZE1l
dHJpY3M7Ci0gICAgaWYgKGF1dG8gbWV0cmljcyA9IG1fY3VybEhhbmRsZS5nZXRUaW1lcygpKQor
ICAgIGlmIChhdXRvIG1ldHJpY3MgPSBtX2N1cmxIYW5kbGUuZ2V0TmV0d29ya0xvYWRNZXRyaWNz
KCkpCiAgICAgICAgIG5ldHdvcmtMb2FkTWV0cmljcyA9ICptZXRyaWNzOwogCiAgICAgcmV0dXJu
IG5ldHdvcmtMb2FkTWV0cmljczsKQEAgLTY5OSw2ICs2ODAsNyBAQCBzaXplX3QgUmVzb3VyY2VI
YW5kbGVDdXJsRGVsZWdhdGU6OmRpZFJlY2VpdmVIZWFkZXIoU3RyaW5nJiYgaGVhZGVyKQogICAg
ICAgICAgICAgLy8gQ29tZXMgaGVyZSB3aGVuIHJlY2VpdmluZyAyMDAgQ29ubmVjdGlvbiBFc3Rh
Ymxpc2hlZC4gSnVzdCByZXR1cm4uCiAgICAgICAgICAgICByZXR1cm4gaGVhZGVyLmxlbmd0aCgp
OwogICAgICAgICB9CisKICAgICAgICAgaWYgKGlzSHR0cEluZm8oaHR0cENvZGUpKSB7CiAgICAg
ICAgICAgICAvLyBKdXN0IHJldHVybiB3aGVuIHJlY2VpdmluZyBodHRwIGluZm8sIGUuZy4gSFRU
UC8xLjEgMTAwIENvbnRpbnVlLgogICAgICAgICAgICAgLy8gSWYgbm90LCB0aGUgcmVxdWVzdCBt
aWdodCBiZSBjYW5jZWxsZWQsIGJlY2F1c2UgdGhlIE1JTUUgdHlwZSB3aWxsIGJlIGVtcHR5IGZv
ciB0aGlzIHJlc3BvbnNlLgpAQCAtNzA2LDcgKzY4OCw3IEBAIHNpemVfdCBSZXNvdXJjZUhhbmRs
ZUN1cmxEZWxlZ2F0ZTo6ZGlkUmVjZWl2ZUhlYWRlcihTdHJpbmcmJiBoZWFkZXIpCiAgICAgICAg
IH0KIAogICAgICAgICBsb25nIGxvbmcgY29udGVudExlbmd0aCA9IDA7Ci0gICAgICAgIGlmIChh
dXRvIGxlbmd0aCA9IG1fY3VybEhhbmRsZS5nZXRDb250ZW50TGVuZ2h0RG93bmxvYWQoKSkKKyAg
ICAgICAgaWYgKGF1dG8gbGVuZ3RoID0gbV9jdXJsSGFuZGxlLmdldENvbnRlbnRMZW5ndGgoKSkK
ICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGggPSAqbGVuZ3RoOwogCiAgICAgICAgIHVpbnQxNl90
IGNvbm5lY3RQb3J0ID0gMDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>