<?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>181412</bug_id>
          
          <creation_ts>2018-01-08 16:11:56 -0800</creation_ts>
          <short_desc>WebAssembly: mask indexed accesses to Table</short_desc>
          <delta_ts>2018-01-09 09:44:53 -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>WebAssembly</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="JF Bastien">jfbastien</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1386977</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-08 16:11:56 -0800</bug_when>
    <thetext>WebAssembly Table indexed accesses are user-controlled and bounds-checked. Force allocations of Table data to be a power-of-two, and explicitly mask accesses after bounds-check branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386978</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-08 16:12:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/36363236&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1386983</commentid>
    <comment_count>2</comment_count>
      <attachid>330752</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-08 16:34:02 -0800</bug_when>
    <thetext>Created attachment 330752
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387054</commentid>
    <comment_count>3</comment_count>
      <attachid>330752</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-08 18:30:51 -0800</bug_when>
    <thetext>Comment on attachment 330752
patch

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

r=me

&gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1231
&gt; +    if (!Options::disableSpectreMitigations())

I feel like we should&apos;ve named this option with affirmative instead of the negative. So this could just be:
if (Options::enableSpectreMitigations())
    ...

&gt; Source/JavaScriptCore/wasm/WasmTable.cpp:37
&gt; +uint32_t Table::allocatedSize(uint32_t size)

let&apos;s call this allocationSize instead of allocatedSize. That&apos;s what we usually name functions that do this.

&gt; Source/JavaScriptCore/wasm/WasmTable.cpp:101
&gt; +        if (reallocSize &gt; allocatedSize(m_size))

This might actually be a lot of memory we&apos;re going to dirty even if we never grow. Do you think it&apos;s worth having a different policy:
- always allocate virtually up to power of two, but decommit the extra tail?

&gt; Source/JavaScriptCore/wasm/WasmTable.cpp:104
&gt;              new (&amp;container.get()[i]) std::remove_reference_t&lt;decltype(*container.get())&gt;();

Not this patch, but just something I&apos;m realizing when reading this code: using decltype here makes it difficult to read this code and know what&apos;s going on without looking at another file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387125</commentid>
    <comment_count>4</comment_count>
      <attachid>330797</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-08 22:44:13 -0800</bug_when>
    <thetext>Created attachment 330797
patch

&gt; &gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1231
&gt; &gt; +    if (!Options::disableSpectreMitigations())
&gt; 
&gt; I feel like we should&apos;ve named this option with affirmative instead of the
&gt; negative. So this could just be:
&gt; if (Options::enableSpectreMitigations())
&gt;     ...

Flipped.


&gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:37
&gt; &gt; +uint32_t Table::allocatedSize(uint32_t size)
&gt; 
&gt; let&apos;s call this allocationSize instead of allocatedSize. That&apos;s what we
&gt; usually name functions that do this.

Actually this is really badly named and misleading! What we usually call allocationSize is what&apos;s in a create() function, that we pass to the allocator, and to me says &quot;that&apos;s the size of the whole object in bytes&quot;. This really isn&apos;t the case here! It&apos;s the *length* yet Table code uses size (which to me means bytes) everywhere it means length (which would be element count).

I&apos;ve renamed appropriately to make this way clearer.


&gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:101
&gt; &gt; +        if (reallocSize &gt; allocatedSize(m_size))
&gt; 
&gt; This might actually be a lot of memory we&apos;re going to dirty even if we never
&gt; grow. Do you think it&apos;s worth having a different policy:
&gt; - always allocate virtually up to power of two, but decommit the extra tail?

Yeah, but as a follow up because I think it&apos;s bigger than this patch and needs proper allocator support.

See: https://bugs.webkit.org/show_bug.cgi?id=181425

In this case the limit is 10 million table entries, so it&apos;ll be at worst a ~3x blowup. That&apos;s a lot :-)


&gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:104
&gt; &gt;              new (&amp;container.get()[i]) std::remove_reference_t&lt;decltype(*container.get())&gt;();
&gt; 
&gt; Not this patch, but just something I&apos;m realizing when reading this code:
&gt; using decltype here makes it difficult to read this code and know what&apos;s
&gt; going on without looking at another file.

We had that discussion when I originally committed this code. I proposed having a helper for this, motivated by this specific line of code, but my idea wasn&apos;t popular so I dropped it and kept the code that I thought to be unreadable. So I agree with you... Should I revive that patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387126</commentid>
    <comment_count>5</comment_count>
      <attachid>330797</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-08 22:44:59 -0800</bug_when>
    <thetext>Comment on attachment 330797
patch

Rejecting attachment 330797 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--check-oops&apos;, &apos;--non-interactive&apos;, 330797, &apos;--port=mac&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

ChangeLog entry in JSTests/ChangeLog contains OOPS!.

Full output: http://webkit-queues.webkit.org/results/5990500</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387127</commentid>
    <comment_count>6</comment_count>
      <attachid>330798</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-08 22:45:40 -0800</bug_when>
    <thetext>Created attachment 330798
patch

Forgot oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387130</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-01-08 22:47:42 -0800</bug_when>
    <thetext>Attachment 330798 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/js/JSWebAssemblyTable.cpp:105:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387132</commentid>
    <comment_count>8</comment_count>
      <attachid>330798</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-08 23:10:40 -0800</bug_when>
    <thetext>Comment on attachment 330798
patch

Clearing flags on attachment: 330798

Committed r226615: &lt;https://trac.webkit.org/changeset/226615&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387133</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-01-08 23:10:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387134</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-08 23:16:21 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #4)
&gt; Created attachment 330797 [details]
&gt; patch
&gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmB3IRGenerator.cpp:1231
&gt; &gt; &gt; +    if (!Options::disableSpectreMitigations())
&gt; &gt; 
&gt; &gt; I feel like we should&apos;ve named this option with affirmative instead of the
&gt; &gt; negative. So this could just be:
&gt; &gt; if (Options::enableSpectreMitigations())
&gt; &gt;     ...
&gt; 
&gt; Flipped.
Nice this is much cleaner.

&gt; 
&gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:37
&gt; &gt; &gt; +uint32_t Table::allocatedSize(uint32_t size)
&gt; &gt; 
&gt; &gt; let&apos;s call this allocationSize instead of allocatedSize. That&apos;s what we
&gt; &gt; usually name functions that do this.
&gt; 
&gt; Actually this is really badly named and misleading! What we usually call
&gt; allocationSize is what&apos;s in a create() function, that we pass to the
&gt; allocator, and to me says &quot;that&apos;s the size of the whole object in bytes&quot;.
&gt; This really isn&apos;t the case here! It&apos;s the *length* yet Table code uses size
&gt; (which to me means bytes) everywhere it means length (which would be element
&gt; count).
&gt; 
&gt; I&apos;ve renamed appropriately to make this way clearer.
👍🏽
&gt; 
&gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:101
&gt; &gt; &gt; +        if (reallocSize &gt; allocatedSize(m_size))
&gt; &gt; 
&gt; &gt; This might actually be a lot of memory we&apos;re going to dirty even if we never
&gt; &gt; grow. Do you think it&apos;s worth having a different policy:
&gt; &gt; - always allocate virtually up to power of two, but decommit the extra tail?
&gt; 
&gt; Yeah, but as a follow up because I think it&apos;s bigger than this patch and
&gt; needs proper allocator support.
&gt; 
&gt; See: https://bugs.webkit.org/show_bug.cgi?id=181425
&gt; 
&gt; In this case the limit is 10 million table entries, so it&apos;ll be at worst a
&gt; ~3x blowup. That&apos;s a lot :-)
&gt; 
&gt; 
&gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:104
&gt; &gt; &gt;              new (&amp;container.get()[i]) std::remove_reference_t&lt;decltype(*container.get())&gt;();
&gt; &gt; 
&gt; &gt; Not this patch, but just something I&apos;m realizing when reading this code:
&gt; &gt; using decltype here makes it difficult to read this code and know what&apos;s
&gt; &gt; going on without looking at another file.
&gt; 
&gt; We had that discussion when I originally committed this code. I proposed
&gt; having a helper for this, motivated by this specific line of code, but my
&gt; idea wasn&apos;t popular so I dropped it and kept the code that I thought to be
&gt; unreadable. So I agree with you... Should I revive that patch?
Nah, not worth it. What’s the actual type resolve to here? Why can’t we write the type directly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387135</commentid>
    <comment_count>11</comment_count>
      <attachid>330798</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-01-08 23:19:59 -0800</bug_when>
    <thetext>Comment on attachment 330798
patch

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

&gt; Source/JavaScriptCore/wasm/WasmTable.cpp:39
&gt; +    return WTF::roundUpToPowerOfTwo(length);

Do we need to worry about overflow here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1387296</commentid>
    <comment_count>12</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-09 09:44:53 -0800</bug_when>
    <thetext>
&gt; &gt; &gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:104
&gt; &gt; &gt; &gt;              new (&amp;container.get()[i]) std::remove_reference_t&lt;decltype(*container.get())&gt;();
&gt; &gt; &gt; 
&gt; &gt; &gt; Not this patch, but just something I&apos;m realizing when reading this code:
&gt; &gt; &gt; using decltype here makes it difficult to read this code and know what&apos;s
&gt; &gt; &gt; going on without looking at another file.
&gt; &gt; 
&gt; &gt; We had that discussion when I originally committed this code. I proposed
&gt; &gt; having a helper for this, motivated by this specific line of code, but my
&gt; &gt; idea wasn&apos;t popular so I dropped it and kept the code that I thought to be
&gt; &gt; unreadable. So I agree with you... Should I revive that patch?
&gt; Nah, not worth it. What’s the actual type resolve to here? Why can’t we
&gt; write the type directly?

The lambda is used to grow two containers of different type. One resolves to CallableFunction, the other to Instance*. auto lambda parameters are more elegant templates... except when decltype comes into play ;-)


&gt; &gt; Source/JavaScriptCore/wasm/WasmTable.cpp:39
&gt; &gt; +    return WTF::roundUpToPowerOfTwo(length);
&gt; 
&gt; Do we need to worry about overflow here?

Shouldn&apos;t be possible. The maximum Table length is 10 million. It&apos;s also encoded as an leb128 limited to 32-bit in the binary format.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330752</attachid>
            <date>2018-01-08 16:34:02 -0800</date>
            <delta_ts>2018-01-08 22:44:13 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-mask-indexed-accesses-to-Table.patch</filename>
            <type>text/plain</type>
            <size>19252</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAyY2Q4MjBhMjQxODdhOTdmZTg2NjYzZTIxZmMyZDA0ODIzYzhlZGM2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDggSmFuIDIwMTggMTY6MTU6MjMgLTA4MDAKU3ViamVjdDogW1BBVENIXSBXZWJBc3Nl
bWJseTogbWFzayBpbmRleGVkIGFjY2Vzc2VzIHRvIFRhYmxlCgotLS0KIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgMzUgKysrKysrKysrKysrCiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAgICB8IDY2ICsr
KysrKysrKysrKystLS0tLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJs
ZS5jcHAgICAgICAgICAgIHwgNDMgKysrKysrKysrLS0tLS0KIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21UYWJsZS5oICAgICAgICAgICAgIHwgMTQgKysrLS0KIC4uLi9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAgIHwgMTkgKysrKy0tLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmggfCAgMSArCiA2IGZp
bGVzIGNoYW5nZWQsIDEyMiBpbnNlcnRpb25zKCspLCA1NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwppbmRleCAwNzhkYzg1Li41MzEzMmI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxOC0wMS0wOCAgSkYgQmFzdGllbiAgPGpmYmFzdGll
bkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNzZW1ibHk6IG1hc2sgaW5kZXhlZCBhY2Nlc3Nl
cyB0byBUYWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgxNDEyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjM2MzIzNj4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJBc3NlbWJseSBUYWJsZSBp
bmRleGVkIGFjY2Vzc2VzIGFyZSB1c2VyLWNvbnRyb2xsZWQgYW5kCisgICAgICAgIGJvdW5kcy1j
aGVja2VkLiBGb3JjZSBhbGxvY2F0aW9ucyBvZiBUYWJsZSBkYXRhIHRvIGJlIGEKKyAgICAgICAg
cG93ZXItb2YtdHdvLCBhbmQgZXhwbGljaXRseSBtYXNrIGFjY2Vzc2VzIGFmdGVyIGJvdW5kcy1j
aGVjaworICAgICAgICBicmFuY2hlcy4KKworICAgICAgICAqIHdhc20vV2FzbUIzSVJHZW5lcmF0
b3IuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJl
Y3QpOgorICAgICAgICAqIHdhc20vV2FzbVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6
VGFibGU6OmFsbG9jYXRlZFNpemUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6c2V0U2l6
ZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpUYWJsZSk6CisgICAgICAgIChKU0M6Oldh
c206OlRhYmxlOjpncm93KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNsZWFyRnVuY3Rp
b24pOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6c2V0RnVuY3Rpb24pOgorICAgICAgICAq
IHdhc20vV2FzbVRhYmxlLmg6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpvZmZzZXRPZlNp
emUpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZNYXNrKToKKyAgICAgICAg
KEpTQzo6V2FzbTo6VGFibGU6Om1hc2sgY29uc3QpOgorICAgICAgICAqIHdhc20vanMvSlNXZWJB
c3NlbWJseVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpKU1dl
YkFzc2VtYmx5VGFibGUpOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3cp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmdldEZ1bmN0aW9uKToKKyAgICAg
ICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjpjbGVhckZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6SlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbik6CisgICAgICAgICogd2FzbS9qcy9K
U1dlYkFzc2VtYmx5VGFibGUuaDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseVRhYmxlOjph
bGxvY2F0ZWRTaXplIGNvbnN0KToKKwogMjAxOC0wMS0wNiAgWXVzdWtlIFN1enVraSAgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyBp
bmNsdWRlcyAiYXJndW1lbnRzIiBhbmQgImNhbGxlciIgZm9yIGJvdW5kIGZ1bmN0aW9ucwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4
IDg0OWE1ZWQuLjU1N2Q2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQjNJUkdlbmVyYXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjAxLDYgKzEyMDEsNyBAQCBhdXRvIEIzSVJHZW5l
cmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVjdG9y
PEV4cHJlc3NpbwogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXI7CiAg
ICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyOwogICAgIEV4cHJlc3Npb25UeXBlIGNh
bGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOworICAgIEV4cHJlc3Npb25UeXBlIG1hc2s7CiAgICAg
ewogICAgICAgICBFeHByZXNzaW9uVHlwZSB0YWJsZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKCksCiAg
ICAgICAgICAgICBpbnN0YW5jZVZhbHVlKCksIHNhZmVDYXN0PGludDMyX3Q+KEluc3RhbmNlOjpv
ZmZzZXRPZlRhYmxlKCkpKTsKQEAgLTEyMTAsNiArMTIxMSw5IEBAIGF1dG8gQjNJUkdlbmVyYXRv
cjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSYgc2lnbmF0dXJlLCBWZWN0b3I8RXhw
cmVzc2lvCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFibGU6Om9mZnNl
dE9mSW5zdGFuY2VzKCkpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlclNpemUgPSBt
X2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMy
LCBvcmlnaW4oKSwKICAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihUYWJsZTo6
b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAgbWFzayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdp
bigpLAorICAgICAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90PihUYWJsZTo6b2Zm
c2V0T2ZNYXNrKCkpKSk7CiAgICAgfQogCiAgICAgLy8gQ2hlY2sgdGhlIGluZGV4IHdlIGFyZSBs
b29raW5nIGZvciBpcyB2YWxpZC4KQEAgLTEyMjIsNDMgKzEyMjYsNDkgQEAgYXV0byBCM0lSR2Vu
ZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1cmUsIFZlY3Rv
cjxFeHByZXNzaW8KICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zm
c2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCi0gICAgRXhw
cmVzc2lvblR5cGUgb2Zmc2V0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9w
cm9jLCBNdWwsIG9yaWdpbigpLAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZh
bHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksIGNhbGxlZUluZGV4KSwKLSAgICAgICAgY29u
c3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb24pKSk7Ci0gICAgRXhw
cmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zm
c2V0KTsKKyAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpOwogCi0gICAgLy8gQ2hlY2sg
dGhhdCB0aGUgQ2FsbGFibGVGdW5jdGlvbiBpcyBpbml0aWFsaXplZC4gV2UgdHJhcCBpZiBpdCBp
c24ndC4gQW4gImludmFsaWQiIFNpZ25hdHVyZUluZGV4IGluZGljYXRlcyBpdCdzIG5vdCBpbml0
aWFsaXplZC4KLSAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNh
biBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXgg
aXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAotICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKENhbGxhYmxlRnVuY3Rpb246OnNpZ25hdHVyZUluZGV4KSA9
PSBzaXplb2YodWludDMyX3QpLCAiTG9hZCBjb2RlZ2VuIGFzc3VtZXMgaTMyIik7Ci0gICAgRXhw
cmVzc2lvblR5cGUgY2FsbGVlU2lnbmF0dXJlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIEludDMyLCBvcmlnaW4oKSwgY2FsbGFibGVG
dW5jdGlvbiwgc2FmZUNhc3Q8aW50MzJfdD4oT0JKRUNUX09GRlNFVE9GKENhbGxhYmxlRnVuY3Rp
b24sIHNpZ25hdHVyZUluZGV4KSkpOworICAgIGlmICghT3B0aW9uczo6ZGlzYWJsZVNwZWN0cmVN
aXRpZ2F0aW9ucygpKQorICAgICAgICBjYWxsZWVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmlnaW4oKSwgbWFzaywgY2FsbGVlSW5kZXgp
OworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVGdW5jdGlvbjsKICAgICB7Ci0gICAgICAg
IENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVl
PihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9yaWdpbigpLAotICAgICAgICAgICAgICAg
IGNhbGxlZVNpZ25hdHVyZUluZGV4LAotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmU6OmludmFs
aWRJbmRleCkpKTsKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBp
bmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCisgICAgICAgIEV4cHJlc3Npb25UeXBlIG9m
ZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmln
aW4oKSwKKyAgICAgICAgICAgIGNhbGxlZUluZGV4LCBjb25zdGFudChwb2ludGVyVHlwZSgpLCBz
aXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbiA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsKKworICAgICAgICAvLyBDaGVjayB0aGF0IHRo
ZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBB
biAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVk
LgorICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBq
dXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMg
MC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIxMAorICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDYWxsYWJsZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkg
PT0gc2l6ZW9mKHVpbnQzMl90KSwgIkxvYWQgY29kZWdlbiBhc3N1bWVzIGkzMiIpOworICAgICAg
ICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgSW50MzIsIG9yaWdpbigpLCBjYWxs
YWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVG
dW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIENoZWNr
VmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3By
b2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGVlU2lnbmF0dXJlSW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmU6
OmludmFsaWRJbmRleCkpKTsKIAotICAgICAgICBjaGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0g
ICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpO
dWxsVGFibGVFbnRyeSk7Ci0gICAgICAgIH0pOwotICAgIH0KKyAgICAgICAgICAgIGNoZWNrLT5z
ZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hl
Y2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQogCi0gICAgLy8gQ2hlY2sgdGhlIHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1
ZSB3ZSBleHBlY3QuCi0gICAgewotICAgICAgICBFeHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25h
dHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJv
Yywgb3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0aW9uOjpnZXQoc2lnbmF0dXJlKSk7Ci0gICAg
ICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1Zh
bHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCBjYWxsZWVTaWdu
YXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkpOworICAgICAgICAvLyBDaGVjayB0
aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIHZhbHVlIHdlIGV4cGVjdC4KKyAgICAgICAgeworICAg
ICAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVu
dEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1
cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOworICAgICAgICAgICAgQ2hlY2tWYWx1ZSog
Y2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hl
Y2ssIG9yaWdpbigpLAorICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwg
ZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkpOwogCi0gICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYpIHsKLSAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlv
blR5cGU6OkJhZFNpZ25hdHVyZSk7Ci0gICAgICAgIH0pOworICAgICAgICAgICAgY2hlY2stPnNl
dEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5l
cmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVj
ayhqaXQsIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIC8vIERvIGEgY29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgog
ICAgIHsKICAgICAgICAgVmFsdWUqIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgp
LAotICAgICAgICAgICAgY29uc3RhbnQocG9pbnRlclR5cGUoKSwgc2l6ZW9mKEluc3RhbmNlKikp
KTsKKyAgICAgICAgICAgIGNhbGxlZUluZGV4LCBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXpl
b2YoSW5zdGFuY2UqKSkpOwogICAgICAgICBWYWx1ZSogbmV3Q29udGV4dEluc3RhbmNlID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgaW5zdGFuY2VzQnVmZmVyLCBvZmZzZXQpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKaW5kZXggOGVlZWUxZi4u
ZjAxZjYxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYg
KzM0LDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKK3VpbnQzMl90
IFRhYmxlOjphbGxvY2F0ZWRTaXplKHVpbnQzMl90IHNpemUpCit7CisgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvUG93ZXJPZlR3byhzaXplKTsKK30KKwordm9pZCBUYWJsZTo6c2V0U2l6ZSh1aW50
MzJfdCBzaXplKQoreworICAgIG1fc2l6ZSA9IHNpemU7CisgICAgbV9tYXNrID0gV1RGOjptYXNr
Rm9yU2l6ZShzaXplKTsKKyAgICBBU1NFUlQoaXNWYWxpZFNpemUoc2l6ZSkpOworICAgIEFTU0VS
VChtX21hc2sgPT0gV1RGOjptYXNrRm9yU2l6ZShhbGxvY2F0ZWRTaXplKHNpemUpKSk7Cit9CisK
IFJlZlB0cjxUYWJsZT4gVGFibGU6OmNyZWF0ZSh1aW50MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlv
bmFsPHVpbnQzMl90PiBtYXhpbXVtKQogewogICAgIGlmICghaXNWYWxpZFNpemUoaW5pdGlhbCkp
CkBAIC00NywxNiArNjAsMTUgQEAgVGFibGU6On5UYWJsZSgpCiAKIFRhYmxlOjpUYWJsZSh1aW50
MzJfdCBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKQogewotICAgIG1f
c2l6ZSA9IGluaXRpYWw7CisgICAgc2V0U2l6ZShpbml0aWFsKTsKICAgICBtX21heGltdW0gPSBt
YXhpbXVtOwotICAgIEFTU0VSVChpc1ZhbGlkU2l6ZShtX3NpemUpKTsKICAgICBBU1NFUlQoIW1f
bWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1fc2l6ZSk7CiAKICAgICAvLyBGSVhNRTogSXQgbWln
aHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVj
IHJlY29tbWVuZHMgZG9pbmcgc28uCiAgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2lu
ZyB0aGF0LgotICAgIG1fZnVuY3Rpb25zID0gTWFsbG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rp
b24+OjptYWxsb2MoKHNpemVvZihXYXNtOjpDYWxsYWJsZUZ1bmN0aW9uKSAqIENoZWNrZWQ8c2l6
ZV90PihzaXplKCkpKS51bnNhZmVHZXQoKSk7Ci0gICAgbV9pbnN0YW5jZXMgPSBNYWxsb2NQdHI8
SW5zdGFuY2UqPjo6bWFsbG9jKChzaXplb2YoSW5zdGFuY2UqKSAqIENoZWNrZWQ8c2l6ZV90Pihz
aXplKCkpKS51bnNhZmVHZXQoKSk7Ci0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemUo
KTsgKytpKSB7CisgICAgbV9mdW5jdGlvbnMgPSBNYWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5j
dGlvbj46Om1hbGxvYygoc2l6ZW9mKFdhc206OkNhbGxhYmxlRnVuY3Rpb24pICogQ2hlY2tlZDxz
aXplX3Q+KGFsbG9jYXRlZFNpemUobV9zaXplKSkpLnVuc2FmZUdldCgpKTsKKyAgICBtX2luc3Rh
bmNlcyA9IE1hbGxvY1B0cjxJbnN0YW5jZSo+OjptYWxsb2MoKHNpemVvZihJbnN0YW5jZSopICog
Q2hlY2tlZDxzaXplX3Q+KGFsbG9jYXRlZFNpemUobV9zaXplKSkpLnVuc2FmZUdldCgpKTsKKyAg
ICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYWxsb2NhdGVkU2l6ZShtX3NpemUpOyArK2kpIHsK
ICAgICAgICAgbmV3ICgmbV9mdW5jdGlvbnMuZ2V0KClbaV0pIENhbGxhYmxlRnVuY3Rpb24oKTsK
ICAgICAgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2ldLnNpZ25hdHVyZUluZGV4ID09IFdh
c206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBp
bGVkIGNvZGUuCiAgICAgICAgIG1faW5zdGFuY2VzLmdldCgpW2ldID0gbnVsbHB0cjsKQEAgLTgx
LDEzICs5MywxNCBAQCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBUYWJsZTo6Z3Jvdyh1aW50MzJf
dCBkZWx0YSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGF1dG8gY2hlY2tl
ZEdyb3cgPSBbJl0gKGF1dG8mIGNvbnRhaW5lcikgewotICAgICAgICBDaGVja2VkIHJlYWxsb2NT
aXplQ2hlY2tlZCA9IG5ld1NpemVDaGVja2VkOworICAgICAgICBDaGVja2VkIHJlYWxsb2NTaXpl
Q2hlY2tlZCA9IGFsbG9jYXRlZFNpemUobmV3U2l6ZUNoZWNrZWQudW5zYWZlR2V0KCkpOwogICAg
ICAgICByZWFsbG9jU2l6ZUNoZWNrZWQgKj0gc2l6ZW9mKCpjb250YWluZXIuZ2V0KCkpOwogICAg
ICAgICB1aW50MzJfdCByZWFsbG9jU2l6ZTsKICAgICAgICAgaWYgKHJlYWxsb2NTaXplQ2hlY2tl
ZC5zYWZlR2V0KHJlYWxsb2NTaXplKSA9PSBDaGVja2VkU3RhdGU6OkRpZE92ZXJmbG93KQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBjb250YWluZXIucmVhbGxvYyhyZWFsbG9j
U2l6ZSk7Ci0gICAgICAgIGZvciAodWludDMyX3QgaSA9IG1fc2l6ZTsgaSA8IG5ld1NpemU7ICsr
aSkKKyAgICAgICAgaWYgKHJlYWxsb2NTaXplID4gYWxsb2NhdGVkU2l6ZShtX3NpemUpKQorICAg
ICAgICAgICAgY29udGFpbmVyLnJlYWxsb2MocmVhbGxvY1NpemUpOworICAgICAgICBmb3IgKHVp
bnQzMl90IGkgPSBtX3NpemU7IGkgPCBhbGxvY2F0ZWRTaXplKG5ld1NpemUpOyArK2kpCiAgICAg
ICAgICAgICBuZXcgKCZjb250YWluZXIuZ2V0KClbaV0pIHN0ZDo6cmVtb3ZlX3JlZmVyZW5jZV90
PGRlY2x0eXBlKCpjb250YWluZXIuZ2V0KCkpPigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9OwpAQCAtOTcsNyArMTEwLDcgQEAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gVGFibGU6Omdy
b3codWludDMyX3QgZGVsdGEpCiAgICAgaWYgKCFjaGVja2VkR3JvdyhtX2luc3RhbmNlcykpCiAg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBtX3NpemUgPSBuZXdTaXplOworICAg
IHNldFNpemUobmV3U2l6ZSk7CiAKICAgICByZXR1cm4gbmV3U2l6ZTsKIH0KQEAgLTEwNSwxNiAr
MTE4LDE2IEBAIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IFRhYmxlOjpncm93KHVpbnQzMl90IGRl
bHRhKQogdm9pZCBUYWJsZTo6Y2xlYXJGdW5jdGlvbih1aW50MzJfdCBpbmRleCkKIHsKICAgICBS
RUxFQVNFX0FTU0VSVChpbmRleCA8IHNpemUoKSk7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5k
ZXhdID0gV2FzbTo6Q2FsbGFibGVGdW5jdGlvbigpOwotICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5n
ZXQoKVtpbmRleF0uc2lnbmF0dXJlSW5kZXggPT0gV2FzbTo6U2lnbmF0dXJlOjppbnZhbGlkSW5k
ZXgpOyAvLyBXZSByZWx5IG9uIHRoaXMgaW4gY29tcGlsZWQgY29kZS4KLSAgICBtX2luc3RhbmNl
cy5nZXQoKVtpbmRleF0gPSBudWxscHRyOworICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4ICYg
bV9tYXNrXSA9IFdhc206OkNhbGxhYmxlRnVuY3Rpb24oKTsKKyAgICBBU1NFUlQobV9mdW5jdGlv
bnMuZ2V0KClbaW5kZXggJiBtX21hc2tdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVy
ZTo6aW52YWxpZEluZGV4KTsgLy8gV2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCisg
ICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5kZXggJiBtX21hc2tdID0gbnVsbHB0cjsKIH0KIAogdm9p
ZCBUYWJsZTo6c2V0RnVuY3Rpb24odWludDMyX3QgaW5kZXgsIENhbGxhYmxlRnVuY3Rpb24gZnVu
Y3Rpb24sIEluc3RhbmNlKiBpbnN0YW5jZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8
IHNpemUoKSk7Ci0gICAgbV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhdID0gZnVuY3Rpb247Ci0gICAg
bV9pbnN0YW5jZXMuZ2V0KClbaW5kZXhdID0gaW5zdGFuY2U7CisgICAgbV9mdW5jdGlvbnMuZ2V0
KClbaW5kZXggJiBtX21hc2tdID0gZnVuY3Rpb247CisgICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5k
ZXggJiBtX21hc2tdID0gaW5zdGFuY2U7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpUYWJs
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAppbmRleCA1MjlkZmNmLi40ZTFm
NTdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVGFibGUuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCwyMCArNTAsMjYg
QEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCk7CiAgICAgdm9pZCBz
ZXRGdW5jdGlvbih1aW50MzJfdCwgQ2FsbGFibGVGdW5jdGlvbiwgSW5zdGFuY2UqKTsKIAotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTaXplKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFRhYmxlLCBtX3NpemUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkZ1bmN0aW9u
cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJsZSwgbV9mdW5jdGlvbnMpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkluc3RhbmNlcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihUYWJsZSwgbV9pbnN0YW5jZXMpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUsIG1fc2l6ZSk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWFzaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihU
YWJsZSwgbV9tYXNrKTsgfQogCisgICAgc3RhdGljIHVpbnQzMl90IGFsbG9jYXRlZFNpemUodWlu
dDMyX3Qgc2l6ZSk7CisgICAgdWludDMyX3QgbWFzaygpIGNvbnN0IHsgcmV0dXJuIG1fbWFzazsg
fQogICAgIHN0YXRpYyBib29sIGlzVmFsaWRTaXplKHVpbnQzMl90IHNpemUpIHsgcmV0dXJuIHNp
emUgPCBtYXhUYWJsZUVudHJpZXM7IH0KIAogcHJpdmF0ZToKICAgICBUYWJsZSh1aW50MzJfdCBp
bml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBtYXhpbXVtKTsKIAotICAgIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IG1fbWF4aW11bTsKLSAgICB1aW50MzJfdCBtX3NpemU7CisgICAgdm9p
ZCBzZXRTaXplKHVpbnQzMl90KTsKKwogICAgIE1hbGxvY1B0cjxDYWxsYWJsZUZ1bmN0aW9uPiBt
X2Z1bmN0aW9uczsKICAgICAvLyBjYWxsX2luZGlyZWN0IG5lZWRzIHRvIGRvIGFuIEluc3RhbmNl
IGNoZWNrIHRvIHBvdGVudGlhbGx5IGNvbnRleHQgc3dpdGNoIHdoZW4gY2FsbGluZyBhIGZ1bmN0
aW9uIHRvIGFub3RoZXIgaW5zdGFuY2UuIFdlIGNhbiBob2xkIHJhdyBwb2ludGVycyB0byBJbnN0
YW5jZSBoZXJlIGJlY2F1c2UgdGhlIGVtYmVkZGVyIGVuc3VyZXMgdGhhdCBUYWJsZSBrZWVwcyBh
bGwgdGhlIGluc3RhbmNlcyBhbGl2ZS4gV2UgY291bGRuJ3QgaG9sZCBhIFJlZiBoZXJlIGJlY2F1
c2UgaXQgd291bGQgY2F1c2UgY3ljbGVzLgogICAgIE1hbGxvY1B0cjxJbnN0YW5jZSo+IG1faW5z
dGFuY2VzOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICB1aW50MzJfdCBtX21hc2s7CisgICAg
c3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOwogfTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5VGFibGUuY3BwCmluZGV4IDRkZTRiOTcuLjhlZTViMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYyLDggKzYyLDggQEAgSlNXZWJBc3NlbWJseVRhYmxlOjpKU1dlYkFzc2VtYmx5VGFibGUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUmVmPFdhc206OlQKIHsKICAgICAvLyBGSVhNRTog
SXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0ZSBtYXhpbXVtIGhlcmUuIFRo
ZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCiAgICAgLy8gQnV0IGZvciBub3csIHdlJ3JlIG5v
dCBkb2luZyB0aGF0LgotICAgIG1fanNGdW5jdGlvbnMgPSBNYWxsb2NQdHI8V3JpdGVCYXJyaWVy
PEpTT2JqZWN0Pj46Om1hbGxvYygoc2l6ZW9mKFdyaXRlQmFycmllcjxKU09iamVjdD4pICogQ2hl
Y2tlZDxzaXplX3Q+KHNpemUoKSkpLnVuc2FmZUdldCgpKTsKLSAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgc2l6ZSgpOyArK2kpCisgICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0
ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKChzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0
PikgKiBDaGVja2VkPHNpemVfdD4oYWxsb2NhdGVkU2l6ZSgpKSkudW5zYWZlR2V0KCkpOworICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBhbGxvY2F0ZWRTaXplKCk7ICsraSkKICAgICAgICAg
bmV3KCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiB9
CiAKQEAgLTEwMSw5ICsxMDEsMTAgQEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWlu
dDMyX3QgZGVsdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHNpemVfdCBuZXdTaXpl
ID0gZ3Jldy52YWx1ZSgpOwotICAgIG1fanNGdW5jdGlvbnMucmVhbGxvYygoc2l6ZW9mKFdyaXRl
QmFycmllcjxKU09iamVjdD4pICogQ2hlY2tlZDxzaXplX3Q+KG5ld1NpemUpKS51bnNhZmVHZXQo
KSk7CisgICAgaWYgKG5ld1NpemUgPiBtX3RhYmxlLT5hbGxvY2F0ZWRTaXplKG9sZFNpemUpKQor
ICAgICAgICBtX2pzRnVuY3Rpb25zLnJlYWxsb2MoKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmpl
Y3Q+KSAqIENoZWNrZWQ8c2l6ZV90PihtX3RhYmxlLT5hbGxvY2F0ZWRTaXplKG5ld1NpemUpKSku
dW5zYWZlR2V0KCkpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBuZXdTaXpl
OyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX3RhYmxlLT5hbGxvY2F0
ZWRTaXplKG5ld1NpemUpOyArK2kpCiAgICAgICAgIG5ldyAoJm1fanNGdW5jdGlvbnMuZ2V0KClb
aV0pIFdyaXRlQmFycmllcjxKU09iamVjdD4oKTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTEy
LDI1ICsxMTMsMjUgQEAgYm9vbCBKU1dlYkFzc2VtYmx5VGFibGU6Omdyb3codWludDMyX3QgZGVs
dGEpCiBKU09iamVjdCogSlNXZWJBc3NlbWJseVRhYmxlOjpnZXRGdW5jdGlvbih1aW50MzJfdCBp
bmRleCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IHNpemUoKSk7Ci0gICAgcmV0dXJu
IG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworICAgIHJldHVybiBtX2pzRnVuY3Rp
b25zLmdldCgpW2luZGV4ICYgbV90YWJsZS0+bWFzaygpXS5nZXQoKTsKIH0KIAogdm9pZCBKU1dl
YkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7CiAgICAgbV90
YWJsZS0+Y2xlYXJGdW5jdGlvbihpbmRleCk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRl
eF0gPSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CisgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtp
bmRleCAmIG1fdGFibGUtPm1hc2soKV0gPSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiB9CiAK
IHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGlu
ZGV4LCBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbikKIHsKICAgICBtX3RhYmxlLT5zZXRG
dW5jdGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgJmZ1bmN0aW9uLT5p
bnN0YW5jZSgpLT5pbnN0YW5jZSgpKTsKLSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5z
ZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYg
bV90YWJsZS0+bWFzaygpXS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKIH0KIAogdm9pZCBKU1dl
YkFzc2VtYmx5VGFibGU6OnNldEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFz
c2VtYmx5V3JhcHBlckZ1bmN0aW9uKiBmdW5jdGlvbikKIHsKICAgICBtX3RhYmxlLT5zZXRGdW5j
dGlvbihpbmRleCwgZnVuY3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgJmZ1bmN0aW9uLT5pbnN0
YW5jZSgpLT5pbnN0YW5jZSgpKTsKLSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQo
dm0sIHRoaXMsIGZ1bmN0aW9uKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV90
YWJsZS0+bWFzaygpXS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1i
bHlUYWJsZS5oCmluZGV4IDY5NjQxNTguLjIzYzhmNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCkBAIC01MSw2ICs1MSw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7IHJl
dHVybiBXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUoc2l6ZSk7IH0KICAgICBzdGQ6Om9wdGlvbmFs
PHVpbnQzMl90PiBtYXhpbXVtKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+bWF4aW11bSgpOyB9
CiAgICAgdWludDMyX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGFibGUtPnNpemUoKTsgfQor
ICAgIHVpbnQzMl90IGFsbG9jYXRlZFNpemUoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5hbGxv
Y2F0ZWRTaXplKHNpemUoKSk7IH0KICAgICBib29sIGdyb3codWludDMyX3QgZGVsdGEpIFdBUk5f
VU5VU0VEX1JFVFVSTjsKICAgICBKU09iamVjdCogZ2V0RnVuY3Rpb24odWludDMyX3QpOwogICAg
IHZvaWQgY2xlYXJGdW5jdGlvbih1aW50MzJfdCk7Ci0tIAoyLjEwLjEKCg==
</data>
<flag name="review"
          id="349772"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330797</attachid>
            <date>2018-01-08 22:44:13 -0800</date>
            <delta_ts>2018-01-08 22:45:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-mask-indexed-accesses-to-Table.patch</filename>
            <type>text/plain</type>
            <size>37013</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAzYWMxMWZlZWQwODk0ZTNlNGYxNDdlNTdjMGFjMjU5N2RiZjQ0ZjdmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDggSmFuIDIwMTggMTY6MTU6MjMgLTA4MDAKU3ViamVjdDogW1BBVENIXSBXZWJBc3Nl
bWJseTogbWFzayBpbmRleGVkIGFjY2Vzc2VzIHRvIFRhYmxlCgotLS0KIEpTVGVzdHMvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMgKysrKwogSlNUZXN0cy93
YXNtL2pzLWFwaS90YWJsZS5qcyAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA2MyArKysrKysr
KysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAgICAgfCAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwICAgICAgfCAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwICAgICAg
ICAgICAgICAgICAgfCAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oICAgICAgICAgICAgfCAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwICAgfCA3NiArKysrKysrKysrKystLS0tLS0tLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAgICAgICAgICAgIHwgNzggKysrKysrKysrKysr
Ky0tLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAg
ICAgICAgfCAxOCArKystLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAg
ICAgICAgICAgICAgfCAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmNwcCAgfCAyOSArKysrLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmggfCAgNSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwICAgICAgICAgICAgfCAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5jcHAgICAgICAgICAgfCAxNiArKy0tLQogMTUgZmlsZXMgY2hhbmdl
ZCwgMjE5IGluc2VydGlvbnMoKyksIDEwNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdlYzdjNmUuLjVjYTE4ZjMg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTgtMDEtMDggIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYXNrIGluZGV4ZWQgYWNjZXNzZXMgdG8gVGFi
bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTQx
MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYzNjMyMzY+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIGVycm9yIG1lc3NhZ2VzLgorCisg
ICAgICAgICogd2FzbS9qcy1hcGkvdGFibGUuanM6CisgICAgICAgIChhc3NlcnQudGhyb3dzLldl
YkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93KToKKwogMjAxOC0wMS0wNiAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBPYmplY3QuZ2V0T3duUHJv
cGVydHlOYW1lcyBpbmNsdWRlcyAiYXJndW1lbnRzIiBhbmQgImNhbGxlciIgZm9yIGJvdW5kIGZ1
bmN0aW9ucwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVz
dHMvd2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNDEzMjg0ZC4uYjgzMmUxMSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBp
L3RhYmxlLmpzCkBAIC0yNDMsMTQgKzI0MywxNCBAQCBhc3NlcnQudGhyb3dzKCgpID0+IFdlYkFz
c2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93KHVuZGVmaW5lZCksIFR5cGVFcnJvciwgYGV4cAog
CiAgICAgewogICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxl
bWVudDogImFueWZ1bmMiLCBpbml0aWFsOiAyMH0pOwotICAgICAgICBhc3NlcnQudGhyb3dzKCgp
ID0+IHRhYmxlLmdldCgyMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5
cGUuZ2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIHRhYmxl
Iik7CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGFibGUuZ2V0KDIwKSwgUmFuZ2VFcnJv
ciwgIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxl
c3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSB0YWJsZSIpOwogICAgICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDIwOyBpKyspCiAgICAgICAgICAgICBhc3NlcnQuZXEodGFibGUuZ2V0KGkpLCBudWxs
KTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5
LlRhYmxlKHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDIwfSk7Ci0gICAgICAgIGFzc2Vy
dC50aHJvd3MoKCkgPT4gdGFibGUuc2V0KDIwLCBudWxsKSwgUmFuZ2VFcnJvciwgIldlYkFzc2Vt
Ymx5LlRhYmxlLnByb3RvdHlwZS5zZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUg
c2l6ZSBvZiB0aGUgdGFibGUiKTsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0YWJsZS5z
ZXQoMjAsIG51bGwpLCBSYW5nZUVycm9yLCAiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLnNl
dCBleHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHRhYmxlIik7
CiAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykKICAgICAgICAgICAgIHRhYmxl
LnNldChpLCBudWxsKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAwNzhkYzg1
Li4zYWZmMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAx
OC0wMS0wOCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2Vi
QXNzZW1ibHk6IG1hc2sgaW5kZXhlZCBhY2Nlc3NlcyB0byBUYWJsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNDEyCisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8zNjM2MzIzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKwor
ICAgICAgICBXZWJBc3NlbWJseSBUYWJsZSBpbmRleGVkIGFjY2Vzc2VzIGFyZSB1c2VyLWNvbnRy
b2xsZWQgYW5kCisgICAgICAgIGJvdW5kcy1jaGVja2VkLiBGb3JjZSBhbGxvY2F0aW9ucyBvZiBU
YWJsZSBkYXRhIHRvIGJlIGEKKyAgICAgICAgcG93ZXItb2YtdHdvLCBhbmQgZXhwbGljaXRseSBt
YXNrIGFjY2Vzc2VzIGFmdGVyIGJvdW5kcy1jaGVjaworICAgICAgICBicmFuY2hlcy4KKworICAg
ICAgICBSZW5hbWUgbWlzbGVhZGluZyB1c2FnZSBvZiAic2l6ZSIgd2hlbiAibGVuZ3RoIiBvZiBh
IFRhYmxlIHdhcworICAgICAgICBpbnRlbmRlZC4KKworICAgICAgICBSZW5hbWUgdGhlIFNwZWN0
cmUgb3B0aW9uIGZyb20gImRpc2FibGUiIHRvICJlbmFibGUiLgorCisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpMb3dlckRGR1RvQjMpOgorICAgICAg
ICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgICogcnVu
dGltZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2lu
dGVyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0
KToKKyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlRh
YmxlOjphbGxvY2F0ZWRMZW5ndGgpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6c2V0TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6
Oldhc206OlRhYmxlOjpUYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpncm93KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpXYXNtOjpUYWJsZTo6c2V0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vV2FzbVRhYmxlLmg6
CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoSlND
OjpXYXNtOjpUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJs
ZTo6b2Zmc2V0T2ZNYXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1hc2sgY29uc3Qp
OgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZExlbmd0aCk6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5
VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1i
bHlUYWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChK
U0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dl
YkFzc2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlU
YWJsZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRMZW5ndGgp
OgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omxlbmd0aCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6YWxsb2NhdGVkTGVuZ3RoIGNvbnN0KToKKyAg
ICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pz
L1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJs
eVRhYmxlUHJvdG9GdW5jTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVBy
b3RvRnVuY0dyb3cpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0
KToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCk6CisKIDIwMTgt
MDEtMDYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAg
T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgaW5jbHVkZXMgImFyZ3VtZW50cyIgYW5kICJjYWxs
ZXIiIGZvciBib3VuZCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMzQ5Y2NmNC4uOTVjZWE5NyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3
NCw3IEBAIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYgaml0KQog
ICAgICwgbV9jdXJyZW50Tm9kZSgwKQogICAgICwgbV9sYXN0R2VuZXJhdGVkTm9kZShMYXN0Tm9k
ZVR5cGUpCiAgICAgLCBtX2luZGV4SW5CbG9jaygwKQotICAgICwgbV9pbmRleE1hc2tpbmdNb2Rl
KE9wdGlvbnM6OmRpc2FibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSA/IEluZGV4TWFza2luZ0Rpc2Fi
bGVkIDogSW5kZXhNYXNraW5nRW5hYmxlZCkKKyAgICAsIG1faW5kZXhNYXNraW5nTW9kZShPcHRp
b25zOjplbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSA/IEluZGV4TWFza2luZ0VuYWJsZWQgOiBJ
bmRleE1hc2tpbmdEaXNhYmxlZCkKICAgICAsIG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuZ3JhcGgo
KS5mcmFtZVJlZ2lzdGVyQ291bnQoKSkKICAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKICAg
ICAsIG1faW50ZXJwcmV0ZXIobV9qaXQuZ3JhcGgoKSwgbV9zdGF0ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCBiYjc3ZGFjLi5hM2QyYWFi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMTQ5LDcgKzE0OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2F2YWlsYWJpbGl0eUNhbGN1
bGF0b3IobV9ncmFwaCkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAs
IG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCi0gICAgICAgICwgbV9pbmRleE1h
c2tpbmdNb2RlKE9wdGlvbnM6OmRpc2FibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSA/IEluZGV4TWFz
a2luZ0Rpc2FibGVkIDogSW5kZXhNYXNraW5nRW5hYmxlZCkKKyAgICAgICAgLCBtX2luZGV4TWFz
a2luZ01vZGUoT3B0aW9uczo6ZW5hYmxlU3BlY3RyZU1pdGlnYXRpb25zKCkgPyAgSW5kZXhNYXNr
aW5nRW5hYmxlZCA6IEluZGV4TWFza2luZ0Rpc2FibGVkKQogICAgIHsKICAgICB9CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggODRiNWU1My4uNzdkNDBhNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgSklUOjpKSVQoVk0qIHZtLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQp
CiAgICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigqdm0pCiAgICAgLCBtX2NhbkJlT3B0
aW1pemVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQotICAgICwg
bV9zaG91bGRVc2VJbmRleE1hc2tpbmcoT3B0aW9uczo6ZGlzYWJsZVNwZWN0cmVNaXRpZ2F0aW9u
cygpID8gZmFsc2UgOiB0cnVlKQorICAgICwgbV9zaG91bGRVc2VJbmRleE1hc2tpbmcoT3B0aW9u
czo6ZW5hYmxlU3BlY3RyZU1pdGlnYXRpb25zKCkpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVj
b2RlT2Zmc2V0KGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQogewogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDc4NmQ5OTkuLjY1YzNkZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NTgsNyArNDU4LDcgQEAgY29u
c3RleHByIGJvb2wgZW5hYmxlQXN5bmNJdGVyYXRpb24gPSBmYWxzZTsKICAgICBcCiAgICAgdihi
b29sLCB1c2VXZWJBc3NlbWJseSwgdHJ1ZSwgTm9ybWFsLCAiRXhwb3NlIHRoZSBXZWJBc3NlbWJs
eSBnbG9iYWwgb2JqZWN0LiIpIFwKICAgICBcCi0gICAgdihib29sLCBkaXNhYmxlU3BlY3RyZU1p
dGlnYXRpb25zLCBmYWxzZSwgUmVzdHJpY3RlZCwgIkRpc2FibGUgU3BlY3RyZSBtaXRpZ2F0aW9u
cy4iKSBcCisgICAgdihib29sLCBlbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMsIHRydWUsIFJlc3Ry
aWN0ZWQsICJFbmFibGUgU3BlY3RyZSBtaXRpZ2F0aW9ucy4iKSBcCiAgICAgXAogICAgIHYoYm9v
bCwgdXNlQXN5bmNJdGVyYXRvciwgZW5hYmxlQXN5bmNJdGVyYXRpb24sIE5vcm1hbCwgIkFsbG93
IHRvIHVzZSBBc3luYyBJdGVyYXRvciBpbiBKUy4iKSBcCiAgICAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDg0OWE1ZWQuLjVm
YTM4NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC02NTAsNyArNjUwLDcgQEAgaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9y
OjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLAogICAg
ICAgICAvLyBXZSdyZSBub3QgdXNpbmcgc2lnbmFsIGhhbmRsaW5nIGF0IGFsbCwgd2UgbXVzdCB0
aGVyZWZvcmUgY2hlY2sgdGhhdCBubyBtZW1vcnkgYWNjZXNzIGV4Y2VlZHMgdGhlIGN1cnJlbnQg
bWVtb3J5IHNpemUuCiAgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVHUFIpOwogICAgICAgICBB
U1NFUlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKLSAgICAgICAgR1BSUmVn
IGluZGV4aW5nTWFzayA9IChzaG91bGRNYXNrID09IFNob3VsZE1hc2s6OlllcyAmJiAhT3B0aW9u
czo6ZGlzYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygpKSA/IG1faW5kZXhpbmdNYXNrR1BSIDogSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nTWFzayA9IChzaG91bGRNYXNrID09
IFNob3VsZE1hc2s6OlllcyAmJiBPcHRpb25zOjplbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSkg
PyBtX2luZGV4aW5nTWFza0dQUiA6IEludmFsaWRHUFJSZWc7CiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG1f
bWVtb3J5U2l6ZUdQUiwgaW5kZXhpbmdNYXNrLCBwb2ludGVyLCBzaXplT2ZPcGVyYXRpb24gKyBv
ZmZzZXQgLSAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTIwMCw3ICsxMjAwLDggQEAg
YXV0byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWdu
YXR1cmUsIFZlY3RvcjxFeHByZXNzaW8KIAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVu
Y3Rpb25CdWZmZXI7CiAgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyOwotICAgIEV4
cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOworICAgIEV4cHJlc3Npb25U
eXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGg7CisgICAgRXhwcmVzc2lvblR5cGUgbWFz
azsKICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmln
aW4oKSwKICAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5z
dGFuY2U6Om9mZnNldE9mVGFibGUoKSkpOwpAQCAtMTIwOCw1NyArMTIwOSw2NiBAQCBhdXRvIEIz
SVJHZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwg
VmVjdG9yPEV4cHJlc3NpbwogICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRh
YmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CiAgICAgICAgIGluc3RhbmNlc0J1ZmZlciA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRl
clR5cGUoKSwgb3JpZ2luKCksCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4o
VGFibGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpKTsKLSAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlclNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIEludDMyLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQz
Ml90PihUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlckxlbmd0aCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJv
YywgTG9hZCwgSW50MzIsIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGlu
dDMyX3Q+KFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgICAgIG1hc2sgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksCisgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDMyLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50
MzJfdD4oVGFibGU6Om9mZnNldE9mTWFzaygpKSkpOwogICAgIH0KIAogICAgIC8vIENoZWNrIHRo
ZSBpbmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCiAgICAgewogICAgICAgICBDaGVj
a1ZhbHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9w
cm9jLCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIG9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2Fs
bGFibGVGdW5jdGlvbkJ1ZmZlclNpemUpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWJvdmVFcXVhbCwgb3JpZ2luKCksIGNhbGxlZUluZGV4
LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwg
RXhjZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNDYWxsSW5kaXJlY3QpOwogICAgICAgICB9KTsKICAg
ICB9CiAKLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNl
IHdlIGFyZSBsb29raW5nIGZvci4KLSAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQgPSBtX2N1cnJl
bnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCi0gICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4o
KSwgY2FsbGVlSW5kZXgpLAotICAgICAgICBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2Yo
Q2FsbGFibGVGdW5jdGlvbikpKTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9u
ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigp
LCBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOworICAgIGNhbGxlZUluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBj
YWxsZWVJbmRleCk7CiAKLSAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlz
IGluaXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJl
SW5kZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgotICAgIC8vIEZJWE1FOiB3aGVu
IHdlIGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVj
YXVzZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2FsbGFi
bGVGdW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50MzJfdCksICJMb2FkIGNv
ZGVnZW4gYXNzdW1lcyBpMzIiKTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJ
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgSW50MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7CisgICAg
aWYgKE9wdGlvbnM6OmVuYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygpKQorICAgICAgICBjYWxsZWVJ
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBv
cmlnaW4oKSwgbWFzaywgY2FsbGVlSW5kZXgpOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFi
bGVGdW5jdGlvbjsKICAgICB7Ci0gICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWws
IG9yaWdpbigpLAotICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVyZUluZGV4LAotICAgICAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2Ms
IG9yaWdpbigpLCBTaWduYXR1cmU6OmludmFsaWRJbmRleCkpKTsKKyAgICAgICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3Iu
CisgICAgICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmRO
ZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIGNhbGxlZUluZGV4
LCBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKKyAg
ICAgICAgY2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+
KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsK
KworICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxp
emVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5k
aWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgorICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBo
YXZlIHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2Ug
U2lnbmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3NzIxMAorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDYWxsYWJs
ZUZ1bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQzMl90KSwgIkxvYWQgY29k
ZWdlbiBhc3N1bWVzIGkzMiIpOworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1
cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90
PihPQkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBv
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlU2lnbmF0dXJlSW5kZXgsCisgICAg
ICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmU6OmludmFsaWRJbmRleCkpKTsKIAotICAgICAgICBj
aGVjay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9u
Q2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7Ci0gICAgICAgIH0pOwot
ICAgIH0KKyAgICAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFi
bGVFbnRyeSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogCi0gICAgLy8gQ2hlY2sgdGhl
IHNpZ25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBleHBlY3QuCi0gICAgewotICAgICAgICBF
eHByZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0
aW9uOjpnZXQoc2lnbmF0dXJlKSk7Ci0gICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90
RXF1YWwsIG9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJ
bmRleCkpOworICAgICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIHZhbHVl
IHdlIGV4cGVjdC4KKyAgICAgICAgeworICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0
ZWRTaWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
PihtX3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkp
OworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5k
TmV3PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAorICAgICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9yaWdp
bigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkpOwogCi0g
ICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
QjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIHRoaXMtPmVtaXRF
eGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7Ci0gICAgICAg
IH0pOworICAgICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYg
aml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAg
ICAgIHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25h
dHVyZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIERvIGEg
Y29udGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgogICAgIHsKICAgICAgICAgVmFsdWUqIG9mZnNldCA9
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4
dDMyLCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAotICAgICAgICAgICAgY29uc3RhbnQocG9pbnRl
clR5cGUoKSwgc2l6ZW9mKEluc3RhbmNlKikpKTsKKyAgICAgICAgICAgIGNhbGxlZUluZGV4LCBj
b25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoSW5zdGFuY2UqKSkpOwogICAgICAgICBWYWx1
ZSogbmV3Q29udGV4dEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlW
YWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwg
aW5zdGFuY2VzQnVmZmVyLCBvZmZzZXQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UYWJsZS5jcHAKaW5kZXggOGVlZWUxZi4uMDI1YzBiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhYmxlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw5ICszNCwyMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIFdhc20gewogCit1aW50MzJfdCBUYWJsZTo6YWxsb2NhdGVkTGVuZ3RoKHVpbnQz
Ml90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKGxlbmd0
aCk7Cit9CisKK3ZvaWQgVGFibGU6OnNldExlbmd0aCh1aW50MzJfdCBsZW5ndGgpCit7CisgICAg
bV9sZW5ndGggPSBsZW5ndGg7CisgICAgbV9tYXNrID0gV1RGOjptYXNrRm9yU2l6ZShsZW5ndGgp
OworICAgIEFTU0VSVChpc1ZhbGlkTGVuZ3RoKGxlbmd0aCkpOworICAgIEFTU0VSVChtX21hc2sg
PT0gV1RGOjptYXNrRm9yU2l6ZShhbGxvY2F0ZWRMZW5ndGgobGVuZ3RoKSkpOworfQorCiBSZWZQ
dHI8VGFibGU+IFRhYmxlOjpjcmVhdGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gbWF4aW11bSkKIHsKLSAgICBpZiAoIWlzVmFsaWRTaXplKGluaXRpYWwpKQorICAg
IGlmICghaXNWYWxpZExlbmd0aChpbml0aWFsKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgZmFzdE1hbGxvYyhzaXplb2YoVGFibGUp
KSkgVGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOwogfQpAQCAtNDcsMTYgKzYwLDE2IEBAIFRhYmxl
Ojp+VGFibGUoKQogCiBUYWJsZTo6VGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25h
bDx1aW50MzJfdD4gbWF4aW11bSkKIHsKLSAgICBtX3NpemUgPSBpbml0aWFsOworICAgIHNldExl
bmd0aChpbml0aWFsKTsKICAgICBtX21heGltdW0gPSBtYXhpbXVtOwotICAgIEFTU0VSVChpc1Zh
bGlkU2l6ZShtX3NpemUpKTsKLSAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49
IG1fc2l6ZSk7CisgICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX2xlbmd0
aCk7CiAKICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxv
Y2F0ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCiAgICAgLy8g
QnV0IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgotICAgIG1fZnVuY3Rpb25zID0gTWFs
bG9jUHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2MoKHNpemVvZihXYXNtOjpDYWxs
YWJsZUZ1bmN0aW9uKSAqIENoZWNrZWQ8c2l6ZV90PihzaXplKCkpKS51bnNhZmVHZXQoKSk7Ci0g
ICAgbV9pbnN0YW5jZXMgPSBNYWxsb2NQdHI8SW5zdGFuY2UqPjo6bWFsbG9jKChzaXplb2YoSW5z
dGFuY2UqKSAqIENoZWNrZWQ8c2l6ZV90PihzaXplKCkpKS51bnNhZmVHZXQoKSk7Ci0gICAgZm9y
ICh1aW50MzJfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgbV9mdW5jdGlvbnMgPSBN
YWxsb2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5jdGlvbj46Om1hbGxvYygoc2l6ZW9mKFdhc206OkNh
bGxhYmxlRnVuY3Rpb24pICogQ2hlY2tlZDxzaXplX3Q+KGFsbG9jYXRlZExlbmd0aChtX2xlbmd0
aCkpKS51bnNhZmVHZXQoKSk7CisgICAgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyBhbmQg
Y291bGQgYmUgc21hcnRlciBhYm91dCBub3QgY29tbWl0dGluZyBhbGwgb2YgdGhhdCBtZW1vcnkg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTQyNQorICAgIG1faW5z
dGFuY2VzID0gTWFsbG9jUHRyPEluc3RhbmNlKj46Om1hbGxvYygoc2l6ZW9mKEluc3RhbmNlKikg
KiBDaGVja2VkPHNpemVfdD4oYWxsb2NhdGVkTGVuZ3RoKG1fbGVuZ3RoKSkpLnVuc2FmZUdldCgp
KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYWxsb2NhdGVkTGVuZ3RoKG1fbGVuZ3Ro
KTsgKytpKSB7CiAgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBDYWxsYWJsZUZ1
bmN0aW9uKCk7CiAgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJ
bmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhp
cyBpbiBjb21waWxlZCBjb2RlLgogICAgICAgICBtX2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxw
dHI7CkBAIC02NiwyOCArNzksMzEgQEAgVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0
ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCiBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBU
YWJsZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKLSAgICAg
ICAgcmV0dXJuIHNpemUoKTsKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpOwogCiAgICAgdXNpbmcg
Q2hlY2tlZCA9IENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PjsKLSAgICBDaGVja2Vk
IG5ld1NpemVDaGVja2VkID0gc2l6ZSgpOwotICAgIG5ld1NpemVDaGVja2VkICs9IGRlbHRhOwot
ICAgIHVpbnQzMl90IG5ld1NpemU7Ci0gICAgaWYgKG5ld1NpemVDaGVja2VkLnNhZmVHZXQobmV3
U2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKKyAgICBDaGVja2VkIG5ld0xlbmd0
aENoZWNrZWQgPSBsZW5ndGgoKTsKKyAgICBuZXdMZW5ndGhDaGVja2VkICs9IGRlbHRhOworICAg
IHVpbnQzMl90IG5ld0xlbmd0aDsKKyAgICBpZiAobmV3TGVuZ3RoQ2hlY2tlZC5zYWZlR2V0KG5l
d0xlbmd0aCkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIAotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICptYXhpbXVtKCkp
CisgICAgaWYgKG1heGltdW0oKSAmJiBuZXdMZW5ndGggPiAqbWF4aW11bSgpKQogICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAg
aWYgKCFpc1ZhbGlkTGVuZ3RoKG5ld0xlbmd0aCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxv
cHQ7CiAKICAgICBhdXRvIGNoZWNrZWRHcm93ID0gWyZdIChhdXRvJiBjb250YWluZXIpIHsKLSAg
ICAgICAgQ2hlY2tlZCByZWFsbG9jU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hlY2tlZDsKLSAgICAg
ICAgcmVhbGxvY1NpemVDaGVja2VkICo9IHNpemVvZigqY29udGFpbmVyLmdldCgpKTsKLSAgICAg
ICAgdWludDMyX3QgcmVhbGxvY1NpemU7Ci0gICAgICAgIGlmIChyZWFsbG9jU2l6ZUNoZWNrZWQu
c2FmZUdldChyZWFsbG9jU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29udGFpbmVyLnJlYWxsb2MocmVhbGxvY1Np
emUpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kp
CisgICAgICAgIGlmIChuZXdMZW5ndGhDaGVja2VkLnVuc2FmZUdldCgpID4gYWxsb2NhdGVkTGVu
Z3RoKG1fbGVuZ3RoKSkgeworICAgICAgICAgICAgQ2hlY2tlZCByZWFsbG9jU2l6ZUNoZWNrZWQg
PSBhbGxvY2F0ZWRMZW5ndGgobmV3TGVuZ3RoQ2hlY2tlZC51bnNhZmVHZXQoKSk7CisgICAgICAg
ICAgICByZWFsbG9jU2l6ZUNoZWNrZWQgKj0gc2l6ZW9mKCpjb250YWluZXIuZ2V0KCkpOworICAg
ICAgICAgICAgdWludDMyX3QgcmVhbGxvY1NpemU7CisgICAgICAgICAgICBpZiAocmVhbGxvY1Np
emVDaGVja2VkLnNhZmVHZXQocmVhbGxvY1NpemUpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZs
b3cpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gRklYTUUg
dGhpcyBvdmVyLWFsbG9jYXRlcyBhbmQgY291bGQgYmUgc21hcnRlciBhYm91dCBub3QgY29tbWl0
dGluZyBhbGwgb2YgdGhhdCBtZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4MTQyNQorICAgICAgICAgICAgY29udGFpbmVyLnJlYWxsb2MocmVhbGxvY1NpemUp
OworICAgICAgICB9CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG1fbGVuZ3RoOyBpIDwgYWxs
b2NhdGVkTGVuZ3RoKG5ld0xlbmd0aCk7ICsraSkKICAgICAgICAgICAgIG5ldyAoJmNvbnRhaW5l
ci5nZXQoKVtpXSkgc3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUoKmNvbnRhaW5lci5n
ZXQoKSk+KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CkBAIC05NywyNCArMTEzLDI0
IEBAIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IFRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRhKQog
ICAgIGlmICghY2hlY2tlZEdyb3cobV9pbnN0YW5jZXMpKQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCi0gICAgbV9zaXplID0gbmV3U2l6ZTsKKyAgICBzZXRMZW5ndGgobmV3TGVuZ3Ro
KTsKIAotICAgIHJldHVybiBuZXdTaXplOworICAgIHJldHVybiBuZXdMZW5ndGg7CiB9CiAKIHZv
aWQgVGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoaW5kZXggPCBzaXplKCkpOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdh
c206OkNhbGxhYmxlRnVuY3Rpb24oKTsKLSAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5k
ZXhdLnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8g
V2UgcmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCi0gICAgbV9pbnN0YW5jZXMuZ2V0KClb
aW5kZXhdID0gbnVsbHB0cjsKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsK
KyAgICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleCAmIG1fbWFza10gPSBXYXNtOjpDYWxsYWJsZUZ1
bmN0aW9uKCk7CisgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV9tYXNrXS5z
aWduYXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJl
bHkgb24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4
ICYgbV9tYXNrXSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgVGFibGU6OnNldEZ1bmN0aW9uKHVpbnQz
Ml90IGluZGV4LCBDYWxsYWJsZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnN0YW5jZSogaW5zdGFuY2Up
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOwotICAgIG1fZnVuY3Rpb25z
LmdldCgpW2luZGV4XSA9IGZ1bmN0aW9uOwotICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9
IGluc3RhbmNlOworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkpOworICAgIG1f
ZnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV9tYXNrXSA9IGZ1bmN0aW9uOworICAgIG1faW5zdGFu
Y2VzLmdldCgpW2luZGV4ICYgbV9tYXNrXSA9IGluc3RhbmNlOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6VGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21UYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKaW5kZXgg
NTI5ZGZjZi4uMGFhZjQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDUsMjUgKzQ1LDMxIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+VGFibGUoKTsK
IAogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBt
X21heGltdW07IH0KLSAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CisgICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9S
RVRVUk47CiAgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKICAgICB2b2lkIHNldEZ1
bmN0aW9uKHVpbnQzMl90LCBDYWxsYWJsZUZ1bmN0aW9uLCBJbnN0YW5jZSopOwogCi0gICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFi
bGUsIG1fc2l6ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KICAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2VzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KFRhYmxlLCBtX2luc3RhbmNlcyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVu
Z3RoKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBtX2xlbmd0aCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTWFzaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihU
YWJsZSwgbV9tYXNrKTsgfQogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qg
c2l6ZSkgeyByZXR1cm4gc2l6ZSA8IG1heFRhYmxlRW50cmllczsgfQorICAgIHN0YXRpYyB1aW50
MzJfdCBhbGxvY2F0ZWRMZW5ndGgodWludDMyX3QgbGVuZ3RoKTsKKyAgICB1aW50MzJfdCBtYXNr
KCkgY29uc3QgeyByZXR1cm4gbV9tYXNrOyB9CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZExlbmd0
aCh1aW50MzJfdCBsZW5ndGgpIHsgcmV0dXJuIGxlbmd0aCA8IG1heFRhYmxlRW50cmllczsgfQog
CiBwcml2YXRlOgogICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWlu
dDMyX3Q+IG1heGltdW0pOwogCi0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVt
OwotICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICB2b2lkIHNldExlbmd0aCh1aW50MzJfdCk7CisK
ICAgICBNYWxsb2NQdHI8Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7CiAgICAgLy8gY2Fs
bF9pbmRpcmVjdCBuZWVkcyB0byBkbyBhbiBJbnN0YW5jZSBjaGVjayB0byBwb3RlbnRpYWxseSBj
b250ZXh0IHN3aXRjaCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0byBhbm90aGVyIGluc3RhbmNl
LiBXZSBjYW4gaG9sZCByYXcgcG9pbnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBiZWNhdXNlIHRoZSBl
bWJlZGRlciBlbnN1cmVzIHRoYXQgVGFibGUga2VlcHMgYWxsIHRoZSBpbnN0YW5jZXMgYWxpdmUu
IFdlIGNvdWxkbid0IGhvbGQgYSBSZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGN5Y2xl
cy4KICAgICBNYWxsb2NQdHI8SW5zdGFuY2UqPiBtX2luc3RhbmNlczsKKyAgICB1aW50MzJfdCBt
X2xlbmd0aDsKKyAgICB1aW50MzJfdCBtX21hc2s7CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJf
dD4gbV9tYXhpbXVtOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2Uu
Y3BwCmluZGV4IDVjOTE2ZGQuLmNiZWYzNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1MSw3ICsy
NTEsNyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3Jl
YXRlKFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgICAgIHJldHVybiBl
eGNlcHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFp
bE1lc3NhZ2UoaW1wb3J0LCAiVGFibGUgaW1wb3J0IiwgImlzIG5vdCBhbiBpbnN0YW5jZSBvZiBX
ZWJBc3NlbWJseS5UYWJsZSIpKSk7CiAKICAgICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVkSW5p
dGlhbCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOwotICAg
ICAgICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7CisgICAgICAg
ICAgICB1aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPmxlbmd0aCgpOwogICAgICAgICAg
ICAgaWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBp
bXBvcnRGYWlsTWVzc2FnZShpbXBvcnQsICJUYWJsZSBpbXBvcnQiLCAicHJvdmlkZWQgYW4gJ2lu
aXRpYWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKaW5kZXggNGRlNGI5Ny4uNTdh
MTJlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5VGFibGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsOCArNjIsOSBAQCBKU1dlYkFzc2VtYmx5VGFibGU6OkpT
V2ViQXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6
VAogewogICAgIC8vIEZJWE1FOiBJdCBtaWdodCBiZSB3b3J0aCB0cnlpbmcgdG8gcHJlLWFsbG9j
YXRlIG1heGltdW0gaGVyZS4gVGhlIHNwZWMgcmVjb21tZW5kcyBkb2luZyBzby4KICAgICAvLyBC
dXQgZm9yIG5vdywgd2UncmUgbm90IGRvaW5nIHRoYXQuCi0gICAgbV9qc0Z1bmN0aW9ucyA9IE1h
bGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKChzaXplb2YoV3JpdGVCYXJy
aWVyPEpTT2JqZWN0PikgKiBDaGVja2VkPHNpemVfdD4oc2l6ZSgpKSkudW5zYWZlR2V0KCkpOwot
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKKyAgICAvLyBGSVhNRSB0
aGlzIG92ZXItYWxsb2NhdGVzIGFuZCBjb3VsZCBiZSBzbWFydGVyIGFib3V0IG5vdCBjb21taXR0
aW5nIGFsbCBvZiB0aGF0IG1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgxNDI1CisgICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+Pjo6bWFsbG9jKChzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBDaGVj
a2VkPHNpemVfdD4oYWxsb2NhdGVkTGVuZ3RoKCkpKS51bnNhZmVHZXQoKSk7CisgICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IGFsbG9jYXRlZExlbmd0aCgpOyArK2kpCiAgICAgICAgIG5ldygm
bV9qc0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogfQogCkBA
IC04NSw3ICs4Niw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHRoaXNPYmplY3QtPnNpemUoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0
aGlzT2JqZWN0LT5sZW5ndGgoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2Jq
ZWN0LT5tX2pzRnVuY3Rpb25zLmdldCgpW2ldKTsKIH0KIApAQCAtOTQsMTYgKzk1LDE4IEBAIGJv
b2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRhKQogICAgIGlmIChkZWx0
YSA9PSAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHNpemVfdCBvbGRTaXplID0gc2l6
ZSgpOworICAgIHNpemVfdCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKIAogICAgIGF1dG8gZ3JldyA9
IG1fdGFibGUtPmdyb3coZGVsdGEpOwogICAgIGlmICghZ3JldykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgc2l6ZV90IG5ld1NpemUgPSBncmV3LnZhbHVlKCk7Ci0gICAgbV9qc0Z1bmN0
aW9ucy5yZWFsbG9jKChzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBDaGVja2VkPHNp
emVfdD4obmV3U2l6ZSkpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgbmV3TGVuZ3RoID0gZ3Jl
dy52YWx1ZSgpOworICAgIGlmIChuZXdMZW5ndGggPiBtX3RhYmxlLT5hbGxvY2F0ZWRMZW5ndGgo
b2xkTGVuZ3RoKSkKKyAgICAgICAgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyBhbmQgY291
bGQgYmUgc21hcnRlciBhYm91dCBub3QgY29tbWl0dGluZyBhbGwgb2YgdGhhdCBtZW1vcnkgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTQyNQorICAgICAgICBtX2pz
RnVuY3Rpb25zLnJlYWxsb2MoKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIENoZWNr
ZWQ8c2l6ZV90PihtX3RhYmxlLT5hbGxvY2F0ZWRMZW5ndGgobmV3TGVuZ3RoKSkpLnVuc2FmZUdl
dCgpKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQor
ICAgIGZvciAoc2l6ZV90IGkgPSBvbGRMZW5ndGg7IGkgPCBtX3RhYmxlLT5hbGxvY2F0ZWRMZW5n
dGgobmV3TGVuZ3RoKTsgKytpKQogICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ld
KSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMSwy
NiArMTE0LDI2IEBAIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRh
KQogCiBKU09iamVjdCogSlNXZWJBc3NlbWJseVRhYmxlOjpnZXRGdW5jdGlvbih1aW50MzJfdCBp
bmRleCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IHNpemUoKSk7Ci0gICAgcmV0dXJu
IG1fanNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGlu
ZGV4IDwgbGVuZ3RoKCkpOworICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYg
bV90YWJsZS0+bWFzaygpXS5nZXQoKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmNs
ZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7CiAgICAgbV90YWJsZS0+Y2xlYXJGdW5jdGlv
bihpbmRleCk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8
SlNPYmplY3Q+KCk7CisgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleCAmIG1fdGFibGUtPm1h
c2soKV0gPSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJs
eVRhYmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1
bmN0aW9uKiBmdW5jdGlvbikKIHsKICAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVu
Y3Rpb24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgJmZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5j
ZSgpKTsKLSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0
aW9uKTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV90YWJsZS0+bWFzaygpXS5z
ZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNl
dEZ1bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0
aW9uKiBmdW5jdGlvbikKIHsKICAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rp
b24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgJmZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgp
KTsKLSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9u
KTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV90YWJsZS0+bWFzaygpXS5zZXQo
dm0sIHRoaXMsIGZ1bmN0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCmluZGV4IDY5
NjQxNTguLmRjNzRhOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pz
L0pTV2ViQXNzZW1ibHlUYWJsZS5oCkBAIC00OCw5ICs0OCwxMCBAQCBwdWJsaWM6CiAKICAgICBE
RUNMQVJFX0lORk87CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXpl
KSB7IHJldHVybiBXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUoc2l6ZSk7IH0KKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkTGVuZ3RoKHVpbnQzMl90IGxlbmd0aCkgeyByZXR1cm4gV2FzbTo6VGFibGU6
OmlzVmFsaWRMZW5ndGgobGVuZ3RoKTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1h
eGltdW0oKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5tYXhpbXVtKCk7IH0KLSAgICB1aW50MzJf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+c2l6ZSgpOyB9CisgICAgdWludDMyX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+bGVuZ3RoKCk7IH0KKyAgICB1aW50MzJf
dCBhbGxvY2F0ZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5hbGxvY2F0ZWRMZW5n
dGgobGVuZ3RoKCkpOyB9CiAgICAgYm9vbCBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNF
RF9SRVRVUk47CiAgICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90KTsKICAgICB2b2lk
IGNsZWFyRnVuY3Rpb24odWludDMyX3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGVmMGM4YzUu
Ljc4YmFhNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjgsNyArMjY4LDcgQEAgSlNWYWx1
ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAg
IC8vIFZhbGlkYXRpb24gb2YgYWxsIGVsZW1lbnQgcmFuZ2VzIGNvbWVzIGJlZm9yZSBhbGwgVGFi
bGUgYW5kIE1lbW9yeSBpbml0aWFsaXphdGlvbi4KICAgICBmb3JFYWNoRWxlbWVudChbJl0gKGNv
bnN0IFdhc206OkVsZW1lbnQmIGVsZW1lbnQsIHVpbnQzMl90IHRhYmxlSW5kZXgpIHsKICAgICAg
ICAgdWludDY0X3QgbGFzdFdyaXR0ZW5JbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0YWJs
ZUluZGV4KSArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy5z
aXplKCkpIC0gMTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxhc3RXcml0dGVuSW5kZXggPj0gdGFi
bGUtPnNpemUoKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShsYXN0V3JpdHRlbkluZGV4ID49IHRh
YmxlLT5sZW5ndGgoKSkpCiAgICAgICAgICAgICBleGNlcHRpb24gPSBKU1ZhbHVlKHRocm93RXhj
ZXB0aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZt
LCBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMgdHJ5aW5nIHRvIHNldCBhbiBvdXQgb2YgYm91bmRz
IHRhYmxlIGluZGV4IikpKSk7CiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKaW5kZXgg
YTQ2MjczMC4uYTcwZGQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3
IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQ
cm90b0Z1bmNMZW5ndGgoRXhlY1N0YXRlKiBlCiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRh
YmxlID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIodGFibGUtPnNpemUoKSkpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIodGFibGUtPmxlbmd0aCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93KEV4
ZWNTdGF0ZSogZXhlYykKQEAgLTg4LDEyICs4OCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqIGV4
ZQogICAgIHVpbnQzMl90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5h
cmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTsKIAotICAgIHVpbnQzMl90IG9sZFNpemUgPSB0YWJsZS0+c2l6ZSgpOworICAg
IHVpbnQzMl90IG9sZExlbmd0aCA9IHRhYmxlLT5sZW5ndGgoKTsKIAogICAgIGlmICghdGFibGUt
Pmdyb3coZGVsdGEpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ3JvdyBjb3VsZCBub3QgZ3JvdyB0aGUgdGFi
bGUiKSkpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIob2xkU2l6ZSkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIob2xkTGVuZ3RoKSk7CiB9CiAK
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90
b0Z1bmNHZXQoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTA2LDggKzEwNiw4IEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQoRXhl
Y1N0YXRlKiBleGVjCiAKICAgICB1aW50MzJfdCBpbmRleCA9IHRvTm9uV3JhcHBpbmdVaW50MzIo
ZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhy
b3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5
LlRhYmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2l6
ZSBvZiB0aGUgdGFibGUiKSkpKTsKKyAgICBpZiAoaW5kZXggPj0gdGFibGUtPmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93
U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5U
YWJsZS5wcm90b3R5cGUuZ2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIGxlbmd0
aCBvZiB0aGUgdGFibGUiKSkpKTsKIAogICAgIGlmIChKU09iamVjdCogcmVzdWx0ID0gdGFibGUt
PmdldEZ1bmN0aW9uKGluZGV4KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwpAQCAtMTMxLDggKzEzMSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKiBleGVjCiAgICAgdWlu
dDMyX3QgaW5kZXggPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDAp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogCi0gICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VF
cnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5zZXQg
ZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgdGFibGUiKSkpKTsK
KyAgICBpZiAoaW5kZXggPj0gdGFibGUtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4
cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUiKSkpKTsK
IAogICAgIGlmICh2YWx1ZS5pc051bGwoKSkKICAgICAgICAgdGFibGUtPmNsZWFyRnVuY3Rpb24o
aW5kZXgpOwotLSAKMi4xMC4xCgo=
</data>
<flag name="commit-queue"
          id="349814"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>330798</attachid>
            <date>2018-01-08 22:45:40 -0800</date>
            <delta_ts>2018-01-08 23:10:40 -0800</delta_ts>
            <desc>patch</desc>
            <filename>0001-WebAssembly-mask-indexed-accesses-to-Table.patch</filename>
            <type>text/plain</type>
            <size>37010</size>
            <attacher name="JF Bastien">jfbastien</attacher>
            
              <data encoding="base64">RnJvbSAzMzM2NDA1N2Y4ZTZhNjRmZjRhOTVhYjE1NjBjMjE2Y2VmNGJiZTk1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKRiBCYXN0aWVuIDxqZmJhc3RpZW5AYXBwbGUuY29tPgpEYXRl
OiBNb24sIDggSmFuIDIwMTggMTY6MTU6MjMgLTA4MDAKU3ViamVjdDogW1BBVENIXSBXZWJBc3Nl
bWJseTogbWFzayBpbmRleGVkIGFjY2Vzc2VzIHRvIFRhYmxlCgotLS0KIEpTVGVzdHMvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMgKysrKwogSlNUZXN0cy93
YXNtL2pzLWFwaS90YWJsZS5qcyAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArLQogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgfCA2MyArKysrKysr
KysrKysrKysrKwogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAgICAgfCAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwICAgICAgfCAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwICAgICAg
ICAgICAgICAgICAgfCAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oICAgICAgICAgICAgfCAgNCArLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIz
SVJHZW5lcmF0b3IuY3BwICAgfCA3NiArKysrKysrKysrKystLS0tLS0tLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAgICAgICAgICAgIHwgNzggKysrKysrKysrKysr
Ky0tLS0tLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmggICAgICAg
ICAgICAgfCAxOCArKystLQogLi4uL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCAg
ICAgICAgICAgICAgfCAgNCArLQogLi4uL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseVRhYmxlLmNwcCAgfCAyOSArKysrLS0tLQogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseVRhYmxlLmggfCAgNSArLQogLi4uL3dhc20vanMvV2ViQXNzZW1ibHlN
b2R1bGVSZWNvcmQuY3BwICAgICAgICAgICAgfCAgNCArLQogLi4uL3dhc20vanMvV2ViQXNzZW1i
bHlUYWJsZVByb3RvdHlwZS5jcHAgICAgICAgICAgfCAxNiArKy0tLQogMTUgZmlsZXMgY2hhbmdl
ZCwgMjE5IGluc2VydGlvbnMoKyksIDEwNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KU1Rl
c3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdlYzdjNmUuLjZiMDEzYzkg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTgtMDEtMDggIEpGIEJhc3RpZW4gIDxqZmJhc3RpZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBtYXNrIGluZGV4ZWQgYWNjZXNzZXMgdG8gVGFi
bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTQx
MgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzYzNjMyMzY+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgU2FhbSBCYXJhdGkuCisKKyAgICAgICAgVXBkYXRlIGVycm9yIG1lc3NhZ2VzLgorCisgICAg
ICAgICogd2FzbS9qcy1hcGkvdGFibGUuanM6CisgICAgICAgIChhc3NlcnQudGhyb3dzLldlYkFz
c2VtYmx5LlRhYmxlLnByb3RvdHlwZS5ncm93KToKKwogMjAxOC0wMS0wNiAgWXVzdWtlIFN1enVr
aSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVy
dHlOYW1lcyBpbmNsdWRlcyAiYXJndW1lbnRzIiBhbmQgImNhbGxlciIgZm9yIGJvdW5kIGZ1bmN0
aW9ucwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcyBiL0pTVGVzdHMv
d2FzbS9qcy1hcGkvdGFibGUuanMKaW5kZXggNDEzMjg0ZC4uYjgzMmUxMSAxMDA2NDQKLS0tIGEv
SlNUZXN0cy93YXNtL2pzLWFwaS90YWJsZS5qcworKysgYi9KU1Rlc3RzL3dhc20vanMtYXBpL3Rh
YmxlLmpzCkBAIC0yNDMsMTQgKzI0MywxNCBAQCBhc3NlcnQudGhyb3dzKCgpID0+IFdlYkFzc2Vt
Ymx5LlRhYmxlLnByb3RvdHlwZS5ncm93KHVuZGVmaW5lZCksIFR5cGVFcnJvciwgYGV4cAogCiAg
ICAgewogICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVu
dDogImFueWZ1bmMiLCBpbml0aWFsOiAyMH0pOwotICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+
IHRhYmxlLmdldCgyMCksIFJhbmdlRXJyb3IsICJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUu
Z2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIHRhYmxlIik7
CisgICAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gdGFibGUuZ2V0KDIwKSwgUmFuZ2VFcnJvciwg
IldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3Mg
dGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSB0YWJsZSIpOwogICAgICAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDIwOyBpKyspCiAgICAgICAgICAgICBhc3NlcnQuZXEodGFibGUuZ2V0KGkpLCBudWxsKTsK
ICAgICB9CiAKICAgICB7CiAgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRh
YmxlKHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDIwfSk7Ci0gICAgICAgIGFzc2VydC50
aHJvd3MoKCkgPT4gdGFibGUuc2V0KDIwLCBudWxsKSwgUmFuZ2VFcnJvciwgIldlYkFzc2VtYmx5
LlRhYmxlLnByb3RvdHlwZS5zZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2l6
ZSBvZiB0aGUgdGFibGUiKTsKKyAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB0YWJsZS5zZXQo
MjAsIG51bGwpLCBSYW5nZUVycm9yLCAiV2ViQXNzZW1ibHkuVGFibGUucHJvdG90eXBlLnNldCBl
eHBlY3RzIGFuIGludGVnZXIgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHRhYmxlIik7CiAg
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjA7IGkrKykKICAgICAgICAgICAgIHRhYmxlLnNl
dChpLCBudWxsKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAwNzhkYzg1Li4z
YWZmMzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2NiBAQAorMjAxOC0w
MS0wOCAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQXNz
ZW1ibHk6IG1hc2sgaW5kZXhlZCBhY2Nlc3NlcyB0byBUYWJsZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgxNDEyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS8zNjM2MzIzNj4KKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKworICAg
ICAgICBXZWJBc3NlbWJseSBUYWJsZSBpbmRleGVkIGFjY2Vzc2VzIGFyZSB1c2VyLWNvbnRyb2xs
ZWQgYW5kCisgICAgICAgIGJvdW5kcy1jaGVja2VkLiBGb3JjZSBhbGxvY2F0aW9ucyBvZiBUYWJs
ZSBkYXRhIHRvIGJlIGEKKyAgICAgICAgcG93ZXItb2YtdHdvLCBhbmQgZXhwbGljaXRseSBtYXNr
IGFjY2Vzc2VzIGFmdGVyIGJvdW5kcy1jaGVjaworICAgICAgICBicmFuY2hlcy4KKworICAgICAg
ICBSZW5hbWUgbWlzbGVhZGluZyB1c2FnZSBvZiAic2l6ZSIgd2hlbiAibGVuZ3RoIiBvZiBhIFRh
YmxlIHdhcworICAgICAgICBpbnRlbmRlZC4KKworICAgICAgICBSZW5hbWUgdGhlIFNwZWN0cmUg
b3B0aW9uIGZyb20gImRpc2FibGUiIHRvICJlbmFibGUiLgorCisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3Bl
Y3VsYXRpdmVKSVQpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpMb3dlckRGR1RvQjMpOgorICAgICAgICAq
IGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OkpJVCk6CisgICAgICAgICogcnVudGlt
ZS9PcHRpb25zLmg6CisgICAgICAgICogd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0b3I6OmVtaXRDaGVja0FuZFByZXBhcmVQb2ludGVy
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6QjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KToK
KyAgICAgICAgKiB3YXNtL1dhc21UYWJsZS5jcHA6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxl
OjphbGxvY2F0ZWRMZW5ndGgpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6c2V0TGVuZ3Ro
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Oldh
c206OlRhYmxlOjpUYWJsZSk6CisgICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpncm93KToKKyAg
ICAgICAgKEpTQzo6V2FzbTo6VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6c2V0RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vV2FzbVRhYmxlLmg6Cisg
ICAgICAgIChKU0M6Oldhc206OlRhYmxlOjpsZW5ndGggY29uc3QpOgorICAgICAgICAoSlNDOjpX
YXNtOjpUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgpOgorICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6
b2Zmc2V0T2ZNYXNrKToKKyAgICAgICAgKEpTQzo6V2FzbTo6VGFibGU6Om1hc2sgY29uc3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpUYWJsZTo6aXNWYWxpZExlbmd0aCk6CisgICAgICAgICogd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OmNyZWF0ZSk6CisgICAgICAgICogd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFi
bGUuY3BwOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2ViQXNzZW1ibHlU
YWJsZSk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6Z3Jvdyk6CisgICAgICAgIChKU0M6
OkpTV2ViQXNzZW1ibHlUYWJsZTo6Z2V0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFz
c2VtYmx5VGFibGU6OmNsZWFyRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5
VGFibGU6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKiB3YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJs
ZS5oOgorICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6OmlzVmFsaWRMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5VGFibGU6Omxlbmd0aCBjb25zdCk6CisgICAgICAg
IChKU0M6OkpTV2ViQXNzZW1ibHlUYWJsZTo6YWxsb2NhdGVkTGVuZ3RoIGNvbnN0KToKKyAgICAg
ICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6
V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmV2YWx1YXRlKToKKyAgICAgICAgKiB3YXNtL2pzL1dl
YkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRh
YmxlUHJvdG9GdW5jTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3Rv
RnVuY0dyb3cpOgorICAgICAgICAoSlNDOjp3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR2V0KToK
KyAgICAgICAgKEpTQzo6d2ViQXNzZW1ibHlUYWJsZVByb3RvRnVuY1NldCk6CisKIDIwMTgtMDEt
MDYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgT2Jq
ZWN0LmdldE93blByb3BlcnR5TmFtZXMgaW5jbHVkZXMgImFyZ3VtZW50cyIgYW5kICJjYWxsZXIi
IGZvciBib3VuZCBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMzQ5Y2NmNC4uOTVjZWE5NyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3
IEBAIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYgaml0KQogICAg
ICwgbV9jdXJyZW50Tm9kZSgwKQogICAgICwgbV9sYXN0R2VuZXJhdGVkTm9kZShMYXN0Tm9kZVR5
cGUpCiAgICAgLCBtX2luZGV4SW5CbG9jaygwKQotICAgICwgbV9pbmRleE1hc2tpbmdNb2RlKE9w
dGlvbnM6OmRpc2FibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSA/IEluZGV4TWFza2luZ0Rpc2FibGVk
IDogSW5kZXhNYXNraW5nRW5hYmxlZCkKKyAgICAsIG1faW5kZXhNYXNraW5nTW9kZShPcHRpb25z
OjplbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSA/IEluZGV4TWFza2luZ0VuYWJsZWQgOiBJbmRl
eE1hc2tpbmdEaXNhYmxlZCkKICAgICAsIG1fZ2VuZXJhdGlvbkluZm8obV9qaXQuZ3JhcGgoKS5m
cmFtZVJlZ2lzdGVyQ291bnQoKSkKICAgICAsIG1fc3RhdGUobV9qaXQuZ3JhcGgoKSkKICAgICAs
IG1faW50ZXJwcmV0ZXIobV9qaXQuZ3JhcGgoKSwgbV9zdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCBiYjc3ZGFjLi5hM2QyYWFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTQ5LDcgKzE0OSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0
b3IobV9ncmFwaCkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1f
aW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCi0gICAgICAgICwgbV9pbmRleE1hc2tp
bmdNb2RlKE9wdGlvbnM6OmRpc2FibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSA/IEluZGV4TWFza2lu
Z0Rpc2FibGVkIDogSW5kZXhNYXNraW5nRW5hYmxlZCkKKyAgICAgICAgLCBtX2luZGV4TWFza2lu
Z01vZGUoT3B0aW9uczo6ZW5hYmxlU3BlY3RyZU1pdGlnYXRpb25zKCkgPyAgSW5kZXhNYXNraW5n
RW5hYmxlZCA6IEluZGV4TWFza2luZ0Rpc2FibGVkKQogICAgIHsKICAgICB9CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggODRiNWU1My4uNzdkNDBhNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTg0LDcgKzg0LDcgQEAgSklUOjpKSVQoVk0qIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgbG9vcE9TUkVudHJ5Qnl0ZWNvZGVPZmZzZXQpCiAg
ICAgLCBtX3BjVG9Db2RlT3JpZ2luTWFwQnVpbGRlcigqdm0pCiAgICAgLCBtX2NhbkJlT3B0aW1p
emVkKGZhbHNlKQogICAgICwgbV9zaG91bGRFbWl0UHJvZmlsaW5nKGZhbHNlKQotICAgICwgbV9z
aG91bGRVc2VJbmRleE1hc2tpbmcoT3B0aW9uczo6ZGlzYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygp
ID8gZmFsc2UgOiB0cnVlKQorICAgICwgbV9zaG91bGRVc2VJbmRleE1hc2tpbmcoT3B0aW9uczo6
ZW5hYmxlU3BlY3RyZU1pdGlnYXRpb25zKCkpCiAgICAgLCBtX2xvb3BPU1JFbnRyeUJ5dGVjb2Rl
T2Zmc2V0KGxvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KQogewogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IDc4NmQ5OTkuLjY1YzNkZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NTgsNyArNDU4LDcgQEAgY29uc3Rl
eHByIGJvb2wgZW5hYmxlQXN5bmNJdGVyYXRpb24gPSBmYWxzZTsKICAgICBcCiAgICAgdihib29s
LCB1c2VXZWJBc3NlbWJseSwgdHJ1ZSwgTm9ybWFsLCAiRXhwb3NlIHRoZSBXZWJBc3NlbWJseSBn
bG9iYWwgb2JqZWN0LiIpIFwKICAgICBcCi0gICAgdihib29sLCBkaXNhYmxlU3BlY3RyZU1pdGln
YXRpb25zLCBmYWxzZSwgUmVzdHJpY3RlZCwgIkRpc2FibGUgU3BlY3RyZSBtaXRpZ2F0aW9ucy4i
KSBcCisgICAgdihib29sLCBlbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMsIHRydWUsIFJlc3RyaWN0
ZWQsICJFbmFibGUgU3BlY3RyZSBtaXRpZ2F0aW9ucy4iKSBcCiAgICAgXAogICAgIHYoYm9vbCwg
dXNlQXN5bmNJdGVyYXRvciwgZW5hYmxlQXN5bmNJdGVyYXRpb24sIE5vcm1hbCwgIkFsbG93IHRv
IHVzZSBBc3luYyBJdGVyYXRvciBpbiBKUy4iKSBcCiAgICAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCmluZGV4IDg0OWE1ZWQuLjVmYTM4
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CM0lSR2VuZXJh
dG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRv
ci5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02NTAsNyArNjUwLDcgQEAgaW5saW5lIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjpl
bWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVyLAogICAgICAg
ICAvLyBXZSdyZSBub3QgdXNpbmcgc2lnbmFsIGhhbmRsaW5nIGF0IGFsbCwgd2UgbXVzdCB0aGVy
ZWZvcmUgY2hlY2sgdGhhdCBubyBtZW1vcnkgYWNjZXNzIGV4Y2VlZHMgdGhlIGN1cnJlbnQgbWVt
b3J5IHNpemUuCiAgICAgICAgIEFTU0VSVChtX21lbW9yeVNpemVHUFIpOwogICAgICAgICBBU1NF
UlQoc2l6ZU9mT3BlcmF0aW9uICsgb2Zmc2V0ID4gb2Zmc2V0KTsKLSAgICAgICAgR1BSUmVnIGlu
ZGV4aW5nTWFzayA9IChzaG91bGRNYXNrID09IFNob3VsZE1hc2s6OlllcyAmJiAhT3B0aW9uczo6
ZGlzYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygpKSA/IG1faW5kZXhpbmdNYXNrR1BSIDogSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgR1BSUmVnIGluZGV4aW5nTWFzayA9IChzaG91bGRNYXNrID09IFNo
b3VsZE1hc2s6OlllcyAmJiBPcHRpb25zOjplbmFibGVTcGVjdHJlTWl0aWdhdGlvbnMoKSkgPyBt
X2luZGV4aW5nTWFza0dQUiA6IEludmFsaWRHUFJSZWc7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmROZXc8V2FzbUJvdW5kc0NoZWNrVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG1fbWVt
b3J5U2l6ZUdQUiwgaW5kZXhpbmdNYXNrLCBwb2ludGVyLCBzaXplT2ZPcGVyYXRpb24gKyBvZmZz
ZXQgLSAxKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTIwMCw3ICsxMjAwLDggQEAgYXV0
byBCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QoY29uc3QgU2lnbmF0dXJlJiBzaWduYXR1
cmUsIFZlY3RvcjxFeHByZXNzaW8KIAogICAgIEV4cHJlc3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rp
b25CdWZmZXI7CiAgICAgRXhwcmVzc2lvblR5cGUgaW5zdGFuY2VzQnVmZmVyOwotICAgIEV4cHJl
c3Npb25UeXBlIGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJTaXplOworICAgIEV4cHJlc3Npb25UeXBl
IGNhbGxhYmxlRnVuY3Rpb25CdWZmZXJMZW5ndGg7CisgICAgRXhwcmVzc2lvblR5cGUgbWFzazsK
ICAgICB7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4o
KSwKICAgICAgICAgICAgIGluc3RhbmNlVmFsdWUoKSwgc2FmZUNhc3Q8aW50MzJfdD4oSW5zdGFu
Y2U6Om9mZnNldE9mVGFibGUoKSkpOwpAQCAtMTIwOCw1NyArMTIwOSw2NiBAQCBhdXRvIEIzSVJH
ZW5lcmF0b3I6OmFkZENhbGxJbmRpcmVjdChjb25zdCBTaWduYXR1cmUmIHNpZ25hdHVyZSwgVmVj
dG9yPEV4cHJlc3NpbwogICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMyX3Q+KFRhYmxl
OjpvZmZzZXRPZkZ1bmN0aW9ucygpKSk7CiAgICAgICAgIGluc3RhbmNlc0J1ZmZlciA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5
cGUoKSwgb3JpZ2luKCksCiAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJfdD4oVGFi
bGU6Om9mZnNldE9mSW5zdGFuY2VzKCkpKTsKLSAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
clNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExv
YWQsIEludDMyLCBvcmlnaW4oKSwKLSAgICAgICAgICAgIHRhYmxlLCBzYWZlQ2FzdDxpbnQzMl90
PihUYWJsZTo6b2Zmc2V0T2ZTaXplKCkpKTsKKyAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ckxlbmd0aCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywg
TG9hZCwgSW50MzIsIG9yaWdpbigpLAorICAgICAgICAgICAgdGFibGUsIHNhZmVDYXN0PGludDMy
X3Q+KFRhYmxlOjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAgICAgIG1hc2sgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIFpFeHQzMiwgb3JpZ2luKCksCisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2MsIExvYWQs
IEludDMyLCBvcmlnaW4oKSwKKyAgICAgICAgICAgICAgICB0YWJsZSwgc2FmZUNhc3Q8aW50MzJf
dD4oVGFibGU6Om9mZnNldE9mTWFzaygpKSkpOwogICAgIH0KIAogICAgIC8vIENoZWNrIHRoZSBp
bmRleCB3ZSBhcmUgbG9va2luZyBmb3IgaXMgdmFsaWQuCiAgICAgewogICAgICAgICBDaGVja1Zh
bHVlKiBjaGVjayA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q2hlY2tWYWx1ZT4obV9wcm9j
LCBDaGVjaywgb3JpZ2luKCksCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PFZhbHVlPihtX3Byb2MsIEFib3ZlRXF1YWwsIG9yaWdpbigpLCBjYWxsZWVJbmRleCwgY2FsbGFi
bGVGdW5jdGlvbkJ1ZmZlclNpemUpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8VmFsdWU+KG1fcHJvYywgQWJvdmVFcXVhbCwgb3JpZ2luKCksIGNhbGxlZUluZGV4LCBj
YWxsYWJsZUZ1bmN0aW9uQnVmZmVyTGVuZ3RoKSk7CiAKICAgICAgICAgY2hlY2stPnNldEdlbmVy
YXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewogICAgICAgICAgICAgdGhpcy0+ZW1pdEV4Y2VwdGlvbkNoZWNrKGppdCwgRXhj
ZXB0aW9uVHlwZTo6T3V0T2ZCb3VuZHNDYWxsSW5kaXJlY3QpOwogICAgICAgICB9KTsKICAgICB9
CiAKLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW4gdGhlIHRhYmxlIGluZGV4IHNwYWNlIHdl
IGFyZSBsb29raW5nIGZvci4KLSAgICBFeHByZXNzaW9uVHlwZSBvZmZzZXQgPSBtX2N1cnJlbnRC
bG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIE11bCwgb3JpZ2luKCksCi0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMyLCBvcmlnaW4oKSwg
Y2FsbGVlSW5kZXgpLAotICAgICAgICBjb25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2Fs
bGFibGVGdW5jdGlvbikpKTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBBZGQsIG9yaWdpbigpLCBj
YWxsYWJsZUZ1bmN0aW9uQnVmZmVyLCBvZmZzZXQpOworICAgIGNhbGxlZUluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBaRXh0MzIsIG9yaWdpbigpLCBjYWxs
ZWVJbmRleCk7CiAKLSAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGlu
aXRpYWxpemVkLiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5k
ZXggaW5kaWNhdGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgotICAgIC8vIEZJWE1FOiB3aGVuIHdl
IGhhdmUgdHJhcCBoYW5kbGVycywgd2UgY2FuIGp1c3QgbGV0IHRoZSBjYWxsIGZhaWwgYmVjYXVz
ZSBTaWduYXR1cmU6OmludmFsaWRJbmRleCBpcyAwLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTc3MjEwCi0gICAgc3RhdGljX2Fzc2VydChzaXplb2YoQ2FsbGFibGVG
dW5jdGlvbjo6c2lnbmF0dXJlSW5kZXgpID09IHNpemVvZih1aW50MzJfdCksICJMb2FkIGNvZGVn
ZW4gYXNzdW1lcyBpMzIiKTsKLSAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
SW50MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihPQkpF
Q1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7CisgICAgaWYg
KE9wdGlvbnM6OmVuYWJsZVNwZWN0cmVNaXRpZ2F0aW9ucygpKQorICAgICAgICBjYWxsZWVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQml0QW5kLCBvcmln
aW4oKSwgbWFzaywgY2FsbGVlSW5kZXgpOworCisgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVG
dW5jdGlvbjsKICAgICB7Ci0gICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50Qmxv
Y2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgRXF1YWwsIG9y
aWdpbigpLAotICAgICAgICAgICAgICAgIGNhbGxlZVNpZ25hdHVyZUluZGV4LAotICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3Byb2MsIG9y
aWdpbigpLCBTaWduYXR1cmU6OmludmFsaWRJbmRleCkpKTsKKyAgICAgICAgLy8gQ29tcHV0ZSB0
aGUgb2Zmc2V0IGluIHRoZSB0YWJsZSBpbmRleCBzcGFjZSB3ZSBhcmUgbG9va2luZyBmb3IuCisg
ICAgICAgIEV4cHJlc3Npb25UeXBlIG9mZnNldCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8
VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKKyAgICAgICAgICAgIGNhbGxlZUluZGV4LCBj
b25zdGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoQ2FsbGFibGVGdW5jdGlvbikpKTsKKyAgICAg
ICAgY2FsbGFibGVGdW5jdGlvbiA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1f
cHJvYywgQWRkLCBvcmlnaW4oKSwgY2FsbGFibGVGdW5jdGlvbkJ1ZmZlciwgb2Zmc2V0KTsKKwor
ICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBDYWxsYWJsZUZ1bmN0aW9uIGlzIGluaXRpYWxpemVk
LiBXZSB0cmFwIGlmIGl0IGlzbid0LiBBbiAiaW52YWxpZCIgU2lnbmF0dXJlSW5kZXggaW5kaWNh
dGVzIGl0J3Mgbm90IGluaXRpYWxpemVkLgorICAgICAgICAvLyBGSVhNRTogd2hlbiB3ZSBoYXZl
IHRyYXAgaGFuZGxlcnMsIHdlIGNhbiBqdXN0IGxldCB0aGUgY2FsbCBmYWlsIGJlY2F1c2UgU2ln
bmF0dXJlOjppbnZhbGlkSW5kZXggaXMgMC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3NzIxMAorICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihDYWxsYWJsZUZ1
bmN0aW9uOjpzaWduYXR1cmVJbmRleCkgPT0gc2l6ZW9mKHVpbnQzMl90KSwgIkxvYWQgY29kZWdl
biBhc3N1bWVzIGkzMiIpOworICAgICAgICBFeHByZXNzaW9uVHlwZSBjYWxsZWVTaWduYXR1cmVJ
bmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9h
ZCwgSW50MzIsIG9yaWdpbigpLCBjYWxsYWJsZUZ1bmN0aW9uLCBzYWZlQ2FzdDxpbnQzMl90PihP
QkpFQ1RfT0ZGU0VUT0YoQ2FsbGFibGVGdW5jdGlvbiwgc2lnbmF0dXJlSW5kZXgpKSk7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEVxdWFsLCBvcmln
aW4oKSwKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVlU2lnbmF0dXJlSW5kZXgsCisgICAgICAg
ICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihtX3By
b2MsIG9yaWdpbigpLCBTaWduYXR1cmU6OmludmFsaWRJbmRleCkpKTsKIAotICAgICAgICBjaGVj
ay0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hl
Y2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVFbnRyeSk7Ci0gICAgICAgIH0pOwotICAg
IH0KKyAgICAgICAgICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAg
ICB0aGlzLT5lbWl0RXhjZXB0aW9uQ2hlY2soaml0LCBFeGNlcHRpb25UeXBlOjpOdWxsVGFibGVF
bnRyeSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogCi0gICAgLy8gQ2hlY2sgdGhlIHNp
Z25hdHVyZSBtYXRjaGVzIHRoZSB2YWx1ZSB3ZSBleHBlY3QuCi0gICAgewotICAgICAgICBFeHBy
ZXNzaW9uVHlwZSBleHBlY3RlZFNpZ25hdHVyZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIFNpZ25hdHVyZUluZm9ybWF0aW9u
OjpnZXQoc2lnbmF0dXJlKSk7Ci0gICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9jdXJyZW50
QmxvY2stPmFwcGVuZE5ldzxDaGVja1ZhbHVlPihtX3Byb2MsIENoZWNrLCBvcmlnaW4oKSwKLSAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1
YWwsIG9yaWdpbigpLCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRl
eCkpOworICAgICAgICAvLyBDaGVjayB0aGUgc2lnbmF0dXJlIG1hdGNoZXMgdGhlIHZhbHVlIHdl
IGV4cGVjdC4KKyAgICAgICAgeworICAgICAgICAgICAgRXhwcmVzc2lvblR5cGUgZXhwZWN0ZWRT
aWduYXR1cmVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPiht
X3Byb2MsIG9yaWdpbigpLCBTaWduYXR1cmVJbmZvcm1hdGlvbjo6Z2V0KHNpZ25hdHVyZSkpOwor
ICAgICAgICAgICAgQ2hlY2tWYWx1ZSogY2hlY2sgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3
PENoZWNrVmFsdWU+KG1fcHJvYywgQ2hlY2ssIG9yaWdpbigpLAorICAgICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTm90RXF1YWwsIG9yaWdpbigp
LCBjYWxsZWVTaWduYXR1cmVJbmRleCwgZXhwZWN0ZWRTaWduYXR1cmVJbmRleCkpOwogCi0gICAg
ICAgIGNoZWNrLT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6
OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgIHRoaXMtPmVtaXRFeGNl
cHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVyZSk7Ci0gICAgICAgIH0p
OworICAgICAgICAgICAgY2hlY2stPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgICAg
IHRoaXMtPmVtaXRFeGNlcHRpb25DaGVjayhqaXQsIEV4Y2VwdGlvblR5cGU6OkJhZFNpZ25hdHVy
ZSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIERvIGEgY29u
dGV4dCBzd2l0Y2ggaWYgbmVlZGVkLgogICAgIHsKICAgICAgICAgVmFsdWUqIG9mZnNldCA9IG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgTXVsLCBvcmlnaW4oKSwKLSAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgWkV4dDMy
LCBvcmlnaW4oKSwgY2FsbGVlSW5kZXgpLAotICAgICAgICAgICAgY29uc3RhbnQocG9pbnRlclR5
cGUoKSwgc2l6ZW9mKEluc3RhbmNlKikpKTsKKyAgICAgICAgICAgIGNhbGxlZUluZGV4LCBjb25z
dGFudChwb2ludGVyVHlwZSgpLCBzaXplb2YoSW5zdGFuY2UqKSkpOwogICAgICAgICBWYWx1ZSog
bmV3Q29udGV4dEluc3RhbmNlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4oKSwKICAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5hcHBlbmROZXc8VmFsdWU+KG1fcHJvYywgQWRkLCBvcmlnaW4oKSwgaW5z
dGFuY2VzQnVmZmVyLCBvZmZzZXQpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5jcHAKaW5kZXggOGVlZWUxZi4uMDI1YzBiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21UYWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbVRhYmxlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNCw5ICszNCwyMiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCit1aW50MzJfdCBUYWJsZTo6YWxsb2NhdGVkTGVuZ3RoKHVpbnQzMl90
IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9Qb3dlck9mVHdvKGxlbmd0aCk7
Cit9CisKK3ZvaWQgVGFibGU6OnNldExlbmd0aCh1aW50MzJfdCBsZW5ndGgpCit7CisgICAgbV9s
ZW5ndGggPSBsZW5ndGg7CisgICAgbV9tYXNrID0gV1RGOjptYXNrRm9yU2l6ZShsZW5ndGgpOwor
ICAgIEFTU0VSVChpc1ZhbGlkTGVuZ3RoKGxlbmd0aCkpOworICAgIEFTU0VSVChtX21hc2sgPT0g
V1RGOjptYXNrRm9yU2l6ZShhbGxvY2F0ZWRMZW5ndGgobGVuZ3RoKSkpOworfQorCiBSZWZQdHI8
VGFibGU+IFRhYmxlOjpjcmVhdGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1aW50
MzJfdD4gbWF4aW11bSkKIHsKLSAgICBpZiAoIWlzVmFsaWRTaXplKGluaXRpYWwpKQorICAgIGlm
ICghaXNWYWxpZExlbmd0aChpbml0aWFsKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyAoTm90TnVsbCwgZmFzdE1hbGxvYyhzaXplb2YoVGFibGUpKSkg
VGFibGUoaW5pdGlhbCwgbWF4aW11bSkpOwogfQpAQCAtNDcsMTYgKzYwLDE2IEBAIFRhYmxlOjp+
VGFibGUoKQogCiBUYWJsZTo6VGFibGUodWludDMyX3QgaW5pdGlhbCwgc3RkOjpvcHRpb25hbDx1
aW50MzJfdD4gbWF4aW11bSkKIHsKLSAgICBtX3NpemUgPSBpbml0aWFsOworICAgIHNldExlbmd0
aChpbml0aWFsKTsKICAgICBtX21heGltdW0gPSBtYXhpbXVtOwotICAgIEFTU0VSVChpc1ZhbGlk
U2l6ZShtX3NpemUpKTsKLSAgICBBU1NFUlQoIW1fbWF4aW11bSB8fCAqbV9tYXhpbXVtID49IG1f
c2l6ZSk7CisgICAgQVNTRVJUKCFtX21heGltdW0gfHwgKm1fbWF4aW11bSA+PSBtX2xlbmd0aCk7
CiAKICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgd29ydGggdHJ5aW5nIHRvIHByZS1hbGxvY2F0
ZSBtYXhpbXVtIGhlcmUuIFRoZSBzcGVjIHJlY29tbWVuZHMgZG9pbmcgc28uCiAgICAgLy8gQnV0
IGZvciBub3csIHdlJ3JlIG5vdCBkb2luZyB0aGF0LgotICAgIG1fZnVuY3Rpb25zID0gTWFsbG9j
UHRyPFdhc206OkNhbGxhYmxlRnVuY3Rpb24+OjptYWxsb2MoKHNpemVvZihXYXNtOjpDYWxsYWJs
ZUZ1bmN0aW9uKSAqIENoZWNrZWQ8c2l6ZV90PihzaXplKCkpKS51bnNhZmVHZXQoKSk7Ci0gICAg
bV9pbnN0YW5jZXMgPSBNYWxsb2NQdHI8SW5zdGFuY2UqPjo6bWFsbG9jKChzaXplb2YoSW5zdGFu
Y2UqKSAqIENoZWNrZWQ8c2l6ZV90PihzaXplKCkpKS51bnNhZmVHZXQoKSk7Ci0gICAgZm9yICh1
aW50MzJfdCBpID0gMDsgaSA8IHNpemUoKTsgKytpKSB7CisgICAgbV9mdW5jdGlvbnMgPSBNYWxs
b2NQdHI8V2FzbTo6Q2FsbGFibGVGdW5jdGlvbj46Om1hbGxvYygoc2l6ZW9mKFdhc206OkNhbGxh
YmxlRnVuY3Rpb24pICogQ2hlY2tlZDxzaXplX3Q+KGFsbG9jYXRlZExlbmd0aChtX2xlbmd0aCkp
KS51bnNhZmVHZXQoKSk7CisgICAgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyBhbmQgY291
bGQgYmUgc21hcnRlciBhYm91dCBub3QgY29tbWl0dGluZyBhbGwgb2YgdGhhdCBtZW1vcnkgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTQyNQorICAgIG1faW5zdGFu
Y2VzID0gTWFsbG9jUHRyPEluc3RhbmNlKj46Om1hbGxvYygoc2l6ZW9mKEluc3RhbmNlKikgKiBD
aGVja2VkPHNpemVfdD4oYWxsb2NhdGVkTGVuZ3RoKG1fbGVuZ3RoKSkpLnVuc2FmZUdldCgpKTsK
KyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgYWxsb2NhdGVkTGVuZ3RoKG1fbGVuZ3RoKTsg
KytpKSB7CiAgICAgICAgIG5ldyAoJm1fZnVuY3Rpb25zLmdldCgpW2ldKSBDYWxsYWJsZUZ1bmN0
aW9uKCk7CiAgICAgICAgIEFTU0VSVChtX2Z1bmN0aW9ucy5nZXQoKVtpXS5zaWduYXR1cmVJbmRl
eCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkgb24gdGhpcyBp
biBjb21waWxlZCBjb2RlLgogICAgICAgICBtX2luc3RhbmNlcy5nZXQoKVtpXSA9IG51bGxwdHI7
CkBAIC02NiwyOCArNzksMzEgQEAgVGFibGU6OlRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6
b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0pCiBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBUYWJs
ZTo6Z3Jvdyh1aW50MzJfdCBkZWx0YSkKIHsKICAgICBpZiAoZGVsdGEgPT0gMCkKLSAgICAgICAg
cmV0dXJuIHNpemUoKTsKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpOwogCiAgICAgdXNpbmcgQ2hl
Y2tlZCA9IENoZWNrZWQ8dWludDMyX3QsIFJlY29yZE92ZXJmbG93PjsKLSAgICBDaGVja2VkIG5l
d1NpemVDaGVja2VkID0gc2l6ZSgpOwotICAgIG5ld1NpemVDaGVja2VkICs9IGRlbHRhOwotICAg
IHVpbnQzMl90IG5ld1NpemU7Ci0gICAgaWYgKG5ld1NpemVDaGVja2VkLnNhZmVHZXQobmV3U2l6
ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKKyAgICBDaGVja2VkIG5ld0xlbmd0aENo
ZWNrZWQgPSBsZW5ndGgoKTsKKyAgICBuZXdMZW5ndGhDaGVja2VkICs9IGRlbHRhOworICAgIHVp
bnQzMl90IG5ld0xlbmd0aDsKKyAgICBpZiAobmV3TGVuZ3RoQ2hlY2tlZC5zYWZlR2V0KG5ld0xl
bmd0aCkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIGlmIChtYXhpbXVtKCkgJiYgbmV3U2l6ZSA+ICptYXhpbXVtKCkpCisg
ICAgaWYgKG1heGltdW0oKSAmJiBuZXdMZW5ndGggPiAqbWF4aW11bSgpKQogICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwotICAgIGlmICghaXNWYWxpZFNpemUobmV3U2l6ZSkpCisgICAgaWYg
KCFpc1ZhbGlkTGVuZ3RoKG5ld0xlbmd0aCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKICAgICBhdXRvIGNoZWNrZWRHcm93ID0gWyZdIChhdXRvJiBjb250YWluZXIpIHsKLSAgICAg
ICAgQ2hlY2tlZCByZWFsbG9jU2l6ZUNoZWNrZWQgPSBuZXdTaXplQ2hlY2tlZDsKLSAgICAgICAg
cmVhbGxvY1NpemVDaGVja2VkICo9IHNpemVvZigqY29udGFpbmVyLmdldCgpKTsKLSAgICAgICAg
dWludDMyX3QgcmVhbGxvY1NpemU7Ci0gICAgICAgIGlmIChyZWFsbG9jU2l6ZUNoZWNrZWQuc2Fm
ZUdldChyZWFsbG9jU2l6ZSkgPT0gQ2hlY2tlZFN0YXRlOjpEaWRPdmVyZmxvdykKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgY29udGFpbmVyLnJlYWxsb2MocmVhbGxvY1NpemUp
OwotICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSBtX3NpemU7IGkgPCBuZXdTaXplOyArK2kpCisg
ICAgICAgIGlmIChuZXdMZW5ndGhDaGVja2VkLnVuc2FmZUdldCgpID4gYWxsb2NhdGVkTGVuZ3Ro
KG1fbGVuZ3RoKSkgeworICAgICAgICAgICAgQ2hlY2tlZCByZWFsbG9jU2l6ZUNoZWNrZWQgPSBh
bGxvY2F0ZWRMZW5ndGgobmV3TGVuZ3RoQ2hlY2tlZC51bnNhZmVHZXQoKSk7CisgICAgICAgICAg
ICByZWFsbG9jU2l6ZUNoZWNrZWQgKj0gc2l6ZW9mKCpjb250YWluZXIuZ2V0KCkpOworICAgICAg
ICAgICAgdWludDMyX3QgcmVhbGxvY1NpemU7CisgICAgICAgICAgICBpZiAocmVhbGxvY1NpemVD
aGVja2VkLnNhZmVHZXQocmVhbGxvY1NpemUpID09IENoZWNrZWRTdGF0ZTo6RGlkT3ZlcmZsb3cp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gRklYTUUgdGhp
cyBvdmVyLWFsbG9jYXRlcyBhbmQgY291bGQgYmUgc21hcnRlciBhYm91dCBub3QgY29tbWl0dGlu
ZyBhbGwgb2YgdGhhdCBtZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4MTQyNQorICAgICAgICAgICAgY29udGFpbmVyLnJlYWxsb2MocmVhbGxvY1NpemUpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAodWludDMyX3QgaSA9IG1fbGVuZ3RoOyBpIDwgYWxsb2Nh
dGVkTGVuZ3RoKG5ld0xlbmd0aCk7ICsraSkKICAgICAgICAgICAgIG5ldyAoJmNvbnRhaW5lci5n
ZXQoKVtpXSkgc3RkOjpyZW1vdmVfcmVmZXJlbmNlX3Q8ZGVjbHR5cGUoKmNvbnRhaW5lci5nZXQo
KSk+KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH07CkBAIC05NywyNCArMTEzLDI0IEBA
IHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IFRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRhKQogICAg
IGlmICghY2hlY2tlZEdyb3cobV9pbnN0YW5jZXMpKQogICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwogCi0gICAgbV9zaXplID0gbmV3U2l6ZTsKKyAgICBzZXRMZW5ndGgobmV3TGVuZ3RoKTsK
IAotICAgIHJldHVybiBuZXdTaXplOworICAgIHJldHVybiBuZXdMZW5ndGg7CiB9CiAKIHZvaWQg
VGFibGU6OmNsZWFyRnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoaW5kZXggPCBzaXplKCkpOwotICAgIG1fZnVuY3Rpb25zLmdldCgpW2luZGV4XSA9IFdhc206
OkNhbGxhYmxlRnVuY3Rpb24oKTsKLSAgICBBU1NFUlQobV9mdW5jdGlvbnMuZ2V0KClbaW5kZXhd
LnNpZ25hdHVyZUluZGV4ID09IFdhc206OlNpZ25hdHVyZTo6aW52YWxpZEluZGV4KTsgLy8gV2Ug
cmVseSBvbiB0aGlzIGluIGNvbXBpbGVkIGNvZGUuCi0gICAgbV9pbnN0YW5jZXMuZ2V0KClbaW5k
ZXhdID0gbnVsbHB0cjsKKyAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IGxlbmd0aCgpKTsKKyAg
ICBtX2Z1bmN0aW9ucy5nZXQoKVtpbmRleCAmIG1fbWFza10gPSBXYXNtOjpDYWxsYWJsZUZ1bmN0
aW9uKCk7CisgICAgQVNTRVJUKG1fZnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV9tYXNrXS5zaWdu
YXR1cmVJbmRleCA9PSBXYXNtOjpTaWduYXR1cmU6OmludmFsaWRJbmRleCk7IC8vIFdlIHJlbHkg
b24gdGhpcyBpbiBjb21waWxlZCBjb2RlLgorICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4ICYg
bV9tYXNrXSA9IG51bGxwdHI7CiB9CiAKIHZvaWQgVGFibGU6OnNldEZ1bmN0aW9uKHVpbnQzMl90
IGluZGV4LCBDYWxsYWJsZUZ1bmN0aW9uIGZ1bmN0aW9uLCBJbnN0YW5jZSogaW5zdGFuY2UpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoaW5kZXggPCBzaXplKCkpOwotICAgIG1fZnVuY3Rpb25zLmdl
dCgpW2luZGV4XSA9IGZ1bmN0aW9uOwotICAgIG1faW5zdGFuY2VzLmdldCgpW2luZGV4XSA9IGlu
c3RhbmNlOworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkpOworICAgIG1fZnVu
Y3Rpb25zLmdldCgpW2luZGV4ICYgbV9tYXNrXSA9IGZ1bmN0aW9uOworICAgIG1faW5zdGFuY2Vz
LmdldCgpW2luZGV4ICYgbV9tYXNrXSA9IGluc3RhbmNlOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6VGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21U
YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKaW5kZXggNTI5
ZGZjZi4uMGFhZjQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVRhYmxlLmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUs
MjUgKzQ1LDMxIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSB+VGFibGUoKTsKIAog
ICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0oKSBjb25zdCB7IHJldHVybiBtX21h
eGltdW07IH0KLSAgICB1aW50MzJfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Cisg
ICAgdWludDMyX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KICAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQzMl90PiBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAgICAgdm9pZCBjbGVhckZ1bmN0aW9uKHVpbnQzMl90KTsKICAgICB2b2lkIHNldEZ1bmN0
aW9uKHVpbnQzMl90LCBDYWxsYWJsZUZ1bmN0aW9uLCBJbnN0YW5jZSopOwogCi0gICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZlNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoVGFibGUs
IG1fc2l6ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mRnVuY3Rpb25zKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBtX2Z1bmN0aW9ucyk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mSW5zdGFuY2VzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFRh
YmxlLCBtX2luc3RhbmNlcyk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTGVuZ3Ro
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFRhYmxlLCBtX2xlbmd0aCk7IH0KKyAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mTWFzaygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihUYWJs
ZSwgbV9tYXNrKTsgfQogCi0gICAgc3RhdGljIGJvb2wgaXNWYWxpZFNpemUodWludDMyX3Qgc2l6
ZSkgeyByZXR1cm4gc2l6ZSA8IG1heFRhYmxlRW50cmllczsgfQorICAgIHN0YXRpYyB1aW50MzJf
dCBhbGxvY2F0ZWRMZW5ndGgodWludDMyX3QgbGVuZ3RoKTsKKyAgICB1aW50MzJfdCBtYXNrKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXNrOyB9CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZExlbmd0aCh1
aW50MzJfdCBsZW5ndGgpIHsgcmV0dXJuIGxlbmd0aCA8IG1heFRhYmxlRW50cmllczsgfQogCiBw
cml2YXRlOgogICAgIFRhYmxlKHVpbnQzMl90IGluaXRpYWwsIHN0ZDo6b3B0aW9uYWw8dWludDMy
X3Q+IG1heGltdW0pOwogCi0gICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gbV9tYXhpbXVtOwot
ICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICB2b2lkIHNldExlbmd0aCh1aW50MzJfdCk7CisKICAg
ICBNYWxsb2NQdHI8Q2FsbGFibGVGdW5jdGlvbj4gbV9mdW5jdGlvbnM7CiAgICAgLy8gY2FsbF9p
bmRpcmVjdCBuZWVkcyB0byBkbyBhbiBJbnN0YW5jZSBjaGVjayB0byBwb3RlbnRpYWxseSBjb250
ZXh0IHN3aXRjaCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0byBhbm90aGVyIGluc3RhbmNlLiBX
ZSBjYW4gaG9sZCByYXcgcG9pbnRlcnMgdG8gSW5zdGFuY2UgaGVyZSBiZWNhdXNlIHRoZSBlbWJl
ZGRlciBlbnN1cmVzIHRoYXQgVGFibGUga2VlcHMgYWxsIHRoZSBpbnN0YW5jZXMgYWxpdmUuIFdl
IGNvdWxkbid0IGhvbGQgYSBSZWYgaGVyZSBiZWNhdXNlIGl0IHdvdWxkIGNhdXNlIGN5Y2xlcy4K
ICAgICBNYWxsb2NQdHI8SW5zdGFuY2UqPiBtX2luc3RhbmNlczsKKyAgICB1aW50MzJfdCBtX2xl
bmd0aDsKKyAgICB1aW50MzJfdCBtX21hc2s7CisgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4g
bV9tYXhpbXVtOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6Oldhc20KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3Bw
CmluZGV4IDVjOTE2ZGQuLmNiZWYzNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1MSw3ICsyNTEs
NyBAQCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRl
KFZNJiB2bSwgRXhlY1N0YXRlKiBleGVjLCBKUwogICAgICAgICAgICAgICAgIHJldHVybiBleGNl
cHRpb24oY3JlYXRlSlNXZWJBc3NlbWJseUxpbmtFcnJvcihleGVjLCB2bSwgaW1wb3J0RmFpbE1l
c3NhZ2UoaW1wb3J0LCAiVGFibGUgaW1wb3J0IiwgImlzIG5vdCBhbiBpbnN0YW5jZSBvZiBXZWJB
c3NlbWJseS5UYWJsZSIpKSk7CiAKICAgICAgICAgICAgIHVpbnQzMl90IGV4cGVjdGVkSW5pdGlh
bCA9IG1vZHVsZUluZm9ybWF0aW9uLnRhYmxlSW5mb3JtYXRpb24uaW5pdGlhbCgpOwotICAgICAg
ICAgICAgdWludDMyX3QgYWN0dWFsSW5pdGlhbCA9IHRhYmxlLT5zaXplKCk7CisgICAgICAgICAg
ICB1aW50MzJfdCBhY3R1YWxJbml0aWFsID0gdGFibGUtPmxlbmd0aCgpOwogICAgICAgICAgICAg
aWYgKGFjdHVhbEluaXRpYWwgPCBleHBlY3RlZEluaXRpYWwpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGV4Y2VwdGlvbihjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBpbXBv
cnRGYWlsTWVzc2FnZShpbXBvcnQsICJUYWJsZSBpbXBvcnQiLCAicHJvdmlkZWQgYW4gJ2luaXRp
YWwnIHRoYXQgaXMgdG9vIHNtYWxsIikpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5jcHAKaW5kZXggNGRlNGI5Ny4uNTdhMTJl
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJs
eVRhYmxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2Vt
Ymx5VGFibGUuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjIsOCArNjIsOSBAQCBKU1dlYkFzc2VtYmx5VGFibGU6OkpTV2Vi
QXNzZW1ibHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBSZWY8V2FzbTo6VAog
ewogICAgIC8vIEZJWE1FOiBJdCBtaWdodCBiZSB3b3J0aCB0cnlpbmcgdG8gcHJlLWFsbG9jYXRl
IG1heGltdW0gaGVyZS4gVGhlIHNwZWMgcmVjb21tZW5kcyBkb2luZyBzby4KICAgICAvLyBCdXQg
Zm9yIG5vdywgd2UncmUgbm90IGRvaW5nIHRoYXQuCi0gICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxv
Y1B0cjxXcml0ZUJhcnJpZXI8SlNPYmplY3Q+Pjo6bWFsbG9jKChzaXplb2YoV3JpdGVCYXJyaWVy
PEpTT2JqZWN0PikgKiBDaGVja2VkPHNpemVfdD4oc2l6ZSgpKSkudW5zYWZlR2V0KCkpOwotICAg
IGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBzaXplKCk7ICsraSkKKyAgICAvLyBGSVhNRSB0aGlz
IG92ZXItYWxsb2NhdGVzIGFuZCBjb3VsZCBiZSBzbWFydGVyIGFib3V0IG5vdCBjb21taXR0aW5n
IGFsbCBvZiB0aGF0IG1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgxNDI1CisgICAgbV9qc0Z1bmN0aW9ucyA9IE1hbGxvY1B0cjxXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+Pjo6bWFsbG9jKChzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBDaGVja2Vk
PHNpemVfdD4oYWxsb2NhdGVkTGVuZ3RoKCkpKS51bnNhZmVHZXQoKSk7CisgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IGFsbG9jYXRlZExlbmd0aCgpOyArK2kpCiAgICAgICAgIG5ldygmbV9q
c0Z1bmN0aW9ucy5nZXQoKVtpXSkgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PigpOwogfQogCkBAIC04
NSw3ICs4Niw3IEBAIHZvaWQgSlNXZWJBc3NlbWJseVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRo
aXNPYmplY3QtPnNpemUoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0aGlz
T2JqZWN0LT5sZW5ndGgoKTsgKytpKQogICAgICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0
LT5tX2pzRnVuY3Rpb25zLmdldCgpW2ldKTsKIH0KIApAQCAtOTQsMTYgKzk1LDE4IEBAIGJvb2wg
SlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRhKQogICAgIGlmIChkZWx0YSA9
PSAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHNpemVfdCBvbGRTaXplID0gc2l6ZSgp
OworICAgIHNpemVfdCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKIAogICAgIGF1dG8gZ3JldyA9IG1f
dGFibGUtPmdyb3coZGVsdGEpOwogICAgIGlmICghZ3JldykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgc2l6ZV90IG5ld1NpemUgPSBncmV3LnZhbHVlKCk7Ci0gICAgbV9qc0Z1bmN0aW9u
cy5yZWFsbG9jKChzaXplb2YoV3JpdGVCYXJyaWVyPEpTT2JqZWN0PikgKiBDaGVja2VkPHNpemVf
dD4obmV3U2l6ZSkpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgbmV3TGVuZ3RoID0gZ3Jldy52
YWx1ZSgpOworICAgIGlmIChuZXdMZW5ndGggPiBtX3RhYmxlLT5hbGxvY2F0ZWRMZW5ndGgob2xk
TGVuZ3RoKSkKKyAgICAgICAgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyBhbmQgY291bGQg
YmUgc21hcnRlciBhYm91dCBub3QgY29tbWl0dGluZyBhbGwgb2YgdGhhdCBtZW1vcnkgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTQyNQorICAgICAgICBtX2pzRnVu
Y3Rpb25zLnJlYWxsb2MoKHNpemVvZihXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KSAqIENoZWNrZWQ8
c2l6ZV90PihtX3RhYmxlLT5hbGxvY2F0ZWRMZW5ndGgobmV3TGVuZ3RoKSkpLnVuc2FmZUdldCgp
KTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQorICAg
IGZvciAoc2l6ZV90IGkgPSBvbGRMZW5ndGg7IGkgPCBtX3RhYmxlLT5hbGxvY2F0ZWRMZW5ndGgo
bmV3TGVuZ3RoKTsgKytpKQogICAgICAgICBuZXcgKCZtX2pzRnVuY3Rpb25zLmdldCgpW2ldKSBX
cml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMSwyNiAr
MTE0LDI2IEBAIGJvb2wgSlNXZWJBc3NlbWJseVRhYmxlOjpncm93KHVpbnQzMl90IGRlbHRhKQog
CiBKU09iamVjdCogSlNXZWJBc3NlbWJseVRhYmxlOjpnZXRGdW5jdGlvbih1aW50MzJfdCBpbmRl
eCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpbmRleCA8IHNpemUoKSk7Ci0gICAgcmV0dXJuIG1f
anNGdW5jdGlvbnMuZ2V0KClbaW5kZXhdLmdldCgpOworICAgIFJFTEVBU0VfQVNTRVJUKGluZGV4
IDwgbGVuZ3RoKCkpOworICAgIHJldHVybiBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV90
YWJsZS0+bWFzaygpXS5nZXQoKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OmNsZWFy
RnVuY3Rpb24odWludDMyX3QgaW5kZXgpCiB7CiAgICAgbV90YWJsZS0+Y2xlYXJGdW5jdGlvbihp
bmRleCk7Ci0gICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleF0gPSBXcml0ZUJhcnJpZXI8SlNP
YmplY3Q+KCk7CisgICAgbV9qc0Z1bmN0aW9ucy5nZXQoKVtpbmRleCAmIG1fdGFibGUtPm1hc2so
KV0gPSBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+KCk7CiB9CiAKIHZvaWQgSlNXZWJBc3NlbWJseVRh
YmxlOjpzZXRGdW5jdGlvbihWTSYgdm0sIHVpbnQzMl90IGluZGV4LCBXZWJBc3NlbWJseUZ1bmN0
aW9uKiBmdW5jdGlvbikKIHsKICAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rp
b24tPmNhbGxhYmxlRnVuY3Rpb24oKSwgJmZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgp
KTsKLSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9u
KTsKKyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV90YWJsZS0+bWFzaygpXS5zZXQo
dm0sIHRoaXMsIGZ1bmN0aW9uKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5VGFibGU6OnNldEZ1
bmN0aW9uKFZNJiB2bSwgdWludDMyX3QgaW5kZXgsIFdlYkFzc2VtYmx5V3JhcHBlckZ1bmN0aW9u
KiBmdW5jdGlvbikKIHsKICAgICBtX3RhYmxlLT5zZXRGdW5jdGlvbihpbmRleCwgZnVuY3Rpb24t
PmNhbGxhYmxlRnVuY3Rpb24oKSwgJmZ1bmN0aW9uLT5pbnN0YW5jZSgpLT5pbnN0YW5jZSgpKTsK
LSAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4XS5zZXQodm0sIHRoaXMsIGZ1bmN0aW9uKTsK
KyAgICBtX2pzRnVuY3Rpb25zLmdldCgpW2luZGV4ICYgbV90YWJsZS0+bWFzaygpXS5zZXQodm0s
IHRoaXMsIGZ1bmN0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5VGFibGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlUYWJsZS5oCmluZGV4IDY5NjQx
NTguLmRjNzRhOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlUYWJsZS5oCkBAIC00OCw5ICs0OCwxMCBAQCBwdWJsaWM6CiAKICAgICBERUNM
QVJFX0lORk87CiAKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2l6ZSh1aW50MzJfdCBzaXplKSB7
IHJldHVybiBXYXNtOjpUYWJsZTo6aXNWYWxpZFNpemUoc2l6ZSk7IH0KKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkTGVuZ3RoKHVpbnQzMl90IGxlbmd0aCkgeyByZXR1cm4gV2FzbTo6VGFibGU6Omlz
VmFsaWRMZW5ndGgobGVuZ3RoKTsgfQogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGlt
dW0oKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5tYXhpbXVtKCk7IH0KLSAgICB1aW50MzJfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+c2l6ZSgpOyB9CisgICAgdWludDMyX3QgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gbV90YWJsZS0+bGVuZ3RoKCk7IH0KKyAgICB1aW50MzJfdCBh
bGxvY2F0ZWRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RhYmxlLT5hbGxvY2F0ZWRMZW5ndGgo
bGVuZ3RoKCkpOyB9CiAgICAgYm9vbCBncm93KHVpbnQzMl90IGRlbHRhKSBXQVJOX1VOVVNFRF9S
RVRVUk47CiAgICAgSlNPYmplY3QqIGdldEZ1bmN0aW9uKHVpbnQzMl90KTsKICAgICB2b2lkIGNs
ZWFyRnVuY3Rpb24odWludDMyX3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCmluZGV4IGVmMGM4YzUuLjc4
YmFhNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9X
ZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjgsNyArMjY4LDcgQEAgSlNWYWx1ZSBX
ZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjKQogICAgIC8v
IFZhbGlkYXRpb24gb2YgYWxsIGVsZW1lbnQgcmFuZ2VzIGNvbWVzIGJlZm9yZSBhbGwgVGFibGUg
YW5kIE1lbW9yeSBpbml0aWFsaXphdGlvbi4KICAgICBmb3JFYWNoRWxlbWVudChbJl0gKGNvbnN0
IFdhc206OkVsZW1lbnQmIGVsZW1lbnQsIHVpbnQzMl90IHRhYmxlSW5kZXgpIHsKICAgICAgICAg
dWludDY0X3QgbGFzdFdyaXR0ZW5JbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0YWJsZUlu
ZGV4KSArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy5zaXpl
KCkpIC0gMTsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxhc3RXcml0dGVuSW5kZXggPj0gdGFibGUt
PnNpemUoKSkpCisgICAgICAgIGlmIChVTkxJS0VMWShsYXN0V3JpdHRlbkluZGV4ID49IHRhYmxl
LT5sZW5ndGgoKSkpCiAgICAgICAgICAgICBleGNlcHRpb24gPSBKU1ZhbHVlKHRocm93RXhjZXB0
aW9uKGV4ZWMsIHNjb3BlLCBjcmVhdGVKU1dlYkFzc2VtYmx5TGlua0Vycm9yKGV4ZWMsIHZtLCBB
U0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMgdHJ5aW5nIHRvIHNldCBhbiBvdXQgb2YgYm91bmRzIHRh
YmxlIGluZGV4IikpKSk7CiAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5VGFibGVQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKaW5kZXggYTQ2
MjczMC4uYTcwZGQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
V2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlUYWJsZVByb3RvdHlwZS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NCw3ICs3NCw3IEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90
b0Z1bmNMZW5ndGgoRXhlY1N0YXRlKiBlCiAKICAgICBKU1dlYkFzc2VtYmx5VGFibGUqIHRhYmxl
ID0gZ2V0VGFibGUoZXhlYywgdm0sIGV4ZWMtPnRoaXNWYWx1ZSgpKTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIodGFibGUtPnNpemUoKSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIodGFibGUtPmxlbmd0aCgpKSk7CiB9CiAKIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHcm93KEV4ZWNT
dGF0ZSogZXhlYykKQEAgLTg4LDEyICs4OCwxMiBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCB3ZWJBc3NlbWJseVRhYmxlUHJvdG9GdW5jR3JvdyhFeGVjU3RhdGUqIGV4ZQog
ICAgIHVpbnQzMl90IGRlbHRhID0gdG9Ob25XcmFwcGluZ1VpbnQzMihleGVjLCBleGVjLT5hcmd1
bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKIAotICAgIHVpbnQzMl90IG9sZFNpemUgPSB0YWJsZS0+c2l6ZSgpOworICAgIHVp
bnQzMl90IG9sZExlbmd0aCA9IHRhYmxlLT5sZW5ndGgoKTsKIAogICAgIGlmICghdGFibGUtPmdy
b3coZGVsdGEpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJX
ZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuZ3JvdyBjb3VsZCBub3QgZ3JvdyB0aGUgdGFibGUi
KSkpKTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIob2xkU2l6ZSkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIob2xkTGVuZ3RoKSk7CiB9CiAKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1
bmNHZXQoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTA2LDggKzEwNiw4IEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNHZXQoRXhlY1N0
YXRlKiBleGVjCiAKICAgICB1aW50MzJfdCBpbmRleCA9IHRvTm9uV3JhcHBpbmdVaW50MzIoZXhl
YywgZXhlYy0+YXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29w
ZSwgZW5jb2RlZEpTVmFsdWUoKSk7Ci0gICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dT
Y29wZSwgY3JlYXRlUmFuZ2VFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRh
YmxlLnByb3RvdHlwZS5nZXQgZXhwZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2l6ZSBv
ZiB0aGUgdGFibGUiKSkpKTsKKyAgICBpZiAoaW5kZXggPj0gdGFibGUtPmxlbmd0aCgpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2Nv
cGUsIGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJs
ZS5wcm90b3R5cGUuZ2V0IGV4cGVjdHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIGxlbmd0aCBv
ZiB0aGUgdGFibGUiKSkpKTsKIAogICAgIGlmIChKU09iamVjdCogcmVzdWx0ID0gdGFibGUtPmdl
dEZ1bmN0aW9uKGluZGV4KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQp
OwpAQCAtMTMxLDggKzEzMSw4IEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHdlYkFzc2VtYmx5VGFibGVQcm90b0Z1bmNTZXQoRXhlY1N0YXRlKiBleGVjCiAgICAgdWludDMy
X3QgaW5kZXggPSB0b05vbldyYXBwaW5nVWludDMyKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApKTsK
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwog
Ci0gICAgaWYgKGluZGV4ID49IHRhYmxlLT5zaXplKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dFeGNlcHRpb24oZXhlYywgdGhyb3dTY29wZSwgY3JlYXRlUmFuZ2VFcnJv
cihleGVjLCBBU0NJSUxpdGVyYWwoIldlYkFzc2VtYmx5LlRhYmxlLnByb3RvdHlwZS5zZXQgZXhw
ZWN0cyBhbiBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgdGFibGUiKSkpKTsKKyAg
ICBpZiAoaW5kZXggPj0gdGFibGUtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93RXhjZXB0aW9uKGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJXZWJBc3NlbWJseS5UYWJsZS5wcm90b3R5cGUuc2V0IGV4cGVj
dHMgYW4gaW50ZWdlciBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgdGFibGUiKSkpKTsKIAog
ICAgIGlmICh2YWx1ZS5pc051bGwoKSkKICAgICAgICAgdGFibGUtPmNsZWFyRnVuY3Rpb24oaW5k
ZXgpOwotLSAKMi4xMC4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>