<?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>162689</bug_id>
          
          <creation_ts>2016-09-28 10:50:27 -0700</creation_ts>
          <short_desc>B3 should support trapping memory accesses</short_desc>
          <delta_ts>2016-09-30 17:11:35 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>162692</dependson>
    
    <dependson>162699</dependson>
          <blocked>162688</blocked>
    
    <blocked>162693</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1234448</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 10:50:27 -0700</bug_when>
    <thetext>WebAssembly can be made to run faster if you let virtual memory do some safety checks for you.  But that means that B3 needs to know that memory accesses can side-exit in an observable way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1234449</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-28 10:50:54 -0700</bug_when>
    <thetext>Keith: which WebAssembly bug should this block?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235338</commentid>
    <comment_count>2</comment_count>
      <attachid>290363</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 12:29:11 -0700</bug_when>
    <thetext>Created attachment 290363
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235458</commentid>
    <comment_count>3</comment_count>
      <attachid>290399</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 15:21:40 -0700</bug_when>
    <thetext>Created attachment 290399
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235480</commentid>
    <comment_count>4</comment_count>
      <attachid>290402</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 16:03:50 -0700</bug_when>
    <thetext>Created attachment 290402
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235481</commentid>
    <comment_count>5</comment_count>
      <attachid>290402</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-09-30 16:07:18 -0700</bug_when>
    <thetext>Comment on attachment 290402
the patch

r=me

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:212
&gt; +        ArgPromise(ArgPromise&amp;&amp; other)
&gt; +        {
&gt; +            swap(other);
&gt; +        }
&gt; +        
&gt; +        ArgPromise&amp; operator=(ArgPromise&amp;&amp; other)
&gt; +        {
&gt; +            swap(other);
&gt; +            return *this;
&gt; +        }

It is generally an anti-pattern for move construction or assignment to swap.

If ArgPromise had non-POD data, which benefited from swap, its destructors would run at the wrong time.

Since ArgPromise has only POD data, there&apos;s no problem, but also no reason to swap.

I recommend simple assignment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235486</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 16:13:40 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 290402 [details]
&gt; the patch
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:212
&gt; &gt; +        ArgPromise(ArgPromise&amp;&amp; other)
&gt; &gt; +        {
&gt; &gt; +            swap(other);
&gt; &gt; +        }
&gt; &gt; +        
&gt; &gt; +        ArgPromise&amp; operator=(ArgPromise&amp;&amp; other)
&gt; &gt; +        {
&gt; &gt; +            swap(other);
&gt; &gt; +            return *this;
&gt; &gt; +        }
&gt; 
&gt; It is generally an anti-pattern for move construction or assignment to swap.
&gt; 
&gt; If ArgPromise had non-POD data, which benefited from swap, its destructors
&gt; would run at the wrong time.
&gt; 
&gt; Since ArgPromise has only POD data, there&apos;s no problem, but also no reason
&gt; to swap.
&gt; 
&gt; I recommend simple assignment.

But there is a reason to swap!  See:

        ~ArgPromise()
        {
            if (m_wasConsumed)
                RELEASE_ASSERT(m_wasWrapped);
        }

I get that the fields of ArgPromise look like PODs, but that doesn&apos;t matter, since they&apos;re used to implement very un-POD-like logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1235507</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-30 17:11:35 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/206694</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290363</attachid>
            <date>2016-09-30 12:29:11 -0700</date>
            <delta_ts>2016-09-30 15:21:40 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26338</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuY3BwCShyZXZpc2lvbiAyMDY1OTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsOCBAQCB2b2lkIEtpbmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAg
ICBvdXQucHJpbnQoIjwiKTsKICAgICBpZiAoaXNDaGlsbCgpKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJDaGlsbCIpOworICAgIGlmIChpc1Nsb3BweVRyYXBwaW5nKCkpCisgICAgICAgIG91
dC5wcmludChjb21tYSwgIlNsb3BweVRyYXBwaW5nIik7CiAgICAgb3V0LnByaW50KCI+Iik7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNLaW5kLmgJKHJldmlzaW9uIDIwNjU5NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjAs
OCArNjAsOSBAQCBjbGFzcyBLaW5kIHsKIHB1YmxpYzoKICAgICBLaW5kKE9wY29kZSBvcGNvZGUp
CiAgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1faXNDaGlsbChmYWxzZSkK
KyAgICAgICAgLCBtX2lzU2xvcHB5VHJhcHBpbmcoZmFsc2UpCiAgICAgewotICAgICAgICB1LmJp
dHMgPSAwOwogICAgIH0KICAgICAKICAgICBLaW5kKCkKQEAgLTcyLDcgKzczLDcgQEAgcHVibGlj
OgogICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQogICAgIHZv
aWQgc2V0T3Bjb2RlKE9wY29kZSBvcGNvZGUpIHsgbV9vcGNvZGUgPSBvcGNvZGU7IH0KICAgICAK
LSAgICBib29sIGhhc0V4dHJhQml0cygpIGNvbnN0IHsgcmV0dXJuICEhdS5iaXRzOyB9CisgICAg
Ym9vbCBoYXNFeHRyYUJpdHMoKSBjb25zdCB7IHJldHVybiBtX2lzQ2hpbGwgfHwgbV9pc1Nsb3Bw
eVRyYXBwaW5nOyB9CiAgICAgCiAgICAgLy8gQ2hpbGwgYml0LiBUaGlzIGFwcGxpZXMgdG8gZGl2
aXNpb24tYmFzZWQgYXJpdGhtZXRpYyBvcHMsIHdoaWNoIG1heSB0cmFwIG9uIHNvbWUKICAgICAv
LyBwbGF0Zm9ybXMgb3IgZXhoaWJpdCBiaXphcnJlIGJlaGF2aW9yIHdoZW4gcGFzc2VkIGNlcnRh
aW4gaW5wdXRzLiBUaGUgbm9uLWNoaWxsCkBAIC0xMDAsMTIgKzEwMSw1MSBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIGJvb2wgaXNDaGlsbCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaGFz
SXNDaGlsbCgpICYmIHUuaXNDaGlsbDsKKyAgICAgICAgcmV0dXJuIG1faXNDaGlsbDsKICAgICB9
CiAgICAgdm9pZCBzZXRJc0NoaWxsKGJvb2wgaXNDaGlsbCkKICAgICB7CiAgICAgICAgIEFTU0VS
VChoYXNJc0NoaWxsKCkpOwotICAgICAgICB1LmlzQ2hpbGwgPSBpc0NoaWxsOworICAgICAgICBt
X2lzQ2hpbGwgPSBpc0NoaWxsOworICAgIH0KKyAgICAKKyAgICAvLyBTbG9wcHlUcmFwcGluZyBi
aXQuIFRoaXMgYXBwbGllcyB0byBtZW1vcnkgYWNjZXNzIG9wcy4gSXQgbWVhbnMgdGhhdCB0aGUg
aW5zdHJ1Y3Rpb24gY291bGQKKyAgICAvLyB0cmFwIGFzIHBhcnQgb2Ygc29tZSBjaGVjayBpdCBw
ZXJmb3JtcywgYW5kIHRoYXQgd2UgbWVhbiB0byBtYWtlIHRoaXMgb2JzZXJ2YWJsZS4gVGhpcwor
ICAgIC8vIGN1cnJlbnRseSBvbmx5IGFwcGxpZXMgdG8gbWVtb3J5IGFjY2Vzc2VzIChsb2FkcyBh
bmQgc3RvcmVzKS4gV2Ugc2F5IHRoYXQgdGhpcyBpcyBhIHNsb3BweQorICAgIC8vIHRyYXBwaW5n
IGJpdCBiZWNhdXNlIHlvdSBkb24ndCBnZXQgdG8gZmluZCBvdXQgd2hlcmUgaW4gdGhlIFByb2Nl
ZHVyZSB0aGUgdHJhcCBoYXBwZW5lZC4gSWYKKyAgICAvLyB5b3UgdHJ5IHRvIHdvcmsgaXQgb3V0
IHVzaW5nIE9yaWdpbiwgeW91J2xsIGhhdmUgYSBiYWQgdGltZSBiZWNhdXNlIHRoZSBpbnN0cnVj
dGlvbiBzZWxlY3RvcgorICAgIC8vIGlzIHRvbyBzbG9wcHkgd2l0aCBPcmlnaW4oKS4KKyAgICBi
b29sIGhhc0lzU2xvcHB5VHJhcHBpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICht
X29wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNl
IExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAg
ICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29s
IGlzU2xvcHB5VHJhcHBpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNTbG9w
cHlUcmFwcGluZzsKKyAgICB9CisgICAgdm9pZCBzZXRJc1Nsb3BweVRyYXBwaW5nKGJvb2wgaXNT
bG9wcHlUcmFwcGluZykKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNJc1Nsb3BweVRyYXBwaW5n
KCkpOworICAgICAgICBtX2lzU2xvcHB5VHJhcHBpbmcgPSBpc1Nsb3BweVRyYXBwaW5nOworICAg
IH0KKyAgICAKKyAgICAvLyBUZWxscyB5b3UgaWYgdGhlIGtpbmQgaW5kaWNhdGVzIHRoYXQgdGhl
IG9wZXJhdGlvbiBpcyBhbnkga2luZCBvZiB0cmFwcGluZyAoc2xvcHB5IG9yCisgICAgLy8gb3Ro
ZXJ3aXNlKS4KKyAgICBib29sIGlzVHJhcHBpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzU2xvcHB5VHJhcHBpbmcoKTsKICAgICB9CiAgICAgCiAgICAgLy8gUnVsZXMgZm9yIGFk
ZGluZyBuZXcgcHJvcGVydGllczoKQEAgLTExOSw3ICsxNTksOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEtpbmQmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fb3Bjb2RlID09IG90aGVyLm1fb3Bjb2RlCi0gICAgICAgICAgICAmJiB1LmJpdHMgPT0g
b3RoZXIudS5iaXRzOworICAgICAgICAgICAgJiYgbV9pc0NoaWxsID09IG90aGVyLm1faXNDaGls
bAorICAgICAgICAgICAgJiYgbV9pc1Nsb3BweVRyYXBwaW5nID09IG90aGVyLm1faXNTbG9wcHlU
cmFwcGluZzsKICAgICB9CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEtpbmQmIG90
aGVyKSBjb25zdApAQCAtMTMzLDEzICsxNzQsMTMgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
Ly8gSXQncyBhbG1vc3QgY2VydGFpbmx5IG1vcmUgaW1wb3J0YW50IHRoYXQgdGhpcyBoYXNoIGZ1
bmN0aW9uIGlzIGNoZWFwIHRvIGNvbXB1dGUgdGhhbgogICAgICAgICAvLyBhbnl0aGluZyBlbHNl
LiBXZSBjYW4gbGl2ZSB3aXRoIHNvbWUga2luZCBoYXNoIGNvbGxpc2lvbnMuCi0gICAgICAgIHJl
dHVybiBtX29wY29kZSArIHUuYml0cyAqIDExMTsKKyAgICAgICAgcmV0dXJuIG1fb3Bjb2RlICsg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2lzQ2hpbGwpIDw8IDE2KSArIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9pc1Nsb3BweVRyYXBwaW5nKSA8PCA3KTsKICAgICB9CiAgICAgCiAgICAgS2lu
ZChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAgICAgICAgIDogbV9vcGNvZGUoT29w
cykKICAgICB7Ci0gICAgICAgIHUuYml0cyA9IDE7CisgICAgICAgIG1fYml0cyA9IDE7CiAgICAg
fQogICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdApAQCAtMTQ5
LDEwICsxOTAsOCBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIE9wY29kZSBtX29wY29k
ZTsKLSAgICB1bmlvbiB7Ci0gICAgICAgIGJvb2wgaXNDaGlsbDsKLSAgICAgICAgdWludDE2X3Qg
Yml0czsKLSAgICB9IHU7CisgICAgYm9vbCBtX2lzQ2hpbGwgOiAxOworICAgIGJvb2wgbV9pc1Ns
b3BweVRyYXBwaW5nIDogMTsKIH07CiAKIC8vIEZvciBldmVyeSBmbGFnICdmb28nIHlvdSBhZGQs
IGl0J3MgY3VzdG9tYXJ5IHRvIGNyZWF0ZSBhIEtpbmQgQjM6OmZvbyhLaW5kKSBmdW5jdGlvbiB0
aGF0IG1ha2VzCkBAIC0xNjgsNiArMjA3LDEyIEBAIGlubGluZSBLaW5kIGNoaWxsKEtpbmQga2lu
ZCkKICAgICByZXR1cm4ga2luZDsKIH0KIAoraW5saW5lIEtpbmQgc2xvcHB5VHJhcHBpbmcoS2lu
ZCBraW5kKQoreworICAgIGtpbmQuc2V0SXNTbG9wcHlUcmFwcGluZyh0cnVlKTsKKyAgICByZXR1
cm4ga2luZDsKK30KKwogc3RydWN0IEtpbmRIYXNoIHsKICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBLaW5kJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KICAgICBzdGF0aWMgYm9v
bCBlcXVhbChjb25zdCBLaW5kJiBhLCBjb25zdCBLaW5kJiBiKSB7IHJldHVybiBhID09IGI7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lv
biAyMDY1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg5LDYgKzE4OSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlVG9Mb2NrKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIH5BcmdQcm9taXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fd2FzQ29u
c3VtZWQpCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV93YXNXcmFwcGVkKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRJc1RyYXBwaW5nKGJvb2wgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1faXNUcmFwcGluZyA9IHZhbHVlOworICAgICAgICB9
CiAKICAgICAgICAgc3RhdGljIEFyZ1Byb21pc2UgdG1wKFZhbHVlKiB2YWx1ZSkKICAgICAgICAg
ewpAQCAtMjEzLDYgKzIyNCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgQXJnIGNvbnN1bWUoTG93
ZXJUb0FpciYgbG93ZXIpIGNvbnN0CiAgICAgICAgIHsKKyAgICAgICAgICAgIG1fd2FzQ29uc3Vt
ZWQgPSB0cnVlOwogICAgICAgICAgICAgaWYgKCFtX2FyZyAmJiBtX3ZhbHVlKQogICAgICAgICAg
ICAgICAgIHJldHVybiBsb3dlci50bXAobV92YWx1ZSk7CiAgICAgICAgICAgICBpZiAobV92YWx1
ZSkKQEAgLTIyMCw2ICsyMzIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2Fy
ZzsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
cz4KKyAgICAgICAgSW5zdCBpbnN0KEFyZ3MmJi4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAg
ICAgICBJbnN0IHJlc3VsdChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICAg
ICAgaWYgKG1faXNUcmFwcGluZykKKyAgICAgICAgICAgICAgICByZXN1bHQua2luZC50cmFwcyA9
IHRydWU7CisgICAgICAgICAgICBtX3dhc1dyYXBwZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICAv
LyBUaHJlZSBmb3JtczoKICAgICAgICAgLy8gRXZlcnl0aGluZyBudWxsOiBpbnZhbGlkLgpAQCAt
MjI4LDYgKzI1MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEFyZyBub24tbnVsbCwgdmFsdWUg
bm9uLW51bGw6IHVzZSB0aGUgYXJnLCBsb2NrIHRoZSB2YWx1ZS4KICAgICAgICAgQXJnIG1fYXJn
OwogICAgICAgICBWYWx1ZSogbV92YWx1ZTsKKyAgICAgICAgYm9vbCBtX3dhc0NvbnN1bWVkIHsg
ZmFsc2UgfTsKKyAgICAgICAgYm9vbCBtX3dhc1dyYXBwZWQgeyBmYWxzZSB9OworICAgICAgICBi
b29sIG1faXNUcmFwcGluZyB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIC8vIENvbnNpZGVyIHVz
aW5nIHRtcFByb21pc2UoKSBpbiBjYXNlcyB3aGVyZSB5b3UgYXJlbid0IHN1cmUgdGhhdCB5b3Ug
d2FudCB0byBwaW4gdGhlIHZhbHVlIHlldC4KQEAgLTI0NiwxMSArMjcxLDEyIEBAIHByaXZhdGU6
CiAgICAgLy8gICAgICAgICBhcHBlbmQoRm9vLCB0bXAoYmFyKSkKICAgICAvLwogICAgIC8vIElk
aW9tICMzOiBTYW1lIGFzIElkaW9tICMyLCBidXQgdXNpbmcgdG1wUHJvbWlzZS4gTm90aWNlIHRo
YXQgdGhpcyBjYWxscyBjb25zdW1lKCkgb25seSBhZnRlcgotICAgIC8vIGl0J3Mgc3VyZSBpdCB3
aWxsIHVzZSB0aGUgdG1wLiBUaGF0J3MgZGVsaWJlcmF0ZS4KKyAgICAvLyBpdCdzIHN1cmUgaXQg
d2lsbCB1c2UgdGhlIHRtcC4gVGhhdCdzIGRlbGliZXJhdGUuIEFsc28gbm90ZSB0aGF0IHlvdSdy
ZSByZXF1aXJlZCB0byBwYXNzIGFueQorICAgIC8vIEluc3QgeW91IGNyZWF0ZSB3aXRoIGNvbnN1
bWVkIHByb21pc2VzIHRocm91Z2ggdGhhdCBwcm9taXNlJ3MgaW5zdCgpIGZ1bmN0aW9uLgogICAg
IC8vCiAgICAgLy8gICAgIEFyZ1Byb21pc2UgcHJvbWlzZSA9IHRtcFByb21pc2UoYmFyKTsKICAg
ICAvLyAgICAgaWYgKGlzVmFsaWRGb3JtKEZvbywgcHJvbWlzZS5raW5kKCkpKQotICAgIC8vICAg
ICAgICAgYXBwZW5kKEZvbywgcHJvbWlzZS5jb25zdW1lKCp0aGlzKSkKKyAgICAvLyAgICAgICAg
IGFwcGVuZChwcm9taXNlLmluc3QoRm9vLCBwcm9taXNlLmNvbnN1bWUoKnRoaXMpKSkKICAgICAv
LwogICAgIC8vIEluIGJvdGggaWRpb20gIzIgYW5kIGlkaW9tICMzLCB3ZSBkb24ndCBwaW4gdGhl
IHZhbHVlIHRvIGEgdGVtcG9yYXJ5IGV4Y2VwdCB3aGVuIHdlIGFjdHVhbGx5CiAgICAgLy8gZW1p
dCB0aGUgaW5zdHJ1Y3Rpb24uIEJvdGggdG1wKCkgYW5kIHRtcFByb21pc2UoKS5jb25zdW1lKCp0
aGlzKSB3aWxsIHBpbiBpdC4gUGlubmluZyBtZWFucwpAQCAtMjkwLDcgKzMxNiw3IEBAIHByaXZh
dGU6CiAgICAgLy8KICAgICAvLyAgICAgYXV0byB0cnlUaGluZ3MgPSBbdGhpc10gKGNvbnN0IEFy
Z1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSB7CiAgICAgLy8gICAgICAg
ICBpZiAoaXNWYWxpZEZvcm0oRm9vLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkKLSAgICAv
LyAgICAgICAgICAgICByZXR1cm4gSW5zdChGb28sIG1fdmFsdWUsIGxlZnQuY29uc3VtZSgqdGhp
cyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAvLyAgICAgICAgICAgICByZXR1cm4gbGVm
dC5pbnN0KHJpZ2h0Lmluc3QoRm9vLCBtX3ZhbHVlLCBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdo
dC5jb25zdW1lKCp0aGlzKSkpOwogICAgIC8vICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAv
LyAgICAgfTsKICAgICAvLyAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGhpbmdzKGxvYWRQcm9t
aXNlKGxlZnQpLCB0bXBQcm9taXNlKHJpZ2h0KSkpCkBAIC00NjYsMTQgKzQ5MiwzMSBAQCBwcml2
YXRlOgogCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQotCisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBJbnN0IHRyYXBwaW5nSW5zdChib29sIHRyYXBzLCBB
cmdzJiYuLi4gYXJncykKKyAgICB7CisgICAgICAgIEluc3QgcmVzdWx0KHN0ZDo6Zm9yd2FyZDxB
cmdzPihhcmdzKS4uLik7CisgICAgICAgIHJlc3VsdC5raW5kLnRyYXBzIHw9IHRyYXBzOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmdzPgorICAgIEluc3QgdHJhcHBpbmdJbnN0KFZhbHVlKiB2YWx1ZSwgQXJncyYmLi4uIGFy
Z3MpCisgICAgeworICAgICAgICByZXR1cm4gdHJhcHBpbmdJbnN0KHZhbHVlLT5pc1Nsb3BweVRy
YXBwaW5nKCksIHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIAogICAg
IEFyZ1Byb21pc2UgbG9hZFByb21pc2VBbnlPcGNvZGUoVmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7
CiAgICAgICAgIGlmICghY2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuIEFyZygpOwogICAgICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQog
ICAgICAgICAgICAgcmV0dXJuIEFyZygpOwotICAgICAgICByZXR1cm4gQXJnUHJvbWlzZShhZGRy
KGxvYWRWYWx1ZSksIGxvYWRWYWx1ZSk7CisgICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGFkZHIo
bG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+aXNTbG9wcHlU
cmFwcGluZygpKQorICAgICAgICAgICAgcmVzdWx0LnNldElzVHJhcHBpbmcodHJ1ZSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgQXJnUHJvbWlzZSBsb2FkUHJvbWlzZShW
YWx1ZSogbG9hZFZhbHVlLCBCMzo6T3Bjb2RlIGxvYWRPcGNvZGUpCkBAIC01ODMsNyArNjI2LDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBBcmdQcm9taXNlIGFkZHIgPSBsb2FkUHJvbWlzZSh2YWx1
ZSk7CiAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGFkZHIua2luZCgpLCBBcmc6OlRt
cCkpIHsKLSAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGFkZHIuY29uc3VtZSgqdGhpcyksIHJl
c3VsdCk7CisgICAgICAgICAgICBhcHBlbmQoYWRkci5pbnN0KG9wY29kZSwgYWRkci5jb25zdW1l
KCp0aGlzKSwgcmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAt
NzE3LDM0ICs3NjAsMzQgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGxlZnQgIT0gcmlnaHQpIHsK
ICAgICAgICAgICAgIEFyZ1Byb21pc2UgbGVmdEFkZHIgPSBsb2FkUHJvbWlzZShsZWZ0KTsKICAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGxlZnRBZGRy
LmNvbnN1bWUoKnRoaXMpLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFw
cGVuZChsZWZ0QWRkci5pbnN0KG9wY29kZSwgbGVmdEFkZHIuY29uc3VtZSgqdGhpcyksIHRtcChy
aWdodCksIHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5kKCksIEFyZzo6
VG1wKSkgewogICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKG1f
dmFsdWUtPnR5cGUoKSksIHRtcChyaWdodCksIHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgICAg
IGFwcGVuZChvcGNvZGUsIGxlZnRBZGRyLmNvbnN1bWUoKnRoaXMpLCByZXN1bHQpOworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQobGVmdEFkZHIuaW5zdChvcGNvZGUsIGxlZnRBZGRyLmNvbnN1
bWUoKnRoaXMpLCByZXN1bHQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQXJnUHJvbWlzZSByaWdo
dEFkZHIgPSBsb2FkUHJvbWlzZShyaWdodCk7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
b3Bjb2RlLCBBcmc6OlRtcCwgcmlnaHRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCByaWdodEFkZHIuY29uc3VtZSgqdGhp
cyksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKHJpZ2h0QWRkci5pbnN0KG9wY29k
ZSwgdG1wKGxlZnQpLCByaWdodEFkZHIuY29uc3VtZSgqdGhpcyksIHJlc3VsdCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGNvbW11
dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZv
cm0ob3Bjb2RlLCByaWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwg
dG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBhcHBlbmQocmlnaHRBZGRy
Lmluc3Qob3Bjb2RlLCByaWdodEFkZHIuY29uc3VtZSgqdGhpcyksIHRtcChsZWZ0KSwgcmVzdWx0
KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRk
ci5raW5kKCksIEFyZzo6VG1wKSkgewogICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92
ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKGxlZnQpLCByZXN1bHQpOwotICAgICAgICAg
ICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICBhcHBlbmQocmlnaHRBZGRyLmluc3Qob3Bjb2RlLCByaWdodEFkZHIu
Y29uc3VtZSgqdGhpcyksIHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtODIzLDcgKzg2Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBsb2FkUHJvbWlzZS5jb25zdW1l
KCp0aGlzKTsKLSAgICAgICAgYXBwZW5kKG9wY29kZSwgc3RvcmVBZGRyKTsKKyAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChzdG9yZUFkZHItPmlzU2xvcHB5VHJhcHBpbmcoKSwgbG9hZFByb21p
c2UuaW5zdChvcGNvZGUsIHN0b3JlQWRkcikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC04NzUsNyArOTE4LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBpZiAoaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OkltbSwgc3RvcmVBZGRyLmtpbmQoKSkgJiYgaW1tKG90aGVyVmFsdWUp
KSB7CiAgICAgICAgICAgICBsb2FkUHJvbWlzZS5jb25zdW1lKCp0aGlzKTsKLSAgICAgICAgICAg
IGFwcGVuZChvcGNvZGUsIGltbShvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgICAg
IGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgbG9hZFByb21pc2UuaW5zdChvcGNvZGUsIGlt
bShvdGhlclZhbHVlKSwgc3RvcmVBZGRyKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KIApAQCAtODgzLDcgKzkyNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICAgICAgbG9hZFByb21pc2UuY29uc3VtZSgqdGhpcyk7Ci0gICAgICAg
IGFwcGVuZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgYXBw
ZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBsb2FkUHJvbWlzZS5pbnN0KG9wY29kZSwgdG1wKG90
aGVyVmFsdWUpLCBzdG9yZUFkZHIpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApA
QCAtOTAxLDkgKzk0NCwxMCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gY3JlYXRlU3RvcmUo
bW92ZU9wY29kZSwgdmFsdWUsIGRlc3QpOwogICAgIH0KIAotICAgIHZvaWQgYXBwZW5kU3RvcmUo
VmFsdWUqIHZhbHVlLCBjb25zdCBBcmcmIGRlc3QpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJncz4KKyAgICB2b2lkIGFwcGVuZFN0b3JlKEFyZ3MmJi4uLiBhcmdzKQogICAgIHsKLSAgICAg
ICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZVN0b3JlKHZhbHVlLCBkZXN0KSk7CisgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgY3JlYXRlU3RvcmUoc3RkOjpmb3J3YXJk
PEFyZ3M+KGFyZ3MpLi4uKSkpOwogICAgIH0KIAogICAgIEFpcjo6T3Bjb2RlIG1vdmVGb3JUeXBl
KFR5cGUgdHlwZSkKQEAgLTk2Myw2ICsxMDA3LDE1IEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIG1fdmFsdWUsIHN0ZDo6Zm9yd2Fy
ZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKICAgICB9CisgICAgCisgICAgdm9pZCBhcHBl
bmQoSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoV1RG
TW92ZShpbnN0KSk7CisgICAgfQorICAgIHZvaWQgYXBwZW5kKGNvbnN0IEluc3QmIGluc3QpCisg
ICAgeworICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoaW5zdCk7CisgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFQqIGVuc3Vy
ZVNwZWNpYWwoVComIGZpZWxkLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCkBAIC0xNTAwLDI1
ICsxNTUzLDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgewog
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CiAgICAgICAgICAgICAgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShCcmFuY2g4LCBBcmc6OlJlbENvbmQsIGxlZnQua2luZCgpLCByaWdodC5r
aW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCcmFuY2g4LCBtX3ZhbHVlLCByZWxDb25kLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdo
dC5jb25zdW1lKCp0aGlzKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMTY6
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoMzI6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFu
Y2gzMiwgQXJnOjpSZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QnJhbmNoMzIsIG1fdmFsdWUsIHJlbENvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMp
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoKTsKICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaDY0LCBBcmc6OlJlbENvbmQsIGxlZnQua2luZCgp
LCByaWdodC5raW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2g2NCwgbV92YWx1ZSwgcmVsQ29uZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25z
dW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0
aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE1
MzAsMjUgKzE1ODMsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRo
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoODoKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaFRlc3Q4LCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgp
LCByaWdodC5raW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hUZXN0OCwgbV92YWx1ZSwgcmVzQ29uZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5j
b25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1l
KCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpXaWR0aDE2OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNW
YWxpZEZvcm0oQnJhbmNoVGVzdDMyLCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5r
aW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCcmFuY2hUZXN0MzIsIG1fdmFsdWUsIHJlc0NvbmQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgq
dGhpcykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyks
IHJpZ2h0LmNvbnN1bWUoKnRoaXMpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lk
dGg2NDoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaFRlc3Q2NCwg
QXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNo
VGVzdDY0LCBtX3ZhbHVlLCByZXNDb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSkp
OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTU1NiwxNyArMTYwOSwxNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFt0aGlzXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0
IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKICAg
ICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoRG91YmxlLCBBcmc6OkRvdWJsZUNv
bmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmlu
c3QoCiAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hEb3VibGUsIG1fdmFsdWUsIGRvdWJs
ZUNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdo
dC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUo
KnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFt0
aGlzXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1By
b21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0o
QnJhbmNoRmxvYXQsIEFyZzo6RG91YmxlQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgIEJy
YW5jaEZsb2F0LCBtX3ZhbHVlLCBkb3VibGVDb25kLAotICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAg
ICAgICAgIH0sCkBAIC0xNTg2LDE2ICsxNjM5LDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6
CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShDb21wYXJlMzIsIEFyZzo6UmVs
Q29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21w
YXJlMzIsIG1fdmFsdWUsIHJlbENvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29u
c3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OldpZHRoNjQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShDb21wYXJlNjQs
IEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDb21wYXJlNjQsIG1fdmFsdWUsIHJlbENvbmQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3Zh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwg
cmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMTYxMCwxNiArMTY2MywxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgogICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oVGVzdDMyLCBBcmc6OlJlc0NvbmQsIGxlZnQu
a2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0
KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdDMyLCBtX3ZhbHVl
LCByZXNDb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhp
cyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0
bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDY0OgogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oVGVzdDY0LCBBcmc6OlJlc0NvbmQsIGxl
ZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5p
bnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdDY0LCBtX3Zh
bHVlLCByZXNDb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgq
dGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMp
LCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE2MjcsMTcgKzE2ODAs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBbdGhpc10gKGNvbnN0
IEFyZyYgZG91YmxlQ29uZCwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlz
ZSYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShDb21w
YXJlRG91YmxlLCBBcmc6OkRvdWJsZUNvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFy
Zzo6VG1wKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxlZnQuaW5zdChyaWdodC5pbnN0KAogICAgICAgICAgICAgICAgICAg
ICAgICAgQ29tcGFyZURvdWJsZSwgbV92YWx1ZSwgZG91YmxlQ29uZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0bXAo
bV92YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwg
cmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgfSwKICAgICAgICAg
ICAgIFt0aGlzXSAoY29uc3QgQXJnJiBkb3VibGVDb25kLCBjb25zdCBBcmdQcm9taXNlJiBsZWZ0
LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKENvbXBhcmVGbG9hdCwgQXJnOjpEb3VibGVDb25kLCBsZWZ0LmtpbmQoKSwg
cmlnaHQua2luZCgpLCBBcmc6OlRtcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgIENvbXBhcmVGbG9hdCwgbV92YWx1ZSwgZG91YmxlQ29uZCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1
bWUoKnRoaXMpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5j
b25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAg
ICAgfSwKQEAgLTE2NTksMTcgKzE3MTIsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBU
bXAgcmVzdWx0ID0gdG1wKG1fdmFsdWUpOwogICAgICAgICAgICAgICAgIFRtcCB0aGVuQ2FzZSA9
IHRtcChtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICAgICAgVG1wIGVsc2VDYXNlID0g
dG1wKG1fdmFsdWUtPmNoaWxkKDIpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAg
ICAgICAgIG9wY29kZSwgbV92YWx1ZSwgY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICAgICBs
ZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgdGhlbkNhc2UsIGVsc2VD
YXNlLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCBy
aWdodC5jb25zdW1lKCp0aGlzKSwgdGhlbkNhc2UsIGVsc2VDYXNlLCByZXN1bHQpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGNvbmRpdGlvbi5r
aW5kKCksIGxlZnQua2luZCgpLCByaWdodC5raW5kKCksIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsK
ICAgICAgICAgICAgICAgICBUbXAgcmVzdWx0ID0gdG1wKG1fdmFsdWUpOwogICAgICAgICAgICAg
ICAgIFRtcCBzb3VyY2UgPSB0bXAobV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgICAg
IGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKG1fdmFsdWUt
PmNoaWxkKDIpKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAg
ICAgIG9wY29kZSwgbV92YWx1ZSwgY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICAgICBsZWZ0
LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgc291cmNlLCByZXN1bHQpOwor
ICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0
aGlzKSwgc291cmNlLCByZXN1bHQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBJbnN0KCk7CiAgICAgICAgIH07CkBAIC0xNzI5LDI5ICsxNzgyLDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIExvYWQ6IHsKLSAgICAgICAgICAg
IGFwcGVuZCgKLSAgICAgICAgICAgICAgICBtb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLAot
ICAgICAgICAgICAgICAgIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAg
ICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIG1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUo
KSksIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBMb2FkOFM6IHsKLSAgICAgICAg
ICAgIGFwcGVuZChMb2FkOFNpZ25lZEV4dGVuZFRvMzIsIGFkZHIobV92YWx1ZSksIHRtcChtX3Zh
bHVlKSk7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4U2ln
bmVkRXh0ZW5kVG8zMiwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIExvYWQ4WjogewotICAgICAgICAg
ICAgYXBwZW5kKExvYWQ4LCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAg
ICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBMb2FkOCwgYWRkcihtX3ZhbHVlKSwgdG1w
KG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIExvYWQxNlM6IHsKLSAgICAgICAgICAgIGFwcGVuZChMb2FkMTZTaWduZWRFeHRlbmRUbzMy
LCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kKHRyYXBw
aW5nSW5zdChtX3ZhbHVlLCBMb2FkMTZTaWduZWRFeHRlbmRUbzMyLCBhZGRyKG1fdmFsdWUpLCB0
bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAg
IGNhc2UgTG9hZDE2WjogewotICAgICAgICAgICAgYXBwZW5kKExvYWQxNiwgYWRkcihtX3ZhbHVl
KSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1
ZSwgTG9hZDE2LCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC0yMDIyLDcgKzIwNzMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZVN0b3JlKEFpcjo6U3RvcmU4
LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0b3Jl
KEFpcjo6U3RvcmU4LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwNDMsNyArMjA5NCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlU3RvcmUoQWlyOjpTdG9y
ZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpKTsKKyAgICAgICAgICAgIGFwcGVuZFN0
b3JlKEFpcjo6U3RvcmUxNiwgdmFsdWVUb1N0b3JlLCBhZGRyKG1fdmFsdWUpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAyMDY1OTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsx
OTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIE1vZDoKICAgICAgICAgICAgIGNhc2Ug
Qml0QW5kOgogICAgICAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgICAgICAgICAgVkFMSURB
VEUoIXZhbHVlLT5raW5kKCkuaXNUcmFwcGluZygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBEaXY6CiAgICAgICAgICAgICAgICAgY2FzZSBNb2Q6CkBAIC0zMzksMTQgKzM0MCwxNCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBjYXNlIExvYWQ4UzoKICAgICAgICAgICAgIGNhc2UgTG9hZDE2
WjoKICAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAgICAgVkFM
SURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigp
ID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
PmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZh
bHVlKSk7CkBAIC0zNTQsNyArMzU1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBTdG9yZTg6CiAgICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0g
ICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCku
aXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkg
PT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKQEAgLTM2Miw3ICszNjMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAg
ICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0
ICIsICp2YWx1ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lv
biAyMDY1OTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OSw2ICs2OSw4IEBAIHB1YmxpYzoKICAgICAvLyBJdCdzIGdvb2QgcHJhY3Rp
Y2UgdG8gbWlycm9yIEtpbmQgbWV0aG9kcyBoZXJlLCBzbyB5b3UgY2FuIHNheSB2YWx1ZS0+aXNC
bGFoKCkKICAgICAvLyBpbnN0ZWFkIG9mIHZhbHVlLT5raW5kKCkuaXNCbGFoKCkuCiAgICAgYm9v
bCBpc0NoaWxsKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLmlzQ2hpbGwoKTsgfQorICAgIGJvb2wg
aXNTbG9wcHlUcmFwcGluZygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKS5pc1Nsb3BweVRyYXBwaW5n
KCk7IH0KKyAgICBib29sIGlzVHJhcHBpbmcoKSBjb25zdCB7IHJldHVybiBraW5kKCkuaXNUcmFw
cGluZygpOyB9CiAKICAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47
IH0KICAgICB2b2lkIHNldE9yaWdpbihPcmlnaW4gb3JpZ2luKSB7IG1fb3JpZ2luID0gb3JpZ2lu
OyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290399</attachid>
            <date>2016-09-30 15:21:40 -0700</date>
            <delta_ts>2016-09-30 16:03:50 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44599</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2Njc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDE2LTA5LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIHN1cHBvcnQgdHJhcHBpbmcgbWVtb3J5IGFjY2Vzc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2ODkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBhIHRy
YXBzIGZsYWcgdG8gQjM6OktpbmQuIEl0IGFsc28gbWFrZXMgQjM6OktpbmQgd29yayBtb3JlIGxp
a2UgQWlyOjpLaW5kLCBpbiB0aGUKKyAgICAgICAgc2Vuc2UgdGhhdCBpdCdzIGEgYmFnIG9mIGRp
c3RpbmN0IGJpdHMgLSBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgYSB1bmlvbiB1bmxlc3Mgd2UgZ2V0
IGVub3VnaAorICAgICAgICB0aGluZ3MgdGhhdCBpdCB3b3VsZCBtYWtlIGEgZGlmZmVyZW5jZS4K
KyAgICAgICAgCisgICAgICAgIFRoZSBvbmx5IGFuYWx5c2lzIHRoYXQgbmVlZHMgdG8ga25vdyBh
Ym91dCB0cmFwcyBpcyBlZmZlY3RzLiBJdCBub3cga25vd3MgdGhhdCB0cmFwcyBpbXBsaWVzCisg
ICAgICAgIHNpZGVFeGl0cywgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHR1cm5zIG9mZiBEQ0UuIFRo
ZSBvbmx5IG9wdGltaXphdGlvbiB0aGF0IG5lZWRzIHRvIGtub3cKKyAgICAgICAgYWJvdXQgdHJh
cHMgaXMgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMoKSwgd2hpY2ggbmVlZHMgdG8gcGVz
c2ltaXplIGl0cyBzdG9yZQorICAgICAgICBlbGltaW5hdGlvbiBpZiB0aGUgc3RvcmUgdHJhcHMu
CisgICAgICAgIAorICAgICAgICBUaGUgaGFyZCBwYXJ0IG9mIHRoaXMgY2hhbmdlIGlzIHRlYWNo
aW5nIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciB0byBmYWl0aGZ1bGx5IGNhcnJ5IHRoZQorICAg
ICAgICB0cmFwcyBmbGFnIGRvd24gdG8gQWlyLiBJIGdvdCB0aGlzIHRvIHdvcmsgYnkgbWFraW5n
IEFyZ1Byb21pc2UgYSBub24tY29weWFibGUgb2JqZWN0IHRoYXQKKyAgICAgICAga25vd3Mgd2hl
dGhlciB5b3UndmUgdXNlZCBpdCBpbiBhbiBpbnN0cnVjdGlvbi4gSXQga25vd3Mgd2hlbiB5b3Ug
Y2FsbCBjb25zdW1lKCkuIElmIHlvdSBkbworICAgICAgICB0aGlzIHRoZW4gQXJnUHJvbWlzZSBj
YW5ub3QgYmUgZGVzdHJ1Y3RlZCB3aXRob3V0IGZpcnN0IHBhc3NpbmcgeW91ciBpbnN0IHRocm91
Z2ggaXQuIFRoaXMsCisgICAgICAgIGFsb25nIHdpdGggYSBmZXcgb3RoZXIgaGFja3MsIG1lYW5z
IHRoYXQgYWxsIG9mIHRoZSBsb2FkLW9wIGFuZCBsb2FkLW9wLXN0b3JlIGZ1c2lvbnMKKyAgICAg
ICAgY29ycmVjdGx5IGNhcnJ5IHRoZSB0cmFwIGJpdDogaWYgYW55IG9mIHRoZSBCMyBsb2FkcyBv
ciBzdG9yZXMgaW52b2x2ZWQgdHJhcHMgdGhlbiB5b3UgZ2V0CisgICAgICAgIHRyYXBzIGluIEFp
ci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZnJhbWV3b3JrIGFsc28gc2V0cyB1cyB1cCB0byBk
byBidWcgMTYyNjg4LCBzaW5jZSB0aGUgQXJnUHJvbWlzZTo6aW5zdCgpIGhvb2sgaXMKKyAgICAg
ICAgcG93ZXJmdWwgZW5vdWdoIHRvIGFsbG93IHdyYXBwaW5nIHRoZSBpbnN0cnVjdGlvbiB3aXRo
IGEgUGF0Y2guCisgICAgICAgIAorICAgICAgICBJIGFkZGVkIHNvbWUgdGVzdHMgdG8gdGVzdGIz
IHRoYXQgdmVyaWZ5IHRoYXQgb3B0aW1pemF0aW9ucyBhcmUgYXBwcm9wcmlhdGVseSBpbmhpYml0
ZWQgYW5kCisgICAgICAgIHRoYXQgdGhlIHRyYXBzIGZsYWcgc3Vydml2ZXMgdW50aWwgdGhlIGJp
dHRlciBlbmQgb2YgQWlyLgorCisgICAgICAgICogYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHA6CisgICAgICAgICogYjMvQjNLaW5kLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6
OktpbmQ6OmR1bXApOgorICAgICAgICAqIGIzL0IzS2luZC5oOgorICAgICAgICAoSlNDOjpCMzo6
S2luZDo6S2luZCk6CisgICAgICAgIChKU0M6OkIzOjpLaW5kOjpoYXNFeHRyYUJpdHMpOgorICAg
ICAgICAoSlNDOjpCMzo6S2luZDo6aXNDaGlsbCk6CisgICAgICAgIChKU0M6OkIzOjpLaW5kOjpz
ZXRJc0NoaWxsKToKKyAgICAgICAgKEpTQzo6QjM6OktpbmQ6Omhhc1RyYXBzKToKKyAgICAgICAg
KEpTQzo6QjM6OktpbmQ6OnRyYXBzKToKKyAgICAgICAgKEpTQzo6QjM6OktpbmQ6OnNldFRyYXBz
KToKKyAgICAgICAgKEpTQzo6QjM6OktpbmQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpC
Mzo6S2luZDo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjp0cmFwcGluZyk6CisgICAgICAgICog
YjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
QXJnUHJvbWlzZTo6c3dhcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFy
Z1Byb21pc2U6OkFyZ1Byb21pc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
OjpBcmdQcm9taXNlOjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpBcmdQcm9taXNlOjp+QXJnUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OkFyZ1Byb21pc2U6OnNldFRyYXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TG93ZXJUb0Fpcjo6QXJnUHJvbWlzZTo6Y29uc3VtZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OkFyZ1Byb21pc2U6Omluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cmFwcGluZ0luc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpsb2FkUHJvbWlzZUFueU9wY29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFwcGVuZFVuT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjph
cHBlbmRCaW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFwcGVu
ZFN0b3JlVW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFwcGVu
ZFN0b3JlQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphcHBlbmRT
dG9yZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFwcGVuZCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZUdlbmVyaWNDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZVNlbGVjdCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAg
ICAgICAgKiBiMy9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjplZmZlY3Rz
KToKKyAgICAgICAgKiBiMy9CM1ZhbHVlLmg6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFRyYXBwaW5n
TG9hZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0VHJhcHBpbmdTdG9yZSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0VHJhcHBpbmdMb2FkQWRkU3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dFRyYXBwaW5nTG9hZERDRSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0VHJhcHBpbmdTdG9yZUVs
aW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTYtMDktMzAgIEpvc2Vw
aCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggbW9kdWxlcyB0
ZXN0cyBhZnRlciByMjA2NjUzIGhhbmRsZSBicmVha3BvaW50IGxvY2F0aW9ucyBpbiBpbXBvcnQv
ZXhwb3J0IHN0YXRlbWVudHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1p
bmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9u
IDIwNjY1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDcgKzQ2Niw3IEBAIHByaXZh
dGU6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAgIHZvaWQgaGFuZGxlU3RvcmVB
ZnRlckNsb2JiZXIoVmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZp
bHRlcikKICAgICB7Ci0gICAgICAgIGlmIChmaW5kU3RvcmVBZnRlckNsb2JiZXIocHRyLCByYW5n
ZSwgZmlsdGVyKSkgeworICAgICAgICBpZiAoIW1fdmFsdWUtPnRyYXBzKCkgJiYgZmluZFN0b3Jl
QWZ0ZXJDbG9iYmVyKHB0ciwgcmFuZ2UsIGZpbHRlcikpIHsKICAgICAgICAgICAgIG1fdmFsdWUt
PnJlcGxhY2VXaXRoTm9wKCk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAJKHJldmlz
aW9uIDIwNjY1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBAIHZvaWQgS2luZDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAiPCIpOwogICAgIGlmIChp
c0NoaWxsKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIkNoaWxsIik7CisgICAgaWYgKHRy
YXBzKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIlRyYXBzIik7CiAgICAgaWYgKGNvbW1h
LmRpZFByaW50KCkpCiAgICAgICAgIG91dC5wcmludCgiPiIpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0tpbmQuaAkocmV2aXNpb24gMjA2NjU4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw5IEBAIGNsYXNzIEtp
bmQgewogcHVibGljOgogICAgIEtpbmQoT3Bjb2RlIG9wY29kZSkKICAgICAgICAgOiBtX29wY29k
ZShvcGNvZGUpCisgICAgICAgICwgbV9pc0NoaWxsKGZhbHNlKQorICAgICAgICAsIG1fdHJhcHMo
ZmFsc2UpCiAgICAgewotICAgICAgICB1LmJpdHMgPSAwOwogICAgIH0KICAgICAKICAgICBLaW5k
KCkKQEAgLTcyLDcgKzczLDcgQEAgcHVibGljOgogICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7
IHJldHVybiBtX29wY29kZTsgfQogICAgIHZvaWQgc2V0T3Bjb2RlKE9wY29kZSBvcGNvZGUpIHsg
bV9vcGNvZGUgPSBvcGNvZGU7IH0KICAgICAKLSAgICBib29sIGhhc0V4dHJhQml0cygpIGNvbnN0
IHsgcmV0dXJuICEhdS5iaXRzOyB9CisgICAgYm9vbCBoYXNFeHRyYUJpdHMoKSBjb25zdCB7IHJl
dHVybiBtX2lzQ2hpbGwgfHwgbV90cmFwczsgfQogICAgIAogICAgIC8vIENoaWxsIGJpdC4gVGhp
cyBhcHBsaWVzIHRvIGRpdmlzaW9uLWJhc2VkIGFyaXRobWV0aWMgb3BzLCB3aGljaCBtYXkgdHJh
cCBvbiBzb21lCiAgICAgLy8gcGxhdGZvcm1zIG9yIGV4aGliaXQgYml6YXJyZSBiZWhhdmlvciB3
aGVuIHBhc3NlZCBjZXJ0YWluIGlucHV0cy4gVGhlIG5vbi1jaGlsbApAQCAtMTAwLDEyICsxMDEs
NDQgQEAgcHVibGljOgogICAgIH0KICAgICBib29sIGlzQ2hpbGwoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGhhc0lzQ2hpbGwoKSAmJiB1LmlzQ2hpbGw7CisgICAgICAgIHJldHVybiBt
X2lzQ2hpbGw7CiAgICAgfQogICAgIHZvaWQgc2V0SXNDaGlsbChib29sIGlzQ2hpbGwpCiAgICAg
ewogICAgICAgICBBU1NFUlQoaGFzSXNDaGlsbCgpKTsKLSAgICAgICAgdS5pc0NoaWxsID0gaXND
aGlsbDsKKyAgICAgICAgbV9pc0NoaWxsID0gaXNDaGlsbDsKKyAgICB9CisgICAgCisgICAgLy8g
VHJhcHMgYml0LiBUaGlzIGFwcGxpZXMgdG8gbWVtb3J5IGFjY2VzcyBvcHMuIEl0IG1lYW5zIHRo
YXQgdGhlIGluc3RydWN0aW9uIGNvdWxkCisgICAgLy8gdHJhcCBhcyBwYXJ0IG9mIHNvbWUgY2hl
Y2sgaXQgcGVyZm9ybXMsIGFuZCB0aGF0IHdlIG1lYW4gdG8gbWFrZSB0aGlzIG9ic2VydmFibGUu
IFRoaXMKKyAgICAvLyBjdXJyZW50bHkgb25seSBhcHBsaWVzIHRvIG1lbW9yeSBhY2Nlc3NlcyAo
bG9hZHMgYW5kIHN0b3JlcykuIFlvdSBkb24ndCBnZXQgdG8gZmluZCBvdXQgd2hlcmUKKyAgICAv
LyBpbiB0aGUgUHJvY2VkdXJlIHRoZSB0cmFwIGhhcHBlbmVkLiBJZiB5b3UgdHJ5IHRvIHdvcmsg
aXQgb3V0IHVzaW5nIE9yaWdpbiwgeW91J2xsIGhhdmUgYSBiYWQKKyAgICAvLyB0aW1lIGJlY2F1
c2UgdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yIGlzIHRvbyBzbG9wcHkgd2l0aCBPcmlnaW4oKS4K
KyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
MjY4OAorICAgIGJvb2wgaGFzVHJhcHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICht
X29wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNl
IExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAg
ICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29s
IHRyYXBzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RyYXBzOworICAgIH0KKyAg
ICB2b2lkIHNldFRyYXBzKGJvb2wgdHJhcHMpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzVHJh
cHMoKSk7CisgICAgICAgIG1fdHJhcHMgPSB0cmFwczsKICAgICB9CiAgICAgCiAgICAgLy8gUnVs
ZXMgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllczoKQEAgLTExOSw3ICsxNTIsOCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEtpbmQmIG90aGVyKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fb3Bjb2RlID09IG90aGVyLm1fb3Bjb2RlCi0gICAgICAgICAgICAmJiB1
LmJpdHMgPT0gb3RoZXIudS5iaXRzOworICAgICAgICAgICAgJiYgbV9pc0NoaWxsID09IG90aGVy
Lm1faXNDaGlsbAorICAgICAgICAgICAgJiYgbV90cmFwcyA9PSBvdGhlci5tX3RyYXBzOwogICAg
IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgS2luZCYgb3RoZXIpIGNvbnN0CkBA
IC0xMzMsMTMgKzE2NywxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBJdCdzIGFsbW9z
dCBjZXJ0YWlubHkgbW9yZSBpbXBvcnRhbnQgdGhhdCB0aGlzIGhhc2ggZnVuY3Rpb24gaXMgY2hl
YXAgdG8gY29tcHV0ZSB0aGFuCiAgICAgICAgIC8vIGFueXRoaW5nIGVsc2UuIFdlIGNhbiBsaXZl
IHdpdGggc29tZSBraW5kIGhhc2ggY29sbGlzaW9ucy4KLSAgICAgICAgcmV0dXJuIG1fb3Bjb2Rl
ICsgdS5iaXRzICogMTExOworICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1faXNDaGlsbCkgPDwgMTYpICsgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3Ry
YXBzKSA8PCA3KTsKICAgICB9CiAgICAgCiAgICAgS2luZChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCiAgICAgICAgIDogbV9vcGNvZGUoT29wcykKKyAgICAgICAgLCBtX2lzQ2hpbGwo
dHJ1ZSkKKyAgICAgICAgLCBtX3RyYXBzKGZhbHNlKQogICAgIHsKLSAgICAgICAgdS5iaXRzID0g
MTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
CkBAIC0xNDksMTAgKzE4NCw4IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgT3Bjb2Rl
IG1fb3Bjb2RlOwotICAgIHVuaW9uIHsKLSAgICAgICAgYm9vbCBpc0NoaWxsOwotICAgICAgICB1
aW50MTZfdCBiaXRzOwotICAgIH0gdTsKKyAgICBib29sIG1faXNDaGlsbCA6IDE7CisgICAgYm9v
bCBtX3RyYXBzIDogMTsKIH07CiAKIC8vIEZvciBldmVyeSBmbGFnICdmb28nIHlvdSBhZGQsIGl0
J3MgY3VzdG9tYXJ5IHRvIGNyZWF0ZSBhIEtpbmQgQjM6OmZvbyhLaW5kKSBmdW5jdGlvbiB0aGF0
IG1ha2VzCkBAIC0xNjAsNyArMTkzLDggQEAgcHJpdmF0ZToKIC8vCiAvLyAgICAgYmxvY2stPmFw
cGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBjaGlsbChNb2QpLCBPcmlnaW4oKSwgYSwgYik7CiAvLwot
Ly8gVGhhdCBsb29rcyBwcmV0dHkgc2xpY2suIExldCdzIGtlZXAgaXQgdGhhdCB3YXkuCisvLyBJ
IGxpa2UgdG8gbWFrZSB0aGUgZmxhZyBuYW1lIGZpbGwgaW4gdGhlIHNlbnRlbmNlICJNb2QgX19f
X18iIChsaWtlICJpc0NoaWxsIiBvciAidHJhcHMiKSB3aGlsZQorLy8gdGhlIGZsYWcgY29uc3Ry
dWN0b3IgZmlsbHMgaW4gdGhlIHBocmFzZSAiX19fX18gTW9kIiAobGlrZSAiY2hpbGwiIG9yICJ0
cmFwcGluZyIpLgogCiBpbmxpbmUgS2luZCBjaGlsbChLaW5kIGtpbmQpCiB7CkBAIC0xNjgsNiAr
MjAyLDEyIEBAIGlubGluZSBLaW5kIGNoaWxsKEtpbmQga2luZCkKICAgICByZXR1cm4ga2luZDsK
IH0KIAoraW5saW5lIEtpbmQgdHJhcHBpbmcoS2luZCBraW5kKQoreworICAgIGtpbmQuc2V0VHJh
cHModHJ1ZSk7CisgICAgcmV0dXJuIGtpbmQ7Cit9CisKIHN0cnVjdCBLaW5kSGFzaCB7CiAgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2luZCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgp
OyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgS2luZCYgYSwgY29uc3QgS2luZCYgYikg
eyByZXR1cm4gYSA9PSBiOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
clRvQWlyLmNwcAkocmV2aXNpb24gMjA2NjU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEsNyBAQCBwcml2
YXRlOgogICAgIH0KIAogICAgIGNsYXNzIEFyZ1Byb21pc2UgeworICAgICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShBcmdQcm9taXNlKTsKICAgICBwdWJsaWM6CiAgICAgICAgIEFyZ1Byb21pc2Uo
KSB7IH0KIApAQCAtMTg5LDYgKzE5MCwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlVG9Mb2NrKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgc3dhcChBcmdQcm9taXNlJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgc3Rk
Ojpzd2FwKG1fYXJnLCBvdGhlci5tX2FyZyk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1
ZSwgb3RoZXIubV92YWx1ZSk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV93YXNDb25zdW1lZCwg
b3RoZXIubV93YXNDb25zdW1lZCk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV93YXNXcmFwcGVk
LCBvdGhlci5tX3dhc1dyYXBwZWQpOworICAgICAgICAgICAgc3RkOjpzd2FwKG1fdHJhcHMsIG90
aGVyLm1fdHJhcHMpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcmdQcm9taXNlKEFy
Z1Byb21pc2UmJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgc3dhcChvdGhlcik7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZ1Byb21pc2UmIG9wZXJhdG9yPShBcmdQcm9t
aXNlJiYgb3RoZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3YXAob3RoZXIpOworICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+QXJnUHJv
bWlzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3dhc0NvbnN1bWVkKQorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fd2FzV3JhcHBlZCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgc2V0VHJhcHMoYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV90cmFwcyA9IHZhbHVlOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEFyZ1By
b21pc2UgdG1wKFZhbHVlKiB2YWx1ZSkKICAgICAgICAgewpAQCAtMjExLDggKzI0Myw5IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbV9hcmc7CiAgICAgICAgIH0KIAotICAgICAgICBB
cmcgY29uc3VtZShMb3dlclRvQWlyJiBsb3dlcikgY29uc3QKKyAgICAgICAgQXJnIGNvbnN1bWUo
TG93ZXJUb0FpciYgbG93ZXIpCiAgICAgICAgIHsKKyAgICAgICAgICAgIG1fd2FzQ29uc3VtZWQg
PSB0cnVlOwogICAgICAgICAgICAgaWYgKCFtX2FyZyAmJiBtX3ZhbHVlKQogICAgICAgICAgICAg
ICAgIHJldHVybiBsb3dlci50bXAobV92YWx1ZSk7CiAgICAgICAgICAgICBpZiAobV92YWx1ZSkK
QEAgLTIyMCw2ICsyNTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2FyZzsK
ICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4K
KyAgICAgICAgSW5zdCBpbnN0KEFyZ3MmJi4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAg
ICBJbnN0IHJlc3VsdChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICAgICAg
cmVzdWx0LmtpbmQudHJhcHMgfD0gbV90cmFwczsKKyAgICAgICAgICAgIG1fd2FzV3JhcHBlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIC8vIFRocmVlIGZvcm1zOgogICAgICAgICAvLyBFdmVyeXRo
aW5nIG51bGw6IGludmFsaWQuCkBAIC0yMjcsNyArMjY5LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIEFyZyBudWxsLCB2YWx1ZSBub24tbnVsbDogaXQncyBhIHRtcCwgcGluIGl0IHdoZW4gbmVj
ZXNzYXJ5LgogICAgICAgICAvLyBBcmcgbm9uLW51bGwsIHZhbHVlIG5vbi1udWxsOiB1c2UgdGhl
IGFyZywgbG9jayB0aGUgdmFsdWUuCiAgICAgICAgIEFyZyBtX2FyZzsKLSAgICAgICAgVmFsdWUq
IG1fdmFsdWU7CisgICAgICAgIFZhbHVlKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OworICAgICAgICBi
b29sIG1fd2FzQ29uc3VtZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fd2FzV3JhcHBlZCB7
IGZhbHNlIH07CisgICAgICAgIGJvb2wgbV90cmFwcyB7IGZhbHNlIH07CiAgICAgfTsKIAogICAg
IC8vIENvbnNpZGVyIHVzaW5nIHRtcFByb21pc2UoKSBpbiBjYXNlcyB3aGVyZSB5b3UgYXJlbid0
IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBwaW4gdGhlIHZhbHVlIHlldC4KQEAgLTI0NiwxMSArMjkx
LDEyIEBAIHByaXZhdGU6CiAgICAgLy8gICAgICAgICBhcHBlbmQoRm9vLCB0bXAoYmFyKSkKICAg
ICAvLwogICAgIC8vIElkaW9tICMzOiBTYW1lIGFzIElkaW9tICMyLCBidXQgdXNpbmcgdG1wUHJv
bWlzZS4gTm90aWNlIHRoYXQgdGhpcyBjYWxscyBjb25zdW1lKCkgb25seSBhZnRlcgotICAgIC8v
IGl0J3Mgc3VyZSBpdCB3aWxsIHVzZSB0aGUgdG1wLiBUaGF0J3MgZGVsaWJlcmF0ZS4KKyAgICAv
LyBpdCdzIHN1cmUgaXQgd2lsbCB1c2UgdGhlIHRtcC4gVGhhdCdzIGRlbGliZXJhdGUuIEFsc28g
bm90ZSB0aGF0IHlvdSdyZSByZXF1aXJlZCB0byBwYXNzIGFueQorICAgIC8vIEluc3QgeW91IGNy
ZWF0ZSB3aXRoIGNvbnN1bWVkIHByb21pc2VzIHRocm91Z2ggdGhhdCBwcm9taXNlJ3MgaW5zdCgp
IGZ1bmN0aW9uLgogICAgIC8vCiAgICAgLy8gICAgIEFyZ1Byb21pc2UgcHJvbWlzZSA9IHRtcFBy
b21pc2UoYmFyKTsKICAgICAvLyAgICAgaWYgKGlzVmFsaWRGb3JtKEZvbywgcHJvbWlzZS5raW5k
KCkpKQotICAgIC8vICAgICAgICAgYXBwZW5kKEZvbywgcHJvbWlzZS5jb25zdW1lKCp0aGlzKSkK
KyAgICAvLyAgICAgICAgIGFwcGVuZChwcm9taXNlLmluc3QoRm9vLCBwcm9taXNlLmNvbnN1bWUo
KnRoaXMpKSkKICAgICAvLwogICAgIC8vIEluIGJvdGggaWRpb20gIzIgYW5kIGlkaW9tICMzLCB3
ZSBkb24ndCBwaW4gdGhlIHZhbHVlIHRvIGEgdGVtcG9yYXJ5IGV4Y2VwdCB3aGVuIHdlIGFjdHVh
bGx5CiAgICAgLy8gZW1pdCB0aGUgaW5zdHJ1Y3Rpb24uIEJvdGggdG1wKCkgYW5kIHRtcFByb21p
c2UoKS5jb25zdW1lKCp0aGlzKSB3aWxsIHBpbiBpdC4gUGlubmluZyBtZWFucwpAQCAtMjg4LDkg
KzMzNCw5IEBAIHByaXZhdGU6CiAgICAgLy8gbG9hZEFkZHIoKSBoZWxwZXIgYW5kIHJlcXVpcmUg
eW91IHRvIGJhbGFuY2UgQXJnUHJvbWlzZSdzIGluIGNvZGUgbGlrZSB0aGlzLiBTdWNoIGNvZGUg
d2lsbAogICAgIC8vIHdvcmsgZmluZSBpZiB3cml0dGVuIGFzOgogICAgIC8vCi0gICAgLy8gICAg
IGF1dG8gdHJ5VGhpbmdzID0gW3RoaXNdIChjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBB
cmdQcm9taXNlJiByaWdodCkgeworICAgIC8vICAgICBhdXRvIHRyeVRoaW5ncyA9IFt0aGlzXSAo
QXJnUHJvbWlzZSYgbGVmdCwgQXJnUHJvbWlzZSYgcmlnaHQpIHsKICAgICAvLyAgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShGb28sIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKQotICAgIC8vICAg
ICAgICAgICAgIHJldHVybiBJbnN0KEZvbywgbV92YWx1ZSwgbGVmdC5jb25zdW1lKCp0aGlzKSwg
cmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgIC8vICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmlu
c3QocmlnaHQuaW5zdChGb28sIG1fdmFsdWUsIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNv
bnN1bWUoKnRoaXMpKSk7CiAgICAgLy8gICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgIC8vICAg
ICB9OwogICAgIC8vICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUaGluZ3MobG9hZFByb21pc2Uo
bGVmdCksIHRtcFByb21pc2UocmlnaHQpKSkKQEAgLTQ2NiwxNCArNTEyLDMxIEBAIHByaXZhdGU6
CiAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmdzPgorICAgIEluc3QgdHJhcHBpbmdJbnN0KGJvb2wgdHJhcHMsIEFyZ3Mm
Ji4uLiBhcmdzKQorICAgIHsKKyAgICAgICAgSW5zdCByZXN1bHQoc3RkOjpmb3J3YXJkPEFyZ3M+
KGFyZ3MpLi4uKTsKKyAgICAgICAgcmVzdWx0LmtpbmQudHJhcHMgfD0gdHJhcHM7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgSW5zdCB0cmFwcGluZ0luc3QoVmFsdWUqIHZhbHVlLCBBcmdzJiYuLi4gYXJncykK
KyAgICB7CisgICAgICAgIHJldHVybiB0cmFwcGluZ0luc3QodmFsdWUtPnRyYXBzKCksIHN0ZDo6
Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7CisgICAgfQorICAgIAogICAgIEFyZ1Byb21pc2UgbG9h
ZFByb21pc2VBbnlPcGNvZGUoVmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmICgh
Y2FuQmVJbnRlcm5hbChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogICAg
ICAgICBpZiAoY3Jvc3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuIEFyZygpOwotICAgICAgICByZXR1cm4gQXJnUHJvbWlzZShhZGRyKGxvYWRWYWx1ZSksIGxv
YWRWYWx1ZSk7CisgICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGFkZHIobG9hZFZhbHVlKSwgbG9h
ZFZhbHVlKTsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKKyAgICAgICAgICAgIHJl
c3VsdC5zZXRUcmFwcyh0cnVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAg
ICBBcmdQcm9taXNlIGxvYWRQcm9taXNlKFZhbHVlKiBsb2FkVmFsdWUsIEIzOjpPcGNvZGUgbG9h
ZE9wY29kZSkKQEAgLTU4Myw3ICs2NDYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIEFyZ1Byb21p
c2UgYWRkciA9IGxvYWRQcm9taXNlKHZhbHVlKTsKICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9w
Y29kZSwgYWRkci5raW5kKCksIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgYXBwZW5kKG9wY29k
ZSwgYWRkci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChhZGRy
Lmluc3Qob3Bjb2RlLCBtX3ZhbHVlLCBhZGRyLmNvbnN1bWUoKnRoaXMpLCByZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC03MTcsMzQgKzc4MCwzNCBAQCBwcml2
YXRlOgogICAgICAgICBpZiAobGVmdCAhPSByaWdodCkgewogICAgICAgICAgICAgQXJnUHJvbWlz
ZSBsZWZ0QWRkciA9IGxvYWRQcm9taXNlKGxlZnQpOwogICAgICAgICAgICAgaWYgKGlzVmFsaWRG
b3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVmdEFkZHIuY29uc3VtZSgqdGhpcyksIHRtcChy
aWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKGxlZnRBZGRyLmluc3Qob3Bj
b2RlLCBtX3ZhbHVlLCBsZWZ0QWRkci5jb25zdW1lKCp0aGlzKSwgdG1wKHJpZ2h0KSwgcmVzdWx0
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAgICAgICAgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgp
KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29k
ZSwgbGVmdEFkZHIuY29uc3VtZSgqdGhpcyksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChsZWZ0QWRkci5pbnN0KG9wY29kZSwgbV92YWx1ZSwgbGVmdEFkZHIuY29uc3VtZSgq
dGhpcyksIHJlc3VsdCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBBcmdQcm9taXNlIHJpZ2h0QWRk
ciA9IGxvYWRQcm9taXNlKHJpZ2h0KTsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNv
ZGUsIEFyZzo6VG1wLCByaWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKLSAgICAgICAgICAg
ICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQocmlnaHRBZGRyLmluc3Qob3Bjb2RlLCBt
X3ZhbHVlLCB0bXAobGVmdCksIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
Y29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAgICAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLmNvbnN1bWUoKnRo
aXMpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChyaWdo
dEFkZHIuaW5zdChvcGNvZGUsIG1fdmFsdWUsIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwgdG1w
KGxlZnQpLCByZXN1bHQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9w
Y29kZSwgcmlnaHRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgYXBw
ZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAobGVmdCksIHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLmNvbnN1bWUoKnRo
aXMpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChyaWdodEFkZHIuaW5zdChvcGNv
ZGUsIG1fdmFsdWUsIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04MjMsNyArODg2
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
ICAgIGxvYWRQcm9taXNlLmNvbnN1bWUoKnRoaXMpOwotICAgICAgICBhcHBlbmQob3Bjb2RlLCBz
dG9yZUFkZHIpOworICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGxvYWRQcm9t
aXNlLmluc3Qob3Bjb2RlLCBtX3ZhbHVlLCBzdG9yZUFkZHIpKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApAQCAtODc1LDcgKzkzOCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIHN0b3JlQWRkci5raW5kKCkpICYmIGltbShv
dGhlclZhbHVlKSkgewogICAgICAgICAgICAgbG9hZFByb21pc2UuY29uc3VtZSgqdGhpcyk7Ci0g
ICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0ob3RoZXJWYWx1ZSksIHN0b3JlQWRkcik7Cisg
ICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGxvYWRQcm9taXNlLmluc3Qo
b3Bjb2RlLCBtX3ZhbHVlLCBpbW0ob3RoZXJWYWx1ZSksIHN0b3JlQWRkcikpKTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTg4Myw3ICs5NDYsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGxvYWRQcm9taXNlLmNvbnN1
bWUoKnRoaXMpOwotICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAob3RoZXJWYWx1ZSksIHN0b3Jl
QWRkcik7CisgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgbG9hZFByb21pc2Uu
aW5zdChvcGNvZGUsIG1fdmFsdWUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTkwMSw5ICs5NjQsMTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGNyZWF0ZVN0b3JlKG1vdmVPcGNvZGUsIHZhbHVlLCBkZXN0KTsKICAg
ICB9CiAKLSAgICB2b2lkIGFwcGVuZFN0b3JlKFZhbHVlKiB2YWx1ZSwgY29uc3QgQXJnJiBkZXN0
KQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmRTdG9yZShB
cmdzJiYuLi4gYXJncykKICAgICB7Ci0gICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVh
dGVTdG9yZSh2YWx1ZSwgZGVzdCkpOworICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFs
dWUsIGNyZWF0ZVN0b3JlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKTsKICAgICB9CiAK
ICAgICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUpCkBAIC05NjMsNiArMTAyNywx
NSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKEluc3Qo
b3Bjb2RlLCBtX3ZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7
CiAgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kKEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAg
ICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgIH0KKyAgICB2b2lk
IGFwcGVuZChjb25zdCBJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5sYXN0KCku
YXBwZW5kKGluc3QpOworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KICAgICBUKiBlbnN1cmVTcGVjaWFsKFQqJiBmaWVsZCwgQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQpAQCAtMTE5MCw3ICsxMjYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBBcmcgcmlnaHRJbW0gPSBpbW0ocmlnaHQpOwogCiAgICAgICAgICAgICAgICAgYXV0
byB0cnlDb21wYXJlID0gWyZdICgKLSAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0
aCwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IElu
c3QgeworICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBBcmdQcm9taXNlJiYg
bGVmdCwgQXJnUHJvbWlzZSYmIHJpZ2h0KSAtPiBJbnN0IHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKEluc3QgcmVzdWx0ID0gY29tcGFyZSh3aWR0aCwgcmVsQ29uZCwgbGVmdCwgcmlnaHQpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKEluc3QgcmVzdWx0ID0gY29tcGFyZSh3aWR0aCwgcmVsQ29uZC5mbGlwcGVkKCksIHJp
Z2h0LCBsZWZ0KSkKQEAgLTEyNzksMjAgKzEzNTIsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgY29tcGFyaXNvbiBi
ZXR3ZWVuIHRtcHMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUod2lkdGgsIHJlbENv
bmQsIHRtcFByb21pc2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKTsKKyAgICAgICAgICAgICAg
ICBBcmdQcm9taXNlIGxlZnRQcm9taXNlID0gdG1wUHJvbWlzZShsZWZ0KTsKKyAgICAgICAgICAg
ICAgICBBcmdQcm9taXNlIHJpZ2h0UHJvbWlzZSA9IHRtcFByb21pc2UocmlnaHQpOworICAgICAg
ICAgICAgICAgIHJldHVybiBjb21wYXJlKHdpZHRoLCByZWxDb25kLCBsZWZ0UHJvbWlzZSwgcmln
aHRQcm9taXNlKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRmxvYXRpbmcgcG9p
bnQgY29tcGFyaXNvbnMgY2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIHNtYXJ0LgorICAgICAgICAg
ICAgQXJnUHJvbWlzZSBsZWZ0UHJvbWlzZSA9IHRtcFByb21pc2UobGVmdCk7CisgICAgICAgICAg
ICBBcmdQcm9taXNlIHJpZ2h0UHJvbWlzZSA9IHRtcFByb21pc2UocmlnaHQpOwogICAgICAgICAg
ICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEZsb2F0KQotICAgICAgICAgICAgICAg
IHJldHVybiBjb21wYXJlRmxvYXQoZG91YmxlQ29uZCwgdG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJv
bWlzZShyaWdodCkpOwotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVEb3VibGUoZG91YmxlQ29u
ZCwgdG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpOworICAgICAgICAgICAgICAg
IHJldHVybiBjb21wYXJlRmxvYXQoZG91YmxlQ29uZCwgbGVmdFByb21pc2UsIHJpZ2h0UHJvbWlz
ZSk7CisgICAgICAgICAgICByZXR1cm4gY29tcGFyZURvdWJsZShkb3VibGVDb25kLCBsZWZ0UHJv
bWlzZSwgcmlnaHRQcm9taXNlKTsKICAgICAgICAgfTsKIAogICAgICAgICBBcmc6OldpZHRoIHdp
ZHRoID0gQXJnOjp3aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKTsKICAgICAgICAgQXJnIHJl
c0NvbmQgPSBBcmc6OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLmludmVydGVkKGlu
dmVydGVkKTsKICAgICAgICAgCiAgICAgICAgIGF1dG8gdHJ5VGVzdCA9IFsmXSAoCi0gICAgICAg
ICAgICBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQ
cm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBB
cmdQcm9taXNlJiYgbGVmdCwgQXJnUHJvbWlzZSYmIHJpZ2h0KSAtPiBJbnN0IHsKICAgICAgICAg
ICAgIGlmIChJbnN0IHJlc3VsdCA9IHRlc3Qod2lkdGgsIHJlc0NvbmQsIGxlZnQsIHJpZ2h0KSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgaWYgKEluc3QgcmVz
dWx0ID0gdGVzdCh3aWR0aCwgcmVzQ29uZCwgcmlnaHQsIGxlZnQpKQpAQCAtMTQyMCw4ICsxNDk3
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoaGFzUmlnaHRDb25zdCkgewogICAg
ICAgICAgICAgICAgICAgICBpZiAoKHdpZHRoID09IEFyZzo6V2lkdGgzMiAmJiByaWdodENvbnN0
ID09IDB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCAod2lkdGggPT0gQXJn
OjpXaWR0aDY0ICYmIHJpZ2h0Q29uc3QgPT0gLTEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBBcmdQcm9taXNlIGFyZ1Byb21pc2UgPSB0bXBQcm9taXNlKGxlZnQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgYXJnUHJvbWlzZSwg
YXJnUHJvbWlzZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0
cnlUZXN0KHdpZHRoLCB0bXBQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKGxlZnQpKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlcHJlc2VudGFibGVBczx1aW50MzJfdD4o
cmlnaHRDb25zdCkpIHsKQEAgLTE0ODEsMTMgKzE1NTcsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9
IHRlc3Qod2lkdGgsIHJlc0NvbmQsIHRtcFByb21pc2UodmFsdWUpLCBBcmc6OmJpdEltbSgtMSkp
KQorICAgICAgICAgICAgQXJnUHJvbWlzZSBsZWZ0UHJvbWlzZSA9IHRtcFByb21pc2UodmFsdWUp
OworICAgICAgICAgICAgQXJnUHJvbWlzZSByaWdodFByb21pc2UgPSBBcmc6OmJpdEltbSgtMSk7
CisgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCBsZWZ0
UHJvbWlzZSwgcmlnaHRQcm9taXNlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBTb21ldGltZXMgdGhpcyBpcyB0aGUgb25s
eSBmb3JtIG9mIHRlc3QgYXZhaWxhYmxlLiBXZSBwcmVmZXIgbm90IHRvIHVzZSB0aGlzIGJlY2F1
c2UKICAgICAgICAgLy8gaXQncyBsZXNzIGNhbm9uaWNhbC4KLSAgICAgICAgcmV0dXJuIHRlc3Qo
d2lkdGgsIHJlc0NvbmQsIHRtcFByb21pc2UodmFsdWUpLCB0bXBQcm9taXNlKHZhbHVlKSk7Cisg
ICAgICAgIEFyZ1Byb21pc2UgbGVmdFByb21pc2UgPSB0bXBQcm9taXNlKHZhbHVlKTsKKyAgICAg
ICAgQXJnUHJvbWlzZSByaWdodFByb21pc2UgPSB0bXBQcm9taXNlKHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHRlc3Qod2lkdGgsIHJlc0NvbmQsIGxlZnRQcm9taXNlLCByaWdodFByb21pc2UpOwog
ICAgIH0KIAogICAgIEluc3QgY3JlYXRlQnJhbmNoKFZhbHVlKiB2YWx1ZSwgYm9vbCBpbnZlcnRl
ZCA9IGZhbHNlKQpAQCAtMTQ5NiwyOSArMTU3NiwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
dmFsdWUsCiAgICAgICAgICAgICBbdGhpc10gKAogICAgICAgICAgICAgICAgIEFyZzo6V2lkdGgg
d2lkdGgsIGNvbnN0IEFyZyYgcmVsQ29uZCwKLSAgICAgICAgICAgICAgICBjb25zdCBBcmdQcm9t
aXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAg
ICAgICAgQXJnUHJvbWlzZSYgbGVmdCwgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgewogICAg
ICAgICAgICAgICAgIHN3aXRjaCAod2lkdGgpIHsKICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
V2lkdGg4OgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoOCwgQXJn
OjpSZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVm
dC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoOCwg
bV92YWx1ZSwgcmVsQ29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1
bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgogICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5r
aW5kKCksIHJpZ2h0LmtpbmQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJ
bnN0KAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQuaW5zdChyaWdodC5pbnN0
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaDMyLCBtX3ZhbHVlLCByZWxDb25k
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0
LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1
bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSkpOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoNjQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFu
Y2g2NCwgQXJnOjpSZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QnJhbmNoNjQsIG1fdmFsdWUsIHJlbENvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMp
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNTI2LDQ3ICsxNjA2LDQ3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgW3RoaXNdICgKICAgICAgICAgICAgICAgICBB
cmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlc0NvbmQsCi0gICAgICAgICAgICAgICAgY29u
c3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3Qgewor
ICAgICAgICAgICAgICAgIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJ
bnN0IHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CiAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OldpZHRoODoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJy
YW5jaFRlc3Q4LCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBCcmFuY2hUZXN0OCwgbV92YWx1ZSwgcmVzQ29uZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3Vt
ZSgqdGhpcykpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpX
aWR0aDMyOgogICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoVGVzdDMy
LCBBcmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFu
Y2hUZXN0MzIsIG1fdmFsdWUsIHJlc0NvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMp
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoKTsKICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaFRlc3Q2NCwgQXJnOjpSZXNDb25kLCBsZWZ0Lmtp
bmQoKSwgcmlnaHQua2luZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
c3QoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3Qo
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoVGVzdDY0LCBtX3ZhbHVlLCByZXND
b25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJp
Z2h0LmNvbnN1bWUoKnRoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNv
bnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgIFt0aGlzXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21pc2UmIGxl
ZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgIFt0aGlz
XSAoQXJnIGRvdWJsZUNvbmQsIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAt
PiBJbnN0IHsKICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoRG91YmxlLCBB
cmc6OkRvdWJsZUNvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5p
bnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hEb3VibGUsIG1f
dmFsdWUsIGRvdWJsZUNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUo
KnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgIFt0aGlzXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQs
IGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgIFt0aGlzXSAo
QXJnIGRvdWJsZUNvbmQsIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJ
bnN0IHsKICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoRmxvYXQsIEFyZzo6
RG91YmxlQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3Qo
cmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaEZsb2F0LCBtX3ZhbHVl
LCBkb3VibGVDb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlz
KSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5j
b25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAgICAgICAgIH0sCkBAIC0xNTc5
LDIzICsxNjU5LDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAg
IFt0aGlzXSAoCiAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiBy
ZWxDb25kLAotICAgICAgICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFy
Z1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBBcmdQcm9taXNlJiBs
ZWZ0LCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgc3dpdGNo
ICh3aWR0aCkgewogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CiAgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OldpZHRoMTY6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0
KCk7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChpc1ZhbGlkRm9ybShDb21wYXJlMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCks
IHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQu
aW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlMzIsIG1fdmFsdWUsIHJl
bENvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwg
cmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcCht
X3ZhbHVlKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShDb21wYXJlNjQsIEFyZzo6UmVsQ29uZCwgbGVm
dC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmlu
c3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlNjQsIG1f
dmFsdWUsIHJlbENvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1l
KCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhp
cyksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTYwMyw0MSArMTY4
Myw0MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFt0aGlzXSAoCiAg
ICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLAotICAg
ICAgICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJp
Z2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBBcmdQcm9taXNlJiBsZWZ0LCBBcmdQcm9t
aXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgewog
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CiAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OldpZHRoMTY6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShUZXN0MzIsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwg
QXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXN0MzIsIG1fdmFsdWUsIHJlc0NvbmQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhp
cyksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25z
dW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShUZXN0NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBUZXN0NjQsIG1fdmFsdWUsIHJlc0NvbmQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgq
dGhpcyksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5j
b25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQXJnJiBkb3VibGVDb25k
LCBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5z
dCB7CisgICAgICAgICAgICBbdGhpc10gKGNvbnN0IEFyZyYgZG91YmxlQ29uZCwgQXJnUHJvbWlz
ZSYgbGVmdCwgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShDb21wYXJlRG91YmxlLCBBcmc6OkRvdWJsZUNvbmQsIGxlZnQua2luZCgp
LCByaWdodC5raW5kKCksIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQuaW5zdChyaWdodC5pbnN0KAog
ICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGFyZURvdWJsZSwgbV92YWx1ZSwgZG91YmxlQ29u
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNv
bnN1bWUoKnRoaXMpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAg
ICAgICAgfSwKLSAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQXJnJiBkb3VibGVDb25kLCBjb25z
dCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7Cisg
ICAgICAgICAgICBbdGhpc10gKGNvbnN0IEFyZyYgZG91YmxlQ29uZCwgQXJnUHJvbWlzZSYgbGVm
dCwgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShDb21wYXJlRmxvYXQsIEFyZzo6RG91YmxlQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0
LmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAg
ICAgICAgICAgICAgICAgICBDb21wYXJlRmxvYXQsIG1fdmFsdWUsIGRvdWJsZUNvbmQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0
aGlzKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3Vt
ZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAgICAgICAgIH0s
CkBAIC0xNjU0LDIyICsxNzM0LDIyIEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBJbnN0IGNyZWF0
ZVNlbGVjdChjb25zdCBNb3ZlQ29uZGl0aW9uYWxseUNvbmZpZyYgY29uZmlnKQogICAgIHsKLSAg
ICAgICAgYXV0byBjcmVhdGVTZWxlY3RJbnN0cnVjdGlvbiA9IFsmXSAoQWlyOjpPcGNvZGUgb3Bj
b2RlLCBjb25zdCBBcmcmIGNvbmRpdGlvbiwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3Qg
QXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICBhdXRvIGNyZWF0ZVNlbGVjdElu
c3RydWN0aW9uID0gWyZdIChBaXI6Ok9wY29kZSBvcGNvZGUsIGNvbnN0IEFyZyYgY29uZGl0aW9u
LCBBcmdQcm9taXNlJiBsZWZ0LCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAg
ICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBjb25kaXRpb24ua2luZCgpLCBsZWZ0LmtpbmQo
KSwgcmlnaHQua2luZCgpLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewogICAgICAg
ICAgICAgICAgIFRtcCByZXN1bHQgPSB0bXAobV92YWx1ZSk7CiAgICAgICAgICAgICAgICAgVG1w
IHRoZW5DYXNlID0gdG1wKG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgICAgICBUbXAg
ZWxzZUNhc2UgPSB0bXAobV92YWx1ZS0+Y2hpbGQoMikpOwotICAgICAgICAgICAgICAgIHJldHVy
biBJbnN0KAorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAg
ICAgICAgICAgICAgICAgICAgb3Bjb2RlLCBtX3ZhbHVlLCBjb25kaXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0aGVu
Q2FzZSwgZWxzZUNhc2UsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3Vt
ZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0aGVuQ2FzZSwgZWxzZUNhc2UsIHJlc3Vs
dCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwg
Y29uZGl0aW9uLmtpbmQoKSwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkgewogICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSB0bXAobV92YWx1ZSk7CiAg
ICAgICAgICAgICAgICAgVG1wIHNvdXJjZSA9IHRtcChtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAg
ICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0
bXAobV92YWx1ZS0+Y2hpbGQoMikpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBJ
bnN0KAorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAg
ICAgICAgICAgICAgICAgb3Bjb2RlLCBtX3ZhbHVlLCBjb25kaXRpb24sCi0gICAgICAgICAgICAg
ICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCBzb3VyY2Us
IHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0
LmNvbnN1bWUoKnRoaXMpLCBzb3VyY2UsIHJlc3VsdCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAgICAgfTsKQEAgLTE2NzgsNyArMTc1OCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwKICAgICAgICAgICAgIFsmXSAo
CiAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZWxDb25kLAot
ICAgICAgICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2Um
IHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBBcmdQcm9taXNlJiBsZWZ0LCBBcmdQ
cm9taXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkg
ewogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CiAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBTdXBwb3J0IHRoZXNlIHRoaW5ncy4KQEAgLTE2OTUsNyArMTc3NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgWyZdICgKICAgICAgICAgICAgICAg
ICBBcmc6OldpZHRoIHdpZHRoLCBjb25zdCBBcmcmIHJlc0NvbmQsCi0gICAgICAgICAgICAgICAg
Y29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3Qg
eworICAgICAgICAgICAgICAgIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAt
PiBJbnN0IHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CiAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OldpZHRoODoKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFN1cHBv
cnQgbW9yZSB0aGluZ3MuCkBAIC0xNzEwLDEwICsxNzkwLDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICAgICAgfSwKLSAgICAgICAgICAgIFsmXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21p
c2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAg
IFsmXSAoQXJnIGRvdWJsZUNvbmQsIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0
KSAtPiBJbnN0IHsKICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU2VsZWN0SW5zdHJ1Y3Rp
b24oY29uZmlnLm1vdmVDb25kaXRpb25hbGx5RG91YmxlLCBkb3VibGVDb25kLCBsZWZ0LCByaWdo
dCk7CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChBcmcgZG91YmxlQ29uZCwgY29u
c3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3Qgewor
ICAgICAgICAgICAgWyZdIChBcmcgZG91YmxlQ29uZCwgQXJnUHJvbWlzZSYgbGVmdCwgQXJnUHJv
bWlzZSYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTZWxl
Y3RJbnN0cnVjdGlvbihjb25maWcubW92ZUNvbmRpdGlvbmFsbHlGbG9hdCwgZG91YmxlQ29uZCwg
bGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGZhbHNlKTsKQEAgLTE3
MjksMjkgKzE4MDksMjcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgYXBwZW5kKAotICAgICAgICAgICAgICAgIG1v
dmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksCi0gICAgICAgICAgICAgICAgYWRkcihtX3ZhbHVl
KSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1
ZSwgbW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwg
dG1wKG1fdmFsdWUpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAgYXBwZW5kKExvYWQ4U2ln
bmVkRXh0ZW5kVG8zMiwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAg
IGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBtX3Zh
bHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDhaOiB7Ci0gICAgICAgICAgICBhcHBlbmQo
TG9hZDgsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmQo
dHJhcHBpbmdJbnN0KG1fdmFsdWUsIExvYWQ4LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAo
bV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgTG9hZDE2UzogewotICAgICAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIs
IGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBp
bmdJbnN0KG1fdmFsdWUsIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92
YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBMb2FkMTZaOiB7Ci0gICAgICAgICAgICBhcHBlbmQoTG9hZDE2LCBhZGRy
KG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5z
dChtX3ZhbHVlLCBMb2FkMTYsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwMjIsNyArMjEwMCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRl
U3RvcmUoQWlyOjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSkpOworICAgICAg
ICAgICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVl
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjA0Myw3ICsyMTIxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVh
dGVTdG9yZShBaXI6OlN0b3JlMTYsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSkpOworICAg
ICAgICAgICAgYXBwZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92
YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwNjY1
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkxLDYgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgTW9kOgog
ICAgICAgICAgICAgY2FzZSBCaXRBbmQ6CiAgICAgICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS50cmFwcygpLCAoIkF0ICIsICp2YWx1
ZSkpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBEaXY6CiAgICAgICAgICAgICAgICAgY2FzZSBNb2Q6CkBAIC0zMzksMTQg
KzM0MCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjYXNlIExvYWQ4UzoKICAgICAgICAgICAg
IGNhc2UgTG9hZDE2WjoKICAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQg
IiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAg
ICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGls
bCgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5u
dW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAq
dmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQs
ICgiQXQgIiwgKnZhbHVlKSk7CkBAIC0zNTQsNyArMzU1LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBTdG9yZTg6CiAgICAgICAgICAgICBjYXNl
IFN0b3JlMTY6Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0
cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZh
bHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIs
ICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxk
KDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKQEAgLTM2Miw3
ICszNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFN0b3JlOgot
ICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgp
LmlzQ2hpbGwoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9
PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAkocmV2aXNpb24gMjA2NjU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzUsNiArNjM1LDcgQEAgRWZmZWN0cyBWYWx1
ZTo6ZWZmZWN0cygpIGNvbnN0CiAgICAgICAgIHJlc3VsdC50ZXJtaW5hbCA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KKyAgICByZXN1bHQuZXhpdHNTaWRld2F5cyB8PSB0cmFwcygpOwog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAkocmV2aXNpb24gMjA2NjU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gSXQncyBn
b29kIHByYWN0aWNlIHRvIG1pcnJvciBLaW5kIG1ldGhvZHMgaGVyZSwgc28geW91IGNhbiBzYXkg
dmFsdWUtPmlzQmxhaCgpCiAgICAgLy8gaW5zdGVhZCBvZiB2YWx1ZS0+a2luZCgpLmlzQmxhaCgp
LgogICAgIGJvb2wgaXNDaGlsbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKS5pc0NoaWxsKCk7IH0K
KyAgICBib29sIHRyYXBzKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLnRyYXBzKCk7IH0KIAogICAg
IE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogICAgIHZvaWQgc2V0
T3JpZ2luKE9yaWdpbiBvcmlnaW4pIHsgbV9vcmlnaW4gPSBvcmlnaW47IH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMDY2NTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxMDYsNiArMTMx
MDYsMTE5IEBAIHZvaWQgdGVzdExvYWRGZW5jZSgpCiAgICAgY2hlY2tEb2VzTm90VXNlSW5zdHJ1
Y3Rpb24oKmNvZGUsICJkbWIgICAgaXNoc3QiKTsKIH0KIAordm9pZCB0ZXN0VHJhcHBpbmdMb2Fk
KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIGludCB4ID0gNDI7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIHRyYXBwaW5nKExvYWQpLCBJbnQzMiwg
T3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksICZ4KSkpOworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50Pihwcm9j
KSwgNDIpOworICAgIHVuc2lnbmVkIHRyYXBzQ291bnQgPSAwOworICAgIGZvciAoQWlyOjpCYXNp
Y0Jsb2NrKiBibG9jayA6IHByb2MuY29kZSgpKSB7CisgICAgICAgIGZvciAoQWlyOjpJbnN0JiBp
bnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAoaW5zdC5raW5kLnRyYXBzKQorICAgICAg
ICAgICAgICAgIHRyYXBzQ291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBDSEVDS19FUSh0
cmFwc0NvdW50LCAxdSk7Cit9CisKK3ZvaWQgdGVzdFRyYXBwaW5nU3RvcmUoKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgaW50IHggPSA0MjsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAg
ICBwcm9jLCB0cmFwcGluZyhTdG9yZSksIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMTExKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmeCkpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CisgICAgY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpOworICAgIENIRUNLX0VRKHgsIDExMSk7CisgICAgdW5zaWduZWQgdHJhcHND
b3VudCA9IDA7CisgICAgZm9yIChBaXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2RlKCkp
IHsKKyAgICAgICAgZm9yIChBaXI6Okluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAg
IGlmIChpbnN0LmtpbmQudHJhcHMpCisgICAgICAgICAgICAgICAgdHJhcHNDb3VudCsrOworICAg
ICAgICB9CisgICAgfQorICAgIENIRUNLX0VRKHRyYXBzQ291bnQsIDF1KTsKK30KKwordm9pZCB0
ZXN0VHJhcHBpbmdMb2FkQWRkU3RvcmUoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHggPSA0MjsKKyAgICBD
b25zdFB0clZhbHVlKiBwdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksICZ4KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAg
ICBwcm9jLCB0cmFwcGluZyhTdG9yZSksIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgdHJhcHBpbmcoTG9hZCksIEludDMy
LCBPcmlnaW4oKSwgcHRyKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCAzKSksCisgICAgICAgIHB0cik7CisgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICBjb21waWxlQW5kUnVuPGlu
dD4ocHJvYyk7CisgICAgQ0hFQ0tfRVEoeCwgNDUpOworICAgIGJvb2wgdHJhcHMgPSBmYWxzZTsK
KyAgICBmb3IgKEFpcjo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmNvZGUoKSkgeworICAgICAg
ICBmb3IgKEFpcjo6SW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaWYgKGluc3Qu
a2luZC50cmFwcykKKyAgICAgICAgICAgICAgICB0cmFwcyA9IHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisgICAgQ0hFQ0sodHJhcHMpOworfQorCit2b2lkIHRlc3RUcmFwcGluZ0xvYWREQ0UoKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgaW50IHggPSA0MjsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KAorICAgICAgICBwcm9jLCB0cmFwcGluZyhMb2FkKSwgSW50MzIsIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ4KSk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICBj
b21waWxlQW5kUnVuPGludD4ocHJvYyk7CisgICAgdW5zaWduZWQgdHJhcHNDb3VudCA9IDA7Cisg
ICAgZm9yIChBaXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2RlKCkpIHsKKyAgICAgICAg
Zm9yIChBaXI6Okluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChpbnN0Lmtp
bmQudHJhcHMpCisgICAgICAgICAgICAgICAgdHJhcHNDb3VudCsrOworICAgICAgICB9CisgICAg
fQorICAgIENIRUNLX0VRKHRyYXBzQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0VHJhcHBpbmdT
dG9yZUVsaW1pbmF0aW9uKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCB4ID0gNDI7CisgICAgVmFsdWUqIHB0
ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJngpOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIHRyYXBwaW5n
KFN0b3JlKSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCA0MyksCisgICAgICAgIHB0cik7CisgICAgcm9vdC0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPigKKyAgICAgICAgcHJvYywgdHJhcHBpbmcoU3RvcmUpLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQ0
KSwKKyAgICAgICAgcHRyKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCkpOworICAgIGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKTsKKyAgICB1bnNpZ25l
ZCBzdG9yZUNvdW50ID0gMDsKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkp
IHsKKyAgICAgICAgaWYgKE1lbW9yeVZhbHVlOjppc1N0b3JlKHZhbHVlLT5vcGNvZGUoKSkpCisg
ICAgICAgICAgICBzdG9yZUNvdW50Kys7CisgICAgfQorICAgIENIRUNLX0VRKHN0b3JlQ291bnQs
IDJ1KTsKK30KKwogLy8gTWFrZSBzdXJlIHRoZSBjb21waWxlciBkb2VzIG5vdCB0cnkgdG8gb3B0
aW1pemUgYW55dGhpbmcgb3V0LgogTkVWRVJfSU5MSU5FIGRvdWJsZSB6ZXJvKCkKIHsKQEAgLTE0
NTQ2LDYgKzE0NjU5LDExIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4o
dGVzdE1lbW9yeUZlbmNlKCkpOwogICAgIFJVTih0ZXN0U3RvcmVGZW5jZSgpKTsKICAgICBSVU4o
dGVzdExvYWRGZW5jZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9hZCgpKTsKKyAgICBSVU4o
dGVzdFRyYXBwaW5nU3RvcmUoKSk7CisgICAgUlVOKHRlc3RUcmFwcGluZ0xvYWRBZGRTdG9yZSgp
KTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9hZERDRSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5n
U3RvcmVFbGltaW5hdGlvbigpKTsKICAgICAKICAgICBpZiAodGFza3MuaXNFbXB0eSgpKQogICAg
ICAgICB1c2FnZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJ
KHJldmlzaW9uIDIwNjY1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgcHVibGljOgogICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja0xpc3QoKSB7IHJldHVybiBtX2Js
b2NrczsgfQogCiAgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQo
aW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPj0gaW5kZXguCi0gICAgdW5zaWduZWQgZmluZEZp
cnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdW5zaWduZWQgZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAK
ICAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9
IG51bGwgYW5kIGluZGV4JyA+IGluZGV4LgogICAgIHVuc2lnbmVkIGZpbmROZXh0QmxvY2tJbmRl
eCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290402</attachid>
            <date>2016-09-30 16:03:50 -0700</date>
            <delta_ts>2016-09-30 16:07:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44573</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA2Njg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDE2LTA5LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIHN1cHBvcnQgdHJhcHBpbmcgbWVtb3J5IGFjY2Vzc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI2ODkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWRkcyBhIHRy
YXBzIGZsYWcgdG8gQjM6OktpbmQuIEl0IGFsc28gbWFrZXMgQjM6OktpbmQgd29yayBtb3JlIGxp
a2UgQWlyOjpLaW5kLCBpbiB0aGUKKyAgICAgICAgc2Vuc2UgdGhhdCBpdCdzIGEgYmFnIG9mIGRp
c3RpbmN0IGJpdHMgLSBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgYSB1bmlvbiB1bmxlc3Mgd2UgZ2V0
IGVub3VnaAorICAgICAgICB0aGluZ3MgdGhhdCBpdCB3b3VsZCBtYWtlIGEgZGlmZmVyZW5jZS4K
KyAgICAgICAgCisgICAgICAgIFRoZSBvbmx5IGFuYWx5c2lzIHRoYXQgbmVlZHMgdG8ga25vdyBh
Ym91dCB0cmFwcyBpcyBlZmZlY3RzLiBJdCBub3cga25vd3MgdGhhdCB0cmFwcyBpbXBsaWVzCisg
ICAgICAgIHNpZGVFeGl0cywgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIHR1cm5zIG9mZiBEQ0UuIFRo
ZSBvbmx5IG9wdGltaXphdGlvbiB0aGF0IG5lZWRzIHRvIGtub3cKKyAgICAgICAgYWJvdXQgdHJh
cHMgaXMgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMoKSwgd2hpY2ggbmVlZHMgdG8gcGVz
c2ltaXplIGl0cyBzdG9yZQorICAgICAgICBlbGltaW5hdGlvbiBpZiB0aGUgc3RvcmUgdHJhcHMu
CisgICAgICAgIAorICAgICAgICBUaGUgaGFyZCBwYXJ0IG9mIHRoaXMgY2hhbmdlIGlzIHRlYWNo
aW5nIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3RvciB0byBmYWl0aGZ1bGx5IGNhcnJ5IHRoZQorICAg
ICAgICB0cmFwcyBmbGFnIGRvd24gdG8gQWlyLiBJIGdvdCB0aGlzIHRvIHdvcmsgYnkgbWFraW5n
IEFyZ1Byb21pc2UgYSBub24tY29weWFibGUgb2JqZWN0IHRoYXQKKyAgICAgICAga25vd3Mgd2hl
dGhlciB5b3UndmUgdXNlZCBpdCBpbiBhbiBpbnN0cnVjdGlvbi4gSXQga25vd3Mgd2hlbiB5b3Ug
Y2FsbCBjb25zdW1lKCkuIElmIHlvdSBkbworICAgICAgICB0aGlzIHRoZW4gQXJnUHJvbWlzZSBj
YW5ub3QgYmUgZGVzdHJ1Y3RlZCB3aXRob3V0IGZpcnN0IHBhc3NpbmcgeW91ciBpbnN0IHRocm91
Z2ggaXQuIFRoaXMsCisgICAgICAgIGFsb25nIHdpdGggYSBmZXcgb3RoZXIgaGFja3MsIG1lYW5z
IHRoYXQgYWxsIG9mIHRoZSBsb2FkLW9wIGFuZCBsb2FkLW9wLXN0b3JlIGZ1c2lvbnMKKyAgICAg
ICAgY29ycmVjdGx5IGNhcnJ5IHRoZSB0cmFwIGJpdDogaWYgYW55IG9mIHRoZSBCMyBsb2FkcyBv
ciBzdG9yZXMgaW52b2x2ZWQgdHJhcHMgdGhlbiB5b3UgZ2V0CisgICAgICAgIHRyYXBzIGluIEFp
ci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZnJhbWV3b3JrIGFsc28gc2V0cyB1cyB1cCB0byBk
byBidWcgMTYyNjg4LCBzaW5jZSB0aGUgQXJnUHJvbWlzZTo6aW5zdCgpIGhvb2sgaXMKKyAgICAg
ICAgcG93ZXJmdWwgZW5vdWdoIHRvIGFsbG93IHdyYXBwaW5nIHRoZSBpbnN0cnVjdGlvbiB3aXRo
IGEgUGF0Y2guCisgICAgICAgIAorICAgICAgICBJIGFkZGVkIHNvbWUgdGVzdHMgdG8gdGVzdGIz
IHRoYXQgdmVyaWZ5IHRoYXQgb3B0aW1pemF0aW9ucyBhcmUgYXBwcm9wcmlhdGVseSBpbmhpYml0
ZWQgYW5kCisgICAgICAgIHRoYXQgdGhlIHRyYXBzIGZsYWcgc3Vydml2ZXMgdW50aWwgdGhlIGJp
dHRlciBlbmQgb2YgQWlyLgorCisgICAgICAgICogYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHA6CisgICAgICAgICogYjMvQjNLaW5kLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6
OktpbmQ6OmR1bXApOgorICAgICAgICAqIGIzL0IzS2luZC5oOgorICAgICAgICAoSlNDOjpCMzo6
S2luZDo6S2luZCk6CisgICAgICAgIChKU0M6OkIzOjpLaW5kOjpoYXNFeHRyYUJpdHMpOgorICAg
ICAgICAoSlNDOjpCMzo6S2luZDo6aXNDaGlsbCk6CisgICAgICAgIChKU0M6OkIzOjpLaW5kOjpz
ZXRJc0NoaWxsKToKKyAgICAgICAgKEpTQzo6QjM6OktpbmQ6Omhhc1RyYXBzKToKKyAgICAgICAg
KEpTQzo6QjM6OktpbmQ6OnRyYXBzKToKKyAgICAgICAgKEpTQzo6QjM6OktpbmQ6OnNldFRyYXBz
KToKKyAgICAgICAgKEpTQzo6QjM6OktpbmQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpC
Mzo6S2luZDo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjp0cmFwcGluZyk6CisgICAgICAgICog
YjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
QXJnUHJvbWlzZTo6c3dhcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFy
Z1Byb21pc2U6OkFyZ1Byb21pc2UpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWly
OjpBcmdQcm9taXNlOjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpBcmdQcm9taXNlOjp+QXJnUHJvbWlzZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OkFyZ1Byb21pc2U6OnNldFRyYXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TG93ZXJUb0Fpcjo6QXJnUHJvbWlzZTo6Y29uc3VtZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OkFyZ1Byb21pc2U6Omluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cmFwcGluZ0luc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpsb2FkUHJvbWlzZUFueU9wY29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFwcGVuZFVuT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjph
cHBlbmRCaW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFwcGVu
ZFN0b3JlVW5PcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFwcGVu
ZFN0b3JlQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphcHBlbmRT
dG9yZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFwcGVuZCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZUdlbmVyaWNDb21wYXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlQnJhbmNoKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6Y3JlYXRlQ29tcGFyZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmNyZWF0ZVNlbGVjdCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAg
ICAgICAgKiBiMy9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjplZmZlY3Rz
KToKKyAgICAgICAgKiBiMy9CM1ZhbHVlLmg6CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuaDoK
KyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFRyYXBwaW5n
TG9hZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0VHJhcHBpbmdTdG9yZSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0VHJhcHBpbmdMb2FkQWRkU3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dFRyYXBwaW5nTG9hZERDRSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0VHJhcHBpbmdTdG9yZUVs
aW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTYtMDktMzAgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBCMzo6bW92ZUNvbnN0YW50cyBz
aG91bGQgYmUgYWJsZSB0byBlZGl0IGNvZGUgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjb25z
dGFudHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1
YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDIwNjY4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDcgKzQ2Niw3IEBAIHByaXZhdGU6CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRmlsdGVyPgogICAgIHZvaWQgaGFuZGxlU3RvcmVBZnRlckNsb2JiZXIo
VmFsdWUqIHB0ciwgSGVhcFJhbmdlIHJhbmdlLCBjb25zdCBGaWx0ZXImIGZpbHRlcikKICAgICB7
Ci0gICAgICAgIGlmIChmaW5kU3RvcmVBZnRlckNsb2JiZXIocHRyLCByYW5nZSwgZmlsdGVyKSkg
eworICAgICAgICBpZiAoIW1fdmFsdWUtPnRyYXBzKCkgJiYgZmluZFN0b3JlQWZ0ZXJDbG9iYmVy
KHB0ciwgcmFuZ2UsIGZpbHRlcikpIHsKICAgICAgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRo
Tm9wKCk7CiAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2luZC5jcHAJKHJldmlzaW9uIDIwNjY4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw4IEBAIHZvaWQgS2luZDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ICAgIENvbW1hUHJpbnRlciBjb21tYSgiLCAiLCAiPCIpOwogICAgIGlmIChpc0NoaWxsKCkpCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgIkNoaWxsIik7CisgICAgaWYgKHRyYXBzKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgIlRyYXBzIik7CiAgICAgaWYgKGNvbW1hLmRpZFByaW50KCkp
CiAgICAgICAgIG91dC5wcmludCgiPiIpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0tp
bmQuaAkocmV2aXNpb24gMjA2Njg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzS2lu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw5IEBAIGNsYXNzIEtpbmQgewogcHVibGlj
OgogICAgIEtpbmQoT3Bjb2RlIG9wY29kZSkKICAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCisg
ICAgICAgICwgbV9pc0NoaWxsKGZhbHNlKQorICAgICAgICAsIG1fdHJhcHMoZmFsc2UpCiAgICAg
ewotICAgICAgICB1LmJpdHMgPSAwOwogICAgIH0KICAgICAKICAgICBLaW5kKCkKQEAgLTcyLDcg
KzczLDcgQEAgcHVibGljOgogICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29w
Y29kZTsgfQogICAgIHZvaWQgc2V0T3Bjb2RlKE9wY29kZSBvcGNvZGUpIHsgbV9vcGNvZGUgPSBv
cGNvZGU7IH0KICAgICAKLSAgICBib29sIGhhc0V4dHJhQml0cygpIGNvbnN0IHsgcmV0dXJuICEh
dS5iaXRzOyB9CisgICAgYm9vbCBoYXNFeHRyYUJpdHMoKSBjb25zdCB7IHJldHVybiBtX2lzQ2hp
bGwgfHwgbV90cmFwczsgfQogICAgIAogICAgIC8vIENoaWxsIGJpdC4gVGhpcyBhcHBsaWVzIHRv
IGRpdmlzaW9uLWJhc2VkIGFyaXRobWV0aWMgb3BzLCB3aGljaCBtYXkgdHJhcCBvbiBzb21lCiAg
ICAgLy8gcGxhdGZvcm1zIG9yIGV4aGliaXQgYml6YXJyZSBiZWhhdmlvciB3aGVuIHBhc3NlZCBj
ZXJ0YWluIGlucHV0cy4gVGhlIG5vbi1jaGlsbApAQCAtMTAwLDEyICsxMDEsNDQgQEAgcHVibGlj
OgogICAgIH0KICAgICBib29sIGlzQ2hpbGwoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IGhhc0lzQ2hpbGwoKSAmJiB1LmlzQ2hpbGw7CisgICAgICAgIHJldHVybiBtX2lzQ2hpbGw7CiAg
ICAgfQogICAgIHZvaWQgc2V0SXNDaGlsbChib29sIGlzQ2hpbGwpCiAgICAgewogICAgICAgICBB
U1NFUlQoaGFzSXNDaGlsbCgpKTsKLSAgICAgICAgdS5pc0NoaWxsID0gaXNDaGlsbDsKKyAgICAg
ICAgbV9pc0NoaWxsID0gaXNDaGlsbDsKKyAgICB9CisgICAgCisgICAgLy8gVHJhcHMgYml0LiBU
aGlzIGFwcGxpZXMgdG8gbWVtb3J5IGFjY2VzcyBvcHMuIEl0IG1lYW5zIHRoYXQgdGhlIGluc3Ry
dWN0aW9uIGNvdWxkCisgICAgLy8gdHJhcCBhcyBwYXJ0IG9mIHNvbWUgY2hlY2sgaXQgcGVyZm9y
bXMsIGFuZCB0aGF0IHdlIG1lYW4gdG8gbWFrZSB0aGlzIG9ic2VydmFibGUuIFRoaXMKKyAgICAv
LyBjdXJyZW50bHkgb25seSBhcHBsaWVzIHRvIG1lbW9yeSBhY2Nlc3NlcyAobG9hZHMgYW5kIHN0
b3JlcykuIFlvdSBkb24ndCBnZXQgdG8gZmluZCBvdXQgd2hlcmUKKyAgICAvLyBpbiB0aGUgUHJv
Y2VkdXJlIHRoZSB0cmFwIGhhcHBlbmVkLiBJZiB5b3UgdHJ5IHRvIHdvcmsgaXQgb3V0IHVzaW5n
IE9yaWdpbiwgeW91J2xsIGhhdmUgYSBiYWQKKyAgICAvLyB0aW1lIGJlY2F1c2UgdGhlIGluc3Ry
dWN0aW9uIHNlbGVjdG9yIGlzIHRvbyBzbG9wcHkgd2l0aCBPcmlnaW4oKS4KKyAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjY4OAorICAgIGJv
b2wgaGFzVHJhcHMoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX29wY29kZSkgewor
ICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2Ug
TG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWQ6CisgICAg
ICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3Rv
cmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIHRyYXBzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3RyYXBzOworICAgIH0KKyAgICB2b2lkIHNldFRy
YXBzKGJvb2wgdHJhcHMpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzVHJhcHMoKSk7CisgICAg
ICAgIG1fdHJhcHMgPSB0cmFwczsKICAgICB9CiAgICAgCiAgICAgLy8gUnVsZXMgZm9yIGFkZGlu
ZyBuZXcgcHJvcGVydGllczoKQEAgLTExOSw3ICsxNTIsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEtpbmQmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fb3Bjb2RlID09IG90aGVyLm1fb3Bjb2RlCi0gICAgICAgICAgICAmJiB1LmJpdHMgPT0gb3Ro
ZXIudS5iaXRzOworICAgICAgICAgICAgJiYgbV9pc0NoaWxsID09IG90aGVyLm1faXNDaGlsbAor
ICAgICAgICAgICAgJiYgbV90cmFwcyA9PSBvdGhlci5tX3RyYXBzOwogICAgIH0KICAgICAKICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgS2luZCYgb3RoZXIpIGNvbnN0CkBAIC0xMzMsMTMgKzE2
NywxNCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBJdCdzIGFsbW9zdCBjZXJ0YWlubHkg
bW9yZSBpbXBvcnRhbnQgdGhhdCB0aGlzIGhhc2ggZnVuY3Rpb24gaXMgY2hlYXAgdG8gY29tcHV0
ZSB0aGFuCiAgICAgICAgIC8vIGFueXRoaW5nIGVsc2UuIFdlIGNhbiBsaXZlIHdpdGggc29tZSBr
aW5kIGhhc2ggY29sbGlzaW9ucy4KLSAgICAgICAgcmV0dXJuIG1fb3Bjb2RlICsgdS5iaXRzICog
MTExOworICAgICAgICByZXR1cm4gbV9vcGNvZGUgKyAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
aXNDaGlsbCkgPDwgMTYpICsgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RyYXBzKSA8PCA3KTsK
ICAgICB9CiAgICAgCiAgICAgS2luZChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAg
ICAgICAgIDogbV9vcGNvZGUoT29wcykKKyAgICAgICAgLCBtX2lzQ2hpbGwodHJ1ZSkKKyAgICAg
ICAgLCBtX3RyYXBzKGZhbHNlKQogICAgIHsKLSAgICAgICAgdS5iaXRzID0gMTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CkBAIC0xNDksMTAg
KzE4NCw4IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgT3Bjb2RlIG1fb3Bjb2RlOwot
ICAgIHVuaW9uIHsKLSAgICAgICAgYm9vbCBpc0NoaWxsOwotICAgICAgICB1aW50MTZfdCBiaXRz
OwotICAgIH0gdTsKKyAgICBib29sIG1faXNDaGlsbCA6IDE7CisgICAgYm9vbCBtX3RyYXBzIDog
MTsKIH07CiAKIC8vIEZvciBldmVyeSBmbGFnICdmb28nIHlvdSBhZGQsIGl0J3MgY3VzdG9tYXJ5
IHRvIGNyZWF0ZSBhIEtpbmQgQjM6OmZvbyhLaW5kKSBmdW5jdGlvbiB0aGF0IG1ha2VzCkBAIC0x
NjAsNyArMTkzLDggQEAgcHJpdmF0ZToKIC8vCiAvLyAgICAgYmxvY2stPmFwcGVuZE5ldzxWYWx1
ZT4obV9wcm9jLCBjaGlsbChNb2QpLCBPcmlnaW4oKSwgYSwgYik7CiAvLwotLy8gVGhhdCBsb29r
cyBwcmV0dHkgc2xpY2suIExldCdzIGtlZXAgaXQgdGhhdCB3YXkuCisvLyBJIGxpa2UgdG8gbWFr
ZSB0aGUgZmxhZyBuYW1lIGZpbGwgaW4gdGhlIHNlbnRlbmNlICJNb2QgX19fX18iIChsaWtlICJp
c0NoaWxsIiBvciAidHJhcHMiKSB3aGlsZQorLy8gdGhlIGZsYWcgY29uc3RydWN0b3IgZmlsbHMg
aW4gdGhlIHBocmFzZSAiX19fX18gTW9kIiAobGlrZSAiY2hpbGwiIG9yICJ0cmFwcGluZyIpLgog
CiBpbmxpbmUgS2luZCBjaGlsbChLaW5kIGtpbmQpCiB7CkBAIC0xNjgsNiArMjAyLDEyIEBAIGlu
bGluZSBLaW5kIGNoaWxsKEtpbmQga2luZCkKICAgICByZXR1cm4ga2luZDsKIH0KIAoraW5saW5l
IEtpbmQgdHJhcHBpbmcoS2luZCBraW5kKQoreworICAgIGtpbmQuc2V0VHJhcHModHJ1ZSk7Cisg
ICAgcmV0dXJuIGtpbmQ7Cit9CisKIHN0cnVjdCBLaW5kSGFzaCB7CiAgICAgc3RhdGljIHVuc2ln
bmVkIGhhc2goY29uc3QgS2luZCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CiAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgS2luZCYgYSwgY29uc3QgS2luZCYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
cmV2aXNpb24gMjA2Njg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEsNyBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIGNsYXNzIEFyZ1Byb21pc2UgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShB
cmdQcm9taXNlKTsKICAgICBwdWJsaWM6CiAgICAgICAgIEFyZ1Byb21pc2UoKSB7IH0KIApAQCAt
MTg5LDYgKzE5MCwzNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlVG9M
b2NrKQogICAgICAgICB7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc3dhcChB
cmdQcm9taXNlJiBvdGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjpzd2FwKG1fYXJn
LCBvdGhlci5tX2FyZyk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV92YWx1ZSwgb3RoZXIubV92
YWx1ZSk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV93YXNDb25zdW1lZCwgb3RoZXIubV93YXND
b25zdW1lZCk7CisgICAgICAgICAgICBzdGQ6OnN3YXAobV93YXNXcmFwcGVkLCBvdGhlci5tX3dh
c1dyYXBwZWQpOworICAgICAgICAgICAgc3RkOjpzd2FwKG1fdHJhcHMsIG90aGVyLm1fdHJhcHMp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcmdQcm9taXNlKEFyZ1Byb21pc2UmJiBv
dGhlcikKKyAgICAgICAgeworICAgICAgICAgICAgc3dhcChvdGhlcik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEFyZ1Byb21pc2UmIG9wZXJhdG9yPShBcmdQcm9taXNlJiYgb3RoZXIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3YXAob3RoZXIpOworICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB+QXJnUHJvbWlzZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChtX3dhc0NvbnN1bWVkKQorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKG1fd2FzV3JhcHBlZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgc2V0VHJhcHMoYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV90cmFw
cyA9IHZhbHVlOworICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIEFyZ1Byb21pc2UgdG1wKFZh
bHVlKiB2YWx1ZSkKICAgICAgICAgewpAQCAtMjExLDggKzI0Myw5IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm4gbV9hcmc7CiAgICAgICAgIH0KIAotICAgICAgICBBcmcgY29uc3VtZShM
b3dlclRvQWlyJiBsb3dlcikgY29uc3QKKyAgICAgICAgQXJnIGNvbnN1bWUoTG93ZXJUb0FpciYg
bG93ZXIpCiAgICAgICAgIHsKKyAgICAgICAgICAgIG1fd2FzQ29uc3VtZWQgPSB0cnVlOwogICAg
ICAgICAgICAgaWYgKCFtX2FyZyAmJiBtX3ZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBs
b3dlci50bXAobV92YWx1ZSk7CiAgICAgICAgICAgICBpZiAobV92YWx1ZSkKQEAgLTIyMCw2ICsy
NTMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2FyZzsKICAgICAgICAgfQog
ICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgSW5z
dCBpbnN0KEFyZ3MmJi4uLiBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBJbnN0IHJlc3Vs
dChzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOworICAgICAgICAgICAgcmVzdWx0LmtpbmQu
dHJhcHMgfD0gbV90cmFwczsKKyAgICAgICAgICAgIG1fd2FzV3JhcHBlZCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAogICAgIHByaXZhdGU6
CiAgICAgICAgIC8vIFRocmVlIGZvcm1zOgogICAgICAgICAvLyBFdmVyeXRoaW5nIG51bGw6IGlu
dmFsaWQuCkBAIC0yMjcsNyArMjY5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEFyZyBudWxs
LCB2YWx1ZSBub24tbnVsbDogaXQncyBhIHRtcCwgcGluIGl0IHdoZW4gbmVjZXNzYXJ5LgogICAg
ICAgICAvLyBBcmcgbm9uLW51bGwsIHZhbHVlIG5vbi1udWxsOiB1c2UgdGhlIGFyZywgbG9jayB0
aGUgdmFsdWUuCiAgICAgICAgIEFyZyBtX2FyZzsKLSAgICAgICAgVmFsdWUqIG1fdmFsdWU7Cisg
ICAgICAgIFZhbHVlKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OworICAgICAgICBib29sIG1fd2FzQ29u
c3VtZWQgeyBmYWxzZSB9OworICAgICAgICBib29sIG1fd2FzV3JhcHBlZCB7IGZhbHNlIH07Cisg
ICAgICAgIGJvb2wgbV90cmFwcyB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIC8vIENvbnNpZGVy
IHVzaW5nIHRtcFByb21pc2UoKSBpbiBjYXNlcyB3aGVyZSB5b3UgYXJlbid0IHN1cmUgdGhhdCB5
b3Ugd2FudCB0byBwaW4gdGhlIHZhbHVlIHlldC4KQEAgLTI0NiwxMSArMjkxLDEyIEBAIHByaXZh
dGU6CiAgICAgLy8gICAgICAgICBhcHBlbmQoRm9vLCB0bXAoYmFyKSkKICAgICAvLwogICAgIC8v
IElkaW9tICMzOiBTYW1lIGFzIElkaW9tICMyLCBidXQgdXNpbmcgdG1wUHJvbWlzZS4gTm90aWNl
IHRoYXQgdGhpcyBjYWxscyBjb25zdW1lKCkgb25seSBhZnRlcgotICAgIC8vIGl0J3Mgc3VyZSBp
dCB3aWxsIHVzZSB0aGUgdG1wLiBUaGF0J3MgZGVsaWJlcmF0ZS4KKyAgICAvLyBpdCdzIHN1cmUg
aXQgd2lsbCB1c2UgdGhlIHRtcC4gVGhhdCdzIGRlbGliZXJhdGUuIEFsc28gbm90ZSB0aGF0IHlv
dSdyZSByZXF1aXJlZCB0byBwYXNzIGFueQorICAgIC8vIEluc3QgeW91IGNyZWF0ZSB3aXRoIGNv
bnN1bWVkIHByb21pc2VzIHRocm91Z2ggdGhhdCBwcm9taXNlJ3MgaW5zdCgpIGZ1bmN0aW9uLgog
ICAgIC8vCiAgICAgLy8gICAgIEFyZ1Byb21pc2UgcHJvbWlzZSA9IHRtcFByb21pc2UoYmFyKTsK
ICAgICAvLyAgICAgaWYgKGlzVmFsaWRGb3JtKEZvbywgcHJvbWlzZS5raW5kKCkpKQotICAgIC8v
ICAgICAgICAgYXBwZW5kKEZvbywgcHJvbWlzZS5jb25zdW1lKCp0aGlzKSkKKyAgICAvLyAgICAg
ICAgIGFwcGVuZChwcm9taXNlLmluc3QoRm9vLCBwcm9taXNlLmNvbnN1bWUoKnRoaXMpKSkKICAg
ICAvLwogICAgIC8vIEluIGJvdGggaWRpb20gIzIgYW5kIGlkaW9tICMzLCB3ZSBkb24ndCBwaW4g
dGhlIHZhbHVlIHRvIGEgdGVtcG9yYXJ5IGV4Y2VwdCB3aGVuIHdlIGFjdHVhbGx5CiAgICAgLy8g
ZW1pdCB0aGUgaW5zdHJ1Y3Rpb24uIEJvdGggdG1wKCkgYW5kIHRtcFByb21pc2UoKS5jb25zdW1l
KCp0aGlzKSB3aWxsIHBpbiBpdC4gUGlubmluZyBtZWFucwpAQCAtMjg4LDkgKzMzNCw5IEBAIHBy
aXZhdGU6CiAgICAgLy8gbG9hZEFkZHIoKSBoZWxwZXIgYW5kIHJlcXVpcmUgeW91IHRvIGJhbGFu
Y2UgQXJnUHJvbWlzZSdzIGluIGNvZGUgbGlrZSB0aGlzLiBTdWNoIGNvZGUgd2lsbAogICAgIC8v
IHdvcmsgZmluZSBpZiB3cml0dGVuIGFzOgogICAgIC8vCi0gICAgLy8gICAgIGF1dG8gdHJ5VGhp
bmdzID0gW3RoaXNdIChjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiBy
aWdodCkgeworICAgIC8vICAgICBhdXRvIHRyeVRoaW5ncyA9IFt0aGlzXSAoQXJnUHJvbWlzZSYg
bGVmdCwgQXJnUHJvbWlzZSYgcmlnaHQpIHsKICAgICAvLyAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShGb28sIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKQotICAgIC8vICAgICAgICAgICAgIHJl
dHVybiBJbnN0KEZvbywgbV92YWx1ZSwgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3Vt
ZSgqdGhpcykpOworICAgIC8vICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5z
dChGb28sIG1fdmFsdWUsIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMp
KSk7CiAgICAgLy8gICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgIC8vICAgICB9OwogICAgIC8v
ICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUaGluZ3MobG9hZFByb21pc2UobGVmdCksIHRtcFBy
b21pc2UocmlnaHQpKSkKQEAgLTQ2NiwxNCArNTEyLDMxIEBAIHByaXZhdGU6CiAKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9Ci0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmdzPgorICAgIEluc3QgdHJhcHBpbmdJbnN0KGJvb2wgdHJhcHMsIEFyZ3MmJi4uLiBhcmdzKQor
ICAgIHsKKyAgICAgICAgSW5zdCByZXN1bHQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsK
KyAgICAgICAgcmVzdWx0LmtpbmQudHJhcHMgfD0gdHJhcHM7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgSW5z
dCB0cmFwcGluZ0luc3QoVmFsdWUqIHZhbHVlLCBBcmdzJiYuLi4gYXJncykKKyAgICB7CisgICAg
ICAgIHJldHVybiB0cmFwcGluZ0luc3QodmFsdWUtPnRyYXBzKCksIHN0ZDo6Zm9yd2FyZDxBcmdz
PihhcmdzKS4uLik7CisgICAgfQorICAgIAogICAgIEFyZ1Byb21pc2UgbG9hZFByb21pc2VBbnlP
cGNvZGUoVmFsdWUqIGxvYWRWYWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghY2FuQmVJbnRlcm5h
bChsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwogICAgICAgICBpZiAoY3Jv
c3Nlc0ludGVyZmVyZW5jZShsb2FkVmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIEFyZygpOwot
ICAgICAgICByZXR1cm4gQXJnUHJvbWlzZShhZGRyKGxvYWRWYWx1ZSksIGxvYWRWYWx1ZSk7Cisg
ICAgICAgIEFyZ1Byb21pc2UgcmVzdWx0KGFkZHIobG9hZFZhbHVlKSwgbG9hZFZhbHVlKTsKKyAg
ICAgICAgaWYgKGxvYWRWYWx1ZS0+dHJhcHMoKSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXRUcmFw
cyh0cnVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBBcmdQcm9taXNl
IGxvYWRQcm9taXNlKFZhbHVlKiBsb2FkVmFsdWUsIEIzOjpPcGNvZGUgbG9hZE9wY29kZSkKQEAg
LTU4Myw3ICs2NDYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIEFyZ1Byb21pc2UgYWRkciA9IGxv
YWRQcm9taXNlKHZhbHVlKTsKICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgYWRkci5r
aW5kKCksIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgYWRkci5jb25z
dW1lKCp0aGlzKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChhZGRyLmluc3Qob3Bjb2Rl
LCBtX3ZhbHVlLCBhZGRyLmNvbnN1bWUoKnRoaXMpLCByZXN1bHQpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCkBAIC03MTcsMzQgKzc4MCwzNCBAQCBwcml2YXRlOgogICAgICAg
ICBpZiAobGVmdCAhPSByaWdodCkgewogICAgICAgICAgICAgQXJnUHJvbWlzZSBsZWZ0QWRkciA9
IGxvYWRQcm9taXNlKGxlZnQpOwogICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwg
bGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgbGVmdEFkZHIuY29uc3VtZSgqdGhpcyksIHRtcChyaWdodCksIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKGxlZnRBZGRyLmluc3Qob3Bjb2RlLCBtX3ZhbHVl
LCBsZWZ0QWRkci5jb25zdW1lKCp0aGlzKSwgdG1wKHJpZ2h0KSwgcmVzdWx0KSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29tbXV0
YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgewogICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgpKSwgdG1wKHJpZ2h0
KSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVmdEFkZHIu
Y29uc3VtZSgqdGhpcyksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChsZWZ0
QWRkci5pbnN0KG9wY29kZSwgbV92YWx1ZSwgbGVmdEFkZHIuY29uc3VtZSgqdGhpcyksIHJlc3Vs
dCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBBcmdQcm9taXNlIHJpZ2h0QWRkciA9IGxvYWRQcm9t
aXNlKHJpZ2h0KTsKICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1w
LCByaWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKLSAgICAgICAgICAgICAgICBhcHBlbmQo
b3Bjb2RlLCB0bXAobGVmdCksIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBhcHBlbmQocmlnaHRBZGRyLmluc3Qob3Bjb2RlLCBtX3ZhbHVlLCB0bXAo
bGVmdCksIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0
eSA9PSBDb21tdXRhdGl2ZSkgewogICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNv
ZGUsIHJpZ2h0QWRkci5raW5kKCksIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLmNvbnN1bWUoKnRoaXMpLCB0bXAobGVm
dCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChyaWdodEFkZHIuaW5zdChv
cGNvZGUsIG1fdmFsdWUsIHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwgdG1wKGxlZnQpLCByZXN1
bHQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRB
ZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CiAgICAgICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRN
b3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAobGVmdCksIHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLmNvbnN1bWUoKnRoaXMpLCByZXN1bHQp
OworICAgICAgICAgICAgICAgIGFwcGVuZChyaWdodEFkZHIuaW5zdChvcGNvZGUsIG1fdmFsdWUs
IHJpZ2h0QWRkci5jb25zdW1lKCp0aGlzKSwgcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04MjMsNyArODg2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGxvYWRQcm9t
aXNlLmNvbnN1bWUoKnRoaXMpOwotICAgICAgICBhcHBlbmQob3Bjb2RlLCBzdG9yZUFkZHIpOwor
ICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGxvYWRQcm9taXNlLmluc3Qob3Bj
b2RlLCBtX3ZhbHVlLCBzdG9yZUFkZHIpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApAQCAtODc1LDcgKzkzOCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KG9wY29kZSwgQXJnOjpJbW0sIHN0b3JlQWRkci5raW5kKCkpICYmIGltbShvdGhlclZhbHVlKSkg
ewogICAgICAgICAgICAgbG9hZFByb21pc2UuY29uc3VtZSgqdGhpcyk7Ci0gICAgICAgICAgICBh
cHBlbmQob3Bjb2RlLCBpbW0ob3RoZXJWYWx1ZSksIHN0b3JlQWRkcik7CisgICAgICAgICAgICBh
cHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGxvYWRQcm9taXNlLmluc3Qob3Bjb2RlLCBtX3Zh
bHVlLCBpbW0ob3RoZXJWYWx1ZSksIHN0b3JlQWRkcikpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKQEAgLTg4Myw3ICs5NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGxvYWRQcm9taXNlLmNvbnN1bWUoKnRoaXMpOwot
ICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAob3RoZXJWYWx1ZSksIHN0b3JlQWRkcik7CisgICAg
ICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgbG9hZFByb21pc2UuaW5zdChvcGNvZGUs
IG1fdmFsdWUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKSkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTkwMSw5ICs5NjQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0
dXJuIGNyZWF0ZVN0b3JlKG1vdmVPcGNvZGUsIHZhbHVlLCBkZXN0KTsKICAgICB9CiAKLSAgICB2
b2lkIGFwcGVuZFN0b3JlKFZhbHVlKiB2YWx1ZSwgY29uc3QgQXJnJiBkZXN0KQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgdm9pZCBhcHBlbmRTdG9yZShBcmdzJiYuLi4gYXJn
cykKICAgICB7Ci0gICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVTdG9yZSh2YWx1
ZSwgZGVzdCkpOworICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFsdWUsIGNyZWF0ZVN0
b3JlKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpKTsKICAgICB9CiAKICAgICBBaXI6Ok9w
Y29kZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUpCkBAIC05NjMsNiArMTAyNywxNSBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKEluc3Qob3Bjb2RlLCBtX3Zh
bHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CiAgICAgfQorICAg
IAorICAgIHZvaWQgYXBwZW5kKEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5s
YXN0KCkuYXBwZW5kKFdURk1vdmUoaW5zdCkpOworICAgIH0KKyAgICB2b2lkIGFwcGVuZChjb25z
dCBJbnN0JiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGluc3Qp
OworICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KICAgICBUKiBlbnN1cmVTcGVjaWFsKFQqJiBmaWVsZCwgQXJndW1lbnRzJiYuLi4gYXJndW1l
bnRzKQpAQCAtMTE5MCw3ICsxMjYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBBcmcg
cmlnaHRJbW0gPSBpbW0ocmlnaHQpOwogCiAgICAgICAgICAgICAgICAgYXV0byB0cnlDb21wYXJl
ID0gWyZdICgKLSAgICAgICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJn
UHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAg
ICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBBcmdQcm9taXNlJiYgbGVmdCwgQXJnUHJv
bWlzZSYmIHJpZ2h0KSAtPiBJbnN0IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3QgcmVz
dWx0ID0gY29tcGFyZSh3aWR0aCwgcmVsQ29uZCwgbGVmdCwgcmlnaHQpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgaWYgKEluc3Qg
cmVzdWx0ID0gY29tcGFyZSh3aWR0aCwgcmVsQ29uZC5mbGlwcGVkKCksIHJpZ2h0LCBsZWZ0KSkK
QEAgLTEyNzksMjAgKzEzNTIsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICAvLyBGaW5hbGx5LCBoYW5kbGUgY29tcGFyaXNvbiBiZXR3ZWVuIHRtcHMu
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmUod2lkdGgsIHJlbENvbmQsIHRtcFByb21p
c2UobGVmdCksIHRtcFByb21pc2UocmlnaHQpKTsKKyAgICAgICAgICAgICAgICBBcmdQcm9taXNl
IGxlZnRQcm9taXNlID0gdG1wUHJvbWlzZShsZWZ0KTsKKyAgICAgICAgICAgICAgICBBcmdQcm9t
aXNlIHJpZ2h0UHJvbWlzZSA9IHRtcFByb21pc2UocmlnaHQpOworICAgICAgICAgICAgICAgIHJl
dHVybiBjb21wYXJlKHdpZHRoLCByZWxDb25kLCBsZWZ0UHJvbWlzZSwgcmlnaHRQcm9taXNlKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRmxvYXRpbmcgcG9pbnQgY29tcGFyaXNv
bnMgY2FuJ3QgcmVhbGx5IGRvIGFueXRoaW5nIHNtYXJ0LgorICAgICAgICAgICAgQXJnUHJvbWlz
ZSBsZWZ0UHJvbWlzZSA9IHRtcFByb21pc2UobGVmdCk7CisgICAgICAgICAgICBBcmdQcm9taXNl
IHJpZ2h0UHJvbWlzZSA9IHRtcFByb21pc2UocmlnaHQpOwogICAgICAgICAgICAgaWYgKHZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpID09IEZsb2F0KQotICAgICAgICAgICAgICAgIHJldHVybiBjb21w
YXJlRmxvYXQoZG91YmxlQ29uZCwgdG1wUHJvbWlzZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkp
OwotICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVEb3VibGUoZG91YmxlQ29uZCwgdG1wUHJvbWlz
ZShsZWZ0KSwgdG1wUHJvbWlzZShyaWdodCkpOworICAgICAgICAgICAgICAgIHJldHVybiBjb21w
YXJlRmxvYXQoZG91YmxlQ29uZCwgbGVmdFByb21pc2UsIHJpZ2h0UHJvbWlzZSk7CisgICAgICAg
ICAgICByZXR1cm4gY29tcGFyZURvdWJsZShkb3VibGVDb25kLCBsZWZ0UHJvbWlzZSwgcmlnaHRQ
cm9taXNlKTsKICAgICAgICAgfTsKIAogICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjp3
aWR0aEZvckIzVHlwZSh2YWx1ZS0+dHlwZSgpKTsKICAgICAgICAgQXJnIHJlc0NvbmQgPSBBcmc6
OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pLmludmVydGVkKGludmVydGVkKTsKICAg
ICAgICAgCiAgICAgICAgIGF1dG8gdHJ5VGVzdCA9IFsmXSAoCi0gICAgICAgICAgICBBcmc6Oldp
ZHRoIHdpZHRoLCBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdo
dCkgLT4gSW5zdCB7CisgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoLCBBcmdQcm9taXNlJiYg
bGVmdCwgQXJnUHJvbWlzZSYmIHJpZ2h0KSAtPiBJbnN0IHsKICAgICAgICAgICAgIGlmIChJbnN0
IHJlc3VsdCA9IHRlc3Qod2lkdGgsIHJlc0NvbmQsIGxlZnQsIHJpZ2h0KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgaWYgKEluc3QgcmVzdWx0ID0gdGVzdCh3
aWR0aCwgcmVzQ29uZCwgcmlnaHQsIGxlZnQpKQpAQCAtMTQyMCw4ICsxNDk3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBpZiAoaGFzUmlnaHRDb25zdCkgewogICAgICAgICAgICAgICAg
ICAgICBpZiAoKHdpZHRoID09IEFyZzo6V2lkdGgzMiAmJiByaWdodENvbnN0ID09IDB4ZmZmZmZm
ZmYpCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCAod2lkdGggPT0gQXJnOjpXaWR0aDY0ICYm
IHJpZ2h0Q29uc3QgPT0gLTEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBcmdQcm9taXNl
IGFyZ1Byb21pc2UgPSB0bXBQcm9taXNlKGxlZnQpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKEluc3QgcmVzdWx0ID0gdHJ5VGVzdCh3aWR0aCwgYXJnUHJvbWlzZSwgYXJnUHJvbWlzZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSW5zdCByZXN1bHQgPSB0cnlUZXN0KHdpZHRo
LCB0bXBQcm9taXNlKGxlZnQpLCB0bXBQcm9taXNlKGxlZnQpKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpc1JlcHJlc2VudGFibGVBczx1aW50MzJfdD4ocmlnaHRDb25zdCkp
IHsKQEAgLTE0ODEsMTMgKzE1NTcsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChJbnN0IHJlc3VsdCA9IHRlc3Qod2lkdGgs
IHJlc0NvbmQsIHRtcFByb21pc2UodmFsdWUpLCBBcmc6OmJpdEltbSgtMSkpKQorICAgICAgICAg
ICAgQXJnUHJvbWlzZSBsZWZ0UHJvbWlzZSA9IHRtcFByb21pc2UodmFsdWUpOworICAgICAgICAg
ICAgQXJnUHJvbWlzZSByaWdodFByb21pc2UgPSBBcmc6OmJpdEltbSgtMSk7CisgICAgICAgICAg
ICBpZiAoSW5zdCByZXN1bHQgPSB0ZXN0KHdpZHRoLCByZXNDb25kLCBsZWZ0UHJvbWlzZSwgcmln
aHRQcm9taXNlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICAvLyBTb21ldGltZXMgdGhpcyBpcyB0aGUgb25seSBmb3JtIG9mIHRl
c3QgYXZhaWxhYmxlLiBXZSBwcmVmZXIgbm90IHRvIHVzZSB0aGlzIGJlY2F1c2UKICAgICAgICAg
Ly8gaXQncyBsZXNzIGNhbm9uaWNhbC4KLSAgICAgICAgcmV0dXJuIHRlc3Qod2lkdGgsIHJlc0Nv
bmQsIHRtcFByb21pc2UodmFsdWUpLCB0bXBQcm9taXNlKHZhbHVlKSk7CisgICAgICAgIEFyZ1By
b21pc2UgbGVmdFByb21pc2UgPSB0bXBQcm9taXNlKHZhbHVlKTsKKyAgICAgICAgQXJnUHJvbWlz
ZSByaWdodFByb21pc2UgPSB0bXBQcm9taXNlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHRlc3Qo
d2lkdGgsIHJlc0NvbmQsIGxlZnRQcm9taXNlLCByaWdodFByb21pc2UpOwogICAgIH0KIAogICAg
IEluc3QgY3JlYXRlQnJhbmNoKFZhbHVlKiB2YWx1ZSwgYm9vbCBpbnZlcnRlZCA9IGZhbHNlKQpA
QCAtMTQ5NiwyOSArMTU3NiwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFsdWUsCiAgICAg
ICAgICAgICBbdGhpc10gKAogICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGgsIGNvbnN0
IEFyZyYgcmVsQ29uZCwKLSAgICAgICAgICAgICAgICBjb25zdCBBcmdQcm9taXNlJiBsZWZ0LCBj
b25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICAgICAgQXJnUHJv
bWlzZSYgbGVmdCwgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAgICAgICAg
IHN3aXRjaCAod2lkdGgpIHsKICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg4OgogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoOCwgQXJnOjpSZWxDb25kLCBs
ZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0
Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoOCwgbV92YWx1ZSwgcmVs
Q29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCBy
aWdodC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5j
b25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpXaWR0aDE2OgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwog
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgogICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNWYWxpZEZvcm0oQnJhbmNoMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0
LmtpbmQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQuaW5zdChyaWdodC5pbnN0KAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEJyYW5jaDMyLCBtX3ZhbHVlLCByZWxDb25kLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRo
aXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCBy
aWdodC5jb25zdW1lKCp0aGlzKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRo
NjQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShCcmFuY2g2NCwgQXJnOjpS
ZWxDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2luZCgpKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5p
bnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnJhbmNoNjQsIG1f
dmFsdWUsIHJlbENvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1l
KCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNTI2LDQ3ICsxNjA2LDQ3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB9LAogICAgICAgICAgICAgW3RoaXNdICgKICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdp
ZHRoLCBjb25zdCBBcmcmIHJlc0NvbmQsCi0gICAgICAgICAgICAgICAgY29uc3QgQXJnUHJvbWlz
ZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAg
ICAgIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6Oldp
ZHRoODoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKEJyYW5jaFRlc3Q4LCBB
cmc6OlJlc0NvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBs
ZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hU
ZXN0OCwgbV92YWx1ZSwgcmVzQ29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0
LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgp
OwogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDE2OgogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDMyOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoVGVzdDMyLCBBcmc6OlJlc0Nv
bmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3Qo
cmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hUZXN0MzIsIG1f
dmFsdWUsIHJlc0NvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1l
KCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcykpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6V2lkdGg2NDoKICAgICAgICAgICAgICAgICAgICAgaWYgKGlz
VmFsaWRGb3JtKEJyYW5jaFRlc3Q2NCwgQXJnOjpSZXNDb25kLCBsZWZ0LmtpbmQoKSwgcmlnaHQu
a2luZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQnJhbmNoVGVzdDY0LCBtX3ZhbHVlLCByZXNDb25kLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUo
KnRoaXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMp
LCByaWdodC5jb25zdW1lKCp0aGlzKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
IFt0aGlzXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFy
Z1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgIFt0aGlzXSAoQXJnIGRvdWJs
ZUNvbmQsIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKICAg
ICAgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoRG91YmxlLCBBcmc6OkRvdWJsZUNv
bmQsIGxlZnQua2luZCgpLCByaWdodC5raW5kKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBJbnN0KAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmlu
c3QoCiAgICAgICAgICAgICAgICAgICAgICAgICBCcmFuY2hEb3VibGUsIG1fdmFsdWUsIGRvdWJs
ZUNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdo
dC5jb25zdW1lKCp0aGlzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LmNvbnN1bWUo
KnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFt0
aGlzXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1By
b21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgIFt0aGlzXSAoQXJnIGRvdWJsZUNv
bmQsIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKICAgICAg
ICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0oQnJhbmNoRmxvYXQsIEFyZzo6RG91YmxlQ29uZCwg
bGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IEluc3QoCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgK
ICAgICAgICAgICAgICAgICAgICAgICAgIEJyYW5jaEZsb2F0LCBtX3ZhbHVlLCBkb3VibGVDb25k
LAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29u
c3VtZSgqdGhpcykpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlz
KSwgcmlnaHQuY29uc3VtZSgqdGhpcykpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAgICAgICAgIH0sCkBAIC0xNTc5LDIzICsxNjU5LDIz
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgIFt0aGlzXSAoCiAg
ICAgICAgICAgICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZWxDb25kLAotICAg
ICAgICAgICAgICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJp
Z2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgICAgICBBcmdQcm9taXNlJiBsZWZ0LCBBcmdQcm9t
aXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgewog
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CiAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OldpZHRoMTY6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OldpZHRoMzI6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShDb21wYXJlMzIsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQo
KSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlMzIsIG1fdmFsdWUsIHJlbENvbmQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3Vt
ZSgqdGhpcyksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7
CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoNjQ6CiAgICAgICAgICAgICAgICAgICAg
IGlmIChpc1ZhbGlkRm9ybShDb21wYXJlNjQsIEFyZzo6UmVsQ29uZCwgbGVmdC5raW5kKCksIHJp
Z2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
SW5zdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5z
dCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXJlNjQsIG1fdmFsdWUsIHJlbENv
bmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmln
aHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3Zh
bHVlKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBJbnN0KCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTYwMyw0MSArMTY4Myw0MSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIFt0aGlzXSAoCiAgICAgICAgICAgICAg
ICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZXNDb25kLAotICAgICAgICAgICAgICAg
IGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0
IHsKKyAgICAgICAgICAgICAgICBBcmdQcm9taXNlJiBsZWZ0LCBBcmdQcm9taXNlJiByaWdodCkg
LT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgewogICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpXaWR0aDg6CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OldpZHRoMTY6
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OldpZHRoMzI6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShUZXN0
MzIsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXApKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUZXN0MzIsIG1fdmFsdWUsIHJlc0NvbmQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3Zh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwg
cmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OldpZHRoNjQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShU
ZXN0NjQsIEFyZzo6UmVzQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUZXN0NjQsIG1fdmFsdWUsIHJlc0NvbmQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcCht
X3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0aGlz
KSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIFt0aGlzXSAoY29uc3QgQXJnJiBkb3VibGVDb25kLCBjb25zdCBBcmdQ
cm9taXNlJiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAg
ICAgICBbdGhpc10gKGNvbnN0IEFyZyYgZG91YmxlQ29uZCwgQXJnUHJvbWlzZSYgbGVmdCwgQXJn
UHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShDb21wYXJlRG91YmxlLCBBcmc6OkRvdWJsZUNvbmQsIGxlZnQua2luZCgpLCByaWdodC5raW5k
KCksIEFyZzo6VG1wKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQuaW5zdChyaWdodC5pbnN0KAogICAgICAgICAgICAg
ICAgICAgICAgICAgQ29tcGFyZURvdWJsZSwgbV92YWx1ZSwgZG91YmxlQ29uZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMp
LCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVmdC5jb25zdW1lKCp0
aGlzKSwgcmlnaHQuY29uc3VtZSgqdGhpcyksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gSW5zdCgpOwogICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgIFt0aGlzXSAoY29uc3QgQXJnJiBkb3VibGVDb25kLCBjb25zdCBBcmdQcm9taXNl
JiBsZWZ0LCBjb25zdCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CisgICAgICAgICAgICBb
dGhpc10gKGNvbnN0IEFyZyYgZG91YmxlQ29uZCwgQXJnUHJvbWlzZSYgbGVmdCwgQXJnUHJvbWlz
ZSYgcmlnaHQpIC0+IEluc3QgewogICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShDb21w
YXJlRmxvYXQsIEFyZzo6RG91YmxlQ29uZCwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJn
OjpUbXApKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbGVmdC5pbnN0KHJpZ2h0Lmluc3QoCiAgICAgICAgICAgICAgICAgICAg
ICAgICBDb21wYXJlRmxvYXQsIG1fdmFsdWUsIGRvdWJsZUNvbmQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0LmNvbnN1bWUoKnRoaXMpLCByaWdodC5jb25zdW1lKCp0aGlzKSwgdG1wKG1f
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJp
Z2h0LmNvbnN1bWUoKnRoaXMpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3QoKTsKICAgICAgICAgICAgIH0sCkBAIC0xNjU0LDIy
ICsxNzM0LDIyIEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBJbnN0IGNyZWF0ZVNlbGVjdChjb25z
dCBNb3ZlQ29uZGl0aW9uYWxseUNvbmZpZyYgY29uZmlnKQogICAgIHsKLSAgICAgICAgYXV0byBj
cmVhdGVTZWxlY3RJbnN0cnVjdGlvbiA9IFsmXSAoQWlyOjpPcGNvZGUgb3Bjb2RlLCBjb25zdCBB
cmcmIGNvbmRpdGlvbiwgY29uc3QgQXJnUHJvbWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYg
cmlnaHQpIC0+IEluc3QgeworICAgICAgICBhdXRvIGNyZWF0ZVNlbGVjdEluc3RydWN0aW9uID0g
WyZdIChBaXI6Ok9wY29kZSBvcGNvZGUsIGNvbnN0IEFyZyYgY29uZGl0aW9uLCBBcmdQcm9taXNl
JiBsZWZ0LCBBcmdQcm9taXNlJiByaWdodCkgLT4gSW5zdCB7CiAgICAgICAgICAgICBpZiAoaXNW
YWxpZEZvcm0ob3Bjb2RlLCBjb25kaXRpb24ua2luZCgpLCBsZWZ0LmtpbmQoKSwgcmlnaHQua2lu
ZCgpLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewogICAgICAgICAgICAgICAgIFRt
cCByZXN1bHQgPSB0bXAobV92YWx1ZSk7CiAgICAgICAgICAgICAgICAgVG1wIHRoZW5DYXNlID0g
dG1wKG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgICAgICBUbXAgZWxzZUNhc2UgPSB0
bXAobV92YWx1ZS0+Y2hpbGQoMikpOwotICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAg
ICAgICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAg
ICAgICAgb3Bjb2RlLCBtX3ZhbHVlLCBjb25kaXRpb24sCi0gICAgICAgICAgICAgICAgICAgIGxl
ZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCB0aGVuQ2FzZSwgZWxzZUNh
c2UsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJp
Z2h0LmNvbnN1bWUoKnRoaXMpLCB0aGVuQ2FzZSwgZWxzZUNhc2UsIHJlc3VsdCkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgY29uZGl0aW9uLmtp
bmQoKSwgbGVmdC5raW5kKCksIHJpZ2h0LmtpbmQoKSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewog
ICAgICAgICAgICAgICAgIFRtcCByZXN1bHQgPSB0bXAobV92YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgVG1wIHNvdXJjZSA9IHRtcChtX3ZhbHVlLT5jaGlsZCgxKSk7CiAgICAgICAgICAgICAgICAg
YXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLCB0bXAobV92YWx1ZS0+
Y2hpbGQoMikpLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybiBJbnN0KAorICAgICAg
ICAgICAgICAgIHJldHVybiBsZWZ0Lmluc3QocmlnaHQuaW5zdCgKICAgICAgICAgICAgICAgICAg
ICAgb3Bjb2RlLCBtX3ZhbHVlLCBjb25kaXRpb24sCi0gICAgICAgICAgICAgICAgICAgIGxlZnQu
Y29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRoaXMpLCBzb3VyY2UsIHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgICAgIGxlZnQuY29uc3VtZSgqdGhpcyksIHJpZ2h0LmNvbnN1bWUoKnRo
aXMpLCBzb3VyY2UsIHJlc3VsdCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJu
IEluc3QoKTsKICAgICAgICAgfTsKQEAgLTE2NzgsNyArMTc1OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSwKICAgICAgICAgICAgIFsmXSAoCiAgICAgICAgICAg
ICAgICAgQXJnOjpXaWR0aCB3aWR0aCwgY29uc3QgQXJnJiByZWxDb25kLAotICAgICAgICAgICAg
ICAgIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNvbnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJ
bnN0IHsKKyAgICAgICAgICAgICAgICBBcmdQcm9taXNlJiBsZWZ0LCBBcmdQcm9taXNlJiByaWdo
dCkgLT4gSW5zdCB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh3aWR0aCkgewogICAgICAgICAg
ICAgICAgIGNhc2UgQXJnOjpXaWR0aDg6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBT
dXBwb3J0IHRoZXNlIHRoaW5ncy4KQEAgLTE2OTUsNyArMTc3NSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgWyZdICgKICAgICAgICAgICAgICAgICBBcmc6OldpZHRo
IHdpZHRoLCBjb25zdCBBcmcmIHJlc0NvbmQsCi0gICAgICAgICAgICAgICAgY29uc3QgQXJnUHJv
bWlzZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAg
ICAgICAgIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHdpZHRoKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBBcmc6
OldpZHRoODoKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgbW9yZSB0aGlu
Z3MuCkBAIC0xNzEwLDEwICsxNzkwLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfSwKLSAg
ICAgICAgICAgIFsmXSAoQXJnIGRvdWJsZUNvbmQsIGNvbnN0IEFyZ1Byb21pc2UmIGxlZnQsIGNv
bnN0IEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsKKyAgICAgICAgICAgIFsmXSAoQXJnIGRv
dWJsZUNvbmQsIEFyZ1Byb21pc2UmIGxlZnQsIEFyZ1Byb21pc2UmIHJpZ2h0KSAtPiBJbnN0IHsK
ICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlU2VsZWN0SW5zdHJ1Y3Rpb24oY29uZmlnLm1v
dmVDb25kaXRpb25hbGx5RG91YmxlLCBkb3VibGVDb25kLCBsZWZ0LCByaWdodCk7CiAgICAgICAg
ICAgICB9LAotICAgICAgICAgICAgWyZdIChBcmcgZG91YmxlQ29uZCwgY29uc3QgQXJnUHJvbWlz
ZSYgbGVmdCwgY29uc3QgQXJnUHJvbWlzZSYgcmlnaHQpIC0+IEluc3QgeworICAgICAgICAgICAg
WyZdIChBcmcgZG91YmxlQ29uZCwgQXJnUHJvbWlzZSYgbGVmdCwgQXJnUHJvbWlzZSYgcmlnaHQp
IC0+IEluc3QgewogICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVTZWxlY3RJbnN0cnVjdGlv
bihjb25maWcubW92ZUNvbmRpdGlvbmFsbHlGbG9hdCwgZG91YmxlQ29uZCwgbGVmdCwgcmlnaHQp
OwogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIGZhbHNlKTsKQEAgLTE3MjksMjkgKzE4MDks
MjcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgTG9h
ZDogewotICAgICAgICAgICAgYXBwZW5kKAotICAgICAgICAgICAgICAgIG1vdmVGb3JUeXBlKG1f
dmFsdWUtPnR5cGUoKSksCi0gICAgICAgICAgICAgICAgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFs
dWUpKTsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFwcGluZ0luc3QobV92YWx1ZSwgbW92ZUZvclR5
cGUobV92YWx1ZS0+dHlwZSgpKSwgbV92YWx1ZSwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIExvYWQ4UzogewotICAgICAgICAgICAgYXBwZW5kKExvYWQ4U2lnbmVkRXh0ZW5kVG8z
MiwgYWRkcihtX3ZhbHVlKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIGFwcGVuZCh0cmFw
cGluZ0luc3QobV92YWx1ZSwgTG9hZDhTaWduZWRFeHRlbmRUbzMyLCBtX3ZhbHVlLCBhZGRyKG1f
dmFsdWUpLCB0bXAobV92YWx1ZSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgTG9hZDhaOiB7Ci0gICAgICAgICAgICBhcHBlbmQoTG9hZDgsIGFkZHIo
bV92YWx1ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0
KG1fdmFsdWUsIExvYWQ4LCBtX3ZhbHVlLCBhZGRyKG1fdmFsdWUpLCB0bXAobV92YWx1ZSkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTG9hZDE2Uzog
ewotICAgICAgICAgICAgYXBwZW5kKExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIGFkZHIobV92YWx1
ZSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICBhcHBlbmQodHJhcHBpbmdJbnN0KG1fdmFs
dWUsIExvYWQxNlNpZ25lZEV4dGVuZFRvMzIsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcCht
X3ZhbHVlKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBMb2FkMTZaOiB7Ci0gICAgICAgICAgICBhcHBlbmQoTG9hZDE2LCBhZGRyKG1fdmFsdWUpLCB0
bXAobV92YWx1ZSkpOworICAgICAgICAgICAgYXBwZW5kKHRyYXBwaW5nSW5zdChtX3ZhbHVlLCBM
b2FkMTYsIG1fdmFsdWUsIGFkZHIobV92YWx1ZSksIHRtcChtX3ZhbHVlKSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTIwMjIsNyArMjEwMCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlU3RvcmUoQWlyOjpT
dG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSkpOworICAgICAgICAgICAgYXBwZW5k
U3RvcmUoQWlyOjpTdG9yZTgsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjA0Myw3ICsyMTIxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1faW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVTdG9yZShBaXI6
OlN0b3JlMTYsIHZhbHVlVG9TdG9yZSwgYWRkcihtX3ZhbHVlKSkpOworICAgICAgICAgICAgYXBw
ZW5kU3RvcmUoQWlyOjpTdG9yZTE2LCB2YWx1ZVRvU3RvcmUsIGFkZHIobV92YWx1ZSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDIwNjY4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkx
LDYgKzE5MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNhc2UgTW9kOgogICAgICAgICAgICAg
Y2FzZSBCaXRBbmQ6CiAgICAgICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICAgICBW
QUxJREFURSghdmFsdWUtPmtpbmQoKS50cmFwcygpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAg
ICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBEaXY6CiAgICAgICAgICAgICAgICAgY2FzZSBNb2Q6CkBAIC0zMzksMTQgKzM0MCwxNCBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBjYXNlIExvYWQ4UzoKICAgICAgICAgICAgIGNhc2UgTG9hZDE2
WjoKICAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKLSAgICAgICAgICAgICAgICBWQUxJREFURSgh
dmFsdWUtPmtpbmQoKS5oYXNFeHRyYUJpdHMoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSghdmFsdWUtPmtpbmQoKS5pc0NoaWxsKCksICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAgICAgVkFM
SURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaXNDaGlsbCgpLCAoIkF0ICIs
ICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigp
ID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
PmNoaWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZh
bHVlKSk7CkBAIC0zNTQsNyArMzU1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBTdG9yZTg6CiAgICAgICAgICAgICBjYXNlIFN0b3JlMTY6Ci0g
ICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCkuaGFzRXh0cmFCaXRzKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5raW5kKCku
aXNDaGlsbCgpLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkg
PT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKQEAgLTM2Miw3ICszNjMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja0FjY2Vzcyh2YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAg
ICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmhhc0V4dHJhQml0cygpLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+a2luZCgpLmlzQ2hpbGwoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0
ICIsICp2YWx1ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2
aXNpb24gMjA2Njg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MzUsNiArNjM1LDcgQEAgRWZmZWN0cyBWYWx1ZTo6ZWZmZWN0cygp
IGNvbnN0CiAgICAgICAgIHJlc3VsdC50ZXJtaW5hbCA9IHRydWU7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKyAgICByZXN1bHQuZXhpdHNTaWRld2F5cyB8PSB0cmFwcygpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MjA2Njg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjksNiArNjksNyBAQCBwdWJsaWM6CiAgICAgLy8gSXQncyBnb29kIHByYWN0aWNl
IHRvIG1pcnJvciBLaW5kIG1ldGhvZHMgaGVyZSwgc28geW91IGNhbiBzYXkgdmFsdWUtPmlzQmxh
aCgpCiAgICAgLy8gaW5zdGVhZCBvZiB2YWx1ZS0+a2luZCgpLmlzQmxhaCgpLgogICAgIGJvb2wg
aXNDaGlsbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKS5pc0NoaWxsKCk7IH0KKyAgICBib29sIHRy
YXBzKCkgY29uc3QgeyByZXR1cm4ga2luZCgpLnRyYXBzKCk7IH0KIAogICAgIE9yaWdpbiBvcmln
aW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogICAgIHZvaWQgc2V0T3JpZ2luKE9yaWdp
biBvcmlnaW4pIHsgbV9vcmlnaW4gPSBvcmlnaW47IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCShyZXZpc2lvbiAyMDY2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxMDgsNiArMTMxMDgsMTE5IEBAIHZv
aWQgdGVzdExvYWRGZW5jZSgpCiAgICAgY2hlY2tEb2VzTm90VXNlSW5zdHJ1Y3Rpb24oKmNvZGUs
ICJkbWIgICAgaXNoc3QiKTsKIH0KIAordm9pZCB0ZXN0VHJhcHBpbmdMb2FkKCkKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIGludCB4ID0gNDI7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIHRyYXBwaW5nKExvYWQpLCBJbnQzMiwgT3JpZ2luKCksCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
ICZ4KSkpOworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSwgNDIpOworICAg
IHVuc2lnbmVkIHRyYXBzQ291bnQgPSAwOworICAgIGZvciAoQWlyOjpCYXNpY0Jsb2NrKiBibG9j
ayA6IHByb2MuY29kZSgpKSB7CisgICAgICAgIGZvciAoQWlyOjpJbnN0JiBpbnN0IDogKmJsb2Nr
KSB7CisgICAgICAgICAgICBpZiAoaW5zdC5raW5kLnRyYXBzKQorICAgICAgICAgICAgICAgIHRy
YXBzQ291bnQrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBDSEVDS19FUSh0cmFwc0NvdW50LCAx
dSk7Cit9CisKK3ZvaWQgdGVzdFRyYXBwaW5nU3RvcmUoKQoreworICAgIFByb2NlZHVyZSBwcm9j
OworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHggPSA0
MjsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCB0cmFw
cGluZyhTdG9yZSksIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMTExKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0
UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmeCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSk7CisgICAgY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Mp
OworICAgIENIRUNLX0VRKHgsIDExMSk7CisgICAgdW5zaWduZWQgdHJhcHNDb3VudCA9IDA7Cisg
ICAgZm9yIChBaXI6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2RlKCkpIHsKKyAgICAgICAg
Zm9yIChBaXI6Okluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChpbnN0Lmtp
bmQudHJhcHMpCisgICAgICAgICAgICAgICAgdHJhcHNDb3VudCsrOworICAgICAgICB9CisgICAg
fQorICAgIENIRUNLX0VRKHRyYXBzQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0VHJhcHBpbmdM
b2FkQWRkU3RvcmUoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHggPSA0MjsKKyAgICBDb25zdFB0clZhbHVl
KiBwdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ4
KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCB0cmFw
cGluZyhTdG9yZSksIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgdHJhcHBpbmcoTG9hZCksIEludDMyLCBPcmlnaW4oKSwg
cHRyKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9y
aWdpbigpLCAzKSksCisgICAgICAgIHB0cik7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICBjb21waWxlQW5kUnVuPGludD4ocHJvYyk7Cisg
ICAgQ0hFQ0tfRVEoeCwgNDUpOworICAgIGJvb2wgdHJhcHMgPSBmYWxzZTsKKyAgICBmb3IgKEFp
cjo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jLmNvZGUoKSkgeworICAgICAgICBmb3IgKEFpcjo6
SW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaWYgKGluc3Qua2luZC50cmFwcykK
KyAgICAgICAgICAgICAgICB0cmFwcyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgQ0hF
Q0sodHJhcHMpOworfQorCit2b2lkIHRlc3RUcmFwcGluZ0xvYWREQ0UoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
aW50IHggPSA0MjsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBw
cm9jLCB0cmFwcGluZyhMb2FkKSwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBl
bmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ4KSk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpKTsKKyAgICBjb21waWxlQW5kUnVu
PGludD4ocHJvYyk7CisgICAgdW5zaWduZWQgdHJhcHNDb3VudCA9IDA7CisgICAgZm9yIChBaXI6
OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5jb2RlKCkpIHsKKyAgICAgICAgZm9yIChBaXI6Oklu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChpbnN0LmtpbmQudHJhcHMpCisg
ICAgICAgICAgICAgICAgdHJhcHNDb3VudCsrOworICAgICAgICB9CisgICAgfQorICAgIENIRUNL
X0VRKHRyYXBzQ291bnQsIDF1KTsKK30KKwordm9pZCB0ZXN0VHJhcHBpbmdTdG9yZUVsaW1pbmF0
aW9uKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIGludCB4ID0gNDI7CisgICAgVmFsdWUqIHB0ciA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJngpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIHRyYXBwaW5nKFN0b3JlKSwgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCA0MyksCisgICAgICAgIHB0cik7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgcHJvYywgdHJhcHBpbmcoU3RvcmUpLCBPcmlnaW4oKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQ0KSwKKyAgICAgICAg
cHRyKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCkp
OworICAgIGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKTsKKyAgICB1bnNpZ25lZCBzdG9yZUNvdW50
ID0gMDsKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKKyAgICAgICAg
aWYgKE1lbW9yeVZhbHVlOjppc1N0b3JlKHZhbHVlLT5vcGNvZGUoKSkpCisgICAgICAgICAgICBz
dG9yZUNvdW50Kys7CisgICAgfQorICAgIENIRUNLX0VRKHN0b3JlQ291bnQsIDJ1KTsKK30KKwog
dm9pZCB0ZXN0TW92ZUNvbnN0YW50cygpCiB7CiAgICAgYXV0byBjaGVjayA9IFtdIChQcm9jZWR1
cmUmIHByb2MpIHsKQEAgLTE0NjA5LDYgKzE0NzIyLDExIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIq
IGZpbHRlcikKICAgICBSVU4odGVzdE1lbW9yeUZlbmNlKCkpOwogICAgIFJVTih0ZXN0U3RvcmVG
ZW5jZSgpKTsKICAgICBSVU4odGVzdExvYWRGZW5jZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5n
TG9hZCgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nU3RvcmUoKSk7CisgICAgUlVOKHRlc3RUcmFw
cGluZ0xvYWRBZGRTdG9yZSgpKTsKKyAgICBSVU4odGVzdFRyYXBwaW5nTG9hZERDRSgpKTsKKyAg
ICBSVU4odGVzdFRyYXBwaW5nU3RvcmVFbGltaW5hdGlvbigpKTsKICAgICBSVU4odGVzdE1vdmVD
b25zdGFudHMoKSk7CiAgICAgCiAgICAgaWYgKHRhc2tzLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAyMDY2ODkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYy
LDcgKzE2Miw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+PiYgYmxvY2tMaXN0KCkgeyByZXR1cm4gbV9ibG9ja3M7IH0KIAogICAgIC8vIEZpbmRzIHRo
ZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgn
ID49IGluZGV4LgotICAgIHVuc2lnbmVkIGZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5k
ZXgpIGNvbnN0OworICAgIEpTX0VYUE9SVF9QUklWQVRFIHVuc2lnbmVkIGZpbmRGaXJzdEJsb2Nr
SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCiAgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0
IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPiBpbmRleC4K
ICAgICB1bnNpZ25lZCBmaW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Owo=
</data>
<flag name="review"
          id="313593"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>