<?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>23674</bug_id>
          
          <creation_ts>2009-02-01 09:50:27 -0800</creation_ts>
          <short_desc>Speed up some things based on profiling the page load test</short_desc>
          <delta_ts>2009-02-02 16:09:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>levin</cc>
    
    <cc>oliver</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107901</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 09:50:27 -0800</bug_when>
    <thetext>The Safari team has a page load test that we use to measure performance. It&apos;s not open source because it contains materials that are copyrighted and we don&apos;t have the right to publish.

I ran it recently and profiled it and found some things I could speed up simply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107902</commentid>
    <comment_count>1</comment_count>
      <attachid>27231</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 09:51:48 -0800</bug_when>
    <thetext>Created attachment 27231
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107907</commentid>
    <comment_count>2</comment_count>
      <attachid>27233</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 10:15:06 -0800</bug_when>
    <thetext>Created attachment 27233
patch

First version was missing parentheses in one place and thus didn&apos;t compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107910</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-02-01 11:46:05 -0800</bug_when>
    <thetext>I did a quick look out of curiosity.

Two small comments:

In WebCore/loader/TextResourceDecoder.cpp 

 if (dataStart[0] == &apos;@&apos;
	            &amp;&amp; dataStart[1] == &apos;c&apos;
    	            &amp;&amp; dataStart[2] == &apos;h&apos;
Indent appears off for the &amp;&amp; lines.

----
In StringImpl::createStrippingNullCharacters

    int foundNull = 0;
    for (unsigned i = 0; !foundNull &amp;&amp; i &lt; length; i++) {
        int c = characters[i]; // more efficient than using UChar here (at least on Intel Mac OS)
        foundNull |= !c;
    }

It could be &quot;foundNull = !c;&quot;  (no bitwise or)
No sure if this will matter but since it mentioned as hot and things like using int instead of UChar were considered, I thought I&apos;d point it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107911</commentid>
    <comment_count>4</comment_count>
      <attachid>27233</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-02-01 12:27:33 -0800</bug_when>
    <thetext>Comment on attachment 27233
patch

I am concerned that this patch seems to have a large amount of seemingly unrelated and non-local changes, i&apos;m especially concerned about the inclusion of text decoder changes..  After some consideration i&apos;d like this patch separated out into a few parts
* reserveInitialCapacity addition/use
* TextDecoder changes
* All the inlining changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107922</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 17:43:48 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; * reserveInitialCapacity addition/use
&gt; * TextDecoder changes
&gt; * All the inlining changes

Seems fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107933</commentid>
    <comment_count>6</comment_count>
      <attachid>27242</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 19:03:31 -0800</bug_when>
    <thetext>Created attachment 27242
patch — this time without TextResourceDecoder or reserveInitialCapacity changes as requested

The reserveInitialCapacity changes are now bug 23676.

The TextResourceDecoder changes are now bug 23677.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107934</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 19:06:30 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; In StringImpl::createStrippingNullCharacters
&gt; 
&gt;     int foundNull = 0;
&gt;     for (unsigned i = 0; !foundNull &amp;&amp; i &lt; length; i++) {
&gt;         int c = characters[i]; // more efficient than using UChar here (at
&gt; least on Intel Mac OS)
&gt;         foundNull |= !c;
&gt;     }
&gt; 
&gt; It could be &quot;foundNull = !c;&quot;  (no bitwise or)

Good point. I just moved the code, didn&apos;t change it, but it seems obviously less efficient to do the |= there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107935</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 19:20:52 -0800</bug_when>
    <thetext>Ollie, please let me know if you&apos;d like this broken into even more pieces. It&apos;s quite a bit of work, but I&apos;d be happy to do it.

I have a bunch more of these ideas that I&apos;d like to tackle once these are landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107936</commentid>
    <comment_count>9</comment_count>
      <attachid>27242</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-01 20:10:31 -0800</bug_when>
    <thetext>Comment on attachment 27242
patch — this time without TextResourceDecoder or reserveInitialCapacity changes as requested

r=me, although I don&apos;t really like &quot;firstLineStyleSlowCase&quot; as a function name, but I can&apos;t think of anything better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107975</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-02 09:13:59 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I don&apos;t really like &quot;firstLineStyleSlowCase&quot; as a function name,
&gt; but I can&apos;t think of anything better.

In an earlier version I called it something like computeFirstLineStyle.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107977</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-02 09:32:06 -0800</bug_when>
    <thetext>trac.webkit.org/changeset/40475</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108054</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-02 16:09:00 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/40475

Regressions fixed in:
http://trac.webkit.org/changeset/40484
http://trac.webkit.org/changeset/40499
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27231</attachid>
            <date>2009-02-01 09:51:48 -0800</date>
            <delta_ts>2009-02-01 10:15:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>SpeedupsPatch.txt</filename>
            <type>text/plain</type>
            <size>86408</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQwNDcxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDktMDItMDEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAyMzY3NDogc3BlZWQgdXAgc29tZSB0aGluZ3MgYmFzZWQgb24g
cHJvZmlsaW5nIHRoZSBwYWdlIGxvYWQgdGVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQKKworICAgICAgICBBZGRlZCBWZWN0b3I6OnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkuCisKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAg
ICAgICAoSlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyk6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFj
aXR5LgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyOjpM
ZXhlcik6IERpdHRvLgorICAgICAgICAoSlNDOjpMZXhlcjo6Y2xlYXIpOiBEaXR0by4KKworICAg
ICAgICAqIHd0Zi9WZWN0b3IuaDogQWRkZWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSwgYSBtb3Jl
IGVmZmljaWVudCB2ZXJzaW9uIG9mCisgICAgICAgIHJlc2VydmVDYXBhY2l0eSBmb3IgdXNlIHdo
ZW4gdGhlIHZlY3RvciBpcyBicmFuZCBuZXcgKHN0aWxsIHNpemUgMCB3aXRoIG5vCisgICAgICAg
IGNhcGFjaXR5IG90aGVyIHRoYW4gdGhlIGlubGluZSBjYXBhY2l0eSkuCisKIDIwMDktMDEtMzAg
IE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBi
eSBPbGl2ZXIgSHVudC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNp
b24gNDA0NzEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjcsNyArNDY3LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09iamVj
dENvcHlQcm9wZQogICAgIGpzT2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIGFycmF5KTsK
IAogICAgIHNpemVfdCBzaXplID0gYXJyYXkuc2l6ZSgpOwotICAgIHByb3BlcnR5TmFtZXMtPmFy
cmF5LnJlc2VydmVDYXBhY2l0eShzaXplKTsKKyAgICBwcm9wZXJ0eU5hbWVzLT5hcnJheS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLT5hcnJheS5hcHBlbmQoSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+KEFkb3B0LCBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKGFycmF5W2ldLnVzdHJp
bmcoKSkucmVsZWFzZVJlZigpKSk7CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJ
KHJldmlzaW9uIDQwNDcxKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsOCArODAsOCBAQCBMZXhlcjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX21haW5U
YWJsZShKU0M6Om1haW5UYWJsZSkKIHsKLSAgICBtX2J1ZmZlcjgucmVzZXJ2ZUNhcGFjaXR5KGlu
aXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOwotICAgIG1fYnVmZmVyMTYucmVzZXJ2ZUNhcGFjaXR5
KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOworICAgIG1fYnVmZmVyOC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOworICAgIG1fYnVmZmVyMTYucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5KTsKIH0KIAogTGV4
ZXI6On5MZXhlcigpCkBAIC04ODQsMTEgKzg4NCwxMSBAQCB2b2lkIExleGVyOjpjbGVhcigpCiAg
ICAgbV9pZGVudGlmaWVycy5jbGVhcigpOwogCiAgICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7
Ci0gICAgbmV3QnVmZmVyOC5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0
eSk7CisgICAgbmV3QnVmZmVyOC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGluaXRpYWxSZWFkQnVm
ZmVyQ2FwYWNpdHkpOwogICAgIG1fYnVmZmVyOC5zd2FwKG5ld0J1ZmZlcjgpOwogCiAgICAgVmVj
dG9yPFVDaGFyPiBuZXdCdWZmZXIxNjsKLSAgICBuZXdCdWZmZXIxNi5yZXNlcnZlQ2FwYWNpdHko
aW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7CisgICAgbmV3QnVmZmVyMTYucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShpbml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5KTsKICAgICBtX2J1ZmZlcjE2LnN3
YXAobmV3QnVmZmVyMTYpOwogCiAgICAgbV9pc1JlcGFyc2luZyA9IGZhbHNlOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0
Zi9WZWN0b3IuaAkocmV2aXNpb24gNDA0NzEpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgdm9pZCBncm93KHNpemVfdCBzaXplKTsKICAgICAgICAgdm9pZCByZXNpemUoc2l6ZV90
IHNpemUpOwogICAgICAgICB2b2lkIHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkp
OworICAgICAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBh
Y2l0eSk7CiAgICAgICAgIHZvaWQgc2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsK
ICAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpIHsgc2hyaW5rQ2FwYWNpdHkoc2l6ZSgpKTsgfQog
CkBAIC03MzMsNiArNzM0LDE1IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXpl
X3QgaW5pdGlhbENhcGFjaXR5KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAg
ICAgICBBU1NFUlQoY2FwYWNpdHkoKSA9PSBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIGlmIChp
bml0aWFsQ2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0eSkKKyAgICAgICAgICAgIG1fYnVmZmVyLmFs
bG9jYXRlQnVmZmVyKGluaXRpYWxDYXBhY2l0eSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT46OnNocmlua0NhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKICAgICB7
CiAgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+PSBjYXBhY2l0eSgpKQpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQwNDcx
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMDMgQEAK
KzIwMDktMDItMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyMzY3NDogc3BlZWQgdXAg
c29tZSB0aGluZ3MgYmFzZWQgb24gcHJvZmlsaW5nIHRoZSBwYWdlIGxvYWQgdGVzdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQKKworICAgICAg
ICBJIG1lYXN1cmVkIGEgdG90YWwgMSUgc3BlZWR1cC4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjc3NQ
cm9wZXJ0eU5hbWUpOgorCisgICAgICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbik6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5LgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnRp
ZXNJblNldCk6IERpdHRvLgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCk6IERpdHRvLgorICAg
ICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5TZXQpOiBEaXR0by4KKworICAgICAg
ICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMpOiBVc2UgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eS4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudCk6IFVzZSB0aGUgbmV3bHkgbmFtZWQgY3NzVGFyZ2V0IGluc3RlYWQKKyAgICAgICAgb2Yg
dGhlIG9sZCBuYW1lLCBnZXRDU1NUYXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBEaXR0by4KKworICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KTogTW92ZWQgY29kZSBmcm9tIE5vZGUgaW4gaGVy
ZSByYXRoZXIgdGhhbgorICAgICAgICBjYWxsaW5nIHRocm91Z2ggdG8gRXZlbnRUYXJnZXROb2Rl
OjppbnNlcnRlZEludG9Eb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6
OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6Omluc2VydGVkSW50b1RyZWUpOiBUd2Vha2VkIGEgYml0LgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb21UcmVlKTogRGl0dG8uCisKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZS5oOiBNb3ZlZCB0aGUgY29uc3RydWN0b3IgZGVmaW5pdGlvbiBoZXJl
IGFuZCBtYWRlIGl0IGlubGluZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNGcm9tQWxsTm9k
ZXMpOiBJdGVyYXRlIHRoZSBkb2N1bWVudCBlbGVtZW50IGFuZAorICAgICAgICBpdHMgY29udGVu
dHMgb25seSB0byBhdm9pZCB0aGUgZG9jdW1lbnQgdHlwZSBub2RlLiBUaGlzIGFsbG93cyB1cyB0
byByZW1vdmUgdGhlIHZpcnR1YWwKKyAgICAgICAgZnVuY3Rpb24gY2FsbCB0byBpc0V2ZW50VGFy
Z2V0Tm9kZSBmcm9tIHRoZSBsb29wLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldENT
U1RhcmdldCk6IENoYW5nZWQgYXJndW1lbnQgdG8gYmUgYW4gRWxlbWVudCByYXRoZXIgdGhhbiBO
b2RlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZvcm1FbGVtZW50c1N0YXRlKTogVXNl
IHJlc2VydmVJbml0aWFsQ2FwYWNpdHkuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogQ2hh
bmdlZCBDU1MgdGFyZ2V0IHRvIGJlIGFuIEVsZW1lbnQgcmF0aGVyIHRoYW4gYSBOb2RlLiBSZW5h
bWVkCisgICAgICAgIGdldENTU1RhcmdldCB0byBjc3NUYXJnZXQuCisKKyAgICAgICAgKiBkb20v
RXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6
cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNTbG93Q2FzZSk6IFJlbmFtZWQgYW5kIHR1cm5lZCB0aGUK
KyAgICAgICAgcmFyZSBkYXRhIGNoZWNrIGludG8gYW4gYXNzZXJ0aW9uLgorCisgICAgICAgICog
ZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oOiBNYWRlIHRoZSBmYXN0IGNhc2Ugb2YgcmVtb3ZlQWxsRXZl
bnRMaXN0ZW5lcnMgYmUgaW5saW5lLgorICAgICAgICBBbHNvIG1vdmVkIHRoZSBjb25zdHJ1Y3Rv
ciBkZWZpbml0aW9uIGhlcmUgYW5kIG1hZGUgaXQgaW5saW5lLiBBbmQgYWRkZWQgdG9FdmVudFRh
cmdldE5vZGUsCisgICAgICAgIG1hdGNoaW5nIHRoZSBkZXNpZ24gb2YgdGhlIHJlbmRlciB0cmVl
IGNoZWNrZWQgY2FzdHMuIExhdGVyIHdlIGNhbiBtaWdyYXRlIGFsbCBjYWxsZXJzCisgICAgICAg
IGZyb20gRXZlbnRUYXJnZXROb2RlQ2FzdCB0byB0b0V2ZW50VGFyZ2V0Tm9kZS4KKworICAgICAg
ICAqIGRvbS9OYW1lZEF0dHJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRBdHRyTWFw
OjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQpOiBBZGRlZC4gRmFjdG9yZWQgb3V0IGZyb20K
KyAgICAgICAgY2xlYXJBdHRyaWJ1dGVzLCBzbyB3ZSBjb3VsZCB1c2UgdGhpcyBsb29wIGluIGNh
c2VzIHdoZXJlIHdlJ3JlIG5vdCBjbGVhcmluZyB0aGUgYXR0cmlidXRlcy4KKyAgICAgICAgKFdl
YkNvcmU6Ok5hbWVkQXR0ck1hcDo6fk5hbWVkQXR0ck1hcCk6IENhbGwgZGV0YWNoQXR0cmlidXRl
c0Zyb21FbGVtZW50IGluc3RlYWQgb2YKKyAgICAgICAgY2xlYXJBdHRyaWJ1dGVzIGhlcmUuCisg
ICAgICAgIChXZWJDb3JlOjpOYW1lZEF0dHJNYXA6OmNsZWFyQXR0cmlidXRlcyk6IENhbGwgZGV0
YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpOYW1lZEF0
dHJNYXA6OmRldGFjaEZyb21FbGVtZW50KTogQ2FsbCBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1l
bnQgaW5zdGVhZCBvZgorICAgICAgICBjbGVhckF0dHJpYnV0ZXMuIFdlIGRvbid0IG5lZWQgdG8g
Y2xlYXIgdGhlIGF0dHJpYnV0ZXMgYXJyYXkganVzdCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzCisg
ICAgICAgIGdvaW5nIGF3YXksIHNvIGRvbid0LgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRBdHRy
TWFwOjp2aXJ0dWFsTGVuZ3RoKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFw
Lmg6IE1hZGUgYWxsIHRoZSB2aXJ0dWFsIGZ1bmN0aW9ucyBpbmhlcml0ZWQgZnJvbSBOYW1lZE5v
ZGVNYXAgYmUgcHJpdmF0ZS4KKyAgICAgICAgVGhlc2UgYXJlIGFsbCB1bm5lY2Vzc2FyaWx5IGlu
ZWZmaWNpZW50IGZvciB1c2Ugb3V0c2lkZSB0aGUgRE9NLiBDaGFuZ2VkIGxlbmd0aCB0byBiZSBh
CisgICAgICAgIG5vbi12aXJ0dWFsIGZ1bmN0aW9uLiBUaGlzIHdhcyBhIGZhaXJseSBob3QgZnVu
Y3Rpb24uIFJlcGxhY2VkIHRoZSByZXNlcnZlQ2FwYWNpdHkgZnVuY3Rpb24KKyAgICAgICAgd2l0
aCBhIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkgZnVuY3Rpb24uCisKKyAgICAgICAgKiBkb20vTmFt
ZWRNYXBwZWRBdHRyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTWFwcGVkQXR0ck1h
cDo6c2V0Q2xhc3MpOiBDaGFuZ2VkIHRvIHVzZSBlbGVtZW50KCkgZnVuY3Rpb24gbm93IHRoYXQg
dGhlCisgICAgICAgIG1fZWxlbWVudCBkYXRhIG1lbWJlciBpcyBwcml2YXRlLgorCisgICAgICAg
ICogZG9tL05hbWVkTWFwcGVkQXR0ck1hcC5oOiBNYWRlIGEgZmV3IGZ1bmN0aW9ucyBwcml2YXRl
LiBNYWRlIHRoZQorICAgICAgICBoYXNNYXBwZWRBdHRyaWJ1dGVzIGZ1bmN0aW9uIG5vbi12aXJ0
dWFsLgorCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5oOiBNYWRlIGxlbmd0aCBhIG5vbi12
aXJ0dWFsIGlubGluZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgdmlydHVhbAorICAgICAgICBmdW5j
dGlvbiwgbmFtZSB2aXJ0dWFsTGVuZ3RoLiBUaGlzIGxldHMgTmFtZWRBdHRyTWFwOjpsZW5ndGgg
YmUgYSBub24tdmlydHVhbCBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KTogUmVtb3ZlZCBjYWxs
IHRvIGluc2VydGVkSW50b1RyZWUsIHNpbmNlIGl0J3MKKyAgICAgICAgb25seSBub24tZW1wdHkg
aW4gc3ViY2xhc3NlcyBvZiBDb250YWluZXJOb2RlLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
cmVtb3ZlZEZyb21Eb2N1bWVudCk6IERpdHRvLiBBbHNvIHJlbW92ZWQgc2V0Q1NTVGFyZ2V0LiBT
aW5jZSBhIENTUworICAgICAgICB0YXJnZXQgaGFzIHRvIGJlIGFuIEVsZW1lbnQsIHRoaXMgY2Fu
IGJlIG1vdmVkIGRvd24gdG8gQ29udGFpbmVyTm9kZSAob3IgaXQgY291bGQgYmUKKyAgICAgICAg
bW92ZWQgZG93biB0byBFbGVtZW50IGZvciB0aGF0IG1hdHRlcikuCisKKyAgICAgICAgKiBkb20v
UXVhbGlmaWVkTmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdWFsaWZpZWROYW1lOjpRdWFs
aWZpZWROYW1lKTogUmVtb3ZlZCBkb3VibGUgaW5pdGlhbGl6YXRpb24gb2YgbV9pbXBsLgorCisg
ICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDogTW92ZWQgdGhlIGRlc3RydWN0b3IsIGNvcHkg
Y29uc3RydWN0b3IsIGFzc2lnbm1lbnQgb3BlcmF0b3IsIGFuZAorICAgICAgICBzZXRQcmVmaXgg
ZnVuY3Rpb24gZGVmaW5pdGlvbnMgaW50byB0aGUgaGVhZGVyIGFuZCBtYWRlIHRoZW0gaW5saW5l
LgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hhcmFjdGVySXRlcmF0b3I6OnN0cmluZyk6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5
LgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBsYWluVGV4dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6am9p
bk1hcmt1cHMpOiBEaXR0by4KKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbSk6IERpdHRvLgorCisgICAg
ICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFy
ZWFFbGVtZW50OjptYXBNb3VzZUV2ZW50KTogVXBkYXRlZCBzaW5jZSB0aGUgc3RvcmVkIHJlZ2lv
biBpcyBub3cKKyAgICAgICAgYW4gT3duUHRyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFF
bGVtZW50OjphY2Nlc3NLZXkpOiBVc2UgQXRvbWljU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFyZWFFbGVtZW50OjpzZXRBY2Nlc3NLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBcmVhRWxlbWVudDo6YWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJl
YUVsZW1lbnQ6OnNldEFsdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVt
ZW50Ojpjb29yZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6
c2V0Q29vcmRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnNl
dEhyZWYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6c2hhcGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6c2V0U2hhcGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6c2V0VGFyZ2V0KTogRGl0
dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOiBVc2UgQXRvbWljU3RyaW5n
IGluIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBET00gb3BlcmF0aW9ucy4KKyAgICAgICAgQ2hhbmdl
IHRoZSByZWdpb24gZGF0YSBtZW1iZXIgdG8gYmUgYW4gT3duUHRyPFBhdGg+IGluc3RlYWQgb2Yg
YSBQYXRoIHRvIG9wdGltaXplCisgICAgICAgIHRoZSBjb21tb24gY2FzZSB3aGVyZSBhbiBhcmVh
IGVsZW1lbnQgaXMgcGFyc2VkIGJ1dCBuZXZlciBoaXQtdGVzdGVkLiBUaGlzIGNvdWxkCisgICAg
ICAgIGFsc28gaGF2ZSBiZWVuIGRvbmUgYnkgY2hhbmdpbmcgdGhlIFBhdGggY2xhc3MncyBudWxs
IGNhc2UgdG8gYmUgbW9yZSBlZmZpY2llbnQsCisgICAgICAgIGJ1dCB0aGlzIHNlZW1zIGZpbmUu
CisKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VG9rZW46OmFkZEF0dHJpYnV0ZSk6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5LgorCisgICAg
ICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhaW5pbmdUYWJsZSk6IFVzZSBhZGRB
dHRyaWJ1dGUgaW5zdGVhZAorICAgICAgICBvZiBpbnNlcnRBdHRyaWJ1dGUuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRTcGFuV2l0aENsYXNzTmFtZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkTGluZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkTGlu
ayk6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpnb3RvQW5jaG9yKTogVXNlIGNzc1RhcmdldCB1bmRlciBp
dHMgbmV3IG5hbWUgaW5zdGVhZAorICAgICAgICBvZiBpdHMgb2xkIG5hbWUgZ2V0Q1NTVGFyZ2V0
LgorCisgICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGFyc2V0KTogQ2hhbmdl
IGxvZ2ljIHNvIHRoYXQgd2UKKyAgICAgICAgbW92ZSB0aGUgZGF0YSBpbnRvIHRoZSBidWZmZXIg
b25seSB3aGVuIHRoZXJlJ3MgYSByZWFzb24gdG8uIElmIHdlIGhhdmUgbm8KKyAgICAgICAgcHJl
dmlvdXMgZGF0YSBhbmQgZ290IGVub3VnaCBkYXRhIGFsbCBhdCBvbmNlLCB0aGVuIGp1c3QgbG9v
ayBhdCBpdCBkaXJlY3RseS4KKworICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNh
dGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Oml0
ZW1zKTogVXNlIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkuCisgICAgICAgICogcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6dG9TdHJpbmcp
OiBEaXR0by4KKyAgICAgICAgKiBwYWdlL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bToKKyAgICAgICAgKGNvbnZlcnRUb1ZlY3Rvcik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjppbnZhbGlkYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFdpZHRoTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoV2lkdGhNYXA6OmxvY2F0ZVBh
Z2VTbG93Q2FzZSk6IFJlZmFjdG9yZWQgZnJvbSBsb2NhdGVQYWdlLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5oOiBNYWRlIG1vc3Qgb2YgdGhpcyBjbGFzcyBp
bmxpbmUuCisgICAgICAgIENoYW5nZWQgbV9wYWdlcyB0byB1c2UgT3duUHRyLgorCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YTo6ZGVlcENvcHkpOiBVc2UgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRU
UEhlYWRlck1hcDo6Y29weURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0QmFzZTo6Y29weURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21h
Yy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOiBE
aXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDogUmVtb3Zl
IGluY2x1ZGUgbm8gbG9uZ2VyIG5lZWRlZCBzaW5jZQorICAgICAgICBTdHJpbmdJbXBsLmggaW5j
bHVkZXMgaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnNT
bG93Q2FzZSk6IFJlZmFjdG9yZWQKKyAgICAgICAgZnJvbSBjcmVhdGVTdHJpcHBpbmdOdWxsQ2hh
cmFjdGVycy4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaDogTW92ZWQgdGhl
IGRlZmluaXRpb24gb2YKKyAgICAgICAgY3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnMgaGVy
ZSBhbmQgbWFkZSBpdCBpbmxpbmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5bGVTbG93
Q2FzZSk6IFJlZmFjdG9yZWQgZnJvbQorICAgICAgICBmaXJzdExpbmVTdHlsZS4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDogTW92ZWQgdGhlIGRlZmluaXRpb24gb2YgdGhl
IGZpcnN0TGluZVN0eWxlCisgICAgICAgIGZ1bmN0aW9uIGhlcmUgYW5kIG1hZGUgaXQgaW5saW5l
LiBNb3ZlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKKyAgICAgICAgZG9jdW1lbnRCZWluZ0Rlc3Ry
b3llZCBmdW5jdGlvbiBoZXJlIGFuZCBtYWRlIGl0IGlubGluZS4KKworICAgICAgICAqIHN2Zy9T
VkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldENU
TSk6IFVzZSBnZXRBdHRyaWJ1dGVJdGVtIGluc3RlYWQgb2YKKyAgICAgICAgZ2V0TmFtZWRJdGVt
IGhlcmUgc2luY2UgaXQgYWNjb21wbGlzaGVzIHRoZSBzYW1lIHRoaW5nIGJ1dCBpcyBtb3JlIGVm
ZmljaWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNUTSk6
IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmdldFByZXNlbnRhdGlvbkF0dHJpYnV0ZSk6IERpdHRv
LgorCisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpGdW5MYW5nOjpldmFsdWF0ZSk6IFVzZSBnZXRBdHRyaWJ1dGVJdGVtIGluc3RlYWQg
b2YKKyAgICAgICAgZ2V0TmFtZWRJdGVtTlMuCisKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojpzb3J0KTogVXNlIHJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkuCisKKyAgICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0luQXhpcyk6IFVzZSBhdHRyaWJ1dGVJdGVt
IGluc3RlYWQgb2YgaXRlbSBoZXJlLgorCiAyMDA5LTAxLTMxICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBzdGF0
aWMgU3RyaW5nIGNzc1Byb3BlcnR5TmFtZShjb25zdCBJZGVuCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKIAogICAgIFZlY3RvcjxVQ2hhcj4gbmFtZTsKLSAgICBuYW1lLnJlc2VydmVDYXBhY2l0
eShsZW5ndGgpOworICAgIG5hbWUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwogCiAg
ICAgdW5zaWduZWQgaSA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3QKICAgICAsIG1faXRlcmF0b3JD
b3VudCgwKQogI2VuZGlmCiB7Ci0gICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eShudW1Q
cm9wZXJ0aWVzKTsKKyAgICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1Q
cm9wZXJ0aWVzKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkg
ewogICAgICAgICBBU1NFUlQocHJvcGVydGllc1tpXSk7CiAgICAgICAgIG1fcHJvcGVydGllcy5h
cHBlbmQoKnByb3BlcnRpZXNbaV0pOwpAQCAtNzAyLDcgKzcwMiw3IEBAIHZvaWQgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVAKICAgICAgICAgdG9SZW1vdmUuYWRkKHNldFtpXSk7
CiAgICAgCiAgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBuZXdQcm9wZXJ0aWVzOwotICAgIG5ld1By
b3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvcGVydGllcy5zaXplKCkpOworICAgIG5ld1By
b3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKICAg
ICAKICAgICB1bnNpZ25lZCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDcgKzc2OCw3IEBAIFN0cmluZyBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnMKIAogICAgICAgICAgICAgUmVjdCogcmVjdFZhbCA9IGdl
dFJlY3RWYWx1ZSgpOwogICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAg
ICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RQ
YXJlbik7CiAKICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPnRvcCgpLT5jc3NU
ZXh0KCkpOwpAQCAtNzk3LDcgKzc5Nyw3IEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Nz
VGV4dCgpIGNvbnMKICAgICAgICAgICAgIENvbG9yIGNvbG9yKHJnYkNvbG9yKTsKIAogICAgICAg
ICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUNh
cGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMy
KTsKICAgICAgICAgICAgIGlmIChjb2xvci5oYXNBbHBoYSgpKQogICAgICAgICAgICAgICAgIGFw
cGVuZChyZXN1bHQsIHJnYmFQYXJlbik7CiAgICAgICAgICAgICBlbHNlCkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2Nzcy9D
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBA
IHZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihDU1NNdXRhYmwKIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU1N0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBW
ZWN0b3I8Q1NTUHJvcGVydHk+IGxpc3Q7Ci0gICAgbGlzdC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3Ro
KTsKKyAgICBsaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICB1bnNpZ25l
ZCB2YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
Z2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1Myw3ICs3NTMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OnNvcnRNYXRjaGVkUnVsZXMoCiAgICAgLy8gV2UgaGF2ZSB0byBtZXJnZSBzb3J0LiAgRW5zdXJl
IG91ciBtZXJnZSBidWZmZXIgaXMgYmlnIGVub3VnaCB0byBob2xkCiAgICAgLy8gYWxsIHRoZSBp
dGVtcy4KICAgICBWZWN0b3I8Q1NTUnVsZURhdGEqPiBydWxlc01lcmdlQnVmZmVyOwotICAgIHJ1
bGVzTWVyZ2VCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGVuZCAtIHN0YXJ0KTsgCisgICAgcnVsZXNN
ZXJnZUJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGVuZCAtIHN0YXJ0KTsgCiAKICAgICB1
bnNpZ25lZCBpMSA9IHN0YXJ0OwogICAgIHVuc2lnbmVkIGkyID0gbWlkOwpAQCAtOTMzLDcgKzkz
Myw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAg
ICAgIChzLT5ob3ZlcmVkKCkgPT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpICYmCiAgICAgICAgICAg
ICAocy0+YWN0aXZlKCkgPT0gbV9lbGVtZW50LT5hY3RpdmUoKSkgJiYKICAgICAgICAgICAgIChz
LT5mb2N1c2VkKCkgPT0gbV9lbGVtZW50LT5mb2N1c2VkKCkpICYmCi0gICAgICAgICAgICAocyAh
PSBzLT5kb2N1bWVudCgpLT5nZXRDU1NUYXJnZXQoKSAmJiBtX2VsZW1lbnQgIT0gbV9lbGVtZW50
LT5kb2N1bWVudCgpLT5nZXRDU1NUYXJnZXQoKSkgJiYKKyAgICAgICAgICAgIChzICE9IHMtPmRv
Y3VtZW50KCktPmNzc1RhcmdldCgpICYmIG1fZWxlbWVudCAhPSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmNzc1RhcmdldCgpKSAmJgogICAgICAgICAgICAgKHMtPmdldEF0dHJpYnV0ZSh0eXBlQXR0
cikgPT0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpKSAmJgogICAgICAgICAgICAg
KHMtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpID09IG1fZWxlbWVudC0+Z2V0QXR0
cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpICYmCiAgICAgICAgICAgICAocy0+Z2V0QXR0cmli
dXRlKGxhbmdBdHRyKSA9PSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShsYW5nQXR0cikpICYmCkBA
IC0yMjA5LDcgKzIyMDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tl
cjo6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9UYXJnZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUgPT0g
ZS0+ZG9jdW1lbnQoKS0+Z2V0Q1NTVGFyZ2V0KCkpCisgICAgICAgICAgICAgICAgaWYgKGUgPT0g
ZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQW55TGluazoKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiA0MDQ3
MSkKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDYsMTMgKzQ2LDYgQEAgc3RhdGljIE5vZGVDYWxsYmFja1F1ZXVl
KiBzX3Bvc3RBdHRhY2hDYQogCiBzdGF0aWMgc2l6ZV90IHNfYXR0YWNoRGVwdGggPSAwOwogCi1D
b250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50
KQotICAgIDogRXZlbnRUYXJnZXROb2RlKGRvYywgaXNFbGVtZW50LCB0cnVlKQotICAgICwgbV9m
aXJzdENoaWxkKDApCi0gICAgLCBtX2xhc3RDaGlsZCgwKQotewotfQotCiB2b2lkIENvbnRhaW5l
ck5vZGU6OnJlbW92ZUFsbENoaWxkcmVuKCkKIHsKICAgICByZW1vdmVBbGxDaGlsZHJlbkluQ29u
dGFpbmVyPE5vZGUsIENvbnRhaW5lck5vZGU+KHRoaXMpOwpAQCAtNTk0LDM0ICs1ODcsMzYgQEAg
dm9pZCBDb250YWluZXJOb2RlOjpkZXRhY2goKQogCiB2b2lkIENvbnRhaW5lck5vZGU6Omluc2Vy
dGVkSW50b0RvY3VtZW50KCkKIHsKLSAgICBFdmVudFRhcmdldE5vZGU6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCk7Ci0gICAgZm9yIChOb2RlICpjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgc2V0SW5Eb2N1bWVudCh0cnVlKTsKKyAg
ICBpbnNlcnRlZEludG9UcmVlKGZhbHNlKTsKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9maXJz
dENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY2hp
bGQtPmluc2VydGVkSW50b0RvY3VtZW50KCk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVt
b3ZlZEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVkRnJvbURv
Y3VtZW50KCk7Ci0gICAgZm9yIChOb2RlICpjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgaWYgKGRvY3VtZW50KCktPmNzc1Rhcmdl
dCgpID09IHRoaXMpCisgICAgICAgIGRvY3VtZW50KCktPnNldENTU1RhcmdldCgwKTsKKyAgICBz
ZXRJbkRvY3VtZW50KGZhbHNlKTsKKyAgICByZW1vdmVkRnJvbVRyZWUoZmFsc2UpOworICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQogICAgICAgICBjaGlsZC0+cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogfQogCiB2
b2lkIENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogewotICAgIEV2
ZW50VGFyZ2V0Tm9kZTo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKLSAgICBpZiAoZGVlcCkgewot
ICAgICAgICBmb3IgKE5vZGUgKmNoaWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGNoaWxkLT5pbnNlcnRlZEludG9UcmVl
KGRlZXApOwotICAgIH0KKyAgICBpZiAoIWRlZXApCisgICAgICAgIHJldHVybjsKKyAgICBmb3Ig
KE5vZGUqIGNoaWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKKyAgICAgICAgY2hpbGQtPmluc2VydGVkSW50b1RyZWUodHJ1ZSk7CiB9CiAKIHZv
aWQgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKIHsKLSAgICBFdmVu
dFRhcmdldE5vZGU6OnJlbW92ZWRGcm9tVHJlZShkZWVwKTsKLSAgICBpZiAoZGVlcCkgewotICAg
ICAgICBmb3IgKE5vZGUgKmNoaWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGNoaWxkLT5yZW1vdmVkRnJvbVRyZWUoZGVl
cCk7Ci0gICAgfQorICAgIGlmICghZGVlcCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKQorICAgICAgICBjaGlsZC0+cmVtb3ZlZEZyb21UcmVlKHRydWUpOwogfQogCiB2b2lkIENv
bnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSog
YmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKSW5k
ZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5NiwxNCBAQCBwcml2YXRlOgogICAg
IE5vZGUqIG1fZmlyc3RDaGlsZDsKICAgICBOb2RlKiBtX2xhc3RDaGlsZDsKIH07Ci0gICAgCisK
K2lubGluZSBDb250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2N1bWVudCwg
Ym9vbCBpc0VsZW1lbnQpCisgICAgOiBFdmVudFRhcmdldE5vZGUoZG9jdW1lbnQsIGlzRWxlbWVu
dCwgdHJ1ZSkKKyAgICAsIG1fZmlyc3RDaGlsZCgwKQorICAgICwgbV9sYXN0Q2hpbGQoMCkKK3sK
K30KKwogaW5saW5lIHVuc2lnbmVkIE5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZUNvdW50KCkgY29u
c3QKIHsKICAgICBBU1NFUlQoaXNDb250YWluZXJOb2RlKCkpOwpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDggRGF2aWQgTGV2aW4gKGxldmluQGNocm9taXVtLm9yZykKICAqCkBAIC0xMzM4LDEx
ICsxMzM4LDkgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNGcgogICAg
ICAgICBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzW2ldLT5zZXRSZW1vdmVkKHRydWUpOwogICAgIG1f
d2luZG93RXZlbnRMaXN0ZW5lcnMuY2xlYXIoKTsKICAgICByZW1vdmVBbGxEaXNjb25uZWN0ZWRO
b2RlRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICBmb3IgKE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghbi0+aXNFdmVudFRhcmdldE5vZGUo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4p
LT5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwotICAgIH0KKyAgICBFbGVtZW50KiBkb2N1bWVu
dEVsZW1lbnQgPSB0aGlzLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBkb2N1bWVudEVsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGRv
Y3VtZW50RWxlbWVudCkpCisgICAgICAgIHRvRXZlbnRUYXJnZXROb2RlKG5vZGUpLT5yZW1vdmVB
bGxFdmVudExpc3RlbmVycygpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZWdpc3RlckRpc2Nvbm5l
Y3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMoTm9kZSogbm9kZSkKQEAgLTI1NTcsNyArMjU1NSw3
IEBAIFNldEZvY3VzZWROb2RlRG9uZToKICAgICByZXR1cm4gIWZvY3VzQ2hhbmdlQmxvY2tlZDsK
ICAgfQogICAKLXZvaWQgRG9jdW1lbnQ6OnNldENTU1RhcmdldChOb2RlKiBuKQordm9pZCBEb2N1
bWVudDo6c2V0Q1NTVGFyZ2V0KEVsZW1lbnQqIG4pCiB7CiAgICAgaWYgKG1fY3NzVGFyZ2V0KQog
ICAgICAgICBtX2Nzc1RhcmdldC0+c2V0Q2hhbmdlZCgpOwpAQCAtMjU2NiwxMSArMjU2NCw2IEBA
IHZvaWQgRG9jdW1lbnQ6OnNldENTU1RhcmdldChOb2RlKiBuKQogICAgICAgICBuLT5zZXRDaGFu
Z2VkKCk7CiB9CiAKLU5vZGUqIERvY3VtZW50OjpnZXRDU1NUYXJnZXQoKSBjb25zdAotewotICAg
IHJldHVybiBtX2Nzc1RhcmdldDsKLX0KLQogdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJh
dG9yKE5vZGVJdGVyYXRvciAqbmkpCiB7CiAgICAgbV9ub2RlSXRlcmF0b3JzLmFkZChuaSk7CkBA
IC0zOTExLDcgKzM5MDQsNyBAQCB2b2lkIERvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogVmVj
dG9yPFN0cmluZz4gRG9jdW1lbnQ6OmZvcm1FbGVtZW50c1N0YXRlKCkgY29uc3QKIHsKICAgICBW
ZWN0b3I8U3RyaW5nPiBzdGF0ZVZlY3RvcjsKLSAgICBzdGF0ZVZlY3Rvci5yZXNlcnZlQ2FwYWNp
dHkobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogMyk7CisgICAgc3RhdGVWZWN0b3Iu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5zaXplKCkgKiAz
KTsKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSo+
Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBtX2Zvcm1FbGVt
ZW50c1dpdGhTdGF0ZS5lbmQoKTsKICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mb3JtRWxlbWVu
dHNXaXRoU3RhdGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlz
aW9uIDQwNDcxKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
Myw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3
ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01
MzMsOCArNTMzLDggQEAgcHVibGljOgogICAgIHZvaWQgYWN0aXZlQ2hhaW5Ob2RlRGV0YWNoZWQo
Tm9kZSopOwogCiAgICAgLy8gVXBkYXRlcyBmb3IgOnRhcmdldCAoQ1NTMyBzZWxlY3RvcikuCi0g
ICAgdm9pZCBzZXRDU1NUYXJnZXQoTm9kZSopOwotICAgIE5vZGUqIGdldENTU1RhcmdldCgpIGNv
bnN0OworICAgIHZvaWQgc2V0Q1NTVGFyZ2V0KEVsZW1lbnQqKTsKKyAgICBFbGVtZW50KiBjc3NU
YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2Nzc1RhcmdldDsgfQogICAgIAogICAgIHZvaWQgc2V0
RG9jdW1lbnRDaGFuZ2VkKGJvb2wpOwogCkBAIC05MzUsNyArOTM1LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFRpbWVyPERvY3VtZW50PiBtX3VwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyOwogCi0gICAg
Tm9kZSogbV9jc3NUYXJnZXQ7CisgICAgRWxlbWVudCogbV9jc3NUYXJnZXQ7CiAgICAgCiAgICAg
Ym9vbCBtX3Byb2Nlc3NpbmdMb2FkRXZlbnQ7CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwpJbmRl
eDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA3
LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTYxLDExICs2MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHN0YXRpYyBI
YXNoU2V0PEV2ZW50VGFyZ2V0Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNr
cyA9IDA7IAogCi1FdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCogZG9j
LCBib29sIGlzRWxlbWVudCwgYm9vbCBpc0NvbnRhaW5lciwgYm9vbCBpc1RleHQpCi0gICAgOiBO
b2RlKGRvYywgaXNFbGVtZW50LCBpc0NvbnRhaW5lciwgaXNUZXh0KQotewotfQotCiBFdmVudFRh
cmdldE5vZGU6On5FdmVudFRhcmdldE5vZGUoKQogewogICAgIGlmICghZXZlbnRMaXN0ZW5lcnMo
KS5pc0VtcHR5KCkgJiYgIWluRG9jdW1lbnQoKSkKQEAgLTE5MSwxMCArMTg2LDkgQEAgdm9pZCBF
dmVudFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZQogICAgIH0KIH0KIAotdm9pZCBFdmVu
dFRhcmdldE5vZGU6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkKK3ZvaWQgRXZlbnRUYXJnZXRO
b2RlOjpyZW1vdmVBbGxFdmVudExpc3RlbmVyc1Nsb3dDYXNlKCkKIHsKLSAgICBpZiAoIWhhc1Jh
cmVEYXRhKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiAK
ICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzID0gcmFyZURhdGEo
KS0+bGlzdGVuZXJzKCk7CiAgICAgaWYgKCFsaXN0ZW5lcnMpCkluZGV4OiBXZWJDb3JlL2RvbS9F
dmVudFRhcmdldE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5v
ZGUuaAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDksNyArNDksNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVy
ZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwogICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOworICAgIHZvaWQgcmVtb3Zl
QWxsRXZlbnRMaXN0ZW5lcnMoKSB7IGlmIChoYXNSYXJlRGF0YSgpKSByZW1vdmVBbGxFdmVudExp
c3RlbmVyc1Nsb3dDYXNlKCk7IH0KIAogICAgIHZvaWQgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4pOwogICAgIHZvaWQgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEF0dHJpYnV0ZSopOwpAQCAtMTg3LDE4
ICsxODcsNDAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRU
YXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7
IGRlcmVmKCk7IH0KKworICAgIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNTbG93Q2FzZSgp
OwogfTsKIAotaW5saW5lIEV2ZW50VGFyZ2V0Tm9kZSogRXZlbnRUYXJnZXROb2RlQ2FzdChOb2Rl
KiBuKSAKK2lubGluZSBFdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgaXNFbGVtZW50LCBib29sIGlzQ29udGFpbmVyLCBib29sIGlzVGV4dCkK
KyAgICA6IE5vZGUoZG9jdW1lbnQsIGlzRWxlbWVudCwgaXNDb250YWluZXIsIGlzVGV4dCkKK3sK
K30KKworaW5saW5lIEV2ZW50VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUoTm9kZSogbm9k
ZSkKK3sgCisgICAgQVNTRVJUKG5vZGUtPmlzRXZlbnRUYXJnZXROb2RlKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxFdmVudFRhcmdldE5vZGUqPihub2RlKTsKK30KKworaW5saW5lIGNvbnN0
IEV2ZW50VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUoY29uc3QgTm9kZSogbm9kZSkKK3sg
CisgICAgQVNTRVJUKG5vZGUtPmlzRXZlbnRUYXJnZXROb2RlKCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBFdmVudFRhcmdldE5vZGUqPihub2RlKTsgCit9CisKKy8vIFRoaXMgd2ls
bCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9FdmVudFRh
cmdldE5vZGUoY29uc3QgRXZlbnRUYXJnZXROb2RlKik7CisKKy8vIERlcHJlY2F0ZWQgbmFtZS4g
UmVtb3ZlIGNhbGxlcnMgYW5kIHN3aXRjaCB0byB0b0V2ZW50VGFyZ2V0Tm9kZS4KK2lubGluZSBF
dmVudFRhcmdldE5vZGUqIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoTm9kZSogbm9kZSkgCiB7IAotICAg
IEFTU0VSVChuLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RXZlbnRUYXJnZXROb2RlKj4obik7IAorICAgIHJldHVybiB0b0V2ZW50VGFyZ2V0Tm9kZShub2Rl
KTsgCiB9CiAKLWlubGluZSBjb25zdCBFdmVudFRhcmdldE5vZGUqIEV2ZW50VGFyZ2V0Tm9kZUNh
c3QoY29uc3QgTm9kZSogbikgCisvLyBEZXByZWNhdGVkIG5hbWUuIFJlbW92ZSBjYWxsZXJzIGFu
ZCBzd2l0Y2ggdG8gdG9FdmVudFRhcmdldE5vZGUuCitpbmxpbmUgY29uc3QgRXZlbnRUYXJnZXRO
b2RlKiBFdmVudFRhcmdldE5vZGVDYXN0KGNvbnN0IE5vZGUqIG5vZGUpCiB7IAotICAgIEFTU0VS
VChuLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
RXZlbnRUYXJnZXROb2RlKj4obik7IAorICAgIHJldHVybiB0b0V2ZW50VGFyZ2V0Tm9kZShub2Rl
KTsgCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVk
QXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAko
cmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3Jn
KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTM5LDkgKzM5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRJZ25vcmVBdHRyaWJ1dGUKICAgICByZXR1cm4gZSAmJiBlLT5kb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpICYmIGUtPmlzSFRNTEVsZW1lbnQoKTsKIH0KIAoraW5saW5lIHZvaWQgTmFtZWRB
dHRyTWFwOjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKQoreworICAgIHNpemVfdCBzaXpl
ID0gbV9hdHRyaWJ1dGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
IGkrKykgeworICAgICAgICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0cmlidXRlc1tpXS0+YXR0cigp
KQorICAgICAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKKyAgICB9Cit9CisKIE5hbWVkQXR0
ck1hcDo6fk5hbWVkQXR0ck1hcCgpCiB7Ci0gICAgTmFtZWRBdHRyTWFwOjpjbGVhckF0dHJpYnV0
ZXMoKTsgLy8gdmlydHVhbCBmdW5jdGlvbiwgcXVhbGlmeSB0byBiZSBleHBsaWNpdCBhbmQgc2xp
Z2h0bHkgZmFzdGVyCisgICAgZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KCk7CiB9CiAKIGJv
b2wgTmFtZWRBdHRyTWFwOjppc01hcHBlZEF0dHJpYnV0ZU1hcCgpIGNvbnN0CkBAIC0xOTAsMTEg
KzE5OSw3IEBAIEF0dHJpYnV0ZSogTmFtZWRBdHRyTWFwOjpnZXRBdHRyaWJ1dGVJdGUKIAogdm9p
ZCBOYW1lZEF0dHJNYXA6OmNsZWFyQXR0cmlidXRlcygpCiB7Ci0gICAgdW5zaWduZWQgbGVuID0g
bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAg
ICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0cmlidXRlc1tpXS0+YXR0cigpKQotICAgICAgICAgICAg
YXR0ci0+bV9lbGVtZW50ID0gMDsKLQorICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgp
OwogICAgIG1fYXR0cmlidXRlcy5jbGVhcigpOwogfQogCkBAIC0yMDMsNyArMjA4LDcgQEAgdm9p
ZCBOYW1lZEF0dHJNYXA6OmRldGFjaEZyb21FbGVtZW50KCkKICAgICAvLyB3ZSBhbGxvdyBhIE5h
bWVkQXR0ck1hcCB3L28gYW4gZWxlbWVudCBpbiBjYXNlIHNvbWVvbmUgc3RpbGwgaGFzIGEgcmVm
ZXJlbmNlCiAgICAgLy8gdG8gaWYgYWZ0ZXIgdGhlIGVsZW1lbnQgZ2V0cyBkZWxldGVkIC0gYnV0
IHRoZSBtYXAgaXMgbm93IGludmFsaWQKICAgICBtX2VsZW1lbnQgPSAwOwotICAgIGNsZWFyQXR0
cmlidXRlcygpOworICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwogfQogCiB2b2lk
IE5hbWVkQXR0ck1hcDo6c2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZEF0dHJNYXAmIG90aGVyKQpA
QCAtMzEwLDQgKzMxNSw5IEBAIGJvb2wgTmFtZWRBdHRyTWFwOjptYXBzRXF1aXZhbGVudChjb25z
dCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc2l6ZV90IE5hbWVkQXR0ck1hcDo6dmlydHVhbExl
bmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxlbmd0aCgpOworfQorCiB9CkluZGV4OiBXZWJD
b3JlL2RvbS9OYW1lZEF0dHJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZEF0
dHJNYXAuaAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI5LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgog
I2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZmRlZiBfX09CSkNfXwpAQCAtNTAsMjggKzQ3LDEyIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZEF0dHJNYXAmKTsK
IAotICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTmFtZWROb2RlTWFwCi0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxOb2RlPiBnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29u
c3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2Rl
PiByZW1vdmVOYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxOb2RlPiBnZXROYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5v
ZGU+IHNldE5hbWVkSXRlbShOb2RlKiBhcmcsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxOb2RlPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBzaXpl
X3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLnNpemUoKTsgfQotCi0gICAg
Ly8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIEF0dHJpYnV0ZSogYXR0cmli
dXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4
XS5nZXQoKTsgfQotICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lKSBjb25zdDsKLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0Owot
ICAgIAorICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CisKICAgICB2b2lkIHNocmlua1RvTGVuZ3RoKCkgeyBtX2F0dHJpYnV0ZXMuc2hy
aW5rQ2FwYWNpdHkobGVuZ3RoKCkpOyB9Ci0gICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWdu
ZWQgY2FwYWNpdHkpIHsgbV9hdHRyaWJ1dGVzLnJlc2VydmVDYXBhY2l0eShjYXBhY2l0eSk7IH0K
KyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpIHsgbV9h
dHRyaWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2FwYWNpdHkpOyB9CiAKICAgICAvLyB1
c2VkIGR1cmluZyBwYXJzaW5nOiBvbmx5IGluc2VydHMgaWYgbm90IGFscmVhZHkgdGhlcmUKICAg
ICAvLyBubyBlcnJvciBjaGVja2luZyEKQEAgLTgzLDIwICs2NCwzOCBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdmlydHVhbCBib29sIGlzTWFwcGVkQXR0cmlidXRlTWFwKCkgY29uc3Q7Ci0KLSAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIHZv
aWQgc2V0SUQoY29uc3QgQXRvbWljU3RyaW5nJiBfaWQpIHsgbV9pZCA9IF9pZDsgfQogICAgIAor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAg
dm9pZCBzZXRJRChjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKSB7IG1faWQgPSBuZXdJZDsgfQor
CiAgICAgYm9vbCBtYXBzRXF1aXZhbGVudChjb25zdCBOYW1lZEF0dHJNYXAqIG90aGVyTWFwKSBj
b25zdDsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwsIGFuZCBkbyBubyBl
cnJvciBjaGVja2luZy4KKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgZG8gbm8gZXJyb3IgY2hlY2tp
bmcuCiAgICAgdm9pZCBhZGRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKLSAgICB2
b2lkIHJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKTsKKyAgICB2b2lk
IHJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7CiAKKyAgICBFbGVtZW50KiBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBkZXRh
Y2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKTsKICAgICB2b2lkIGRldGFjaEZyb21FbGVtZW50KCk7
CisgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxOb2RlPiBnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGdldE5h
bWVkSXRlbU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2Fs
TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRl
bU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGdldE5hbWVk
SXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gc2V0TmFtZWRJdGVt
KE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4g
aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3QgdmlydHVhbExl
bmd0aCgpIGNvbnN0OwogCiAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgIFZlY3RvcjxSZWZQ
dHI8QXR0cmlidXRlPiA+IG1fYXR0cmlidXRlczsKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkTWFw
cGVkQXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRNYXBwZWRBdHRy
TWFwLmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZE1hcHBlZEF0dHJN
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMiArNzUsMTIgQEAgYm9vbCBOYW1lZE1hcHBl
ZEF0dHJNYXA6Om1hcHNFcXVpdmFsZW50KAogCiB2b2lkIE5hbWVkTWFwcGVkQXR0ck1hcDo6c2V0
Q2xhc3MoY29uc3QgU3RyaW5nJiBjbGFzc1N0cikgCiB7IAotICAgIGlmICghbV9lbGVtZW50LT5o
YXNDbGFzcygpKSB7IAorICAgIGlmICghZWxlbWVudCgpLT5oYXNDbGFzcygpKSB7IAogICAgICAg
ICBtX2NsYXNzTmFtZXMuY2xlYXIoKTsgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X2NsYXNzTmFtZXMuc2V0KGNsYXNzU3RyLCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmluQ29tcGF0
TW9kZSgpKTsgCisgICAgbV9jbGFzc05hbWVzLnNldChjbGFzc1N0ciwgZWxlbWVudCgpLT5kb2N1
bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7IAogfQogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1l
ZE1hcHBlZEF0dHJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZE1hcHBlZEF0
dHJNYXAuaAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZE1hcHBlZEF0dHJN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA3IERhdmlkIFNt
aXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMzIgKzI3LDMz
IEBACiAjZGVmaW5lIE5hbWVkTWFwcGVkQXR0ck1hcF9oCiAKICNpbmNsdWRlICJDbGFzc05hbWVz
LmgiCi0jaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiTWFwcGVkQXR0cmli
dXRlLmgiIC8vIFRoaXMgaGVhZGVyIGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIE5hbWVkTWFwcGVk
QXR0ck1hcCBkZWZpbml0aW9uLiBTaG91bGQgcmVtb3ZlIGl0LgogI2luY2x1ZGUgIk5hbWVkQXR0
ck1hcC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5hbWVkTWFwcGVkQXR0ck1h
cCA6IHB1YmxpYyBOYW1lZEF0dHJNYXAgewotcHJpdmF0ZToKLSAgICBOYW1lZE1hcHBlZEF0dHJN
YXAoRWxlbWVudCogZWxlbWVudCkgOiBOYW1lZEF0dHJNYXAoZWxlbWVudCksIG1fbWFwcGVkQXR0
cmlidXRlQ291bnQoMCkgeyB9CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmFtZWRN
YXBwZWRBdHRyTWFwPiBjcmVhdGUoRWxlbWVudCogZWxlbWVudCA9IDApIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBOYW1lZE1hcHBlZEF0dHJNYXAoZWxlbWVudCkpOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBdHRyaWJ1dGVzKCk7Ci0gICAgdmlydHVhbCBib29sIGlzTWFwcGVkQXR0cmlidXRl
TWFwKCkgY29uc3Q7Ci0KICAgICB2b2lkIGNsZWFyQ2xhc3MoKSB7IG1fY2xhc3NOYW1lcy5jbGVh
cigpOyB9CiAgICAgdm9pZCBzZXRDbGFzcyhjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBDbGFz
c05hbWVzJiBjbGFzc05hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc05hbWVzOyB9CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzTWFwcGVkQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
cGVkQXR0cmlidXRlQ291bnQgPiAwOyB9CisgICAgYm9vbCBoYXNNYXBwZWRBdHRyaWJ1dGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXBwZWRBdHRyaWJ1dGVDb3VudCA+IDA7IH0KICAgICB2b2lkIGRl
Y2xSZW1vdmVkKCkgeyBtX21hcHBlZEF0dHJpYnV0ZUNvdW50LS07IH0KICAgICB2b2lkIGRlY2xB
ZGRlZCgpIHsgbV9tYXBwZWRBdHRyaWJ1dGVDb3VudCsrOyB9Ci0gICAgCisKICAgICBib29sIG1h
cHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkTWFwcGVkQXR0ck1hcCopIGNvbnN0OwotICAgIGludCBk
ZWNsQ291bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBOYW1lZE1hcHBlZEF0dHJNYXAoRWxl
bWVudCogZWxlbWVudCkgOiBOYW1lZEF0dHJNYXAoZWxlbWVudCksIG1fbWFwcGVkQXR0cmlidXRl
Q291bnQoMCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7CisgICAg
dmlydHVhbCBib29sIGlzTWFwcGVkQXR0cmlidXRlTWFwKCkgY29uc3Q7CisKKyAgICBpbnQgZGVj
bENvdW50KCkgY29uc3Q7CisKICAgICBDbGFzc05hbWVzIG1fY2xhc3NOYW1lczsKICAgICBpbnQg
bV9tYXBwZWRBdHRyaWJ1dGVDb3VudDsKIH07CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZE5vZGVN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAkocmV2aXNpb24g
NDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBzZXRO
YW1lZEl0ZW0oTm9kZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Tm9kZT4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
c2l6ZV90IGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gdmlydHVhbExlbmd0aCgpOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBzaXplX3Qg
dmlydHVhbExlbmd0aCgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdl
YkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShy
ZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMDc4LDE3ICsxMDc4LDE2IEBAIHZvaWQgTm9kZTo6
ZGV0YWNoKCkKIAogdm9pZCBOb2RlOjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CisgICAgLy8g
Tm90ZTogQ29udGFpbmVyTm9kZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQgZG9lcyBub3QgY2FsbCB0
aHJvdWdoIGhlcmUsIHNvIGlmIHlvdQorICAgIC8vIGNoYW5nZSB0aGlzIGZ1bmN0aW9uLCBjaGFu
Z2UgdGhhdCBvbmUgYXMgd2VsbC4KICAgICBzZXRJbkRvY3VtZW50KHRydWUpOwotICAgIGluc2Vy
dGVkSW50b1RyZWUoZmFsc2UpOwogfQogCiB2b2lkIE5vZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
KQogewotICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmdldENTU1RhcmdldCgpID09
IHRoaXMpCi0gICAgICAgIG1fZG9jdW1lbnQtPnNldENTU1RhcmdldCgwKTsKLQorICAgIC8vIE5v
dGU6IENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50IGRvZXMgbm90IGNhbGwgdGhy
b3VnaCBoZXJlLCBzbyBpZiB5b3UKKyAgICAvLyBjaGFuZ2UgdGhpcyBmdW5jdGlvbiwgY2hhbmdl
IHRoYXQgb25lIGFzIHdlbGwuCiAgICAgc2V0SW5Eb2N1bWVudChmYWxzZSk7Ci0gICAgcmVtb3Zl
ZEZyb21UcmVlKGZhbHNlKTsKIH0KIAogTm9kZSAqTm9kZTo6cHJldmlvdXNFZGl0YWJsZSgpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3Jl
L2RvbS9RdWFsaWZpZWROYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKLS8q
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU0LDcgKzUyLDYgQEAgc3RydWN0
IFFOYW1lQ29tcG9uZW50c1RyYW5zbGF0b3Igewogc3RhdGljIFFOYW1lU2V0KiBnTmFtZUNhY2hl
OwogCiBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBBdG9taWNTdHJpbmcmIG4pCi0gICAgOiBtX2lt
cGwoMCkKIHsKICAgICBpZiAoIWdOYW1lQ2FjaGUpCiAgICAgICAgIGdOYW1lQ2FjaGUgPSBuZXcg
UU5hbWVTZXQ7CkBAIC02NSwyOCArNjIsNiBAQCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1l
KGNvbnN0IEF0b21pCiAgICAgICAgIG1faW1wbC0+cmVmKCk7CiB9CiAKLVF1YWxpZmllZE5hbWU6
On5RdWFsaWZpZWROYW1lKCkKLXsKLSAgICBkZXJlZigpOwotfQotCi1RdWFsaWZpZWROYW1lOjpR
dWFsaWZpZWROYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKQotewotICAgIG1faW1wbCA9
IG90aGVyLm1faW1wbDsKLSAgICByZWYoKTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgUXVh
bGlmaWVkTmFtZTo6b3BlcmF0b3I9KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKQotewotICAg
IGlmIChtX2ltcGwgIT0gb3RoZXIubV9pbXBsKSB7Ci0gICAgICAgIGRlcmVmKCk7Ci0gICAgICAg
IG1faW1wbCA9IG90aGVyLm1faW1wbDsKLSAgICAgICAgcmVmKCk7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiAqdGhpczsKLX0KLQogdm9pZCBRdWFsaWZpZWROYW1lOjpkZXJlZigpCiB7CiAjaWZk
ZWYgUU5BTUVfREVGQVVMVF9DT05TVFJVQ1RPUgpAQCAtOTksMTIgKzc0LDYgQEAgdm9pZCBRdWFs
aWZpZWROYW1lOjpkZXJlZigpCiAgICAgbV9pbXBsLT5kZXJlZigpOwogfQogCi12b2lkIFF1YWxp
ZmllZE5hbWU6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKLXsKLSAgICBR
dWFsaWZpZWROYW1lIG90aGVyKHByZWZpeCwgbG9jYWxOYW1lKCksIG5hbWVzcGFjZVVSSSgpKTsK
LSAgICAqdGhpcyA9IG90aGVyOwotfQotCiBTdHJpbmcgUXVhbGlmaWVkTmFtZTo6dG9TdHJpbmco
KSBjb25zdAogewogICAgIFN0cmluZyBsb2NhbCA9IGxvY2FsTmFtZSgpOwpJbmRleDogV2ViQ29y
ZS9kb20vUXVhbGlmaWVkTmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1F1YWxpZmll
ZE5hbWUuaAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTksNiArMTcsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICov
CisKICNpZm5kZWYgUXVhbGlmaWVkTmFtZV9oCiAjZGVmaW5lIFF1YWxpZmllZE5hbWVfaAogCkBA
IC0yNiw3ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAorCiBzdHJ1Y3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMgewog
ICAgIFN0cmluZ0ltcGwqIG1fcHJlZml4OwogICAgIFN0cmluZ0ltcGwqIG1fbG9jYWxOYW1lOwpA
QCAtMzcsMzIgKzM2LDMyIEBAIGNsYXNzIFF1YWxpZmllZE5hbWUgewogcHVibGljOgogICAgIGNs
YXNzIFF1YWxpZmllZE5hbWVJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8UXVhbGlmaWVkTmFtZUlt
cGw+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFF1YWxpZmllZE5h
bWVJbXBsPiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcm
IGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UXVh
bGlmaWVkTmFtZUltcGw+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJ
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFF1YWxpZmllZE5h
bWVJbXBsKHAsIGwsIG4pKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXVhbGlm
aWVkTmFtZUltcGwocHJlZml4LCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogICAgICAgICB9
Ci0gICAgICAgIAorCiAgICAgICAgIEF0b21pY1N0cmluZyBtX3ByZWZpeDsKICAgICAgICAgQXRv
bWljU3RyaW5nIG1fbG9jYWxOYW1lOwogICAgICAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2U7
CiAKICAgICBwcml2YXRlOgotICAgICAgICBRdWFsaWZpZWROYW1lSW1wbChjb25zdCBBdG9taWNT
dHJpbmcmIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKQot
ICAgICAgICAgICAgOiBtX3ByZWZpeChwKQotICAgICAgICAgICAgLCBtX2xvY2FsTmFtZShsKQot
ICAgICAgICAgICAgLCBtX25hbWVzcGFjZShuKQorICAgICAgICBRdWFsaWZpZWROYW1lSW1wbChj
b25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQorICAgICAgICAgICAgOiBtX3ByZWZp
eChwcmVmaXgpCisgICAgICAgICAgICAsIG1fbG9jYWxOYW1lKGxvY2FsTmFtZSkKKyAgICAgICAg
ICAgICwgbV9uYW1lc3BhY2UobmFtZXNwYWNlVVJJKQogICAgICAgICB7CiAgICAgICAgIH0gICAg
ICAgIAogICAgIH07CiAKICAgICBRdWFsaWZpZWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkkpOwotICAgIH5RdWFsaWZpZWROYW1lKCk7CisgICAgflF1YWxpZmllZE5hbWUo
KSB7IGRlcmVmKCk7IH0KICNpZmRlZiBRTkFNRV9ERUZBVUxUX0NPTlNUUlVDVE9SCiAgICAgUXVh
bGlmaWVkTmFtZSgpIDogbV9pbXBsKDApIHsgfQogI2VuZGlmCiAKLSAgICBRdWFsaWZpZWROYW1l
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBvcGVyYXRv
cj0oY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIFF1YWxpZmllZE5hbWUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgb3RoZXIpIDogbV9pbXBsKG90aGVyLm1faW1wbCkgeyByZWYoKTsgfQorICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG9wZXJhdG9yPShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikg
eyBvdGhlci5yZWYoKTsgZGVyZWYoKTsgbV9pbXBsID0gb3RoZXIubV9pbXBsOyByZXR1cm4gKnRo
aXM7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gbV9pbXBsID09IG90aGVyLm1faW1wbDsgfQogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KQEAgLTcwLDcgKzY5LDcgQEAgcHVibGljOgogICAgIGJvb2wgbWF0Y2hlcyhj
b25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbXBsID09IG90aGVy
Lm1faW1wbCB8fCAobG9jYWxOYW1lKCkgPT0gb3RoZXIubG9jYWxOYW1lKCkgJiYgbmFtZXNwYWNl
VVJJKCkgPT0gb3RoZXIubmFtZXNwYWNlVVJJKCkpOyB9CiAKICAgICBib29sIGhhc1ByZWZpeCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9wcmVmaXggIT0gbnVsbEF0b207IH0KLSAgICB2b2lk
IHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCk7CisgICAgdm9pZCBzZXRQcmVm
aXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpIHsgKnRoaXMgPSBRdWFsaWZpZWROYW1lKHBy
ZWZpeCwgbG9jYWxOYW1lKCksIG5hbWVzcGFjZVVSSSgpKTsgfQogCiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBwcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fcHJlZml4OyB9CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1f
bG9jYWxOYW1lOyB9CkBAIC04NCw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBp
bml0KCk7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcmVmKCkgeyBtX2ltcGwtPnJlZigpOyB9
CisgICAgdm9pZCByZWYoKSBjb25zdCB7IG1faW1wbC0+cmVmKCk7IH0KICAgICB2b2lkIGRlcmVm
KCk7CiAgICAgCiAgICAgUXVhbGlmaWVkTmFtZUltcGwqIG1faW1wbDsKQEAgLTEwMCw3ICs5OSw2
IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW4KIGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbWljU3RyaW5nJiBh
KSB7IHJldHVybiBhID09IHEubG9jYWxOYW1lKCk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbWljU3RyaW5nJiBhKSB7IHJldHVybiBh
ICE9IHEubG9jYWxOYW1lKCk7IH0KIAotCiBpbmxpbmUgdW5zaWduZWQgaGFzaENvbXBvbmVudHMo
Y29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGJ1ZikKIHsKICAgICBBU1NFUlQoc2l6ZW9m
KFF1YWxpZmllZE5hbWVDb21wb25lbnRzKSAlIChzaXplb2YodWludDE2X3QpICogMikgPT0gMCk7
CkBAIC0xNTQsNiArMTUyLDcgQEAgc3RydWN0IFF1YWxpZmllZE5hbWVIYXNoIHsKIG5hbWVzcGFj
ZSBXVEYgewogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKKwogICAgIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OlF1YWxpZmll
ZE5hbWU+IHsKICAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpRdWFsaWZpZWROYW1lSGFzaCBIYXNo
OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNDA0NzEp
CisrKyBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1OSw3ICsxMDU5LDcgQEAgdm9pZCBDaGFyYWN0ZXJJdGVyYXRvcjo6YWR2YW5jZShpbnQgY291
bgogU3RyaW5nIENoYXJhY3Rlckl0ZXJhdG9yOjpzdHJpbmcoaW50IG51bUNoYXJzKQogewogICAg
IFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobnVtQ2hh
cnMpOworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUNoYXJzKTsKICAgICB3
aGlsZSAobnVtQ2hhcnMgPiAwICYmICFhdEVuZCgpKSB7CiAgICAgICAgIGludCBydW5TaXplID0g
bWluKG51bUNoYXJzLCBsZW5ndGgoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVy
cygpLCBydW5TaXplKTsKQEAgLTEyMjcsNyArMTIyNyw3IEBAIGlubGluZSBTZWFyY2hCdWZmZXI6
OlNlYXJjaEJ1ZmZlcihjb25zdCAKICAgICBBU1NFUlQoIW1fdGFyZ2V0LmlzRW1wdHkoKSk7CiAK
ICAgICBzaXplX3QgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0Lmxlbmd0aCgpOwotICAgIG1fYnVmZmVy
LnJlc2VydmVDYXBhY2l0eShtYXgodGFyZ2V0TGVuZ3RoICogOCwgbWluaW11bVNlYXJjaEJ1ZmZl
clNpemUpKTsKKyAgICBtX2J1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1heCh0YXJnZXRM
ZW5ndGggKiA4LCBtaW5pbXVtU2VhcmNoQnVmZmVyU2l6ZSkpOwogICAgIG1fb3ZlcmxhcCA9IG1f
YnVmZmVyLmNhcGFjaXR5KCkgLyA0OwogCiAgICAgLy8gR3JhYiB0aGUgc2luZ2xlIGdsb2JhbCBz
ZWFyY2hlci4KQEAgLTE1NDQsNyArMTU0NCw3IEBAIFVDaGFyKiBwbGFpblRleHRUb01hbGxvY0Fs
bG9jYXRlZEJ1ZmZlcigKICAgICB0eXBlZGVmIHBhaXI8VUNoYXIqLCB1bnNpZ25lZD4gVGV4dFNl
Z21lbnQ7CiAgICAgVmVjdG9yPFRleHRTZWdtZW50PiogdGV4dFNlZ21lbnRzID0gMDsKICAgICBW
ZWN0b3I8VUNoYXI+IHRleHRCdWZmZXI7Ci0gICAgdGV4dEJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHko
Y01heFNlZ21lbnRTaXplKTsKKyAgICB0ZXh0QnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Y01heFNlZ21lbnRTaXplKTsKICAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyKTsgIWl0LmF0RW5k
KCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICBpZiAodGV4dEJ1ZmZlci5zaXplKCkgJiYgdGV4
dEJ1ZmZlci5zaXplKCkgKyBpdC5sZW5ndGgoKSA+IGNNYXhTZWdtZW50U2l6ZSkgewogICAgICAg
ICAgICAgVUNoYXIqIG5ld1NlZ21lbnRCdWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KG1hbGxv
Yyh0ZXh0QnVmZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OTAsNyArNjkwLDcgQEAgc3RhdGljIFN0cmluZyBqb2luTWFya3Vwcyhjb25z
dCBWZWN0b3I8UwogICAgICAgICBsZW5ndGggKz0gcG9zdE1hcmt1cHNbaV0ubGVuZ3RoKCk7CiAK
ICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxl
bmd0aCk7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSBwcmVDb3VudDsgaSA+IDA7IC0taSkKICAgICAgICAgYXBwZW5kKHJl
c3VsdCwgcHJlTWFya3Vwc1tpIC0gMV0pOwpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJ
dGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCShy
ZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBpbmxpbmUgSGlzdG9yeUl0ZW06Okhpc3RvcnlJ
dGVtKGNvbnN0IEhpCiAgICAgICAgIG1fZm9ybURhdGEgPSBpdGVtLm1fZm9ybURhdGEtPmNvcHko
KTsKICAgICAgICAgCiAgICAgdW5zaWduZWQgc2l6ZSA9IGl0ZW0ubV9zdWJJdGVtcy5zaXplKCk7
Ci0gICAgbV9zdWJJdGVtcy5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CisgICAgbV9zdWJJdGVtcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCiAgICAgICAgIG1fc3ViSXRlbXMuYXBwZW5kKGl0ZW0ubV9zdWJJdGVtc1tp
XS0+Y29weSgpKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDQw
NDcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDgg
KzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1IVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEFuY2hvckVsZW1lbnQodGFnTmFt
ZSwgZG9jKQorSFRNTEFyZWFFbGVtZW50OjpIVE1MQXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEFuY2hvckVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2Nvb3JkcygwKQogICAgICwgbV9jb29yZHNM
ZW4oMCkKICAgICAsIG1fbGFzdFNpemUoLTEsIC0xKQpAQCAtNzMsMTEgKzczLDExIEBAIHZvaWQg
SFRNTEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKIGJvb2wgSFRNTEFyZWFFbGVtZW50
OjptYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0KQogewogICAgIGlmIChtX2xhc3RTaXplICE9IHNpemUpIHsKLSAgICAg
ICAgcmVnaW9uID0gZ2V0UmVnaW9uKHNpemUpOworICAgICAgICBtX3JlZ2lvbi5zZXQobmV3IFBh
dGgoZ2V0UmVnaW9uKHNpemUpKSk7CiAgICAgICAgIG1fbGFzdFNpemUgPSBzaXplOwogICAgIH0K
IAotICAgIGlmICghcmVnaW9uLmNvbnRhaW5zKEludFBvaW50KHgsIHkpKSkKKyAgICBpZiAoIW1f
cmVnaW9uLT5jb250YWlucyhJbnRQb2ludCh4LCB5KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKHRoaXMpOwpAQCAtMTUwLDMyICsxNTAsMzIg
QEAgUGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihjb25zdCBJbgogICAgIHJldHVybiBw
YXRoOwogfQogCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50OjphY2Nlc3NLZXkoKSBjb25zdAorY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MQXJlYUVsZW1lbnQ6OmFjY2Vzc0tleSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKIH0KIAotdm9pZCBIVE1MQXJl
YUVsZW1lbnQ6OnNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MQXJl
YUVsZW1lbnQ6OnNldEFjY2Vzc0tleShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAg
IHNldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MQXJl
YUVsZW1lbnQ6OmFsdCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxBcmVhRWxlbWVu
dDo6YWx0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOwogfQog
Ci12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0QWx0KGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lk
IEhUTUxBcmVhRWxlbWVudDo6c2V0QWx0KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAg
ICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxBcmVhRWxl
bWVudDo6Y29vcmRzKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEFyZWFFbGVtZW50
Ojpjb29yZHMoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29vcmRzQXR0cik7
CiB9CiAKLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRDb29yZHMoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRDb29yZHMoY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoY29vcmRzQXR0ciwgdmFsdWUpOwogfQpAQCAtMTg1
LDcgKzE4NSw3IEBAIEtVUkwgSFRNTEFyZWFFbGVtZW50OjpocmVmKCkgY29uc3QKICAgICByZXR1
cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7CiB9CiAK
LXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lk
IEhUTUxBcmVhRWxlbWVudDo6c2V0SHJlZihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewog
ICAgIHNldEF0dHJpYnV0ZShocmVmQXR0ciwgdmFsdWUpOwogfQpAQCAtMjAwLDEyICsyMDAsMTIg
QEAgdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldE5vSHJlZihib29sIG5vSAogICAgIHNldEF0dHJp
YnV0ZShub2hyZWZBdHRyLCBub0hyZWYgPyAiIiA6IDApOwogfQogCi1TdHJpbmcgSFRNTEFyZWFF
bGVtZW50OjpzaGFwZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxBcmVhRWxlbWVu
dDo6c2hhcGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2hhcGVBdHRyKTsK
IH0KIAotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldFNoYXBlKGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0U2hhcGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoc2hhcGVBdHRyLCB2YWx1ZSk7CiB9CkBAIC0yMjAsNyAr
MjIwLDcgQEAgU3RyaW5nIEhUTUxBcmVhRWxlbWVudDo6dGFyZ2V0KCkgY29uc3QKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOwogfQogCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6
c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0
VGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHRh
cmdldEF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgJKHJldmlzaW9u
IDQwNDcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEx
ICsyNSwxMSBAQAogCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBQYXRoOwogCiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQg
OiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgewogcHVibGljOgpAQCAtNDcsMzMgKzQ3LDM0IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRSZWN0KFJlbmRlck9iamVjdCopIGNv
bnN0OwogCi0gICAgU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWNjZXNz
S2V5KGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5KCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAg
ICBTdHJpbmcgYWx0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbHQoY29uc3QgU3RyaW5nJik7Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQoKSBjb25zdDsKKyAgICB2b2lkIHNldEFsdChjb25z
dCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBjb29yZHMoKSBjb25zdDsKLSAgICB2b2lk
IHNldENvb3Jkcyhjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvb3Jk
cygpIGNvbnN0OworICAgIHZvaWQgc2V0Q29vcmRzKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAg
ICAgS1VSTCBocmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZvaWQgc2V0SHJlZihjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIGJvb2wgbm9IcmVm
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXROb0hyZWYoYm9vbCk7CiAKLSAgICBTdHJpbmcgc2hhcGUo
KSBjb25zdDsKLSAgICB2b2lkIHNldFNoYXBlKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhcGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNoYXBlKGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldChjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldFRhcmdldChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAog
cHJpdmF0ZToKICAgICBlbnVtIFNoYXBlIHsgRGVmYXVsdCwgUG9seSwgUmVjdCwgQ2lyY2xlLCBV
bmtub3duIH07CiAgICAgUGF0aCBnZXRSZWdpb24oY29uc3QgSW50U2l6ZSYpIGNvbnN0OwotICAg
IFBhdGggcmVnaW9uOworCisgICAgT3duUHRyPFBhdGg+IG1fcmVnaW9uOwogICAgIExlbmd0aCog
bV9jb29yZHM7CiAgICAgaW50IG1fY29vcmRzTGVuOwogICAgIEludFNpemUgbV9sYXN0U2l6ZTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAg
aW5saW5lIHZvaWQgVG9rZW46OmFkZEF0dHJpYnV0ZShBdG9taWNTdAogICAgICAgICBSZWZQdHI8
TWFwcGVkQXR0cmlidXRlPiBhID0gTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoYXR0ck5hbWUsIGF0
dHJpYnV0ZVZhbHVlKTsKICAgICAgICAgaWYgKCFhdHRycykgewogICAgICAgICAgICAgYXR0cnMg
PSBOYW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXR0cnMtPnJlc2Vy
dmVDYXBhY2l0eSgxMCk7CisgICAgICAgICAgICBhdHRycy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgxMCk7CiAgICAgICAgIH0KICAgICAgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShhLnJlbGVh
c2UoKSwgdmlld1NvdXJjZU1vZGUpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmll
d1NvdXJjZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxW
aWV3U291cmNlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6Y3JlYXRlQ29udGEKICAgICAvLyBkb2N1bWVudC4K
ICAgICBSZWZQdHI8RWxlbWVudD4gZGl2ID0gbmV3IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgdGhp
cyk7CiAgICAgUmVmUHRyPE5hbWVkTWFwcGVkQXR0ck1hcD4gYXR0cnMgPSBOYW1lZE1hcHBlZEF0
dHJNYXA6OmNyZWF0ZSgpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlOjpjcmVhdGUoY2xhc3NBdHRyLCAid2Via2l0LWxpbmUtZ3V0dGVyLWJhY2tkcm9wIiksIHRy
dWUpOworICAgIGF0dHJzLT5hZGRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xh
c3NBdHRyLCAid2Via2l0LWxpbmUtZ3V0dGVyLWJhY2tkcm9wIikpOwogICAgIGRpdi0+c2V0QXR0
cmlidXRlTWFwKGF0dHJzLnJlbGVhc2UoKSk7CiAgICAgYm9keS0+YWRkQ2hpbGQoZGl2KTsKICAg
ICBkaXYtPmF0dGFjaCgpOwpAQCAtMTk1LDcgKzE5NSw3IEBAIEVsZW1lbnQqIEhUTUxWaWV3U291
cmNlRG9jdW1lbnQ6OmFkZFNwYW4KIAogICAgIEVsZW1lbnQqIHNwYW4gPSBuZXcgSFRNTEVsZW1l
bnQoc3BhblRhZywgdGhpcyk7CiAgICAgUmVmUHRyPE5hbWVkTWFwcGVkQXR0ck1hcD4gYXR0cnMg
PSBOYW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NBdHRyLCBjbGFzc05hbWUpLCB0cnVlKTsK
KyAgICBhdHRycy0+YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0
ciwgY2xhc3NOYW1lKSk7CiAgICAgc3Bhbi0+c2V0QXR0cmlidXRlTWFwKGF0dHJzLnJlbGVhc2Uo
KSk7CiAgICAgbV9jdXJyZW50LT5hZGRDaGlsZChzcGFuKTsKICAgICBzcGFuLT5hdHRhY2goKTsK
QEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZExpbmUo
Y29uCiAgICAgLy8gQ3JlYXRlIGEgY2VsbCB0aGF0IHdpbGwgaG9sZCB0aGUgbGluZSBudW1iZXIg
KGl0IGlzIGdlbmVyYXRlZCBpbiB0aGUgc3R5bGVzaGVldCB1c2luZyBjb3VudGVycykuCiAgICAg
RWxlbWVudCogdGQgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQodGRUYWcsIHRoaXMpOwogICAg
IFJlZlB0cjxOYW1lZE1hcHBlZEF0dHJNYXA+IGF0dHJzID0gTmFtZWRNYXBwZWRBdHRyTWFwOjpj
cmVhdGUoKTsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3Jl
YXRlKGNsYXNzQXR0ciwgIndlYmtpdC1saW5lLW51bWJlciIpLCB0cnVlKTsKKyAgICBhdHRycy0+
YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0ciwgIndlYmtpdC1s
aW5lLW51bWJlciIpKTsKICAgICB0ZC0+c2V0QXR0cmlidXRlTWFwKGF0dHJzLnJlbGVhc2UoKSk7
CiAgICAgdHJvdy0+YWRkQ2hpbGQodGQpOwogICAgIHRkLT5hdHRhY2goKTsKQEAgLTIyMCw3ICsy
MjAsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZExpbmUoY29uCiAgICAgLy8g
Q3JlYXRlIGEgc2Vjb25kIGNlbGwgZm9yIHRoZSBsaW5lIGNvbnRlbnRzCiAgICAgdGQgPSBuZXcg
SFRNTFRhYmxlQ2VsbEVsZW1lbnQodGRUYWcsIHRoaXMpOwogICAgIGF0dHJzID0gTmFtZWRNYXBw
ZWRBdHRyTWFwOjpjcmVhdGUoKTsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0ciwgIndlYmtpdC1saW5lLWNvbnRlbnQiKSwgdHJ1ZSk7
CisgICAgYXR0cnMtPmFkZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShjbGFzc0F0
dHIsICJ3ZWJraXQtbGluZS1jb250ZW50IikpOwogICAgIHRkLT5zZXRBdHRyaWJ1dGVNYXAoYXR0
cnMucmVsZWFzZSgpKTsKICAgICB0cm93LT5hZGRDaGlsZCh0ZCk7CiAgICAgdGQtPmF0dGFjaCgp
OwpAQCAtMjgzLDkgKzI4Myw5IEBAIEVsZW1lbnQqIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFk
ZExpbmsKICAgICAgICAgY2xhc3NWYWx1ZSA9ICJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUg
d2Via2l0LWh0bWwtZXh0ZXJuYWwtbGluayI7CiAgICAgZWxzZQogICAgICAgICBjbGFzc1ZhbHVl
ID0gIndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1ZSB3ZWJraXQtaHRtbC1yZXNvdXJjZS1saW5r
IjsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNs
YXNzQXR0ciwgY2xhc3NWYWx1ZSksIHRydWUpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlOjpjcmVhdGUodGFyZ2V0QXR0ciwgIl9ibGFuayIpLCB0cnVlKTsKLSAg
ICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGhyZWZBdHRy
LCB1cmwpLCB0cnVlKTsKKyAgICBhdHRycy0+YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6
Y3JlYXRlKGNsYXNzQXR0ciwgY2xhc3NWYWx1ZSkpOworICAgIGF0dHJzLT5hZGRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlOjpjcmVhdGUodGFyZ2V0QXR0ciwgIl9ibGFuayIpKTsKKyAgICBhdHRy
cy0+YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGhyZWZBdHRyLCB1cmwpKTsK
ICAgICBhbmNob3ItPnNldEF0dHJpYnV0ZU1hcChhdHRycy5yZWxlYXNlKCkpOwogICAgIG1fY3Vy
cmVudC0+YWRkQ2hpbGQoYW5jaG9yKTsKICAgICBhbmNob3ItPmF0dGFjaCgpOwpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjgsNyArMTIyOCw3IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmdvdG9BbmNob3IoKQogICAgIC8vIE9UT0ggSWYgQ1NTIHRhcmdldCB3YXMgc2V0
IHByZXZpb3VzbHksIHdlIHdhbnQgdG8gc2V0IGl0IHRvIDAsIHJlY2FsYwogICAgIC8vIGFuZCBw
b3NzaWJseSByZXBhaW50IGJlY2F1c2UgOnRhcmdldCBwc2V1ZG8gY2xhc3MgbWF5IGhhdmUgYmVl
bgogICAgIC8vIHNldCAoc2VlIGJ1ZyAxMTMyMSkuCi0gICAgaWYgKCFtX1VSTC5oYXNSZWYoKSAm
JiAhKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0Q1NTVGFy
Z2V0KCkpKQorICAgIGlmICghbV9VUkwuaGFzUmVmKCkgJiYgIShtX2ZyYW1lLT5kb2N1bWVudCgp
ICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgU3RyaW5nIHJlZiA9IG1fVVJMLnJlZigpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvVGV4
dFJlc291cmNlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGV4dFJl
c291cmNlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9sb2FkZXIvVGV4
dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MCw0OCArNDUwLDU5IEBA
IGJvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGEKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCisgICAgY29uc3QgY2hhciogZGF0YVN0YXJ0ID0gZGF0YTsKICAgICBz
aXplX3Qgb2xkU2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKLSAgICBtX2J1ZmZlci5ncm93KG9sZFNp
emUgKyBsZW4pOwotICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBs
ZW4pOworICAgIHNpemVfdCBkYXRhU2l6ZSA9IG9sZFNpemUgKyBsZW47CiAKLSAgICBtb3ZlZERh
dGFUb0J1ZmZlciA9IHRydWU7CisgICAgaWYgKGRhdGFTaXplIDw9IDgpIC8vIHN0cmxlbigiQGNo
YXJzZXQiKSA9PSA4CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2J1ZmZlci5z
aXplKCkgPiA4KSB7IC8vIHN0cmxlbigiQGNoYXJzZXQiKSA9PSA4Ci0gICAgICAgIGNvbnN0IGNo
YXIqIGRhdGFTdGFydCA9IG1fYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgY29uc3QgY2hhciogZGF0
YUVuZCA9IGRhdGFTdGFydCArIG1fYnVmZmVyLnNpemUoKTsKKyAgICBpZiAob2xkU2l6ZSkgewor
ICAgICAgICBtX2J1ZmZlci5ncm93KGRhdGFTaXplKTsKKyAgICAgICAgbWVtY3B5KG1fYnVmZmVy
LmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbik7CisgICAgICAgIG1vdmVkRGF0YVRvQnVmZmVy
ID0gdHJ1ZTsKKyAgICAgICAgZGF0YVN0YXJ0ID0gbV9idWZmZXIuZGF0YSgpOworICAgIH0KIAot
ICAgICAgICBpZiAoZGF0YVN0YXJ0WzBdID09ICdAJyAmJiBkYXRhU3RhcnRbMV0gPT0gJ2MnICYm
IGRhdGFTdGFydFsyXSA9PSAnaCcgJiYgZGF0YVN0YXJ0WzNdID09ICdhJyAmJiBkYXRhU3RhcnRb
NF0gPT0gJ3InICYmIAotICAgICAgICAgICAgZGF0YVN0YXJ0WzVdID09ICdzJyAmJiBkYXRhU3Rh
cnRbNl0gPT0gJ2UnICYmIGRhdGFTdGFydFs3XSA9PSAndCcpIHsKLSAgICAKLSAgICAgICAgICAg
IGRhdGFTdGFydCArPSA4OwotICAgICAgICAgICAgY29uc3QgY2hhciogcG9zID0gZGF0YVN0YXJ0
OwotICAgICAgICAgICAgaWYgKCFza2lwV2hpdGVzcGFjZShwb3MsIGRhdGFFbmQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGF0YVN0YXJ0WzBdID09ICdAJworICAg
ICAgICAgICAgJiYgZGF0YVN0YXJ0WzFdID09ICdjJworICAgICAgICAgICAgJiYgZGF0YVN0YXJ0
WzJdID09ICdoJworICAgICAgICAgICAgJiYgZGF0YVN0YXJ0WzNdID09ICdhJworICAgICAgICAg
ICAgJiYgZGF0YVN0YXJ0WzRdID09ICdyJworICAgICAgICAgICAgJiYgZGF0YVN0YXJ0WzVdID09
ICdzJworICAgICAgICAgICAgJiYgZGF0YVN0YXJ0WzZdID09ICdlJworICAgICAgICAgICAgJiYg
ZGF0YVN0YXJ0WzddID09ICd0JykgeworCisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGFFbmQgPSBk
YXRhU3RhcnQgKyBkYXRhU2l6ZTsKKworICAgICAgICBkYXRhU3RhcnQgKz0gODsKKyAgICAgICAg
Y29uc3QgY2hhciogcG9zID0gZGF0YVN0YXJ0OworICAgICAgICBpZiAoIXNraXBXaGl0ZXNwYWNl
KHBvcywgZGF0YUVuZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
IGlmICgqcG9zID09ICciJyB8fCAqcG9zID09ICdcJycpIHsKLSAgICAgICAgICAgICAgICBjaGFy
IHF1b3RhdGlvbk1hcmsgPSAqcG9zOwotICAgICAgICAgICAgICAgICsrcG9zOwotICAgICAgICAg
ICAgICAgIGRhdGFTdGFydCA9IHBvczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHdo
aWxlIChwb3MgPCBkYXRhRW5kICYmICpwb3MgIT0gcXVvdGF0aW9uTWFyaykKLSAgICAgICAgICAg
ICAgICAgICAgKytwb3M7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBkYXRhRW5kKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgqcG9zID09ICciJyB8
fCAqcG9zID09ICdcJycpIHsKKyAgICAgICAgICAgIGNoYXIgcXVvdGF0aW9uTWFyayA9ICpwb3M7
CisgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgIGRhdGFTdGFydCA9IHBvczsKIAotICAg
ICAgICAgICAgICAgIGludCBlbmNvZGluZ05hbWVMZW5ndGggPSBwb3MgLSBkYXRhU3RhcnQgKyAx
OwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGRhdGFFbmQgJiYg
KnBvcyAhPSBxdW90YXRpb25NYXJrKQogICAgICAgICAgICAgICAgICsrcG9zOwotICAgICAgICAg
ICAgICAgIGlmICghc2tpcFdoaXRlc3BhY2UocG9zLCBkYXRhRW5kKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHBvcyA9PSBkYXRhRW5kKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIGlmICgqcG9zID09
ICc7JykKLSAgICAgICAgICAgICAgICAgICAgc2V0RW5jb2RpbmcoZmluZFRleHRFbmNvZGluZyhk
YXRhU3RhcnQsIGVuY29kaW5nTmFtZUxlbmd0aCksIEVuY29kaW5nRnJvbUNTU0NoYXJzZXQpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGVuY29kaW5nTmFtZUxlbmd0aCA9IHBvcyAt
IGRhdGFTdGFydCArIDE7CisKKyAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgaWYgKCFz
a2lwV2hpdGVzcGFjZShwb3MsIGRhdGFFbmQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgaWYgKCpwb3MgPT0gJzsnKQorICAgICAgICAgICAgICAgIHNldEVu
Y29kaW5nKGZpbmRUZXh0RW5jb2RpbmcoZGF0YVN0YXJ0LCBlbmNvZGluZ05hbWVMZW5ndGgpLCBF
bmNvZGluZ0Zyb21DU1NDaGFyc2V0KTsKICAgICAgICAgfQotICAgICAgICBtX2NoZWNrZWRGb3JD
U1NDaGFyc2V0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQgPSB0cnVlOworICAgIHJldHVy
biB0cnVlOwogfQogCiAvLyBPdGhlciBicm93c2VycyBhbGxvdyBjb21tZW50cyBpbiB0aGUgaGVh
ZCBzZWN0aW9uLCBzbyB3ZSBuZWVkIHRvIGFsc28uCkBAIC03NjAsMTMgKzc3MSwxNSBAQCBTdHJp
bmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAKICAgICBib29sIG1vdmVkRGF0
YVRvQnVmZmVyID0gZmFsc2U7CiAKLSAgICBpZiAobV9jb250ZW50VHlwZSA9PSBDU1MgJiYgIW1f
Y2hlY2tlZEZvckNTU0NoYXJzZXQpCisgICAgaWYgKG1fY29udGVudFR5cGUgPT0gQ1NTICYmICFt
X2NoZWNrZWRGb3JDU1NDaGFyc2V0KSB7CiAgICAgICAgIGlmICghY2hlY2tGb3JDU1NDaGFyc2V0
KGRhdGEsIGxlbiwgbW92ZWREYXRhVG9CdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuICIiOwor
ICAgIH0KIAotICAgIGlmICgobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUg
PT0gWE1MKSAmJiAhbV9jaGVja2VkRm9ySGVhZENoYXJzZXQpIC8vIEhUTUwgYW5kIFhNTAorICAg
IGlmICgobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1MKSAmJiAh
bV9jaGVja2VkRm9ySGVhZENoYXJzZXQpIHsgLy8gSFRNTCBhbmQgWE1MCiAgICAgICAgIGlmICgh
Y2hlY2tGb3JIZWFkQ2hhcnNldChkYXRhLCBsZW4sIG1vdmVkRGF0YVRvQnVmZmVyKSkKICAgICAg
ICAgICAgIHJldHVybiAiIjsKKyAgICB9CiAKICAgICAvLyBEbyB0aGUgYXV0by1kZXRlY3QgaWYg
b3VyIGRlZmF1bHQgZW5jb2RpbmcgaXMgb25lIG9mIHRoZSBKYXBhbmVzZSBvbmVzLgogICAgIC8v
IEZJWE1FOiBJdCBzZWVtcyB3cm9uZyB0byBjaGFuZ2Ugb3VyIGVuY29kaW5nIGRvd25zdHJlYW0g
YWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGRvbmUgc29tZSBkZWNvZGluZy4KSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA0
MDQ3MSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBET01BcHBsaWNhdGlvbgogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKICAgICBpZiAo
QXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKSkgewogICAgICAgICB1
bnNpZ25lZCBudW1FbnRyaWVzID0gY2FjaGUtPm51bUR5bmFtaWNFbnRyaWVzKCk7Ci0gICAgICAg
IHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobnVtRW50cmllcyk7CisgICAgICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG51bUVudHJpZXMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtRW50cmllczsgKytpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjYWNo
ZS0+ZHluYW1pY0VudHJ5KGkpKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJ
KHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIFN0cmluZyBTZWN1cml0eU9yaWdpbjo6dG9T
dHJpbmcoKSBjb25zdAogICAgICAgICByZXR1cm4gU3RyaW5nKCJmaWxlOi8vIik7CiAKICAgICBW
ZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvdG9j
b2wubGVuZ3RoKCkgKyBtX2hvc3QubGVuZ3RoKCkgKyAxMCk7CisgICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9wcm90b2NvbC5sZW5ndGgoKSArIG1faG9zdC5sZW5ndGgoKSArIDEw
KTsKICAgICBhcHBlbmQocmVzdWx0LCBtX3Byb3RvY29sKTsKICAgICBhcHBlbmQocmVzdWx0LCAi
Oi8vIik7CiAgICAgYXBwZW5kKHJlc3VsdCwgbV9ob3N0KTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9t
YWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNDA0NzEpCisr
KyBXZWJDb3JlL3BhZ2UvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC04NzMsNyArODczLDcgQEAgc3RhdGljIFdlYkNvcmVUZXh0TWFya2VyUmFuZ2Uq
IHRleHRNYXJrZQogc3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5LCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHZlY3RvcikK
IHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOwotICAgIHZlY3Rvci5yZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICB2ZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShs
ZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6aV0g
YWNjZXNzaWJpbGl0eU9iamVjdF07CiAgICAgICAgIGlmIChvYmopCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDcg
KzMwNCw3IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW4KICAgICB9
CiAKICAgICBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiBrZXlzVG9SZW1vdmU7Ci0g
ICAga2V5c1RvUmVtb3ZlLnJlc2VydmVDYXBhY2l0eShnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5z
aXplKCkpOworICAgIGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGdGb250UGxh
dGZvcm1EYXRhQ2FjaGUtPnNpemUoKSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVy
YXRvciBwbGF0Zm9ybURhdGFFbmQgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQoKTsKICAg
ICBmb3IgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhID0gZ0Zv
bnRQbGF0Zm9ybURhdGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9IHBsYXRmb3JtRGF0
YUVuZDsgKytwbGF0Zm9ybURhdGEpIHsKICAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS0+c2Vjb25k
ICYmICFnRm9udERhdGFDYWNoZS0+Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+c2Vjb25kKSkKQEAg
LTQyNCw3ICs0MjQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAKICAgICBWZWN0
b3I8UmVmUHRyPEZvbnRTZWxlY3Rvcj4gPiBjbGllbnRzOwogICAgIHNpemVfdCBudW1DbGllbnRz
ID0gZ0NsaWVudHMtPnNpemUoKTsKLSAgICBjbGllbnRzLnJlc2VydmVDYXBhY2l0eShudW1DbGll
bnRzKTsKKyAgICBjbGllbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtQ2xpZW50cyk7CiAg
ICAgSGFzaFNldDxGb250U2VsZWN0b3IqPjo6aXRlcmF0b3IgZW5kID0gZ0NsaWVudHMtPmVuZCgp
OwogICAgIGZvciAoSGFzaFNldDxGb250U2VsZWN0b3IqPjo6aXRlcmF0b3IgaXQgPSBnQ2xpZW50
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBjbGllbnRzLmFwcGVuZCgqaXQp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwCShy
ZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1h
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNDMgKzI5LDIyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2x5cGhXaWR0aE1hcC5oIgogCi1uYW1lc3BhY2UgV2Vi
Q29yZQotewotCi1mbG9hdCBHbHlwaFdpZHRoTWFwOjp3aWR0aEZvckdseXBoKEdseXBoIGcpCi17
Ci0gICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChnIC8gR2x5cGhXaWR0aFBhZ2U6OnNpemUpOwot
ICAgIEdseXBoV2lkdGhQYWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyKTsKLSAgICBp
ZiAocGFnZSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPndpZHRoRm9yR2x5cGgoZyk7Ci0gICAgcmV0
dXJuIGNHbHlwaFdpZHRoVW5rbm93bjsKLX0KLQotdm9pZCBHbHlwaFdpZHRoTWFwOjpzZXRXaWR0
aEZvckdseXBoKEdseXBoIGdseXBoLCBmbG9hdCB3aWR0aCkKLXsKLSAgICB1bnNpZ25lZCBwYWdl
TnVtYmVyID0gKGdseXBoIC8gR2x5cGhXaWR0aFBhZ2U6OnNpemUpOwotICAgIEdseXBoV2lkdGhQ
YWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyKTsKLSAgICBpZiAocGFnZSkKLSAgICAg
ICAgcGFnZS0+c2V0V2lkdGhGb3JHbHlwaChnbHlwaCwgd2lkdGgpOwotfQorbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1pbmxpbmUgR2x5cGhXaWR0aE1hcDo6R2x5cGhXaWR0aFBhZ2UqIEdseXBoV2lk
dGhNYXA6OmxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikKK0dseXBoV2lkdGhNYXA6Okds
eXBoV2lkdGhQYWdlKiBHbHlwaFdpZHRoTWFwOjpsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQg
cGFnZU51bWJlcikKIHsKICAgICBHbHlwaFdpZHRoUGFnZSogcGFnZTsKICAgICBpZiAocGFnZU51
bWJlciA9PSAwKSB7Ci0gICAgICAgIGlmIChtX2ZpbGxlZFByaW1hcnlQYWdlKQotICAgICAgICAg
ICAgcmV0dXJuICZtX3ByaW1hcnlQYWdlOworICAgICAgICBBU1NFUlQoIW1fZmlsbGVkUHJpbWFy
eVBhZ2UpOwogICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7CiAgICAgICAgIG1fZmlsbGVk
UHJpbWFyeVBhZ2UgPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX3BhZ2VzKSB7
Ci0gICAgICAgICAgICBHbHlwaFdpZHRoUGFnZSogcmVzdWx0ID0gbV9wYWdlcy0+Z2V0KHBhZ2VO
dW1iZXIpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFnZSA9IG1fcGFnZXMtPmdldChw
YWdlTnVtYmVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFnZTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX3BhZ2VzLnNldChuZXcgSGFzaE1hcDxpbnQsIEdseXBoV2lkdGhQYWdl
Kj4pOwogICAgICAgICBwYWdlID0gbmV3IEdseXBoV2lkdGhQYWdlOwotICAgICAgICBpZiAoIW1f
cGFnZXMpCi0gICAgICAgICAgICBtX3BhZ2VzID0gbmV3IEhhc2hNYXA8aW50LCBHbHlwaFdpZHRo
UGFnZSo+OwogICAgICAgICBtX3BhZ2VzLT5zZXQocGFnZU51bWJlciwgcGFnZSk7CiAgICAgfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuaAkocmV2aXNp
b24gNDA0NzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw5ICsyOSw5IEBACiAjaWZuZGVmIEdseXBoV2lk
dGhNYXBfaAogI2RlZmluZSBHbHlwaFdpZHRoTWFwX2gKIAotI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L1VuaWNvZGUuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29k
ZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMzQgKzQxLDQ5IEBA
IGNvbnN0IGZsb2F0IGNHbHlwaFdpZHRoVW5rbm93biA9IC0xOwogCiBjbGFzcyBHbHlwaFdpZHRo
TWFwIDogTm9uY29weWFibGUgewogcHVibGljOgotICAgIEdseXBoV2lkdGhNYXAoKSA6IG1fZmls
bGVkUHJpbWFyeVBhZ2UoZmFsc2UpLCBtX3BhZ2VzKDApIHt9Ci0gICAgfkdseXBoV2lkdGhNYXAo
KSB7IGlmIChtX3BhZ2VzKSB7IGRlbGV0ZUFsbFZhbHVlcygqbV9wYWdlcyk7IGRlbGV0ZSBtX3Bh
Z2VzOyB9IH0KKyAgICBHbHlwaFdpZHRoTWFwKCkgOiBtX2ZpbGxlZFByaW1hcnlQYWdlKGZhbHNl
KSB7IH0KKyAgICB+R2x5cGhXaWR0aE1hcCgpIHsgaWYgKG1fcGFnZXMpIHsgZGVsZXRlQWxsVmFs
dWVzKCptX3BhZ2VzKTsgfSB9CiAKLSAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoKTsKLSAg
ICB2b2lkIHNldFdpZHRoRm9yR2x5cGgoR2x5cGgsIGZsb2F0KTsKKyAgICBmbG9hdCB3aWR0aEZv
ckdseXBoKEdseXBoIGdseXBoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2UoZ2x5
cGggLyBHbHlwaFdpZHRoUGFnZTo6c2l6ZSktPndpZHRoRm9yR2x5cGgoZ2x5cGgpOworICAgIH0K
KworICAgIHZvaWQgc2V0V2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCwgZmxvYXQgd2lkdGgpCisg
ICAgeworICAgICAgICBsb2NhdGVQYWdlKGdseXBoIC8gR2x5cGhXaWR0aFBhZ2U6OnNpemUpLT5z
ZXRXaWR0aEZvckdseXBoKGdseXBoLCB3aWR0aCk7CisgICAgfQogCiBwcml2YXRlOgogICAgIHN0
cnVjdCBHbHlwaFdpZHRoUGFnZSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9
IDI1NjsgLy8gVXN1YWxseSBjb3ZlcnMgTGF0aW4tMSBpbiBhIHNpbmdsZSBwYWdlLgogICAgICAg
ICBmbG9hdCBtX3dpZHRoc1tzaXplXTsKIAotICAgICAgICBmbG9hdCB3aWR0aEZvckdseXBoKEds
eXBoIGcpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhzW2cgJSBzaXplXTsgfQotICAgICAgICB2b2lk
IHNldFdpZHRoRm9yR2x5cGgoR2x5cGggZywgZmxvYXQgdykKKyAgICAgICAgZmxvYXQgd2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gbV93aWR0aHNbZ2x5cGggJSBzaXpl
XTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgsIGZsb2F0IHdp
ZHRoKQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRXaWR0aEZvckluZGV4KGcgJSBzaXplLCB3
KTsKKyAgICAgICAgICAgIHNldFdpZHRoRm9ySW5kZXgoZ2x5cGggJSBzaXplLCB3aWR0aCk7CiAg
ICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRXaWR0aEZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBm
bG9hdCB3KQorICAgICAgICB2b2lkIHNldFdpZHRoRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGZs
b2F0IHdpZHRoKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX3dpZHRoc1tpbmRleF0gPSB3Owor
ICAgICAgICAgICAgbV93aWR0aHNbaW5kZXhdID0gd2lkdGg7CiAgICAgICAgIH0KICAgICB9Owog
ICAgIAotICAgIEdseXBoV2lkdGhQYWdlKiBsb2NhdGVQYWdlKHVuc2lnbmVkIHBhZ2UpOworICAg
IEdseXBoV2lkdGhQYWdlKiBsb2NhdGVQYWdlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpCisgICAgewor
ICAgICAgICBpZiAoIXBhZ2VOdW1iZXIgJiYgbV9maWxsZWRQcmltYXJ5UGFnZSkKKyAgICAgICAg
ICAgIHJldHVybiAmbV9wcmltYXJ5UGFnZTsKKyAgICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2VTbG93
Q2FzZShwYWdlTnVtYmVyKTsKKyAgICB9CisKKyAgICBHbHlwaFdpZHRoUGFnZSogbG9jYXRlUGFn
ZVNsb3dDYXNlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpOwogICAgIAogICAgIGJvb2wgbV9maWxsZWRQ
cmltYXJ5UGFnZTsKICAgICBHbHlwaFdpZHRoUGFnZSBtX3ByaW1hcnlQYWdlOyAvLyBXZSBvcHRp
bWl6ZSBmb3IgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBnbHlwaCBpbmRpY2VzIDAtMjU1LgotICAg
IEhhc2hNYXA8aW50LCBHbHlwaFdpZHRoUGFnZSo+KiBtX3BhZ2VzOworICAgIE93blB0cjxIYXNo
TWFwPGludCwgR2x5cGhXaWR0aFBhZ2UqPiA+IG1fcGFnZXM7CiB9OwogCiB9CisKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCShyZXZpc2lvbiA0MDQ3MSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk4LDcgKzk4LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gRm9ybURhdGE6OmRlZXBDb3B5
KAogICAgIGZvcm1EYXRhLT5tX2Fsd2F5c1N0cmVhbSA9IG1fYWx3YXlzU3RyZWFtOwogCiAgICAg
c2l6ZV90IG4gPSBtX2VsZW1lbnRzLnNpemUoKTsKLSAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5y
ZXNlcnZlQ2FwYWNpdHkobik7CisgICAgZm9ybURhdGEtPm1fZWxlbWVudHMucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShuKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG47ICsraSkgewogICAg
ICAgICBjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGUgPSBtX2VsZW1lbnRzW2ldOwogICAgICAgICBz
d2l0Y2ggKGUubV90eXBlKSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhl
YWRlck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBI
ZWFkZXJNYXAuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9IVFRQSGVhZGVyTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBhdXRvX3B0cjxDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBI
VFRQSGVhZGVyTWFwOjpjb3B5RGF0YSgpIGNvbnN0CiB7CiAgICAgYXV0b19wdHI8Q3Jvc3NUaHJl
YWRIVFRQSGVhZGVyTWFwRGF0YT4gZGF0YShuZXcgQ3Jvc3NUaHJlYWRIVFRQSGVhZGVyTWFwRGF0
YSgpKTsKLSAgICBkYXRhLT5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSgpKTsKKyAgICBkYXRhLT5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNpemUoKSk7CiAKICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmRfaXQgPSBlbmQoKTsKICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gYmVnaW4oKTsgaXQgIT0gZW5kX2l0OyArK2l0KSB7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwCShyZXZpc2lv
biA0MDQ3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCBhdXRvX3B0cjxDcm9zc1RocmVh
ZFJlc291cmNlUmVxdWVzdERhdGE+CiAgICAgZGF0YS0+bV9odHRwTWV0aG9kID0gaHR0cE1ldGhv
ZCgpLmNvcHkoKTsKICAgICBkYXRhLT5tX2h0dHBIZWFkZXJzLmFkb3B0KGh0dHBIZWFkZXJGaWVs
ZHMoKS5jb3B5RGF0YSgpKTsKIAotICAgIGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRp
b25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkucmVzZXJ2ZUNhcGFjaXR5KG1fcmVzcG9uc2VDb250ZW50
RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpKTsKKyAgICBkYXRhLT5tX3Jl
c3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0FycmF5LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tB
cnJheS5zaXplKCkpOwogICAgIHNpemVfdCBlbmNvZGluZ0FycmF5U2l6ZSA9IG1fcmVzcG9uc2VD
b250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkuc2l6ZSgpOwogICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBlbmNvZGluZ0FycmF5U2l6ZTsgKytpbmRleCkgewog
ICAgICAgICBkYXRhLT5tX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFj
a0FycmF5LmFwcGVuZChtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFj
a0FycmF5W2luZGV4XS5jb3B5KCkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21h
Yy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvbWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTIwNCw3ICsyMDQsNyBAQCBzdGF0aWMgdm9pZCogZm9ybUNyZWF0ZShDRlJlYWRTdHJl
YW1SZWYgCiAKICAgICAvLyBBcHBlbmQgaW4gcmV2ZXJzZSBvcmRlciBzaW5jZSB3ZSByZW1vdmUg
ZWxlbWVudHMgZnJvbSB0aGUgZW5kLgogICAgIHNpemVfdCBzaXplID0gZm9ybURhdGEtPmVsZW1l
bnRzKCkuc2l6ZSgpOwotICAgIG5ld0luZm8tPnJlbWFpbmluZ0VsZW1lbnRzLnJlc2VydmVDYXBh
Y2l0eShzaXplKTsKKyAgICBuZXdJbmZvLT5yZW1haW5pbmdFbGVtZW50cy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQog
ICAgICAgICBuZXdJbmZvLT5yZW1haW5pbmdFbGVtZW50cy5hcHBlbmQoZm9ybURhdGEtPmVsZW1l
bnRzKClbc2l6ZSAtIGkgLSAxXSk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0
Zm9ybVN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9y
bVN0cmluZy5oCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0
Zm9ybVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpbmNsdWRl
ICJTdHJpbmdJbXBsLmgiCiAKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCiAjaWYgVVNF
KEpTQykKICNpbmNsdWRlIDxydW50aW1lL0lkZW50aWZpZXIuaD4KICNlbHNlCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcg
QEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAoIG11ZWxsZXJAa2RlLm9yZyApCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcgV2VsbGluZ3RvbiAocHJvdG9uQHdpcmV0YXBw
ZWQubmV0KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTkwNywyNiArOTA3LDggQEAgV1RGOjpVbmljb2RlOjpE
aXJlY3Rpb24gU3RyaW5nSW1wbDo6ZGVmYQogfQogCiAvLyBUaGlzIGlzIGEgaG90IGZ1bmN0aW9u
IGJlY2F1c2UgaXQncyB1c2VkIHdoZW4gcGFyc2luZyBIVE1MLgotUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiBTdHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBT
dHJpbmdJbXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVyc1Nsb3dDYXNlKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7Ci0gICAgQVNTRVJUKGNoYXJhY3Rl
cnMpOwotICAgIEFTU0VSVChsZW5ndGgpOwotCi0gICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjYXNl
IHdoZXJlIHRoZXJlIGFyZSBubyBOdWxsIGNoYXJhY3RlcnMgYnkgcXVpY2tseQotICAgIC8vIHNl
YXJjaGluZyBmb3IgbnVsbHMsIGFuZCB0aGVuIHVzaW5nIFN0cmluZ0ltcGw6OmNyZWF0ZSwgd2hp
Y2ggd2lsbAotICAgIC8vIG1lbWNweSB0aGUgd2hvbGUgYnVmZmVyLiAgVGhpcyBpcyBmYXN0ZXIg
dGhhbiBhc3NpZ25pbmcgY2hhcmFjdGVyIGJ5Ci0gICAgLy8gY2hhcmFjdGVyIGR1cmluZyB0aGUg
bG9vcC4gCi0KLSAgICAvLyBGYXN0IGNhc2UuCi0gICAgaW50IGZvdW5kTnVsbCA9IDA7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgIWZvdW5kTnVsbCAmJiBpIDwgbGVuZ3RoOyBpKyspIHsKLSAg
ICAgICAgaW50IGMgPSBjaGFyYWN0ZXJzW2ldOyAvLyBtb3JlIGVmZmljaWVudCB0aGFuIHVzaW5n
IFVDaGFyIGhlcmUgKGF0IGxlYXN0IG9uIEludGVsIE1hYyBPUykKLSAgICAgICAgZm91bmROdWxs
IHw9ICFjOwotICAgIH0KLSAgICBpZiAoIWZvdW5kTnVsbCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
Z0ltcGw6OmNyZWF0ZShjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgIAotICAgIC8vIFNsb3cgY2Fz
ZS4KICAgICBTdHJpbmdCdWZmZXIgc3RyaXBwZWRDb3B5KGxlbmd0aCk7CiAgICAgdW5zaWduZWQg
c3RyaXBwZWRMZW5ndGggPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7
IGkrKykgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiA0MDQ3
MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAj
aW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgpA
QCAtMTY3LDYgKzE2Nyw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xv
d0Nhc2UoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOworCiAgICAgdW5zaWduZWQgbV9s
ZW5ndGg7CiAgICAgY29uc3QgVUNoYXIqIG1fZGF0YTsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1f
aGFzaDsKQEAgLTI3NCw2ICsyNzYsMjkgQEAgc3RhdGljIGlubGluZSBib29sIGlzU3BhY2VPck5l
d2xpbmUoVUNoYQogICAgIHJldHVybiBjIDw9IDB4N0YgPyBXVEY6OmlzQVNDSUlTcGFjZShjKSA6
IFdURjo6VW5pY29kZTo6ZGlyZWN0aW9uKGMpID09IFdURjo6VW5pY29kZTo6V2hpdGVTcGFjZU5l
dXRyYWw7CiB9CiAKKy8vIFRoaXMgaXMgYSBob3QgZnVuY3Rpb24gYmVjYXVzZSBpdCdzIHVzZWQg
d2hlbiBwYXJzaW5nIEhUTUwuCitpbmxpbmUgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBTdHJpbmdJ
bXBsOjpjcmVhdGVTdHJpcHBpbmdOdWxsQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVy
cywgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIEFTU0VSVChjaGFyYWN0ZXJzKTsKKyAgICBBU1NF
UlQobGVuZ3RoKTsKKworICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBh
cmUgbm8gTnVsbCBjaGFyYWN0ZXJzIGJ5IHF1aWNrbHkKKyAgICAvLyBzZWFyY2hpbmcgZm9yIG51
bGxzLCBhbmQgdGhlbiB1c2luZyBTdHJpbmdJbXBsOjpjcmVhdGUsIHdoaWNoIHdpbGwKKyAgICAv
LyBtZW1jcHkgdGhlIHdob2xlIGJ1ZmZlci4gIFRoaXMgaXMgZmFzdGVyIHRoYW4gYXNzaWduaW5n
IGNoYXJhY3RlciBieQorICAgIC8vIGNoYXJhY3RlciBkdXJpbmcgdGhlIGxvb3AuIAorCisgICAg
Ly8gRmFzdCBjYXNlLgorICAgIGludCBmb3VuZE51bGwgPSAwOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7ICFmb3VuZE51bGwgJiYgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICAgIGludCBjID0g
Y2hhcmFjdGVyc1tpXTsgLy8gbW9yZSBlZmZpY2llbnQgdGhhbiB1c2luZyBVQ2hhciBoZXJlIChh
dCBsZWFzdCBvbiBJbnRlbCBNYWMgT1MpCisgICAgICAgIGZvdW5kTnVsbCB8PSAhYzsKKyAgICB9
CisgICAgaWYgKCFmb3VuZE51bGwpCisgICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGUo
Y2hhcmFjdGVycywgbGVuZ3RoKTsKKworICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVTdHJp
cHBpbmdOdWxsQ2hhcmFjdGVyc1Nsb3dDYXNlKGNoYXJhY3RlcnMsIGxlbmd0aCk7Cit9CisKIH0K
IAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJl
dmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE4NiwxMSArMjE4Niw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpyZW1v
dmVGcm9tT2JqZWN0TGlzdHMKICAgICB9CiB9CiAKLWJvb2wgUmVuZGVyT2JqZWN0Ojpkb2N1bWVu
dEJlaW5nRGVzdHJveWVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gIWRvY3VtZW50KCktPnJlbmRl
cmVyKCk7Ci19Ci0KIHZvaWQgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCkKIHsKICAgICAvLyBEZXN0
cm95IGFueSBsZWZ0b3ZlciBhbm9ueW1vdXMgY2hpbGRyZW4uCkBAIC0yNDM2LDI3ICsyNDMxLDI1
IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkZWxldGVMaW5lQm94V3JhcHBlcigKIHsKIH0KIAotUmVu
ZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5bGUoKSBjb25zdAorUmVuZGVyU3R5
bGUqIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5bGVTbG93Q2FzZSgpIGNvbnN0CiB7Ci0gICAg
aWYgKCFkb2N1bWVudCgpLT51c2VzRmlyc3RMaW5lUnVsZXMoKSkKLSAgICAgICAgcmV0dXJuIG1f
c3R5bGUuZ2V0KCk7CisgICAgQVNTRVJUKGRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygp
KTsKIAotICAgIFJlbmRlclN0eWxlKiBzID0gbV9zdHlsZS5nZXQoKTsKLSAgICBjb25zdCBSZW5k
ZXJPYmplY3QqIG9iaiA9IGlzVGV4dCgpID8gcGFyZW50KCkgOiB0aGlzOwotICAgIGlmIChvYmot
PmlzQmxvY2tGbG93KCkpIHsKLSAgICAgICAgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrID0g
b2JqLT5maXJzdExpbmVCbG9jaygpOwotICAgICAgICBpZiAoZmlyc3RMaW5lQmxvY2spCi0gICAg
ICAgICAgICBzID0gZmlyc3RMaW5lQmxvY2stPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0
eWxlOjpGSVJTVF9MSU5FLCBzdHlsZSgpKTsKLSAgICB9IGVsc2UgaWYgKCFvYmotPmlzQW5vbnlt
b3VzKCkgJiYgb2JqLT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSA9IG9iai0+cGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7Ci0gICAgICAgIGlm
IChwYXJlbnRTdHlsZSAhPSBvYmotPnBhcmVudCgpLT5zdHlsZSgpKSB7Ci0gICAgICAgICAgICAv
LyBBIGZpcnN0LWxpbmUgc3R5bGUgaXMgaW4gZWZmZWN0LiBXZSBuZWVkIHRvIGNhY2hlIGEgZmly
c3QtbGluZSBzdHlsZQotICAgICAgICAgICAgLy8gZm9yIG91cnNlbHZlcy4KLSAgICAgICAgICAg
IHN0eWxlKCktPnNldEhhc1BzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FX0lOSEVS
SVRFRCk7Ci0gICAgICAgICAgICBzID0gb2JqLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJT
dHlsZTo6RklSU1RfTElORV9JTkhFUklURUQsIHBhcmVudFN0eWxlKTsKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBtX3N0eWxlLmdldCgpOworICAgIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVy
ZXIgPSBpc1RleHQoKSA/IHBhcmVudCgpIDogdGhpczsKKyAgICBpZiAocmVuZGVyZXItPmlzQmxv
Y2tGbG93KCkpIHsKKyAgICAgICAgaWYgKFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jayA9IHJl
bmRlcmVyLT5maXJzdExpbmVCbG9jaygpKQorICAgICAgICAgICAgc3R5bGUgPSBmaXJzdExpbmVC
bG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xJTkUsIHN0eWxl
KTsKKyAgICB9IGVsc2UgaWYgKCFyZW5kZXJlci0+aXNBbm9ueW1vdXMoKSAmJiByZW5kZXJlci0+
aXNSZW5kZXJJbmxpbmUoKSkgeworICAgICAgICBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUgPSBy
ZW5kZXJlci0+cGFyZW50KCktPmZpcnN0TGluZVN0eWxlKCk7CisgICAgICAgIGlmIChwYXJlbnRT
dHlsZSAhPSByZW5kZXJlci0+cGFyZW50KCktPnN0eWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEEg
Zmlyc3QtbGluZSBzdHlsZSBpcyBpbiBlZmZlY3QuIENhY2hlIGEgZmlyc3QtbGluZSBzdHlsZSBm
b3Igb3Vyc2VsdmVzLgorICAgICAgICAgICAgc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlKFJlbmRl
clN0eWxlOjpGSVJTVF9MSU5FX0lOSEVSSVRFRCk7CisgICAgICAgICAgICBzdHlsZSA9IHJlbmRl
cmVyLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORV9JTkhFUklU
RUQsIHBhcmVudFN0eWxlKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gczsKKworICAg
IHJldHVybiBzdHlsZTsKIH0KIAogUmVuZGVyU3R5bGUqIFJlbmRlck9iamVjdDo6Z2V0Q2FjaGVk
UHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OlBzZXVkb0lkIHBzZXVkbywgUmVuZGVyU3R5bGUqIHBh
cmVudFN0eWxlKSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9u
IDQwNDcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1OSw3ICs1NTksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgbWF4UHJlZldp
ZHRoKCkgY29uc3QgeyByZXR1cm4gMDsgfQogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFJlbmRlclN0eWxlKiBmaXJzdExpbmVT
dHlsZSgpIGNvbnN0OworICAgIFJlbmRlclN0eWxlKiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIGRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpID8gZmlyc3RMaW5lU3R5bGVT
bG93Q2FzZSgpIDogc3R5bGUoKTsgfQogICAgIFJlbmRlclN0eWxlKiBzdHlsZShib29sIGZpcnN0
TGluZSkgY29uc3QgeyByZXR1cm4gZmlyc3RMaW5lID8gZmlyc3RMaW5lU3R5bGUoKSA6IHN0eWxl
KCk7IH0KICAgICAKICAgICAvLyBBbm9ueW1vdXMgYmxvY2tzIHRoYXQgYXJlIHBhcnQgb2Ygb2Yg
YSBjb250aW51YXRpb24gY2hhaW4gd2lsbCByZXR1cm4gdGhlaXIgaW5saW5lIGNvbnRpbnVhdGlv
bidzIG91dGxpbmUgc3R5bGUgaW5zdGVhZC4KQEAgLTgzNSw2ICs4MzUsOCBAQCBwcm90ZWN0ZWQ6
CiAgICAgfTsKICAgICAKIHByaXZhdGU6CisgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxl
U2xvd0Nhc2UoKSBjb25zdDsKKwogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9zdHlsZTsKIAog
ICAgIE5vZGUqIG1fbm9kZTsKQEAgLTg5OCw2ICs5MDAsMTEgQEAgcHJpdmF0ZToKICAgICBzdGF0
aWMgYm9vbCBzX2FmZmVjdHNQYXJlbnRCbG9jazsKIH07CiAKK2lubGluZSBib29sIFJlbmRlck9i
amVjdDo6ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFkb2N1
bWVudCgpLT5yZW5kZXJlcigpOworfQorCiBpbmxpbmUgdm9pZCBSZW5kZXJPYmplY3Q6OnNldE5l
ZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cykKIHsKICAgICBib29sIGFscmVhZHlO
ZWVkZWRMYXlvdXQgPSBtX25lZWRzTGF5b3V0OwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4Nyw3ICszODcsNyBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBTVkdTVkdFbGVt
ZW50OjpnZXRDCiAgICAgaWYgKCFpc091dGVybW9zdFNWRygpKQogICAgICAgICBtYXQudHJhbnNs
YXRlKHgoKS52YWx1ZSh0aGlzKSwgeSgpLnZhbHVlKHRoaXMpKTsKIAotICAgIGlmIChhdHRyaWJ1
dGVzKCktPmdldE5hbWVkSXRlbShTVkdOYW1lczo6dmlld0JveEF0dHIpKSB7CisgICAgaWYgKGF0
dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShTVkdOYW1lczo6dmlld0JveEF0dHIpKSB7CiAg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNm
b3JtKHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMpKTsKICAgICAgICAg
bWF0ID0gdmlld0JveCAqIG1hdDsKICAgICB9CkBAIC00MTQsNyArNDE0LDcgQEAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggU1ZHU1ZHRWxlbWVudDo6Z2V0UwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1hdCA9IFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpOwogICAgIG1h
dC50cmFuc2xhdGUocm9vdExvY2F0aW9uLngoKSwgcm9vdExvY2F0aW9uLnkoKSk7CiAKLSAgICBp
ZiAoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewor
ICAgIGlmIChhdHRyaWJ1dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW0oU1ZHTmFtZXM6OnZpZXdCb3hB
dHRyKSkgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2aWV3Qm94ID0gdmlld0JveFRv
Vmlld1RyYW5zZm9ybSh3aWR0aCgpLnZhbHVlKHRoaXMpLCBoZWlnaHQoKS52YWx1ZSh0aGlzKSk7
CiAgICAgICAgIG1hdCA9IHZpZXdCb3ggKiBtYXQ7CiAgICAgfQpJbmRleDogV2ViQ29yZS9zdmcv
U1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHU3R5bGVk
RWxlbWVudC5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MCw3ICsyNDAsNyBAQCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBTVkdTdHlsZWRFbGVtZW50CiAKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IFNWR1N0
eWxlZEVsZW1lbnQ6OmdldFByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUp
CiB7Ci0gICAgQXR0cmlidXRlKiBhdHRyID0gbWFwcGVkQXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1
dGVJdGVtKG5hbWUsIGZhbHNlKTsKKyAgICBBdHRyaWJ1dGUqIGF0dHIgPSBtYXBwZWRBdHRyaWJ1
dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbmFtZSwgbnVs
bEF0b20pKTsKICAgICBpZiAoIWF0dHIgfHwgIWF0dHItPmlzTWFwcGVkQXR0cmlidXRlKCkgfHwg
IWF0dHItPnN0eWxlKCkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBXZWJDb3JlL3htbC9Y
UGF0aEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlv
bnMuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUveG1sL1hQYXRoRnVuY3Rpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTM0LDMwICs1MzQsMzAgQEAgVmFsdWUgRnVuTGFuZzo6ZXZh
bHVhdGUoKSBjb25zdAogewogICAgIFN0cmluZyBsYW5nID0gYXJnKDApLT5ldmFsdWF0ZSgpLnRv
U3RyaW5nKCk7CiAKLSAgICBSZWZQdHI8Tm9kZT4gbGFuZ05vZGUgPSAwOworICAgIEF0dHJpYnV0
ZSogbGFuZ3VhZ2VBdHRyaWJ1dGUgPSAwOwogICAgIE5vZGUqIG5vZGUgPSBldmFsdWF0aW9uQ29u
dGV4dCgpLm5vZGUuZ2V0KCk7CiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgTmFtZWRBdHRy
TWFwKiBhdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKICAgICAgICAgaWYgKGF0dHJzKQotICAg
ICAgICAgICAgbGFuZ05vZGUgPSBhdHRycy0+Z2V0TmFtZWRJdGVtTlMoWE1MTmFtZXM6OnhtbE5h
bWVzcGFjZVVSSSwgImxhbmciKTsKLSAgICAgICAgaWYgKGxhbmdOb2RlKQorICAgICAgICAgICAg
bGFuZ3VhZ2VBdHRyaWJ1dGUgPSBhdHRycy0+Z2V0QXR0cmlidXRlSXRlbShRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBYTUxOYW1lczo6eG1sTmFtZXNwYWNlVVJJLCAibGFuZyIpKTsKKyAgICAgICAg
aWYgKGxhbmd1YWdlQXR0cmlidXRlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5vZGUg
PSBub2RlLT5wYXJlbnROb2RlKCk7CiAgICAgfQogCi0gICAgaWYgKCFsYW5nTm9kZSkKKyAgICBp
ZiAoIWxhbmd1YWdlQXR0cmlidXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHJp
bmcgbGFuZ05vZGVWYWx1ZSA9IGxhbmdOb2RlLT5ub2RlVmFsdWUoKTsKKyAgICBTdHJpbmcgbGFu
Z1ZhbHVlID0gbGFuZ3VhZ2VBdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGxhbmdOb2RlVmFsdWUsIGxhbmcpKQorICAg
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobGFuZ1ZhbHVlLCBsYW5nKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgICAgIC8vIFJlbW92ZSBzdWZmaXhlcyBvbmUgYnkgb25lLgot
ICAgICAgICBpbnQgaW5kZXggPSBsYW5nTm9kZVZhbHVlLnJldmVyc2VGaW5kKCctJyk7CisgICAg
ICAgIGludCBpbmRleCA9IGxhbmdWYWx1ZS5yZXZlcnNlRmluZCgnLScpOwogICAgICAgICBpZiAo
aW5kZXggPT0gLTEpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgbGFuZ05vZGVWYWx1ZSA9
IGxhbmdOb2RlVmFsdWUubGVmdChpbmRleCk7CisgICAgICAgIGxhbmdWYWx1ZSA9IGxhbmdWYWx1
ZS5sZWZ0KGluZGV4KTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3Jl
L3htbC9YUGF0aE5vZGVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoTm9k
ZVNldC5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgTm9kZVNldDo6c29ydCgp
IGNvbnN0CiAgICAgCiAgICAgLy8gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGp1c3QgYXNzaWduIHRo
ZSByZXN1bHQgdG8gbV9ub2RlcywgYmVjYXVzZSBzb21lIG5vZGVzIG1heSBnZXQgZGVyZWZlcmVu
Y2VkIGFuZCBkZXN0cm95ZWQuCiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IHNvcnRlZE5vZGVz
OwotICAgIHNvcnRlZE5vZGVzLnJlc2VydmVDYXBhY2l0eShub2RlQ291bnQpOworICAgIHNvcnRl
ZE5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZUNvdW50KTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbm9kZUNvdW50OyArK2kpCiAgICAgICAgIHNvcnRlZE5vZGVzLmFwcGVu
ZChwYXJlbnRNYXRyaXhbaV1bMF0pOwogICAgIApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhTdGVw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCShyZXZpc2lvbiA0
MDQ3MSkKKysrIFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Miw5ICsxOTIsOSBAQCB2b2lkIFN0ZXA6Om5vZGVzSW5BeGlzKE5vZGUqIGNvbnRleHQsIE5vCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGxvbmcg
aSA9IDA7IGkgPCBhdHRycy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0
cjxOb2RlPiBuID0gYXR0cnMtPml0ZW0oaSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRj
aGVzKG4uZ2V0KCkpKQotICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQobi5yZWxlYXNl
KCkpOworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cnMtPmF0dHJp
YnV0ZUl0ZW0oaSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVNYXRjaGVzKGF0dHJpYnV0ZS0+
YXR0cigpKSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGF0dHJpYnV0ZS0+YXR0
cigpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27233</attachid>
            <date>2009-02-01 10:15:06 -0800</date>
            <delta_ts>2009-02-01 19:03:31 -0800</delta_ts>
            <desc>patch</desc>
            <filename>SpeedupsPatch.txt</filename>
            <type>text/plain</type>
            <size>86410</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQwNDcxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDktMDItMDEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAyMzY3NDogc3BlZWQgdXAgc29tZSB0aGluZ3MgYmFzZWQgb24g
cHJvZmlsaW5nIHRoZSBwYWdlIGxvYWQgdGVzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQKKworICAgICAgICBBZGRlZCBWZWN0b3I6OnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkuCisKKyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAg
ICAgICAoSlNPYmplY3RDb3B5UHJvcGVydHlOYW1lcyk6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFj
aXR5LgorICAgICAgICAqIHBhcnNlci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyOjpM
ZXhlcik6IERpdHRvLgorICAgICAgICAoSlNDOjpMZXhlcjo6Y2xlYXIpOiBEaXR0by4KKworICAg
ICAgICAqIHd0Zi9WZWN0b3IuaDogQWRkZWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSwgYSBtb3Jl
IGVmZmljaWVudCB2ZXJzaW9uIG9mCisgICAgICAgIHJlc2VydmVDYXBhY2l0eSBmb3IgdXNlIHdo
ZW4gdGhlIHZlY3RvciBpcyBicmFuZCBuZXcgKHN0aWxsIHNpemUgMCB3aXRoIG5vCisgICAgICAg
IGNhcGFjaXR5IG90aGVyIHRoYW4gdGhlIGlubGluZSBjYXBhY2l0eSkuCisKIDIwMDktMDEtMzAg
IE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBi
eSBPbGl2ZXIgSHVudC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNp
b24gNDA0NzEpCisrKyBKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjcsNyArNDY3LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09iamVj
dENvcHlQcm9wZQogICAgIGpzT2JqZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIGFycmF5KTsK
IAogICAgIHNpemVfdCBzaXplID0gYXJyYXkuc2l6ZSgpOwotICAgIHByb3BlcnR5TmFtZXMtPmFy
cmF5LnJlc2VydmVDYXBhY2l0eShzaXplKTsKKyAgICBwcm9wZXJ0eU5hbWVzLT5hcnJheS5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLT5hcnJheS5hcHBlbmQoSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+KEFkb3B0LCBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKGFycmF5W2ldLnVzdHJp
bmcoKSkucmVsZWFzZVJlZigpKSk7CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
TGV4ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJ
KHJldmlzaW9uIDQwNDcxKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODAsOCArODAsOCBAQCBMZXhlcjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQogICAgICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX21haW5U
YWJsZShKU0M6Om1haW5UYWJsZSkKIHsKLSAgICBtX2J1ZmZlcjgucmVzZXJ2ZUNhcGFjaXR5KGlu
aXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOwotICAgIG1fYnVmZmVyMTYucmVzZXJ2ZUNhcGFjaXR5
KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOworICAgIG1fYnVmZmVyOC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOworICAgIG1fYnVmZmVyMTYucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5KTsKIH0KIAogTGV4
ZXI6On5MZXhlcigpCkBAIC04ODQsMTEgKzg4NCwxMSBAQCB2b2lkIExleGVyOjpjbGVhcigpCiAg
ICAgbV9pZGVudGlmaWVycy5jbGVhcigpOwogCiAgICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7
Ci0gICAgbmV3QnVmZmVyOC5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0
eSk7CisgICAgbmV3QnVmZmVyOC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGluaXRpYWxSZWFkQnVm
ZmVyQ2FwYWNpdHkpOwogICAgIG1fYnVmZmVyOC5zd2FwKG5ld0J1ZmZlcjgpOwogCiAgICAgVmVj
dG9yPFVDaGFyPiBuZXdCdWZmZXIxNjsKLSAgICBuZXdCdWZmZXIxNi5yZXNlcnZlQ2FwYWNpdHko
aW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7CisgICAgbmV3QnVmZmVyMTYucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShpbml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5KTsKICAgICBtX2J1ZmZlcjE2LnN3
YXAobmV3QnVmZmVyMTYpOwogCiAgICAgbV9pc1JlcGFyc2luZyA9IGZhbHNlOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvd3RmL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0
Zi9WZWN0b3IuaAkocmV2aXNpb24gNDA0NzEpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwMyw2ICs1MDMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgdm9pZCBncm93KHNpemVfdCBzaXplKTsKICAgICAgICAgdm9pZCByZXNpemUoc2l6ZV90
IHNpemUpOwogICAgICAgICB2b2lkIHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkp
OworICAgICAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBh
Y2l0eSk7CiAgICAgICAgIHZvaWQgc2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsK
ICAgICAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpIHsgc2hyaW5rQ2FwYWNpdHkoc2l6ZSgpKTsgfQog
CkBAIC03MzMsNiArNzM0LDE1IEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZv
aWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXpl
X3QgaW5pdGlhbENhcGFjaXR5KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAg
ICAgICBBU1NFUlQoY2FwYWNpdHkoKSA9PSBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIGlmIChp
bml0aWFsQ2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0eSkKKyAgICAgICAgICAgIG1fYnVmZmVyLmFs
bG9jYXRlQnVmZmVyKGluaXRpYWxDYXBhY2l0eSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KICAgICB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT46OnNocmlua0NhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKICAgICB7
CiAgICAgICAgIGlmIChuZXdDYXBhY2l0eSA+PSBjYXBhY2l0eSgpKQpJbmRleDogV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQwNDcx
KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMDMgQEAK
KzIwMDktMDItMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAyMzY3NDogc3BlZWQgdXAg
c29tZSB0aGluZ3MgYmFzZWQgb24gcHJvZmlsaW5nIHRoZSBwYWdlIGxvYWQgdGVzdAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzQKKworICAgICAg
ICBJIG1lYXN1cmVkIGEgdG90YWwgMSUgc3BlZWR1cC4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjc3NQ
cm9wZXJ0eU5hbWUpOgorCisgICAgICAgICogY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbik6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5LgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnRp
ZXNJblNldCk6IERpdHRvLgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6Y3NzVGV4dCk6IERpdHRvLgorICAg
ICAgICAqIGNzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0aWVzSW5TZXQpOiBEaXR0by4KKworICAgICAg
ICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OnNvcnRNYXRjaGVkUnVsZXMpOiBVc2UgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eS4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxl
bWVudCk6IFVzZSB0aGUgbmV3bHkgbmFtZWQgY3NzVGFyZ2V0IGluc3RlYWQKKyAgICAgICAgb2Yg
dGhlIG9sZCBuYW1lLCBnZXRDU1NUYXJnZXQuCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IpOiBEaXR0by4KKworICAg
ICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KTogTW92ZWQgY29kZSBmcm9tIE5vZGUgaW4gaGVy
ZSByYXRoZXIgdGhhbgorICAgICAgICBjYWxsaW5nIHRocm91Z2ggdG8gRXZlbnRUYXJnZXROb2Rl
OjppbnNlcnRlZEludG9Eb2N1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5lck5vZGU6
OnJlbW92ZWRGcm9tRG9jdW1lbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6Omluc2VydGVkSW50b1RyZWUpOiBUd2Vha2VkIGEgYml0LgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb21UcmVlKTogRGl0dG8uCisKKyAgICAgICAgKiBk
b20vQ29udGFpbmVyTm9kZS5oOiBNb3ZlZCB0aGUgY29uc3RydWN0b3IgZGVmaW5pdGlvbiBoZXJl
IGFuZCBtYWRlIGl0IGlubGluZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNGcm9tQWxsTm9k
ZXMpOiBJdGVyYXRlIHRoZSBkb2N1bWVudCBlbGVtZW50IGFuZAorICAgICAgICBpdHMgY29udGVu
dHMgb25seSB0byBhdm9pZCB0aGUgZG9jdW1lbnQgdHlwZSBub2RlLiBUaGlzIGFsbG93cyB1cyB0
byByZW1vdmUgdGhlIHZpcnR1YWwKKyAgICAgICAgZnVuY3Rpb24gY2FsbCB0byBpc0V2ZW50VGFy
Z2V0Tm9kZSBmcm9tIHRoZSBsb29wLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnNldENT
U1RhcmdldCk6IENoYW5nZWQgYXJndW1lbnQgdG8gYmUgYW4gRWxlbWVudCByYXRoZXIgdGhhbiBO
b2RlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZvcm1FbGVtZW50c1N0YXRlKTogVXNl
IHJlc2VydmVJbml0aWFsQ2FwYWNpdHkuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDogQ2hh
bmdlZCBDU1MgdGFyZ2V0IHRvIGJlIGFuIEVsZW1lbnQgcmF0aGVyIHRoYW4gYSBOb2RlLiBSZW5h
bWVkCisgICAgICAgIGdldENTU1RhcmdldCB0byBjc3NUYXJnZXQuCisKKyAgICAgICAgKiBkb20v
RXZlbnRUYXJnZXROb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50VGFyZ2V0Tm9kZTo6
cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNTbG93Q2FzZSk6IFJlbmFtZWQgYW5kIHR1cm5lZCB0aGUK
KyAgICAgICAgcmFyZSBkYXRhIGNoZWNrIGludG8gYW4gYXNzZXJ0aW9uLgorCisgICAgICAgICog
ZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oOiBNYWRlIHRoZSBmYXN0IGNhc2Ugb2YgcmVtb3ZlQWxsRXZl
bnRMaXN0ZW5lcnMgYmUgaW5saW5lLgorICAgICAgICBBbHNvIG1vdmVkIHRoZSBjb25zdHJ1Y3Rv
ciBkZWZpbml0aW9uIGhlcmUgYW5kIG1hZGUgaXQgaW5saW5lLiBBbmQgYWRkZWQgdG9FdmVudFRh
cmdldE5vZGUsCisgICAgICAgIG1hdGNoaW5nIHRoZSBkZXNpZ24gb2YgdGhlIHJlbmRlciB0cmVl
IGNoZWNrZWQgY2FzdHMuIExhdGVyIHdlIGNhbiBtaWdyYXRlIGFsbCBjYWxsZXJzCisgICAgICAg
IGZyb20gRXZlbnRUYXJnZXROb2RlQ2FzdCB0byB0b0V2ZW50VGFyZ2V0Tm9kZS4KKworICAgICAg
ICAqIGRvbS9OYW1lZEF0dHJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRBdHRyTWFw
OjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQpOiBBZGRlZC4gRmFjdG9yZWQgb3V0IGZyb20K
KyAgICAgICAgY2xlYXJBdHRyaWJ1dGVzLCBzbyB3ZSBjb3VsZCB1c2UgdGhpcyBsb29wIGluIGNh
c2VzIHdoZXJlIHdlJ3JlIG5vdCBjbGVhcmluZyB0aGUgYXR0cmlidXRlcy4KKyAgICAgICAgKFdl
YkNvcmU6Ok5hbWVkQXR0ck1hcDo6fk5hbWVkQXR0ck1hcCk6IENhbGwgZGV0YWNoQXR0cmlidXRl
c0Zyb21FbGVtZW50IGluc3RlYWQgb2YKKyAgICAgICAgY2xlYXJBdHRyaWJ1dGVzIGhlcmUuCisg
ICAgICAgIChXZWJDb3JlOjpOYW1lZEF0dHJNYXA6OmNsZWFyQXR0cmlidXRlcyk6IENhbGwgZGV0
YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50IGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpOYW1lZEF0
dHJNYXA6OmRldGFjaEZyb21FbGVtZW50KTogQ2FsbCBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1l
bnQgaW5zdGVhZCBvZgorICAgICAgICBjbGVhckF0dHJpYnV0ZXMuIFdlIGRvbid0IG5lZWQgdG8g
Y2xlYXIgdGhlIGF0dHJpYnV0ZXMgYXJyYXkganVzdCBiZWNhdXNlIHRoZSBlbGVtZW50IGlzCisg
ICAgICAgIGdvaW5nIGF3YXksIHNvIGRvbid0LgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRBdHRy
TWFwOjp2aXJ0dWFsTGVuZ3RoKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFw
Lmg6IE1hZGUgYWxsIHRoZSB2aXJ0dWFsIGZ1bmN0aW9ucyBpbmhlcml0ZWQgZnJvbSBOYW1lZE5v
ZGVNYXAgYmUgcHJpdmF0ZS4KKyAgICAgICAgVGhlc2UgYXJlIGFsbCB1bm5lY2Vzc2FyaWx5IGlu
ZWZmaWNpZW50IGZvciB1c2Ugb3V0c2lkZSB0aGUgRE9NLiBDaGFuZ2VkIGxlbmd0aCB0byBiZSBh
CisgICAgICAgIG5vbi12aXJ0dWFsIGZ1bmN0aW9uLiBUaGlzIHdhcyBhIGZhaXJseSBob3QgZnVu
Y3Rpb24uIFJlcGxhY2VkIHRoZSByZXNlcnZlQ2FwYWNpdHkgZnVuY3Rpb24KKyAgICAgICAgd2l0
aCBhIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkgZnVuY3Rpb24uCisKKyAgICAgICAgKiBkb20vTmFt
ZWRNYXBwZWRBdHRyTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkTWFwcGVkQXR0ck1h
cDo6c2V0Q2xhc3MpOiBDaGFuZ2VkIHRvIHVzZSBlbGVtZW50KCkgZnVuY3Rpb24gbm93IHRoYXQg
dGhlCisgICAgICAgIG1fZWxlbWVudCBkYXRhIG1lbWJlciBpcyBwcml2YXRlLgorCisgICAgICAg
ICogZG9tL05hbWVkTWFwcGVkQXR0ck1hcC5oOiBNYWRlIGEgZmV3IGZ1bmN0aW9ucyBwcml2YXRl
LiBNYWRlIHRoZQorICAgICAgICBoYXNNYXBwZWRBdHRyaWJ1dGVzIGZ1bmN0aW9uIG5vbi12aXJ0
dWFsLgorCisgICAgICAgICogZG9tL05hbWVkTm9kZU1hcC5oOiBNYWRlIGxlbmd0aCBhIG5vbi12
aXJ0dWFsIGlubGluZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGEgdmlydHVhbAorICAgICAgICBmdW5j
dGlvbiwgbmFtZSB2aXJ0dWFsTGVuZ3RoLiBUaGlzIGxldHMgTmFtZWRBdHRyTWFwOjpsZW5ndGgg
YmUgYSBub24tdmlydHVhbCBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KTogUmVtb3ZlZCBjYWxs
IHRvIGluc2VydGVkSW50b1RyZWUsIHNpbmNlIGl0J3MKKyAgICAgICAgb25seSBub24tZW1wdHkg
aW4gc3ViY2xhc3NlcyBvZiBDb250YWluZXJOb2RlLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6
cmVtb3ZlZEZyb21Eb2N1bWVudCk6IERpdHRvLiBBbHNvIHJlbW92ZWQgc2V0Q1NTVGFyZ2V0LiBT
aW5jZSBhIENTUworICAgICAgICB0YXJnZXQgaGFzIHRvIGJlIGFuIEVsZW1lbnQsIHRoaXMgY2Fu
IGJlIG1vdmVkIGRvd24gdG8gQ29udGFpbmVyTm9kZSAob3IgaXQgY291bGQgYmUKKyAgICAgICAg
bW92ZWQgZG93biB0byBFbGVtZW50IGZvciB0aGF0IG1hdHRlcikuCisKKyAgICAgICAgKiBkb20v
UXVhbGlmaWVkTmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpRdWFsaWZpZWROYW1lOjpRdWFs
aWZpZWROYW1lKTogUmVtb3ZlZCBkb3VibGUgaW5pdGlhbGl6YXRpb24gb2YgbV9pbXBsLgorCisg
ICAgICAgICogZG9tL1F1YWxpZmllZE5hbWUuaDogTW92ZWQgdGhlIGRlc3RydWN0b3IsIGNvcHkg
Y29uc3RydWN0b3IsIGFzc2lnbm1lbnQgb3BlcmF0b3IsIGFuZAorICAgICAgICBzZXRQcmVmaXgg
ZnVuY3Rpb24gZGVmaW5pdGlvbnMgaW50byB0aGUgaGVhZGVyIGFuZCBtYWRlIHRoZW0gaW5saW5l
LgorCisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hhcmFjdGVySXRlcmF0b3I6OnN0cmluZyk6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5
LgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpTZWFyY2hCdWZmZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBsYWluVGV4dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6am9p
bk1hcmt1cHMpOiBEaXR0by4KKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbSk6IERpdHRvLgorCisgICAg
ICAgICogaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFy
ZWFFbGVtZW50OjptYXBNb3VzZUV2ZW50KTogVXBkYXRlZCBzaW5jZSB0aGUgc3RvcmVkIHJlZ2lv
biBpcyBub3cKKyAgICAgICAgYW4gT3duUHRyLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFF
bGVtZW50OjphY2Nlc3NLZXkpOiBVc2UgQXRvbWljU3RyaW5nLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFyZWFFbGVtZW50OjpzZXRBY2Nlc3NLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxBcmVhRWxlbWVudDo6YWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJl
YUVsZW1lbnQ6OnNldEFsdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVt
ZW50Ojpjb29yZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6
c2V0Q29vcmRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnNl
dEhyZWYpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6c2hhcGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6c2V0U2hhcGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVudDo6c2V0VGFyZ2V0KTogRGl0
dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5oOiBVc2UgQXRvbWljU3RyaW5n
IGluIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBET00gb3BlcmF0aW9ucy4KKyAgICAgICAgQ2hhbmdl
IHRoZSByZWdpb24gZGF0YSBtZW1iZXIgdG8gYmUgYW4gT3duUHRyPFBhdGg+IGluc3RlYWQgb2Yg
YSBQYXRoIHRvIG9wdGltaXplCisgICAgICAgIHRoZSBjb21tb24gY2FzZSB3aGVyZSBhbiBhcmVh
IGVsZW1lbnQgaXMgcGFyc2VkIGJ1dCBuZXZlciBoaXQtdGVzdGVkLiBUaGlzIGNvdWxkCisgICAg
ICAgIGFsc28gaGF2ZSBiZWVuIGRvbmUgYnkgY2hhbmdpbmcgdGhlIFBhdGggY2xhc3MncyBudWxs
IGNhc2UgdG8gYmUgbW9yZSBlZmZpY2llbnQsCisgICAgICAgIGJ1dCB0aGlzIHNlZW1zIGZpbmUu
CisKKyAgICAgICAgKiBodG1sL0hUTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VG9rZW46OmFkZEF0dHJpYnV0ZSk6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5LgorCisgICAg
ICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhaW5pbmdUYWJsZSk6IFVzZSBhZGRB
dHRyaWJ1dGUgaW5zdGVhZAorICAgICAgICBvZiBpbnNlcnRBdHRyaWJ1dGUuCisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRTcGFuV2l0aENsYXNzTmFtZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkTGluZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkTGlu
ayk6IERpdHRvLgorCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpnb3RvQW5jaG9yKTogVXNlIGNzc1RhcmdldCB1bmRlciBp
dHMgbmV3IG5hbWUgaW5zdGVhZAorICAgICAgICBvZiBpdHMgb2xkIG5hbWUgZ2V0Q1NTVGFyZ2V0
LgorCisgICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGFyc2V0KTogQ2hhbmdl
IGxvZ2ljIHNvIHRoYXQgd2UKKyAgICAgICAgbW92ZSB0aGUgZGF0YSBpbnRvIHRoZSBidWZmZXIg
b25seSB3aGVuIHRoZXJlJ3MgYSByZWFzb24gdG8uIElmIHdlIGhhdmUgbm8KKyAgICAgICAgcHJl
dmlvdXMgZGF0YSBhbmQgZ290IGVub3VnaCBkYXRhIGFsbCBhdCBvbmNlLCB0aGVuIGp1c3QgbG9v
ayBhdCBpdCBkaXJlY3RseS4KKworICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNh
dGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Oml0
ZW1zKTogVXNlIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkuCisgICAgICAgICogcGFnZS9TZWN1cml0
eU9yaWdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6dG9TdHJpbmcp
OiBEaXR0by4KKyAgICAgICAgKiBwYWdlL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5t
bToKKyAgICAgICAgKGNvbnZlcnRUb1ZlY3Rvcik6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1
cmdlSW5hY3RpdmVGb250RGF0YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hl
OjppbnZhbGlkYXRlKTogRGl0dG8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFdpZHRoTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoV2lkdGhNYXA6OmxvY2F0ZVBh
Z2VTbG93Q2FzZSk6IFJlZmFjdG9yZWQgZnJvbSBsb2NhdGVQYWdlLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5oOiBNYWRlIG1vc3Qgb2YgdGhpcyBjbGFzcyBp
bmxpbmUuCisgICAgICAgIENoYW5nZWQgbV9wYWdlcyB0byB1c2UgT3duUHRyLgorCisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3Jt
RGF0YTo6ZGVlcENvcHkpOiBVc2UgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL0hUVFBIZWFkZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRU
UEhlYWRlck1hcDo6Y29weURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlUmVxdWVzdEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0QmFzZTo6Y29weURhdGEpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL21h
Yy9Gb3JtRGF0YVN0cmVhbU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmZvcm1DcmVhdGUpOiBE
aXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDogUmVtb3Zl
IGluY2x1ZGUgbm8gbG9uZ2VyIG5lZWRlZCBzaW5jZQorICAgICAgICBTdHJpbmdJbXBsLmggaW5j
bHVkZXMgaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U3RyaW5nSW1wbDo6Y3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnNT
bG93Q2FzZSk6IFJlZmFjdG9yZWQKKyAgICAgICAgZnJvbSBjcmVhdGVTdHJpcHBpbmdOdWxsQ2hh
cmFjdGVycy4KKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaDogTW92ZWQgdGhl
IGRlZmluaXRpb24gb2YKKyAgICAgICAgY3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnMgaGVy
ZSBhbmQgbWFkZSBpdCBpbmxpbmUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Zmlyc3RMaW5lU3R5bGVTbG93
Q2FzZSk6IFJlZmFjdG9yZWQgZnJvbQorICAgICAgICBmaXJzdExpbmVTdHlsZS4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDogTW92ZWQgdGhlIGRlZmluaXRpb24gb2YgdGhl
IGZpcnN0TGluZVN0eWxlCisgICAgICAgIGZ1bmN0aW9uIGhlcmUgYW5kIG1hZGUgaXQgaW5saW5l
LiBNb3ZlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUKKyAgICAgICAgZG9jdW1lbnRCZWluZ0Rlc3Ry
b3llZCBmdW5jdGlvbiBoZXJlIGFuZCBtYWRlIGl0IGlubGluZS4KKworICAgICAgICAqIHN2Zy9T
VkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldENU
TSk6IFVzZSBnZXRBdHRyaWJ1dGVJdGVtIGluc3RlYWQgb2YKKyAgICAgICAgZ2V0TmFtZWRJdGVt
IGhlcmUgc2luY2UgaXQgYWNjb21wbGlzaGVzIHRoZSBzYW1lIHRoaW5nIGJ1dCBpcyBtb3JlIGVm
ZmljaWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNUTSk6
IERpdHRvLgorICAgICAgICAqIHN2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmdldFByZXNlbnRhdGlvbkF0dHJpYnV0ZSk6IERpdHRv
LgorCisgICAgICAgICogeG1sL1hQYXRoRnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlhQYXRoOjpGdW5MYW5nOjpldmFsdWF0ZSk6IFVzZSBnZXRBdHRyaWJ1dGVJdGVtIGluc3RlYWQg
b2YKKyAgICAgICAgZ2V0TmFtZWRJdGVtTlMuCisKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojpzb3J0KTogVXNlIHJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkuCisKKyAgICAgICAgKiB4bWwvWFBhdGhTdGVwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlhQYXRoOjpTdGVwOjpub2Rlc0luQXhpcyk6IFVzZSBhdHRyaWJ1dGVJdGVt
IGluc3RlYWQgb2YgaXRlbSBoZXJlLgorCiAyMDA5LTAxLTMxICBEYW4gQmVybnN0ZWluICA8bWl0
ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20u
Y3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURl
Y2xhcmF0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBzdGF0
aWMgU3RyaW5nIGNzc1Byb3BlcnR5TmFtZShjb25zdCBJZGVuCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKIAogICAgIFZlY3RvcjxVQ2hhcj4gbmFtZTsKLSAgICBuYW1lLnJlc2VydmVDYXBhY2l0
eShsZW5ndGgpOworICAgIG5hbWUucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwogCiAg
ICAgdW5zaWduZWQgaSA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw3IEBAIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpDU1NNdXRhYmxlU3QKICAgICAsIG1faXRlcmF0b3JD
b3VudCgwKQogI2VuZGlmCiB7Ci0gICAgbV9wcm9wZXJ0aWVzLnJlc2VydmVDYXBhY2l0eShudW1Q
cm9wZXJ0aWVzKTsKKyAgICBtX3Byb3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1Q
cm9wZXJ0aWVzKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkg
ewogICAgICAgICBBU1NFUlQocHJvcGVydGllc1tpXSk7CiAgICAgICAgIG1fcHJvcGVydGllcy5h
cHBlbmQoKnByb3BlcnRpZXNbaV0pOwpAQCAtNzAyLDcgKzcwMiw3IEBAIHZvaWQgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVAKICAgICAgICAgdG9SZW1vdmUuYWRkKHNldFtpXSk7
CiAgICAgCiAgICAgVmVjdG9yPENTU1Byb3BlcnR5PiBuZXdQcm9wZXJ0aWVzOwotICAgIG5ld1By
b3BlcnRpZXMucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvcGVydGllcy5zaXplKCkpOworICAgIG5ld1By
b3BlcnRpZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX3Byb3BlcnRpZXMuc2l6ZSgpKTsKICAg
ICAKICAgICB1bnNpZ25lZCBzaXplID0gbV9wcm9wZXJ0aWVzLnNpemUoKTsKICAgICBmb3IgKHVu
c2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWUuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDcgKzc2OCw3IEBAIFN0cmluZyBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3NzVGV4dCgpIGNvbnMKIAogICAgICAgICAgICAgUmVjdCogcmVjdFZhbCA9IGdl
dFJlY3RWYWx1ZSgpOwogICAgICAgICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAg
ICAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RQ
YXJlbik7CiAKICAgICAgICAgICAgIGFwcGVuZChyZXN1bHQsIHJlY3RWYWwtPnRvcCgpLT5jc3NU
ZXh0KCkpOwpAQCAtNzk3LDcgKzc5Nyw3IEBAIFN0cmluZyBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Nz
VGV4dCgpIGNvbnMKICAgICAgICAgICAgIENvbG9yIGNvbG9yKHJnYkNvbG9yKTsKIAogICAgICAg
ICAgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7Ci0gICAgICAgICAgICByZXN1bHQucmVzZXJ2ZUNh
cGFjaXR5KDMyKTsKKyAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMy
KTsKICAgICAgICAgICAgIGlmIChjb2xvci5oYXNBbHBoYSgpKQogICAgICAgICAgICAgICAgIGFw
cGVuZChyZXN1bHQsIHJnYmFQYXJlbik7CiAgICAgICAgICAgICBlbHNlCkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2Nzcy9D
U1NTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBA
IHZvaWQgQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlmZihDU1NNdXRhYmwKIFBhc3NSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IENTU1N0eWxlRGVjbGFyYXRpb246OmNvcHlQcm9wZXJ0
aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QKIHsKICAgICBW
ZWN0b3I8Q1NTUHJvcGVydHk+IGxpc3Q7Ci0gICAgbGlzdC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3Ro
KTsKKyAgICBsaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKICAgICB1bnNpZ25l
ZCB2YXJpYWJsZURlcGVuZGVudFZhbHVlQ291bnQgPSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0g
Z2V0UHJvcGVydHlDU1NWYWx1ZShzZXRbaV0pOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc1Myw3ICs3NTMsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
OnNvcnRNYXRjaGVkUnVsZXMoCiAgICAgLy8gV2UgaGF2ZSB0byBtZXJnZSBzb3J0LiAgRW5zdXJl
IG91ciBtZXJnZSBidWZmZXIgaXMgYmlnIGVub3VnaCB0byBob2xkCiAgICAgLy8gYWxsIHRoZSBp
dGVtcy4KICAgICBWZWN0b3I8Q1NTUnVsZURhdGEqPiBydWxlc01lcmdlQnVmZmVyOwotICAgIHJ1
bGVzTWVyZ2VCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGVuZCAtIHN0YXJ0KTsgCisgICAgcnVsZXNN
ZXJnZUJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGVuZCAtIHN0YXJ0KTsgCiAKICAgICB1
bnNpZ25lZCBpMSA9IHN0YXJ0OwogICAgIHVuc2lnbmVkIGkyID0gbWlkOwpAQCAtOTMzLDcgKzkz
Myw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAg
ICAgIChzLT5ob3ZlcmVkKCkgPT0gbV9lbGVtZW50LT5ob3ZlcmVkKCkpICYmCiAgICAgICAgICAg
ICAocy0+YWN0aXZlKCkgPT0gbV9lbGVtZW50LT5hY3RpdmUoKSkgJiYKICAgICAgICAgICAgIChz
LT5mb2N1c2VkKCkgPT0gbV9lbGVtZW50LT5mb2N1c2VkKCkpICYmCi0gICAgICAgICAgICAocyAh
PSBzLT5kb2N1bWVudCgpLT5nZXRDU1NUYXJnZXQoKSAmJiBtX2VsZW1lbnQgIT0gbV9lbGVtZW50
LT5kb2N1bWVudCgpLT5nZXRDU1NUYXJnZXQoKSkgJiYKKyAgICAgICAgICAgIChzICE9IHMtPmRv
Y3VtZW50KCktPmNzc1RhcmdldCgpICYmIG1fZWxlbWVudCAhPSBtX2VsZW1lbnQtPmRvY3VtZW50
KCktPmNzc1RhcmdldCgpKSAmJgogICAgICAgICAgICAgKHMtPmdldEF0dHJpYnV0ZSh0eXBlQXR0
cikgPT0gbV9lbGVtZW50LT5nZXRBdHRyaWJ1dGUodHlwZUF0dHIpKSAmJgogICAgICAgICAgICAg
KHMtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpID09IG1fZWxlbWVudC0+Z2V0QXR0
cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikpICYmCiAgICAgICAgICAgICAocy0+Z2V0QXR0cmli
dXRlKGxhbmdBdHRyKSA9PSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZShsYW5nQXR0cikpICYmCkBA
IC0yMjA5LDcgKzIyMDksNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tl
cjo6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9UYXJnZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUgPT0g
ZS0+ZG9jdW1lbnQoKS0+Z2V0Q1NTVGFyZ2V0KCkpCisgICAgICAgICAgICAgICAgaWYgKGUgPT0g
ZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQW55TGluazoKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiA0MDQ3
MSkKKysrIFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
LDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNDYsMTMgKzQ2LDYgQEAgc3RhdGljIE5vZGVDYWxsYmFja1F1ZXVl
KiBzX3Bvc3RBdHRhY2hDYQogCiBzdGF0aWMgc2l6ZV90IHNfYXR0YWNoRGVwdGggPSAwOwogCi1D
b250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50
KQotICAgIDogRXZlbnRUYXJnZXROb2RlKGRvYywgaXNFbGVtZW50LCB0cnVlKQotICAgICwgbV9m
aXJzdENoaWxkKDApCi0gICAgLCBtX2xhc3RDaGlsZCgwKQotewotfQotCiB2b2lkIENvbnRhaW5l
ck5vZGU6OnJlbW92ZUFsbENoaWxkcmVuKCkKIHsKICAgICByZW1vdmVBbGxDaGlsZHJlbkluQ29u
dGFpbmVyPE5vZGUsIENvbnRhaW5lck5vZGU+KHRoaXMpOwpAQCAtNTk0LDM0ICs1ODcsMzYgQEAg
dm9pZCBDb250YWluZXJOb2RlOjpkZXRhY2goKQogCiB2b2lkIENvbnRhaW5lck5vZGU6Omluc2Vy
dGVkSW50b0RvY3VtZW50KCkKIHsKLSAgICBFdmVudFRhcmdldE5vZGU6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCk7Ci0gICAgZm9yIChOb2RlICpjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgc2V0SW5Eb2N1bWVudCh0cnVlKTsKKyAg
ICBpbnNlcnRlZEludG9UcmVlKGZhbHNlKTsKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9maXJz
dENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY2hp
bGQtPmluc2VydGVkSW50b0RvY3VtZW50KCk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVt
b3ZlZEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVkRnJvbURv
Y3VtZW50KCk7Ci0gICAgZm9yIChOb2RlICpjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgaWYgKGRvY3VtZW50KCktPmNzc1Rhcmdl
dCgpID09IHRoaXMpCisgICAgICAgIGRvY3VtZW50KCktPnNldENTU1RhcmdldCgwKTsKKyAgICBz
ZXRJbkRvY3VtZW50KGZhbHNlKTsKKyAgICByZW1vdmVkRnJvbVRyZWUoZmFsc2UpOworICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQogICAgICAgICBjaGlsZC0+cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogfQogCiB2
b2lkIENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogewotICAgIEV2
ZW50VGFyZ2V0Tm9kZTo6aW5zZXJ0ZWRJbnRvVHJlZShkZWVwKTsKLSAgICBpZiAoZGVlcCkgewot
ICAgICAgICBmb3IgKE5vZGUgKmNoaWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGNoaWxkLT5pbnNlcnRlZEludG9UcmVl
KGRlZXApOwotICAgIH0KKyAgICBpZiAoIWRlZXApCisgICAgICAgIHJldHVybjsKKyAgICBmb3Ig
KE5vZGUqIGNoaWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKKyAgICAgICAgY2hpbGQtPmluc2VydGVkSW50b1RyZWUodHJ1ZSk7CiB9CiAKIHZv
aWQgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKIHsKLSAgICBFdmVu
dFRhcmdldE5vZGU6OnJlbW92ZWRGcm9tVHJlZShkZWVwKTsKLSAgICBpZiAoZGVlcCkgewotICAg
ICAgICBmb3IgKE5vZGUgKmNoaWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgICAgIGNoaWxkLT5yZW1vdmVkRnJvbVRyZWUoZGVl
cCk7Ci0gICAgfQorICAgIGlmICghZGVlcCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKQorICAgICAgICBjaGlsZC0+cmVtb3ZlZEZyb21UcmVlKHRydWUpOwogfQogCiB2b2lkIENv
bnRhaW5lck5vZGU6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSog
YmVmb3JlQ2hhbmdlLCBOb2RlKiBhZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKSW5k
ZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Db250YWluZXJOb2RlLmgJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9kb20vQ29udGFp
bmVyTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5NiwxNCBAQCBwcml2YXRlOgogICAg
IE5vZGUqIG1fZmlyc3RDaGlsZDsKICAgICBOb2RlKiBtX2xhc3RDaGlsZDsKIH07Ci0gICAgCisK
K2lubGluZSBDb250YWluZXJOb2RlOjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2N1bWVudCwg
Ym9vbCBpc0VsZW1lbnQpCisgICAgOiBFdmVudFRhcmdldE5vZGUoZG9jdW1lbnQsIGlzRWxlbWVu
dCwgdHJ1ZSkKKyAgICAsIG1fZmlyc3RDaGlsZCgwKQorICAgICwgbV9sYXN0Q2hpbGQoMCkKK3sK
K30KKwogaW5saW5lIHVuc2lnbmVkIE5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZUNvdW50KCkgY29u
c3QKIHsKICAgICBBU1NFUlQoaXNDb250YWluZXJOb2RlKCkpOwpJbmRleDogV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2
aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAo
YXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuIChodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDggRGF2aWQgTGV2aW4gKGxldmluQGNocm9taXVtLm9yZykKICAqCkBAIC0xMzM4LDEx
ICsxMzM4LDkgQEAgdm9pZCBEb2N1bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNGcgogICAg
ICAgICBtX3dpbmRvd0V2ZW50TGlzdGVuZXJzW2ldLT5zZXRSZW1vdmVkKHRydWUpOwogICAgIG1f
d2luZG93RXZlbnRMaXN0ZW5lcnMuY2xlYXIoKTsKICAgICByZW1vdmVBbGxEaXNjb25uZWN0ZWRO
b2RlRXZlbnRMaXN0ZW5lcnMoKTsKLSAgICBmb3IgKE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+
dHJhdmVyc2VOZXh0Tm9kZSgpKSB7Ci0gICAgICAgIGlmICghbi0+aXNFdmVudFRhcmdldE5vZGUo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4p
LT5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwotICAgIH0KKyAgICBFbGVtZW50KiBkb2N1bWVu
dEVsZW1lbnQgPSB0aGlzLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUg
PSBkb2N1bWVudEVsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGRv
Y3VtZW50RWxlbWVudCkpCisgICAgICAgIHRvRXZlbnRUYXJnZXROb2RlKG5vZGUpLT5yZW1vdmVB
bGxFdmVudExpc3RlbmVycygpOwogfQogCiB2b2lkIERvY3VtZW50OjpyZWdpc3RlckRpc2Nvbm5l
Y3RlZE5vZGVXaXRoRXZlbnRMaXN0ZW5lcnMoTm9kZSogbm9kZSkKQEAgLTI1NTcsNyArMjU1NSw3
IEBAIFNldEZvY3VzZWROb2RlRG9uZToKICAgICByZXR1cm4gIWZvY3VzQ2hhbmdlQmxvY2tlZDsK
ICAgfQogICAKLXZvaWQgRG9jdW1lbnQ6OnNldENTU1RhcmdldChOb2RlKiBuKQordm9pZCBEb2N1
bWVudDo6c2V0Q1NTVGFyZ2V0KEVsZW1lbnQqIG4pCiB7CiAgICAgaWYgKG1fY3NzVGFyZ2V0KQog
ICAgICAgICBtX2Nzc1RhcmdldC0+c2V0Q2hhbmdlZCgpOwpAQCAtMjU2NiwxMSArMjU2NCw2IEBA
IHZvaWQgRG9jdW1lbnQ6OnNldENTU1RhcmdldChOb2RlKiBuKQogICAgICAgICBuLT5zZXRDaGFu
Z2VkKCk7CiB9CiAKLU5vZGUqIERvY3VtZW50OjpnZXRDU1NUYXJnZXQoKSBjb25zdAotewotICAg
IHJldHVybiBtX2Nzc1RhcmdldDsKLX0KLQogdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJh
dG9yKE5vZGVJdGVyYXRvciAqbmkpCiB7CiAgICAgbV9ub2RlSXRlcmF0b3JzLmFkZChuaSk7CkBA
IC0zOTExLDcgKzM5MDQsNyBAQCB2b2lkIERvY3VtZW50OjpmaW5pc2hlZFBhcnNpbmcoKQogVmVj
dG9yPFN0cmluZz4gRG9jdW1lbnQ6OmZvcm1FbGVtZW50c1N0YXRlKCkgY29uc3QKIHsKICAgICBW
ZWN0b3I8U3RyaW5nPiBzdGF0ZVZlY3RvcjsKLSAgICBzdGF0ZVZlY3Rvci5yZXNlcnZlQ2FwYWNp
dHkobV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogMyk7CisgICAgc3RhdGVWZWN0b3Iu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Zvcm1FbGVtZW50c1dpdGhTdGF0ZS5zaXplKCkgKiAz
KTsKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSo+
Ojpjb25zdF9pdGVyYXRvciBJdGVyYXRvcjsKICAgICBJdGVyYXRvciBlbmQgPSBtX2Zvcm1FbGVt
ZW50c1dpdGhTdGF0ZS5lbmQoKTsKICAgICBmb3IgKEl0ZXJhdG9yIGl0ID0gbV9mb3JtRWxlbWVu
dHNXaXRoU3RhdGUuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlz
aW9uIDQwNDcxKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
Myw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3
ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01
MzMsOCArNTMzLDggQEAgcHVibGljOgogICAgIHZvaWQgYWN0aXZlQ2hhaW5Ob2RlRGV0YWNoZWQo
Tm9kZSopOwogCiAgICAgLy8gVXBkYXRlcyBmb3IgOnRhcmdldCAoQ1NTMyBzZWxlY3RvcikuCi0g
ICAgdm9pZCBzZXRDU1NUYXJnZXQoTm9kZSopOwotICAgIE5vZGUqIGdldENTU1RhcmdldCgpIGNv
bnN0OworICAgIHZvaWQgc2V0Q1NTVGFyZ2V0KEVsZW1lbnQqKTsKKyAgICBFbGVtZW50KiBjc3NU
YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX2Nzc1RhcmdldDsgfQogICAgIAogICAgIHZvaWQgc2V0
RG9jdW1lbnRDaGFuZ2VkKGJvb2wpOwogCkBAIC05MzUsNyArOTM1LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFRpbWVyPERvY3VtZW50PiBtX3VwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyOwogCi0gICAg
Tm9kZSogbV9jc3NUYXJnZXQ7CisgICAgRWxlbWVudCogbV9jc3NUYXJnZXQ7CiAgICAgCiAgICAg
Ym9vbCBtX3Byb2Nlc3NpbmdMb2FkRXZlbnQ7CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwpJbmRl
eDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvZG9t
L0V2ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA3
LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKQEAgLTYxLDExICs2MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHN0YXRpYyBI
YXNoU2V0PEV2ZW50VGFyZ2V0Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNr
cyA9IDA7IAogCi1FdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCogZG9j
LCBib29sIGlzRWxlbWVudCwgYm9vbCBpc0NvbnRhaW5lciwgYm9vbCBpc1RleHQpCi0gICAgOiBO
b2RlKGRvYywgaXNFbGVtZW50LCBpc0NvbnRhaW5lciwgaXNUZXh0KQotewotfQotCiBFdmVudFRh
cmdldE5vZGU6On5FdmVudFRhcmdldE5vZGUoKQogewogICAgIGlmICghZXZlbnRMaXN0ZW5lcnMo
KS5pc0VtcHR5KCkgJiYgIWluRG9jdW1lbnQoKSkKQEAgLTE5MSwxMCArMTg2LDkgQEAgdm9pZCBF
dmVudFRhcmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZQogICAgIH0KIH0KIAotdm9pZCBFdmVu
dFRhcmdldE5vZGU6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkKK3ZvaWQgRXZlbnRUYXJnZXRO
b2RlOjpyZW1vdmVBbGxFdmVudExpc3RlbmVyc1Nsb3dDYXNlKCkKIHsKLSAgICBpZiAoIWhhc1Jh
cmVEYXRhKCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiAK
ICAgICBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzID0gcmFyZURhdGEo
KS0+bGlzdGVuZXJzKCk7CiAgICAgaWYgKCFsaXN0ZW5lcnMpCkluZGV4OiBXZWJDb3JlL2RvbS9F
dmVudFRhcmdldE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5v
ZGUuaAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxl
ciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDksNyArNDksNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVy
ZSk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwogICAgIHZp
cnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOworICAgIHZvaWQgcmVtb3Zl
QWxsRXZlbnRMaXN0ZW5lcnMoKSB7IGlmIChoYXNSYXJlRGF0YSgpKSByZW1vdmVBbGxFdmVudExp
c3RlbmVyc1Nsb3dDYXNlKCk7IH0KIAogICAgIHZvaWQgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZv
clR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4pOwogICAgIHZvaWQgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1
dGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEF0dHJpYnV0ZSopOwpAQCAtMTg3LDE4
ICsxODcsNDAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRU
YXJnZXQoKSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7
IGRlcmVmKCk7IH0KKworICAgIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNTbG93Q2FzZSgp
OwogfTsKIAotaW5saW5lIEV2ZW50VGFyZ2V0Tm9kZSogRXZlbnRUYXJnZXROb2RlQ2FzdChOb2Rl
KiBuKSAKK2lubGluZSBFdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgaXNFbGVtZW50LCBib29sIGlzQ29udGFpbmVyLCBib29sIGlzVGV4dCkK
KyAgICA6IE5vZGUoZG9jdW1lbnQsIGlzRWxlbWVudCwgaXNDb250YWluZXIsIGlzVGV4dCkKK3sK
K30KKworaW5saW5lIEV2ZW50VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUoTm9kZSogbm9k
ZSkKK3sgCisgICAgQVNTRVJUKG5vZGUtPmlzRXZlbnRUYXJnZXROb2RlKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxFdmVudFRhcmdldE5vZGUqPihub2RlKTsKK30KKworaW5saW5lIGNvbnN0
IEV2ZW50VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUoY29uc3QgTm9kZSogbm9kZSkKK3sg
CisgICAgQVNTRVJUKG5vZGUtPmlzRXZlbnRUYXJnZXROb2RlKCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBFdmVudFRhcmdldE5vZGUqPihub2RlKTsgCit9CisKKy8vIFRoaXMgd2ls
bCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9FdmVudFRh
cmdldE5vZGUoY29uc3QgRXZlbnRUYXJnZXROb2RlKik7CisKKy8vIERlcHJlY2F0ZWQgbmFtZS4g
UmVtb3ZlIGNhbGxlcnMgYW5kIHN3aXRjaCB0byB0b0V2ZW50VGFyZ2V0Tm9kZS4KK2lubGluZSBF
dmVudFRhcmdldE5vZGUqIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoTm9kZSogbm9kZSkgCiB7IAotICAg
IEFTU0VSVChuLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RXZlbnRUYXJnZXROb2RlKj4obik7IAorICAgIHJldHVybiB0b0V2ZW50VGFyZ2V0Tm9kZShub2Rl
KTsgCiB9CiAKLWlubGluZSBjb25zdCBFdmVudFRhcmdldE5vZGUqIEV2ZW50VGFyZ2V0Tm9kZUNh
c3QoY29uc3QgTm9kZSogbikgCisvLyBEZXByZWNhdGVkIG5hbWUuIFJlbW92ZSBjYWxsZXJzIGFu
ZCBzd2l0Y2ggdG8gdG9FdmVudFRhcmdldE5vZGUuCitpbmxpbmUgY29uc3QgRXZlbnRUYXJnZXRO
b2RlKiBFdmVudFRhcmdldE5vZGVDYXN0KGNvbnN0IE5vZGUqIG5vZGUpCiB7IAotICAgIEFTU0VS
VChuLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
RXZlbnRUYXJnZXROb2RlKj4obik7IAorICAgIHJldHVybiB0b0V2ZW50VGFyZ2V0Tm9kZShub2Rl
KTsgCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVk
QXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAko
cmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZp
c3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVs
bGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3Jn
KQogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKQEAgLTM5LDkgKzM5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRJZ25vcmVBdHRyaWJ1dGUKICAgICByZXR1cm4gZSAmJiBlLT5kb2N1bWVudCgpLT5pc0hUTUxE
b2N1bWVudCgpICYmIGUtPmlzSFRNTEVsZW1lbnQoKTsKIH0KIAoraW5saW5lIHZvaWQgTmFtZWRB
dHRyTWFwOjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKQoreworICAgIHNpemVfdCBzaXpl
ID0gbV9hdHRyaWJ1dGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
IGkrKykgeworICAgICAgICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0cmlidXRlc1tpXS0+YXR0cigp
KQorICAgICAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKKyAgICB9Cit9CisKIE5hbWVkQXR0
ck1hcDo6fk5hbWVkQXR0ck1hcCgpCiB7Ci0gICAgTmFtZWRBdHRyTWFwOjpjbGVhckF0dHJpYnV0
ZXMoKTsgLy8gdmlydHVhbCBmdW5jdGlvbiwgcXVhbGlmeSB0byBiZSBleHBsaWNpdCBhbmQgc2xp
Z2h0bHkgZmFzdGVyCisgICAgZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KCk7CiB9CiAKIGJv
b2wgTmFtZWRBdHRyTWFwOjppc01hcHBlZEF0dHJpYnV0ZU1hcCgpIGNvbnN0CkBAIC0xOTAsMTEg
KzE5OSw3IEBAIEF0dHJpYnV0ZSogTmFtZWRBdHRyTWFwOjpnZXRBdHRyaWJ1dGVJdGUKIAogdm9p
ZCBOYW1lZEF0dHJNYXA6OmNsZWFyQXR0cmlidXRlcygpCiB7Ci0gICAgdW5zaWduZWQgbGVuID0g
bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAg
ICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0cmlidXRlc1tpXS0+YXR0cigpKQotICAgICAgICAgICAg
YXR0ci0+bV9lbGVtZW50ID0gMDsKLQorICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgp
OwogICAgIG1fYXR0cmlidXRlcy5jbGVhcigpOwogfQogCkBAIC0yMDMsNyArMjA4LDcgQEAgdm9p
ZCBOYW1lZEF0dHJNYXA6OmRldGFjaEZyb21FbGVtZW50KCkKICAgICAvLyB3ZSBhbGxvdyBhIE5h
bWVkQXR0ck1hcCB3L28gYW4gZWxlbWVudCBpbiBjYXNlIHNvbWVvbmUgc3RpbGwgaGFzIGEgcmVm
ZXJlbmNlCiAgICAgLy8gdG8gaWYgYWZ0ZXIgdGhlIGVsZW1lbnQgZ2V0cyBkZWxldGVkIC0gYnV0
IHRoZSBtYXAgaXMgbm93IGludmFsaWQKICAgICBtX2VsZW1lbnQgPSAwOwotICAgIGNsZWFyQXR0
cmlidXRlcygpOworICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwogfQogCiB2b2lk
IE5hbWVkQXR0ck1hcDo6c2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZEF0dHJNYXAmIG90aGVyKQpA
QCAtMzEwLDQgKzMxNSw5IEBAIGJvb2wgTmFtZWRBdHRyTWFwOjptYXBzRXF1aXZhbGVudChjb25z
dCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc2l6ZV90IE5hbWVkQXR0ck1hcDo6dmlydHVhbExl
bmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxlbmd0aCgpOworfQorCiB9CkluZGV4OiBXZWJD
b3JlL2RvbS9OYW1lZEF0dHJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZEF0
dHJNYXAuaAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBl
dGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTI5LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgog
I2luY2x1ZGUgIk5hbWVkTm9kZU1hcC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZmRlZiBfX09CSkNfXwpAQCAtNTAsMjggKzQ3LDEyIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZEF0dHJNYXAmKTsK
IAotICAgIC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTmFtZWROb2RlTWFwCi0KLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxOb2RlPiBnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29u
c3QgU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2Rl
PiByZW1vdmVOYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxOb2RlPiBnZXROYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5v
ZGU+IHNldE5hbWVkSXRlbShOb2RlKiBhcmcsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxOb2RlPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBzaXpl
X3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLnNpemUoKTsgfQotCi0gICAg
Ly8gT3RoZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIEF0dHJpYnV0ZSogYXR0cmli
dXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4
XS5nZXQoKTsgfQotICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lKSBjb25zdDsKLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0Owot
ICAgIAorICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CisKICAgICB2b2lkIHNocmlua1RvTGVuZ3RoKCkgeyBtX2F0dHJpYnV0ZXMuc2hy
aW5rQ2FwYWNpdHkobGVuZ3RoKCkpOyB9Ci0gICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWdu
ZWQgY2FwYWNpdHkpIHsgbV9hdHRyaWJ1dGVzLnJlc2VydmVDYXBhY2l0eShjYXBhY2l0eSk7IH0K
KyAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpIHsgbV9h
dHRyaWJ1dGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2FwYWNpdHkpOyB9CiAKICAgICAvLyB1
c2VkIGR1cmluZyBwYXJzaW5nOiBvbmx5IGluc2VydHMgaWYgbm90IGFscmVhZHkgdGhlcmUKICAg
ICAvLyBubyBlcnJvciBjaGVja2luZyEKQEAgLTgzLDIwICs2NCwzOCBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgdmlydHVhbCBib29sIGlzTWFwcGVkQXR0cmlidXRlTWFwKCkgY29uc3Q7Ci0KLSAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQotICAgIHZv
aWQgc2V0SUQoY29uc3QgQXRvbWljU3RyaW5nJiBfaWQpIHsgbV9pZCA9IF9pZDsgfQogICAgIAor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAg
dm9pZCBzZXRJRChjb25zdCBBdG9taWNTdHJpbmcmIG5ld0lkKSB7IG1faWQgPSBuZXdJZDsgfQor
CiAgICAgYm9vbCBtYXBzRXF1aXZhbGVudChjb25zdCBOYW1lZEF0dHJNYXAqIG90aGVyTWFwKSBj
b25zdDsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgaW50ZXJuYWwsIGFuZCBkbyBubyBl
cnJvciBjaGVja2luZy4KKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgZG8gbm8gZXJyb3IgY2hlY2tp
bmcuCiAgICAgdm9pZCBhZGRBdHRyaWJ1dGUoUGFzc1JlZlB0cjxBdHRyaWJ1dGU+KTsKLSAgICB2
b2lkIHJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKTsKKyAgICB2b2lk
IHJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJik7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7CiAKKyAgICBFbGVtZW50KiBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50OyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBkZXRh
Y2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKTsKICAgICB2b2lkIGRldGFjaEZyb21FbGVtZW50KCk7
CisgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKKworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxOb2RlPiBnZXROYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGdldE5h
bWVkSXRlbU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2Fs
TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRl
bU5TKGNvbnN0IFN0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSwg
RXhjZXB0aW9uQ29kZSYpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGdldE5hbWVk
SXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gc2V0TmFtZWRJdGVt
KE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4g
aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3QgdmlydHVhbExl
bmd0aCgpIGNvbnN0OwogCiAgICAgRWxlbWVudCogbV9lbGVtZW50OwogICAgIFZlY3RvcjxSZWZQ
dHI8QXR0cmlidXRlPiA+IG1fYXR0cmlidXRlczsKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkTWFw
cGVkQXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRNYXBwZWRBdHRy
TWFwLmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZE1hcHBlZEF0dHJN
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMiArNzUsMTIgQEAgYm9vbCBOYW1lZE1hcHBl
ZEF0dHJNYXA6Om1hcHNFcXVpdmFsZW50KAogCiB2b2lkIE5hbWVkTWFwcGVkQXR0ck1hcDo6c2V0
Q2xhc3MoY29uc3QgU3RyaW5nJiBjbGFzc1N0cikgCiB7IAotICAgIGlmICghbV9lbGVtZW50LT5o
YXNDbGFzcygpKSB7IAorICAgIGlmICghZWxlbWVudCgpLT5oYXNDbGFzcygpKSB7IAogICAgICAg
ICBtX2NsYXNzTmFtZXMuY2xlYXIoKTsgCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X2NsYXNzTmFtZXMuc2V0KGNsYXNzU3RyLCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmluQ29tcGF0
TW9kZSgpKTsgCisgICAgbV9jbGFzc05hbWVzLnNldChjbGFzc1N0ciwgZWxlbWVudCgpLT5kb2N1
bWVudCgpLT5pbkNvbXBhdE1vZGUoKSk7IAogfQogCiB9CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1l
ZE1hcHBlZEF0dHJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZE1hcHBlZEF0
dHJNYXAuaAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZE1hcHBlZEF0dHJN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsg
TXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA3IERhdmlkIFNt
aXRoIChjYXRmaXNoLm1hbkBnbWFpbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjcsMzIgKzI3LDMz
IEBACiAjZGVmaW5lIE5hbWVkTWFwcGVkQXR0ck1hcF9oCiAKICNpbmNsdWRlICJDbGFzc05hbWVz
LmgiCi0jaW5jbHVkZSAiTWFwcGVkQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiTWFwcGVkQXR0cmli
dXRlLmgiIC8vIFRoaXMgaGVhZGVyIGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIE5hbWVkTWFwcGVk
QXR0ck1hcCBkZWZpbml0aW9uLiBTaG91bGQgcmVtb3ZlIGl0LgogI2luY2x1ZGUgIk5hbWVkQXR0
ck1hcC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE5hbWVkTWFwcGVkQXR0ck1h
cCA6IHB1YmxpYyBOYW1lZEF0dHJNYXAgewotcHJpdmF0ZToKLSAgICBOYW1lZE1hcHBlZEF0dHJN
YXAoRWxlbWVudCogZWxlbWVudCkgOiBOYW1lZEF0dHJNYXAoZWxlbWVudCksIG1fbWFwcGVkQXR0
cmlidXRlQ291bnQoMCkgeyB9CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TmFtZWRN
YXBwZWRBdHRyTWFwPiBjcmVhdGUoRWxlbWVudCogZWxlbWVudCA9IDApIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBOYW1lZE1hcHBlZEF0dHJNYXAoZWxlbWVudCkpOyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgY2xlYXJBdHRyaWJ1dGVzKCk7Ci0gICAgdmlydHVhbCBib29sIGlzTWFwcGVkQXR0cmlidXRl
TWFwKCkgY29uc3Q7Ci0KICAgICB2b2lkIGNsZWFyQ2xhc3MoKSB7IG1fY2xhc3NOYW1lcy5jbGVh
cigpOyB9CiAgICAgdm9pZCBzZXRDbGFzcyhjb25zdCBTdHJpbmcmKTsKICAgICBjb25zdCBDbGFz
c05hbWVzJiBjbGFzc05hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9jbGFzc05hbWVzOyB9CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzTWFwcGVkQXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
cGVkQXR0cmlidXRlQ291bnQgPiAwOyB9CisgICAgYm9vbCBoYXNNYXBwZWRBdHRyaWJ1dGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXBwZWRBdHRyaWJ1dGVDb3VudCA+IDA7IH0KICAgICB2b2lkIGRl
Y2xSZW1vdmVkKCkgeyBtX21hcHBlZEF0dHJpYnV0ZUNvdW50LS07IH0KICAgICB2b2lkIGRlY2xB
ZGRlZCgpIHsgbV9tYXBwZWRBdHRyaWJ1dGVDb3VudCsrOyB9Ci0gICAgCisKICAgICBib29sIG1h
cHNFcXVpdmFsZW50KGNvbnN0IE5hbWVkTWFwcGVkQXR0ck1hcCopIGNvbnN0OwotICAgIGludCBk
ZWNsQ291bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKKyAgICBOYW1lZE1hcHBlZEF0dHJNYXAoRWxl
bWVudCogZWxlbWVudCkgOiBOYW1lZEF0dHJNYXAoZWxlbWVudCksIG1fbWFwcGVkQXR0cmlidXRl
Q291bnQoMCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBdHRyaWJ1dGVzKCk7CisgICAg
dmlydHVhbCBib29sIGlzTWFwcGVkQXR0cmlidXRlTWFwKCkgY29uc3Q7CisKKyAgICBpbnQgZGVj
bENvdW50KCkgY29uc3Q7CisKICAgICBDbGFzc05hbWVzIG1fY2xhc3NOYW1lczsKICAgICBpbnQg
bV9tYXBwZWRBdHRyaWJ1dGVDb3VudDsKIH07CkluZGV4OiBXZWJDb3JlL2RvbS9OYW1lZE5vZGVN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAkocmV2aXNpb24g
NDA0NzEpCisrKyBXZWJDb3JlL2RvbS9OYW1lZE5vZGVNYXAuaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsNyArNTYsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBzZXRO
YW1lZEl0ZW0oTm9kZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Tm9kZT4gaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwg
c2l6ZV90IGxlbmd0aCgpIGNvbnN0ID0gMDsKKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gdmlydHVhbExlbmd0aCgpOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBzaXplX3Qg
dmlydHVhbExlbmd0aCgpIGNvbnN0ID0gMDsKIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdl
YkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShy
ZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
IENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMDc4LDE3ICsxMDc4LDE2IEBAIHZvaWQgTm9kZTo6
ZGV0YWNoKCkKIAogdm9pZCBOb2RlOjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CisgICAgLy8g
Tm90ZTogQ29udGFpbmVyTm9kZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQgZG9lcyBub3QgY2FsbCB0
aHJvdWdoIGhlcmUsIHNvIGlmIHlvdQorICAgIC8vIGNoYW5nZSB0aGlzIGZ1bmN0aW9uLCBjaGFu
Z2UgdGhhdCBvbmUgYXMgd2VsbC4KICAgICBzZXRJbkRvY3VtZW50KHRydWUpOwotICAgIGluc2Vy
dGVkSW50b1RyZWUoZmFsc2UpOwogfQogCiB2b2lkIE5vZGU6OnJlbW92ZWRGcm9tRG9jdW1lbnQo
KQogewotICAgIGlmIChtX2RvY3VtZW50ICYmIG1fZG9jdW1lbnQtPmdldENTU1RhcmdldCgpID09
IHRoaXMpCi0gICAgICAgIG1fZG9jdW1lbnQtPnNldENTU1RhcmdldCgwKTsKLQorICAgIC8vIE5v
dGU6IENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50IGRvZXMgbm90IGNhbGwgdGhy
b3VnaCBoZXJlLCBzbyBpZiB5b3UKKyAgICAvLyBjaGFuZ2UgdGhpcyBmdW5jdGlvbiwgY2hhbmdl
IHRoYXQgb25lIGFzIHdlbGwuCiAgICAgc2V0SW5Eb2N1bWVudChmYWxzZSk7Ci0gICAgcmVtb3Zl
ZEZyb21UcmVlKGZhbHNlKTsKIH0KIAogTm9kZSAqTm9kZTo6cHJldmlvdXNFZGl0YWJsZSgpIGNv
bnN0CkluZGV4OiBXZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3Jl
L2RvbS9RdWFsaWZpZWROYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUgQEAKLS8q
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU0LDcgKzUyLDYgQEAgc3RydWN0
IFFOYW1lQ29tcG9uZW50c1RyYW5zbGF0b3Igewogc3RhdGljIFFOYW1lU2V0KiBnTmFtZUNhY2hl
OwogCiBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBsLCBjb25zdCBBdG9taWNTdHJpbmcmIG4pCi0gICAgOiBtX2lt
cGwoMCkKIHsKICAgICBpZiAoIWdOYW1lQ2FjaGUpCiAgICAgICAgIGdOYW1lQ2FjaGUgPSBuZXcg
UU5hbWVTZXQ7CkBAIC02NSwyOCArNjIsNiBAQCBRdWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1l
KGNvbnN0IEF0b21pCiAgICAgICAgIG1faW1wbC0+cmVmKCk7CiB9CiAKLVF1YWxpZmllZE5hbWU6
On5RdWFsaWZpZWROYW1lKCkKLXsKLSAgICBkZXJlZigpOwotfQotCi1RdWFsaWZpZWROYW1lOjpR
dWFsaWZpZWROYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKQotewotICAgIG1faW1wbCA9
IG90aGVyLm1faW1wbDsKLSAgICByZWYoKTsKLX0KLQotY29uc3QgUXVhbGlmaWVkTmFtZSYgUXVh
bGlmaWVkTmFtZTo6b3BlcmF0b3I9KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKQotewotICAg
IGlmIChtX2ltcGwgIT0gb3RoZXIubV9pbXBsKSB7Ci0gICAgICAgIGRlcmVmKCk7Ci0gICAgICAg
IG1faW1wbCA9IG90aGVyLm1faW1wbDsKLSAgICAgICAgcmVmKCk7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiAqdGhpczsKLX0KLQogdm9pZCBRdWFsaWZpZWROYW1lOjpkZXJlZigpCiB7CiAjaWZk
ZWYgUU5BTUVfREVGQVVMVF9DT05TVFJVQ1RPUgpAQCAtOTksMTIgKzc0LDYgQEAgdm9pZCBRdWFs
aWZpZWROYW1lOjpkZXJlZigpCiAgICAgbV9pbXBsLT5kZXJlZigpOwogfQogCi12b2lkIFF1YWxp
ZmllZE5hbWU6OnNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCkKLXsKLSAgICBR
dWFsaWZpZWROYW1lIG90aGVyKHByZWZpeCwgbG9jYWxOYW1lKCksIG5hbWVzcGFjZVVSSSgpKTsK
LSAgICAqdGhpcyA9IG90aGVyOwotfQotCiBTdHJpbmcgUXVhbGlmaWVkTmFtZTo6dG9TdHJpbmco
KSBjb25zdAogewogICAgIFN0cmluZyBsb2NhbCA9IGxvY2FsTmFtZSgpOwpJbmRleDogV2ViQ29y
ZS9kb20vUXVhbGlmaWVkTmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1F1YWxpZmll
ZE5hbWUuaAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw1IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKLSAqIENvcHlyaWdodCAoQykg
MjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMTksNiArMTcsNyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICov
CisKICNpZm5kZWYgUXVhbGlmaWVkTmFtZV9oCiAjZGVmaW5lIFF1YWxpZmllZE5hbWVfaAogCkBA
IC0yNiw3ICsyNSw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAorCiBzdHJ1Y3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMgewog
ICAgIFN0cmluZ0ltcGwqIG1fcHJlZml4OwogICAgIFN0cmluZ0ltcGwqIG1fbG9jYWxOYW1lOwpA
QCAtMzcsMzIgKzM2LDMyIEBAIGNsYXNzIFF1YWxpZmllZE5hbWUgewogcHVibGljOgogICAgIGNs
YXNzIFF1YWxpZmllZE5hbWVJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8UXVhbGlmaWVkTmFtZUlt
cGw+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFF1YWxpZmllZE5h
bWVJbXBsPiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcm
IGwsIGNvbnN0IEF0b21pY1N0cmluZyYgbikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UXVh
bGlmaWVkTmFtZUltcGw+IGNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBsb2NhbE5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJ
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFF1YWxpZmllZE5h
bWVJbXBsKHAsIGwsIG4pKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUXVhbGlm
aWVkTmFtZUltcGwocHJlZml4LCBsb2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOwogICAgICAgICB9
Ci0gICAgICAgIAorCiAgICAgICAgIEF0b21pY1N0cmluZyBtX3ByZWZpeDsKICAgICAgICAgQXRv
bWljU3RyaW5nIG1fbG9jYWxOYW1lOwogICAgICAgICBBdG9taWNTdHJpbmcgbV9uYW1lc3BhY2U7
CiAKICAgICBwcml2YXRlOgotICAgICAgICBRdWFsaWZpZWROYW1lSW1wbChjb25zdCBBdG9taWNT
dHJpbmcmIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKQot
ICAgICAgICAgICAgOiBtX3ByZWZpeChwKQotICAgICAgICAgICAgLCBtX2xvY2FsTmFtZShsKQot
ICAgICAgICAgICAgLCBtX25hbWVzcGFjZShuKQorICAgICAgICBRdWFsaWZpZWROYW1lSW1wbChj
b25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUs
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJKQorICAgICAgICAgICAgOiBtX3ByZWZp
eChwcmVmaXgpCisgICAgICAgICAgICAsIG1fbG9jYWxOYW1lKGxvY2FsTmFtZSkKKyAgICAgICAg
ICAgICwgbV9uYW1lc3BhY2UobmFtZXNwYWNlVVJJKQogICAgICAgICB7CiAgICAgICAgIH0gICAg
ICAgIAogICAgIH07CiAKICAgICBRdWFsaWZpZWROYW1lKGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkkpOwotICAgIH5RdWFsaWZpZWROYW1lKCk7CisgICAgflF1YWxpZmllZE5hbWUo
KSB7IGRlcmVmKCk7IH0KICNpZmRlZiBRTkFNRV9ERUZBVUxUX0NPTlNUUlVDVE9SCiAgICAgUXVh
bGlmaWVkTmFtZSgpIDogbV9pbXBsKDApIHsgfQogI2VuZGlmCiAKLSAgICBRdWFsaWZpZWROYW1l
KGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKLSAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBvcGVyYXRv
cj0oY29uc3QgUXVhbGlmaWVkTmFtZSYpOworICAgIFF1YWxpZmllZE5hbWUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgb3RoZXIpIDogbV9pbXBsKG90aGVyLm1faW1wbCkgeyByZWYoKTsgfQorICAgIGNv
bnN0IFF1YWxpZmllZE5hbWUmIG9wZXJhdG9yPShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikg
eyBvdGhlci5yZWYoKTsgZGVyZWYoKTsgbV9pbXBsID0gb3RoZXIubV9pbXBsOyByZXR1cm4gKnRo
aXM7IH0KIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gbV9pbXBsID09IG90aGVyLm1faW1wbDsgfQogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KQEAgLTcwLDcgKzY5LDcgQEAgcHVibGljOgogICAgIGJvb2wgbWF0Y2hlcyhj
b25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9pbXBsID09IG90aGVy
Lm1faW1wbCB8fCAobG9jYWxOYW1lKCkgPT0gb3RoZXIubG9jYWxOYW1lKCkgJiYgbmFtZXNwYWNl
VVJJKCkgPT0gb3RoZXIubmFtZXNwYWNlVVJJKCkpOyB9CiAKICAgICBib29sIGhhc1ByZWZpeCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9wcmVmaXggIT0gbnVsbEF0b207IH0KLSAgICB2b2lk
IHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCk7CisgICAgdm9pZCBzZXRQcmVm
aXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpIHsgKnRoaXMgPSBRdWFsaWZpZWROYW1lKHBy
ZWZpeCwgbG9jYWxOYW1lKCksIG5hbWVzcGFjZVVSSSgpKTsgfQogCiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBwcmVmaXgoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1fcHJlZml4OyB9CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUoKSBjb25zdCB7IHJldHVybiBtX2ltcGwtPm1f
bG9jYWxOYW1lOyB9CkBAIC04NCw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBp
bml0KCk7CiAgICAgCiBwcml2YXRlOgotICAgIHZvaWQgcmVmKCkgeyBtX2ltcGwtPnJlZigpOyB9
CisgICAgdm9pZCByZWYoKSBjb25zdCB7IG1faW1wbC0+cmVmKCk7IH0KICAgICB2b2lkIGRlcmVm
KCk7CiAgICAgCiAgICAgUXVhbGlmaWVkTmFtZUltcGwqIG1faW1wbDsKQEAgLTEwMCw3ICs5OSw2
IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQXRvbWljU3RyaW4KIGlubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbWljU3RyaW5nJiBh
KSB7IHJldHVybiBhID09IHEubG9jYWxOYW1lKCk7IH0KIGlubGluZSBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcSwgY29uc3QgQXRvbWljU3RyaW5nJiBhKSB7IHJldHVybiBh
ICE9IHEubG9jYWxOYW1lKCk7IH0KIAotCiBpbmxpbmUgdW5zaWduZWQgaGFzaENvbXBvbmVudHMo
Y29uc3QgUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMmIGJ1ZikKIHsKICAgICBBU1NFUlQoc2l6ZW9m
KFF1YWxpZmllZE5hbWVDb21wb25lbnRzKSAlIChzaXplb2YodWludDE2X3QpICogMikgPT0gMCk7
CkBAIC0xNTQsNiArMTUyLDcgQEAgc3RydWN0IFF1YWxpZmllZE5hbWVIYXNoIHsKIG5hbWVzcGFj
ZSBXVEYgewogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKKwogICAgIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNvcmU6OlF1YWxpZmll
ZE5hbWU+IHsKICAgICAgICAgdHlwZWRlZiBXZWJDb3JlOjpRdWFsaWZpZWROYW1lSGFzaCBIYXNo
OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNDA0NzEp
CisrKyBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1OSw3ICsxMDU5LDcgQEAgdm9pZCBDaGFyYWN0ZXJJdGVyYXRvcjo6YWR2YW5jZShpbnQgY291
bgogU3RyaW5nIENoYXJhY3Rlckl0ZXJhdG9yOjpzdHJpbmcoaW50IG51bUNoYXJzKQogewogICAg
IFZlY3RvcjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobnVtQ2hh
cnMpOworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUNoYXJzKTsKICAgICB3
aGlsZSAobnVtQ2hhcnMgPiAwICYmICFhdEVuZCgpKSB7CiAgICAgICAgIGludCBydW5TaXplID0g
bWluKG51bUNoYXJzLCBsZW5ndGgoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVy
cygpLCBydW5TaXplKTsKQEAgLTEyMjcsNyArMTIyNyw3IEBAIGlubGluZSBTZWFyY2hCdWZmZXI6
OlNlYXJjaEJ1ZmZlcihjb25zdCAKICAgICBBU1NFUlQoIW1fdGFyZ2V0LmlzRW1wdHkoKSk7CiAK
ICAgICBzaXplX3QgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0Lmxlbmd0aCgpOwotICAgIG1fYnVmZmVy
LnJlc2VydmVDYXBhY2l0eShtYXgodGFyZ2V0TGVuZ3RoICogOCwgbWluaW11bVNlYXJjaEJ1ZmZl
clNpemUpKTsKKyAgICBtX2J1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1heCh0YXJnZXRM
ZW5ndGggKiA4LCBtaW5pbXVtU2VhcmNoQnVmZmVyU2l6ZSkpOwogICAgIG1fb3ZlcmxhcCA9IG1f
YnVmZmVyLmNhcGFjaXR5KCkgLyA0OwogCiAgICAgLy8gR3JhYiB0aGUgc2luZ2xlIGdsb2JhbCBz
ZWFyY2hlci4KQEAgLTE1NDQsNyArMTU0NCw3IEBAIFVDaGFyKiBwbGFpblRleHRUb01hbGxvY0Fs
bG9jYXRlZEJ1ZmZlcigKICAgICB0eXBlZGVmIHBhaXI8VUNoYXIqLCB1bnNpZ25lZD4gVGV4dFNl
Z21lbnQ7CiAgICAgVmVjdG9yPFRleHRTZWdtZW50PiogdGV4dFNlZ21lbnRzID0gMDsKICAgICBW
ZWN0b3I8VUNoYXI+IHRleHRCdWZmZXI7Ci0gICAgdGV4dEJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHko
Y01heFNlZ21lbnRTaXplKTsKKyAgICB0ZXh0QnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
Y01heFNlZ21lbnRTaXplKTsKICAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyKTsgIWl0LmF0RW5k
KCk7IGl0LmFkdmFuY2UoKSkgewogICAgICAgICBpZiAodGV4dEJ1ZmZlci5zaXplKCkgJiYgdGV4
dEJ1ZmZlci5zaXplKCkgKyBpdC5sZW5ndGgoKSA+IGNNYXhTZWdtZW50U2l6ZSkgewogICAgICAg
ICAgICAgVUNoYXIqIG5ld1NlZ21lbnRCdWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KG1hbGxv
Yyh0ZXh0QnVmZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OTAsNyArNjkwLDcgQEAgc3RhdGljIFN0cmluZyBqb2luTWFya3Vwcyhjb25z
dCBWZWN0b3I8UwogICAgICAgICBsZW5ndGggKz0gcG9zdE1hcmt1cHNbaV0ubGVuZ3RoKCk7CiAK
ICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxl
bmd0aCk7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKIAogICAg
IGZvciAoc2l6ZV90IGkgPSBwcmVDb3VudDsgaSA+IDA7IC0taSkKICAgICAgICAgYXBwZW5kKHJl
c3VsdCwgcHJlTWFya3Vwc1tpIC0gMV0pOwpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJ
dGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCShy
ZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBpbmxpbmUgSGlzdG9yeUl0ZW06Okhpc3RvcnlJ
dGVtKGNvbnN0IEhpCiAgICAgICAgIG1fZm9ybURhdGEgPSBpdGVtLm1fZm9ybURhdGEtPmNvcHko
KTsKICAgICAgICAgCiAgICAgdW5zaWduZWQgc2l6ZSA9IGl0ZW0ubV9zdWJJdGVtcy5zaXplKCk7
Ci0gICAgbV9zdWJJdGVtcy5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CisgICAgbV9zdWJJdGVtcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyArK2kpCiAgICAgICAgIG1fc3ViSXRlbXMuYXBwZW5kKGl0ZW0ubV9zdWJJdGVtc1tp
XS0+Y29weSgpKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHJldmlzaW9uIDQw
NDcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM1LDgg
KzM1LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCi1IVE1MQXJlYUVsZW1lbnQ6OkhUTUxBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEFuY2hvckVsZW1lbnQodGFnTmFt
ZSwgZG9jKQorSFRNTEFyZWFFbGVtZW50OjpIVE1MQXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEFuY2hvckVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2Nvb3JkcygwKQogICAgICwgbV9jb29yZHNM
ZW4oMCkKICAgICAsIG1fbGFzdFNpemUoLTEsIC0xKQpAQCAtNzMsMTEgKzczLDExIEBAIHZvaWQg
SFRNTEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKIGJvb2wgSFRNTEFyZWFFbGVtZW50
OjptYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0KQogewogICAgIGlmIChtX2xhc3RTaXplICE9IHNpemUpIHsKLSAgICAg
ICAgcmVnaW9uID0gZ2V0UmVnaW9uKHNpemUpOworICAgICAgICBtX3JlZ2lvbi5zZXQobmV3IFBh
dGgoZ2V0UmVnaW9uKHNpemUpKSk7CiAgICAgICAgIG1fbGFzdFNpemUgPSBzaXplOwogICAgIH0K
IAotICAgIGlmICghcmVnaW9uLmNvbnRhaW5zKEludFBvaW50KHgsIHkpKSkKKyAgICBpZiAoIW1f
cmVnaW9uLT5jb250YWlucyhJbnRQb2ludCh4LCB5KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKHRoaXMpOwpAQCAtMTUwLDMyICsxNTAsMzIg
QEAgUGF0aCBIVE1MQXJlYUVsZW1lbnQ6OmdldFJlZ2lvbihjb25zdCBJbgogICAgIHJldHVybiBw
YXRoOwogfQogCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50OjphY2Nlc3NLZXkoKSBjb25zdAorY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MQXJlYUVsZW1lbnQ6OmFjY2Vzc0tleSgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKIH0KIAotdm9pZCBIVE1MQXJl
YUVsZW1lbnQ6OnNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MQXJl
YUVsZW1lbnQ6OnNldEFjY2Vzc0tleShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAg
IHNldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBIVE1MQXJl
YUVsZW1lbnQ6OmFsdCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxBcmVhRWxlbWVu
dDo6YWx0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOwogfQog
Ci12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0QWx0KGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lk
IEhUTUxBcmVhRWxlbWVudDo6c2V0QWx0KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAg
ICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5nIEhUTUxBcmVhRWxl
bWVudDo6Y29vcmRzKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEFyZWFFbGVtZW50
Ojpjb29yZHMoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY29vcmRzQXR0cik7
CiB9CiAKLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRDb29yZHMoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRDb29yZHMoY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoY29vcmRzQXR0ciwgdmFsdWUpOwogfQpAQCAtMTg1
LDcgKzE4NSw3IEBAIEtVUkwgSFRNTEFyZWFFbGVtZW50OjpocmVmKCkgY29uc3QKICAgICByZXR1
cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7CiB9CiAK
LXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRIcmVmKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lk
IEhUTUxBcmVhRWxlbWVudDo6c2V0SHJlZihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewog
ICAgIHNldEF0dHJpYnV0ZShocmVmQXR0ciwgdmFsdWUpOwogfQpAQCAtMjAwLDEyICsyMDAsMTIg
QEAgdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldE5vSHJlZihib29sIG5vSAogICAgIHNldEF0dHJp
YnV0ZShub2hyZWZBdHRyLCBub0hyZWYgPyAiIiA6IDApOwogfQogCi1TdHJpbmcgSFRNTEFyZWFF
bGVtZW50OjpzaGFwZSgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxBcmVhRWxlbWVu
dDo6c2hhcGUoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc2hhcGVBdHRyKTsK
IH0KIAotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldFNoYXBlKGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0U2hhcGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoc2hhcGVBdHRyLCB2YWx1ZSk7CiB9CkBAIC0yMjAsNyAr
MjIwLDcgQEAgU3RyaW5nIEhUTUxBcmVhRWxlbWVudDo6dGFyZ2V0KCkgY29uc3QKICAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOwogfQogCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6
c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0
VGFyZ2V0KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHRh
cmdldEF0dHIsIHZhbHVlKTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgJKHJldmlzaW9u
IDQwNDcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI1LDEx
ICsyNSwxMSBAQAogCiAjaW5jbHVkZSAiSFRNTEFuY2hvckVsZW1lbnQuaCIKICNpbmNsdWRlICJJ
bnRTaXplLmgiCi0jaW5jbHVkZSAiUGF0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBQYXRoOwogCiBjbGFzcyBIVE1MQXJlYUVsZW1lbnQg
OiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgewogcHVibGljOgpAQCAtNDcsMzMgKzQ3LDM0IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRSZWN0KFJlbmRlck9iamVjdCopIGNv
bnN0OwogCi0gICAgU3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QWNjZXNz
S2V5KGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5KCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRBY2Nlc3NLZXkoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAg
ICBTdHJpbmcgYWx0KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBbHQoY29uc3QgU3RyaW5nJik7Cisg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQoKSBjb25zdDsKKyAgICB2b2lkIHNldEFsdChjb25z
dCBBdG9taWNTdHJpbmcmKTsKIAotICAgIFN0cmluZyBjb29yZHMoKSBjb25zdDsKLSAgICB2b2lk
IHNldENvb3Jkcyhjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvb3Jk
cygpIGNvbnN0OworICAgIHZvaWQgc2V0Q29vcmRzKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAg
ICAgS1VSTCBocmVmKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRIcmVmKGNvbnN0IFN0cmluZyYpOwor
ICAgIHZvaWQgc2V0SHJlZihjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIGJvb2wgbm9IcmVm
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXROb0hyZWYoYm9vbCk7CiAKLSAgICBTdHJpbmcgc2hhcGUo
KSBjb25zdDsKLSAgICB2b2lkIHNldFNoYXBlKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgc2hhcGUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNoYXBlKGNvbnN0IEF0b21p
Y1N0cmluZyYpOwogCiAgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxlKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIFN0cmluZyB0YXJnZXQoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhcmdldChjb25z
dCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldFRhcmdldChjb25zdCBBdG9taWNTdHJpbmcmKTsKIAog
cHJpdmF0ZToKICAgICBlbnVtIFNoYXBlIHsgRGVmYXVsdCwgUG9seSwgUmVjdCwgQ2lyY2xlLCBV
bmtub3duIH07CiAgICAgUGF0aCBnZXRSZWdpb24oY29uc3QgSW50U2l6ZSYpIGNvbnN0OwotICAg
IFBhdGggcmVnaW9uOworCisgICAgT3duUHRyPFBhdGg+IG1fcmVnaW9uOwogICAgIExlbmd0aCog
bV9jb29yZHM7CiAgICAgaW50IG1fY29vcmRzTGVuOwogICAgIEludFNpemUgbV9sYXN0U2l6ZTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNyArMTQwLDcgQEAg
aW5saW5lIHZvaWQgVG9rZW46OmFkZEF0dHJpYnV0ZShBdG9taWNTdAogICAgICAgICBSZWZQdHI8
TWFwcGVkQXR0cmlidXRlPiBhID0gTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoYXR0ck5hbWUsIGF0
dHJpYnV0ZVZhbHVlKTsKICAgICAgICAgaWYgKCFhdHRycykgewogICAgICAgICAgICAgYXR0cnMg
PSBOYW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgpOwotICAgICAgICAgICAgYXR0cnMtPnJlc2Vy
dmVDYXBhY2l0eSgxMCk7CisgICAgICAgICAgICBhdHRycy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgxMCk7CiAgICAgICAgIH0KICAgICAgICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShhLnJlbGVh
c2UoKSwgdmlld1NvdXJjZU1vZGUpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVmll
d1NvdXJjZURvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFZpZXdT
b3VyY2VEb2N1bWVudC5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9odG1sL0hUTUxW
aWV3U291cmNlRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBAIHZv
aWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6Y3JlYXRlQ29udGEKICAgICAvLyBkb2N1bWVudC4K
ICAgICBSZWZQdHI8RWxlbWVudD4gZGl2ID0gbmV3IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgdGhp
cyk7CiAgICAgUmVmUHRyPE5hbWVkTWFwcGVkQXR0ck1hcD4gYXR0cnMgPSBOYW1lZE1hcHBlZEF0
dHJNYXA6OmNyZWF0ZSgpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlOjpjcmVhdGUoY2xhc3NBdHRyLCAid2Via2l0LWxpbmUtZ3V0dGVyLWJhY2tkcm9wIiksIHRy
dWUpOworICAgIGF0dHJzLT5hZGRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xh
c3NBdHRyLCAid2Via2l0LWxpbmUtZ3V0dGVyLWJhY2tkcm9wIikpOwogICAgIGRpdi0+c2V0QXR0
cmlidXRlTWFwKGF0dHJzLnJlbGVhc2UoKSk7CiAgICAgYm9keS0+YWRkQ2hpbGQoZGl2KTsKICAg
ICBkaXYtPmF0dGFjaCgpOwpAQCAtMTk1LDcgKzE5NSw3IEBAIEVsZW1lbnQqIEhUTUxWaWV3U291
cmNlRG9jdW1lbnQ6OmFkZFNwYW4KIAogICAgIEVsZW1lbnQqIHNwYW4gPSBuZXcgSFRNTEVsZW1l
bnQoc3BhblRhZywgdGhpcyk7CiAgICAgUmVmUHRyPE5hbWVkTWFwcGVkQXR0ck1hcD4gYXR0cnMg
PSBOYW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NBdHRyLCBjbGFzc05hbWUpLCB0cnVlKTsK
KyAgICBhdHRycy0+YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0
ciwgY2xhc3NOYW1lKSk7CiAgICAgc3Bhbi0+c2V0QXR0cmlidXRlTWFwKGF0dHJzLnJlbGVhc2Uo
KSk7CiAgICAgbV9jdXJyZW50LT5hZGRDaGlsZChzcGFuKTsKICAgICBzcGFuLT5hdHRhY2goKTsK
QEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZExpbmUo
Y29uCiAgICAgLy8gQ3JlYXRlIGEgY2VsbCB0aGF0IHdpbGwgaG9sZCB0aGUgbGluZSBudW1iZXIg
KGl0IGlzIGdlbmVyYXRlZCBpbiB0aGUgc3R5bGVzaGVldCB1c2luZyBjb3VudGVycykuCiAgICAg
RWxlbWVudCogdGQgPSBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQodGRUYWcsIHRoaXMpOwogICAg
IFJlZlB0cjxOYW1lZE1hcHBlZEF0dHJNYXA+IGF0dHJzID0gTmFtZWRNYXBwZWRBdHRyTWFwOjpj
cmVhdGUoKTsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3Jl
YXRlKGNsYXNzQXR0ciwgIndlYmtpdC1saW5lLW51bWJlciIpLCB0cnVlKTsKKyAgICBhdHRycy0+
YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0ciwgIndlYmtpdC1s
aW5lLW51bWJlciIpKTsKICAgICB0ZC0+c2V0QXR0cmlidXRlTWFwKGF0dHJzLnJlbGVhc2UoKSk7
CiAgICAgdHJvdy0+YWRkQ2hpbGQodGQpOwogICAgIHRkLT5hdHRhY2goKTsKQEAgLTIyMCw3ICsy
MjAsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFkZExpbmUoY29uCiAgICAgLy8g
Q3JlYXRlIGEgc2Vjb25kIGNlbGwgZm9yIHRoZSBsaW5lIGNvbnRlbnRzCiAgICAgdGQgPSBuZXcg
SFRNTFRhYmxlQ2VsbEVsZW1lbnQodGRUYWcsIHRoaXMpOwogICAgIGF0dHJzID0gTmFtZWRNYXBw
ZWRBdHRyTWFwOjpjcmVhdGUoKTsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0ciwgIndlYmtpdC1saW5lLWNvbnRlbnQiKSwgdHJ1ZSk7
CisgICAgYXR0cnMtPmFkZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShjbGFzc0F0
dHIsICJ3ZWJraXQtbGluZS1jb250ZW50IikpOwogICAgIHRkLT5zZXRBdHRyaWJ1dGVNYXAoYXR0
cnMucmVsZWFzZSgpKTsKICAgICB0cm93LT5hZGRDaGlsZCh0ZCk7CiAgICAgdGQtPmF0dGFjaCgp
OwpAQCAtMjgzLDkgKzI4Myw5IEBAIEVsZW1lbnQqIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmFk
ZExpbmsKICAgICAgICAgY2xhc3NWYWx1ZSA9ICJ3ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUg
d2Via2l0LWh0bWwtZXh0ZXJuYWwtbGluayI7CiAgICAgZWxzZQogICAgICAgICBjbGFzc1ZhbHVl
ID0gIndlYmtpdC1odG1sLWF0dHJpYnV0ZS12YWx1ZSB3ZWJraXQtaHRtbC1yZXNvdXJjZS1saW5r
IjsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNs
YXNzQXR0ciwgY2xhc3NWYWx1ZSksIHRydWUpOwotICAgIGF0dHJzLT5pbnNlcnRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlOjpjcmVhdGUodGFyZ2V0QXR0ciwgIl9ibGFuayIpLCB0cnVlKTsKLSAg
ICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGhyZWZBdHRy
LCB1cmwpLCB0cnVlKTsKKyAgICBhdHRycy0+YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6
Y3JlYXRlKGNsYXNzQXR0ciwgY2xhc3NWYWx1ZSkpOworICAgIGF0dHJzLT5hZGRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlOjpjcmVhdGUodGFyZ2V0QXR0ciwgIl9ibGFuayIpKTsKKyAgICBhdHRy
cy0+YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGhyZWZBdHRyLCB1cmwpKTsK
ICAgICBhbmNob3ItPnNldEF0dHJpYnV0ZU1hcChhdHRycy5yZWxlYXNlKCkpOwogICAgIG1fY3Vy
cmVudC0+YWRkQ2hpbGQoYW5jaG9yKTsKICAgICBhbmNob3ItPmF0dGFjaCgpOwpJbmRleDogV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjgsNyArMTIyOCw3IEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmdvdG9BbmNob3IoKQogICAgIC8vIE9UT0ggSWYgQ1NTIHRhcmdldCB3YXMgc2V0
IHByZXZpb3VzbHksIHdlIHdhbnQgdG8gc2V0IGl0IHRvIDAsIHJlY2FsYwogICAgIC8vIGFuZCBw
b3NzaWJseSByZXBhaW50IGJlY2F1c2UgOnRhcmdldCBwc2V1ZG8gY2xhc3MgbWF5IGhhdmUgYmVl
bgogICAgIC8vIHNldCAoc2VlIGJ1ZyAxMTMyMSkuCi0gICAgaWYgKCFtX1VSTC5oYXNSZWYoKSAm
JiAhKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+Z2V0Q1NTVGFy
Z2V0KCkpKQorICAgIGlmICghbV9VUkwuaGFzUmVmKCkgJiYgIShtX2ZyYW1lLT5kb2N1bWVudCgp
ICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgU3RyaW5nIHJlZiA9IG1fVVJMLnJlZigpOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvVGV4
dFJlc291cmNlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvVGV4dFJl
c291cmNlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9sb2FkZXIvVGV4
dFJlc291cmNlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MCw0OCArNDUwLDU5IEBA
IGJvb2wgVGV4dFJlc291cmNlRGVjb2Rlcjo6Y2hlY2tGb3JDU1NDaGEKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCisgICAgY29uc3QgY2hhciogZGF0YVN0YXJ0ID0gZGF0YTsKICAgICBz
aXplX3Qgb2xkU2l6ZSA9IG1fYnVmZmVyLnNpemUoKTsKLSAgICBtX2J1ZmZlci5ncm93KG9sZFNp
emUgKyBsZW4pOwotICAgIG1lbWNweShtX2J1ZmZlci5kYXRhKCkgKyBvbGRTaXplLCBkYXRhLCBs
ZW4pOworICAgIHNpemVfdCBkYXRhU2l6ZSA9IG9sZFNpemUgKyBsZW47CiAKLSAgICBtb3ZlZERh
dGFUb0J1ZmZlciA9IHRydWU7CisgICAgaWYgKGRhdGFTaXplIDw9IDgpIC8vIHN0cmxlbigiQGNo
YXJzZXQiKSA9PSA4CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2J1ZmZlci5z
aXplKCkgPiA4KSB7IC8vIHN0cmxlbigiQGNoYXJzZXQiKSA9PSA4Ci0gICAgICAgIGNvbnN0IGNo
YXIqIGRhdGFTdGFydCA9IG1fYnVmZmVyLmRhdGEoKTsKLSAgICAgICAgY29uc3QgY2hhciogZGF0
YUVuZCA9IGRhdGFTdGFydCArIG1fYnVmZmVyLnNpemUoKTsKKyAgICBpZiAob2xkU2l6ZSkgewor
ICAgICAgICBtX2J1ZmZlci5ncm93KGRhdGFTaXplKTsKKyAgICAgICAgbWVtY3B5KG1fYnVmZmVy
LmRhdGEoKSArIG9sZFNpemUsIGRhdGEsIGxlbik7CisgICAgICAgIG1vdmVkRGF0YVRvQnVmZmVy
ID0gdHJ1ZTsKKyAgICAgICAgZGF0YVN0YXJ0ID0gbV9idWZmZXIuZGF0YSgpOworICAgIH0KIAot
ICAgICAgICBpZiAoZGF0YVN0YXJ0WzBdID09ICdAJyAmJiBkYXRhU3RhcnRbMV0gPT0gJ2MnICYm
IGRhdGFTdGFydFsyXSA9PSAnaCcgJiYgZGF0YVN0YXJ0WzNdID09ICdhJyAmJiBkYXRhU3RhcnRb
NF0gPT0gJ3InICYmIAotICAgICAgICAgICAgZGF0YVN0YXJ0WzVdID09ICdzJyAmJiBkYXRhU3Rh
cnRbNl0gPT0gJ2UnICYmIGRhdGFTdGFydFs3XSA9PSAndCcpIHsKLSAgICAKLSAgICAgICAgICAg
IGRhdGFTdGFydCArPSA4OwotICAgICAgICAgICAgY29uc3QgY2hhciogcG9zID0gZGF0YVN0YXJ0
OwotICAgICAgICAgICAgaWYgKCFza2lwV2hpdGVzcGFjZShwb3MsIGRhdGFFbmQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoZGF0YVN0YXJ0WzBdID09ICdAJworICAg
ICAgICAgICAgJiYgZGF0YVN0YXJ0WzFdID09ICdjJworICAgICAgICAgICAgJiYgZGF0YVN0YXJ0
WzJdID09ICdoJworICAgICAgICAgICAgJiYgZGF0YVN0YXJ0WzNdID09ICdhJworICAgICAgICAg
ICAgJiYgZGF0YVN0YXJ0WzRdID09ICdyJworICAgICAgICAgICAgJiYgZGF0YVN0YXJ0WzVdID09
ICdzJworICAgICAgICAgICAgJiYgZGF0YVN0YXJ0WzZdID09ICdlJworICAgICAgICAgICAgJiYg
ZGF0YVN0YXJ0WzddID09ICd0JykgeworCisgICAgICAgIGNvbnN0IGNoYXIqIGRhdGFFbmQgPSBk
YXRhU3RhcnQgKyBkYXRhU2l6ZTsKKworICAgICAgICBkYXRhU3RhcnQgKz0gODsKKyAgICAgICAg
Y29uc3QgY2hhciogcG9zID0gZGF0YVN0YXJ0OworICAgICAgICBpZiAoIXNraXBXaGl0ZXNwYWNl
KHBvcywgZGF0YUVuZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
IGlmICgqcG9zID09ICciJyB8fCAqcG9zID09ICdcJycpIHsKLSAgICAgICAgICAgICAgICBjaGFy
IHF1b3RhdGlvbk1hcmsgPSAqcG9zOwotICAgICAgICAgICAgICAgICsrcG9zOwotICAgICAgICAg
ICAgICAgIGRhdGFTdGFydCA9IHBvczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHdo
aWxlIChwb3MgPCBkYXRhRW5kICYmICpwb3MgIT0gcXVvdGF0aW9uTWFyaykKLSAgICAgICAgICAg
ICAgICAgICAgKytwb3M7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA9PSBkYXRhRW5kKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICgqcG9zID09ICciJyB8
fCAqcG9zID09ICdcJycpIHsKKyAgICAgICAgICAgIGNoYXIgcXVvdGF0aW9uTWFyayA9ICpwb3M7
CisgICAgICAgICAgICArK3BvczsKKyAgICAgICAgICAgIGRhdGFTdGFydCA9IHBvczsKIAotICAg
ICAgICAgICAgICAgIGludCBlbmNvZGluZ05hbWVMZW5ndGggPSBwb3MgLSBkYXRhU3RhcnQgKyAx
OwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgd2hpbGUgKHBvcyA8IGRhdGFFbmQgJiYg
KnBvcyAhPSBxdW90YXRpb25NYXJrKQogICAgICAgICAgICAgICAgICsrcG9zOwotICAgICAgICAg
ICAgICAgIGlmICghc2tpcFdoaXRlc3BhY2UocG9zLCBkYXRhRW5kKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHBvcyA9PSBkYXRhRW5kKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgICAgIGlmICgqcG9zID09
ICc7JykKLSAgICAgICAgICAgICAgICAgICAgc2V0RW5jb2RpbmcoZmluZFRleHRFbmNvZGluZyhk
YXRhU3RhcnQsIGVuY29kaW5nTmFtZUxlbmd0aCksIEVuY29kaW5nRnJvbUNTU0NoYXJzZXQpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGVuY29kaW5nTmFtZUxlbmd0aCA9IHBvcyAt
IGRhdGFTdGFydCArIDE7CisKKyAgICAgICAgICAgICsrcG9zOworICAgICAgICAgICAgaWYgKCFz
a2lwV2hpdGVzcGFjZShwb3MsIGRhdGFFbmQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgaWYgKCpwb3MgPT0gJzsnKQorICAgICAgICAgICAgICAgIHNldEVu
Y29kaW5nKGZpbmRUZXh0RW5jb2RpbmcoZGF0YVN0YXJ0LCBlbmNvZGluZ05hbWVMZW5ndGgpLCBF
bmNvZGluZ0Zyb21DU1NDaGFyc2V0KTsKICAgICAgICAgfQotICAgICAgICBtX2NoZWNrZWRGb3JD
U1NDaGFyc2V0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fY2hlY2tlZEZvckNTU0NoYXJzZXQgPSB0cnVlOworICAgIHJldHVy
biB0cnVlOwogfQogCiAvLyBPdGhlciBicm93c2VycyBhbGxvdyBjb21tZW50cyBpbiB0aGUgaGVh
ZCBzZWN0aW9uLCBzbyB3ZSBuZWVkIHRvIGFsc28uCkBAIC03NjAsMTMgKzc3MSwxNSBAQCBTdHJp
bmcgVGV4dFJlc291cmNlRGVjb2Rlcjo6ZGVjb2RlKGNvbnN0CiAKICAgICBib29sIG1vdmVkRGF0
YVRvQnVmZmVyID0gZmFsc2U7CiAKLSAgICBpZiAobV9jb250ZW50VHlwZSA9PSBDU1MgJiYgIW1f
Y2hlY2tlZEZvckNTU0NoYXJzZXQpCisgICAgaWYgKG1fY29udGVudFR5cGUgPT0gQ1NTICYmICFt
X2NoZWNrZWRGb3JDU1NDaGFyc2V0KSB7CiAgICAgICAgIGlmICghY2hlY2tGb3JDU1NDaGFyc2V0
KGRhdGEsIGxlbiwgbW92ZWREYXRhVG9CdWZmZXIpKQogICAgICAgICAgICAgcmV0dXJuICIiOwor
ICAgIH0KIAotICAgIGlmICgobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUg
PT0gWE1MKSAmJiAhbV9jaGVja2VkRm9ySGVhZENoYXJzZXQpIC8vIEhUTUwgYW5kIFhNTAorICAg
IGlmICgobV9jb250ZW50VHlwZSA9PSBIVE1MIHx8IG1fY29udGVudFR5cGUgPT0gWE1MKSAmJiAh
bV9jaGVja2VkRm9ySGVhZENoYXJzZXQpIHsgLy8gSFRNTCBhbmQgWE1MCiAgICAgICAgIGlmICgh
Y2hlY2tGb3JIZWFkQ2hhcnNldChkYXRhLCBsZW4sIG1vdmVkRGF0YVRvQnVmZmVyKSkKICAgICAg
ICAgICAgIHJldHVybiAiIjsKKyAgICB9CiAKICAgICAvLyBEbyB0aGUgYXV0by1kZXRlY3QgaWYg
b3VyIGRlZmF1bHQgZW5jb2RpbmcgaXMgb25lIG9mIHRoZSBKYXBhbmVzZSBvbmVzLgogICAgIC8v
IEZJWE1FOiBJdCBzZWVtcyB3cm9uZyB0byBjaGFuZ2Ugb3VyIGVuY29kaW5nIGRvd25zdHJlYW0g
YWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGRvbmUgc29tZSBkZWNvZGluZy4KSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3BwCShyZXZpc2lvbiA0
MDQ3MSkKKysrIFdlYkNvcmUvbG9hZGVyL2FwcGNhY2hlL0RPTUFwcGxpY2F0aW9uQ2FjaGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdM
aXN0PiBET01BcHBsaWNhdGlvbgogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKICAgICBpZiAo
QXBwbGljYXRpb25DYWNoZSogY2FjaGUgPSBhc3NvY2lhdGVkQ2FjaGUoKSkgewogICAgICAgICB1
bnNpZ25lZCBudW1FbnRyaWVzID0gY2FjaGUtPm51bUR5bmFtaWNFbnRyaWVzKCk7Ci0gICAgICAg
IHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobnVtRW50cmllcyk7CisgICAgICAgIHJlc3VsdC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG51bUVudHJpZXMpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbnVtRW50cmllczsgKytpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjYWNo
ZS0+ZHluYW1pY0VudHJ5KGkpKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlP
cmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5jcHAJ
KHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw3IEBAIFN0cmluZyBTZWN1cml0eU9yaWdpbjo6dG9T
dHJpbmcoKSBjb25zdAogICAgICAgICByZXR1cm4gU3RyaW5nKCJmaWxlOi8vIik7CiAKICAgICBW
ZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KG1fcHJvdG9j
b2wubGVuZ3RoKCkgKyBtX2hvc3QubGVuZ3RoKCkgKyAxMCk7CisgICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobV9wcm90b2NvbC5sZW5ndGgoKSArIG1faG9zdC5sZW5ndGgoKSArIDEw
KTsKICAgICBhcHBlbmQocmVzdWx0LCBtX3Byb3RvY29sKTsKICAgICBhcHBlbmQocmVzdWx0LCAi
Oi8vIik7CiAgICAgYXBwZW5kKHJlc3VsdCwgbV9ob3N0KTsKSW5kZXg6IFdlYkNvcmUvcGFnZS9t
YWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL21hYy9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQkocmV2aXNpb24gNDA0NzEpCisr
KyBXZWJDb3JlL3BhZ2UvbWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC04NzMsNyArODczLDcgQEAgc3RhdGljIFdlYkNvcmVUZXh0TWFya2VyUmFuZ2Uq
IHRleHRNYXJrZQogc3RhdGljIHZvaWQgY29udmVydFRvVmVjdG9yKE5TQXJyYXkqIGFycmF5LCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIHZlY3RvcikK
IHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBbYXJyYXkgY291bnRdOwotICAgIHZlY3Rvci5yZXNl
cnZlQ2FwYWNpdHkobGVuZ3RoKTsKKyAgICB2ZWN0b3IucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShs
ZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAg
ICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBbW2FycmF5IG9iamVjdEF0SW5kZXg6aV0g
YWNjZXNzaWJpbGl0eU9iamVjdF07CiAgICAgICAgIGlmIChvYmopCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCShyZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzA0LDcg
KzMwNCw3IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEoaW4KICAgICB9
CiAKICAgICBWZWN0b3I8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiBrZXlzVG9SZW1vdmU7Ci0g
ICAga2V5c1RvUmVtb3ZlLnJlc2VydmVDYXBhY2l0eShnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5z
aXplKCkpOworICAgIGtleXNUb1JlbW92ZS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGdGb250UGxh
dGZvcm1EYXRhQ2FjaGUtPnNpemUoKSk7CiAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVy
YXRvciBwbGF0Zm9ybURhdGFFbmQgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5lbmQoKTsKICAg
ICBmb3IgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZTo6aXRlcmF0b3IgcGxhdGZvcm1EYXRhID0gZ0Zv
bnRQbGF0Zm9ybURhdGFDYWNoZS0+YmVnaW4oKTsgcGxhdGZvcm1EYXRhICE9IHBsYXRmb3JtRGF0
YUVuZDsgKytwbGF0Zm9ybURhdGEpIHsKICAgICAgICAgaWYgKHBsYXRmb3JtRGF0YS0+c2Vjb25k
ICYmICFnRm9udERhdGFDYWNoZS0+Y29udGFpbnMoKnBsYXRmb3JtRGF0YS0+c2Vjb25kKSkKQEAg
LTQyNCw3ICs0MjQsNyBAQCB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCiAKICAgICBWZWN0
b3I8UmVmUHRyPEZvbnRTZWxlY3Rvcj4gPiBjbGllbnRzOwogICAgIHNpemVfdCBudW1DbGllbnRz
ID0gZ0NsaWVudHMtPnNpemUoKTsKLSAgICBjbGllbnRzLnJlc2VydmVDYXBhY2l0eShudW1DbGll
bnRzKTsKKyAgICBjbGllbnRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtQ2xpZW50cyk7CiAg
ICAgSGFzaFNldDxGb250U2VsZWN0b3IqPjo6aXRlcmF0b3IgZW5kID0gZ0NsaWVudHMtPmVuZCgp
OwogICAgIGZvciAoSGFzaFNldDxGb250U2VsZWN0b3IqPjo6aXRlcmF0b3IgaXQgPSBnQ2xpZW50
cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBjbGllbnRzLmFwcGVuZCgqaXQp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFdpZHRoTWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwCShy
ZXZpc2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1h
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNDMgKzI5LDIyIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR2x5cGhXaWR0aE1hcC5oIgogCi1uYW1lc3BhY2UgV2Vi
Q29yZQotewotCi1mbG9hdCBHbHlwaFdpZHRoTWFwOjp3aWR0aEZvckdseXBoKEdseXBoIGcpCi17
Ci0gICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChnIC8gR2x5cGhXaWR0aFBhZ2U6OnNpemUpOwot
ICAgIEdseXBoV2lkdGhQYWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyKTsKLSAgICBp
ZiAocGFnZSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPndpZHRoRm9yR2x5cGgoZyk7Ci0gICAgcmV0
dXJuIGNHbHlwaFdpZHRoVW5rbm93bjsKLX0KLQotdm9pZCBHbHlwaFdpZHRoTWFwOjpzZXRXaWR0
aEZvckdseXBoKEdseXBoIGdseXBoLCBmbG9hdCB3aWR0aCkKLXsKLSAgICB1bnNpZ25lZCBwYWdl
TnVtYmVyID0gKGdseXBoIC8gR2x5cGhXaWR0aFBhZ2U6OnNpemUpOwotICAgIEdseXBoV2lkdGhQ
YWdlKiBwYWdlID0gbG9jYXRlUGFnZShwYWdlTnVtYmVyKTsKLSAgICBpZiAocGFnZSkKLSAgICAg
ICAgcGFnZS0+c2V0V2lkdGhGb3JHbHlwaChnbHlwaCwgd2lkdGgpOwotfQorbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1pbmxpbmUgR2x5cGhXaWR0aE1hcDo6R2x5cGhXaWR0aFBhZ2UqIEdseXBoV2lk
dGhNYXA6OmxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikKK0dseXBoV2lkdGhNYXA6Okds
eXBoV2lkdGhQYWdlKiBHbHlwaFdpZHRoTWFwOjpsb2NhdGVQYWdlU2xvd0Nhc2UodW5zaWduZWQg
cGFnZU51bWJlcikKIHsKICAgICBHbHlwaFdpZHRoUGFnZSogcGFnZTsKICAgICBpZiAocGFnZU51
bWJlciA9PSAwKSB7Ci0gICAgICAgIGlmIChtX2ZpbGxlZFByaW1hcnlQYWdlKQotICAgICAgICAg
ICAgcmV0dXJuICZtX3ByaW1hcnlQYWdlOworICAgICAgICBBU1NFUlQoIW1fZmlsbGVkUHJpbWFy
eVBhZ2UpOwogICAgICAgICBwYWdlID0gJm1fcHJpbWFyeVBhZ2U7CiAgICAgICAgIG1fZmlsbGVk
UHJpbWFyeVBhZ2UgPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChtX3BhZ2VzKSB7
Ci0gICAgICAgICAgICBHbHlwaFdpZHRoUGFnZSogcmVzdWx0ID0gbV9wYWdlcy0+Z2V0KHBhZ2VO
dW1iZXIpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9CisgICAgICAgICAgICBpZiAoKHBhZ2UgPSBtX3BhZ2VzLT5nZXQo
cGFnZU51bWJlcikpKQorICAgICAgICAgICAgICAgIHJldHVybiBwYWdlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1fcGFnZXMuc2V0KG5ldyBIYXNoTWFwPGludCwgR2x5cGhXaWR0aFBh
Z2UqPik7CiAgICAgICAgIHBhZ2UgPSBuZXcgR2x5cGhXaWR0aFBhZ2U7Ci0gICAgICAgIGlmICgh
bV9wYWdlcykKLSAgICAgICAgICAgIG1fcGFnZXMgPSBuZXcgSGFzaE1hcDxpbnQsIEdseXBoV2lk
dGhQYWdlKj47CiAgICAgICAgIG1fcGFnZXMtPnNldChwYWdlTnVtYmVyLCBwYWdlKTsKICAgICB9
CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5oCShyZXZp
c2lvbiA0MDQ3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0aE1hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDkgQEAKICNpZm5kZWYgR2x5cGhX
aWR0aE1hcF9oCiAjZGVmaW5lIEdseXBoV2lkdGhNYXBfaAogCi0jaW5jbHVkZSA8d3RmL3VuaWNv
ZGUvVW5pY29kZS5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSwzNCArNDEsNDkg
QEAgY29uc3QgZmxvYXQgY0dseXBoV2lkdGhVbmtub3duID0gLTE7CiAKIGNsYXNzIEdseXBoV2lk
dGhNYXAgOiBOb25jb3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgR2x5cGhXaWR0aE1hcCgpIDogbV9m
aWxsZWRQcmltYXJ5UGFnZShmYWxzZSksIG1fcGFnZXMoMCkge30KLSAgICB+R2x5cGhXaWR0aE1h
cCgpIHsgaWYgKG1fcGFnZXMpIHsgZGVsZXRlQWxsVmFsdWVzKCptX3BhZ2VzKTsgZGVsZXRlIG1f
cGFnZXM7IH0gfQorICAgIEdseXBoV2lkdGhNYXAoKSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFs
c2UpIHsgfQorICAgIH5HbHlwaFdpZHRoTWFwKCkgeyBpZiAobV9wYWdlcykgeyBkZWxldGVBbGxW
YWx1ZXMoKm1fcGFnZXMpOyB9IH0KIAotICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGgpOwot
ICAgIHZvaWQgc2V0V2lkdGhGb3JHbHlwaChHbHlwaCwgZmxvYXQpOworICAgIGZsb2F0IHdpZHRo
Rm9yR2x5cGgoR2x5cGggZ2x5cGgpCisgICAgeworICAgICAgICByZXR1cm4gbG9jYXRlUGFnZShn
bHlwaCAvIEdseXBoV2lkdGhQYWdlOjpzaXplKS0+d2lkdGhGb3JHbHlwaChnbHlwaCk7CisgICAg
fQorCisgICAgdm9pZCBzZXRXaWR0aEZvckdseXBoKEdseXBoIGdseXBoLCBmbG9hdCB3aWR0aCkK
KyAgICB7CisgICAgICAgIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaFdpZHRoUGFnZTo6c2l6ZSkt
PnNldFdpZHRoRm9yR2x5cGgoZ2x5cGgsIHdpZHRoKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAg
c3RydWN0IEdseXBoV2lkdGhQYWdlIHsKICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXpl
ID0gMjU2OyAvLyBVc3VhbGx5IGNvdmVycyBMYXRpbi0xIGluIGEgc2luZ2xlIHBhZ2UuCiAgICAg
ICAgIGZsb2F0IG1fd2lkdGhzW3NpemVdOwogCi0gICAgICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgo
R2x5cGggZykgY29uc3QgeyByZXR1cm4gbV93aWR0aHNbZyAlIHNpemVdOyB9Ci0gICAgICAgIHZv
aWQgc2V0V2lkdGhGb3JHbHlwaChHbHlwaCBnLCBmbG9hdCB3KQorICAgICAgICBmbG9hdCB3aWR0
aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoc1tnbHlwaCAlIHNp
emVdOyB9CisgICAgICAgIHZvaWQgc2V0V2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCwgZmxvYXQg
d2lkdGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldFdpZHRoRm9ySW5kZXgoZyAlIHNpemUs
IHcpOworICAgICAgICAgICAgc2V0V2lkdGhGb3JJbmRleChnbHlwaCAlIHNpemUsIHdpZHRoKTsK
ICAgICAgICAgfQotICAgICAgICB2b2lkIHNldFdpZHRoRm9ySW5kZXgodW5zaWduZWQgaW5kZXgs
IGZsb2F0IHcpCisgICAgICAgIHZvaWQgc2V0V2lkdGhGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwg
ZmxvYXQgd2lkdGgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1fd2lkdGhzW2luZGV4XSA9IHc7
CisgICAgICAgICAgICBtX3dpZHRoc1tpbmRleF0gPSB3aWR0aDsKICAgICAgICAgfQogICAgIH07
CiAgICAgCi0gICAgR2x5cGhXaWR0aFBhZ2UqIGxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZSk7Cisg
ICAgR2x5cGhXaWR0aFBhZ2UqIGxvY2F0ZVBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikKKyAgICB7
CisgICAgICAgIGlmICghcGFnZU51bWJlciAmJiBtX2ZpbGxlZFByaW1hcnlQYWdlKQorICAgICAg
ICAgICAgcmV0dXJuICZtX3ByaW1hcnlQYWdlOworICAgICAgICByZXR1cm4gbG9jYXRlUGFnZVNs
b3dDYXNlKHBhZ2VOdW1iZXIpOworICAgIH0KKworICAgIEdseXBoV2lkdGhQYWdlKiBsb2NhdGVQ
YWdlU2xvd0Nhc2UodW5zaWduZWQgcGFnZU51bWJlcik7CiAgICAgCiAgICAgYm9vbCBtX2ZpbGxl
ZFByaW1hcnlQYWdlOwogICAgIEdseXBoV2lkdGhQYWdlIG1fcHJpbWFyeVBhZ2U7IC8vIFdlIG9w
dGltaXplIGZvciB0aGUgcGFnZSB0aGF0IGNvbnRhaW5zIGdseXBoIGluZGljZXMgMC0yNTUuCi0g
ICAgSGFzaE1hcDxpbnQsIEdseXBoV2lkdGhQYWdlKj4qIG1fcGFnZXM7CisgICAgT3duUHRyPEhh
c2hNYXA8aW50LCBHbHlwaFdpZHRoUGFnZSo+ID4gbV9wYWdlczsKIH07CiAKIH0KKwogI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHJldmlzaW9uIDQwNDcx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTgsNyArOTgsNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVlcENv
cHkoCiAgICAgZm9ybURhdGEtPm1fYWx3YXlzU3RyZWFtID0gbV9hbHdheXNTdHJlYW07CiAKICAg
ICBzaXplX3QgbiA9IG1fZWxlbWVudHMuc2l6ZSgpOwotICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRz
LnJlc2VydmVDYXBhY2l0eShuKTsKKyAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG4pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAg
ICAgICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07CiAgICAgICAg
IHN3aXRjaCAoZS5tX3R5cGUpIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQ
SGVhZGVyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UEhlYWRlck1hcC5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0hUVFBIZWFkZXJNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGF1dG9fcHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+
IEhUVFBIZWFkZXJNYXA6OmNvcHlEYXRhKCkgY29uc3QKIHsKICAgICBhdXRvX3B0cjxDcm9zc1Ro
cmVhZEhUVFBIZWFkZXJNYXBEYXRhPiBkYXRhKG5ldyBDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBE
YXRhKCkpOwotICAgIGRhdGEtPnJlc2VydmVDYXBhY2l0eShzaXplKCkpOworICAgIGRhdGEtPnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSgpKTsKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZF9pdCA9IGVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmRfaXQ7ICsraXQpIHsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlz
aW9uIDQwNDcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIGF1dG9fcHRyPENyb3NzVGhy
ZWFkUmVzb3VyY2VSZXF1ZXN0RGF0YT4KICAgICBkYXRhLT5tX2h0dHBNZXRob2QgPSBodHRwTWV0
aG9kKCkuY29weSgpOwogICAgIGRhdGEtPm1faHR0cEhlYWRlcnMuYWRvcHQoaHR0cEhlYWRlckZp
ZWxkcygpLmNvcHlEYXRhKCkpOwogCi0gICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3Np
dGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZlQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRl
bnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkpOworICAgIGRhdGEtPm1f
cmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFj
a0FycmF5LnNpemUoKSk7CiAgICAgc2l6ZV90IGVuY29kaW5nQXJyYXlTaXplID0gbV9yZXNwb25z
ZUNvbnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGVuY29kaW5nQXJyYXlTaXplOyArK2luZGV4KSB7
CiAgICAgICAgIGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXkuYXBwZW5kKG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxi
YWNrQXJyYXlbaW5kZXhdLmNvcHkoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0Zvcm1EYXRhU3RyZWFtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0JKHJldmlzaW9uIDQwNDcxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjA0LDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENGUmVhZFN0
cmVhbVJlZiAKIAogICAgIC8vIEFwcGVuZCBpbiByZXZlcnNlIG9yZGVyIHNpbmNlIHdlIHJlbW92
ZSBlbGVtZW50cyBmcm9tIHRoZSBlbmQuCiAgICAgc2l6ZV90IHNpemUgPSBmb3JtRGF0YS0+ZWxl
bWVudHMoKS5zaXplKCk7Ci0gICAgbmV3SW5mby0+cmVtYWluaW5nRWxlbWVudHMucmVzZXJ2ZUNh
cGFjaXR5KHNpemUpOworICAgIG5ld0luZm8tPnJlbWFpbmluZ0VsZW1lbnRzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2l6ZSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
CiAgICAgICAgIG5ld0luZm8tPnJlbWFpbmluZ0VsZW1lbnRzLmFwcGVuZChmb3JtRGF0YS0+ZWxl
bWVudHMoKVtzaXplIC0gaSAtIDFdKTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRm
b3JtU3RyaW5nLmgJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1
ZGUgIlN0cmluZ0ltcGwuaCIKIAotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KICNpZiBV
U0UoSlNDKQogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgogI2Vsc2UKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICggbXVlbGxlckBrZGUub3JnICkKLSAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBXZWxsaW5ndG9uIChwcm90b25Ad2lyZXRh
cHBlZC5uZXQpCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtOTA3LDI2ICs5MDcsOCBAQCBXVEY6OlVuaWNvZGU6
OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpkZWZhCiB9CiAKIC8vIFRoaXMgaXMgYSBob3QgZnVuY3Rp
b24gYmVjYXVzZSBpdCdzIHVzZWQgd2hlbiBwYXJzaW5nIEhUTUwuCi1QYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBBU1NFUlQoY2hhcmFj
dGVycyk7Ci0gICAgQVNTRVJUKGxlbmd0aCk7Ci0KLSAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNh
c2Ugd2hlcmUgdGhlcmUgYXJlIG5vIE51bGwgY2hhcmFjdGVycyBieSBxdWlja2x5Ci0gICAgLy8g
c2VhcmNoaW5nIGZvciBudWxscywgYW5kIHRoZW4gdXNpbmcgU3RyaW5nSW1wbDo6Y3JlYXRlLCB3
aGljaCB3aWxsCi0gICAgLy8gbWVtY3B5IHRoZSB3aG9sZSBidWZmZXIuICBUaGlzIGlzIGZhc3Rl
ciB0aGFuIGFzc2lnbmluZyBjaGFyYWN0ZXIgYnkKLSAgICAvLyBjaGFyYWN0ZXIgZHVyaW5nIHRo
ZSBsb29wLiAKLQotICAgIC8vIEZhc3QgY2FzZS4KLSAgICBpbnQgZm91bmROdWxsID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZm91bmROdWxsICYmIGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICBpbnQgYyA9IGNoYXJhY3RlcnNbaV07IC8vIG1vcmUgZWZmaWNpZW50IHRoYW4gdXNp
bmcgVUNoYXIgaGVyZSAoYXQgbGVhc3Qgb24gSW50ZWwgTWFjIE9TKQotICAgICAgICBmb3VuZE51
bGwgfD0gIWM7Ci0gICAgfQotICAgIGlmICghZm91bmROdWxsKQotICAgICAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgCi0gICAgLy8gU2xvdyBj
YXNlLgogICAgIFN0cmluZ0J1ZmZlciBzdHJpcHBlZENvcHkobGVuZ3RoKTsKICAgICB1bnNpZ25l
ZCBzdHJpcHBlZExlbmd0aCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDQw
NDcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4K
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CkBAIC0xNjcsNiArMTY3LDggQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnNT
bG93Q2FzZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisKICAgICB1bnNpZ25lZCBt
X2xlbmd0aDsKICAgICBjb25zdCBVQ2hhciogbV9kYXRhOwogICAgIG11dGFibGUgdW5zaWduZWQg
bV9oYXNoOwpAQCAtMjc0LDYgKzI3NiwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTcGFjZU9y
TmV3bGluZShVQ2hhCiAgICAgcmV0dXJuIGMgPD0gMHg3RiA/IFdURjo6aXNBU0NJSVNwYWNlKGMp
IDogV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24oYykgPT0gV1RGOjpVbmljb2RlOjpXaGl0ZVNwYWNl
TmV1dHJhbDsKIH0KIAorLy8gVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgdXNl
ZCB3aGVuIHBhcnNpbmcgSFRNTC4KK2lubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGNoYXJhY3RlcnMpOworICAgIEFT
U0VSVChsZW5ndGgpOworCisgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJl
IGFyZSBubyBOdWxsIGNoYXJhY3RlcnMgYnkgcXVpY2tseQorICAgIC8vIHNlYXJjaGluZyBmb3Ig
bnVsbHMsIGFuZCB0aGVuIHVzaW5nIFN0cmluZ0ltcGw6OmNyZWF0ZSwgd2hpY2ggd2lsbAorICAg
IC8vIG1lbWNweSB0aGUgd2hvbGUgYnVmZmVyLiAgVGhpcyBpcyBmYXN0ZXIgdGhhbiBhc3NpZ25p
bmcgY2hhcmFjdGVyIGJ5CisgICAgLy8gY2hhcmFjdGVyIGR1cmluZyB0aGUgbG9vcC4gCisKKyAg
ICAvLyBGYXN0IGNhc2UuCisgICAgaW50IGZvdW5kTnVsbCA9IDA7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgIWZvdW5kTnVsbCAmJiBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaW50IGMg
PSBjaGFyYWN0ZXJzW2ldOyAvLyBtb3JlIGVmZmljaWVudCB0aGFuIHVzaW5nIFVDaGFyIGhlcmUg
KGF0IGxlYXN0IG9uIEludGVsIE1hYyBPUykKKyAgICAgICAgZm91bmROdWxsIHw9ICFjOworICAg
IH0KKyAgICBpZiAoIWZvdW5kTnVsbCkKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0
ZShjaGFyYWN0ZXJzLCBsZW5ndGgpOworCisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVN0
cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKwog
fQogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTg2LDExICsyMTg2LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJl
bW92ZUZyb21PYmplY3RMaXN0cwogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6OmRvY3Vt
ZW50QmVpbmdEZXN0cm95ZWQoKSBjb25zdAotewotICAgIHJldHVybiAhZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKTsKLX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKQogewogICAgIC8vIERl
c3Ryb3kgYW55IGxlZnRvdmVyIGFub255bW91cyBjaGlsZHJlbi4KQEAgLTI0MzYsMjcgKzI0MzEs
MjUgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRlbGV0ZUxpbmVCb3hXcmFwcGVyKAogewogfQogCi1S
ZW5kZXJTdHlsZSogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0CitSZW5kZXJT
dHlsZSogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZVNsb3dDYXNlKCkgY29uc3QKIHsKLSAg
ICBpZiAoIWRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKQotICAgICAgICByZXR1cm4g
bV9zdHlsZS5nZXQoKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVz
KCkpOwogCi0gICAgUmVuZGVyU3R5bGUqIHMgPSBtX3N0eWxlLmdldCgpOwotICAgIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqID0gaXNUZXh0KCkgPyBwYXJlbnQoKSA6IHRoaXM7Ci0gICAgaWYgKG9i
ai0+aXNCbG9ja0Zsb3coKSkgewotICAgICAgICBSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sg
PSBvYmotPmZpcnN0TGluZUJsb2NrKCk7Ci0gICAgICAgIGlmIChmaXJzdExpbmVCbG9jaykKLSAg
ICAgICAgICAgIHMgPSBmaXJzdExpbmVCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVy
U3R5bGU6OkZJUlNUX0xJTkUsIHN0eWxlKCkpOwotICAgIH0gZWxzZSBpZiAoIW9iai0+aXNBbm9u
eW1vdXMoKSAmJiBvYmotPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gb2JqLT5wYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAg
aWYgKHBhcmVudFN0eWxlICE9IG9iai0+cGFyZW50KCktPnN0eWxlKCkpIHsKLSAgICAgICAgICAg
IC8vIEEgZmlyc3QtbGluZSBzdHlsZSBpcyBpbiBlZmZlY3QuIFdlIG5lZWQgdG8gY2FjaGUgYSBm
aXJzdC1saW5lIHN0eWxlCi0gICAgICAgICAgICAvLyBmb3Igb3Vyc2VsdmVzLgotICAgICAgICAg
ICAgc3R5bGUoKS0+c2V0SGFzUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xJTkVfSU5I
RVJJVEVEKTsKLSAgICAgICAgICAgIHMgPSBvYmotPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRl
clN0eWxlOjpGSVJTVF9MSU5FX0lOSEVSSVRFRCwgcGFyZW50U3R5bGUpOworICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IG1fc3R5bGUuZ2V0KCk7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGlzVGV4dCgpID8gcGFyZW50KCkgOiB0aGlzOworICAgIGlmIChyZW5kZXJlci0+aXNC
bG9ja0Zsb3coKSkgeworICAgICAgICBpZiAoUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrID0g
cmVuZGVyZXItPmZpcnN0TGluZUJsb2NrKCkpCisgICAgICAgICAgICBzdHlsZSA9IGZpcnN0TGlu
ZUJsb2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORSwgc3R5
bGUpOworICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVyLT5pc0Fub255bW91cygpICYmIHJlbmRlcmVy
LT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IHJlbmRlcmVyLT5wYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgaWYgKHBhcmVu
dFN0eWxlICE9IHJlbmRlcmVyLT5wYXJlbnQoKS0+c3R5bGUoKSkgeworICAgICAgICAgICAgLy8g
QSBmaXJzdC1saW5lIHN0eWxlIGlzIGluIGVmZmVjdC4gQ2FjaGUgYSBmaXJzdC1saW5lIHN0eWxl
IGZvciBvdXJzZWx2ZXMuCisgICAgICAgICAgICBzdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUoUmVu
ZGVyU3R5bGU6OkZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKKyAgICAgICAgICAgIHN0eWxlID0gcmVu
ZGVyZXItPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FX0lOSEVS
SVRFRCwgcGFyZW50U3R5bGUpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzOworCisg
ICAgcmV0dXJuIHN0eWxlOwogfQogCiBSZW5kZXJTdHlsZSogUmVuZGVyT2JqZWN0OjpnZXRDYWNo
ZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6UHNldWRvSWQgcHNldWRvLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNp
b24gNDA0NzEpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTU5LDcgKzU1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBtYXhQcmVm
V2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVuZGVyU3R5bGUqIGZpcnN0TGlu
ZVN0eWxlKCkgY29uc3Q7CisgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVzKCkgPyBmaXJzdExpbmVTdHls
ZVNsb3dDYXNlKCkgOiBzdHlsZSgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKGJvb2wgZmly
c3RMaW5lKSBjb25zdCB7IHJldHVybiBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5
bGUoKTsgfQogICAgIAogICAgIC8vIEFub255bW91cyBibG9ja3MgdGhhdCBhcmUgcGFydCBvZiBv
ZiBhIGNvbnRpbnVhdGlvbiBjaGFpbiB3aWxsIHJldHVybiB0aGVpciBpbmxpbmUgY29udGludWF0
aW9uJ3Mgb3V0bGluZSBzdHlsZSBpbnN0ZWFkLgpAQCAtODM1LDYgKzgzNSw4IEBAIHByb3RlY3Rl
ZDoKICAgICB9OwogICAgIAogcHJpdmF0ZToKKyAgICBSZW5kZXJTdHlsZSogZmlyc3RMaW5lU3R5
bGVTbG93Q2FzZSgpIGNvbnN0OworCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwog
CiAgICAgTm9kZSogbV9ub2RlOwpAQCAtODk4LDYgKzkwMCwxMSBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBib29sIHNfYWZmZWN0c1BhcmVudEJsb2NrOwogfTsKIAoraW5saW5lIGJvb2wgUmVuZGVy
T2JqZWN0Ojpkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWRv
Y3VtZW50KCktPnJlbmRlcmVyKCk7Cit9CisKIGlubGluZSB2b2lkIFJlbmRlck9iamVjdDo6c2V0
TmVlZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzKQogewogICAgIGJvb2wgYWxyZWFk
eU5lZWRlZExheW91dCA9IG1fbmVlZHNMYXlvdXQ7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAko
cmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1NWR0Vs
ZW1lbnQ6OmdldEMKICAgICBpZiAoIWlzT3V0ZXJtb3N0U1ZHKCkpCiAgICAgICAgIG1hdC50cmFu
c2xhdGUoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpOwogCi0gICAgaWYgKGF0dHJp
YnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsKKyAgICBpZiAo
YXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFu
c2Zvcm0od2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUodGhpcykpOwogICAgICAg
ICBtYXQgPSB2aWV3Qm94ICogbWF0OwogICAgIH0KQEAgLTQxNCw3ICs0MTQsNyBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBTVkdTVkdFbGVtZW50OjpnZXRTCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbWF0ID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7CiAgICAg
bWF0LnRyYW5zbGF0ZShyb290TG9jYXRpb24ueCgpLCByb290TG9jYXRpb24ueSgpKTsKIAotICAg
IGlmIChhdHRyaWJ1dGVzKCktPmdldE5hbWVkSXRlbShTVkdOYW1lczo6dmlld0JveEF0dHIpKSB7
CisgICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShTVkdOYW1lczo6dmlld0Jv
eEF0dHIpKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdCb3ggPSB2aWV3Qm94
VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMp
KTsKICAgICAgICAgbWF0ID0gdmlld0JveCAqIG1hdDsKICAgICB9CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHls
ZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw3IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFNWR1N0eWxlZEVsZW1lbnQKIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gU1ZH
U3R5bGVkRWxlbWVudDo6Z2V0UHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKLSAgICBBdHRyaWJ1dGUqIGF0dHIgPSBtYXBwZWRBdHRyaWJ1dGVzKCktPmdldEF0dHJp
YnV0ZUl0ZW0obmFtZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZSogYXR0ciA9IG1hcHBlZEF0dHJp
YnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBuYW1lLCBu
dWxsQXRvbSkpOwogICAgIGlmICghYXR0ciB8fCAhYXR0ci0+aXNNYXBwZWRBdHRyaWJ1dGUoKSB8
fCAhYXR0ci0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFdlYkNvcmUveG1s
L1hQYXRoRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aEZ1bmN0
aW9ucy5jcHAJKHJldmlzaW9uIDQwNDcxKQorKysgV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzQsMzAgKzUzNCwzMCBAQCBWYWx1ZSBGdW5MYW5nOjpl
dmFsdWF0ZSgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIGxhbmcgPSBhcmcoMCktPmV2YWx1YXRlKCku
dG9TdHJpbmcoKTsKIAotICAgIFJlZlB0cjxOb2RlPiBsYW5nTm9kZSA9IDA7CisgICAgQXR0cmli
dXRlKiBsYW5ndWFnZUF0dHJpYnV0ZSA9IDA7CiAgICAgTm9kZSogbm9kZSA9IGV2YWx1YXRpb25D
b250ZXh0KCkubm9kZS5nZXQoKTsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBOYW1lZEF0
dHJNYXAqIGF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygpOwogICAgICAgICBpZiAoYXR0cnMpCi0g
ICAgICAgICAgICBsYW5nTm9kZSA9IGF0dHJzLT5nZXROYW1lZEl0ZW1OUyhYTUxOYW1lczo6eG1s
TmFtZXNwYWNlVVJJLCAibGFuZyIpOwotICAgICAgICBpZiAobGFuZ05vZGUpCisgICAgICAgICAg
ICBsYW5ndWFnZUF0dHJpYnV0ZSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5h
bWUobnVsbEF0b20sIFhNTE5hbWVzOjp4bWxOYW1lc3BhY2VVUkksICJsYW5nIikpOworICAgICAg
ICBpZiAobGFuZ3VhZ2VBdHRyaWJ1dGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICB9CiAKLSAgICBpZiAoIWxhbmdOb2RlKQorICAg
IGlmICghbGFuZ3VhZ2VBdHRyaWJ1dGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0
cmluZyBsYW5nTm9kZVZhbHVlID0gbGFuZ05vZGUtPm5vZGVWYWx1ZSgpOworICAgIFN0cmluZyBs
YW5nVmFsdWUgPSBsYW5ndWFnZUF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobGFuZ05vZGVWYWx1ZSwgbGFuZykpCisg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShsYW5nVmFsdWUsIGxhbmcpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgLy8gUmVtb3ZlIHN1ZmZpeGVzIG9uZSBieSBvbmUu
Ci0gICAgICAgIGludCBpbmRleCA9IGxhbmdOb2RlVmFsdWUucmV2ZXJzZUZpbmQoJy0nKTsKKyAg
ICAgICAgaW50IGluZGV4ID0gbGFuZ1ZhbHVlLnJldmVyc2VGaW5kKCctJyk7CiAgICAgICAgIGlm
IChpbmRleCA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBsYW5nTm9kZVZhbHVl
ID0gbGFuZ05vZGVWYWx1ZS5sZWZ0KGluZGV4KTsKKyAgICAgICAgbGFuZ1ZhbHVlID0gbGFuZ1Zh
bHVlLmxlZnQoaW5kZXgpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNv
cmUveG1sL1hQYXRoTm9kZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhO
b2RlU2V0LmNwcAkocmV2aXNpb24gNDA0NzEpCisrKyBXZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBOb2RlU2V0Ojpzb3J0
KCkgY29uc3QKICAgICAKICAgICAvLyBJdCBpcyBub3QgcG9zc2libGUgdG8ganVzdCBhc3NpZ24g
dGhlIHJlc3VsdCB0byBtX25vZGVzLCBiZWNhdXNlIHNvbWUgbm9kZXMgbWF5IGdldCBkZXJlZmVy
ZW5jZWQgYW5kIGRlc3Ryb3llZC4KICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gc29ydGVkTm9k
ZXM7Ci0gICAgc29ydGVkTm9kZXMucmVzZXJ2ZUNhcGFjaXR5KG5vZGVDb3VudCk7CisgICAgc29y
dGVkTm9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2RlQ291bnQpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBub2RlQ291bnQ7ICsraSkKICAgICAgICAgc29ydGVkTm9kZXMuYXBw
ZW5kKHBhcmVudE1hdHJpeFtpXVswXSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL3htbC9YUGF0aFN0
ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoU3RlcC5jcHAJKHJldmlzaW9u
IDQwNDcxKQorKysgV2ViQ29yZS94bWwvWFBhdGhTdGVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTkyLDkgKzE5Miw5IEBAIHZvaWQgU3RlcDo6bm9kZXNJbkF4aXMoTm9kZSogY29udGV4dCwgTm8K
ICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9u
ZyBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgUmVm
UHRyPE5vZGU+IG4gPSBhdHRycy0+aXRlbShpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZU1h
dGNoZXMobi5nZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVuZChuLnJlbGVh
c2UoKSk7CisgICAgICAgICAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRycy0+YXR0
cmlidXRlSXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZU1hdGNoZXMoYXR0cmlidXRl
LT5hdHRyKCkpKQorICAgICAgICAgICAgICAgICAgICBub2Rlcy5hcHBlbmQoYXR0cmlidXRlLT5h
dHRyKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Cg==
</data>
<flag name="review"
          id="13112"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27242</attachid>
            <date>2009-02-01 19:03:31 -0800</date>
            <delta_ts>2009-02-01 20:10:31 -0800</delta_ts>
            <desc>patch — this time without TextResourceDecoder or reserveInitialCapacity changes as requested</desc>
            <filename>SpeedupsPatch.txt</filename>
            <type>text/plain</type>
            <size>62028</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ4IEBACisyMDA5LTAyLTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcg
MjM2NzQ6IFNwZWVkIHVwIHNvbWUgdGhpbmdzIGJhc2VkIG9uIHByb2ZpbGluZyB0aGUgcGFnZSBs
b2FkIHRlc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNjc0CisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQpOiBVc2Ug
dGhlIG5ld2x5IG5hbWVkIGNzc1RhcmdldCBpbnN0ZWFkCisgICAgICAgIG9mIHRoZSBvbGQgbmFt
ZSwgZ2V0Q1NTVGFyZ2V0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKTogRGl0dG8uCisKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjppbnNl
cnRlZEludG9Eb2N1bWVudCk6IE1vdmVkIGNvZGUgZnJvbSBOb2RlIGluIGhlcmUgcmF0aGVyIHRo
YW4KKyAgICAgICAgY2FsbGluZyB0aHJvdWdoIHRvIEV2ZW50VGFyZ2V0Tm9kZTo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpyZW1vdmVkRnJv
bURvY3VtZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjppbnNl
cnRlZEludG9UcmVlKTogVHdlYWtlZCBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRhaW5l
ck5vZGU6OnJlbW92ZWRGcm9tVHJlZSk6IERpdHRvLgorCisgICAgICAgICogZG9tL0NvbnRhaW5l
ck5vZGUuaDogTW92ZWQgdGhlIGNvbnN0cnVjdG9yIGRlZmluaXRpb24gaGVyZSBhbmQgbWFkZSBp
dCBpbmxpbmUuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnQ6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzRnJvbUFsbE5vZGVzKTogSXRlcmF0
ZSB0aGUgZG9jdW1lbnQgZWxlbWVudCBhbmQKKyAgICAgICAgaXRzIGNvbnRlbnRzIG9ubHkgdG8g
YXZvaWQgdGhlIGRvY3VtZW50IHR5cGUgbm9kZS4gVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHRo
ZSB2aXJ0dWFsCisgICAgICAgIGZ1bmN0aW9uIGNhbGwgdG8gaXNFdmVudFRhcmdldE5vZGUgZnJv
bSB0aGUgbG9vcC4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRDU1NUYXJnZXQpOiBD
aGFuZ2VkIGFyZ3VtZW50IHRvIGJlIGFuIEVsZW1lbnQgcmF0aGVyIHRoYW4gTm9kZS4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOiBDaGFuZ2VkIENTUyB0YXJnZXQgdG8gYmUgYW4gRWxlbWVu
dCByYXRoZXIgdGhhbiBhIE5vZGUuIFJlbmFtZWQKKyAgICAgICAgZ2V0Q1NTVGFyZ2V0IHRvIGNz
c1RhcmdldC4KKworICAgICAgICAqIGRvbS9FdmVudFRhcmdldE5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRUYXJnZXROb2RlOjpyZW1vdmVBbGxFdmVudExpc3RlbmVyc1Nsb3dDYXNl
KTogUmVuYW1lZCBhbmQgdHVybmVkIHRoZQorICAgICAgICByYXJlIGRhdGEgY2hlY2sgaW50byBh
biBhc3NlcnRpb24uCisKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXROb2RlLmg6IE1hZGUgdGhl
IGZhc3QgY2FzZSBvZiByZW1vdmVBbGxFdmVudExpc3RlbmVycyBiZSBpbmxpbmUuCisgICAgICAg
IEFsc28gbW92ZWQgdGhlIGNvbnN0cnVjdG9yIGRlZmluaXRpb24gaGVyZSBhbmQgbWFkZSBpdCBp
bmxpbmUuIEFuZCBhZGRlZCB0b0V2ZW50VGFyZ2V0Tm9kZSwKKyAgICAgICAgbWF0Y2hpbmcgdGhl
IGRlc2lnbiBvZiB0aGUgcmVuZGVyIHRyZWUgY2hlY2tlZCBjYXN0cy4gTGF0ZXIgd2UgY2FuIG1p
Z3JhdGUgYWxsIGNhbGxlcnMKKyAgICAgICAgZnJvbSBFdmVudFRhcmdldE5vZGVDYXN0IHRvIHRv
RXZlbnRUYXJnZXROb2RlLgorCisgICAgICAgICogZG9tL05hbWVkQXR0ck1hcC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpOYW1lZEF0dHJNYXA6OmRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCk6
IEFkZGVkLiBGYWN0b3JlZCBvdXQgZnJvbQorICAgICAgICBjbGVhckF0dHJpYnV0ZXMsIHNvIHdl
IGNvdWxkIHVzZSB0aGlzIGxvb3AgaW4gY2FzZXMgd2hlcmUgd2UncmUgbm90IGNsZWFyaW5nIHRo
ZSBhdHRyaWJ1dGVzLgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRBdHRyTWFwOjp+TmFtZWRBdHRy
TWFwKTogQ2FsbCBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQgaW5zdGVhZCBvZgorICAgICAg
ICBjbGVhckF0dHJpYnV0ZXMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkQXR0ck1hcDo6
Y2xlYXJBdHRyaWJ1dGVzKTogQ2FsbCBkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQgaGVyZS4K
KyAgICAgICAgKFdlYkNvcmU6Ok5hbWVkQXR0ck1hcDo6ZGV0YWNoRnJvbUVsZW1lbnQpOiBDYWxs
IGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCBpbnN0ZWFkIG9mCisgICAgICAgIGNsZWFyQXR0
cmlidXRlcy4gV2UgZG9uJ3QgbmVlZCB0byBjbGVhciB0aGUgYXR0cmlidXRlcyBhcnJheSBqdXN0
IGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMKKyAgICAgICAgZ29pbmcgYXdheSwgc28gZG9uJ3QuCisg
ICAgICAgIChXZWJDb3JlOjpOYW1lZEF0dHJNYXA6OnZpcnR1YWxMZW5ndGgpOiBBZGRlZC4KKwor
ICAgICAgICAqIGRvbS9OYW1lZEF0dHJNYXAuaDogTWFkZSBhbGwgdGhlIHZpcnR1YWwgZnVuY3Rp
b25zIGluaGVyaXRlZCBmcm9tIE5hbWVkTm9kZU1hcCBiZSBwcml2YXRlLgorICAgICAgICBUaGVz
ZSBhcmUgYWxsIHVubmVjZXNzYXJpbHkgaW5lZmZpY2llbnQgZm9yIHVzZSBvdXRzaWRlIHRoZSBE
T00uIENoYW5nZWQgbGVuZ3RoIHRvIGJlIGEKKyAgICAgICAgbm9uLXZpcnR1YWwgZnVuY3Rpb24u
IFRoaXMgd2FzIGEgZmFpcmx5IGhvdCBmdW5jdGlvbi4KKworICAgICAgICAqIGRvbS9OYW1lZE1h
cHBlZEF0dHJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWRNYXBwZWRBdHRyTWFwOjpz
ZXRDbGFzcyk6IENoYW5nZWQgdG8gdXNlIGVsZW1lbnQoKSBmdW5jdGlvbiBub3cgdGhhdCB0aGUK
KyAgICAgICAgbV9lbGVtZW50IGRhdGEgbWVtYmVyIGlzIHByaXZhdGUuCisKKyAgICAgICAgKiBk
b20vTmFtZWRNYXBwZWRBdHRyTWFwLmg6IE1hZGUgYSBmZXcgZnVuY3Rpb25zIHByaXZhdGUuIE1h
ZGUgdGhlCisgICAgICAgIGhhc01hcHBlZEF0dHJpYnV0ZXMgZnVuY3Rpb24gbm9uLXZpcnR1YWwu
CisKKyAgICAgICAgKiBkb20vTmFtZWROb2RlTWFwLmg6IE1hZGUgbGVuZ3RoIGEgbm9uLXZpcnR1
YWwgaW5saW5lIGZ1bmN0aW9uIHRoYXQgY2FsbHMgYSB2aXJ0dWFsCisgICAgICAgIGZ1bmN0aW9u
LCBuYW1lIHZpcnR1YWxMZW5ndGguIFRoaXMgbGV0cyBOYW1lZEF0dHJNYXA6Omxlbmd0aCBiZSBh
IG5vbi12aXJ0dWFsIGZ1bmN0aW9uLgorCisgICAgICAgICogZG9tL05vZGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Tm9kZTo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiBSZW1vdmVkIGNhbGwgdG8g
aW5zZXJ0ZWRJbnRvVHJlZSwgc2luY2UgaXQncworICAgICAgICBvbmx5IG5vbi1lbXB0eSBpbiBz
dWJjbGFzc2VzIG9mIENvbnRhaW5lck5vZGUuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjpyZW1v
dmVkRnJvbURvY3VtZW50KTogRGl0dG8uIEFsc28gcmVtb3ZlZCBzZXRDU1NUYXJnZXQuIFNpbmNl
IGEgQ1NTCisgICAgICAgIHRhcmdldCBoYXMgdG8gYmUgYW4gRWxlbWVudCwgdGhpcyBjYW4gYmUg
bW92ZWQgZG93biB0byBDb250YWluZXJOb2RlIChvciBpdCBjb3VsZCBiZQorICAgICAgICBtb3Zl
ZCBkb3duIHRvIEVsZW1lbnQgZm9yIHRoYXQgbWF0dGVyKS4KKworICAgICAgICAqIGRvbS9RdWFs
aWZpZWROYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlF1YWxpZmllZE5hbWU6OlF1YWxpZmll
ZE5hbWUpOiBSZW1vdmVkIGRvdWJsZSBpbml0aWFsaXphdGlvbiBvZiBtX2ltcGwuCisKKyAgICAg
ICAgKiBkb20vUXVhbGlmaWVkTmFtZS5oOiBNb3ZlZCB0aGUgZGVzdHJ1Y3RvciwgY29weSBjb25z
dHJ1Y3RvciwgYXNzaWdubWVudCBvcGVyYXRvciwgYW5kCisgICAgICAgIHNldFByZWZpeCBmdW5j
dGlvbiBkZWZpbml0aW9ucyBpbnRvIHRoZSBoZWFkZXIgYW5kIG1hZGUgdGhlbSBpbmxpbmUuCisK
KyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQXJlYUVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQpOiBVcGRhdGVkIHNpbmNlIHRoZSBzdG9yZWQg
cmVnaW9uIGlzIG5vdworICAgICAgICBhbiBPd25QdHIuCisgICAgICAgIChXZWJDb3JlOjpIVE1M
QXJlYUVsZW1lbnQ6OmFjY2Vzc0tleSk6IFVzZSBBdG9taWNTdHJpbmcuCisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnNldEFjY2Vzc0tleSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEFyZWFFbGVtZW50OjphbHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxBcmVhRWxlbWVudDo6c2V0QWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MQXJl
YUVsZW1lbnQ6OmNvb3Jkcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVt
ZW50OjpzZXRDb29yZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBcmVhRWxlbWVu
dDo6c2V0SHJlZik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50Ojpz
aGFwZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpzZXRTaGFw
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFyZWFFbGVtZW50OjpzZXRUYXJnZXQp
OiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTEFyZWFFbGVtZW50Lmg6IFVzZSBBdG9taWNT
dHJpbmcgaW4gdGhlIGdldHRlciBhbmQgc2V0dGVyIERPTSBvcGVyYXRpb25zLgorICAgICAgICBD
aGFuZ2UgdGhlIHJlZ2lvbiBkYXRhIG1lbWJlciB0byBiZSBhbiBPd25QdHI8UGF0aD4gaW5zdGVh
ZCBvZiBhIFBhdGggdG8gb3B0aW1pemUKKyAgICAgICAgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIGFu
IGFyZWEgZWxlbWVudCBpcyBwYXJzZWQgYnV0IG5ldmVyIGhpdC10ZXN0ZWQuIFRoaXMgY291bGQK
KyAgICAgICAgYWxzbyBoYXZlIGJlZW4gZG9uZSBieSBjaGFuZ2luZyB0aGUgUGF0aCBjbGFzcydz
IG51bGwgY2FzZSB0byBiZSBtb3JlIGVmZmljaWVudCwKKyAgICAgICAgYnV0IHRoaXMgc2VlbXMg
ZmluZS4KKworICAgICAgICAqIGh0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVmlld1NvdXJjZURvY3VtZW50OjpjcmVhdGVDb250YWluaW5nVGFi
bGUpOiBVc2UgYWRkQXR0cmlidXRlIGluc3RlYWQKKyAgICAgICAgb2YgaW5zZXJ0QXR0cmlidXRl
LgorICAgICAgICAoV2ViQ29yZTo6SFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6YWRkU3BhbldpdGhD
bGFzc05hbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1l
bnQ6OmFkZExpbmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9j
dW1lbnQ6OmFkZExpbmspOiBEaXR0by4KKworICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Z290b0FuY2hvcik6IFVzZSBjc3NU
YXJnZXQgdW5kZXIgaXRzIG5ldyBuYW1lIGluc3RlYWQKKyAgICAgICAgb2YgaXRzIG9sZCBuYW1l
IGdldENTU1RhcmdldC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoV2lkdGhN
YXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhXaWR0aE1hcDo6bG9jYXRlUGFnZVNsb3dD
YXNlKTogUmVmYWN0b3JlZCBmcm9tIGxvY2F0ZVBhZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaFdpZHRoTWFwLmg6IE1hZGUgbW9zdCBvZiB0aGlzIGNsYXNzIGlubGluZS4K
KyAgICAgICAgQ2hhbmdlZCBtX3BhZ2VzIHRvIHVzZSBPd25QdHIuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5nLmg6IFJlbW92ZSBpbmNsdWRlIG5vIGxvbmdlciBuZWVk
ZWQgc2luY2UKKyAgICAgICAgU3RyaW5nSW1wbC5oIGluY2x1ZGVzIGl0LgorCisgICAgICAgICog
cGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0lt
cGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UpOiBSZWZhY3RvcmVkCisg
ICAgICAgIGZyb20gY3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnMuCisgICAgICAgICogcGxh
dGZvcm0vdGV4dC9TdHJpbmdJbXBsLmg6IE1vdmVkIHRoZSBkZWZpbml0aW9uIG9mCisgICAgICAg
IGNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzIGhlcmUgYW5kIG1hZGUgaXQgaW5saW5lLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmZpcnN0TGluZVN0eWxlU2xvd0Nhc2UpOiBSZWZhY3RvcmVkIGZyb20K
KyAgICAgICAgZmlyc3RMaW5lU3R5bGUuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0Lmg6IE1vdmVkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaXJzdExpbmVTdHlsZQorICAgICAg
ICBmdW5jdGlvbiBoZXJlIGFuZCBtYWRlIGl0IGlubGluZS4gTW92ZWQgdGhlIGRlZmluaXRpb24g
b2YgdGhlCisgICAgICAgIGRvY3VtZW50QmVpbmdEZXN0cm95ZWQgZnVuY3Rpb24gaGVyZSBhbmQg
bWFkZSBpdCBpbmxpbmUuCisKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpnZXRDVE0pOiBVc2UgZ2V0QXR0cmlidXRlSXRl
bSBpbnN0ZWFkIG9mCisgICAgICAgIGdldE5hbWVkSXRlbSBoZXJlIHNpbmNlIGl0IGFjY29tcGxp
c2hlcyB0aGUgc2FtZSB0aGluZyBidXQgaXMgbW9yZSBlZmZpY2llbnQuCisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpnZXRTY3JlZW5DVE0pOiBEaXR0by4KKyAgICAgICAgKiBzdmcv
U1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50
OjpnZXRQcmVzZW50YXRpb25BdHRyaWJ1dGUpOiBEaXR0by4KKworICAgICAgICAqIHhtbC9YUGF0
aEZ1bmN0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYUGF0aDo6RnVuTGFuZzo6ZXZhbHVh
dGUpOiBVc2UgZ2V0QXR0cmlidXRlSXRlbSBpbnN0ZWFkIG9mCisgICAgICAgIGdldE5hbWVkSXRl
bU5TLgorCisgICAgICAgICogeG1sL1hQYXRoU3RlcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
UGF0aDo6U3RlcDo6bm9kZXNJbkF4aXMpOiBVc2UgYXR0cmlidXRlSXRlbSBpbnN0ZWFkIG9mIGl0
ZW0gaGVyZS4KKwogMjAwOS0wMi0wMSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEpvaG4gU3VsbGl2YW4uCkluZGV4OiBXZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVj
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMzLDcgKzkzMyw3IEBAIGJvb2wgQ1NTU3R5bGVT
ZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGgKICAgICAgICAgICAgIChzLT5ob3ZlcmVkKCkgPT0g
bV9lbGVtZW50LT5ob3ZlcmVkKCkpICYmCiAgICAgICAgICAgICAocy0+YWN0aXZlKCkgPT0gbV9l
bGVtZW50LT5hY3RpdmUoKSkgJiYKICAgICAgICAgICAgIChzLT5mb2N1c2VkKCkgPT0gbV9lbGVt
ZW50LT5mb2N1c2VkKCkpICYmCi0gICAgICAgICAgICAocyAhPSBzLT5kb2N1bWVudCgpLT5nZXRD
U1NUYXJnZXQoKSAmJiBtX2VsZW1lbnQgIT0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5nZXRDU1NU
YXJnZXQoKSkgJiYKKyAgICAgICAgICAgIChzICE9IHMtPmRvY3VtZW50KCktPmNzc1RhcmdldCgp
ICYmIG1fZWxlbWVudCAhPSBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmNzc1RhcmdldCgpKSAmJgog
ICAgICAgICAgICAgKHMtPmdldEF0dHJpYnV0ZSh0eXBlQXR0cikgPT0gbV9lbGVtZW50LT5nZXRB
dHRyaWJ1dGUodHlwZUF0dHIpKSAmJgogICAgICAgICAgICAgKHMtPmdldEF0dHJpYnV0ZShYTUxO
YW1lczo6bGFuZ0F0dHIpID09IG1fZWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5n
QXR0cikpICYmCiAgICAgICAgICAgICAocy0+Z2V0QXR0cmlidXRlKGxhbmdBdHRyKSA9PSBtX2Vs
ZW1lbnQtPmdldEF0dHJpYnV0ZShsYW5nQXR0cikpICYmCkBAIC0yMjA5LDcgKzIyMDksNyBAQCBi
b29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9UYXJnZXQ6Ci0gICAgICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+Z2V0Q1NT
VGFyZ2V0KCkpCisgICAgICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+Y3NzVGFy
Z2V0KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQW55TGluazoKSW5k
ZXg6IFdlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDYs
MTMgKzQ2LDYgQEAgc3RhdGljIE5vZGVDYWxsYmFja1F1ZXVlKiBzX3Bvc3RBdHRhY2hDYQogCiBz
dGF0aWMgc2l6ZV90IHNfYXR0YWNoRGVwdGggPSAwOwogCi1Db250YWluZXJOb2RlOjpDb250YWlu
ZXJOb2RlKERvY3VtZW50KiBkb2MsIGJvb2wgaXNFbGVtZW50KQotICAgIDogRXZlbnRUYXJnZXRO
b2RlKGRvYywgaXNFbGVtZW50LCB0cnVlKQotICAgICwgbV9maXJzdENoaWxkKDApCi0gICAgLCBt
X2xhc3RDaGlsZCgwKQotewotfQotCiB2b2lkIENvbnRhaW5lck5vZGU6OnJlbW92ZUFsbENoaWxk
cmVuKCkKIHsKICAgICByZW1vdmVBbGxDaGlsZHJlbkluQ29udGFpbmVyPE5vZGUsIENvbnRhaW5l
ck5vZGU+KHRoaXMpOwpAQCAtNTk0LDM0ICs1ODcsMzYgQEAgdm9pZCBDb250YWluZXJOb2RlOjpk
ZXRhY2goKQogCiB2b2lkIENvbnRhaW5lck5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsK
LSAgICBFdmVudFRhcmdldE5vZGU6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgZm9yIChO
b2RlICpjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCisgICAgc2V0SW5Eb2N1bWVudCh0cnVlKTsKKyAgICBpbnNlcnRlZEludG9UcmVlKGZh
bHNlKTsKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY2hpbGQtPmluc2VydGVkSW50b0RvY3Vt
ZW50KCk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7
Ci0gICAgRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVkRnJvbURvY3VtZW50KCk7Ci0gICAgZm9yIChO
b2RlICpjaGlsZCA9IG1fZmlyc3RDaGlsZDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCisgICAgaWYgKGRvY3VtZW50KCktPmNzc1RhcmdldCgpID09IHRoaXMpCisgICAgICAg
IGRvY3VtZW50KCktPnNldENTU1RhcmdldCgwKTsKKyAgICBzZXRJbkRvY3VtZW50KGZhbHNlKTsK
KyAgICByZW1vdmVkRnJvbVRyZWUoZmFsc2UpOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX2Zp
cnN0Q2hpbGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBj
aGlsZC0+cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6Omlu
c2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQogewotICAgIEV2ZW50VGFyZ2V0Tm9kZTo6aW5zZXJ0
ZWRJbnRvVHJlZShkZWVwKTsKLSAgICBpZiAoZGVlcCkgewotICAgICAgICBmb3IgKE5vZGUgKmNo
aWxkID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
LSAgICAgICAgICAgIGNoaWxkLT5pbnNlcnRlZEludG9UcmVlKGRlZXApOwotICAgIH0KKyAgICBp
ZiAoIWRlZXApCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9maXJz
dENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY2hp
bGQtPmluc2VydGVkSW50b1RyZWUodHJ1ZSk7CiB9CiAKIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVt
b3ZlZEZyb21UcmVlKGJvb2wgZGVlcCkKIHsKLSAgICBFdmVudFRhcmdldE5vZGU6OnJlbW92ZWRG
cm9tVHJlZShkZWVwKTsKLSAgICBpZiAoZGVlcCkgewotICAgICAgICBmb3IgKE5vZGUgKmNoaWxk
ID0gbV9maXJzdENoaWxkOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAg
ICAgICAgICAgIGNoaWxkLT5yZW1vdmVkRnJvbVRyZWUoZGVlcCk7Ci0gICAgfQorICAgIGlmICgh
ZGVlcCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX2ZpcnN0Q2hp
bGQ7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBjaGlsZC0+
cmVtb3ZlZEZyb21UcmVlKHRydWUpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6OmNoaWxkcmVu
Q2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBh
ZnRlckNoYW5nZSwgaW50IGNoaWxkQ291bnREZWx0YSkKSW5kZXg6IFdlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgJKHJl
dmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05Niw3ICs5NiwxNCBAQCBwcml2YXRlOgogICAgIE5vZGUqIG1fZmlyc3RDaGlsZDsK
ICAgICBOb2RlKiBtX2xhc3RDaGlsZDsKIH07Ci0gICAgCisKK2lubGluZSBDb250YWluZXJOb2Rl
OjpDb250YWluZXJOb2RlKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBpc0VsZW1lbnQpCisgICAg
OiBFdmVudFRhcmdldE5vZGUoZG9jdW1lbnQsIGlzRWxlbWVudCwgdHJ1ZSkKKyAgICAsIG1fZmly
c3RDaGlsZCgwKQorICAgICwgbV9sYXN0Q2hpbGQoMCkKK3sKK30KKwogaW5saW5lIHVuc2lnbmVk
IE5vZGU6OmNvbnRhaW5lckNoaWxkTm9kZUNvdW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXND
b250YWluZXJOb2RlKCkpOwpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw3IEBACiAgKiAg
ICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIChodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggRGF2aWQgTGV2aW4g
KGxldmluQGNocm9taXVtLm9yZykKICAqCkBAIC0xMzM4LDExICsxMzM4LDkgQEAgdm9pZCBEb2N1
bWVudDo6cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNGcgogICAgICAgICBtX3dpbmRvd0V2ZW50TGlz
dGVuZXJzW2ldLT5zZXRSZW1vdmVkKHRydWUpOwogICAgIG1fd2luZG93RXZlbnRMaXN0ZW5lcnMu
Y2xlYXIoKTsKICAgICByZW1vdmVBbGxEaXNjb25uZWN0ZWROb2RlRXZlbnRMaXN0ZW5lcnMoKTsK
LSAgICBmb3IgKE5vZGUgKm4gPSB0aGlzOyBuOyBuID0gbi0+dHJhdmVyc2VOZXh0Tm9kZSgpKSB7
Ci0gICAgICAgIGlmICghbi0+aXNFdmVudFRhcmdldE5vZGUoKSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBFdmVudFRhcmdldE5vZGVDYXN0KG4pLT5yZW1vdmVBbGxFdmVudExpc3Rl
bmVycygpOwotICAgIH0KKyAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSB0aGlzLT5kb2N1
bWVudEVsZW1lbnQoKTsKKyAgICBmb3IgKE5vZGUqIG5vZGUgPSBkb2N1bWVudEVsZW1lbnQ7IG5v
ZGU7IG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKGRvY3VtZW50RWxlbWVudCkpCisgICAg
ICAgIHRvRXZlbnRUYXJnZXROb2RlKG5vZGUpLT5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpOwog
fQogCiB2b2lkIERvY3VtZW50OjpyZWdpc3RlckRpc2Nvbm5lY3RlZE5vZGVXaXRoRXZlbnRMaXN0
ZW5lcnMoTm9kZSogbm9kZSkKQEAgLTI1NTcsNyArMjU1NSw3IEBAIFNldEZvY3VzZWROb2RlRG9u
ZToKICAgICByZXR1cm4gIWZvY3VzQ2hhbmdlQmxvY2tlZDsKICAgfQogICAKLXZvaWQgRG9jdW1l
bnQ6OnNldENTU1RhcmdldChOb2RlKiBuKQordm9pZCBEb2N1bWVudDo6c2V0Q1NTVGFyZ2V0KEVs
ZW1lbnQqIG4pCiB7CiAgICAgaWYgKG1fY3NzVGFyZ2V0KQogICAgICAgICBtX2Nzc1RhcmdldC0+
c2V0Q2hhbmdlZCgpOwpAQCAtMjU2NiwxMSArMjU2NCw2IEBAIHZvaWQgRG9jdW1lbnQ6OnNldENT
U1RhcmdldChOb2RlKiBuKQogICAgICAgICBuLT5zZXRDaGFuZ2VkKCk7CiB9CiAKLU5vZGUqIERv
Y3VtZW50OjpnZXRDU1NUYXJnZXQoKSBjb25zdAotewotICAgIHJldHVybiBtX2Nzc1RhcmdldDsK
LX0KLQogdm9pZCBEb2N1bWVudDo6YXR0YWNoTm9kZUl0ZXJhdG9yKE5vZGVJdGVyYXRvciAqbmkp
CiB7CiAgICAgbV9ub2RlSXRlcmF0b3JzLmFkZChuaSk7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDQw
NDcyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw3ICsz
LDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01MzMsOCAr
NTMzLDggQEAgcHVibGljOgogICAgIHZvaWQgYWN0aXZlQ2hhaW5Ob2RlRGV0YWNoZWQoTm9kZSop
OwogCiAgICAgLy8gVXBkYXRlcyBmb3IgOnRhcmdldCAoQ1NTMyBzZWxlY3RvcikuCi0gICAgdm9p
ZCBzZXRDU1NUYXJnZXQoTm9kZSopOwotICAgIE5vZGUqIGdldENTU1RhcmdldCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0Q1NTVGFyZ2V0KEVsZW1lbnQqKTsKKyAgICBFbGVtZW50KiBjc3NUYXJnZXQo
KSBjb25zdCB7IHJldHVybiBtX2Nzc1RhcmdldDsgfQogICAgIAogICAgIHZvaWQgc2V0RG9jdW1l
bnRDaGFuZ2VkKGJvb2wpOwogCkBAIC05MzUsNyArOTM1LDcgQEAgcHJpdmF0ZToKIAogICAgIFRp
bWVyPERvY3VtZW50PiBtX3VwZGF0ZUZvY3VzQXBwZWFyYW5jZVRpbWVyOwogCi0gICAgTm9kZSog
bV9jc3NUYXJnZXQ7CisgICAgRWxlbWVudCogbV9jc3NUYXJnZXQ7CiAgICAgCiAgICAgYm9vbCBt
X3Byb2Nlc3NpbmdMb2FkRXZlbnQ7CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwpJbmRleDogV2Vi
Q29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9F
dmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvZG9tL0V2ZW50
VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAgICAgIChDKSAyMDA3LCAyMDA4
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAg
LTYxLDExICs2MSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIHN0YXRpYyBIYXNoU2V0
PEV2ZW50VGFyZ2V0Tm9kZSo+KiBnTm9kZXNEaXNwYXRjaGluZ1NpbXVsYXRlZENsaWNrcyA9IDA7
IAogCi1FdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCogZG9jLCBib29s
IGlzRWxlbWVudCwgYm9vbCBpc0NvbnRhaW5lciwgYm9vbCBpc1RleHQpCi0gICAgOiBOb2RlKGRv
YywgaXNFbGVtZW50LCBpc0NvbnRhaW5lciwgaXNUZXh0KQotewotfQotCiBFdmVudFRhcmdldE5v
ZGU6On5FdmVudFRhcmdldE5vZGUoKQogewogICAgIGlmICghZXZlbnRMaXN0ZW5lcnMoKS5pc0Vt
cHR5KCkgJiYgIWluRG9jdW1lbnQoKSkKQEAgLTE5MSwxMCArMTg2LDkgQEAgdm9pZCBFdmVudFRh
cmdldE5vZGU6OnJlbW92ZUV2ZW50TGlzdGVuZQogICAgIH0KIH0KIAotdm9pZCBFdmVudFRhcmdl
dE5vZGU6OnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCkKK3ZvaWQgRXZlbnRUYXJnZXROb2RlOjpy
ZW1vdmVBbGxFdmVudExpc3RlbmVyc1Nsb3dDYXNlKCkKIHsKLSAgICBpZiAoIWhhc1JhcmVEYXRh
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiAKICAgICBS
ZWdpc3RlcmVkRXZlbnRMaXN0ZW5lclZlY3RvciogbGlzdGVuZXJzID0gcmFyZURhdGEoKS0+bGlz
dGVuZXJzKCk7CiAgICAgaWYgKCFsaXN0ZW5lcnMpCkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRh
cmdldE5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAko
cmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL2RvbS9FdmVudFRhcmdldE5vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xs
IChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4sIGJvb2wgdXNlQ2FwdHVyZSk7CiAg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIEV2ZW50TGlzdGVuZXIqLCBib29sIHVzZUNhcHR1cmUpOwogICAgIHZpcnR1YWwg
Ym9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCByZW1vdmVBbGxFdmVudExpc3RlbmVycygpOworICAgIHZvaWQgcmVtb3ZlQWxsRXZl
bnRMaXN0ZW5lcnMoKSB7IGlmIChoYXNSYXJlRGF0YSgpKSByZW1vdmVBbGxFdmVudExpc3RlbmVy
c1Nsb3dDYXNlKCk7IH0KIAogICAgIHZvaWQgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4p
OwogICAgIHZvaWQgc2V0SW5saW5lRXZlbnRMaXN0ZW5lckZvclR5cGVBbmRBdHRyaWJ1dGUoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIEF0dHJpYnV0ZSopOwpAQCAtMTg3LDE4ICsxODcs
NDAgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQo
KSB7IHJlZigpOyB9CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVm
KCk7IH0KKworICAgIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnNTbG93Q2FzZSgpOwogfTsK
IAotaW5saW5lIEV2ZW50VGFyZ2V0Tm9kZSogRXZlbnRUYXJnZXROb2RlQ2FzdChOb2RlKiBuKSAK
K2lubGluZSBFdmVudFRhcmdldE5vZGU6OkV2ZW50VGFyZ2V0Tm9kZShEb2N1bWVudCogZG9jdW1l
bnQsIGJvb2wgaXNFbGVtZW50LCBib29sIGlzQ29udGFpbmVyLCBib29sIGlzVGV4dCkKKyAgICA6
IE5vZGUoZG9jdW1lbnQsIGlzRWxlbWVudCwgaXNDb250YWluZXIsIGlzVGV4dCkKK3sKK30KKwor
aW5saW5lIEV2ZW50VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUoTm9kZSogbm9kZSkKK3sg
CisgICAgQVNTRVJUKG5vZGUtPmlzRXZlbnRUYXJnZXROb2RlKCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxFdmVudFRhcmdldE5vZGUqPihub2RlKTsKK30KKworaW5saW5lIGNvbnN0IEV2ZW50
VGFyZ2V0Tm9kZSogdG9FdmVudFRhcmdldE5vZGUoY29uc3QgTm9kZSogbm9kZSkKK3sgCisgICAg
QVNTRVJUKG5vZGUtPmlzRXZlbnRUYXJnZXROb2RlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBFdmVudFRhcmdldE5vZGUqPihub2RlKTsgCit9CisKKy8vIFRoaXMgd2lsbCBjYXRj
aCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9FdmVudFRhcmdldE5v
ZGUoY29uc3QgRXZlbnRUYXJnZXROb2RlKik7CisKKy8vIERlcHJlY2F0ZWQgbmFtZS4gUmVtb3Zl
IGNhbGxlcnMgYW5kIHN3aXRjaCB0byB0b0V2ZW50VGFyZ2V0Tm9kZS4KK2lubGluZSBFdmVudFRh
cmdldE5vZGUqIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoTm9kZSogbm9kZSkgCiB7IAotICAgIEFTU0VS
VChuLT5pc0V2ZW50VGFyZ2V0Tm9kZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXZlbnRU
YXJnZXROb2RlKj4obik7IAorICAgIHJldHVybiB0b0V2ZW50VGFyZ2V0Tm9kZShub2RlKTsgCiB9
CiAKLWlubGluZSBjb25zdCBFdmVudFRhcmdldE5vZGUqIEV2ZW50VGFyZ2V0Tm9kZUNhc3QoY29u
c3QgTm9kZSogbikgCisvLyBEZXByZWNhdGVkIG5hbWUuIFJlbW92ZSBjYWxsZXJzIGFuZCBzd2l0
Y2ggdG8gdG9FdmVudFRhcmdldE5vZGUuCitpbmxpbmUgY29uc3QgRXZlbnRUYXJnZXROb2RlKiBF
dmVudFRhcmdldE5vZGVDYXN0KGNvbnN0IE5vZGUqIG5vZGUpCiB7IAotICAgIEFTU0VSVChuLT5p
c0V2ZW50VGFyZ2V0Tm9kZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRXZlbnRU
YXJnZXROb2RlKj4obik7IAorICAgIHJldHVybiB0b0V2ZW50VGFyZ2V0Tm9kZShub2RlKTsgCiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkQXR0ck1h
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkocmV2aXNp
b24gNDA0NzIpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqICAgICAgICAgICAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKQEAgLTM5LDkgKzM5LDE4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGUKICAgICByZXR1cm4gZSAmJiBlLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVu
dCgpICYmIGUtPmlzSFRNTEVsZW1lbnQoKTsKIH0KIAoraW5saW5lIHZvaWQgTmFtZWRBdHRyTWFw
OjpkZXRhY2hBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoKQoreworICAgIHNpemVfdCBzaXplID0gbV9h
dHRyaWJ1dGVzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0cmlidXRlc1tpXS0+YXR0cigpKQorICAg
ICAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gMDsKKyAgICB9Cit9CisKIE5hbWVkQXR0ck1hcDo6
fk5hbWVkQXR0ck1hcCgpCiB7Ci0gICAgTmFtZWRBdHRyTWFwOjpjbGVhckF0dHJpYnV0ZXMoKTsg
Ly8gdmlydHVhbCBmdW5jdGlvbiwgcXVhbGlmeSB0byBiZSBleHBsaWNpdCBhbmQgc2xpZ2h0bHkg
ZmFzdGVyCisgICAgZGV0YWNoQXR0cmlidXRlc0Zyb21FbGVtZW50KCk7CiB9CiAKIGJvb2wgTmFt
ZWRBdHRyTWFwOjppc01hcHBlZEF0dHJpYnV0ZU1hcCgpIGNvbnN0CkBAIC0xOTAsMTEgKzE5OSw3
IEBAIEF0dHJpYnV0ZSogTmFtZWRBdHRyTWFwOjpnZXRBdHRyaWJ1dGVJdGUKIAogdm9pZCBOYW1l
ZEF0dHJNYXA6OmNsZWFyQXR0cmlidXRlcygpCiB7Ci0gICAgdW5zaWduZWQgbGVuID0gbGVuZ3Ro
KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICBpZiAo
QXR0ciogYXR0ciA9IG1fYXR0cmlidXRlc1tpXS0+YXR0cigpKQotICAgICAgICAgICAgYXR0ci0+
bV9lbGVtZW50ID0gMDsKLQorICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwogICAg
IG1fYXR0cmlidXRlcy5jbGVhcigpOwogfQogCkBAIC0yMDMsNyArMjA4LDcgQEAgdm9pZCBOYW1l
ZEF0dHJNYXA6OmRldGFjaEZyb21FbGVtZW50KCkKICAgICAvLyB3ZSBhbGxvdyBhIE5hbWVkQXR0
ck1hcCB3L28gYW4gZWxlbWVudCBpbiBjYXNlIHNvbWVvbmUgc3RpbGwgaGFzIGEgcmVmZXJlbmNl
CiAgICAgLy8gdG8gaWYgYWZ0ZXIgdGhlIGVsZW1lbnQgZ2V0cyBkZWxldGVkIC0gYnV0IHRoZSBt
YXAgaXMgbm93IGludmFsaWQKICAgICBtX2VsZW1lbnQgPSAwOwotICAgIGNsZWFyQXR0cmlidXRl
cygpOworICAgIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwogfQogCiB2b2lkIE5hbWVk
QXR0ck1hcDo6c2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZEF0dHJNYXAmIG90aGVyKQpAQCAtMzEw
LDQgKzMxNSw5IEBAIGJvb2wgTmFtZWRBdHRyTWFwOjptYXBzRXF1aXZhbGVudChjb25zdCAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAorc2l6ZV90IE5hbWVkQXR0ck1hcDo6dmlydHVhbExlbmd0aCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGxlbmd0aCgpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL2Rv
bS9OYW1lZEF0dHJNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAu
aAkocmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMSArMSw5IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtl
bGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICht
dWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI5LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1
ZGUgIk5hbWVkTm9kZU1hcC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CiAKICNpZmRlZiBfX09CSkNfXwpAQCAtNTAsMjYgKzQ3LDEwIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZEF0dHJNYXAmKTsKIAotICAg
IC8vIERPTSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgTmFtZWROb2RlTWFwCi0KLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxO
b2RlPiBnZXROYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3Ry
aW5nJiBsb2NhbE5hbWUpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiByZW1v
dmVOYW1lZEl0ZW1OUyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBs
b2NhbE5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2Rl
PiBnZXROYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3Q7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPE5vZGU+IHJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHNl
dE5hbWVkSXRlbShOb2RlKiBhcmcsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxOb2RlPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBzaXplX3QgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzLnNpemUoKTsgfQotCi0gICAgLy8gT3Ro
ZXIgbWV0aG9kcyAobm90IHBhcnQgb2YgRE9NKQogICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlSXRl
bSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVzW2luZGV4XS5nZXQo
KTsgfQotICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdDsKLSAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0OwotICAgIAor
ICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJikgY29u
c3Q7CisKICAgICB2b2lkIHNocmlua1RvTGVuZ3RoKCkgeyBtX2F0dHJpYnV0ZXMuc2hyaW5rQ2Fw
YWNpdHkobGVuZ3RoKCkpOyB9CiAgICAgdm9pZCByZXNlcnZlQ2FwYWNpdHkodW5zaWduZWQgY2Fw
YWNpdHkpIHsgbV9hdHRyaWJ1dGVzLnJlc2VydmVDYXBhY2l0eShjYXBhY2l0eSk7IH0KIApAQCAt
ODMsMjAgKzY0LDM4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNNYXBw
ZWRBdHRyaWJ1dGVNYXAoKSBjb25zdDsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWQoKSBj
b25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgdm9pZCBzZXRJRChjb25zdCBBdG9taWNTdHJpbmcm
IF9pZCkgeyBtX2lkID0gX2lkOyB9CiAgICAgCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICB2b2lkIHNldElEKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmV3SWQpIHsgbV9pZCA9IG5ld0lkOyB9CisKICAgICBib29sIG1hcHNFcXVpdmFsZW50KGNv
bnN0IE5hbWVkQXR0ck1hcCogb3RoZXJNYXApIGNvbnN0OwogCi0gICAgLy8gVGhlc2UgZnVuY3Rp
b25zIGFyZSBpbnRlcm5hbCwgYW5kIGRvIG5vIGVycm9yIGNoZWNraW5nLgorICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyBkbyBubyBlcnJvciBjaGVja2luZy4KICAgICB2b2lkIGFkZEF0dHJpYnV0ZShQ
YXNzUmVmUHRyPEF0dHJpYnV0ZT4pOwotICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUpOworICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhckF0dHJpYnV0
ZXMoKTsKIAorICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQ7
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGRldGFjaEF0dHJpYnV0ZXNGcm9tRWxlbWVudCgpOwog
ICAgIHZvaWQgZGV0YWNoRnJvbUVsZW1lbnQoKTsKKyAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0
ZUl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
IGNvbnN0OworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IGdldE5hbWVkSXRlbShjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiByZW1v
dmVOYW1lZEl0ZW0oY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtTlMoY29uc3QgU3RyaW5nJiBuYW1l
c3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Tm9kZT4gcmVtb3ZlTmFtZWRJdGVtTlMoY29uc3QgU3RyaW5nJiBuYW1lc3BhY2VV
UkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Tm9kZT4gZ2V0TmFtZWRJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUpIGNvbnN0OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiByZW1vdmVOYW1lZEl0ZW0o
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxOb2RlPiBzZXROYW1lZEl0ZW0oTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKKwor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
KyAgICB2aXJ0dWFsIHNpemVfdCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3Q7CiAKICAgICBFbGVtZW50
KiBtX2VsZW1lbnQ7CiAgICAgVmVjdG9yPFJlZlB0cjxBdHRyaWJ1dGU+ID4gbV9hdHRyaWJ1dGVz
OwpJbmRleDogV2ViQ29yZS9kb20vTmFtZWRNYXBwZWRBdHRyTWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9OYW1lZE1hcHBlZEF0dHJNYXAuY3BwCShyZXZpc2lvbiA0MDQ3MikKKysr
IFdlYkNvcmUvZG9tL05hbWVkTWFwcGVkQXR0ck1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1
LDEyICs3NSwxMiBAQCBib29sIE5hbWVkTWFwcGVkQXR0ck1hcDo6bWFwc0VxdWl2YWxlbnQoCiAK
IHZvaWQgTmFtZWRNYXBwZWRBdHRyTWFwOjpzZXRDbGFzcyhjb25zdCBTdHJpbmcmIGNsYXNzU3Ry
KSAKIHsgCi0gICAgaWYgKCFtX2VsZW1lbnQtPmhhc0NsYXNzKCkpIHsgCisgICAgaWYgKCFlbGVt
ZW50KCktPmhhc0NsYXNzKCkpIHsgCiAgICAgICAgIG1fY2xhc3NOYW1lcy5jbGVhcigpOyAKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fY2xhc3NOYW1lcy5zZXQoY2xhc3NTdHIsIG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpOyAKKyAgICBtX2NsYXNzTmFtZXMu
c2V0KGNsYXNzU3RyLCBlbGVtZW50KCktPmRvY3VtZW50KCktPmluQ29tcGF0TW9kZSgpKTsgCiB9
CiAKIH0KSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkTWFwcGVkQXR0ck1hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvZG9tL05hbWVkTWFwcGVkQXR0ck1hcC5oCShyZXZpc2lvbiA0MDQ3MikKKysr
IFdlYkNvcmUvZG9tL05hbWVkTWFwcGVkQXR0ck1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDcg
KzQsNyBAQAogICogICAgICAgICAgIChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20p
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDcgRGF2aWQgU21pdGggKGNhdGZpc2gubWFuQGdtYWlsLmNvbSkK
LSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUs
IDIwMDYsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCkBAIC0yNywzMiArMjcsMzMgQEAKICNkZWZpbmUgTmFtZWRNYXBwZWRBdHRy
TWFwX2gKIAogI2luY2x1ZGUgIkNsYXNzTmFtZXMuaCIKLSNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJNYXBwZWRBdHRyaWJ1dGUuaCIgLy8gVGhpcyBoZWFkZXIgaXMgbm90
IHJlcXVpcmVkIGZvciB0aGUgTmFtZWRNYXBwZWRBdHRyTWFwIGRlZmluaXRpb24uIFNob3VsZCBy
ZW1vdmUgaXQuCiAjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgTmFtZWRNYXBwZWRBdHRyTWFwIDogcHVibGljIE5hbWVkQXR0ck1hcCB7Ci1w
cml2YXRlOgotICAgIE5hbWVkTWFwcGVkQXR0ck1hcChFbGVtZW50KiBlbGVtZW50KSA6IE5hbWVk
QXR0ck1hcChlbGVtZW50KSwgbV9tYXBwZWRBdHRyaWJ1dGVDb3VudCgwKSB7IH0KIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOYW1lZE1hcHBlZEF0dHJNYXA+IGNyZWF0ZShFbGVtZW50
KiBlbGVtZW50ID0gMCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE5hbWVkTWFwcGVkQXR0ck1hcChl
bGVtZW50KSk7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBjbGVhckF0dHJpYnV0ZXMoKTsKLSAgICB2
aXJ0dWFsIGJvb2wgaXNNYXBwZWRBdHRyaWJ1dGVNYXAoKSBjb25zdDsKLQogICAgIHZvaWQgY2xl
YXJDbGFzcygpIHsgbV9jbGFzc05hbWVzLmNsZWFyKCk7IH0KICAgICB2b2lkIHNldENsYXNzKGNv
bnN0IFN0cmluZyYpOwogICAgIGNvbnN0IENsYXNzTmFtZXMmIGNsYXNzTmFtZXMoKSBjb25zdCB7
IHJldHVybiBtX2NsYXNzTmFtZXM7IH0KIAotICAgIHZpcnR1YWwgYm9vbCBoYXNNYXBwZWRBdHRy
aWJ1dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tYXBwZWRBdHRyaWJ1dGVDb3VudCA+IDA7IH0KKyAg
ICBib29sIGhhc01hcHBlZEF0dHJpYnV0ZXMoKSBjb25zdCB7IHJldHVybiBtX21hcHBlZEF0dHJp
YnV0ZUNvdW50ID4gMDsgfQogICAgIHZvaWQgZGVjbFJlbW92ZWQoKSB7IG1fbWFwcGVkQXR0cmli
dXRlQ291bnQtLTsgfQogICAgIHZvaWQgZGVjbEFkZGVkKCkgeyBtX21hcHBlZEF0dHJpYnV0ZUNv
dW50Kys7IH0KLSAgICAKKwogICAgIGJvb2wgbWFwc0VxdWl2YWxlbnQoY29uc3QgTmFtZWRNYXBw
ZWRBdHRyTWFwKikgY29uc3Q7Ci0gICAgaW50IGRlY2xDb3VudCgpIGNvbnN0OwogCiBwcml2YXRl
OgorICAgIE5hbWVkTWFwcGVkQXR0ck1hcChFbGVtZW50KiBlbGVtZW50KSA6IE5hbWVkQXR0ck1h
cChlbGVtZW50KSwgbV9tYXBwZWRBdHRyaWJ1dGVDb3VudCgwKSB7IH0KKworICAgIHZpcnR1YWwg
dm9pZCBjbGVhckF0dHJpYnV0ZXMoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYXBwZWRBdHRyaWJ1
dGVNYXAoKSBjb25zdDsKKworICAgIGludCBkZWNsQ291bnQoKSBjb25zdDsKKwogICAgIENsYXNz
TmFtZXMgbV9jbGFzc05hbWVzOwogICAgIGludCBtX21hcHBlZEF0dHJpYnV0ZUNvdW50OwogfTsK
SW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL05hbWVkTm9kZU1hcC5oCShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvZG9tL05hbWVk
Tm9kZU1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1NiwxMCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPE5vZGU+IHNldE5hbWVkSXRlbShOb2RlKiwgRXhjZXB0aW9uQ29k
ZSYpID0gMDsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxOb2RlPiBpdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBzaXplX3QgbGVuZ3RoKCkgY29uc3QgPSAwOwor
ICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiB2aXJ0dWFsTGVuZ3RoKCk7IH0KKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHNpemVfdCB2aXJ0dWFsTGVuZ3RoKCkgY29uc3QgPSAwOwog
fTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS9k
b20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQg
KEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5
OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
MSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTEw
NzgsMTcgKzEwNzgsMTYgQEAgdm9pZCBOb2RlOjpkZXRhY2goKQogCiB2b2lkIE5vZGU6Omluc2Vy
dGVkSW50b0RvY3VtZW50KCkKIHsKKyAgICAvLyBOb3RlOiBDb250YWluZXJOb2RlOjppbnNlcnRl
ZEludG9Eb2N1bWVudCBkb2VzIG5vdCBjYWxsIHRocm91Z2ggaGVyZSwgc28gaWYgeW91CisgICAg
Ly8gY2hhbmdlIHRoaXMgZnVuY3Rpb24sIGNoYW5nZSB0aGF0IG9uZSBhcyB3ZWxsLgogICAgIHNl
dEluRG9jdW1lbnQodHJ1ZSk7Ci0gICAgaW5zZXJ0ZWRJbnRvVHJlZShmYWxzZSk7CiB9CiAKIHZv
aWQgTm9kZTo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgaWYgKG1fZG9jdW1lbnQgJiYg
bV9kb2N1bWVudC0+Z2V0Q1NTVGFyZ2V0KCkgPT0gdGhpcykKLSAgICAgICAgbV9kb2N1bWVudC0+
c2V0Q1NTVGFyZ2V0KDApOwotCisgICAgLy8gTm90ZTogQ29udGFpbmVyTm9kZTo6aW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQgZG9lcyBub3QgY2FsbCB0aHJvdWdoIGhlcmUsIHNvIGlmIHlvdQorICAgIC8v
IGNoYW5nZSB0aGlzIGZ1bmN0aW9uLCBjaGFuZ2UgdGhhdCBvbmUgYXMgd2VsbC4KICAgICBzZXRJ
bkRvY3VtZW50KGZhbHNlKTsKLSAgICByZW1vdmVkRnJvbVRyZWUoZmFsc2UpOwogfQogCiBOb2Rl
ICpOb2RlOjpwcmV2aW91c0VkaXRhYmxlKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL1F1YWxp
ZmllZE5hbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuY3Bw
CShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDcgKzEsNSBAQAotLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAy
MDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNTQsNyArNTIsNiBAQCBzdHJ1Y3QgUU5hbWVDb21wb25lbnRzVHJhbnNsYXRvciB7
CiBzdGF0aWMgUU5hbWVTZXQqIGdOYW1lQ2FjaGU7CiAKIFF1YWxpZmllZE5hbWU6OlF1YWxpZmll
ZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwLCBjb25zdCBBdG9taWNTdHJpbmcmIGwsIGNvbnN0
IEF0b21pY1N0cmluZyYgbikKLSAgICA6IG1faW1wbCgwKQogewogICAgIGlmICghZ05hbWVDYWNo
ZSkKICAgICAgICAgZ05hbWVDYWNoZSA9IG5ldyBRTmFtZVNldDsKQEAgLTY1LDI4ICs2Miw2IEBA
IFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUoY29uc3QgQXRvbWkKICAgICAgICAgbV9pbXBs
LT5yZWYoKTsKIH0KIAotUXVhbGlmaWVkTmFtZTo6flF1YWxpZmllZE5hbWUoKQotewotICAgIGRl
cmVmKCk7Ci19Ci0KLVF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgb3RoZXIpCi17Ci0gICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOwotICAgIHJlZigpOwot
fQotCi1jb25zdCBRdWFsaWZpZWROYW1lJiBRdWFsaWZpZWROYW1lOjpvcGVyYXRvcj0oY29uc3Qg
UXVhbGlmaWVkTmFtZSYgb3RoZXIpCi17Ci0gICAgaWYgKG1faW1wbCAhPSBvdGhlci5tX2ltcGwp
IHsKLSAgICAgICAgZGVyZWYoKTsKLSAgICAgICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOwotICAg
ICAgICByZWYoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuICp0aGlzOwotfQotCiB2b2lkIFF1
YWxpZmllZE5hbWU6OmRlcmVmKCkKIHsKICNpZmRlZiBRTkFNRV9ERUZBVUxUX0NPTlNUUlVDVE9S
CkBAIC05OSwxMiArNzQsNiBAQCB2b2lkIFF1YWxpZmllZE5hbWU6OmRlcmVmKCkKICAgICBtX2lt
cGwtPmRlcmVmKCk7CiB9CiAKLXZvaWQgUXVhbGlmaWVkTmFtZTo6c2V0UHJlZml4KGNvbnN0IEF0
b21pY1N0cmluZyYgcHJlZml4KQotewotICAgIFF1YWxpZmllZE5hbWUgb3RoZXIocHJlZml4LCBs
b2NhbE5hbWUoKSwgbmFtZXNwYWNlVVJJKCkpOwotICAgICp0aGlzID0gb3RoZXI7Ci19Ci0KIFN0
cmluZyBRdWFsaWZpZWROYW1lOjp0b1N0cmluZygpIGNvbnN0CiB7CiAgICAgU3RyaW5nIGxvY2Fs
ID0gbG9jYWxOYW1lKCk7CkluZGV4OiBXZWJDb3JlL2RvbS9RdWFsaWZpZWROYW1lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9kb20vUXVhbGlmaWVkTmFtZS5oCShyZXZpc2lvbiA0MDQ3MikKKysr
IFdlYkNvcmUvZG9tL1F1YWxpZmllZE5hbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDUg
QEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZv
ciBLREUuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xOSw2ICsxNyw3IEBACiAgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KKwogI2lmbmRlZiBRdWFsaWZpZWROYW1lX2gK
ICNkZWZpbmUgUXVhbGlmaWVkTmFtZV9oCiAKQEAgLTI2LDcgKzI1LDcgQEAKICNpbmNsdWRlIDx3
dGYvSGFzaEZ1bmN0aW9ucy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIHN0cnVj
dCBRdWFsaWZpZWROYW1lQ29tcG9uZW50cyB7CiAgICAgU3RyaW5nSW1wbCogbV9wcmVmaXg7CiAg
ICAgU3RyaW5nSW1wbCogbV9sb2NhbE5hbWU7CkBAIC0zNywzMiArMzYsMzIgQEAgY2xhc3MgUXVh
bGlmaWVkTmFtZSB7CiBwdWJsaWM6CiAgICAgY2xhc3MgUXVhbGlmaWVkTmFtZUltcGwgOiBwdWJs
aWMgUmVmQ291bnRlZDxRdWFsaWZpZWROYW1lSW1wbD4gewogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8UXVhbGlmaWVkTmFtZUltcGw+IGNyZWF0ZShjb25zdCBBdG9taWNT
dHJpbmcmIHAsIGNvbnN0IEF0b21pY1N0cmluZyYgbCwgY29uc3QgQXRvbWljU3RyaW5nJiBuKQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxRdWFsaWZpZWROYW1lSW1wbD4gY3JlYXRlKGNvbnN0
IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUXVhbGlmaWVkTmFtZUltcGwocCwgbCwgbikpOworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBRdWFsaWZpZWROYW1lSW1wbChwcmVmaXgsIGxvY2FsTmFt
ZSwgbmFtZXNwYWNlVVJJKSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgQXRvbWlj
U3RyaW5nIG1fcHJlZml4OwogICAgICAgICBBdG9taWNTdHJpbmcgbV9sb2NhbE5hbWU7CiAgICAg
ICAgIEF0b21pY1N0cmluZyBtX25hbWVzcGFjZTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFF1
YWxpZmllZE5hbWVJbXBsKGNvbnN0IEF0b21pY1N0cmluZyYgcCwgY29uc3QgQXRvbWljU3RyaW5n
JiBsLCBjb25zdCBBdG9taWNTdHJpbmcmIG4pCi0gICAgICAgICAgICA6IG1fcHJlZml4KHApCi0g
ICAgICAgICAgICAsIG1fbG9jYWxOYW1lKGwpCi0gICAgICAgICAgICAsIG1fbmFtZXNwYWNlKG4p
CisgICAgICAgIFF1YWxpZmllZE5hbWVJbXBsKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3Bh
Y2VVUkkpCisgICAgICAgICAgICA6IG1fcHJlZml4KHByZWZpeCkKKyAgICAgICAgICAgICwgbV9s
b2NhbE5hbWUobG9jYWxOYW1lKQorICAgICAgICAgICAgLCBtX25hbWVzcGFjZShuYW1lc3BhY2VV
UkkpCiAgICAgICAgIHsKICAgICAgICAgfSAgICAgICAgCiAgICAgfTsKIAogICAgIFF1YWxpZmll
ZE5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbG9j
YWxOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSk7Ci0gICAgflF1YWxpZmll
ZE5hbWUoKTsKKyAgICB+UXVhbGlmaWVkTmFtZSgpIHsgZGVyZWYoKTsgfQogI2lmZGVmIFFOQU1F
X0RFRkFVTFRfQ09OU1RSVUNUT1IKICAgICBRdWFsaWZpZWROYW1lKCkgOiBtX2ltcGwoMCkgeyB9
CiAjZW5kaWYKIAotICAgIFF1YWxpZmllZE5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAg
IGNvbnN0IFF1YWxpZmllZE5hbWUmIG9wZXJhdG9yPShjb25zdCBRdWFsaWZpZWROYW1lJik7Cisg
ICAgUXVhbGlmaWVkTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBvdGhlcikgOiBtX2ltcGwob3Ro
ZXIubV9pbXBsKSB7IHJlZigpOyB9CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgb3BlcmF0b3I9
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSB7IG90aGVyLnJlZigpOyBkZXJlZigpOyBtX2lt
cGwgPSBvdGhlci5tX2ltcGw7IHJldHVybiAqdGhpczsgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2ltcGwgPT0gb3Ro
ZXIubV9pbXBsOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFF1YWxpZmllZE5hbWUmIG90
aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQpAQCAtNzAsNyArNjksNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBtYXRjaGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIG90aGVyKSBj
b25zdCB7IHJldHVybiBtX2ltcGwgPT0gb3RoZXIubV9pbXBsIHx8IChsb2NhbE5hbWUoKSA9PSBv
dGhlci5sb2NhbE5hbWUoKSAmJiBuYW1lc3BhY2VVUkkoKSA9PSBvdGhlci5uYW1lc3BhY2VVUkko
KSk7IH0KIAogICAgIGJvb2wgaGFzUHJlZml4KCkgY29uc3QgeyByZXR1cm4gbV9pbXBsLT5tX3By
ZWZpeCAhPSBudWxsQXRvbTsgfQotICAgIHZvaWQgc2V0UHJlZml4KGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJlZml4KTsKKyAgICB2b2lkIHNldFByZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZp
eCkgeyAqdGhpcyA9IFF1YWxpZmllZE5hbWUocHJlZml4LCBsb2NhbE5hbWUoKSwgbmFtZXNwYWNl
VVJJKCkpOyB9CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCgpIGNvbnN0IHsgcmV0
dXJuIG1faW1wbC0+bV9wcmVmaXg7IH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+bV9sb2NhbE5hbWU7IH0KQEAgLTg0LDcgKzgzLDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluaXQoKTsKICAgICAKIHByaXZhdGU6Ci0gICAg
dm9pZCByZWYoKSB7IG1faW1wbC0+cmVmKCk7IH0KKyAgICB2b2lkIHJlZigpIGNvbnN0IHsgbV9p
bXBsLT5yZWYoKTsgfQogICAgIHZvaWQgZGVyZWYoKTsKICAgICAKICAgICBRdWFsaWZpZWROYW1l
SW1wbCogbV9pbXBsOwpAQCAtMTAwLDcgKzk5LDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBBdG9taWNTdHJpbgogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBRdWFsaWZpZWRO
YW1lJiBxLCBjb25zdCBBdG9taWNTdHJpbmcmIGEpIHsgcmV0dXJuIGEgPT0gcS5sb2NhbE5hbWUo
KTsgfQogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBRdWFsaWZpZWROYW1lJiBxLCBjb25z
dCBBdG9taWNTdHJpbmcmIGEpIHsgcmV0dXJuIGEgIT0gcS5sb2NhbE5hbWUoKTsgfQogCi0KIGlu
bGluZSB1bnNpZ25lZCBoYXNoQ29tcG9uZW50cyhjb25zdCBRdWFsaWZpZWROYW1lQ29tcG9uZW50
cyYgYnVmKQogewogICAgIEFTU0VSVChzaXplb2YoUXVhbGlmaWVkTmFtZUNvbXBvbmVudHMpICUg
KHNpemVvZih1aW50MTZfdCkgKiAyKSA9PSAwKTsKQEAgLTE1NCw2ICsxNTIsNyBAQCBzdHJ1Y3Qg
UXVhbGlmaWVkTmFtZUhhc2ggewogbmFtZXNwYWNlIFdURiB7CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOworCiAgICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8V2ViQ29yZTo6UXVhbGlmaWVkTmFtZT4gewogICAgICAgICB0eXBlZGVmIFdl
YkNvcmU6OlF1YWxpZmllZE5hbWVIYXNoIEhhc2g7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MQXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuY3BwCShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJlYUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEFyZWFFbGVtZW50OjpIVE1MQXJlYUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6
IEhUTUxBbmNob3JFbGVtZW50KHRhZ05hbWUsIGRvYykKK0hUTUxBcmVhRWxlbWVudDo6SFRNTEFy
ZWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCkKKyAgICA6IEhUTUxBbmNob3JFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwgbV9j
b29yZHMoMCkKICAgICAsIG1fY29vcmRzTGVuKDApCiAgICAgLCBtX2xhc3RTaXplKC0xLCAtMSkK
QEAgLTczLDExICs3MywxMSBAQCB2b2lkIEhUTUxBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1CiBib29sIEhUTUxBcmVhRWxlbWVudDo6bWFwTW91c2VFdmVudChpbnQgeCwgaW50IHksIGNv
bnN0IEludFNpemUmIHNpemUsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCkKIHsKICAgICBpZiAobV9s
YXN0U2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIHJlZ2lvbiA9IGdldFJlZ2lvbihzaXplKTsKKyAg
ICAgICAgbV9yZWdpb24uc2V0KG5ldyBQYXRoKGdldFJlZ2lvbihzaXplKSkpOwogICAgICAgICBt
X2xhc3RTaXplID0gc2l6ZTsKICAgICB9CiAKLSAgICBpZiAoIXJlZ2lvbi5jb250YWlucyhJbnRQ
b2ludCh4LCB5KSkpCisgICAgaWYgKCFtX3JlZ2lvbi0+Y29udGFpbnMoSW50UG9pbnQoeCwgeSkp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgcmVzdWx0LnNldElubmVyTm9kZSh0
aGlzKTsKQEAgLTE1MCwzMiArMTUwLDMyIEBAIFBhdGggSFRNTEFyZWFFbGVtZW50OjpnZXRSZWdp
b24oY29uc3QgSW4KICAgICByZXR1cm4gcGF0aDsKIH0KIAotU3RyaW5nIEhUTUxBcmVhRWxlbWVu
dDo6YWNjZXNzS2V5KCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEFyZWFFbGVtZW50
OjphY2Nlc3NLZXkoKSBjb25zdAogewogICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWNjZXNza2V5
QXR0cik7CiB9CiAKLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRBY2Nlc3NLZXkoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3ZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRBY2Nlc3NLZXkoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0ciwgdmFs
dWUpOwogfQogCi1TdHJpbmcgSFRNTEFyZWFFbGVtZW50OjphbHQoKSBjb25zdAorY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MQXJlYUVsZW1lbnQ6OmFsdCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShhbHRBdHRyKTsKIH0KIAotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEFsdChj
b25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEFsdChjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIHNldEF0dHJpYnV0ZShhbHRBdHRyLCB2YWx1ZSk7
CiB9CiAKLVN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6OmNvb3JkcygpIGNvbnN0Citjb25zdCBBdG9t
aWNTdHJpbmcmIEhUTUxBcmVhRWxlbWVudDo6Y29vcmRzKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGNvb3Jkc0F0dHIpOwogfQogCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0
Q29vcmRzKGNvbnN0IFN0cmluZyYgdmFsdWUpCit2b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0Q29v
cmRzKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKGNvb3Jk
c0F0dHIsIHZhbHVlKTsKIH0KQEAgLTE4NSw3ICsxODUsNyBAQCBLVVJMIEhUTUxBcmVhRWxlbWVu
dDo6aHJlZigpIGNvbnN0CiAgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0
dHJpYnV0ZShocmVmQXR0cikpOwogfQogCi12b2lkIEhUTUxBcmVhRWxlbWVudDo6c2V0SHJlZihj
b25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldEhyZWYoY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoaHJlZkF0dHIsIHZhbHVl
KTsKIH0KQEAgLTIwMCwxMiArMjAwLDEyIEBAIHZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXROb0hy
ZWYoYm9vbCBub0gKICAgICBzZXRBdHRyaWJ1dGUobm9ocmVmQXR0ciwgbm9IcmVmID8gIiIgOiAw
KTsKIH0KIAotU3RyaW5nIEhUTUxBcmVhRWxlbWVudDo6c2hhcGUoKSBjb25zdAorY29uc3QgQXRv
bWljU3RyaW5nJiBIVE1MQXJlYUVsZW1lbnQ6OnNoYXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHNoYXBlQXR0cik7CiB9CiAKLXZvaWQgSFRNTEFyZWFFbGVtZW50OjpzZXRT
aGFwZShjb25zdCBTdHJpbmcmIHZhbHVlKQordm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldFNoYXBl
KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHNoYXBlQXR0
ciwgdmFsdWUpOwogfQpAQCAtMjIwLDcgKzIyMCw3IEBAIFN0cmluZyBIVE1MQXJlYUVsZW1lbnQ6
OnRhcmdldCgpIGNvbnN0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKIH0K
IAotdm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldFRhcmdldChjb25zdCBTdHJpbmcmIHZhbHVlKQor
dm9pZCBIVE1MQXJlYUVsZW1lbnQ6OnNldFRhcmdldChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
KQogewogICAgIHNldEF0dHJpYnV0ZSh0YXJnZXRBdHRyLCB2YWx1ZSk7CiB9CkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxBcmVhRWxlbWVudC5oCShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQXJl
YUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogI2luY2x1ZGUgIkhUTUxBbmNo
b3JFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBhdGguaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3MgUGF0aDsK
IAogY2xhc3MgSFRNTEFyZWFFbGVtZW50IDogcHVibGljIEhUTUxBbmNob3JFbGVtZW50IHsKIHB1
YmxpYzoKQEAgLTQ3LDMzICs0NywzNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIEludFJlY3Qg
Z2V0UmVjdChSZW5kZXJPYmplY3QqKSBjb25zdDsKIAotICAgIFN0cmluZyBhY2Nlc3NLZXkoKSBj
b25zdDsKLSAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGFjY2Vzc0tleSgpIGNvbnN0OworICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNv
bnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIGFsdCgpIGNvbnN0OwotICAgIHZvaWQg
c2V0QWx0KGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0KCkgY29u
c3Q7CisgICAgdm9pZCBzZXRBbHQoY29uc3QgQXRvbWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcg
Y29vcmRzKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRDb29yZHMoY29uc3QgU3RyaW5nJik7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBjb29yZHMoKSBjb25zdDsKKyAgICB2b2lkIHNldENvb3Jkcyhj
b25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIEtVUkwgaHJlZigpIGNvbnN0OwotICAgIHZvaWQg
c2V0SHJlZihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldEhyZWYoY29uc3QgQXRvbWljU3Ry
aW5nJik7CiAKICAgICBib29sIG5vSHJlZigpIGNvbnN0OwogICAgIHZvaWQgc2V0Tm9IcmVmKGJv
b2wpOwogCi0gICAgU3RyaW5nIHNoYXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTaGFwZShjb25z
dCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNoYXBlKCkgY29uc3Q7CisgICAg
dm9pZCBzZXRTaGFwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBp
c0ZvY3VzYWJsZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBTdHJpbmcgdGFyZ2V0KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRUYXJnZXQo
Y29uc3QgQXRvbWljU3RyaW5nJik7CiAKIHByaXZhdGU6CiAgICAgZW51bSBTaGFwZSB7IERlZmF1
bHQsIFBvbHksIFJlY3QsIENpcmNsZSwgVW5rbm93biB9OwogICAgIFBhdGggZ2V0UmVnaW9uKGNv
bnN0IEludFNpemUmKSBjb25zdDsKLSAgICBQYXRoIHJlZ2lvbjsKKworICAgIE93blB0cjxQYXRo
PiBtX3JlZ2lvbjsKICAgICBMZW5ndGgqIG1fY29vcmRzOwogICAgIGludCBtX2Nvb3Jkc0xlbjsK
ICAgICBJbnRTaXplIG1fbGFzdFNpemU7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3Vy
Y2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNl
RG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVmlld1Nv
dXJjZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIEhU
TUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhCiAgICAgLy8gZG9jdW1lbnQuCiAgICAg
UmVmUHRyPEVsZW1lbnQ+IGRpdiA9IG5ldyBIVE1MRGl2RWxlbWVudChkaXZUYWcsIHRoaXMpOwog
ICAgIFJlZlB0cjxOYW1lZE1hcHBlZEF0dHJNYXA+IGF0dHJzID0gTmFtZWRNYXBwZWRBdHRyTWFw
OjpjcmVhdGUoKTsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6
Y3JlYXRlKGNsYXNzQXR0ciwgIndlYmtpdC1saW5lLWd1dHRlci1iYWNrZHJvcCIpLCB0cnVlKTsK
KyAgICBhdHRycy0+YWRkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0
ciwgIndlYmtpdC1saW5lLWd1dHRlci1iYWNrZHJvcCIpKTsKICAgICBkaXYtPnNldEF0dHJpYnV0
ZU1hcChhdHRycy5yZWxlYXNlKCkpOwogICAgIGJvZHktPmFkZENoaWxkKGRpdik7CiAgICAgZGl2
LT5hdHRhY2goKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBFbGVtZW50KiBIVE1MVmlld1NvdXJjZURv
Y3VtZW50OjphZGRTcGFuCiAKICAgICBFbGVtZW50KiBzcGFuID0gbmV3IEhUTUxFbGVtZW50KHNw
YW5UYWcsIHRoaXMpOwogICAgIFJlZlB0cjxOYW1lZE1hcHBlZEF0dHJNYXA+IGF0dHJzID0gTmFt
ZWRNYXBwZWRBdHRyTWFwOjpjcmVhdGUoKTsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZTo6Y3JlYXRlKGNsYXNzQXR0ciwgY2xhc3NOYW1lKSwgdHJ1ZSk7CisgICAg
YXR0cnMtPmFkZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShjbGFzc0F0dHIsIGNs
YXNzTmFtZSkpOwogICAgIHNwYW4tPnNldEF0dHJpYnV0ZU1hcChhdHRycy5yZWxlYXNlKCkpOwog
ICAgIG1fY3VycmVudC0+YWRkQ2hpbGQoc3Bhbik7CiAgICAgc3Bhbi0+YXR0YWNoKCk7CkBAIC0y
MTIsNyArMjEyLDcgQEAgdm9pZCBIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRMaW5lKGNvbgog
ICAgIC8vIENyZWF0ZSBhIGNlbGwgdGhhdCB3aWxsIGhvbGQgdGhlIGxpbmUgbnVtYmVyIChpdCBp
cyBnZW5lcmF0ZWQgaW4gdGhlIHN0eWxlc2hlZXQgdXNpbmcgY291bnRlcnMpLgogICAgIEVsZW1l
bnQqIHRkID0gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50KHRkVGFnLCB0aGlzKTsKICAgICBSZWZQ
dHI8TmFtZWRNYXBwZWRBdHRyTWFwPiBhdHRycyA9IE5hbWVkTWFwcGVkQXR0ck1hcDo6Y3JlYXRl
KCk7Ci0gICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShj
bGFzc0F0dHIsICJ3ZWJraXQtbGluZS1udW1iZXIiKSwgdHJ1ZSk7CisgICAgYXR0cnMtPmFkZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShjbGFzc0F0dHIsICJ3ZWJraXQtbGluZS1u
dW1iZXIiKSk7CiAgICAgdGQtPnNldEF0dHJpYnV0ZU1hcChhdHRycy5yZWxlYXNlKCkpOwogICAg
IHRyb3ctPmFkZENoaWxkKHRkKTsKICAgICB0ZC0+YXR0YWNoKCk7CkBAIC0yMjAsNyArMjIwLDcg
QEAgdm9pZCBIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRMaW5lKGNvbgogICAgIC8vIENyZWF0
ZSBhIHNlY29uZCBjZWxsIGZvciB0aGUgbGluZSBjb250ZW50cwogICAgIHRkID0gbmV3IEhUTUxU
YWJsZUNlbGxFbGVtZW50KHRkVGFnLCB0aGlzKTsKICAgICBhdHRycyA9IE5hbWVkTWFwcGVkQXR0
ck1hcDo6Y3JlYXRlKCk7Ci0gICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGU6OmNyZWF0ZShjbGFzc0F0dHIsICJ3ZWJraXQtbGluZS1jb250ZW50IiksIHRydWUpOworICAg
IGF0dHJzLT5hZGRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NBdHRyLCAi
d2Via2l0LWxpbmUtY29udGVudCIpKTsKICAgICB0ZC0+c2V0QXR0cmlidXRlTWFwKGF0dHJzLnJl
bGVhc2UoKSk7CiAgICAgdHJvdy0+YWRkQ2hpbGQodGQpOwogICAgIHRkLT5hdHRhY2goKTsKQEAg
LTI4Myw5ICsyODMsOSBAQCBFbGVtZW50KiBIVE1MVmlld1NvdXJjZURvY3VtZW50OjphZGRMaW5r
CiAgICAgICAgIGNsYXNzVmFsdWUgPSAid2Via2l0LWh0bWwtYXR0cmlidXRlLXZhbHVlIHdlYmtp
dC1odG1sLWV4dGVybmFsLWxpbmsiOwogICAgIGVsc2UKICAgICAgICAgY2xhc3NWYWx1ZSA9ICJ3
ZWJraXQtaHRtbC1hdHRyaWJ1dGUtdmFsdWUgd2Via2l0LWh0bWwtcmVzb3VyY2UtbGluayI7Ci0g
ICAgYXR0cnMtPmluc2VydEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShjbGFzc0F0
dHIsIGNsYXNzVmFsdWUpLCB0cnVlKTsKLSAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZTo6Y3JlYXRlKHRhcmdldEF0dHIsICJfYmxhbmsiKSwgdHJ1ZSk7Ci0gICAgYXR0
cnMtPmluc2VydEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShocmVmQXR0ciwgdXJs
KSwgdHJ1ZSk7CisgICAgYXR0cnMtPmFkZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0
ZShjbGFzc0F0dHIsIGNsYXNzVmFsdWUpKTsKKyAgICBhdHRycy0+YWRkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZTo6Y3JlYXRlKHRhcmdldEF0dHIsICJfYmxhbmsiKSk7CisgICAgYXR0cnMtPmFk
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShocmVmQXR0ciwgdXJsKSk7CiAgICAg
YW5jaG9yLT5zZXRBdHRyaWJ1dGVNYXAoYXR0cnMucmVsZWFzZSgpKTsKICAgICBtX2N1cnJlbnQt
PmFkZENoaWxkKGFuY2hvcik7CiAgICAgYW5jaG9yLT5hdHRhY2goKTsKSW5kZXg6IFdlYkNvcmUv
bG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFt
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjI4LDcgKzEyMjgsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjpnb3RvQW5jaG9yKCkKICAgICAvLyBPVE9IIElmIENTUyB0YXJnZXQgd2FzIHNldCBwcmV2
aW91c2x5LCB3ZSB3YW50IHRvIHNldCBpdCB0byAwLCByZWNhbGMKICAgICAvLyBhbmQgcG9zc2li
bHkgcmVwYWludCBiZWNhdXNlIDp0YXJnZXQgcHNldWRvIGNsYXNzIG1heSBoYXZlIGJlZW4KICAg
ICAvLyBzZXQgKHNlZSBidWcgMTEzMjEpLgotICAgIGlmICghbV9VUkwuaGFzUmVmKCkgJiYgISht
X2ZyYW1lLT5kb2N1bWVudCgpICYmIG1fZnJhbWUtPmRvY3VtZW50KCktPmdldENTU1RhcmdldCgp
KSkKKyAgICBpZiAoIW1fVVJMLmhhc1JlZigpICYmICEobV9mcmFtZS0+ZG9jdW1lbnQoKSAmJiBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5jc3NUYXJnZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFN0cmluZyByZWYgPSBtX1VSTC5yZWYoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR2x5cGhXaWR0aE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFdpZHRoTWFwLmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI5LDQzICsyOSwyMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdseXBoV2lk
dGhNYXAuaCIKIAotbmFtZXNwYWNlIFdlYkNvcmUKLXsKLQotZmxvYXQgR2x5cGhXaWR0aE1hcDo6
d2lkdGhGb3JHbHlwaChHbHlwaCBnKQotewotICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoZyAv
IEdseXBoV2lkdGhQYWdlOjpzaXplKTsKLSAgICBHbHlwaFdpZHRoUGFnZSogcGFnZSA9IGxvY2F0
ZVBhZ2UocGFnZU51bWJlcik7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHJldHVybiBwYWdlLT53
aWR0aEZvckdseXBoKGcpOwotICAgIHJldHVybiBjR2x5cGhXaWR0aFVua25vd247Ci19Ci0KLXZv
aWQgR2x5cGhXaWR0aE1hcDo6c2V0V2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCwgZmxvYXQgd2lk
dGgpCi17Ci0gICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChnbHlwaCAvIEdseXBoV2lkdGhQYWdl
OjpzaXplKTsKLSAgICBHbHlwaFdpZHRoUGFnZSogcGFnZSA9IGxvY2F0ZVBhZ2UocGFnZU51bWJl
cik7Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAgIHBhZ2UtPnNldFdpZHRoRm9yR2x5cGgoZ2x5cGgs
IHdpZHRoKTsKLX0KK25hbWVzcGFjZSBXZWJDb3JlIHsKIAotaW5saW5lIEdseXBoV2lkdGhNYXA6
OkdseXBoV2lkdGhQYWdlKiBHbHlwaFdpZHRoTWFwOjpsb2NhdGVQYWdlKHVuc2lnbmVkIHBhZ2VO
dW1iZXIpCitHbHlwaFdpZHRoTWFwOjpHbHlwaFdpZHRoUGFnZSogR2x5cGhXaWR0aE1hcDo6bG9j
YXRlUGFnZVNsb3dDYXNlKHVuc2lnbmVkIHBhZ2VOdW1iZXIpCiB7CiAgICAgR2x5cGhXaWR0aFBh
Z2UqIHBhZ2U7CiAgICAgaWYgKHBhZ2VOdW1iZXIgPT0gMCkgewotICAgICAgICBpZiAobV9maWxs
ZWRQcmltYXJ5UGFnZSkKLSAgICAgICAgICAgIHJldHVybiAmbV9wcmltYXJ5UGFnZTsKKyAgICAg
ICAgQVNTRVJUKCFtX2ZpbGxlZFByaW1hcnlQYWdlKTsKICAgICAgICAgcGFnZSA9ICZtX3ByaW1h
cnlQYWdlOwogICAgICAgICBtX2ZpbGxlZFByaW1hcnlQYWdlID0gdHJ1ZTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAobV9wYWdlcykgewotICAgICAgICAgICAgR2x5cGhXaWR0aFBhZ2UqIHJl
c3VsdCA9IG1fcGFnZXMtPmdldChwYWdlTnVtYmVyKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQorICAgICAgICAgICAg
aWYgKChwYWdlID0gbV9wYWdlcy0+Z2V0KHBhZ2VOdW1iZXIpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcGFnZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3BhZ2VzLnNldChuZXcg
SGFzaE1hcDxpbnQsIEdseXBoV2lkdGhQYWdlKj4pOwogICAgICAgICBwYWdlID0gbmV3IEdseXBo
V2lkdGhQYWdlOwotICAgICAgICBpZiAoIW1fcGFnZXMpCi0gICAgICAgICAgICBtX3BhZ2VzID0g
bmV3IEhhc2hNYXA8aW50LCBHbHlwaFdpZHRoUGFnZSo+OwogICAgICAgICBtX3BhZ2VzLT5zZXQo
cGFnZU51bWJlciwgcGFnZSk7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoV2lkdGhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dseXBoV2lkdGhNYXAuaAkocmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoV2lkdGhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw5
ICsyOSw5IEBACiAjaWZuZGVmIEdseXBoV2lkdGhNYXBfaAogI2RlZmluZSBHbHlwaFdpZHRoTWFw
X2gKIAotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLSNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNDEsMzQgKzQxLDQ5IEBAIGNvbnN0IGZsb2F0IGNHbHlwaFdpZHRoVW5rbm93
biA9IC0xOwogCiBjbGFzcyBHbHlwaFdpZHRoTWFwIDogTm9uY29weWFibGUgewogcHVibGljOgot
ICAgIEdseXBoV2lkdGhNYXAoKSA6IG1fZmlsbGVkUHJpbWFyeVBhZ2UoZmFsc2UpLCBtX3BhZ2Vz
KDApIHt9Ci0gICAgfkdseXBoV2lkdGhNYXAoKSB7IGlmIChtX3BhZ2VzKSB7IGRlbGV0ZUFsbFZh
bHVlcygqbV9wYWdlcyk7IGRlbGV0ZSBtX3BhZ2VzOyB9IH0KKyAgICBHbHlwaFdpZHRoTWFwKCkg
OiBtX2ZpbGxlZFByaW1hcnlQYWdlKGZhbHNlKSB7IH0KKyAgICB+R2x5cGhXaWR0aE1hcCgpIHsg
aWYgKG1fcGFnZXMpIHsgZGVsZXRlQWxsVmFsdWVzKCptX3BhZ2VzKTsgfSB9CiAKLSAgICBmbG9h
dCB3aWR0aEZvckdseXBoKEdseXBoKTsKLSAgICB2b2lkIHNldFdpZHRoRm9yR2x5cGgoR2x5cGgs
IGZsb2F0KTsKKyAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGdseXBoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2UoZ2x5cGggLyBHbHlwaFdpZHRoUGFnZTo6c2l6ZSktPndp
ZHRoRm9yR2x5cGgoZ2x5cGgpOworICAgIH0KKworICAgIHZvaWQgc2V0V2lkdGhGb3JHbHlwaChH
bHlwaCBnbHlwaCwgZmxvYXQgd2lkdGgpCisgICAgeworICAgICAgICBsb2NhdGVQYWdlKGdseXBo
IC8gR2x5cGhXaWR0aFBhZ2U6OnNpemUpLT5zZXRXaWR0aEZvckdseXBoKGdseXBoLCB3aWR0aCk7
CisgICAgfQogCiBwcml2YXRlOgogICAgIHN0cnVjdCBHbHlwaFdpZHRoUGFnZSB7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gVXN1YWxseSBjb3ZlcnMgTGF0aW4t
MSBpbiBhIHNpbmdsZSBwYWdlLgogICAgICAgICBmbG9hdCBtX3dpZHRoc1tzaXplXTsKIAotICAg
ICAgICBmbG9hdCB3aWR0aEZvckdseXBoKEdseXBoIGcpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGhz
W2cgJSBzaXplXTsgfQotICAgICAgICB2b2lkIHNldFdpZHRoRm9yR2x5cGgoR2x5cGggZywgZmxv
YXQgdykKKyAgICAgICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyBy
ZXR1cm4gbV93aWR0aHNbZ2x5cGggJSBzaXplXTsgfQorICAgICAgICB2b2lkIHNldFdpZHRoRm9y
R2x5cGgoR2x5cGggZ2x5cGgsIGZsb2F0IHdpZHRoKQogICAgICAgICB7Ci0gICAgICAgICAgICBz
ZXRXaWR0aEZvckluZGV4KGcgJSBzaXplLCB3KTsKKyAgICAgICAgICAgIHNldFdpZHRoRm9ySW5k
ZXgoZ2x5cGggJSBzaXplLCB3aWR0aCk7CiAgICAgICAgIH0KLSAgICAgICAgdm9pZCBzZXRXaWR0
aEZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBmbG9hdCB3KQorICAgICAgICB2b2lkIHNldFdpZHRo
Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIGZsb2F0IHdpZHRoKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBtX3dpZHRoc1tpbmRleF0gPSB3OworICAgICAgICAgICAgbV93aWR0aHNbaW5kZXhdID0g
d2lkdGg7CiAgICAgICAgIH0KICAgICB9OwogICAgIAotICAgIEdseXBoV2lkdGhQYWdlKiBsb2Nh
dGVQYWdlKHVuc2lnbmVkIHBhZ2UpOworICAgIEdseXBoV2lkdGhQYWdlKiBsb2NhdGVQYWdlKHVu
c2lnbmVkIHBhZ2VOdW1iZXIpCisgICAgeworICAgICAgICBpZiAoIXBhZ2VOdW1iZXIgJiYgbV9m
aWxsZWRQcmltYXJ5UGFnZSkKKyAgICAgICAgICAgIHJldHVybiAmbV9wcmltYXJ5UGFnZTsKKyAg
ICAgICAgcmV0dXJuIGxvY2F0ZVBhZ2VTbG93Q2FzZShwYWdlTnVtYmVyKTsKKyAgICB9CisKKyAg
ICBHbHlwaFdpZHRoUGFnZSogbG9jYXRlUGFnZVNsb3dDYXNlKHVuc2lnbmVkIHBhZ2VOdW1iZXIp
OwogICAgIAogICAgIGJvb2wgbV9maWxsZWRQcmltYXJ5UGFnZTsKICAgICBHbHlwaFdpZHRoUGFn
ZSBtX3ByaW1hcnlQYWdlOyAvLyBXZSBvcHRpbWl6ZSBmb3IgdGhlIHBhZ2UgdGhhdCBjb250YWlu
cyBnbHlwaCBpbmRpY2VzIDAtMjU1LgotICAgIEhhc2hNYXA8aW50LCBHbHlwaFdpZHRoUGFnZSo+
KiBtX3BhZ2VzOworICAgIE93blB0cjxIYXNoTWFwPGludCwgR2x5cGhXaWR0aFBhZ2UqPiA+IG1f
cGFnZXM7CiB9OwogCiB9CisKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRm
b3JtU3RyaW5nLmgJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1Bs
YXRmb3JtU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKIAogI2luY2x1
ZGUgIlN0cmluZ0ltcGwuaCIKIAotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KICNpZiBV
U0UoSlNDKQogI2luY2x1ZGUgPHJ1bnRpbWUvSWRlbnRpZmllci5oPgogI2Vsc2UKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyICggbXVlbGxlckBrZGUub3JnICkKLSAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFuZHJldyBXZWxsaW5ndG9uIChwcm90b25Ad2lyZXRh
cHBlZC5uZXQpCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtOTA3LDI2ICs5MDcsOCBAQCBXVEY6OlVuaWNvZGU6
OkRpcmVjdGlvbiBTdHJpbmdJbXBsOjpkZWZhCiB9CiAKIC8vIFRoaXMgaXMgYSBob3QgZnVuY3Rp
b24gYmVjYXVzZSBpdCdzIHVzZWQgd2hlbiBwYXJzaW5nIEhUTUwuCi1QYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IFN0cmluZ0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBBU1NFUlQoY2hhcmFj
dGVycyk7Ci0gICAgQVNTRVJUKGxlbmd0aCk7Ci0KLSAgICAvLyBPcHRpbWl6ZSBmb3IgdGhlIGNh
c2Ugd2hlcmUgdGhlcmUgYXJlIG5vIE51bGwgY2hhcmFjdGVycyBieSBxdWlja2x5Ci0gICAgLy8g
c2VhcmNoaW5nIGZvciBudWxscywgYW5kIHRoZW4gdXNpbmcgU3RyaW5nSW1wbDo6Y3JlYXRlLCB3
aGljaCB3aWxsCi0gICAgLy8gbWVtY3B5IHRoZSB3aG9sZSBidWZmZXIuICBUaGlzIGlzIGZhc3Rl
ciB0aGFuIGFzc2lnbmluZyBjaGFyYWN0ZXIgYnkKLSAgICAvLyBjaGFyYWN0ZXIgZHVyaW5nIHRo
ZSBsb29wLiAKLQotICAgIC8vIEZhc3QgY2FzZS4KLSAgICBpbnQgZm91bmROdWxsID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyAhZm91bmROdWxsICYmIGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICBpbnQgYyA9IGNoYXJhY3RlcnNbaV07IC8vIG1vcmUgZWZmaWNpZW50IHRoYW4gdXNp
bmcgVUNoYXIgaGVyZSAoYXQgbGVhc3Qgb24gSW50ZWwgTWFjIE9TKQotICAgICAgICBmb3VuZE51
bGwgfD0gIWM7Ci0gICAgfQotICAgIGlmICghZm91bmROdWxsKQotICAgICAgICByZXR1cm4gU3Ry
aW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMsIGxlbmd0aCk7Ci0gICAgCi0gICAgLy8gU2xvdyBj
YXNlLgogICAgIFN0cmluZ0J1ZmZlciBzdHJpcHBlZENvcHkobGVuZ3RoKTsKICAgICB1bnNpZ25l
ZCBzdHJpcHBlZExlbmd0aCA9IDA7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3RleHQvU3RyaW5nSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDQw
NDcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0yNCw3ICsyNCw3IEBACiAKICNpbmNsdWRlIDxsaW1pdHMuaD4K
ICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+
CkBAIC0xNjcsNiArMTY3LDggQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gY3JlYXRlU3RyaXBwaW5nTnVsbENoYXJhY3RlcnNT
bG93Q2FzZShjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CisKICAgICB1bnNpZ25lZCBt
X2xlbmd0aDsKICAgICBjb25zdCBVQ2hhciogbV9kYXRhOwogICAgIG11dGFibGUgdW5zaWduZWQg
bV9oYXNoOwpAQCAtMjc0LDYgKzI3NiwyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTcGFjZU9y
TmV3bGluZShVQ2hhCiAgICAgcmV0dXJuIGMgPD0gMHg3RiA/IFdURjo6aXNBU0NJSVNwYWNlKGMp
IDogV1RGOjpVbmljb2RlOjpkaXJlY3Rpb24oYykgPT0gV1RGOjpVbmljb2RlOjpXaGl0ZVNwYWNl
TmV1dHJhbDsKIH0KIAorLy8gVGhpcyBpcyBhIGhvdCBmdW5jdGlvbiBiZWNhdXNlIGl0J3MgdXNl
ZCB3aGVuIHBhcnNpbmcgSFRNTC4KK2lubGluZSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFN0cmlu
Z0ltcGw6OmNyZWF0ZVN0cmlwcGluZ051bGxDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgQVNTRVJUKGNoYXJhY3RlcnMpOworICAgIEFT
U0VSVChsZW5ndGgpOworCisgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZXJl
IGFyZSBubyBOdWxsIGNoYXJhY3RlcnMgYnkgcXVpY2tseQorICAgIC8vIHNlYXJjaGluZyBmb3Ig
bnVsbHMsIGFuZCB0aGVuIHVzaW5nIFN0cmluZ0ltcGw6OmNyZWF0ZSwgd2hpY2ggd2lsbAorICAg
IC8vIG1lbWNweSB0aGUgd2hvbGUgYnVmZmVyLiAgVGhpcyBpcyBmYXN0ZXIgdGhhbiBhc3NpZ25p
bmcgY2hhcmFjdGVyIGJ5CisgICAgLy8gY2hhcmFjdGVyIGR1cmluZyB0aGUgbG9vcC4gCisKKyAg
ICAvLyBGYXN0IGNhc2UuCisgICAgaW50IGZvdW5kTnVsbCA9IDA7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgIWZvdW5kTnVsbCAmJiBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaW50IGMg
PSBjaGFyYWN0ZXJzW2ldOyAvLyBtb3JlIGVmZmljaWVudCB0aGFuIHVzaW5nIFVDaGFyIGhlcmUg
KGF0IGxlYXN0IG9uIEludGVsIE1hYyBPUykKKyAgICAgICAgZm91bmROdWxsIHw9ICFjOworICAg
IH0KKyAgICBpZiAoIWZvdW5kTnVsbCkKKyAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0
ZShjaGFyYWN0ZXJzLCBsZW5ndGgpOworCisgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNyZWF0ZVN0
cmlwcGluZ051bGxDaGFyYWN0ZXJzU2xvd0Nhc2UoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKwog
fQogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
cmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTg2LDExICsyMTg2LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJl
bW92ZUZyb21PYmplY3RMaXN0cwogICAgIH0KIH0KIAotYm9vbCBSZW5kZXJPYmplY3Q6OmRvY3Vt
ZW50QmVpbmdEZXN0cm95ZWQoKSBjb25zdAotewotICAgIHJldHVybiAhZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKTsKLX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKQogewogICAgIC8vIERl
c3Ryb3kgYW55IGxlZnRvdmVyIGFub255bW91cyBjaGlsZHJlbi4KQEAgLTI0MzYsMjcgKzI0MzEs
MjUgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRlbGV0ZUxpbmVCb3hXcmFwcGVyKAogewogfQogCi1S
ZW5kZXJTdHlsZSogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZSgpIGNvbnN0CitSZW5kZXJT
dHlsZSogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVTdHlsZVNsb3dDYXNlKCkgY29uc3QKIHsKLSAg
ICBpZiAoIWRvY3VtZW50KCktPnVzZXNGaXJzdExpbmVSdWxlcygpKQotICAgICAgICByZXR1cm4g
bV9zdHlsZS5nZXQoKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVz
KCkpOwogCi0gICAgUmVuZGVyU3R5bGUqIHMgPSBtX3N0eWxlLmdldCgpOwotICAgIGNvbnN0IFJl
bmRlck9iamVjdCogb2JqID0gaXNUZXh0KCkgPyBwYXJlbnQoKSA6IHRoaXM7Ci0gICAgaWYgKG9i
ai0+aXNCbG9ja0Zsb3coKSkgewotICAgICAgICBSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2sg
PSBvYmotPmZpcnN0TGluZUJsb2NrKCk7Ci0gICAgICAgIGlmIChmaXJzdExpbmVCbG9jaykKLSAg
ICAgICAgICAgIHMgPSBmaXJzdExpbmVCbG9jay0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUoUmVuZGVy
U3R5bGU6OkZJUlNUX0xJTkUsIHN0eWxlKCkpOwotICAgIH0gZWxzZSBpZiAoIW9iai0+aXNBbm9u
eW1vdXMoKSAmJiBvYmotPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlID0gb2JqLT5wYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKLSAgICAgICAg
aWYgKHBhcmVudFN0eWxlICE9IG9iai0+cGFyZW50KCktPnN0eWxlKCkpIHsKLSAgICAgICAgICAg
IC8vIEEgZmlyc3QtbGluZSBzdHlsZSBpcyBpbiBlZmZlY3QuIFdlIG5lZWQgdG8gY2FjaGUgYSBm
aXJzdC1saW5lIHN0eWxlCi0gICAgICAgICAgICAvLyBmb3Igb3Vyc2VsdmVzLgotICAgICAgICAg
ICAgc3R5bGUoKS0+c2V0SGFzUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6OkZJUlNUX0xJTkVfSU5I
RVJJVEVEKTsKLSAgICAgICAgICAgIHMgPSBvYmotPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRl
clN0eWxlOjpGSVJTVF9MSU5FX0lOSEVSSVRFRCwgcGFyZW50U3R5bGUpOworICAgIFJlbmRlclN0
eWxlKiBzdHlsZSA9IG1fc3R5bGUuZ2V0KCk7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IGlzVGV4dCgpID8gcGFyZW50KCkgOiB0aGlzOworICAgIGlmIChyZW5kZXJlci0+aXNC
bG9ja0Zsb3coKSkgeworICAgICAgICBpZiAoUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrID0g
cmVuZGVyZXItPmZpcnN0TGluZUJsb2NrKCkpCisgICAgICAgICAgICBzdHlsZSA9IGZpcnN0TGlu
ZUJsb2NrLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6RklSU1RfTElORSwgc3R5
bGUpOworICAgIH0gZWxzZSBpZiAoIXJlbmRlcmVyLT5pc0Fub255bW91cygpICYmIHJlbmRlcmVy
LT5pc1JlbmRlcklubGluZSgpKSB7CisgICAgICAgIFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSA9
IHJlbmRlcmVyLT5wYXJlbnQoKS0+Zmlyc3RMaW5lU3R5bGUoKTsKKyAgICAgICAgaWYgKHBhcmVu
dFN0eWxlICE9IHJlbmRlcmVyLT5wYXJlbnQoKS0+c3R5bGUoKSkgeworICAgICAgICAgICAgLy8g
QSBmaXJzdC1saW5lIHN0eWxlIGlzIGluIGVmZmVjdC4gQ2FjaGUgYSBmaXJzdC1saW5lIHN0eWxl
IGZvciBvdXJzZWx2ZXMuCisgICAgICAgICAgICBzdHlsZS0+c2V0SGFzUHNldWRvU3R5bGUoUmVu
ZGVyU3R5bGU6OkZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKKyAgICAgICAgICAgIHN0eWxlID0gcmVu
ZGVyZXItPmdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxlOjpGSVJTVF9MSU5FX0lOSEVS
SVRFRCwgcGFyZW50U3R5bGUpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBzOworCisg
ICAgcmV0dXJuIHN0eWxlOwogfQogCiBSZW5kZXJTdHlsZSogUmVuZGVyT2JqZWN0OjpnZXRDYWNo
ZWRQc2V1ZG9TdHlsZShSZW5kZXJTdHlsZTo6UHNldWRvSWQgcHNldWRvLCBSZW5kZXJTdHlsZSog
cGFyZW50U3R5bGUpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNp
b24gNDA0NzIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTU5LDcgKzU1OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBtYXhQcmVm
V2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVuZGVyU3R5bGUqIGZpcnN0TGlu
ZVN0eWxlKCkgY29uc3Q7CisgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gZG9jdW1lbnQoKS0+dXNlc0ZpcnN0TGluZVJ1bGVzKCkgPyBmaXJzdExpbmVTdHls
ZVNsb3dDYXNlKCkgOiBzdHlsZSgpOyB9CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKGJvb2wgZmly
c3RMaW5lKSBjb25zdCB7IHJldHVybiBmaXJzdExpbmUgPyBmaXJzdExpbmVTdHlsZSgpIDogc3R5
bGUoKTsgfQogICAgIAogICAgIC8vIEFub255bW91cyBibG9ja3MgdGhhdCBhcmUgcGFydCBvZiBv
ZiBhIGNvbnRpbnVhdGlvbiBjaGFpbiB3aWxsIHJldHVybiB0aGVpciBpbmxpbmUgY29udGludWF0
aW9uJ3Mgb3V0bGluZSBzdHlsZSBpbnN0ZWFkLgpAQCAtODM1LDYgKzgzNSw4IEBAIHByb3RlY3Rl
ZDoKICAgICB9OwogICAgIAogcHJpdmF0ZToKKyAgICBSZW5kZXJTdHlsZSogZmlyc3RMaW5lU3R5
bGVTbG93Q2FzZSgpIGNvbnN0OworCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3N0eWxlOwog
CiAgICAgTm9kZSogbV9ub2RlOwpAQCAtODk4LDYgKzkwMCwxMSBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBib29sIHNfYWZmZWN0c1BhcmVudEJsb2NrOwogfTsKIAoraW5saW5lIGJvb2wgUmVuZGVy
T2JqZWN0Ojpkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWRv
Y3VtZW50KCktPnJlbmRlcmVyKCk7Cit9CisKIGlubGluZSB2b2lkIFJlbmRlck9iamVjdDo6c2V0
TmVlZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzKQogewogICAgIGJvb2wgYWxyZWFk
eU5lZWRlZExheW91dCA9IG1fbmVlZHNMYXlvdXQ7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAko
cmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFNWR1NWR0Vs
ZW1lbnQ6OmdldEMKICAgICBpZiAoIWlzT3V0ZXJtb3N0U1ZHKCkpCiAgICAgICAgIG1hdC50cmFu
c2xhdGUoeCgpLnZhbHVlKHRoaXMpLCB5KCkudmFsdWUodGhpcykpOwogCi0gICAgaWYgKGF0dHJp
YnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsKKyAgICBpZiAo
YXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFu
c2Zvcm0od2lkdGgoKS52YWx1ZSh0aGlzKSwgaGVpZ2h0KCkudmFsdWUodGhpcykpOwogICAgICAg
ICBtYXQgPSB2aWV3Qm94ICogbWF0OwogICAgIH0KQEAgLTQxNCw3ICs0MTQsNyBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBTVkdTVkdFbGVtZW50OjpnZXRTCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbWF0ID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7CiAgICAg
bWF0LnRyYW5zbGF0ZShyb290TG9jYXRpb24ueCgpLCByb290TG9jYXRpb24ueSgpKTsKIAotICAg
IGlmIChhdHRyaWJ1dGVzKCktPmdldE5hbWVkSXRlbShTVkdOYW1lczo6dmlld0JveEF0dHIpKSB7
CisgICAgaWYgKGF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShTVkdOYW1lczo6dmlld0Jv
eEF0dHIpKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZpZXdCb3ggPSB2aWV3Qm94
VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCkudmFsdWUodGhpcyksIGhlaWdodCgpLnZhbHVlKHRoaXMp
KTsKICAgICAgICAgbWF0ID0gdmlld0JveCAqIG1hdDsKICAgICB9CkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdTdHls
ZWRFbGVtZW50LmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL3N2Zy9TVkdTdHlsZWRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQwLDcgKzI0MCw3IEBAIFBhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFNWR1N0eWxlZEVsZW1lbnQKIAogUGFzc1JlZlB0cjxDU1NWYWx1ZT4gU1ZH
U3R5bGVkRWxlbWVudDo6Z2V0UHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKLSAgICBBdHRyaWJ1dGUqIGF0dHIgPSBtYXBwZWRBdHRyaWJ1dGVzKCktPmdldEF0dHJp
YnV0ZUl0ZW0obmFtZSwgZmFsc2UpOworICAgIEF0dHJpYnV0ZSogYXR0ciA9IG1hcHBlZEF0dHJp
YnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBuYW1lLCBu
dWxsQXRvbSkpOwogICAgIGlmICghYXR0ciB8fCAhYXR0ci0+aXNNYXBwZWRBdHRyaWJ1dGUoKSB8
fCAhYXR0ci0+c3R5bGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFdlYkNvcmUveG1s
L1hQYXRoRnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aEZ1bmN0
aW9ucy5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzQsMzAgKzUzNCwzMCBAQCBWYWx1ZSBGdW5MYW5nOjpl
dmFsdWF0ZSgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIGxhbmcgPSBhcmcoMCktPmV2YWx1YXRlKCku
dG9TdHJpbmcoKTsKIAotICAgIFJlZlB0cjxOb2RlPiBsYW5nTm9kZSA9IDA7CisgICAgQXR0cmli
dXRlKiBsYW5ndWFnZUF0dHJpYnV0ZSA9IDA7CiAgICAgTm9kZSogbm9kZSA9IGV2YWx1YXRpb25D
b250ZXh0KCkubm9kZS5nZXQoKTsKICAgICB3aGlsZSAobm9kZSkgewogICAgICAgICBOYW1lZEF0
dHJNYXAqIGF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygpOwogICAgICAgICBpZiAoYXR0cnMpCi0g
ICAgICAgICAgICBsYW5nTm9kZSA9IGF0dHJzLT5nZXROYW1lZEl0ZW1OUyhYTUxOYW1lczo6eG1s
TmFtZXNwYWNlVVJJLCAibGFuZyIpOwotICAgICAgICBpZiAobGFuZ05vZGUpCisgICAgICAgICAg
ICBsYW5ndWFnZUF0dHJpYnV0ZSA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5h
bWUobnVsbEF0b20sIFhNTE5hbWVzOjp4bWxOYW1lc3BhY2VVUkksICJsYW5nIikpOworICAgICAg
ICBpZiAobGFuZ3VhZ2VBdHRyaWJ1dGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbm9k
ZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKICAgICB9CiAKLSAgICBpZiAoIWxhbmdOb2RlKQorICAg
IGlmICghbGFuZ3VhZ2VBdHRyaWJ1dGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0
cmluZyBsYW5nTm9kZVZhbHVlID0gbGFuZ05vZGUtPm5vZGVWYWx1ZSgpOworICAgIFN0cmluZyBs
YW5nVmFsdWUgPSBsYW5ndWFnZUF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobGFuZ05vZGVWYWx1ZSwgbGFuZykpCisg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShsYW5nVmFsdWUsIGxhbmcpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgLy8gUmVtb3ZlIHN1ZmZpeGVzIG9uZSBieSBvbmUu
Ci0gICAgICAgIGludCBpbmRleCA9IGxhbmdOb2RlVmFsdWUucmV2ZXJzZUZpbmQoJy0nKTsKKyAg
ICAgICAgaW50IGluZGV4ID0gbGFuZ1ZhbHVlLnJldmVyc2VGaW5kKCctJyk7CiAgICAgICAgIGlm
IChpbmRleCA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBsYW5nTm9kZVZhbHVl
ID0gbGFuZ05vZGVWYWx1ZS5sZWZ0KGluZGV4KTsKKyAgICAgICAgbGFuZ1ZhbHVlID0gbGFuZ1Zh
bHVlLmxlZnQoaW5kZXgpOwogICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNv
cmUveG1sL1hQYXRoU3RlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS94bWwvWFBhdGhTdGVw
LmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL3htbC9YUGF0aFN0ZXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTIsOSArMTkyLDkgQEAgdm9pZCBTdGVwOjpub2Rlc0luQXhpcyhOb2Rl
KiBjb250ZXh0LCBObwogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgYXR0cnMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbiA9IGF0dHJzLT5pdGVtKGkpOwotICAgICAgICAgICAg
ICAgIGlmIChub2RlTWF0Y2hlcyhuLmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZXMu
YXBwZW5kKG4ucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0
ZSA9IGF0dHJzLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAgICAgIGlmIChub2RlTWF0
Y2hlcyhhdHRyaWJ1dGUtPmF0dHIoKSkpCisgICAgICAgICAgICAgICAgICAgIG5vZGVzLmFwcGVu
ZChhdHRyaWJ1dGUtPmF0dHIoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0K
</data>
<flag name="review"
          id="13120"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>