<?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>154749</bug_id>
          
          <creation_ts>2016-02-26 13:55:42 -0800</creation_ts>
          <short_desc>Remove the on demand executable allocator</short_desc>
          <delta_ts>2017-02-23 08:59:45 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>168754</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=154831</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>154822</dependson>
    
    <dependson>154910</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>ap</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1168667</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-02-26 13:55:42 -0800</bug_when>
    <thetext>Remove the on demand executable allocator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168669</commentid>
    <comment_count>1</comment_count>
      <attachid>272366</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-02-26 13:58:00 -0800</bug_when>
    <thetext>Created attachment 272366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168671</commentid>
    <comment_count>2</comment_count>
      <attachid>272366</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-26 14:04:26 -0800</bug_when>
    <thetext>Comment on attachment 272366
Patch

This patch (and its history) will be easier to read if you first make the changes necessary to remove the demand allocator, check that in, and then do any moves you want to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168672</commentid>
    <comment_count>3</comment_count>
      <attachid>272366</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-26 14:04:44 -0800</bug_when>
    <thetext>Comment on attachment 272366
Patch

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

&gt; Source/JavaScriptCore/jit/ExecutableAllocator.cpp:105
&gt; +                RELEASE_ASSERT_NOT_REACHED(); // In debug mode, this should be a hard failure.

This comment isn&apos;t true.
Maybe it should just be ASSERT_NOT_REACHED?
Or we could remove the break on the next line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168740</commentid>
    <comment_count>4</comment_count>
      <attachid>272380</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-02-26 16:20:16 -0800</bug_when>
    <thetext>Created attachment 272380
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168742</commentid>
    <comment_count>5</comment_count>
      <attachid>272380</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-26 16:40:48 -0800</bug_when>
    <thetext>Comment on attachment 272380
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168775</commentid>
    <comment_count>6</comment_count>
      <attachid>272380</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 18:10:24 -0800</bug_when>
    <thetext>Comment on attachment 272380
Patch

Clearing flags on attachment: 272380

Committed r197226: &lt;http://trac.webkit.org/changeset/197226&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168776</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-26 18:10:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168855</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-02-26 23:45:00 -0800</bug_when>
    <thetext>Looks like this broke LLINT Cloop build: https://build.webkit.org/builders/Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/3832/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168877</commentid>
    <comment_count>9</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-02-27 10:14:46 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Looks like this broke LLINT Cloop build:
&gt; https://build.webkit.org/builders/
&gt; Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/3832/steps/
&gt; compile-webkit/logs/stdio

Ugh I&apos;m a muppet - will fix in a few minutes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168882</commentid>
    <comment_count>10</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-02-27 11:28:40 -0800</bug_when>
    <thetext>Uuid fux
Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	Source/JavaScriptCore/ChangeLog
	M	Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp
Committed r197256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168883</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-02-27 11:42:50 -0800</bug_when>
    <thetext>Test regressions too: https://build.webkit.org/builders/Apple%20El%20Capitan%2032-bit%20JSC%20%28BuildAndTest%29/builds/1607/steps/webkit-32bit-jsc-test/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169204</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2016-02-29 10:49:24 -0800</bug_when>
    <thetext>Why was this removed? It caused OOM crashes: see bug 154822</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169722</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-03-01 21:35:03 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Why was this removed? It caused OOM crashes: see bug 154822

Ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169751</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-01 22:52:49 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 154910</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169762</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-03-01 22:58:04 -0800</bug_when>
    <thetext>Rolled out in &lt;http://trac.webkit.org/changeset/197441&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171985</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-03-08 01:20:31 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Why was this removed?

Do you still plan to remove on demand executable allocator?
If yes, could you explain what is the reason? If no, let&apos;s close this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172088</commentid>
    <comment_count>17</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-03-08 10:36:56 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #12)
&gt; &gt; Why was this removed?
&gt; 
&gt; Do you still plan to remove on demand executable allocator?
&gt; If yes, could you explain what is the reason? If no, let&apos;s close this bug.

Because multiple allocators with variable behaviour are bad? Because it makes a number of other features impossible?

You never answered my question in the other bug: does your ARM port support going back and forth between the LLINT and the JIT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172095</commentid>
    <comment_count>18</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-03-08 10:51:43 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; Why was this removed?
&gt; &gt; 
&gt; &gt; Do you still plan to remove on demand executable allocator?
&gt; &gt; If yes, could you explain what is the reason? If no, let&apos;s close this bug.
&gt; 
&gt; Because multiple allocators with variable behaviour are bad? Because it
&gt; makes a number of other features impossible?
&gt; 
&gt; You never answered my question in the other bug: does your ARM port support
&gt; going back and forth between the LLINT and the JIT?

If you point me how to d(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; Why was this removed?
&gt; &gt; 
&gt; &gt; Do you still plan to remove on demand executable allocator?
&gt; &gt; If yes, could you explain what is the reason? If no, let&apos;s close this bug.
&gt; 
&gt; Because multiple allocators with variable behaviour are bad? Because it
&gt; makes a number of other features impossible?

In this case it would have been better to ask before removing.
 
&gt; You never answered my question in the other bug: does your ARM port support
&gt; going back and forth between the LLINT and the JIT?

https://bugs.webkit.org/show_bug.cgi?id=154822#c7

I haven&apos;t found any option to enable fallback on OOM. 
Could you point me where can we switch this on? 

Is it possible to enable this fallback if LLINT is disabled during 
stress test running? (Tests failed only in JSC_useLLINT=false case.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172127</commentid>
    <comment_count>19</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2016-03-08 12:13:42 -0800</bug_when>
    <thetext>
&gt; &gt; You never answered my question in the other bug: does your ARM port support
&gt; &gt; going back and forth between the LLINT and the JIT?
&gt; 
&gt; If you point me how to d(In reply to comment #17)

Do you have the actual llint enabled? Because that should just happen automatically if it can&apos;t allocate executable memory.

&gt; &gt; (In reply to comment #16)
&gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; Why was this removed?
&gt; &gt; &gt; 
&gt; &gt; &gt; Do you still plan to remove on demand executable allocator?
&gt; &gt; &gt; If yes, could you explain what is the reason? If no, let&apos;s close this bug.
&gt; &gt; 
&gt; &gt; Because multiple allocators with variable behaviour are bad? Because it
&gt; &gt; makes a number of other features impossible?
&gt; 
&gt; In this case it would have been better to ask before removing.

Yeah, i talked about it internally but didn&apos;t comment in the bug as I assumed it was an obviously worth while change.

&gt;  
&gt; &gt; You never answered my question in the other bug: does your ARM port support
&gt; &gt; going back and forth between the LLINT and the JIT?
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=154822#c7
&gt; 
&gt; I haven&apos;t found any option to enable fallback on OOM. 
&gt; Could you point me where can we switch this on? 
&gt; 
&gt; Is it possible to enable this fallback if LLINT is disabled during 
&gt; stress test running? (Tests failed only in JSC_useLLINT=false case.)

Wait, are you deliberately disabling the llint during stress testing? If you are then your stress test is _correct_ to crash. The LLINT design is deliberately intended to allow for running out of executable memory. That part of the value it provides.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172449</commentid>
    <comment_count>20</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-03-09 00:02:48 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Wait, are you deliberately disabling the llint during stress testing? If you
&gt; are then your stress test is _correct_ to crash. The LLINT design is
&gt; deliberately intended to allow for running out of executable memory. That
&gt; part of the value it provides.

To make it clear, I&apos;m not the one - the bad guy - who deliberately disables
LLINT during testing, but jsc-stress-tests script - wrote by Filip Pizlo - 
which runs all tests in different configurations. It&apos;s same on all platforms.

As you can see in the description of the other bug, tests fail only in no-llint
configuration: https://bugs.webkit.org/show_bug.cgi?id=154822#c0 .
Not only on Linux, but your own Apple&apos;s ARM platform too. But you guys simply
skipped these tests previously. Just read this comment again if you haven&apos;t 
do it: https://bugs.webkit.org/show_bug.cgi?id=154822#c1

Back to the different allocators, we should make it clear, it wasn&apos;t my
decision which one we use. You at Apple implemented both of them, enabled 
the fixed allocator only on X86_64, IOS and ARM64, other platforms uses
the on demand allocator.

Platform.h
-----------
#if CPU(X86_64) || PLATFORM(IOS) || CPU(ARM64)
#define ENABLE_EXECUTABLE_ALLOCATOR_FIXED 1
#else
#define ENABLE_EXECUTABLE_ALLOCATOR_DEMAND 1
#endif

It means that the fixed allocator wasn&apos;t tested ever on other platforms.
In this case it isn&apos;t fair to switch to untested code path and remove
the current codepath without asking.

Now we know that the fixed allocator has at least three problems:
- The fixed sized 16Mb isn&apos;t enough to run all JSC stress tests.
  https://bugs.webkit.org/show_bug.cgi?id=154822
- Increasing the fixed size over 16Mb causes many crashes on the
  Apple owned Thumb2 ARMv7Assembler .
  https://bugs.webkit.org/show_bug.cgi?id=154822#c3
- There are crashed on Apple Mac x86 platforms too
  https://bugs.webkit.org/show_bug.cgi?id=154910
  https://build.webkit.org/builders/Apple%20El%20Capitan%2032-bit%20JSC%20%28BuildAndTest%29/builds/1607

I think it would be fair to fix the ARMv7Assembler issue and increase
the fixed size to 32 MB to make all stress tests pass _ before _ removing
the on demand allocator. But of course, it is just a suggestion. You can
do here whatever you want, because you are stronger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1280304</commentid>
    <comment_count>21</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-02-23 08:59:45 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 168754 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272366</attachid>
            <date>2016-02-26 13:58:00 -0800</date>
            <delta_ts>2016-02-26 16:20:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154749-20160226135743.patch</filename>
            <type>text/plain</type>
            <size>31937</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTJkZmE5ZTAwNTM0ODRkMDFiMjlmYTVlYjVjNWY3YTYzOTU0MWY2Li40OTI5MDRkZTUwZDI5NDgy
ZTk3YzgyZTU5YmYxMTc1ZjM0Y2MzNmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OSBAQAorMjAxNi0wMi0yNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbW92ZSB0aGUgb24gZGVtYW5kIGV4ZWN1dGFibGUgYWxsb2NhdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ3NDkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmluZyB0aGUg
b24gZGVtYW5kIGFsbG9jYXRvciwgYW5kIGp1c3Qgc3dpdGNoaW5nIHRvCisgICAgICAgIHRoZSBG
aXhlZFZNQWxsb2NhdG9yIGZvciB0aGUgZXhlY3V0YWJsZSBoZWFwIG9uIGFsbCBwbGF0Zm9ybXMu
CisKKyAgICAgICAgU2ltcGxlIGFuZCBzZWxmIGV4cGxhbmF0b3J5LCBkaWZmIGlzIHVuaGFwcHkg
YmVjYXVzZSBpdCBkb2Vzbid0CisgICAgICAgIHVuZGVyc3RhbmQgdGhlIGdpdCBybS9tdiBldGMg
Zm9yIHRoZSByZW5hbWUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnM6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6
CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3Ip
OgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6On5GaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2Nh
dG9yOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJN
ZW1vcnlQcmVzc3VyZSk6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9y
eVByZXNzdXJlTXVsdGlwbGllcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6
OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZEV4
ZWN1dGFibGVNZW1vcnkpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRM
b2NrKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNv
dW50KToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgor
ICAgICAgICAoSlNDOjpEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOjpEZW1hbmRFeGVjdXRhYmxl
QWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9j
YXRvcjo6fkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOjpieXRlc0FsbG9jYXRlZEJ5QWxsQWxsb2NhdG9y
cyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6OmJ5
dGVzQ29tbWl0dGVkQnlBbGxvY2FjdG9ycyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRlbWFu
ZEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlRnJvbUFsbEFsbG9jYXRvcnMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZU5l
d1NwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRv
cjo6bm90aWZ5TmVlZFBhZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpEZW1hbmRFeGVjdXRh
YmxlQWxsb2NhdG9yOjpub3RpZnlQYWdlSXNGcmVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdG9ycyk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRvcnNNdXRleCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OnJlcHJvdGVjdFJlZ2lvbik6
IERlbGV0ZWQuCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5j
cHA6IFJlbW92ZWQuCisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRv
cjo6Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp+RXhlY3V0YWJsZUFs
bG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFs
bG9jYXRvcjo6fkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1cmVNdWx0
aXBsaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxs
b2NhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1Zh
bGlkRXhlY3V0YWJsZU1lbW9yeSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVB
bGxvY2F0b3I6OmdldExvY2spOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxs
b2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6IERlbGV0ZWQuCisKIDIwMTYtMDItMjYgIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgRm9sZGluZyBv
ZiBPdmVycmlkZXNIYXNJbnN0YW5jZSBERkcgbm9kZXMgc2hvdWQgaGFwcGVuIGluIGNvbnN0YW50
IGZvbGRpbmcgbm90IGZpeHVwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc4YWM0YWY0YmVjNzI5NTU0OTBjMDYxOWYzODViMGJh
YWY3YTA5NjguLjE4ZTNhNzFmNzJiODQ2MjRhNWY2YWQ4N2FmODYxNWNiZjNmZjVjMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTYtMDItMjYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgdGhlIG9uIGRlbWFuZCBleGVjdXRhYmxlIGFsbG9jYXRvcgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NzQ5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIG9u
IGRlbWFuZCBhbGxvY2F0b3IgZmxhZy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAy
MDE2LTAyLTI2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRkIFdURjo6T3B0aW9uU2V0IGFuZCB1c2UgaXQgZm9yIHRoZSB3ZWJzaXRlIGRhdGEgdHlw
ZXMgZW51bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDE1MDRlNTNhOGQw
OGIxOWE5NDFhNDg3ZWU4ODEwNTIwZDU0ZjhjM2UuLjU0MjY3OGU3OWY3MmNjMjZiZmY1NWIzYmFj
YzMyMDg0NzE3NWYyNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTUx
Niw3ICs1MTYsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9DYWxsRnJh
bWVTaHVmZmxlcjY0LmNwcAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwCiAg
ICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCi0gICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3JGaXhlZFZNUG9vbC5jcHAKICAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAogICAg
IGppdC9HUFJJbmZvLmNwcAogICAgIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggNGUzZDI4M2E3M2I2MjAxM2UxNjEx
OTg3NTQyYTIyZjE1YWFiYjQ2ZS4uNTMzNjg4YmUyNGNhMjRkOTFlYTViZTRlZDVkMDNjNmM1Zjg2
N2MwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC02MzYsNyAr
NjM2LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJhbWVTaHVmZmxl
cjY0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxs
b2NhdGlvbkZ1enouY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1
dGFibGVBbGxvY2F0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxJbnRyaW5zaWNFbWl0dGVyLmNwcCIgLz4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCBjNjM4YzRhNDQx
YzViMWNmOWY1OTY5MzdjYzBmZjMyZmE4ZjA0NTYxLi4zNDI0MTUzMGQ1NTBkMzUzZjQxNzMzZjBh
YjJlODY3MGZkMTAzNTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvai5maWx0ZXJzCkBAIC0xOTE4LDcgKzE5MTgsNiBAQAogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxCYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxWYXJhcmdzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIj4KICAg
ICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJmZTFkZmUyMWRlNDAyZTdhNTdmMDgxNjlk
ZjY0NzA0ZmFlOTJiYmEuLjgzZGMzOWRhYTFmNTI0NTAxMTc2MDE2YzY5MTNiNmY4ZDI0NDE3ZDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMzY1LDcgKzEzNjUsNiBAQAogCQk4
NkQzQjJDNTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9v
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODZEM0Iy
QzExMDE1NkJERTAwMjg2NUU3IC8qIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkQzQjJD
NjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RDNCMkMyMTAxNTZCREUwMDI4NjVFNyAv
KiBNYWNyb0Fzc2VtYmxlckFSTS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTg2RDNCM0MzMTAxNTlEN0YwMDI4NjVFNyAvKiBMaW5rQnVmZmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NkQzQjNDMTEw
MTU5RDdGMDAyODY1RTcgLyogTGlua0J1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTg2REI2NDY0MEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVj
dXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi87IH07CiAJCTg2RTExNkIxMEZFNzVBQzgwMEI1
MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDg2RTExNkIwMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4NkUzQzYx
MjE2N0JBQkQ3MDA2RDc2MEEgLyogSlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODZFM0M2MDYxNjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmFsdWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CiAJCTg2RTND
NjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg2RTNDNjA3MTY3QkFCODcwMDZENzYwQSAvKiBKU0Nv
bnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CkBA
IC0zNTM4LDcgKzM1MzcsNiBAQAogCQk4NkQzQjJDMTEwMTU2QkRFMDAyODY1RTcgLyogQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTg2RDNCMkMyMTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFS
TS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlckFSTS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkQzQjNDMTEwMTU5RDdGMDAyODY1RTcg
LyogTGlua0J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaW5rQnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2REI2NDYzMEY5NUM2RkMwMEQ3
RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFMTE2QjAwRkU3NUFDODAwQjUxMkJD
IC8qIENvZGVMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2Rl
TG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZFM0M2MDYxNjdCQUI4
NzAwNkQ3NjBBIC8qIEpTVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkUzQzYwNzE2N0JBQjg3
MDA2RDc2MEEgLyogSlNDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDk0NCw3ICs0OTQy
LDYgQEAKIAkJCQkwRkYwNTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6LmggKi8sCiAJCQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwICovLAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRh
YmxlQWxsb2NhdG9yLmggKi8sCi0JCQkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1
dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgKi8sCiAJCQkJMEYyNEU1M0UxN0VBOUY1OTAw
QUJCMjE3IC8qIEZQUkluZm8uaCAqLywKIAkJCQkwRjc2NkQyRDE1QThEQ0REMDA4RjM2M0UgLyog
R0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCAqLywKIAkJCQkwRjc2NkQyRTE1QThEQ0REMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggKi8sCkBAIC04ODUwLDcgKzg4NDcsNiBAQAog
CQkJCTg2Q0EwMzJFMTAzOEU4NDQwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjA1NEY5MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlv
bkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCNDhGNDkwRUU4OTM2RjAwRENCREI2IC8q
IEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJODZEQjY0NjQwRjk1
QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjU2QTFENTE1MDAxQ0Y0MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjAzMzJDMDE4QURGQUUxMDA1Rjk3OUEgLyogRXhp
dGluZ0pJVFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1ODUxNjc1NDgwRjAwRjhB
QjZFIC8qIEV4aXRLaW5kLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKaW5kZXggNGVkZTIzNTMxY2U2MDA3
NzhmZDI4N2IzOTEyYmQwN2JmODkxOWI3ZS4uOGQ1MDE4YjZjMzNjMzNhMTFhNTgzNDI1NWY2MGI0
MTU1MjBhMGEzNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCwyNDggKzI4LDIwMCBAQAogCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogCi0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKyNpZiBFTkFC
TEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCisKICNpbmNsdWRlICJDb2RlUHJvZmlsaW5n
LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oIgorI2luY2x1ZGUgPGVycm5vLmg+Cisj
aWYgIVBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgogI2luY2x1ZGUg
PHd0Zi9NZXRhQWxsb2NhdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAj
aW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4K
LSNlbmRpZgogCi0vLyBVbmNvbW1lbnQgdG8gY3JlYXRlIGFuIGFydGlmaWNpYWwgZXhlY3V0YWJs
ZSBtZW1vcnkgdXNhZ2UgbGltaXQuIFRoaXMgbGltaXQKLS8vIGlzIGltcGVyZmVjdCBhbmQgaXMg
cHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyB0aGUgVk0ncyBhYmlsaXR5IHRvIGhhbmRsZQot
Ly8gb3V0LW9mLWV4ZWN1dGFibGUtbWVtb3J5IHNpdHVhdGlvbnMuCi0vLyAjZGVmaW5lIEVYRUNV
VEFCTEVfTUVNT1JZX0xJTUlUIDEwMDAwMDAKKyNpZiBPUyhEQVJXSU4pCisjaW5jbHVkZSA8c3lz
L21tYW4uaD4KKyNlbmRpZgogCi0jaWYgRU5BQkxFKEFTU0VNQkxFUikKKyNpZiBPUyhMSU5VWCkK
KyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5h
bWVzcGFjZSBKU0MgeworICAgIAordWludHB0cl90IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1v
cnlQb29sOwogCi0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKLQotY2xh
c3MgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK2Ns
YXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9y
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBEZW1hbmRFeGVj
dXRhYmxlQWxsb2NhdG9yKCkKLSAgICAgICAgOiBNZXRhQWxsb2NhdG9yKGppdEFsbG9jYXRpb25H
cmFudWxlKQotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xvY2s+IGxvY2so
YWxsb2NhdG9yc011dGV4KCkpOwotICAgICAgICBhbGxvY2F0b3JzKCkuYWRkKHRoaXMpOwotICAg
ICAgICAvLyBEb24ndCBwcmVhbGxvY2F0ZSBhbnkgbWVtb3J5IGhlcmUuCi0gICAgfQotICAgIAot
ICAgIHZpcnR1YWwgfkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgIEZpeGVkVk1Qb29s
RXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0
aW9uR3JhbnVsZSkgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCiAgICAg
ewotICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9j
ayhhbGxvY2F0b3JzTXV0ZXgoKSk7Ci0gICAgICAgICAgICBhbGxvY2F0b3JzKCkucmVtb3ZlKHRo
aXMpOworICAgICAgICBzaXplX3QgcmVzZXJ2YXRpb25TaXplOworICAgICAgICBpZiAoT3B0aW9u
czo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkpCisgICAgICAgICAgICByZXNlcnZhdGlvblNp
emUgPSBPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZhdGlvblNpemUoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVzZXJ2YXRpb25TaXplID0gZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNp
emU7CisgICAgICAgIHJlc2VydmF0aW9uU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNp
emUoKSwgcmVzZXJ2YXRpb25TaXplKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNl
cnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKHJlc2VydmF0aW9uU2l6ZSwgT1NBbGxvY2F0
b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAg
ICAgICBpZiAobV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2YXRp
b24uc2l6ZSgpID09IHJlc2VydmF0aW9uU2l6ZSk7CisgICAgICAgICAgICBhZGRGcmVzaEZyZWVT
cGFjZShtX3Jlc2VydmF0aW9uLmJhc2UoKSwgbV9yZXNlcnZhdGlvbi5zaXplKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7CiAgICAgICAg
IH0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc2VydmF0aW9ucy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIHJlc2VydmF0aW9ucy5hdChpKS5kZWFsbG9jYXRlKCk7Ci0gICAg
fQotCi0gICAgc3RhdGljIHNpemVfdCBieXRlc0FsbG9jYXRlZEJ5QWxsQWxsb2NhdG9ycygpCi0g
ICAgewotICAgICAgICBzaXplX3QgdG90YWwgPSAwOwotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTG9jaz4gbG9jayhhbGxvY2F0b3JzTXV0ZXgoKSk7Ci0gICAgICAgIGZvciAoSGFzaFNl
dDxEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKj46OmNvbnN0X2l0ZXJhdG9yIGFsbG9jYXRvciA9
IGFsbG9jYXRvcnMoKS5iZWdpbigpOyBhbGxvY2F0b3IgIT0gYWxsb2NhdG9ycygpLmVuZCgpOyAr
K2FsbG9jYXRvcikKLSAgICAgICAgICAgIHRvdGFsICs9ICgqYWxsb2NhdG9yKS0+Ynl0ZXNBbGxv
Y2F0ZWQoKTsKLSAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXpl
X3QgYnl0ZXNDb21taXR0ZWRCeUFsbG9jYWN0b3JzKCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCB0
b3RhbCA9IDA7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGFsbG9j
YXRvcnNNdXRleCgpKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PERlbWFuZEV4ZWN1dGFibGVBbGxv
Y2F0b3IqPjo6Y29uc3RfaXRlcmF0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9ycygpLmJlZ2luKCk7
IGFsbG9jYXRvciAhPSBhbGxvY2F0b3JzKCkuZW5kKCk7ICsrYWxsb2NhdG9yKQotICAgICAgICAg
ICAgdG90YWwgKz0gKCphbGxvY2F0b3IpLT5ieXRlc0NvbW1pdHRlZCgpOwotICAgICAgICByZXR1
cm4gdG90YWw7Ci0gICAgfQotCi0jaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCi0g
ICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGVGcm9tQWxsQWxsb2NhdG9ycygpCi0gICAgewotICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTG9jaz4gbG9jayhhbGxvY2F0b3JzTXV0ZXgoKSk7
Ci0gICAgICAgIGZvciAoSGFzaFNldDxEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKj46OmNvbnN0
X2l0ZXJhdG9yIGFsbG9jYXRvciA9IGFsbG9jYXRvcnMoKS5iZWdpbigpOyBhbGxvY2F0b3IgIT0g
YWxsb2NhdG9ycygpLmVuZCgpOyArK2FsbG9jYXRvcikKLSAgICAgICAgICAgICgqYWxsb2NhdG9y
KS0+ZHVtcFByb2ZpbGUoKTsKICAgICB9Ci0jZW5kaWYKIAorICAgIHZpcnR1YWwgfkZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworICAgIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
dm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmIG51bVBhZ2VzKQorICAgIHZpcnR1YWwgdm9p
ZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgc2l6
ZV90IG5ld051bVBhZ2VzID0gKCgobnVtUGFnZXMgKiBwYWdlU2l6ZSgpICsgSklUX0FMTE9DQVRP
Ul9MQVJHRV9BTExPQ19TSVpFIC0gMSkgLyBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUg
KiBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpICsgcGFnZVNpemUoKSAtIDEpIC8gcGFn
ZVNpemUoKTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChuZXdOdW1QYWdlcyA+PSBudW1QYWdl
cyk7Ci0gICAgICAgIAotICAgICAgICBudW1QYWdlcyA9IG5ld051bVBhZ2VzOwotICAgICAgICAK
LSNpZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAotICAgICAgICBpZiAoYnl0ZXNBbGxvY2F0
ZWRCeUFsbEFsbG9jYXRvcnMoKSA+PSBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVCkKLSAgICAgICAg
ICAgIHJldHVybiAwOwotI2VuZGlmCi0gICAgICAgIAotICAgICAgICBQYWdlUmVzZXJ2YXRpb24g
cmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUobnVtUGFnZXMgKiBwYWdlU2l6
ZSgpLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJM
RSwgdHJ1ZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc2VydmF0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIHJlc2VydmF0aW9ucy5hcHBlbmQocmVzZXJ2YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIHJlc2VydmF0aW9uLmJhc2UoKTsKKyAgICAgICAgLy8gV2UncmUgb3BlcmF0
aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb2hpYml0
ZWQuCisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSkKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uo
dm9pZCogcGFnZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIE9TQWxsb2NhdG9yOjpjb21taXQo
cGFnZSwgcGFnZVNpemUoKSwgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyNpZiBV
U0UoTUFEVl9GUkVFX0ZPUl9KSVRfTUVNT1JZKQorICAgICAgICBVTlVTRURfUEFSQU0ocGFnZSk7
CisjZWxzZQorICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpKTsK
KyNlbmRpZgogICAgIH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2
b2lkKiBwYWdlKQorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2Up
IG92ZXJyaWRlCiAgICAgewotICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXQocGFnZSwgcGFn
ZVNpemUoKSk7CisjaWYgVVNFKE1BRFZfRlJFRV9GT1JfSklUX01FTU9SWSkKKyAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IG1hZHZpc2UocGFnZSwgcGFnZVNpemUo
KSwgTUFEVl9GUkVFKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gLTEpOworICAgICAgICAgICAg
aWYgKGVycm5vICE9IEVBR0FJTikgeworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEluIGRlYnVnIG1vZGUsIHRoaXMgc2hvdWxkIGJlIGEgaGFyZCBmYWls
dXJlLgorICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBJbiByZWxlYXNlIG1vZGUsIHdlIHNob3Vs
ZCBqdXN0IGlnbm9yZSB0aGUgZXJyb3IgLSBub3QgcmV0dXJuaW5nIG1lbW9yeSB0byB0aGUgT1Mg
aXMgYmV0dGVyIHRoYW4gY3Jhc2hpbmcsIGVzcGVjaWFsbHkgc2luY2Ugd2UgX3dpbGxfIGJlIGFi
bGUgdG8gcmV1c2UgdGhlIG1lbW9yeSBpbnRlcm5hbGx5IGFueXdheS4KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBw
YWdlU2l6ZSgpKTsKKyNlbmRpZgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8UGFnZVJl
c2VydmF0aW9uLCAxNj4gcmVzZXJ2YXRpb25zOwotICAgIHN0YXRpYyBIYXNoU2V0PERlbWFuZEV4
ZWN1dGFibGVBbGxvY2F0b3IqPiYgYWxsb2NhdG9ycygpCi0gICAgewotICAgICAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKj4+IHNldDsK
LSAgICAgICAgcmV0dXJuIHNldDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RhdGljTG9jayYgYWxs
b2NhdG9yc011dGV4KCkKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBTdGF0aWNMb2NrIG11dGV4Owot
Ci0gICAgICAgIHJldHVybiBtdXRleDsKLSAgICB9CisgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVz
ZXJ2YXRpb247CiB9OwogCi0jaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCi12b2lk
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQotewotfQotI2Vsc2UK
LXN0YXRpYyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKiBnQWxsb2NhdG9yOwotCi1uYW1lc3Bh
Y2Ugewotc3RhdGljIGlubGluZSBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3Io
KQotewotICAgIHJldHVybiBnQWxsb2NhdG9yOwotfQotfQorc3RhdGljIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOwogCiB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmluaXRpYWxpemVBbGxvY2F0b3IoKQogewotICAgIEFTU0VSVCghZ0FsbG9jYXRvcik7Ci0gICAg
Z0FsbG9jYXRvciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCk7Ci0gICAgQ29kZVBy
b2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGdBbGxvY2F0b3IpOworICAgIEFTU0VSVCghYWxsb2Nh
dG9yKTsKKyAgICBhbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
KCk7CisgICAgQ29kZVByb2ZpbGluZzo6bm90aWZ5QWxsb2NhdG9yKGFsbG9jYXRvcik7CiB9Ci0j
ZW5kaWYKIAogRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihWTSYpCi0j
aWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCi0gICAgOiBtX2FsbG9jYXRvcihzdGQ6
Om1ha2VfdW5pcXVlPERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I+KCkpCi0jZW5kaWYKIHsKLSAg
ICBBU1NFUlQoYWxsb2NhdG9yKCkpOworICAgIEFTU0VSVChhbGxvY2F0b3IpOwogfQogCiBFeGVj
dXRhYmxlQWxsb2NhdG9yOjp+RXhlY3V0YWJsZUFsbG9jYXRvcigpCiB7CiB9CiAKK0ZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcjo6fkZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigp
Cit7CisgICAgbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7Cit9CisKIGJvb2wgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0
dXJuICEhYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCiB7Ci0jaWZkZWYgRVhFQ1VUQUJMRV9NRU1P
UllfTElNSVQKLSAgICByZXR1cm4gRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6Ynl0ZXNBbGxv
Y2F0ZWRCeUFsbEFsbG9jYXRvcnMoKSA+IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUIC8gMjsKLSNl
bHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlz
dGljcyBzdGF0aXN0aWNzID0gYWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOworICAgIHJl
dHVybiBzdGF0aXN0aWNzLmJ5dGVzQWxsb2NhdGVkID4gc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVk
IC8gMjsKIH0KIAogZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdXJlTXVs
dGlwbGllcihzaXplX3QgYWRkZWRNZW1vcnlVc2FnZSkKIHsKLSAgICBkb3VibGUgcmVzdWx0Owot
I2lmZGVmIEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUCi0gICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVk
ID0gRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6Ynl0ZXNBbGxvY2F0ZWRCeUFsbEFsbG9jYXRv
cnMoKSArIGFkZGVkTWVtb3J5VXNhZ2U7Ci0gICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IEVYRUNV
VEFCTEVfTUVNT1JZX0xJTUlUKQotICAgICAgICBieXRlc0FsbG9jYXRlZCA9IEVYRUNVVEFCTEVf
TUVNT1JZX0xJTUlUOwotICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oRVhFQ1VUQUJM
RV9NRU1PUllfTElNSVQpIC8KLSAgICAgICAgKEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUIC0gYnl0
ZXNBbGxvY2F0ZWQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWRkZWRNZW1vcnlVc2FnZSk7
Ci0gICAgcmVzdWx0ID0gMS4wOwotI2VuZGlmCisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGlj
cyBzdGF0aXN0aWNzID0gYWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOworICAgIEFTU0VS
VChzdGF0aXN0aWNzLmJ5dGVzQWxsb2NhdGVkIDw9IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCk7
CisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkID0gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCAr
IGFkZGVkTWVtb3J5VXNhZ2U7CisgICAgc2l6ZV90IGJ5dGVzQXZhaWxhYmxlID0gc3RhdGljX2Nh
c3Q8c2l6ZV90PigKKyAgICAgICAgc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkICogKDEgLSBleGVj
dXRhYmxlUG9vbFJlc2VydmF0aW9uRnJhY3Rpb24pKTsKKyAgICBpZiAoYnl0ZXNBbGxvY2F0ZWQg
Pj0gYnl0ZXNBdmFpbGFibGUpCisgICAgICAgIGJ5dGVzQWxsb2NhdGVkID0gYnl0ZXNBdmFpbGFi
bGU7CisgICAgZG91YmxlIHJlc3VsdCA9IDEuMDsKKyAgICBzaXplX3QgZGl2aXNvciA9IGJ5dGVz
QXZhaWxhYmxlIC0gYnl0ZXNBbGxvY2F0ZWQ7CisgICAgaWYgKGRpdmlzb3IpCisgICAgICAgIHJl
c3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oYnl0ZXNBdmFpbGFibGUpIC8gZGl2aXNvcjsKICAg
ICBpZiAocmVzdWx0IDwgMS4wKQogICAgICAgICByZXN1bHQgPSAxLjA7CiAgICAgcmV0dXJuIHJl
c3VsdDsKLQogfQogCiBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFs
bG9jYXRvcjo6YWxsb2NhdGUoVk0mLCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlE
LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiB7Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvcigpLT5hbGxvY2F0ZShzaXplSW5CeXRlcywg
b3duZXJVSUQpOwotICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCB8fCBlZmZvcnQgIT0gSklUQ29t
cGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgaWYgKGVmZm9ydCAhPSBKSVRDb21waWxhdGlvbkNh
bkZhaWwgJiYgT3B0aW9uczo6cmVwb3J0TXVzdFN1Y2NlZWRFeGVjdXRhYmxlQWxsb2NhdGlvbnMo
KSkgeworICAgICAgICBkYXRhTG9nKCJBbGxvY2F0aW5nICIsIHNpemVJbkJ5dGVzLCAiIGJ5dGVz
IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdpdGggSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZC5cbiIp
OworICAgICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKKyAgICB9CisgICAgCisgICAgaWYgKGVm
Zm9ydCA9PSBKSVRDb21waWxhdGlvbkNhbkZhaWwKKyAgICAgICAgJiYgZG9FeGVjdXRhYmxlQWxs
b2NhdGlvbkZ1enppbmdJZkVuYWJsZWQoKSA9PSBQcmV0ZW5kVG9GYWlsRXhlY3V0YWJsZUFsbG9j
YXRpb24pCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIGlmIChlZmZvcnQgPT0g
SklUQ29tcGlsYXRpb25DYW5GYWlsKSB7CisgICAgICAgIC8vIERvbid0IGFsbG93IGFsbG9jYXRp
b25zIGlmIHdlIGFyZSBkb3duIHRvIHJlc2VydmUuCisgICAgICAgIE1ldGFBbGxvY2F0b3I6OlN0
YXRpc3RpY3Mgc3RhdGlzdGljcyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKKyAg
ICAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkID0gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCAr
IHNpemVJbkJ5dGVzOworICAgICAgICBzaXplX3QgYnl0ZXNBdmFpbGFibGUgPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KAorICAgICAgICAgICAgc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkICogKDEgLSBl
eGVjdXRhYmxlUG9vbFJlc2VydmF0aW9uRnJhY3Rpb24pKTsKKyAgICAgICAgaWYgKGJ5dGVzQWxs
b2NhdGVkID4gYnl0ZXNBdmFpbGFibGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgCisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFs
bG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKKyAgICBpZiAoIXJlc3Vs
dCkgeworICAgICAgICBpZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkgeworICAg
ICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGlsZSBhbGxv
Y2F0aW5nICIsIHNpemVJbkJ5dGVzLCAiIGJ5dGVzLlxuIik7CisgICAgICAgICAgICBDUkFTSCgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNv
dW50KCkKLXsKLSAgICByZXR1cm4gRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6Ynl0ZXNDb21t
aXR0ZWRCeUFsbG9jYWN0b3JzKCk7Ci19Ci0KLSNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJP
RklMRSkKLXZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQorYm9vbCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25zdCBMb2NrSG9sZGVy
JiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCiB7Ci0gICAgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRv
cjo6ZHVtcFByb2ZpbGVGcm9tQWxsQWxsb2NhdG9ycygpOworICAgIHJldHVybiBhbGxvY2F0b3It
PmlzSW5BbGxvY2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKIH0KLSNlbmRpZgogCiBMb2Nr
JiBFeGVjdXRhYmxlQWxsb2NhdG9yOjpnZXRMb2NrKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ0Fs
bG9jYXRvci0+Z2V0TG9jaygpOworICAgIHJldHVybiBhbGxvY2F0b3ItPmdldExvY2soKTsKIH0K
IAotYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShjb25z
dCBMb2NrSG9sZGVyJiBsb2NrZXIsIHZvaWQqIGFkZHJlc3MpCitzaXplX3QgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNvdW50KCkKIHsKLSAgICByZXR1cm4gZ0FsbG9jYXRvci0+
aXNJbkFsbG9jYXRlZE1lbW9yeShsb2NrZXIsIGFkZHJlc3MpOworICAgIHJldHVybiBhbGxvY2F0
b3ItPmJ5dGVzQ29tbWl0dGVkKCk7CiB9CiAKLSNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9B
TExPQ0FUT1JfREVNQU5EKQotCi0jaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCi0K
LSNpZiBPUyhXSU5ET1dTKQotI2Vycm9yICJBU1NFTUJMRVJfV1hfRVhDTFVTSVZFIG5vdCB5ZXQg
c3Vwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCi0jZW5kaWYKLQotdm9pZCBFeGVjdXRhYmxlQWxs
b2NhdG9yOjpyZXByb3RlY3RSZWdpb24odm9pZCogc3RhcnQsIHNpemVfdCBzaXplLCBQcm90ZWN0
aW9uU2V0dGluZyBzZXR0aW5nKQorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQor
dm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB7Ci0gICAgc2l6ZV90IHBh
Z2VTaXplID0gV1RGOjpwYWdlU2l6ZSgpOwotCi0gICAgLy8gQ2FsY3VsYXRlIHRoZSBzdGFydCBv
ZiB0aGUgcGFnZSBjb250YWluaW5nIHRoaXMgcmVnaW9uLAotICAgIC8vIGFuZCBhY2NvdW50IGZv
ciB0aGlzIGV4dHJhIG1lbW9yeSB3aXRoaW4gc2l6ZS4KLSAgICBpbnRwdHJfdCBzdGFydFB0ciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0YXJ0KTsKLSAgICBpbnRwdHJfdCBwYWdlU3Rh
cnRQdHIgPSBzdGFydFB0ciAmIH4ocGFnZVNpemUgLSAxKTsKLSAgICB2b2lkKiBwYWdlU3RhcnQg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlU3RhcnRQdHIpOwotICAgIHNpemUgKz0gKHN0
YXJ0UHRyIC0gcGFnZVN0YXJ0UHRyKTsKLQotICAgIC8vIFJvdW5kIHNpemUgdXAKLSAgICBzaXpl
ICs9IChwYWdlU2l6ZSAtIDEpOwotICAgIHNpemUgJj0gfihwYWdlU2l6ZSAtIDEpOwotCi0gICAg
bXByb3RlY3QocGFnZVN0YXJ0LCBzaXplLCAoc2V0dGluZyA9PSBXcml0YWJsZSkgPyBQUk9URUNU
SU9OX0ZMQUdTX1JXIDogUFJPVEVDVElPTl9GTEFHU19SWCk7CisgICAgYWxsb2NhdG9yLT5kdW1w
UHJvZmlsZSgpOwogfQotCiAjZW5kaWYKIAogfQogCi0jZW5kaWYgLy8gSEFWRShBU1NFTUJMRVIp
CisKKyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZN
UG9vbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JG
aXhlZFZNUG9vbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNTAxOGI2YzMz
YzMzYTExYTU4MzQyNTVmNjBiNDE1NTIwYTBhMzcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjI3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKLQotI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKLQotI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9G
SVhFRCkKLQotI2luY2x1ZGUgIkNvZGVQcm9maWxpbmcuaCIKLSNpbmNsdWRlICJFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouaCIKLSNpbmNsdWRlIDxlcnJuby5oPgotI2lmICFQTEFURk9STShXSU4p
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRv
ci5oPgotI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KLSNpbmNsdWRlIDx3dGYvVk1U
YWdzLmg+Ci0KLSNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNlbmRpZgot
Ci0jaWYgT1MoTElOVVgpCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNlbmRpZgotCi11c2luZyBuYW1l
c3BhY2UgV1RGOwotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICAKLXVpbnRwdHJfdCBzdGFydE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbDsKLQotY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yIDogcHVibGljIE1ldGFBbGxvY2F0b3IgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCi0gICAg
ICAgIDogTWV0YUFsbG9jYXRvcihqaXRBbGxvY2F0aW9uR3JhbnVsZSkgLy8gcm91bmQgdXAgYWxs
IGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCi0gICAgewotICAgICAgICBzaXplX3QgcmVzZXJ2YXRp
b25TaXplOwotICAgICAgICBpZiAoT3B0aW9uczo6aml0TWVtb3J5UmVzZXJ2YXRpb25TaXplKCkp
Ci0gICAgICAgICAgICByZXNlcnZhdGlvblNpemUgPSBPcHRpb25zOjpqaXRNZW1vcnlSZXNlcnZh
dGlvblNpemUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzZXJ2YXRpb25TaXplID0g
Zml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemU7Ci0gICAgICAgIHJlc2VydmF0aW9uU2l6ZSA9
IHJvdW5kVXBUb011bHRpcGxlT2YocGFnZVNpemUoKSwgcmVzZXJ2YXRpb25TaXplKTsKLSAgICAg
ICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2Vz
KHJlc2VydmF0aW9uU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxF
X1BPT0xfV1JJVEFCTEUsIHRydWUpOwotICAgICAgICBpZiAobV9yZXNlcnZhdGlvbikgewotICAg
ICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24uc2l6ZSgpID09IHJlc2VydmF0aW9uU2l6ZSk7
Ci0gICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShtX3Jlc2VydmF0aW9uLmJhc2UoKSwgbV9y
ZXNlcnZhdGlvbi5zaXplKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGFydE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3Jl
c2VydmF0aW9uLmJhc2UoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5GaXhl
ZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKLSAgICAKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90Jikgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9u
IGlzIGFsd2F5cyBwcm9oaWJpdGVkLgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpIG92ZXJyaWRlCi0gICAg
ewotI2lmIFVTRShNQURWX0ZSRUVfRk9SX0pJVF9NRU1PUlkpCi0gICAgICAgIFVOVVNFRF9QQVJB
TShwYWdlKTsKLSNlbHNlCi0gICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VT
aXplKCkpOwotI2VuZGlmCi0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdl
SXNGcmVlKHZvaWQqIHBhZ2UpIG92ZXJyaWRlCi0gICAgewotI2lmIFVTRShNQURWX0ZSRUVfRk9S
X0pJVF9NRU1PUlkpCi0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGludCByZXN1bHQg
PSBtYWR2aXNlKHBhZ2UsIHBhZ2VTaXplKCksIE1BRFZfRlJFRSk7Ci0gICAgICAgICAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBBU1NFUlQocmVz
dWx0ID09IC0xKTsKLSAgICAgICAgICAgIGlmIChlcnJubyAhPSBFQUdBSU4pIHsKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBJbiBkZWJ1ZyBtb2RlLCB0
aGlzIHNob3VsZCBiZSBhIGhhcmQgZmFpbHVyZS4KLSAgICAgICAgICAgICAgICBicmVhazsgLy8g
SW4gcmVsZWFzZSBtb2RlLCB3ZSBzaG91bGQganVzdCBpZ25vcmUgdGhlIGVycm9yIC0gbm90IHJl
dHVybmluZyBtZW1vcnkgdG8gdGhlIE9TIGlzIGJldHRlciB0aGFuIGNyYXNoaW5nLCBlc3BlY2lh
bGx5IHNpbmNlIHdlIF93aWxsXyBiZSBhYmxlIHRvIHJldXNlIHRoZSBtZW1vcnkgaW50ZXJuYWxs
eSBhbnl3YXkuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIG1fcmVz
ZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSk7Ci0jZW5kaWYKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247Ci19OwotCi1zdGF0aWMg
Rml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3I7Ci0KLXZvaWQgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpCi17Ci0gICAgQVNTRVJUKCFhbGxv
Y2F0b3IpOwotICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IoKTsKLSAgICBDb2RlUHJvZmlsaW5nOjpub3RpZnlBbGxvY2F0b3IoYWxsb2NhdG9yKTsKLX0K
LQotRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihWTSYpCi17Ci0gICAg
QVNTRVJUKGFsbG9jYXRvcik7Ci19Ci0KLUV4ZWN1dGFibGVBbGxvY2F0b3I6On5FeGVjdXRhYmxl
QWxsb2NhdG9yKCkKLXsKLX0KLQotRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOjp+Rml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKLXsKLSAgICBtX3Jlc2VydmF0aW9uLmRlYWxs
b2NhdGUoKTsKLX0KLQotYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKLX0KLQotYm9vbCBF
eGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKLXsKLSAgICBNZXRhQWxs
b2NhdG9yOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3MgPSBhbGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0
aWNzKCk7Ci0gICAgcmV0dXJuIHN0YXRpc3RpY3MuYnl0ZXNBbGxvY2F0ZWQgPiBzdGF0aXN0aWNz
LmJ5dGVzUmVzZXJ2ZWQgLyAyOwotfQotCi1kb3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVt
b3J5UHJlc3N1cmVNdWx0aXBsaWVyKHNpemVfdCBhZGRlZE1lbW9yeVVzYWdlKQotewotICAgIE1l
dGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdGlzdGljcyA9IGFsbG9jYXRvci0+Y3VycmVudFN0
YXRpc3RpY3MoKTsKLSAgICBBU1NFUlQoc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCA8PSBzdGF0
aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQpOwotICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCA9IHN0YXRp
c3RpY3MuYnl0ZXNBbGxvY2F0ZWQgKyBhZGRlZE1lbW9yeVVzYWdlOwotICAgIHNpemVfdCBieXRl
c0F2YWlsYWJsZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oCi0gICAgICAgIHN0YXRpc3RpY3MuYnl0
ZXNSZXNlcnZlZCAqICgxIC0gZXhlY3V0YWJsZVBvb2xSZXNlcnZhdGlvbkZyYWN0aW9uKSk7Ci0g
ICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IGJ5dGVzQXZhaWxhYmxlKQotICAgICAgICBieXRlc0Fs
bG9jYXRlZCA9IGJ5dGVzQXZhaWxhYmxlOwotICAgIGRvdWJsZSByZXN1bHQgPSAxLjA7Ci0gICAg
c2l6ZV90IGRpdmlzb3IgPSBieXRlc0F2YWlsYWJsZSAtIGJ5dGVzQWxsb2NhdGVkOwotICAgIGlm
IChkaXZpc29yKQotICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGJ5dGVzQXZh
aWxhYmxlKSAvIGRpdmlzb3I7Ci0gICAgaWYgKHJlc3VsdCA8IDEuMCkKLSAgICAgICAgcmVzdWx0
ID0gMS4wOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5C
eXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKLXsKLSAg
ICBpZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCAmJiBPcHRpb25zOjpyZXBvcnRN
dXN0U3VjY2VlZEV4ZWN1dGFibGVBbGxvY2F0aW9ucygpKSB7Ci0gICAgICAgIGRhdGFMb2coIkFs
bG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0ZXMgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0
aCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLlxuIik7Ci0gICAgICAgIFdURlJlcG9ydEJhY2t0
cmFjZSgpOwotICAgIH0KLSAgICAKLSAgICBpZiAoZWZmb3J0ID09IEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbAotICAgICAgICAmJiBkb0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6emluZ0lmRW5hYmxlZCgp
ID09IFByZXRlbmRUb0ZhaWxFeGVjdXRhYmxlQWxsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgCi0gICAgaWYgKGVmZm9ydCA9PSBKSVRDb21waWxhdGlvbkNhbkZhaWwpIHsK
LSAgICAgICAgLy8gRG9uJ3QgYWxsb3cgYWxsb2NhdGlvbnMgaWYgd2UgYXJlIGRvd24gdG8gcmVz
ZXJ2ZS4KLSAgICAgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0aXN0aWNzID0gYWxs
b2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOwotICAgICAgICBzaXplX3QgYnl0ZXNBbGxvY2F0
ZWQgPSBzdGF0aXN0aWNzLmJ5dGVzQWxsb2NhdGVkICsgc2l6ZUluQnl0ZXM7Ci0gICAgICAgIHNp
emVfdCBieXRlc0F2YWlsYWJsZSA9IHN0YXRpY19jYXN0PHNpemVfdD4oCi0gICAgICAgICAgICBz
dGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgKiAoMSAtIGV4ZWN1dGFibGVQb29sUmVzZXJ2YXRpb25G
cmFjdGlvbikpOwotICAgICAgICBpZiAoYnl0ZXNBbGxvY2F0ZWQgPiBieXRlc0F2YWlsYWJsZSkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICAKLSAgICBSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5C
eXRlcywgb3duZXJVSUQpOwotICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIGlmIChlZmZvcnQg
IT0gSklUQ29tcGlsYXRpb25DYW5GYWlsKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJSYW4gb3V0
IG9mIGV4ZWN1dGFibGUgbWVtb3J5IHdoaWxlIGFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIg
Ynl0ZXMuXG4iKTsKLSAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoY29uc3QgTG9ja0hvbGRlciYg
bG9ja2VyLCB2b2lkKiBhZGRyZXNzKQotewotICAgIHJldHVybiBhbGxvY2F0b3ItPmlzSW5BbGxv
Y2F0ZWRNZW1vcnkobG9ja2VyLCBhZGRyZXNzKTsKLX0KLQotTG9jayYgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6Z2V0TG9jaygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFsbG9jYXRvci0+Z2V0TG9jaygp
OwotfQotCi1zaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNvdW50KCkK
LXsKLSAgICByZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpOwotfQotCi0jaWYgRU5B
QkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCi12b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1
bXBQcm9maWxlKCkKLXsKLSAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7Ci19Ci0jZW5kaWYK
LQotfQotCi0KLSNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAppbmRleCBjNWU0YTE1OGI3MDU2YWVjYThiZjNhNmIyOTU5MDEwMzA4YzQwYzE2Li4y
NzY5MTAyMWZiYjRjZDk1NzEyNWQ3N2IzN2YyNDg5NmIxNWU2Y2E4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAg
LTg4MiwxNSArODgyLDcgQEAKICNkZWZpbmUgRU5BQkxFX01BU01fUFJPQkUgMAogI2VuZGlmCiAK
LS8qIFBpY2sgd2hpY2ggYWxsb2NhdG9yIHRvIHVzZTsgd2Ugb25seSBuZWVkIGFuIGV4ZWN1dGFi
bGUgYWxsb2NhdG9yIGlmIHRoZSBhc3NlbWJsZXIgaXMgY29tcGlsZWQgaW4uCi0gICBPbiBub24t
V2luZG93cyB4ODYtNjQsIGlPUywgYW5kIEFSTTY0IHdlIHVzZSBhIHNpbmdsZSBmaXhlZCBtbWFw
LCBvbiBvdGhlciBwbGF0Zm9ybXMgd2UgbW1hcCBvbiBkZW1hbmQuICovCi0jaWYgRU5BQkxFKEFT
U0VNQkxFUikKLSNpZiBDUFUoWDg2XzY0KSB8fCBQTEFURk9STShJT1MpIHx8IENQVShBUk02NCkK
ICNkZWZpbmUgRU5BQkxFX0VYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVEIDEKLSNlbHNlCi0jZGVm
aW5lIEVOQUJMRV9FWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQgMQotI2VuZGlmCi0jZW5kaWYK
IAogLyogQ1NTIFNlbGVjdG9yIEpJVCBDb21waWxlciAqLwogI2lmICFkZWZpbmVkKEVOQUJMRV9D
U1NfU0VMRUNUT1JfSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272380</attachid>
            <date>2016-02-26 16:20:16 -0800</date>
            <delta_ts>2016-02-26 18:10:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154749-20160226161959.patch</filename>
            <type>text/plain</type>
            <size>21960</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTJkZmE5ZTAwNTM0ODRkMDFiMjlmYTVlYjVjNWY3YTYzOTU0MWY2Li40MzhlZThlZDRlNzZkMzQ4
OWMwODJhODJmNDdiNjhhNjY5OGMzYTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NiBAQAorMjAxNi0wMi0yNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbW92ZSB0aGUgb24gZGVtYW5kIGV4ZWN1dGFibGUgYWxsb2NhdG9yCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ3NDkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgYWxsIHRo
ZSBEZW1hbmRFeGVjdXRhYmxlIGNvZGUgYW5kIGV4ZWN1dGFibGUgYWxsb2NhdG9yIGlmZGVmcy4K
KworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6On5EZW1hbmRFeGVjdXRhYmxlQWxsb2Nh
dG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6
Ynl0ZXNBbGxvY2F0ZWRCeUFsbEFsbG9jYXRvcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
ZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOjpieXRlc0NvbW1pdHRlZEJ5QWxsb2NhY3RvcnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJv
ZmlsZUZyb21BbGxBbGxvY2F0b3JzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RGVtYW5kRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGVOZXdTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6Om5vdGlmeU5lZWRQYWdlKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6bm90aWZ5UGFnZUlzRnJl
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFs
bG9jYXRvcnMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpEZW1hbmRFeGVjdXRhYmxlQWxsb2Nh
dG9yOjphbGxvY2F0b3JzTXV0ZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6On5FeGVjdXRhYmxlQWxsb2NhdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1
cmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQ
cmVzc3VyZU11bHRpcGxpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxs
b2NhdG9yOjphbGxvY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1
dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXhl
Y3V0YWJsZUFsbG9jYXRvcjo6Z2V0TG9jayk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkV4ZWN1
dGFibGVBbGxvY2F0b3I6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6cmVwcm90ZWN0UmVnaW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICAqIGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICAqIGppdC9KSVRTdHViUm91
dGluZS5oOgorICAgICAgICAoSlNDOjpKSVRTdHViUm91dGluZTo6Y2FuUGVyZm9ybVJhbmdlRmls
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUU3R1YlJvdXRpbmU6OmZpbHRlcmluZ1N0
YXJ0QWRkcmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVFN0dWJSb3V0aW5lOjpmaWx0
ZXJpbmdFeHRlbnRTaXplKTogRGVsZXRlZC4KKwogMjAxNi0wMi0yNiAgS2VpdGggTWlsbGVyICA8
a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xkaW5nIG9mIE92ZXJyaWRlc0hh
c0luc3RhbmNlIERGRyBub2RlcyBzaG91ZCBoYXBwZW4gaW4gY29uc3RhbnQgZm9sZGluZyBub3Qg
Zml4dXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKaW5kZXggNzhhYzRhZjRiZWM3Mjk1NTQ5MGMwNjE5ZjM4NWIwYmFhZjdhMDk2OC4uYmVk
OGI2MDVmODI1YWM0MjVkN2IzNjQ2YjM3OTI2NzFiYjNhNjgxMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAxNi0wMi0yNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSB0aGUgb24gZGVtYW5kIGV4ZWN1dGFibGUgYWxsb2NhdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ3NDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgdGhlIERlYW1uZEV4ZWN1
dGFibGVBbGxvY2F0b3IgY29tcGlsZSBmbGFncy4KKworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5o
OgorCiAyMDE2LTAyLTI2ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIFdURjo6T3B0aW9uU2V0IGFuZCB1c2UgaXQgZm9yIHRoZSB3ZWJzaXRlIGRh
dGEgdHlwZXMgZW51bQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDE1MDRl
NTNhOGQwOGIxOWE5NDFhNDg3ZWU4ODEwNTIwZDU0ZjhjM2UuLjNiZGY4MzQ5OWQ2N2M3OWI3Nzlk
YjY2MWMzZDk1NmVkYWM3MDBkNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
QEAgLTUxNSw3ICs1MTUsNiBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGppdC9D
YWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcAogICAgIGppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNw
cAogICAgIGppdC9FeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwCi0gICAgaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwCiAgICAgaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5j
cHAKICAgICBqaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcAogICAgIGppdC9HUFJJbmZvLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggNGUzZDI4M2E3M2I2
MjAxM2UxNjExOTg3NTQyYTIyZjE1YWFiYjQ2ZS4uMzIzZjdlMGQ1ZTU4MGU1MmUzODJiNjVjMzYw
N2E2MDNhZWM4ODgwMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBA
IC02MzUsNyArNjM1LDYgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDYWxsRnJh
bWVTaHVmZmxlcjMyXzY0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxD
YWxsRnJhbWVTaHVmZmxlcjY0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxIb3N0Q2FsbFJldHVyblZhbHVlLmNwcCIg
Lz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpp
bmRleCBjNjM4YzRhNDQxYzViMWNmOWY1OTY5MzdjYzBmZjMyZmE4ZjA0NTYxLi4xY2Y2ODFmZTcw
MzllOWE1YmUyOTE0MTEzNTE3Zjk4ZWQ3NmZkNjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0zOTAsOSArMzkwLDYgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrVmlzaXRvci5jcHAiPgogICAg
ICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxqaXRcR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCI+CiAgICAgICA8RmlsdGVy
PmppdDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBiZmUxZGZlMjFkZTQwMmU3YTU3ZjA4MTY5ZGY2NDcwNGZhZTkyYmJhLi5lMWY0NDNl
ZTNiNDMwNDczZTdkZWZjMGI1ZDc5ZTc2ZjQ1MmUxNzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMTc1Nyw3ICsxNzU3LDYgQEAKIAkJQTdBOEFGNDAxN0FEQjVGMzAwNUFCMTc0
IC8qIFVpbnQ4Q2xhbXBlZEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0E4QUYzMTE3QURCNUYzMDA1QUIxNzQgLyogVWludDhDbGFtcGVkQXJy
YXkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlB
N0E4QUY0MTE3QURCNUYzMDA1QUIxNzQgLyogVWludDE2QXJyYXkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAv
KiBVaW50MTZBcnJheS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE3QThBRjQyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdBOEFGMzMxN0FEQjVG
MzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTdCNDhGNDkwRUU4OTM2RjAwRENCREI2IC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
ICovOyB9OwogCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QjRBQ0FFMTQ4
NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QjYwMTgyMTYzOUZEMkEwMDM3MkJBMyAvKiBV
bmxpbmtlZENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTc5RTc4MUYxNUVFQ0JBODAwNDdDODU1IC8qIFVubGlua2VkQ29kZUJsb2NrLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdCREFF
QzgxN0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdCREFFQzIxN0Y0RUExNDAw
RjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwICovOyB9OwpAQCAtMzk0Nyw3ICsz
OTQ2LDYgQEAKIAkJQTdBOEFGMzMxN0FEQjVGMzAwNUFCMTc0IC8qIFVpbnQzMkFycmF5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVpbnQzMkFycmF5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3QTk3OUM0MThCRThEOUUwMDJDMzczMyAvKiBGdW5jdGlvblBy
b3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEZ1bmN0
aW9uUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0OERCNTBF
RTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFeGVjdXRhYmxlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVB
bGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0I0QUNBRTE0ODRD
OUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNFeHBvcnRNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdCREFFQzIxN0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IEFycmF5
SXRlcmF0b3JQcm90b3R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdl
U3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKIAkJQTdCREFFQzMx
N0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNDk0Miw3ICs0OTQwLDYgQEAKIAkJCQkwRkQ4MkUzNzE0MUFC
MTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQkwRkYwNTRGNzFBQzM1
QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLywKIAkJCQkwRkYw
NTRGODFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggKi8sCi0J
CQkJQTdCNDhEQjYwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwICov
LAogCQkJCUE3QjQ4REI1MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmgg
Ki8sCiAJCQkJODZEQjY0NjMwRjk1QzZGQzAwRDdEOTIxIC8qIEV4ZWN1dGFibGVBbGxvY2F0b3JG
aXhlZFZNUG9vbC5jcHAgKi8sCiAJCQkJMEYyNEU1M0UxN0VBOUY1OTAwQUJCMjE3IC8qIEZQUklu
Zm8uaCAqLywKQEAgLTg4NDksNyArODg0Niw2IEBACiAJCQkJMTQyOUQ4NzgwRUQyMUFDRDAwQjg5
NjE5IC8qIEV4Y2VwdGlvbkhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZDQTAzMkUx
MDM4RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
MDU0RjkxQUMzNUI0NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQlBN0I0OEY0OTBFRTg5MzZGMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkRCNjQ2NDBGOTVDNkZDMDBEN0Q5MjEg
LyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNTZBMUQ1MTUwMDFDRjQwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWRlMjM1
MzFjZTYwMDc3OGZkMjg3YjM5MTJiZDA3YmY4OTE5YjdlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgotCi0jaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgotCi0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKLSNpbmNs
dWRlICJDb2RlUHJvZmlsaW5nLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRl
IDx3dGYvTG9jay5oPgotI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+Ci0jaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgot
I2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KLSNlbmRpZgotCi0vLyBVbmNvbW1lbnQgdG8gY3JlYXRl
IGFuIGFydGlmaWNpYWwgZXhlY3V0YWJsZSBtZW1vcnkgdXNhZ2UgbGltaXQuIFRoaXMgbGltaXQK
LS8vIGlzIGltcGVyZmVjdCBhbmQgaXMgcHJpbWFyaWx5IHVzZWZ1bCBmb3IgdGVzdGluZyB0aGUg
Vk0ncyBhYmlsaXR5IHRvIGhhbmRsZQotLy8gb3V0LW9mLWV4ZWN1dGFibGUtbWVtb3J5IHNpdHVh
dGlvbnMuCi0vLyAjZGVmaW5lIEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUIDEwMDAwMDAKLQotI2lm
IEVOQUJMRShBU1NFTUJMRVIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBK
U0MgewotCi0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKLQotY2xhc3Mg
RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvciA6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKLXB1Ymxp
YzoKLSAgICBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCkKLSAgICAgICAgOiBNZXRhQWxsb2Nh
dG9yKGppdEFsbG9jYXRpb25HcmFudWxlKQotICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY0xvY2s+IGxvY2soYWxsb2NhdG9yc011dGV4KCkpOwotICAgICAgICBhbGxvY2F0b3Jz
KCkuYWRkKHRoaXMpOwotICAgICAgICAvLyBEb24ndCBwcmVhbGxvY2F0ZSBhbnkgbWVtb3J5IGhl
cmUuCi0gICAgfQotICAgIAotICAgIHZpcnR1YWwgfkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQotICAgIHsKLSAgICAgICAgewotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY0xv
Y2s+IGxvY2soYWxsb2NhdG9yc011dGV4KCkpOwotICAgICAgICAgICAgYWxsb2NhdG9ycygpLnJl
bW92ZSh0aGlzKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVzZXJ2YXRpb25zLnNpemUoKTsgKytpKQotICAgICAgICAgICAgcmVzZXJ2YXRpb25zLmF0KGkp
LmRlYWxsb2NhdGUoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzQWxsb2NhdGVk
QnlBbGxBbGxvY2F0b3JzKCkKLSAgICB7Ci0gICAgICAgIHNpemVfdCB0b3RhbCA9IDA7Ci0gICAg
ICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2NrKGFsbG9jYXRvcnNNdXRleCgpKTsK
LSAgICAgICAgZm9yIChIYXNoU2V0PERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IqPjo6Y29uc3Rf
aXRlcmF0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9ycygpLmJlZ2luKCk7IGFsbG9jYXRvciAhPSBh
bGxvY2F0b3JzKCkuZW5kKCk7ICsrYWxsb2NhdG9yKQotICAgICAgICAgICAgdG90YWwgKz0gKCph
bGxvY2F0b3IpLT5ieXRlc0FsbG9jYXRlZCgpOwotICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAg
fQotCi0gICAgc3RhdGljIHNpemVfdCBieXRlc0NvbW1pdHRlZEJ5QWxsb2NhY3RvcnMoKQotICAg
IHsKLSAgICAgICAgc2l6ZV90IHRvdGFsID0gMDsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY0xvY2s+IGxvY2soYWxsb2NhdG9yc011dGV4KCkpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8
RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcio+Ojpjb25zdF9pdGVyYXRvciBhbGxvY2F0b3IgPSBh
bGxvY2F0b3JzKCkuYmVnaW4oKTsgYWxsb2NhdG9yICE9IGFsbG9jYXRvcnMoKS5lbmQoKTsgKyth
bGxvY2F0b3IpCi0gICAgICAgICAgICB0b3RhbCArPSAoKmFsbG9jYXRvciktPmJ5dGVzQ29tbWl0
dGVkKCk7Ci0gICAgICAgIHJldHVybiB0b3RhbDsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTUVUQV9B
TExPQ0FUT1JfUFJPRklMRSkKLSAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZUZyb21BbGxBbGxv
Y2F0b3JzKCkKLSAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNMb2NrPiBsb2Nr
KGFsbG9jYXRvcnNNdXRleCgpKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PERlbWFuZEV4ZWN1dGFi
bGVBbGxvY2F0b3IqPjo6Y29uc3RfaXRlcmF0b3IgYWxsb2NhdG9yID0gYWxsb2NhdG9ycygpLmJl
Z2luKCk7IGFsbG9jYXRvciAhPSBhbGxvY2F0b3JzKCkuZW5kKCk7ICsrYWxsb2NhdG9yKQotICAg
ICAgICAgICAgKCphbGxvY2F0b3IpLT5kdW1wUHJvZmlsZSgpOwotICAgIH0KLSNlbmRpZgotCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVt
UGFnZXMpCi0gICAgewotICAgICAgICBzaXplX3QgbmV3TnVtUGFnZXMgPSAoKChudW1QYWdlcyAq
IHBhZ2VTaXplKCkgKyBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgLSAxKSAvIEpJVF9B
TExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSAqIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0la
RSkgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpOwotICAgICAgICAKLSAgICAgICAgQVNT
RVJUKG5ld051bVBhZ2VzID49IG51bVBhZ2VzKTsKLSAgICAgICAgCi0gICAgICAgIG51bVBhZ2Vz
ID0gbmV3TnVtUGFnZXM7Ci0gICAgICAgIAotI2lmZGVmIEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlU
Ci0gICAgICAgIGlmIChieXRlc0FsbG9jYXRlZEJ5QWxsQWxsb2NhdG9ycygpID49IEVYRUNVVEFC
TEVfTUVNT1JZX0xJTUlUKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0jZW5kaWYKLSAgICAgICAg
Ci0gICAgICAgIFBhZ2VSZXNlcnZhdGlvbiByZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6
cmVzZXJ2ZShudW1QYWdlcyAqIHBhZ2VTaXplKCksIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdl
cywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVzZXJ2YXRpb24pOwotICAgICAgICAKLSAgICAgICAgcmVzZXJ2YXRpb25zLmFwcGVuZChy
ZXNlcnZhdGlvbik7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb24uYmFzZSgp
OwotICAgIH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFn
ZSkKLSAgICB7Ci0gICAgICAgIE9TQWxsb2NhdG9yOjpjb21taXQocGFnZSwgcGFnZVNpemUoKSwg
RVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKLSAgICB9Ci0gICAgCi0gICAgdmlydHVh
bCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKLSAgICB7Ci0gICAgICAgIE9TQWxs
b2NhdG9yOjpkZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgVmVjdG9yPFBhZ2VSZXNlcnZhdGlvbiwgMTY+IHJlc2VydmF0aW9uczsKLSAgICBzdGF0aWMg
SGFzaFNldDxEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKj4mIGFsbG9jYXRvcnMoKQotICAgIHsK
LSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8RGVtYW5kRXhlY3V0YWJsZUFs
bG9jYXRvcio+PiBzZXQ7Ci0gICAgICAgIHJldHVybiBzZXQ7Ci0gICAgfQotCi0gICAgc3RhdGlj
IFN0YXRpY0xvY2smIGFsbG9jYXRvcnNNdXRleCgpCi0gICAgewotICAgICAgICBzdGF0aWMgU3Rh
dGljTG9jayBtdXRleDsKLQotICAgICAgICByZXR1cm4gbXV0ZXg7Ci0gICAgfQotfTsKLQotI2lm
IEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQotdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9y
Ojppbml0aWFsaXplQWxsb2NhdG9yKCkKLXsKLX0KLSNlbHNlCi1zdGF0aWMgRGVtYW5kRXhlY3V0
YWJsZUFsbG9jYXRvciogZ0FsbG9jYXRvcjsKLQotbmFtZXNwYWNlIHsKLXN0YXRpYyBpbmxpbmUg
RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yKCkKLXsKLSAgICByZXR1cm4gZ0Fs
bG9jYXRvcjsKLX0KLX0KLQotdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKCkKLXsKLSAgICBBU1NFUlQoIWdBbGxvY2F0b3IpOwotICAgIGdBbGxvY2F0b3IgPSBu
ZXcgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigpOwotICAgIENvZGVQcm9maWxpbmc6Om5vdGlm
eUFsbG9jYXRvcihnQWxsb2NhdG9yKTsKLX0KLSNlbmRpZgotCi1FeGVjdXRhYmxlQWxsb2NhdG9y
OjpFeGVjdXRhYmxlQWxsb2NhdG9yKFZNJikKLSNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xV
U0lWRSkKLSAgICA6IG1fYWxsb2NhdG9yKHN0ZDo6bWFrZV91bmlxdWU8RGVtYW5kRXhlY3V0YWJs
ZUFsbG9jYXRvcj4oKSkKLSNlbmRpZgotewotICAgIEFTU0VSVChhbGxvY2F0b3IoKSk7Ci19Ci0K
LUV4ZWN1dGFibGVBbGxvY2F0b3I6On5FeGVjdXRhYmxlQWxsb2NhdG9yKCkKLXsKLX0KLQotYm9v
bCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkK
LXsKLSNpZmRlZiBFWEVDVVRBQkxFX01FTU9SWV9MSU1JVAotICAgIHJldHVybiBEZW1hbmRFeGVj
dXRhYmxlQWxsb2NhdG9yOjpieXRlc0FsbG9jYXRlZEJ5QWxsQWxsb2NhdG9ycygpID4gRVhFQ1VU
QUJMRV9NRU1PUllfTElNSVQgLyAyOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotZG91YmxlIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1lbW9yeVByZXNzdXJlTXVsdGlwbGll
cihzaXplX3QgYWRkZWRNZW1vcnlVc2FnZSkKLXsKLSAgICBkb3VibGUgcmVzdWx0OwotI2lmZGVm
IEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUCi0gICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkID0gRGVt
YW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6Ynl0ZXNBbGxvY2F0ZWRCeUFsbEFsbG9jYXRvcnMoKSAr
IGFkZGVkTWVtb3J5VXNhZ2U7Ci0gICAgaWYgKGJ5dGVzQWxsb2NhdGVkID49IEVYRUNVVEFCTEVf
TUVNT1JZX0xJTUlUKQotICAgICAgICBieXRlc0FsbG9jYXRlZCA9IEVYRUNVVEFCTEVfTUVNT1JZ
X0xJTUlUOwotICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oRVhFQ1VUQUJMRV9NRU1P
UllfTElNSVQpIC8KLSAgICAgICAgKEVYRUNVVEFCTEVfTUVNT1JZX0xJTUlUIC0gYnl0ZXNBbGxv
Y2F0ZWQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oYWRkZWRNZW1vcnlVc2FnZSk7Ci0gICAg
cmVzdWx0ID0gMS4wOwotI2VuZGlmCi0gICAgaWYgKHJlc3VsdCA8IDEuMCkKLSAgICAgICAgcmVz
dWx0ID0gMS4wOwotICAgIHJldHVybiByZXN1bHQ7Ci0KLX0KLQotUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiwgc2l6ZV90IHNp
emVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQot
ewotICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3Io
KS0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMsIG93bmVyVUlEKTsKLSAgICBSRUxFQVNFX0FTU0VSVChy
ZXN1bHQgfHwgZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXNpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRl
Q291bnQoKQotewotICAgIHJldHVybiBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOjpieXRlc0Nv
bW1pdHRlZEJ5QWxsb2NhY3RvcnMoKTsKLX0KLQotI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9Q
Uk9GSUxFKQotdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCi17Ci0gICAg
RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGVGcm9tQWxsQWxsb2NhdG9ycygp
OwotfQotI2VuZGlmCi0KLUxvY2smIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmdldExvY2soKSBjb25z
dAotewotICAgIHJldHVybiBnQWxsb2NhdG9yLT5nZXRMb2NrKCk7Ci19Ci0KLWJvb2wgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoY29uc3QgTG9ja0hvbGRlciYg
bG9ja2VyLCB2b2lkKiBhZGRyZXNzKQotewotICAgIHJldHVybiBnQWxsb2NhdG9yLT5pc0luQWxs
b2NhdGVkTWVtb3J5KGxvY2tlciwgYWRkcmVzcyk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoRVhF
Q1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQotCi0jaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENM
VVNJVkUpCi0KLSNpZiBPUyhXSU5ET1dTKQotI2Vycm9yICJBU1NFTUJMRVJfV1hfRVhDTFVTSVZF
IG5vdCB5ZXQgc3Vwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCi0jZW5kaWYKLQotdm9pZCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjpyZXByb3RlY3RSZWdpb24odm9pZCogc3RhcnQsIHNpemVfdCBzaXpl
LCBQcm90ZWN0aW9uU2V0dGluZyBzZXR0aW5nKQotewotICAgIHNpemVfdCBwYWdlU2l6ZSA9IFdU
Rjo6cGFnZVNpemUoKTsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIHBhZ2Ug
Y29udGFpbmluZyB0aGlzIHJlZ2lvbiwKLSAgICAvLyBhbmQgYWNjb3VudCBmb3IgdGhpcyBleHRy
YSBtZW1vcnkgd2l0aGluIHNpemUuCi0gICAgaW50cHRyX3Qgc3RhcnRQdHIgPSByZWludGVycHJl
dF9jYXN0PGludHB0cl90PihzdGFydCk7Ci0gICAgaW50cHRyX3QgcGFnZVN0YXJ0UHRyID0gc3Rh
cnRQdHIgJiB+KHBhZ2VTaXplIC0gMSk7Ci0gICAgdm9pZCogcGFnZVN0YXJ0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocGFnZVN0YXJ0UHRyKTsKLSAgICBzaXplICs9IChzdGFydFB0ciAtIHBh
Z2VTdGFydFB0cik7Ci0KLSAgICAvLyBSb3VuZCBzaXplIHVwCi0gICAgc2l6ZSArPSAocGFnZVNp
emUgLSAxKTsKLSAgICBzaXplICY9IH4ocGFnZVNpemUgLSAxKTsKLQotICAgIG1wcm90ZWN0KHBh
Z2VTdGFydCwgc2l6ZSwgKHNldHRpbmcgPT0gV3JpdGFibGUpID8gUFJPVEVDVElPTl9GTEFHU19S
VyA6IFBST1RFQ1RJT05fRkxBR1NfUlgpOwotfQotCi0jZW5kaWYKLQotfQotCi0jZW5kaWYgLy8g
SEFWRShBU1NFTUJMRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oCmluZGV4IDA5Yjc2OGJlZGE5Mjk3MGUzMmIyODJkYjlmYjU2ZDc1ZDBmYmU0
NWMuLjE0YmU0MTI4ZDc0N2E5NzQ5MTI3OWRkM2Q0ZGI3YTYwYTNhZDUwNmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCkBAIC02OSwxMSAr
NjksNiBAQCB0eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlOwogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAotI2lmIEVOQUJMRShFWEVDVVRBQkxF
X0FMTE9DQVRPUl9ERU1BTkQpCi1jbGFzcyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOwotI2Vu
ZGlmCi0KLSNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCiAjaWYgQ1BVKEFS
TSkKIHN0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbFNpemUgPSAx
NiAqIDEwMjQgKiAxMDI0OwogI2VsaWYgQ1BVKEFSTTY0KQpAQCAtOTAsNyArODUsNiBAQCBzdGF0
aWMgY29uc3QgZG91YmxlIGV4ZWN1dGFibGVQb29sUmVzZXJ2YXRpb25GcmFjdGlvbiA9IDAuMjU7
CiAjZW5kaWYKIAogZXh0ZXJuIHVpbnRwdHJfdCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5
UG9vbDsKLSNlbmRpZgogCiBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAgICBlbnVtIFBy
b3RlY3Rpb25TZXR0aW5nIHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Q
b29sLmNwcAppbmRleCA4ZDUwMThiNmMzM2MzM2ExMWE1ODM0MjU1ZjYwYjQxNTUyMGEwYTM3Li5k
ZjAyZGFiOGQyZmJjMDc1YWI4ZmRmYmM0MDA0MTAyZjgwMjVlNTMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwCkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
LSNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCi0KICNpbmNsdWRlICJDb2Rl
UHJvZmlsaW5nLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmgiCiAjaW5j
bHVkZSA8ZXJybm8uaD4KQEAgLTIyMiw2ICsyMjAsMyBAQCB2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmR1bXBQcm9maWxlKCkKICNlbmRpZgogCiB9Ci0KLQotI2VuZGlmIC8vIEVOQUJMRShFWEVD
VVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YlJvdXRpbmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YlJvdXRpbmUuaAppbmRleCBkYjlhYWE3NzBiZjc2MGIyNGY2MDE4YTJmZDFhODU3M2ExNmE3MTA0
Li5hZDE1ZGE4ZGQ5ZDQ2YWEwMjNkYjM0MTJiYzM3M2FmZGY4YmYwNzM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJSb3V0aW5lLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViUm91dGluZS5oCkBAIC0xMDMsMjkgKzEwMywxNSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgY2FuUGVyZm9ybVJhbmdlRmlsdGVyKCkKICAg
ICB7Ci0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVEKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgogICAgIH0KICAg
ICBzdGF0aWMgdWludHB0cl90IGZpbHRlcmluZ1N0YXJ0QWRkcmVzcygpCiAgICAgewotI2lmIEVO
QUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKICAgICAgICAgcmV0dXJuIHN0YXJ0T2ZG
aXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sOwotI2Vsc2UKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9S
X1BMQVRGT1JNKCk7Ci0gICAgICAgIHJldHVybiAwOwotI2VuZGlmCiAgICAgfQogICAgIHN0YXRp
YyBzaXplX3QgZmlsdGVyaW5nRXh0ZW50U2l6ZSgpCiAgICAgewotI2lmIEVOQUJMRShFWEVDVVRB
QkxFX0FMTE9DQVRPUl9GSVhFRCkKICAgICAgICAgcmV0dXJuIGZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2xTaXplOwotI2Vsc2UKLSAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotI2VuZGlmCiAgICAgfQogICAgIHN0YXRpYyBib29sIHBhc3Nlc0Zp
bHRlcih1aW50cHRyX3QgYWRkcmVzcykKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCBjNWU0YTE1OGI3
MDU2YWVjYThiZjNhNmIyOTU5MDEwMzA4YzQwYzE2Li4wODI3M2E4OTUwOTM0NWQ5MWM1YTg1Mjdh
ZjNlMmMxNmNmZDQyZjlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTg4MiwxNiArODgyLDYgQEAKICNkZWZp
bmUgRU5BQkxFX01BU01fUFJPQkUgMAogI2VuZGlmCiAKLS8qIFBpY2sgd2hpY2ggYWxsb2NhdG9y
IHRvIHVzZTsgd2Ugb25seSBuZWVkIGFuIGV4ZWN1dGFibGUgYWxsb2NhdG9yIGlmIHRoZSBhc3Nl
bWJsZXIgaXMgY29tcGlsZWQgaW4uCi0gICBPbiBub24tV2luZG93cyB4ODYtNjQsIGlPUywgYW5k
IEFSTTY0IHdlIHVzZSBhIHNpbmdsZSBmaXhlZCBtbWFwLCBvbiBvdGhlciBwbGF0Zm9ybXMgd2Ug
bW1hcCBvbiBkZW1hbmQuICovCi0jaWYgRU5BQkxFKEFTU0VNQkxFUikKLSNpZiBDUFUoWDg2XzY0
KSB8fCBQTEFURk9STShJT1MpIHx8IENQVShBUk02NCkKLSNkZWZpbmUgRU5BQkxFX0VYRUNVVEFC
TEVfQUxMT0NBVE9SX0ZJWEVEIDEKLSNlbHNlCi0jZGVmaW5lIEVOQUJMRV9FWEVDVVRBQkxFX0FM
TE9DQVRPUl9ERU1BTkQgMQotI2VuZGlmCi0jZW5kaWYKLQogLyogQ1NTIFNlbGVjdG9yIEpJVCBD
b21waWxlciAqLwogI2lmICFkZWZpbmVkKEVOQUJMRV9DU1NfU0VMRUNUT1JfSklUKQogI2lmIChD
UFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpIHx8IChDUFUoQVJNX1RIVU1CMikgJiYgUExBVEZPUk0o
SU9TKSkpICYmIEVOQUJMRShKSVQpICYmIChPUyhEQVJXSU4pIHx8IFBMQVRGT1JNKEdUSykgfHwg
UExBVEZPUk0oRUZMKSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>