<?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>164309</bug_id>
          
          <creation_ts>2016-11-01 18:28:26 -0700</creation_ts>
          <short_desc>DFG plays fast and loose with the shadow values of a Phi</short_desc>
          <delta_ts>2016-11-03 22:32:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>164402</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="David I. Lehn">dil</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1247187</commentid>
    <comment_count>0</comment_count>
    <who name="David I. Lehn">dil</who>
    <bug_when>2016-11-01 18:28:26 -0700</bug_when>
    <thetext>Summary: JavaScriptCore appears to incorrectly optimize variable assignment in hot loops on x86-64 builds resulting in eventual incorrect behavior.

I work on a JS library called forge that has many hashing and crypto functions.  Recent Safari 10.0.1 and iOS have had problems with the SHA-1 and SHA-256 implementations.  They could sometimes produce incorrect results for deterministic inputs.  We found a workaround for a company that needed these to work specifically on Safari 10.0.1 and iOS.  It involved adding some &quot;&gt;&gt;&gt; 0&quot; in the middle of short shuffling loops (see patch links in the github issue).

After further exploration, this has been narrowed down to likely be in JavaScriptCore x86-64 builds on mac or linux.  i386 works fine.  It appears hot loops doing shuffling of variables can result in errors.  It was reduced down to a test case that just swaps two variables in a loop.  Sometimes they do not get swapped and one value is overwritten.  Adding a &quot;&gt;&gt;&gt; 0&quot; or similar can fix this possibly due to changing how the optimizer works.

https://github.com/digitalbazaar/forge/issues/428

In particular, short web page and jsc tests cases are here:
https://github.com/digitalbazaar/forge/issues/428#issuecomment-257652657

For fun I reduced the test case to ES2015 code that could fit in a tweet:
var i;for(;;)(()=&gt;{var a=1,b;for(i=0;i&lt;2;++i){[a,b]=[b,a]}if(!a^b))throw 0})()

If you want some debugging to know how many swaps it takes, here&apos;s the &quot;long&quot; version:
var i,c=0;for(;;)(()=&gt;{var a=1,b;for(i=0;i&lt;2;++i){[a,b]=[b,a];c++}if(!a^b)throw c})()

Run the above in jsc and it will throw 0.  Which means it failed to swap a and b properly.  In i386 builds or node it will run forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247188</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-11-01 18:28:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/29057323&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247206</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-01 19:52:29 -0700</bug_when>
    <thetext>I&apos;m investigating the issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247449</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 13:40:31 -0700</bug_when>
    <thetext>Looks fun, I&apos;ll take this.  Here&apos;s the reduced test case that would work as a JSC stress test:

var i,c=0;
function foo()
{
    var a=1,b;for(i=0;i&lt;2;++i){[a,b]=[b,a];c++}if(!a^b)throw c
}
noInline(foo);
for(var k = 0; k &lt; 10000; ++k)
    foo()

This fails when running with --useConcurrentJIT=false --useFTLJIT=true.  It passes with --useConcurrentJIT=false --useFTLJIT=false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247458</commentid>
    <comment_count>4</comment_count>
    <who name="David I. Lehn">dil</who>
    <bug_when>2016-11-02 13:54:56 -0700</bug_when>
    <thetext>There are clearer ways to write that test than the silly minimal version I did for fun. Like format it, and set b to 0 vs undefined. :-)  Can also do &quot;var t=b;b=a;a=t;&quot; vs the destructuring style in case this was a problem before ES2015 features were added to the code.

I also realized saying this was only on x86-64 may not be true.  In this particular case it worked but without knowing the cause of the issue, it could be a problem on other platforms.

Since there&apos;s a easy to run test case, it may be possible to narrow it down using &apos;git bisect&apos; or similar.  I started to do so with a partial git checkout (the history is huge!).  Fails at least back on 2016-03-13 (when the build-jsc --jsc-only flag was added).  So need to check earlier than that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247466</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 14:03:37 -0700</bug_when>
    <thetext>This is a liveness analysis bug.  There&apos;s a basic block like this:

Block #2 (bc#42):
 124:&lt;!0:-&gt;	ExitOK(MustGen, W:SideState, bc#42)
 113:&lt; 1:-&gt;	Upsilon(Check:Untyped:@40, ^65, W:SideState, bc#42)
 111:&lt; 1:-&gt;	Upsilon(Check:Untyped:@65, ^40, W:SideState, bc#42)
  96:&lt;!0:-&gt;	Jump(MustGen, T:#3, W:SideState, bc#42)

Clearly, @65 is live at the head of the block.  But liveness analysis reports this as live at the head: @1, @24, @27, @40, @43

Note that @65 is omitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247467</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 14:04:05 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; There are clearer ways to write that test than the silly minimal version I
&gt; did for fun. Like format it, and set b to 0 vs undefined. :-)  Can also do
&gt; &quot;var t=b;b=a;a=t;&quot; vs the destructuring style in case this was a problem
&gt; before ES2015 features were added to the code.
&gt; 
&gt; I also realized saying this was only on x86-64 may not be true.  In this
&gt; particular case it worked but without knowing the cause of the issue, it
&gt; could be a problem on other platforms.
&gt; 
&gt; Since there&apos;s a easy to run test case, it may be possible to narrow it down
&gt; using &apos;git bisect&apos; or similar.  I started to do so with a partial git
&gt; checkout (the history is huge!).  Fails at least back on 2016-03-13 (when
&gt; the build-jsc --jsc-only flag was added).  So need to check earlier than
&gt; that.

It&apos;s OK, I got this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247479</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 14:23:23 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This is a liveness analysis bug.  There&apos;s a basic block like this:
&gt; 
&gt; Block #2 (bc#42):
&gt;  124:&lt;!0:-&gt;	ExitOK(MustGen, W:SideState, bc#42)
&gt;  113:&lt; 1:-&gt;	Upsilon(Check:Untyped:@40, ^65, W:SideState, bc#42)
&gt;  111:&lt; 1:-&gt;	Upsilon(Check:Untyped:@65, ^40, W:SideState, bc#42)
&gt;   96:&lt;!0:-&gt;	Jump(MustGen, T:#3, W:SideState, bc#42)
&gt; 
&gt; Clearly, @65 is live at the head of the block.  But liveness analysis
&gt; reports this as live at the head: @1, @24, @27, @40, @43
&gt; 
&gt; Note that @65 is omitted.

Oh wait, no.  It&apos;s not live.  It&apos;s killed by the other Upsilon.  Huh.

This looks like a classic swap bug.  Our SSA conversion strategy nominally works in the face of swaps.  I&apos;ll have to think about this a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247480</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 14:26:41 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; This is a liveness analysis bug.  There&apos;s a basic block like this:
&gt; &gt; 
&gt; &gt; Block #2 (bc#42):
&gt; &gt;  124:&lt;!0:-&gt;	ExitOK(MustGen, W:SideState, bc#42)
&gt; &gt;  113:&lt; 1:-&gt;	Upsilon(Check:Untyped:@40, ^65, W:SideState, bc#42)
&gt; &gt;  111:&lt; 1:-&gt;	Upsilon(Check:Untyped:@65, ^40, W:SideState, bc#42)
&gt; &gt;   96:&lt;!0:-&gt;	Jump(MustGen, T:#3, W:SideState, bc#42)
&gt; &gt; 
&gt; &gt; Clearly, @65 is live at the head of the block.  But liveness analysis
&gt; &gt; reports this as live at the head: @1, @24, @27, @40, @43
&gt; &gt; 
&gt; &gt; Note that @65 is omitted.
&gt; 
&gt; Oh wait, no.  It&apos;s not live.  It&apos;s killed by the other Upsilon.  Huh.
&gt; 
&gt; This looks like a classic swap bug.  Our SSA conversion strategy nominally
&gt; works in the face of swaps.  I&apos;ll have to think about this a bit more.

Ah!

The problem is that we&apos;re playing fast and loose with Upsilon/Phi semantics.  What we should be doing is saying that the Phi node is Upsilon-live between the point when the Upsilon assigns to it and the point where the Phi lives.  Separately, the Phi itself is live like any other node would be.

Just as we do this for liveness, we need to do this for forward flow.  Phis have a separate shadow variable that represents what the Upsilon stored, and we load from that shadow variable once we define the Phi.

Interestingly, B3 gets this completely right, but we forgot to port that intelligence to DFG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247495</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 14:50:35 -0700</bug_when>
    <thetext>Obviously, this quirk of Phi is not relevant to flow-insensitive analyses.

It&apos;s interesting to wonder if it&apos;s relevant to flow-sensitive analyses.  I think that it is, but as a hack, we could make flow-sensitive analysis behave conservatively right by having Phi itself not be flow-sensitive: i.e. have Upsilon merge rather than setting.  I think you could do like a pseudo-flow-sensitivity.

Seems like while that&apos;s intellectually interesting, we probably just want to have AI do the more precise thing.

I think that we want to use the following strategy:

1) Phis have a secondary index in liveness analysis for their shadow value.
2) InPlaceAbstractState can have a second vector for shadow values.
3) BasicBlock can have a NodeProjection that wraps a Node* and adds a bit to say if this is the primary value or the shadow value.  Then, liveAtHead, valuesAtHead, and all of their friends don&apos;t have to change significantly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247639</commentid>
    <comment_count>10</comment_count>
      <attachid>293741</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-02 20:28:54 -0700</bug_when>
    <thetext>Created attachment 293741
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247662</commentid>
    <comment_count>11</comment_count>
      <attachid>293741</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-02 23:26:36 -0700</bug_when>
    <thetext>Comment on attachment 293741
it&apos;s a start

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

&gt; Source/JavaScriptCore/dfg/DFGLivenessAnalysisPhase.cpp:-124
&gt; -            //    p: Phi()

Maybe this is too simplistic, but why can&apos;t we just solve the liveness bug by saying:

p: Phi() =&gt; defs p

n: Upsilon(@x, ^p) =&gt; defs n, uses x

Maybe I&apos;m not completely understanding the implications of such a rule?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247696</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 07:02:22 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 293741 [details]
&gt; it&apos;s a start
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293741&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGLivenessAnalysisPhase.cpp:-124
&gt; &gt; -            //    p: Phi()
&gt; 
&gt; Maybe this is too simplistic, but why can&apos;t we just solve the liveness bug
&gt; by saying:
&gt; 
&gt; p: Phi() =&gt; defs p
&gt; 
&gt; n: Upsilon(@x, ^p) =&gt; defs n, uses x
&gt; 
&gt; Maybe I&apos;m not completely understanding the implications of such a rule?

I don&apos;t see how your rule works. Upsilon is void so I don&apos;t know what it means to def it. Also in your rule nobody uses the upsilon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247719</commentid>
    <comment_count>13</comment_count>
      <attachid>293766</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 09:13:08 -0700</bug_when>
    <thetext>Created attachment 293766
this might even work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247727</commentid>
    <comment_count>14</comment_count>
      <attachid>293769</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 09:42:26 -0700</bug_when>
    <thetext>Created attachment 293769
even more things compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247733</commentid>
    <comment_count>15</comment_count>
      <attachid>293770</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 10:06:20 -0700</bug_when>
    <thetext>Created attachment 293770
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247742</commentid>
    <comment_count>16</comment_count>
      <attachid>293773</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 10:25:25 -0700</bug_when>
    <thetext>Created attachment 293773
it passes the test

It passes the test, but I don&apos;t know if it passes any other tests.  I&apos;ll find out soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247786</commentid>
    <comment_count>17</comment_count>
      <attachid>293783</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 12:02:40 -0700</bug_when>
    <thetext>Created attachment 293783
the patch

I&apos;m hoping that this is the one!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247787</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 12:04:11 -0700</bug_when>
    <thetext>Attachment 293783 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 29 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>1247846</commentid>
    <comment_count>19</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 14:08:22 -0700</bug_when>
    <thetext>&gt; ERROR: Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.h:33:  Alphabetical
&gt; sorting problem.  [build/include_order] [4]
&gt; Total errors found: 1 in 29 files
&gt; 

You should probably fix this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247847</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 14:09:14 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; ERROR: Source/JavaScriptCore/dfg/DFGInPlaceAbstractState.h:33:  Alphabetical
&gt; &gt; sorting problem.  [build/include_order] [4]
&gt; &gt; Total errors found: 1 in 29 files
&gt; &gt; 
&gt; 
&gt; You should probably fix this

Ooops.  Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247848</commentid>
    <comment_count>21</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 14:09:55 -0700</bug_when>
    <thetext>Looks like your patch might also be making EWS a little flakey... hard to tell though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247850</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 14:10:52 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Looks like your patch might also be making EWS a little flakey... hard to
&gt; tell though.

EWS has been flakey for my last ~5 patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247879</commentid>
    <comment_count>23</comment_count>
      <attachid>293783</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 15:11:22 -0700</bug_when>
    <thetext>Comment on attachment 293783
the patch

I&apos;m seeing perf regressions.  Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247890</commentid>
    <comment_count>24</comment_count>
    <who name="David I. Lehn">dil</who>
    <bug_when>2016-11-03 15:36:00 -0700</bug_when>
    <thetext>How about updating the stress test code style and readability?  May also need a comment to note you need the --useConcurrentJIT=false --useFTLJIT=true flags for it to fail with just 10000 iterations.  Without those I need 500000 on my machine.  Might just want to set it at 500000+ always just to make sure.

var count = 0;
function foo() {
    var a=1, b=0;
    for (var i = 0; i &lt; 2; ++i){
        [a, b] = [b, a];
        count++;
    }
    if (a !== 1 || b !== 0)
        throw &quot;Error: bad result at swap count: &quot; + count;
}
noInline(foo);

for (var k = 0; k &lt; 10000; ++k)
    foo();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247900</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 16:05:08 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; How about updating the stress test code style and readability?  

We don&apos;t usually worry about the style of regression test code.

&gt; May also
&gt; need a comment to note you need the --useConcurrentJIT=false
&gt; --useFTLJIT=true flags for it to fail with just 10000 iterations.  Without
&gt; those I need 500000 on my machine.  Might just want to set it at 500000+
&gt; always just to make sure.

This is an invariant of almost all of our optimizing compiler tests.  JSC developers already know this.

&gt; 
&gt; var count = 0;
&gt; function foo() {
&gt;     var a=1, b=0;
&gt;     for (var i = 0; i &lt; 2; ++i){
&gt;         [a, b] = [b, a];
&gt;         count++;
&gt;     }
&gt;     if (a !== 1 || b !== 0)
&gt;         throw &quot;Error: bad result at swap count: &quot; + count;
&gt; }
&gt; noInline(foo);
&gt; 
&gt; for (var k = 0; k &lt; 10000; ++k)
&gt;     foo();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247901</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 16:06:38 -0700</bug_when>
    <thetext>The reason for the perf regressions is that I forgot to fix IntegerRangeOptimizationPhase.  That&apos;s also a flow-sensitive analysis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247906</commentid>
    <comment_count>27</comment_count>
      <attachid>293818</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 16:16:09 -0700</bug_when>
    <thetext>Created attachment 293818
possibly better patch

I think I figured out most of the remaining perf regression.  I will retest now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247934</commentid>
    <comment_count>28</comment_count>
      <attachid>293829</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 16:55:47 -0700</bug_when>
    <thetext>Created attachment 293829
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247935</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 16:56:45 -0700</bug_when>
    <thetext>Attachment 293829 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp:1532:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 30 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>1247947</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 17:18:17 -0700</bug_when>
    <thetext>This looks to be perf-neutral now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247950</commentid>
    <comment_count>31</comment_count>
      <attachid>293829</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-11-03 17:24:51 -0700</bug_when>
    <thetext>Comment on attachment 293829
the patch

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

I&apos;ll look further later. Something came up and I have to go.

&gt; JSTests/stress/dfg-ssa-swap.js:4
&gt; +    var a=1,b;for(i=0;i&lt;2;++i){[a,b]=[b,a];c++}if(!a^b)throw c

why? my eyes...

&gt; Source/JavaScriptCore/dfg/DFGCombinedLiveness.h:42
&gt; +// values if you treat Upsilon as an opaque escape, and all of the clinets of CombinedLiveness do so.

clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247951</commentid>
    <comment_count>32</comment_count>
      <attachid>293829</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-03 17:25:12 -0700</bug_when>
    <thetext>Comment on attachment 293829
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:28
&gt; +        Unfortunately, DFG&apos;a liveness analysis, abstract interpreter, and integer range optimization

DFG&apos;a =&gt; DFG&apos;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247957</commentid>
    <comment_count>33</comment_count>
      <attachid>293836</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 17:43:44 -0700</bug_when>
    <thetext>Created attachment 293836
the patch

Fixed a bug in LivenessAnalysis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247959</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 17:45:14 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Comment on attachment 293829 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293829&amp;action=review
&gt; 
&gt; I&apos;ll look further later. Something came up and I have to go.
&gt; 
&gt; &gt; JSTests/stress/dfg-ssa-swap.js:4
&gt; &gt; +    var a=1,b;for(i=0;i&lt;2;++i){[a,b]=[b,a];c++}if(!a^b)throw c
&gt; 
&gt; why? my eyes...

Just copy-pasted the crashing code.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGCombinedLiveness.h:42
&gt; &gt; +// values if you treat Upsilon as an opaque escape, and all of the clinets of CombinedLiveness do so.
&gt; 
&gt; clients.

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247960</commentid>
    <comment_count>35</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 17:45:24 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; Comment on attachment 293829 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293829&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:28
&gt; &gt; +        Unfortunately, DFG&apos;a liveness analysis, abstract interpreter, and integer range optimization
&gt; 
&gt; DFG&apos;a =&gt; DFG&apos;s

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247961</commentid>
    <comment_count>36</comment_count>
      <attachid>293837</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 17:46:08 -0700</bug_when>
    <thetext>Created attachment 293837
the patch

More fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247962</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 17:46:12 -0700</bug_when>
    <thetext>Attachment 293836 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp:1532:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 30 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>1247964</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 17:49:21 -0700</bug_when>
    <thetext>Attachment 293837 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp:1532:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 30 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>1247984</commentid>
    <comment_count>39</comment_count>
      <attachid>293829</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-11-03 18:42:46 -0700</bug_when>
    <thetext>Comment on attachment 293829
the patch

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

&gt;&gt;&gt; JSTests/stress/dfg-ssa-swap.js:4
&gt;&gt;&gt; +    var a=1,b;for(i=0;i&lt;2;++i){[a,b]=[b,a];c++}if(!a^b)throw c
&gt;&gt; 
&gt;&gt; why? my eyes...
&gt; 
&gt; Just copy-pasted the crashing code.

Here&apos;s a version that won&apos;t hurt your eyes:

function foo() {
	var a = 1, b = 0;
	var i = 2;
	do {
		var c = a;
		a = b;
		b = c;
	} while (--i);
        if (!a)
	    throw &quot;Error&quot;;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247987</commentid>
    <comment_count>40</comment_count>
    <who name="David I. Lehn">dil</who>
    <bug_when>2016-11-03 18:56:09 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #31)
&gt; &gt; Comment on attachment 293829 [details]
&gt; &gt; &gt; JSTests/stress/dfg-ssa-swap.js:4
&gt; &gt; &gt; +    var a=1,b;for(i=0;i&lt;2;++i){[a,b]=[b,a];c++}if(!a^b)throw c
&gt; &gt; 
&gt; &gt; why? my eyes...
&gt; 
&gt; Just copy-pasted the crashing code.
&gt; 

Sorry I posted the crazy code without a sane version!  Test code style may not matter but readability does.  Please consider using the comment #24 version or similar so other eyes stay safe.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247992</commentid>
    <comment_count>41</comment_count>
      <attachid>293837</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-11-03 19:33:11 -0700</bug_when>
    <thetext>Comment on attachment 293837
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:2820
&gt; +        forNode(node) = forNode(NodeFlowProjection(node, NodeFlowProjection::Shadow));

Nice

&gt; Source/JavaScriptCore/dfg/DFGLivenessAnalysisPhase.cpp:87
&gt; +                const Vector&lt;unsigned, 0, UnsafeVectorOverflow, 1&gt;&amp;
&gt; +                    liveAtHeadIndices = m_liveAtHead[blockIndex];

Style nit: I feel like this should go on one line.

&gt; Source/JavaScriptCore/dfg/DFGLivenessAnalysisPhase.cpp:96
&gt; +                const HashSet&lt;unsigned, DefaultHash&lt;unsigned&gt;::Hash, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned&gt;&gt;&amp;
&gt; +                    liveAtTailIndices = m_liveAtTail[blockIndex];

Ditto

&gt; Source/JavaScriptCore/dfg/DFGNodeFlowProjection.h:46
&gt; +    {

Maybe worth an assert that kind()==Primary?

&gt; Source/JavaScriptCore/dfg/DFGNodeFlowProjection.h:51
&gt; +    {

Maybe worth an assert that kind()==kind?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247993</commentid>
    <comment_count>42</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 19:35:07 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; Comment on attachment 293837 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=293837&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:2820
&gt; &gt; +        forNode(node) = forNode(NodeFlowProjection(node, NodeFlowProjection::Shadow));
&gt; 
&gt; Nice
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGLivenessAnalysisPhase.cpp:87
&gt; &gt; +                const Vector&lt;unsigned, 0, UnsafeVectorOverflow, 1&gt;&amp;
&gt; &gt; +                    liveAtHeadIndices = m_liveAtHead[blockIndex];
&gt; 
&gt; Style nit: I feel like this should go on one line.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGLivenessAnalysisPhase.cpp:96
&gt; &gt; +                const HashSet&lt;unsigned, DefaultHash&lt;unsigned&gt;::Hash, WTF::UnsignedWithZeroKeyHashTraits&lt;unsigned&gt;&gt;&amp;
&gt; &gt; +                    liveAtTailIndices = m_liveAtTail[blockIndex];
&gt; 
&gt; Ditto

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNodeFlowProjection.h:46
&gt; &gt; +    {
&gt; 
&gt; Maybe worth an assert that kind()==Primary?

Fixed!

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNodeFlowProjection.h:51
&gt; &gt; +    {
&gt; 
&gt; Maybe worth an assert that kind()==kind?

Fixed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1247995</commentid>
    <comment_count>43</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 19:41:33 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/208364</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248026</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 21:38:48 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 164402</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248038</commentid>
    <comment_count>45</comment_count>
      <attachid>293861</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 21:52:52 -0700</bug_when>
    <thetext>Created attachment 293861
patch for relanding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1248039</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-11-03 21:54:57 -0700</bug_when>
    <thetext>Attachment 293861 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGIntegerRangeOptimizationPhase.cpp:1532:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 30 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>1248053</commentid>
    <comment_count>47</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-11-03 22:32:54 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/208373</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293741</attachid>
            <date>2016-11-02 20:28:54 -0700</date>
            <delta_ts>2016-11-03 09:13:08 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38044</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDgyOTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMSBAQAogCQkwRjFFM0E0NzE1MzRD
QkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBE
RkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYg
LyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8q
IEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIwMTc3RjFEQ0FEQzMz
MDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93
SW5kZXhpbmcuY3BwICovOyB9OworCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyogREZHRmxv
d0luZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87IH07CisJ
CTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4MTFEQ0FERDQwMDBFQTU5NTAg
LyogREZHRmxvd01hcC5oICovOyB9OworCQkwRjIwMTc4NTFEQ0FFMTQ5MDBFQTU5NTAgLyogREZH
Tm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0
aW9uLmggKi87IH07CisJCTBGMjAxNzg2MURDQUUxNEMwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1By
b2plY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMDE3ODMxRENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAg
Ki87IH07CiAJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMEMyNTgx
QTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi87IH07CiAJCTBGMjFDMjdE
MTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBBREM2
NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRl
Y29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNDky
LDYgKzI0OTcsMTEgQEAKIAkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRo
R2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Nsb3dQYXRo
R2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0gZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkU1MUIxOTIyQTNCQzAw
Njk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzdEMURD
QURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdGbG93
SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc3RTFEQ0FE
QzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0gZGZnL0RGR0Zsb3dJbmRleGluZy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MTFEQ0FERDQwMDBFQTU5NTAg
LyogREZHRmxvd01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbG93
TWFwLmg7IHBhdGggPSBkZmcvREZHRmxvd01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjIwMTc4MzFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05vZGVGbG93UHJvamVj
dGlvbi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODQxRENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVG
bG93UHJvamVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZp
cnR1YWxSZWdpc3Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
aXJ0dWFsUmVnaXN0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3
OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29k
ZUNvbnZlbnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2Rl
Q29udmVudGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2NzYsOCArNjY4
Niw2IEBACiAJCQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8s
CiAJCQkJMEYyRkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKIAkJ
CQkwRjJGQzc3MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKLQkJCQlFMzIy
RTVBMDFEQTY0NDM1MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgKi8s
Ci0JCQkJRTMyMkU1QTExREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJh
bXMuaCAqLywKIAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50
aWZpZXJzLmNwcCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJl
ZElkZW50aWZpZXJzLmggKi8sCiAJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rl
c2lyZWRJbmZlcnJlZFR5cGUuaCAqLywKQEAgLTY2OTIsNiArNjcwMCw4IEBACiAJCQkJMEY1QTEy
NzExOTJEOUZERjAwODc2NEEzIC8qIERGR0RvZXNHQy5jcHAgKi8sCiAJCQkJMEY1QTEyNzIxOTJE
OUZERjAwODc2NEEzIC8qIERGR0RvZXNHQy5oICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4
M0U3MiAvKiBERkdEb21pbmF0b3JzLmggKi8sCisJCQkJRTMyMkU1QTAxREE2NDQzNTAwNkU3NzA5
IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwICovLAorCQkJCUUzMjJFNUExMURBNjQ0
MzUwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmggKi8sCiAJCQkJMEYxRTNB
NDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8sCiAJCQkJMEZE
M0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8sCiAJCQkJMEZEM0M4MjIx
NDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovLApAQCAtNjcwOCw2ICs2NzE4LDkgQEAK
IAkJCQlBNzhBOTc2RjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggKi8sCiAJCQkJ
MEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovLAogCQkJCTBG
MkJEQzEzMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8sCisJCQkJMEYyMDE3
N0QxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgKi8sCisJCQkJMEYyMDE3
N0UxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oICovLAorCQkJCTBGMjAxNzgx
MURDQURENDAwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggKi8sCiAJCQkJMEY5RDMzOTQxN0ZGQzRF
NjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5jcHAgKi8sCiAJCQkJMEY5RDMzOTUxN0ZGQzRFNjAw
NzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovLAogCQkJCUE3RDg5Q0U4MTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi8sCkBAIC02Nzc4LDYgKzY3OTEsOCBAQAogCQkJCTBG
QjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZB
NTgxQjcxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgKi8sCiAJCQkJMEZBNTgx
QjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAorCQkJCTBGMjAxNzgzMURD
QUUxNDcwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwICovLAorCQkJCTBGMjAx
Nzg0MURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uaCAqLywKIAkJCQkw
RjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8sCiAJCQkJMEYz
MDBCNzcxOEFCMDUxMTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLywKIAkJCQkwRkE1ODFC
OTE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKQEAgLTc1MzcsNiArNzU1Miw3
IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMzM4REZBMUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4RTE2MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVl
S2V5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUw
IC8qIERGR0Zsb3dNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc2MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFD
MEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTg0MTUs
NiArODQzMSw3IEBACiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAv
KiBKU1N0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzg1MURDQUUxNDkw
MEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUz
NTU1QjhBMURBRTAzQTUwMEYzNjkyMSAvKiBET01KSVRDYWxsRE9NR2V0dGVyUGF0Y2hwb2ludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQzBFQzMxQUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5n
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDcwQTQ3MUQ1NDNBOEIwMDZFNzIzMiAv
KiBDZWxsQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg1NzcsNiArODU5NCw3IEBACiAJ
CQkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERGR051bGxBYnN0
cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMg
LyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMDE3ODAxRENB
REMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTk5ODksNiArMTAwMDcsNyBAQAog
CQkJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0
aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAxNzdGMURDQURDMzMwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2N0QxNEY1Q0ZE
NjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTM3OTRFNzUxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFuYWx5emVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUzNTVGMzUyMUI3REM4NTMwMEM1MERDNSAvKiBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDA4Niw2ICsxMDEwNSw3IEBACiAJ
CQkJQTVGRDAwNjcxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNUZEMDA2RDE4OUIwMEFBMDA2MzMyMzEgLyogU2NyaXB0Q2FsbEZyYW1l
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDZGMTg5QjAwQUEwMDYzMzIzMSAvKiBTY3Jp
cHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3ODYxRENBRTE0QzAwRUE1
OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZE
MDA3RDE4OUIwQjRDMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTAzRkEyNTE4OEVGRkZEMDAxMTBGMTQgLyogU2NyaXB0RGVidWdTZXJ2
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1RDkzQTUxODUwMTJBODAwNDAwREVEIC8qIFNj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFwdGVyIHsKIAogICAgIFRtcExpdmVu
ZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29k
ZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2RlJiBjb2RlKQogICAg
IHsKICAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUubnVtVG1wcyhhZGFwdGVyVHlwZSk7
CiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxhZGFwdGVyVHlwZT46OmFic29sdXRl
SW5kZXgobnVtVG1wcyk7CkBAIC02NSw5ICs2NSw5IEBAIHN0cnVjdCBTdGFja1Nsb3RMaXZlbmVz
c0FkYXB0ZXIgewogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgo
Q29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2RlJiBjb2RlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSAtIDE7CisgICAg
ICAgIHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgfQogICAgIHN0YXRpYyBi
b29sIGFjY2VwdHNUeXBlKEFyZzo6VHlwZSkgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHN0YXRpYyB1
bnNpZ25lZCB2YWx1ZVRvSW5kZXgoU3RhY2tTbG90KiBzdGFja1Nsb3QpIHsgcmV0dXJuIHN0YWNr
U2xvdC0+aW5kZXgoKTsgfQpAQCAtODMsOSArODMsOSBAQCBzdHJ1Y3QgUmVnTGl2ZW5lc3NBZGFw
dGVyIHsKIAogICAgIFJlZ0xpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAgICBzdGF0aWMg
dW5zaWduZWQgbWF4SW5kZXgoQ29kZSYpCisgICAgc3RhdGljIHVuc2lnbmVkIG51bUluZGljZXMo
Q29kZSYpCiAgICAgewotICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpOworICAgICAgICBy
ZXR1cm4gUmVnOjptYXhJbmRleCgpICsgMTsKICAgICB9CiAKICAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzVHlwZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTEwMSw3ICsxMDEsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBjb2RlKQogICAgICAgICA6
IEFkYXB0ZXIoY29kZSkKLSAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6bWF4SW5kZXgoY29k
ZSkpCisgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om51bUluZGljZXMoY29kZSkpCiAgICAg
ICAgICwgbV9saXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQogICAgICAgICAsIG1fbGl2ZUF0VGFpbChj
b2RlLnNpemUoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDEyICs0NywxMiBAQCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxB
YnN0cmFjdFN0YXRlCiAKIEF0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRl
KCkgeyB9CiAKLXZvaWQgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5v
ZGUqIG5vZGUpCit2b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShO
b2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAgICBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Js
b2NrKS5hZGQobm9kZSwgQWJzdHJhY3RWYWx1ZSgpKTsKIH0KIAotQWJzdHJhY3RWYWx1ZSYgQXRU
YWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2RlKiBub2RlKQorQWJzdHJhY3RWYWx1ZSYgQXRU
YWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAg
ICBhdXRvJiB2YWx1ZXNBdFRhaWwgPSBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKTsKICAg
ICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0
VGFpbC5maW5kKG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUg
IkRGR0Jsb2NrTWFwLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeyAKIApA
QCAtNDcsOCArNDgsOCBAQCBwdWJsaWM6CiAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZSopOwotICAgIEFic3RyYWN0
VmFsdWUmIGZvck5vZGUoTm9kZSopOworICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbik7CisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2pl
Y3Rpb24pOwogICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKSB7IHJldHVybiBm
b3JOb2RlKGVkZ2Uubm9kZSgpKTsgfQogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+JiB2YXJp
YWJsZXMoKSB7IHJldHVybiBtX2Jsb2NrLT52YWx1ZXNBdFRhaWw7IH0KICAgICAKQEAgLTY2LDcg
KzY3LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIEJs
b2NrTWFwPEhhc2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+PiBtX3ZhbHVlc0F0VGFpbE1hcDsK
KyAgICBCbG9ja01hcDxIYXNoTWFwPE5vZGVGbG93UHJvamVjdGlvbiwgQWJzdHJhY3RWYWx1ZT4+
IG1fdmFsdWVzQXRUYWlsTWFwOwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07
CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAko
cmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHRmx1c2hlZEF0LmgiCiAj
aW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgog
I2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgpAQCAtMjQ4LDEwICsyNDksMTAgQEAgc3Ry
dWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBBdmFpbGFiaWxp
dHlNYXAgYXZhaWxhYmlsaXR5QXRIZWFkOwogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxh
YmlsaXR5QXRUYWlsOwogCi0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0SGVhZDsKLSAgICAg
ICAgVmVjdG9yPE5vZGUqPiBsaXZlQXRUYWlsOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9q
ZWN0aW9uPiBsaXZlQXRIZWFkOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiBs
aXZlQXRUYWlsOwogICAgICAgICBzdHJ1Y3QgTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsKLSAgICAg
ICAgICAgIE5vZGUqIG5vZGU7CisgICAgICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24gbm9kZTsK
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWU7CiAgICAgICAgIH07CiAgICAgICAgIFZl
Y3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZhbHVlc0F0SGVhZDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRmxvd0luZGV4
aW5nLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitGbG93SW5kZXhpbmc6OkZsb3dJbmRleGluZyhHcmFwaCYgZ3JhcGgpCisgICAg
OiBtX2dyYXBoKGdyYXBoKQorICAgICwgbV9udW1JbmRpY2VzKGdyYXBoLm1heE5vZGVDb3VudCgp
KQorICAgICwgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4KGdyYXBoLm1heE5vZGVDb3VudCgpLCBV
SU5UX01BWCkKK3sKKyAgICB1bnNpZ25lZCBudW1Ob2RlSW5kaWNlcyA9IG1fbnVtSW5kaWNlczsK
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgeworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5vcCgpICE9IFBoaSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgdW5zaWduZWQgbm9kZUluZGV4ID0gbm9kZS0+aW5kZXgoKTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHNoYWRvd0luZGV4ID0gbV9udW1JbmRpY2VzKys7CisgICAgICAg
ICAgICBtX25vZGVJbmRleFRvU2hhZG93SW5kZXhbbm9kZUluZGV4XSA9IHNoYWRvd0luZGV4Owor
ICAgICAgICAgICAgbV9zaGFkb3dJbmRleFRvTm9kZUluZGV4LmFwcGVuZChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX3NoYWRvd0luZGV4VG9O
b2RlSW5kZXguc2l6ZSgpICsgbnVtTm9kZUluZGljZXMgPT0gbV9udW1JbmRpY2VzKTsKKyAgICAg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9zaGFkb3dJbmRleFRvTm9kZUlu
ZGV4W3NoYWRvd0luZGV4XSA9PSBub2RlSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCitG
bG93SW5kZXhpbmc6On5GbG93SW5kZXhpbmcoKQoreworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlUHJvamVjdGlvbi5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gbm9kZXMgdG8g
dW5pcXVlLCBkZW5zZSBpbmRpY2VzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNyZWF0aW5nIGZhc3QK
Ky8vIE5vZGUta2V5ZWQgbWFwcy4gVGhlIHNwZWNpYWwgcGFydCBpcyB0aGF0IGl0IGFsc28gYWxs
b2NhdGVkIGluZGljZXMgZm9yIHRoZSBzaGFkb3cgdmFsdWVzIG9mIFBoaQorLy8gbm9kZXMsIHdo
aWNoIGlzIG5lZWRlZCBmb3IgYW55IGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lzLgorY2xhc3MgRmxv
d0luZGV4aW5nIHsKK3B1YmxpYzoKKyAgICBGbG93SW5kZXhpbmcoR3JhcGgmKTsKKyAgICB+Rmxv
d0luZGV4aW5nKCk7CisgICAgCisgICAgdm9pZCByZWNvbXB1dGUoKTsKKyAgICAKKyAgICBHcmFw
aCYgZ3JhcGgoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoOyB9CisgICAgCisgICAgdW5zaWduZWQg
bnVtSW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtSW5kaWNlczsgfQorICAgIAorICAgIHVu
c2lnbmVkIGluZGV4KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gbm9kZUluZGV4
OyB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgoTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4g
aW5kZXgobm9kZS0+aW5kZXgoKSk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaGFkb3dJbmRleCh1
bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ub2RlSW5k
ZXhUb1NoYWRvd0luZGV4W25vZGVJbmRleF07CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIHNo
YWRvd0luZGV4KE5vZGUqIG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgcmV0dXJuIHNoYWRvd0lu
ZGV4KG5vZGUtPmluZGV4KCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCh1bnNp
Z25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdAorICAg
IHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0
aW9uOjpQcmltYXJ5OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4KG5vZGVJbmRleCk7CisgICAg
ICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3c6CisgICAgICAgICAgICByZXR1cm4g
c2hhZG93SW5kZXgobm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgaW5kZXgoTm9kZSAqbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBOb2RlRmxv
d1Byb2plY3Rpb246OlByaW1hcnk6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgobm9kZSk7Cisg
ICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3c6CisgICAgICAgICAgICByZXR1
cm4gc2hhZG93SW5kZXgobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIE5vZGVG
bG93UHJvamVjdGlvbiBub2RlUHJvamVjdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCA8IG1fc2hhZG93TWFwLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBOb2RlRmxvd1Byb2plY3Rpb24obV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAg
cmV0dXJuIE5vZGVGbG93UHJvamVjdGlvbigKKyAgICAgICAgICAgIG1fZ3JhcGgubm9kZUF0KG1f
c2hhZG93SW5kZXhUb05vZGVJbmRleFtpbmRleCAtIG1fc2hhZG93TWFwLnNpemUoKV0pLAorICAg
ICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgdW5zaWduZWQgbV9udW1JbmRpY2VzOworICAg
IFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbm9kZUluZGV4VG9T
aGFkb3dJbmRleDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93
PiBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbG93TWFwLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbG93TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRmxvd0luZGV4aW5nLmgiCisj
aW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBub2RlcyB0
byB2YWx1ZXMgdGhhdCBpcyB1c2VmdWwgZm9yIGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lzLiBJbiBz
dWNoIGFuCisvLyBhbmFseXNpcywgYXQgZXZlcnkgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2UgbmVl
ZCB0byBjb25zaWRlciB0aGUgdmFsdWVzIG9mIG5vZGVzIHBsdXMgdGhlIHNoYWRvdworLy8gdmFs
dWVzIG9mIFBoaXMuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBkbyBib3RoIG9mIHRob3NlIHRoaW5n
cy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBGbG93TWFwIHsKK3B1YmxpYzoKKyAgICBG
bG93TWFwKEZsb3dJbmRleCYgaW5kZXhpbmcpCisgICAgICAgIDogbV9pbmRleGluZyhpbmRleGlu
ZykKKyAgICAgICAgLCBtX21hcChtX2luZGV4aW5nLm51bUluZGljZXMoKSwgVCgpKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGFmdGVyIHlvdSBoYXZlIHJlY29tcHV0ZWQg
dGhlIGluZGV4aW5nIHRvIHdoaWNoIHRoaXMgaXMgc2xhdmVkLgorICAgIHZvaWQgcmVjb21wdXRl
KCk7CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZy5n
cmFwaCgpOyB9CisgICAgCisgICAgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fbWFwW25vZGVJbmRleF07CisgICAgfQorICAgIAorICAgIFQmIGF0KE5v
ZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSk7CisgICAg
fQorICAgIAorICAgIFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX21hcFttX2luZGV4aW5nLnNoYWRvd0luZGV4KG5vZGVJbmRleCldOworICAg
IH0KKyAgICAKKyAgICBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbWFwW21faW5kZXhpbmcuc2hhZG93SW5kZXgobm9kZSldOworICAgIH0KKyAgICAKKyAg
ICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6a2luZCBraW5k
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5kZXhpbmcuaW5kZXgobm9kZUluZGV4
LCBraW5kKV07CisgICAgfQorICAgIAorICAgIFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJv
amVjdGlvbjo6a2luZCBraW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5kZXhp
bmcuaW5kZXgobm9kZSwga2luZCldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBhdCh1bnNp
Z25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMp
LT5hdChub2RlSW5kZXgpOyB9CisgICAgY29uc3QgVCYgYXQoTm9kZSogbm9kZSkgY29uc3QgeyBy
ZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUpOyB9CisgICAgY29uc3Qg
VCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZUluZGV4KTsgfQorICAgIGNvbnN0IFQmIGF0
U2hhZG93KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRo
aXMpLT5hdFNoYWRvdyhub2RlKTsgfQorICAgIGNvbnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRl
eCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlSW5kZXgsIGtpbmQpOyB9CisgICAgY29uc3QgVCYg
YXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsgcmV0
dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlLCBraW5kKTsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBGbG93SW5kZXhpbmcmIG1faW5kZXhpbmc7CisgICAgVmVjdG9yPFQsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX21hcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSlNDOjpERkc6OkZsb3dNYXA8VD4m
IG1hcCkKK3sKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1hcC5ncmFwaCgpLm1heE5vZGVDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYgKE5v
ZGUqIG5vZGUgPSBtYXAuZ3JhcGgoKS5ub2RlQXQoaSkpIHsKKyAgICAgICAgICAgIGlmIChjb25z
dCBUJiB2YWx1ZSA9IG1hcC5hdChub2RlKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIG5vZGUsICI9PiIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbWFwLmdyYXBoKCkubWF4Tm9kZUNvdW50KCk7ICsraSkgeworICAgICAg
ICBpZiAoTm9kZSogbm9kZSA9IG1hcC5ncmFwaCgpLm5vZGVBdChpKSkgeworICAgICAgICAgICAg
aWYgKGNvbnN0IFQmIHZhbHVlID0gbWFwLmF0U2hhZG93KG5vZGUpKQorICAgICAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgInNoYWRvdygiLCBub2RlLCAiKT0+IiwgdmFsdWUpOworICAgICAg
ICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgY2xhc3MgQmFja3dhcmRzRG9taW5hdG9yczsKIGNs
YXNzIENGRzsKIGNsYXNzIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogY2xhc3MgRG9taW5h
dG9yczsKK2NsYXNzIEZsb3dJbmRleGluZzsKK2NsYXNzIEZsb3dNYXA7CiBjbGFzcyBOYXR1cmFs
TG9vcHM7CiBjbGFzcyBQcmVQb3N0TnVtYmVyaW5nOwogCkBAIC05NzIsNyArOTc0LDggQEAgcHJp
dmF0ZToKIAogICAgIFZlY3RvcjxOb2RlKiwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbm9k
ZXNCeUluZGV4OwogICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
IG1fbm9kZUluZGV4RnJlZUxpc3Q7Ci0gICAgVmVjdG9yPEFic3RyYWN0VmFsdWUsIDAsIFVuc2Fm
ZVZlY3Rvck92ZXJmbG93PiBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEZsb3dJbmRleGluZz4gbV9pbmRleGluZzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd01h
cDxBYnN0cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw5ICs0NSw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNyZWF0ZVZhbHVl
Rm9yTm9kZShOb2RlKikgeyB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2Rl
KiBub2RlKQorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5v
ZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9hYnN0cmFjdFZhbHVlc1tub2RlLT5pbmRleCgp
XTsKKyAgICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CiAgICAgfQogICAg
IAogICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQpAQCAtMTMyLDcgKzEzMiw4
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKLSAgICBWZWN0b3I8QWJz
dHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBtX2Fic3RyYWN0VmFsdWVzOwor
ICAgIEZsb3dJbmRleGluZyBtX2luZGV4aW5nOworICAgIEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4g
bV9hYnN0cmFjdFZhbHVlczsKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxl
czsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2
aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0Fu
YWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNs
dWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5l
cy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKQEAg
LTQ0LDkgKzQ1LDEwIEBAIHB1YmxpYzoKICAgICBMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgm
IGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBoLCAibGl2ZW5lc3MgYW5hbHlzaXMiKQogICAg
ICAgICAsIG1fZGlydHlCbG9ja3MobV9ncmFwaC5udW1CbG9ja3MoKSkKKyAgICAgICAgLCBtX2lu
ZGV4aW5nKGdyYXBoKQogICAgICAgICAsIG1fbGl2ZUF0SGVhZChtX2dyYXBoKQogICAgICAgICAs
IG1fbGl2ZUF0VGFpbChtX2dyYXBoKQotICAgICAgICAsIG1fd29ya3NldChncmFwaC5tYXhOb2Rl
Q291bnQoKSAtIDEpCisgICAgICAgICwgbV93b3Jrc2V0KG1faW5kZXhpbmcubnVtSW5kaWNlcygp
KQogICAgIHsKICAgICB9CiAKQEAgLTg1LDcgKzg3LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgIGxpdmVBdEhlYWQucmVzaXplKDApOwogICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQucmVz
ZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWRJbmRpY2VzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA6IGxpdmVBdEhlYWRJbmRpY2VzKQotICAgICAgICAgICAgICAg
ICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVuZChtX2dyYXBoLm5vZGVBdChpbmRleCkpOwor
ICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVuZChtX2luZGV4aW5n
Lm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgbGl2ZUF0VGFpbEluZGljZXMgPSBtX2xpdmVBdFRh
aWxbYmxvY2tJbmRleF07CkBAIC05Myw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICBsaXZlQXRUYWlsLnJlc2l6ZSgwKTsKICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnJlc2Vy
dmVDYXBhY2l0eShsaXZlQXRUYWlsSW5kaWNlcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggOiBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF0pCi0gICAgICAgICAg
ICAgICAgICAgIGxpdmVBdFRhaWwudW5jaGVja2VkQXBwZW5kKG1fZ3JhcGgubm9kZUF0KGluZGV4
KSk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwudW5jaGVja2VkQXBwZW5kKG1faW5k
ZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
CkBAIC0xMTMsNDUgKzExNSwzMyBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewogICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogCi0gICAgICAgICAgICAvLyBHaXZlbiBh
biBVcHNpbG9uOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFVwc2lsb24o
QHgsIF5wKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRl
ZidzIEBwIGFuZCBAbiBhbmQgdXNlcyBAeC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyBHaXZlbiBhIFBoaToKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBwOiBQaGko
KQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdzIG5l
aXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdp
dmVuIGEgbm9kZToKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBuOiBUaGluZ3ko
QGEsIEBiLCBAYykKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBp
dCBkZWYncyBAbiBhbmQgdXNlcyBAYSwgQGIsIEBjLgotICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjogewogICAg
ICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1fd29ya3NldC5jb250YWlucyhub2Rl
LT5pbmRleCgpKSwgIlVwc2lsb24gc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGRlZnMgYnkgb3RoZXIg
bm9kZXMuIik7CiAKICAgICAgICAgICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5waGkoKTsKLSAg
ICAgICAgICAgICAgICBtX3dvcmtzZXQucmVtb3ZlKHBoaS0+aW5kZXgoKSk7Ci0gICAgICAgICAg
ICAgICAgbV93b3Jrc2V0LmFkZChub2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CisgICAgICAgICAg
ICAgICAgbV93b3Jrc2V0LnJlbW92ZShtX2luZGV4aW5nLnNoYWRvd0luZGV4KHBoaSkpOworICAg
ICAgICAgICAgICAgIG1fd29ya3NldC5hZGQobV9pbmRleGluZy5pbmRleChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShtX2lu
ZGV4aW5nLmluZGV4KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBtX3dvcmtzZXQuYWRkKG1faW5k
ZXhpbmcuc2hhZG93SW5kZXgobm9kZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX3dvcmtzZXQu
cmVtb3ZlKG5vZGUtPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NI
SUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZENoaWxkVXNlKTsKKyAgICAgICAgICAgICAgICBtX3dv
cmtzZXQucmVtb3ZlKG1faW5kZXhpbmcuaW5kZXgobm9kZSkpOworICAgICAgICAgICAgICAgIG1f
Z3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBbJl0gKEVkZ2Um
IGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmV3RW50cnkgPSBtX3dvcmtz
ZXQuYWRkKG1faW5kZXhpbmcuaW5kZXgoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVkZ2Uuc2V0S2lsbFN0YXR1cyhuZXdFbnRyeSA/IERvZXNLaWxsIDogRG9lc05vdE5p
bGwpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8vIFVwZGF0ZSBsaXZlIGF0IGhlYWQu
Ci0gICAgICAgIGF1dG8mIGxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF07Cisg
ICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3csIDE+JiBsaXZl
QXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOwogICAgICAgICBpZiAobV93b3Jrc2V0
LnNpemUoKSA9PSBsaXZlQXRIZWFkLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMTY1LDcgKzE1NSw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgYm9vbCBjaGFuZ2VkUHJl
ZGVjZXNzb3IgPSBmYWxzZTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6
IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKLSAgICAgICAgICAgIGF1dG8mIGxpdmVBdFRhaWwgPSBt
X2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdOworICAgICAgICAgICAgSGFzaFNldDx1bnNpZ25lZCwg
RGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVuc2lnbmVkPj4mCisgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0
VGFpbFtwcmVkZWNlc3Nvcl07CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDog
bV93b3Jrc2V0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVBdFRhaWwuYWRkKG5ld1ZhbHVl
KSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZGlydHlCbG9ja3MucXVpY2tTZXQocHJl
ZGVjZXNzb3ItPmluZGV4KSkKQEAgLTE3NiwxNCArMTY3LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBjaGFuZ2VkUHJlZGVjZXNzb3I7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2
b2lkIGFkZENoaWxkVXNlKE5vZGUqLCBFZGdlJiBlZGdlKQotICAgIHsKLSAgICAgICAgYm9vbCBu
ZXdFbnRyeSA9IG1fd29ya3NldC5hZGQoZWRnZS0+aW5kZXgoKSk7Ci0gICAgICAgIGVkZ2Uuc2V0
S2lsbFN0YXR1cyhuZXdFbnRyeSA/IERvZXNLaWxsIDogRG9lc05vdEtpbGwpOwotICAgIH0KLQog
ICAgIC8vIEJsb2NrcyB3aXRoIG5ldyBsaXZlIHZhbHVlcyBhdCB0YWlsLgogICAgIEJpdFZlY3Rv
ciBtX2RpcnR5QmxvY2tzOworICAgIAorICAgIEZsb3dJbmRleGluZyBtX2luZGV4aW5nOwogCiAg
ICAgLy8gTGl2ZSB2YWx1ZXMgcGVyIGJsb2NrIGVkZ2UuCiAgICAgQmxvY2tNYXA8VmVjdG9yPHVu
c2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4+IG1fbGl2ZUF0SGVhZDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlv
bi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlRmxv
d1Byb2plY3Rpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0
aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiLSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChraW5kKCkgPT0gUHJpbWFyeSkgeworICAgICAgICBvdXQucHJpbnQobm9kZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KCJzaGFkb3coIiwgbm9kZSwgIiki
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9q
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIE5vZGVGbG93UHJvamVjdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5k
IHsKKyAgICAgICAgUHJpbWFyeSwKKyAgICAgICAgU2hhZG93CisgICAgfTsKKyAgICAKKyAgICBO
b2RlRmxvd1Byb2plY3Rpb24oKSB7IH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oTm9k
ZSogbm9kZSkKKyAgICAgICAgOiBtX3dvcmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oTm9kZSogbm9kZSwg
S2luZCBraW5kKQorICAgICAgICA6IG1fd29yZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2Rl
KSB8IChraW5kID09IFNoYWRvdyA/IHNoYWRvd0JpdCA6IDApKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgTm9kZUZsb3dQcm9qZWN0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
KyAgICAgICAgOiBtX3dvcmQoc2hhZG93Qml0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV93b3JkOyB9CisgICAgCisg
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gKG1fd29yZCAmIHNoYWRvd0JpdCkgPyBTaGFk
b3cgOiBQcmltYXJ5OyB9CisgICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIGJp
dHdpc2VfY2FzdDxOb2RlKj4obV93b3JkICYgfnNoYWRvd0JpdCk7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dvcmQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShOb2RlRmxvd1Byb2plY3Rpb24gb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV93b3JkID09IG90aGVyLm1fd29yZDsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvciE9KE5vZGVGbG93UHJvamVjdGlvbiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV93b3JkID09IE5vZGVGbG93UHJvamVjdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3Qgc2hhZG93Qml0ID0gMTsK
KyAgICAgICAgICAgICAgICAgCisgICAgdWludHB0cl90IG1fd29yZCB7IDAgfTsKK307CisKK3N0
cnVjdCBOb2RlRmxvd1Byb2plY3Rpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChO
b2RlRmxvd1Byb2plY3Rpb24ga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGlj
IGJvb2wgZXF1YWwoTm9kZUZsb3dQcm9qZWN0aW9uIGEsIE5vZGVGbG93UHJvamVjdGlvbiBiKSB7
IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9F
cXVhbE9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhh
c2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9q
ZWN0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRl
PD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbj4gOiBTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbj4geyB9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3JhcwogY2xhc3MgSW5kZXhTcGFyc2VTZXQg
ewogICAgIHR5cGVkZWYgVmVjdG9yPHVuc2lnbmVkLCAwLCBPdmVyZmxvd0hhbmRsZXI+IFZhbHVl
TGlzdDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhW
YWx1ZSk7CisgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQgc2l6ZSk7CiAKICAg
ICBib29sIGFkZCh1bnNpZ25lZCk7CiAgICAgYm9vbCByZW1vdmUodW5zaWduZWQpOwpAQCAtNjUs
OSArNjUsOSBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgotaW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNl
U2V0KHVuc2lnbmVkIG1heFZhbHVlKQoraW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFu
ZGxlcj46OkluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIHNpemUpCiB7Ci0gICAgbV9tYXAucmVzaXpl
KG1heFZhbHVlICsgMSk7CisgICAgbV9tYXAucmVzaXplKHNpemUpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293766</attachid>
            <date>2016-11-03 09:13:08 -0700</date>
            <delta_ts>2016-11-03 09:42:26 -0700</delta_ts>
            <desc>this might even work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56285</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDgyOTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQkwRjFFM0E0NzE1MzRD
QkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBE
RkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0EyMUUyMDAwRjk0NTYg
LyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8q
IEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIwMTc3RjFEQ0FEQzMz
MDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93
SW5kZXhpbmcuY3BwICovOyB9OworCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5NTAgLyogREZHRmxv
d0luZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi87IH07CisJ
CTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4MTFEQ0FERDQwMDBFQTU5NTAg
LyogREZHRmxvd01hcC5oICovOyB9OworCQkwRjIwMTc4NTFEQ0FFMTQ5MDBFQTU5NTAgLyogREZH
Tm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0
aW9uLmggKi87IH07CisJCTBGMjAxNzg2MURDQUUxNEMwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1By
b2plY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMDE3ODMxRENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAg
Ki87IH07CisJCTBGMjAxNzg5MURDQjk0MjQwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCAqLzsg
fTsKKwkJMEYyMDE3OEExRENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFp
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIw
MTc4NzFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcCAqLzsg
fTsKIAkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwQzI1ODFBODAx
M0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCAqLzsgfTsKIAkJMEYyMUMyN0QxNEJF
NzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAv
KiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2Rl
Q29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI0OTIsNiAr
MjQ5OSwxMyBAQAogCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5l
cmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2xvd1BhdGhHZW5l
cmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTaWxl
bnRSZWdpc3RlclNhdmVQbGFuLmg7IHBhdGggPSBkZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxh
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGRTUxQjE5MjJBM0JDMDA2OTg3
QzUgLyogQWJvcnRSZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWJv
cnRSZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3N0QxRENBREMz
MDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdGbG93SW5kZXhpbmcuY3BwOyBwYXRoID0gZGZnL0RGR0Zsb3dJbmRl
eGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzdFMURDQURDMzAw
MEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHRmxvd0luZGV4aW5nLmg7IHBhdGggPSBkZmcvREZHRmxvd0luZGV4aW5nLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzgxMURDQURENDAwMEVBNTk1MCAvKiBE
RkdGbG93TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dNYXAu
aDsgcGF0aCA9IGRmZy9ERkdGbG93TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZUZsb3dQcm9qZWN0aW9u
LmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQ
cm9qZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGVGbG93
UHJvamVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4NzFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9k
ZUFic3RyYWN0VmFsdWVQYWlyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHBhdGggPSBkZmcvREZHTm9kZUFic3Ry
YWN0VmFsdWVQYWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODgx
RENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaDsgcGF0aCA9
IGRmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXJ0dWFsUmVnaXN0ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyog
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlQ29udmVudGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY2NzYsOCArNjY5MCw2IEBACiAJCQkJMEZGRkM5NEUx
NEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYyRkM3NzAxNkUxMkY2
RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKIAkJCQkwRjJGQzc3MTE2RTEyRjZGMDAz
OEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKLQkJCQlFMzIyRTVBMDFEQTY0NDM1MDA2RTc3MDkg
LyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgKi8sCi0JCQkJRTMyMkU1QTExREE2NDQz
NTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCAqLywKIAkJCQkwRjhGMkI5
NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLywKIAkJCQkw
RjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmggKi8sCiAJ
CQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZlcnJlZFR5cGUuaCAq
LywKQEAgLTY2OTIsNiArNjcwNCw4IEBACiAJCQkJMEY1QTEyNzExOTJEOUZERjAwODc2NEEzIC8q
IERGR0RvZXNHQy5jcHAgKi8sCiAJCQkJMEY1QTEyNzIxOTJEOUZERjAwODc2NEEzIC8qIERGR0Rv
ZXNHQy5oICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3Jz
LmggKi8sCisJCQkJRTMyMkU1QTAxREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9p
bnRQYXJhbXMuY3BwICovLAorCQkJCUUzMjJFNUExMURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01K
SVRQYXRjaHBvaW50UGFyYW1zLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8q
IERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8sCiAJCQkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNC
IC8qIERGR0RyaXZlci5jcHAgKi8sCiAJCQkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERG
R0RyaXZlci5oICovLApAQCAtNjcwOCw2ICs2NzIyLDkgQEAKIAkJCQlBNzhBOTc2RjE3OTczOEI4
MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggKi8sCiAJCQkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4
OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovLAogCQkJCTBGMkJEQzEzMTUxQzVENEEwMENEODkx
MCAvKiBERkdGaXh1cFBoYXNlLmggKi8sCisJCQkJMEYyMDE3N0QxRENBREMzMDAwRUE1OTUwIC8q
IERGR0Zsb3dJbmRleGluZy5jcHAgKi8sCisJCQkJMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8q
IERGR0Zsb3dJbmRleGluZy5oICovLAorCQkJCTBGMjAxNzgxMURDQURENDAwMEVBNTk1MCAvKiBE
RkdGbG93TWFwLmggKi8sCiAJCQkJMEY5RDMzOTQxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNo
ZWRBdC5jcHAgKi8sCiAJCQkJMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRB
dC5oICovLAogCQkJCUE3RDg5Q0U4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5j
cHAgKi8sCkBAIC02Nzc1LDkgKzY3OTIsMTMgQEAKIAkJCQlBNzM3ODEwQjE3OTlFQTJFMDA4MTc1
MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2Mjc3MjAwM0Y2OTZC
IC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJCMkFENyAvKiBERkdO
b2RlLmggKi8sCisJCQkJMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFj
dFZhbHVlUGFpci5jcHAgKi8sCisJCQkJMEYyMDE3ODgxRENCOTQyMjAwRUE1OTUwIC8qIERGR05v
ZGVBYnN0cmFjdFZhbHVlUGFpci5oICovLAogCQkJCTBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAv
KiBERkdOb2RlQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNTgxQjcxNTBFOTUyQTAwQjlBMkQ5IC8q
IERGR05vZGVGbGFncy5jcHAgKi8sCiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAwQjlBMkQ5IC8qIERG
R05vZGVGbGFncy5oICovLAorCQkJCTBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uY3BwICovLAorCQkJCTBGMjAxNzg0MURDQUUxNDcwMEVBNTk1MCAvKiBE
RkdOb2RlRmxvd1Byb2plY3Rpb24uaCAqLywKIAkJCQkwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQg
LyogREZHTm9kZU9yaWdpbi5jcHAgKi8sCiAJCQkJMEYzMDBCNzcxOEFCMDUxMTAwQTZENzJFIC8q
IERGR05vZGVPcmlnaW4uaCAqLywKIAkJCQkwRkE1ODFCOTE1MEU5NTJBMDBCOUEyRDkgLyogREZH
Tm9kZVR5cGUuaCAqLywKQEAgLTc1MzcsNiArNzU1OCw3IEBACiAJCQkJMEZFQzg1NzIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzM4REZB
MUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MzM4RTE2MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJCRkEgLyogQWlyVXNl
Q291bnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTg0MTUsNiArODQzNyw3IEBACiAJCQkJQTdDMUVB
RjAxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMjAxNzg1MURDQUUxNDkwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1By
b2plY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNTU1QjhBMURBRTAzQTUwMEYzNjkyMSAv
KiBET01KSVRDYWxsRE9NR2V0dGVyUGF0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBF
QzBFQzMxQUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMDcwQTQ3MUQ1NDNBOEIwMDZFNzIzMiAvKiBDZWxsQ29udGFpbmVyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTg1MTEsNiArODUzNCw3IEBACiAJCQkJMTQxNDQ4Q0IxM0ExNzZFQzAwRjVC
QTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEQyRjNEQjEzOUY0
QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkQ2RjEy
MTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAx
Nzg5MURDQjk0MjQwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRjaFJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBNYXRoT2Jq
ZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg1NzcsNiArODYwMSw3IEBACiAJCQkJMEZCMzg3OTAx
QkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERGR051bGxBYnN0cmFjdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMDE3ODAxRENBREMzNTAwRUE1OTUw
IC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2
MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVj
b2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTk3NjMsNiArOTc4OCw3IEBACiAJCQkJQTU4NDBFMjAx
ODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQTc2MjA0MURCOTI0MjYwMEI3QTJGRCAvKiBDb2xsZWN0aW9uU2NvcGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ4QTdCRUYxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNhbGxG
cmFtZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIwMTc4QTFEQ0I5NDI2MDBFQTU5NTAgLyog
REZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTU1
MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFnZW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2Vu
dFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTk4OSw2ICsxMDAxNSw3IEBACiAJCQkJ
MEYzNzMwOEMxQzBCRDI5MTAwMDUyQkZBIC8qIEIzUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTAyMTNFM0QxMjNBNDBDMjAwRDQyMkYzIC8qIE1lbW9yeVN0YXRpc3Rp
Y3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3N0YxRENBREMzMzAwRUE1OTUwIC8qIERG
R0Zsb3dJbmRleGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3RDE0RjVDRkQ2MDAy
QzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMzc5NEU3NTFCNzdFQjk3MDA1NTQzQUUgLyogTW9kdWxlQW5hbHl6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTM1NUYzNTIxQjdEQzg1MzAwQzUwREM1IC8qIE1vZHVsZUxvYWRlclBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMDg2LDYgKzEwMTEzLDcgQEAKIAkJCQlB
NUZEMDA2NzE4OUFGRTlDMDA2MzMyMzEgLyogU2NyaXB0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1RkQwMDZEMTg5QjAwQUEwMDYzMzIzMSAvKiBTY3JpcHRDYWxsRnJhbWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwNkYxODlCMDBBQTAwNjMzMjMxIC8qIFNjcmlwdENh
bGxTdGFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIwMTc4NjFEQ0FFMTRDMDBFQTU5NTAg
LyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDdE
MTg5QjBCNEMwMDYzMzIzMSAvKiBTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MDNGQTI1MTg4RUZGRkQwMDExMEYxNCAvKiBTY3JpcHREZWJ1Z1NlcnZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTVEOTNBNTE4NTAxMkE4MDA0MDBERUQgLyogU2NyaXB0
RnVuY3Rpb25DYWxsLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3
ICs0Niw3IEBAIHN0cnVjdCBUbXBMaXZlbmVzc0FkYXB0ZXIgewogCiAgICAgVG1wTGl2ZW5lc3NB
ZGFwdGVyKENvZGUmKSB7IH0KIAotICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhJbmRleChDb2RlJiBj
b2RlKQorICAgIHN0YXRpYyB1bnNpZ25lZCBudW1JbmRpY2VzKENvZGUmIGNvZGUpCiAgICAgewog
ICAgICAgICB1bnNpZ25lZCBudW1UbXBzID0gY29kZS5udW1UbXBzKGFkYXB0ZXJUeXBlKTsKICAg
ICAgICAgcmV0dXJuIEFic29sdXRlVG1wTWFwcGVyPGFkYXB0ZXJUeXBlPjo6YWJzb2x1dGVJbmRl
eChudW1UbXBzKTsKQEAgLTY1LDkgKzY1LDkgQEAgc3RydWN0IFN0YWNrU2xvdExpdmVuZXNzQWRh
cHRlciB7CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhJbmRleChDb2Rl
JiBjb2RlKQorICAgIHN0YXRpYyB1bnNpZ25lZCBudW1JbmRpY2VzKENvZGUmIGNvZGUpCiAgICAg
ewotICAgICAgICByZXR1cm4gY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpIC0gMTsKKyAgICAgICAg
cmV0dXJuIGNvZGUuc3RhY2tTbG90cygpLnNpemUoKTsKICAgICB9CiAgICAgc3RhdGljIGJvb2wg
YWNjZXB0c1R5cGUoQXJnOjpUeXBlKSB7IHJldHVybiB0cnVlOyB9CiAgICAgc3RhdGljIHVuc2ln
bmVkIHZhbHVlVG9JbmRleChTdGFja1Nsb3QqIHN0YWNrU2xvdCkgeyByZXR1cm4gc3RhY2tTbG90
LT5pbmRleCgpOyB9CkBAIC04Myw5ICs4Myw5IEBAIHN0cnVjdCBSZWdMaXZlbmVzc0FkYXB0ZXIg
ewogCiAgICAgUmVnTGl2ZW5lc3NBZGFwdGVyKENvZGUmKSB7IH0KIAotICAgIHN0YXRpYyB1bnNp
Z25lZCBtYXhJbmRleChDb2RlJikKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2Rl
JikKICAgICB7Ci0gICAgICAgIHJldHVybiBSZWc6Om1heEluZGV4KCk7CisgICAgICAgIHJldHVy
biBSZWc6Om1heEluZGV4KCkgKyAxOwogICAgIH0KIAogICAgIHN0YXRpYyBib29sIGFjY2VwdHNU
eXBlKEFyZzo6VHlwZSkgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBBYnN0cmFjdExpdmVuZXNzKENvZGUmIGNvZGUpCiAgICAgICAgIDogQWRh
cHRlcihjb2RlKQotICAgICAgICAsIG1fd29ya3NldChBZGFwdGVyOjptYXhJbmRleChjb2RlKSkK
KyAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6bnVtSW5kaWNlcyhjb2RlKSkKICAgICAgICAg
LCBtX2xpdmVBdEhlYWQoY29kZS5zaXplKCkpCiAgICAgICAgICwgbV9saXZlQXRUYWlsKGNvZGUu
c2l6ZSgpKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwODI5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgwOSw2ICsyODA5LDcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgCiAgICAgY2FzZSBQaGk6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7CisgICAgICAgIGZv
ck5vZGUobm9kZSkgPSBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBOb2RlRmxvd1By
b2plY3Rpb246OlNoYWRvdykpOwogICAgICAgICAvLyBUaGUgc3RhdGUgb2YgdGhpcyBub2RlIHdv
dWxkIGhhdmUgYWxyZWFkeSBiZWVuIGRlY2lkZWQsIGJ1dCBpdCBtYXkgaGF2ZSBiZWNvbWUgYQog
ICAgICAgICAvLyBjb25zdGFudCwgaW4gd2hpY2ggY2FzZSB3ZSdkIGxpa2UgdG8ga25vdy4KICAg
ICAgICAgaWYgKGZvck5vZGUobm9kZSkubV92YWx1ZSkKQEAgLTI4MTYsOCArMjgxNyw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGNhc2UgVXBzaWxvbjogewotICAgICAgICBtX3N0YXRlLmNyZWF0ZVZhbHVl
Rm9yTm9kZShub2RlLT5waGkoKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+cGhpKCkpID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbiBzaGFkb3co
bm9kZS0+cGhpKCksIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KTsKKyAgICAgICAgbV9zdGF0
ZS5jcmVhdGVWYWx1ZUZvck5vZGUoc2hhZG93KTsKKyAgICAgICAgZm9yTm9kZShzaGFkb3cpID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAg
CkBAIC0yOTY5LDEwICsyOTcxLDE1IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICBlbHNlCiAgICAgICAgIGNsb2JiZXJMaW1pdCsrOwogICAgIEFTU0VSVChj
bG9iYmVyTGltaXQgPD0gbV9zdGF0ZS5ibG9jaygpLT5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90
IGkgPSBjbG9iYmVyTGltaXQ7IGktLTspCi0gICAgICAgIGZ1bmN0b3IoZm9yTm9kZShtX3N0YXRl
LmJsb2NrKCktPmF0KGkpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJMaW1pdDsgaS0t
OykgeworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCisgICAgICAgICAgICBt
X3N0YXRlLmJsb2NrKCktPmF0KGkpLAorICAgICAgICAgICAgWyZdIChOb2RlRmxvd1Byb2plY3Rp
b24gbm9kZVByb2plY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGZvck5vZGUobm9k
ZVByb2plY3Rpb24pKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KICAgICBpZiAobV9ncmFwaC5t
X2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc3RhdGUuYmxvY2so
KS0+c3NhLT5saXZlQXRIZWFkKQorICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2Rl
IDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQpCiAgICAgICAgICAgICBmdW5jdG9y
KGZvck5vZGUobm9kZSkpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJp
YWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQpAQCAtMzAyOSw5ICszMDM2LDkgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAg
Q29tbWFQcmludGVyIGNvbW1hKCIgIik7Ci0gICAgSGFzaFNldDxOb2RlKj4gc2VlbjsKKyAgICBI
YXNoU2V0PE5vZGVGbG93UHJvamVjdGlvbj4gc2VlbjsKICAgICBpZiAobV9ncmFwaC5tX2Zvcm0g
PT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3Nh
LT5saXZlQXRIZWFkKSB7CisgICAgICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBt
X3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkgewogICAgICAgICAgICAgc2Vlbi5hZGQo
bm9kZSk7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7
CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQpAQCAtMzA0MCwxNSArMzA0NywxNyBA
QCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIH0KICAg
ICB9CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0YXRlLmJsb2NrKCktPnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGkpOwotICAg
ICAgICBzZWVuLmFkZChub2RlKTsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JO
b2RlKG5vZGUpOwotICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZSwgIjoiLCB2YWx1ZSk7CisgICAg
ICAgIE5vZGVGbG93UHJvamVjdGlvbjo6Zm9yRWFjaCgKKyAgICAgICAgICAgIG5vZGUsIFsmXSAo
Tm9kZUZsb3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgc2Vl
bi5hZGQobm9kZVByb2plY3Rpb24pOworICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlUHJvamVjdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVl
LmlzQ2xlYXIoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBub2RlUHJvamVjdGlvbiwgIjoiLCB2YWx1ZSk7CisgICAgICAg
ICAgICB9KTsKICAgICB9CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFpbCkgewor
ICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5z
c2EtPmxpdmVBdFRhaWwpIHsKICAgICAgICAgICAgIGlmIChzZWVuLmNvbnRhaW5zKG5vZGUpKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDgyOTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywxMiArNDcsMTIgQEAgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6QXRUYWls
QWJzdHJhY3RTdGF0ZQogCiBBdFRhaWxBYnN0cmFjdFN0YXRlOjp+QXRUYWlsQWJzdHJhY3RTdGF0
ZSgpIHsgfQogCi12b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShO
b2RlKiBub2RlKQordm9pZCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVWYWx1ZUZvck5vZGUo
Tm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiB7CiAgICAgbV92YWx1ZXNBdFRhaWxNYXAuYXQobV9i
bG9jaykuYWRkKG5vZGUsIEFic3RyYWN0VmFsdWUoKSk7CiB9CiAKLUFic3RyYWN0VmFsdWUmIEF0
VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZSogbm9kZSkKK0Fic3RyYWN0VmFsdWUmIEF0
VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiB7CiAg
ICAgYXV0byYgdmFsdWVzQXRUYWlsID0gbV92YWx1ZXNBdFRhaWxNYXAuYXQobV9ibG9jayk7CiAg
ICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSB2YWx1ZXNB
dFRhaWwuZmluZChub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRl
ICJERkdCbG9ja01hcC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9k
ZUZsb3dQcm9qZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsgCiAK
QEAgLTQ3LDggKzQ4LDggQEAgcHVibGljOgogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAg
fQogICAgIAotICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKTsKLSAgICBBYnN0cmFj
dFZhbHVlJiBmb3JOb2RlKE5vZGUqKTsKKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2Rl
Rmxvd1Byb2plY3Rpb24pOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9q
ZWN0aW9uKTsKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyByZXR1cm4g
Zm9yTm9kZShlZGdlLm5vZGUoKSk7IH0KICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFy
aWFibGVzKCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9CiAgICAgCkBAIC02Niw3
ICs2Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICBC
bG9ja01hcDxIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRhaWxNYXA7
CisgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlRmxvd1Byb2plY3Rpb24sIEFic3RyYWN0VmFsdWU+
PiBtX3ZhbHVlc0F0VGFpbE1hcDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgog
I2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIu
aCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xv
YmJlclN0YXRlLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKQEAgLTI0OCwxMiArMjQ5LDggQEAg
c3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBBdmFpbGFi
aWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRIZWFkOwogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZh
aWxhYmlsaXR5QXRUYWlsOwogCi0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0SGVhZDsKLSAg
ICAgICAgVmVjdG9yPE5vZGUqPiBsaXZlQXRUYWlsOwotICAgICAgICBzdHJ1Y3QgTm9kZUFic3Ry
YWN0VmFsdWVQYWlyIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAgICAgICBBYnN0
cmFjdFZhbHVlIHZhbHVlOwotICAgICAgICB9OworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9q
ZWN0aW9uPiBsaXZlQXRIZWFkOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiBs
aXZlQXRUYWlsOwogICAgICAgICBWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiB2YWx1ZXNB
dEhlYWQ7CiAgICAgICAgIFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZhbHVlc0F0VGFp
bDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVk
TGl2ZW5lc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29tYmluZWRMaXZlbmVzcy5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4
LDggKzM4LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIEhhc2hTZXQ8Tm9k
ZSo+IGxpdmVOb2Rlc0F0SGVhZChHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJsb2NrKQogewog
ICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47Ci0gICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNz
YS0+bGl2ZUF0SGVhZCkKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgZm9yIChOb2RlRmxv
d1Byb2plY3Rpb24gbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgaWYg
KG5vZGUua2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeSkKKyAgICAgICAgICAg
IHNlZW4uYWRkKG5vZGUubm9kZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQXZhaWxhYmlsaXR5TWFw
JiBhdmFpbGFiaWxpdHlNYXAgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CiAgICAg
Z3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAkocmV2aXNpb24gMjA4Mjk0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzUsNiArMzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Ly8gUmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIGxpdmUgYXQgdGFpbCwgYm90aCBkdWUgdG8gZHVl
IERGRyBhbmQgZHVlIHRvIGJ5dGVjb2RlIChpLmUuIE9TUiBleGl0KS4KIEhhc2hTZXQ8Tm9kZSo+
IGxpdmVOb2Rlc0F0SGVhZChHcmFwaCYsIEJhc2ljQmxvY2sqKTsKIAorLy8gV0FSTklORzogVGhp
cyBjdXJyZW50bHkgZG9lcyBub3QgcmVhc29uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiBzaGFkb3cg
dmFsdWVzLiBUaGUgZXhlY3V0aW9uCisvLyBzZW1hbnRpY3Mgb2YgREZHIFNTQSBhcmUgdGhhdCBh
biBVcHNpbG9uIHN0b3JlcyB0byB0aGUgc2hhZG93IHZhbHVlIG9mIGEgUGhpLCBhbmQgdGhlIFBo
aSBsb2FkcworLy8gZnJvbSB0aGF0IHNoYWRvdyB2YWx1ZS4gSGVuY2UsIHRoZSBzaGFkb3cgdmFs
dWVzIGFyZSBsaWtlIHZhcmlhYmxlcywgYW5kIGhhdmUgbGl2ZW5lc3MuIFRoZSBub3JtYWwKKy8v
IGxpdmVuZXNzIGFuYWx5c2lzIHdpbGwgdGVsbCB5b3UgYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHNo
YWRvdyB2YWx1ZXMuIEl0J3MgT0sgdG8gaWdub3JlIHNoYWRvdworLy8gdmFsdWVzIGlmIHlvdSB0
cmVhdCBVcHNpbG9uIGFzIGFuIG9wYXF1ZSBlc2NhcGUsIGFuZCBhbGwgb2YgdGhlIGNsaW5ldHMg
b2YgQ29tYmluZWRMaXZlbmVzcyBkbyBzby4KIHN0cnVjdCBDb21iaW5lZExpdmVuZXNzIHsKICAg
ICBDb21iaW5lZExpdmVuZXNzKCkgeyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Zsb3dJbmRleGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Rmxvd0luZGV4aW5nOjpGbG93SW5kZXhpbmcoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChn
cmFwaCkKKyAgICAsIG1fbnVtSW5kaWNlcygwKQoreworICAgIHJlY29tcHV0ZSgpOworfQorCitG
bG93SW5kZXhpbmc6On5GbG93SW5kZXhpbmcoKQoreworfQorCit2b2lkIEZsb3dJbmRleGluZzo6
cmVjb21wdXRlKCkKK3sKKyAgICBtX25vZGVJbmRleFRvU2hhZG93SW5kZXgucmVzaXplKGdyYXBo
Lm1heE5vZGVDb3VudCgpKTsKKyAgICBtX25vZGVJbmRleFRvU2hhZG93SW5kZXguZmlsbChVSU5U
X01BWCk7CisKKyAgICB1bnNpZ25lZCBudW1Ob2RlSW5kaWNlcyA9IG1fZ3JhcGgubWF4Tm9kZUNv
dW50KCk7CisgICAgbV9udW1JbmRpY2VzID0gbnVtTm9kZUluZGljZXM7CisKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ICE9IFBoaSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgdW5zaWduZWQgbm9kZUluZGV4ID0gbm9kZS0+aW5kZXgoKTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIHNoYWRvd0luZGV4ID0gbV9udW1JbmRpY2VzKys7CisgICAgICAgICAgICBtX25vZGVJ
bmRleFRvU2hhZG93SW5kZXhbbm9kZUluZGV4XSA9IHNoYWRvd0luZGV4OworICAgICAgICAgICAg
bV9zaGFkb3dJbmRleFRvTm9kZUluZGV4LmFwcGVuZChub2RlSW5kZXgpOworICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXguc2l6
ZSgpICsgbnVtTm9kZUluZGljZXMgPT0gbV9udW1JbmRpY2VzKTsKKyAgICAgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9zaGFkb3dJbmRleFRvTm9kZUluZGV4W3NoYWRvd0lu
ZGV4XSA9PSBub2RlSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlUHJvamVjdGlvbi5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gbm9k
ZXMgdG8gdW5pcXVlLCBkZW5zZSBpbmRpY2VzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNyZWF0aW5n
IGZhc3QKKy8vIE5vZGUta2V5ZWQgbWFwcy4gVGhlIHNwZWNpYWwgcGFydCBpcyB0aGF0IGl0IGFs
c28gYWxsb2NhdGVkIGluZGljZXMgZm9yIHRoZSBzaGFkb3cgdmFsdWVzIG9mIFBoaQorLy8gbm9k
ZXMsIHdoaWNoIGlzIG5lZWRlZCBmb3IgYW55IGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lzLgorY2xh
c3MgRmxvd0luZGV4aW5nIHsKK3B1YmxpYzoKKyAgICBGbG93SW5kZXhpbmcoR3JhcGgmKTsKKyAg
ICB+Rmxvd0luZGV4aW5nKCk7CisgICAgCisgICAgdm9pZCByZWNvbXB1dGUoKTsKKyAgICAKKyAg
ICBHcmFwaCYgZ3JhcGgoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoOyB9CisgICAgCisgICAgdW5z
aWduZWQgbnVtSW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtSW5kaWNlczsgfQorICAgIAor
ICAgIHVuc2lnbmVkIGluZGV4KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gbm9k
ZUluZGV4OyB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgoTm9kZSogbm9kZSkgY29uc3QgeyBy
ZXR1cm4gaW5kZXgobm9kZS0+aW5kZXgoKSk7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaGFkb3dJ
bmRleCh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9u
b2RlSW5kZXhUb1NoYWRvd0luZGV4W25vZGVJbmRleF07CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIHNoYWRvd0luZGV4KE5vZGUqIG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAgICAgICAgcmV0dXJuIHNo
YWRvd0luZGV4KG5vZGUtPmluZGV4KCkpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRl
eCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgTm9kZUZsb3dQ
cm9qZWN0aW9uOjpQcmltYXJ5OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4KG5vZGVJbmRleCk7
CisgICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3c6CisgICAgICAgICAgICBy
ZXR1cm4gc2hhZG93SW5kZXgobm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgaW5kZXgoTm9kZSAqbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtp
bmQpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBO
b2RlRmxvd1Byb2plY3Rpb246OlByaW1hcnk6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgobm9k
ZSk7CisgICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3c6CisgICAgICAgICAg
ICByZXR1cm4gc2hhZG93SW5kZXgobm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAg
IE5vZGVGbG93UHJvamVjdGlvbiBub2RlUHJvamVjdGlvbih1bnNpZ25lZCBpbmRleCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IG1fc2hhZG93TWFwLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBOb2RlRmxvd1Byb2plY3Rpb24obV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAg
ICAgICAgcmV0dXJuIE5vZGVGbG93UHJvamVjdGlvbigKKyAgICAgICAgICAgIG1fZ3JhcGgubm9k
ZUF0KG1fc2hhZG93SW5kZXhUb05vZGVJbmRleFtpbmRleCAtIG1fc2hhZG93TWFwLnNpemUoKV0p
LAorICAgICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOworICAgIH0KKyAgICAK
K3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgdW5zaWduZWQgbV9udW1JbmRpY2Vz
OworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbm9kZUlu
ZGV4VG9TaGFkb3dJbmRleDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92
ZXJmbG93PiBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRmxvd0luZGV4aW5n
LmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBu
b2RlcyB0byB2YWx1ZXMgdGhhdCBpcyB1c2VmdWwgZm9yIGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lz
LiBJbiBzdWNoIGFuCisvLyBhbmFseXNpcywgYXQgZXZlcnkgcG9pbnQgaW4gdGhlIHByb2dyYW0g
d2UgbmVlZCB0byBjb25zaWRlciB0aGUgdmFsdWVzIG9mIG5vZGVzIHBsdXMgdGhlIHNoYWRvdwor
Ly8gdmFsdWVzIG9mIFBoaXMuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBkbyBib3RoIG9mIHRob3Nl
IHRoaW5ncy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBGbG93TWFwIHsKK3B1YmxpYzoK
KyAgICBGbG93TWFwKEZsb3dJbmRleCYgaW5kZXhpbmcpCisgICAgICAgIDogbV9pbmRleGluZyhp
bmRleGluZykKKyAgICB7CisgICAgICAgIHJlY29tcHV0ZSgpOworICAgIH0KKyAgICAKKyAgICAv
LyBDYWxsIHRoaXMgYWZ0ZXIgeW91IGhhdmUgcmVjb21wdXRlZCB0aGUgaW5kZXhpbmcgdG8gd2hp
Y2ggdGhpcyBpcyBzbGF2ZWQuIFRoaXMgYWxzbyByZXNldHMgdGhlCisgICAgLy8gY29udGVudHMg
b2YgdGhlIGRhdGEgc3RydWN0dXJlLgorICAgIHZvaWQgcmVjb21wdXRlKCkKKyAgICB7CisgICAg
ICAgIG1fbWFwLnJlc2l6ZShtX2luZGV4aW5nLm51bUluZGljZXMoKSk7CisgICAgICAgIG1fbWFw
LmZpbGwoVCgpKTsKKyAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleGluZy5ncmFwaCgpOyB9CisgICAgCisgICAgVCYgYXQodW5zaWduZWQgbm9kZUlu
ZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW25vZGVJbmRleF07CisgICAgfQorICAg
IAorICAgIFQmIGF0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS0+
aW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFttX2luZGV4aW5nLnNoYWRvd0luZGV4KG5v
ZGVJbmRleCldOworICAgIH0KKyAgICAKKyAgICBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5kZXhpbmcuc2hhZG93SW5kZXgobm9kZSldOwor
ICAgIH0KKyAgICAKKyAgICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVj
dGlvbjo6a2luZCBraW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5kZXhpbmcu
aW5kZXgobm9kZUluZGV4LCBraW5kKV07CisgICAgfQorICAgIAorICAgIFQmIGF0KE5vZGUqIG5v
ZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6a2luZCBraW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbWFwW21faW5kZXhpbmcuaW5kZXgobm9kZSwga2luZCldOworICAgIH0KKyAgICAKKyAgICBj
b25zdCBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlSW5kZXgpOyB9CisgICAgY29uc3QgVCYgYXQoTm9kZSog
bm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUp
OyB9CisgICAgY29uc3QgVCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZUluZGV4KTsgfQor
ICAgIGNvbnN0IFQmIGF0U2hhZG93KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8Rmxvd01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2RlKTsgfQorICAgIGNvbnN0IFQmIGF0KHVu
c2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlSW5kZXgsIGtpbmQpOyB9
CisgICAgY29uc3QgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtp
bmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlLCBr
aW5kKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBGbG93SW5kZXhpbmcmIG1faW5kZXhpbmc7Cisg
ICAgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX21hcDsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSlNDOjpE
Rkc6OkZsb3dNYXA8VD4mIG1hcCkKK3sKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hcC5ncmFwaCgpLm1heE5vZGVDb3VudCgpOyArK2kpIHsK
KyAgICAgICAgaWYgKE5vZGUqIG5vZGUgPSBtYXAuZ3JhcGgoKS5ub2RlQXQoaSkpIHsKKyAgICAg
ICAgICAgIGlmIChjb25zdCBUJiB2YWx1ZSA9IG1hcC5hdChub2RlKSkKKyAgICAgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIG5vZGUsICI9PiIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFwLmdyYXBoKCkubWF4Tm9kZUNvdW50KCk7
ICsraSkgeworICAgICAgICBpZiAoTm9kZSogbm9kZSA9IG1hcC5ncmFwaCgpLm5vZGVBdChpKSkg
eworICAgICAgICAgICAgaWYgKGNvbnN0IFQmIHZhbHVlID0gbWFwLmF0U2hhZG93KG5vZGUpKQor
ICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgInNoYWRvdygiLCBub2RlLCAiKT0+Iiwg
dmFsdWUpOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmNwcAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDggQEAgR3JhcGg6Okdy
YXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogICAgICwgbV9mb3JtKExvYWRTdG9yZSkK
ICAgICAsIG1fdW5pZmljYXRpb25TdGF0ZShMb2NhbGx5VW5pZmllZCkKICAgICAsIG1fcmVmQ291
bnRTdGF0ZShFdmVyeXRoaW5nSXNMaXZlKQorICAgICwgbV9pbmRleGluZ0NhY2hlKHN0ZDo6bWFr
ZV91bmlxdWU8Rmxvd0luZGV4aW5nPigqdGhpcykpCisgICAgLCBtX2Fic3RyYWN0VmFsdWVzQ2Fj
aGUoc3RkOjptYWtlX3VuaXF1ZTxGbG93TWFrZTxBYnN0cmFjdFZhbHVlPj4oKm1faW5kZXhpbmdD
YWNoZSkpCiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5
LDggQEAgY2xhc3MgQmFja3dhcmRzRG9taW5hdG9yczsKIGNsYXNzIENGRzsKIGNsYXNzIENvbnRy
b2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogY2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIEZsb3dJbmRl
eGluZzsKK2NsYXNzIEZsb3dNYXA7CiBjbGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBQcmVQb3N0
TnVtYmVyaW5nOwogCkBAIC0yMDEsOCArMjAzLDYgQEAgcHVibGljOgogICAgIE5vZGUqIG5vZGVB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc0J5SW5kZXhbaW5kZXhdOyB9
CiAgICAgdm9pZCBwYWNrTm9kZUluZGljZXMoKTsKIAotICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVl
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGFic3RyYWN0VmFsdWVzQ2FjaGUoKSB7IHJldHVy
biBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7IH0KLQogICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAK
ICAgICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUpOyAvLyBXZSB1c2Ugd2VhayBmcmVlemlu
ZyBieSBkZWZhdWx0LgpAQCAtOTcyLDcgKzk3Miw4IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8
Tm9kZSosIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVzQnlJbmRleDsKICAgICBWZWN0
b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVJbmRleEZyZWVMaXN0
OwotICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9h
YnN0cmFjdFZhbHVlc0NhY2hlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93SW5kZXhpbmc+IG1f
aW5kZXhpbmdDYWNoZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd01hcDxBYnN0cmFjdFZhbHVl
Pj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw4IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogSW5QbGFj
ZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6
IG1fZ3JhcGgoZ3JhcGgpCi0gICAgLCBtX2Fic3RyYWN0VmFsdWVzKGdyYXBoLmFic3RyYWN0VmFs
dWVzQ2FjaGUoKSkKKyAgICAsIG1faW5kZXhpbmcoKmdyYXBoLm1faW5kZXhpbmdDYWNoZSkKKyAg
ICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKICAgICAs
IG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgu
bV9sb2NhbFZhcnMpCiAgICAgLCBtX2Jsb2NrKDApCiB7CkBAIC01Nyw5ICs1OCw4IEBAIHZvaWQg
SW5QbGFjZUFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG8KICAgICBBU1NFUlQoYmFzaWNCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFsdWVz
QXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwogICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bnVtYmVyT2ZMb2NhbHMoKSk7CiAKLSAgICAvLyBDZXJ0YWluIHBoYXNlcyBpbnNlcnQgbm9kZXMg
aW4gYSBibG9jayBhZnRlciBydW5uaW5nIHRocm91Z2ggaXQuCi0gICAgLy8gV2UgY2Fubm90IHJl
c2VydmUgdGhlIHNwYWNlIGZvciBBYnN0cmFjdFZhbHVlcyB3aGVuIGluaXRpYWxpemluZyBBYnN0
cmFjdFN0YXRlIGJlY2F1c2UgdGhlIG51bWJlciBvZiB2YWx1ZXMKLSAgICAvLyBjYW4gaW5jcmVh
c2UgYXMgd2UgZXhlY3V0ZS4gSW5zdGVhZCwgd2UgaW5jcmVhc2UgdGhlIHNpemUgYXMgbmVlZGVk
IGJlZm9yZSBwcm9jZXNzaW5nIGVhY2ggYmxvY2suCisgICAgbV9pbmRleGluZy5yZWNvbXB1dGUo
KTsKKyAgICBtX2Fic3RyYWN0VmFsdWVzLnJlY29tcHV0ZSgpOwogICAgIG1fYWJzdHJhY3RWYWx1
ZXMucmVzaXplKG1fZ3JhcGgubWF4Tm9kZUNvdW50KCkpOwogICAgIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgpOyBpKyspCkBAIC0xOTksNyArMTk5LDcgQEAg
Ym9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jawogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdFRhaWwuc2l6ZSgpOyArK2kpCiAgICAgICAg
ICAgICBibG9jay0+dmFsdWVzQXRUYWlsW2ldLm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKIAotICAg
ICAgICBmb3IgKGF1dG8mIHZhbHVlQXRUYWlsIDogYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKSB7
CisgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiB2YWx1ZUF0VGFpbCA6IGJsb2Nr
LT5zc2EtPnZhbHVlc0F0VGFpbCkgewogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWVB
dE5vZGUgPSBmb3JOb2RlKHZhbHVlQXRUYWlsLm5vZGUpOwogICAgICAgICAgICAgdmFsdWVBdFRh
aWwudmFsdWUubWVyZ2UodmFsdWVBdE5vZGUpOwogICAgICAgICAgICAgdmFsdWVBdE5vZGUgPSB2
YWx1ZUF0VGFpbC52YWx1ZTsKQEAgLTI5MSwxMyArMjkxLDEzIEBAIGJvb2wgSW5QbGFjZUFic3Ry
YWN0U3RhdGU6Om1lcmdlKEJhc2ljQmwKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZyb20tPnZh
bHVlc0F0VGFpbC5zaXplKCk7IGktLTspCiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRvLT52YWx1
ZXNBdEhlYWRbaV0ubWVyZ2UoZnJvbS0+dmFsdWVzQXRUYWlsW2ldKTsKIAotICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogdG8tPnNzYS0+dmFsdWVzQXRIZWFkKSB7Ci0gICAgICAgICAgICBOb2Rl
KiBub2RlID0gZW50cnkubm9kZTsKKyAgICAgICAgZm9yIChOb2RlQWJzdHJhY3RWYWx1ZVBhaXIm
IGVudHJ5IDogdG8tPnNzYS0+dmFsdWVzQXRIZWFkKSB7CisgICAgICAgICAgICBOb2RlRmxvd1By
b2plY3Rpb24gbm9kZSA9IGVudHJ5Lm5vZGU7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBNZXJnaW5nIGZvciAiLCBub2RlLCAiOiBmcm9t
ICIsIGZvck5vZGUobm9kZSksICIgdG8gIiwgZW50cnkudmFsdWUsICJcbiIpOwogI2lmbmRlZiBO
REVCVUcKICAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlQ291bnRJbkZyb21CbG9jayA9IDA7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIGZyb21CbG9ja1ZhbHVlQXRUYWlsIDogZnJvbS0+c3NhLT52
YWx1ZXNBdFRhaWwpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiBm
cm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZyb20tPnNzYS0+dmFsdWVzQXRUYWlsKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGZyb21CbG9ja1ZhbHVlQXRUYWlsLm5vZGUgPT0gbm9kZSkgewogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoZnJvbUJsb2NrVmFsdWVBdFRhaWwudmFsdWUgPT0gZm9yTm9k
ZShub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICsrdmFsdWVDb3VudEluRnJvbUJsb2NrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw5ICs0NSw5
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKikgeyB9
CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKiBub2RlKQorICAgIEFic3Ry
YWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9hYnN0cmFjdFZhbHVlc1tub2RlLT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJu
IG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoRWRnZSBlZGdlKQpAQCAtMTMyLDcgKzEzMiw4IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+JiBtX2Fic3RyYWN0VmFsdWVzOworICAgIEZsb3dJbmRleGluZyYg
bV9pbmRleGluZzsKKyAgICBGbG93TWFwPEFic3RyYWN0VmFsdWU+JiBtX2Fic3RyYWN0VmFsdWVz
OwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fdmFyaWFibGVzOwogICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgyOTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxv
Y2tJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAi
REZHRmxvd0luZGV4aW5nLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJ
bnNlcnRpb25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgpAQCAtNDQsMTAgKzQ1LDEyIEBA
IHB1YmxpYzoKICAgICBMaXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAg
ICA6IFBoYXNlKGdyYXBoLCAibGl2ZW5lc3MgYW5hbHlzaXMiKQogICAgICAgICAsIG1fZGlydHlC
bG9ja3MobV9ncmFwaC5udW1CbG9ja3MoKSkKKyAgICAgICAgLCBtX2luZGV4aW5nKCptX3JhcGgu
bV9pbmRleGluZ0NhY2hlKQogICAgICAgICAsIG1fbGl2ZUF0SGVhZChtX2dyYXBoKQogICAgICAg
ICAsIG1fbGl2ZUF0VGFpbChtX2dyYXBoKQotICAgICAgICAsIG1fd29ya3NldChncmFwaC5tYXhO
b2RlQ291bnQoKSAtIDEpCiAgICAgeworICAgICAgICBtX2dyYXBoLm1faW5kZXhpbmdDYWNoZS0+
cmVjb21wdXRlKCk7CisgICAgICAgIG1fd29ya3NldCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5kZXhT
cGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+PihtX2dyYXBoLm1faW5kZXhpbmdDYWNoZS0+
bnVtSW5kaWNlcygpKTsKICAgICB9CiAKICAgICBib29sIHJ1bigpCkBAIC04NSw3ICs4OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2l6ZSgwKTsKICAgICAgICAg
ICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkSW5kaWNlcy5zaXpl
KCkpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBsaXZlQXRIZWFkSW5k
aWNlcykKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRBcHBlbmQobV9n
cmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNo
ZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVjdGlvbihpbmRleCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVBdFRh
aWxJbmRpY2VzID0gbV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdOwpAQCAtOTMsNyArOTYsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5yZXNpemUoMCk7CiAgICAgICAgICAg
ICAgICAgbGl2ZUF0VGFpbC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0VGFpbEluZGljZXMuc2l6ZSgp
KTsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbV9saXZlQXRUYWlsW2Js
b2NrSW5kZXhdKQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnVuY2hlY2tlZEFwcGVu
ZChtX2dyYXBoLm5vZGVBdChpbmRleCkpOworICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWls
LnVuY2hlY2tlZEFwcGVuZChtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTA2LDY3ICsxMDksNTYgQEAgcHJpdmF0ZToKICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGJsb2NrLCAiT25seSBkaXJ0eSBibG9ja3MgbmVlZHMg
dXBkYXRlcy4gQSBudWxsIGJsb2NrIHNob3VsZCBuZXZlciBiZSBkaXJ0eS4iKTsKIAotICAgICAg
ICBtX3dvcmtzZXQuY2xlYXIoKTsKKyAgICAgICAgbV93b3Jrc2V0LT5jbGVhcigpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdKQotICAgICAg
ICAgICAgbV93b3Jrc2V0LmFkZChpbmRleCk7CisgICAgICAgICAgICBtX3dvcmtzZXQtPmFkZChp
bmRleCk7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgp
OyBub2RlSW5kZXgtLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKIAotICAgICAgICAgICAgLy8gR2l2ZW4gYW4gVXBzaWxvbjoKLSAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAvLyAgICBuOiBVcHNpbG9uKEB4LCBecCkKLSAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAcCBhbmQgQG4gYW5kIHVzZXMg
QHguCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gR2l2ZW4gYSBQaGk6Ci0gICAgICAg
ICAgICAvLwotICAgICAgICAgICAgLy8gICAgcDogUGhpKCkKLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyBXZSBzYXkgbm90aGluZy4gSXQncyBuZWl0aGVyIGEgdXNlIG5vciBhIGRlZi4K
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBHaXZlbiBhIG5vZGU6Ci0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gICAgbjogVGhpbmd5KEBhLCBAYiwgQGMpCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQG4gYW5kIHVzZXMgQGEs
IEBiLCBAYy4KLSAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
CiAgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfV0lU
SF9NRVNTQUdFKCFtX3dvcmtzZXQuY29udGFpbnMobm9kZS0+aW5kZXgoKSksICJVcHNpbG9uIHNo
b3VsZCBub3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVyIG5vZGVzLiIpOworICAgICAgICAgICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1fd29ya3NldC0+Y29udGFpbnMobm9kZS0+aW5kZXgo
KSksICJVcHNpbG9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVyIG5vZGVzLiIp
OwogCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7Ci0gICAgICAgICAg
ICAgICAgbV93b3Jrc2V0LnJlbW92ZShwaGktPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1f
d29ya3NldC5hZGQobm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgIG1f
d29ya3NldC0+cmVtb3ZlKG1faW5kZXhpbmcuc2hhZG93SW5kZXgocGhpKSk7CisgICAgICAgICAg
ICAgICAgbV93b3Jrc2V0LT5hZGQobV9pbmRleGluZy5pbmRleChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgUGhpOiB7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5yZW1vdmUobV9pbmRleGlu
Zy5pbmRleChub2RlKSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5hZGQobV9pbmRleGlu
Zy5zaGFkb3dJbmRleChub2RlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fd29ya3NldC5yZW1v
dmUobm9kZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERS
RU4obV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRVc2UpOworICAgICAgICAgICAgICAgIG1fd29ya3Nl
dC0+cmVtb3ZlKG1faW5kZXhpbmcuaW5kZXgobm9kZSkpOworICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZG9Ub0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBbJl0gKEVkZ2UmIGVk
Z2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmV3RW50cnkgPSBtX3dvcmtzZXQt
PmFkZChtX2luZGV4aW5nLmluZGV4KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBlZGdlLnNldEtpbGxTdGF0dXMobmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3ROaWxs
KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgbGl2ZSBhdCBoZWFkLgot
ICAgICAgICBhdXRvJiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOwotICAg
ICAgICBpZiAobV93b3Jrc2V0LnNpemUoKSA9PSBsaXZlQXRIZWFkLnNpemUoKSkKKyAgICAgICAg
VmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4mIGxpdmVBdEhlYWQg
PSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF07CisgICAgICAgIGlmIChtX3dvcmtzZXQtPnNpemUo
KSA9PSBsaXZlQXRIZWFkLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGxpdmVJbmRleEF0SGVhZCA6IGxpdmVBdEhlYWQpCi0gICAgICAg
ICAgICBtX3dvcmtzZXQucmVtb3ZlKGxpdmVJbmRleEF0SGVhZCk7Ci0gICAgICAgIEFTU0VSVCgh
bV93b3Jrc2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShsaXZl
SW5kZXhBdEhlYWQpOworICAgICAgICBBU1NFUlQoIW1fd29ya3NldC0+aXNFbXB0eSgpKTsKIAot
ICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkLnNpemUoKSArIG1f
d29ya3NldC5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jr
c2V0KQorICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkLnNpemUo
KSArIG1fd29ya3NldC0+c2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6
ICptX3dvcmtzZXQpCiAgICAgICAgICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVuZChuZXdW
YWx1ZSk7CiAKICAgICAgICAgYm9vbCBjaGFuZ2VkUHJlZGVjZXNzb3IgPSBmYWxzZTsKICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsK
LSAgICAgICAgICAgIGF1dG8mIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3Jd
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6IG1fd29ya3NldCkgeworICAg
ICAgICAgICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBX
VEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4mCisgICAgICAgICAg
ICAgICAgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogKm1fd29ya3NldCkgewogICAgICAgICAgICAgICAg
IGlmIChsaXZlQXRUYWlsLmFkZChuZXdWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX2RpcnR5QmxvY2tzLnF1aWNrU2V0KHByZWRlY2Vzc29yLT5pbmRleCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFuZ2VkUHJlZGVjZXNzb3IgPSB0cnVlOwpAQCAtMTc2LDIxICsxNjgs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGNoYW5nZWRQcmVkZWNlc3NvcjsKICAgICB9
CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2Up
Ci0gICAgewotICAgICAgICBib29sIG5ld0VudHJ5ID0gbV93b3Jrc2V0LmFkZChlZGdlLT5pbmRl
eCgpKTsKLSAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG5ld0VudHJ5ID8gRG9lc0tpbGwgOiBE
b2VzTm90S2lsbCk7Ci0gICAgfQotCiAgICAgLy8gQmxvY2tzIHdpdGggbmV3IGxpdmUgdmFsdWVz
IGF0IHRhaWwuCiAgICAgQml0VmVjdG9yIG1fZGlydHlCbG9ja3M7CisgICAgCisgICAgRmxvd0lu
ZGV4aW5nJiBtX2luZGV4aW5nOwogCiAgICAgLy8gTGl2ZSB2YWx1ZXMgcGVyIGJsb2NrIGVkZ2Uu
CiAgICAgQmxvY2tNYXA8VmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywg
MT4+IG1fbGl2ZUF0SGVhZDsKICAgICBCbG9ja01hcDxIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0
SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dW5zaWduZWQ+Pj4gbV9saXZlQXRUYWlsOwogCiAgICAgLy8gU2luZ2xlIHNwYXJzZSBzZXQgYWxs
b2NhdGVkIG9uY2UgYW5kIHVzZWQgYnkgZXZlcnkgYmFzaWMgYmxvY2suCi0gICAgSW5kZXhTcGFy
c2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fd29ya3NldDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+PiBtX3dvcmtzZXQ7CiB9Owog
CiBib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUyOSw3ICsyNTI5
LDggQEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIG93bmVyOwogfTsKIAotaW5saW5lIGJvb2wg
bm9kZUNvbXBhcmF0b3IoTm9kZSogYSwgTm9kZSogYikKK3RlbXBsYXRlPHR5cGVuYW1lIE5vZGVQ
dHJUeXBlPgoraW5saW5lIGJvb2wgbm9kZUNvbXBhcmF0b3IoTm9kZVB0clR5cGUgYSwgTm9kZVB0
clR5cGUgYikKIHsKICAgICByZXR1cm4gYS0+aW5kZXgoKSA8IGItPmluZGV4KCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RW
YWx1ZVBhaXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K3ZvaWQgTm9kZUFic3RyYWN0VmFsdWVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KG5vZGUsICI9PiIsIHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0
cmFjdFZhbHVlUGFpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNs
dWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitzdHJ1Y3QgTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsKKyAgICBOb2RlQWJzdHJh
Y3RWYWx1ZVBhaXIoKSB7IH0KKyAgICAKKyAgICBOb2RlQWJzdHJhY3RWYWx1ZVBhaXIoTm9kZUZs
b3dQcm9qZWN0aW9uIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgICAgICA6
IG5vZGUobm9kZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBOb2RlRmxv
d1Byb2plY3Rpb24gbm9kZTsKKyAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlv
bi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlRmxv
d1Byb2plY3Rpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0
aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiLSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChraW5kKCkgPT0gUHJpbWFyeSkgeworICAgICAgICBvdXQucHJpbnQobm9kZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KCJzaGFkb3coIiwgbm9kZSwgIiki
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9q
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTm9kZUZsb3dQcm9qZWN0aW9uIHsK
K3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBQcmltYXJ5LAorICAgICAgICBTaGFk
b3cKKyAgICB9OworICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbigpIHsgfQorICAgIAorICAg
IE5vZGVGbG93UHJvamVjdGlvbihOb2RlKiBub2RlKQorICAgICAgICA6IG1fd29yZChiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihub2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGVGbG93
UHJvamVjdGlvbihOb2RlKiBub2RlLCBLaW5kIGtpbmQpCisgICAgICAgIDogbV93b3JkKGJpdHdp
c2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIHwgKGtpbmQgPT0gU2hhZG93ID8gc2hhZG93Qml0IDog
MCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fd29yZChzaGFkb3dCaXQpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gISFtX3dvcmQ7IH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiAobV93
b3JkICYgc2hhZG93Qml0KSA/IFNoYWRvdyA6IFByaW1hcnk7IH0KKyAgICAKKyAgICBOb2RlKiBu
b2RlKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX3dvcmQgJiB+c2hhZG93
Qml0KTsgfQorICAgIAorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgKm5vZGUoKTsgfQor
ICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBub2RlKCk7IH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dvcmQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShOb2RlRmxvd1Byb2plY3Rpb24gb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93b3JkID09IG90aGVyLm1fd29yZDsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KE5vZGVGbG93UHJvamVjdGlvbiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV93b3JkID09IE5vZGVGbG93UHJvamVjdGlvbihXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgdm9pZCBmb3JFYWNo
KE5vZGUqIG5vZGUsIGNvbnN0IEZ1bmMmIGZ1bmMpCisgICAgeworICAgICAgICBmdW5jKE5vZGVG
bG93UHJvamVjdGlvbihub2RlKSk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFBoaSkKKyAg
ICAgICAgICAgIGZ1bmMoTm9kZUZsb3dQcm9qZWN0aW9uKG5vZGUsIFNoYWRvdykpOworICAgIH0K
KyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHNoYWRvd0JpdCA9IDE7
CisgICAgICAgICAgICAgICAgIAorICAgIHVpbnRwdHJfdCBtX3dvcmQgeyAwIH07Cit9OworCitz
dHJ1Y3QgTm9kZUZsb3dQcm9qZWN0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Tm9kZUZsb3dQcm9qZWN0aW9uIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRp
YyBib29sIGVxdWFsKE5vZGVGbG93UHJvamVjdGlvbiBhLCBOb2RlRmxvd1Byb2plY3Rpb24gYikg
eyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRv
RXF1YWxPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6Ok5vZGVGbG93UHJv
amVjdGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbiBIYXNo
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb24+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb24+IHsgfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9JbmRleFNwYXJzZVNldC5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvV1RGL3d0
Zi9JbmRleFNwYXJzZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHRlbXBs
YXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlciA9IENyYXMKIGNsYXNzIEluZGV4U3BhcnNlU2V0
IHsKICAgICB0eXBlZGVmIFZlY3Rvcjx1bnNpZ25lZCwgMCwgT3ZlcmZsb3dIYW5kbGVyPiBWYWx1
ZUxpc3Q7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4
VmFsdWUpOworICAgIGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIHNpemUpOwogCiAg
ICAgYm9vbCBhZGQodW5zaWduZWQpOwogICAgIGJvb2wgcmVtb3ZlKHVuc2lnbmVkKTsKQEAgLTY1
LDkgKzY1LDkgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4KLWlubGluZSBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpJbmRleFNwYXJz
ZVNldCh1bnNpZ25lZCBtYXhWYWx1ZSkKK2lubGluZSBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hh
bmRsZXI+OjpJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBzaXplKQogewotICAgIG1fbWFwLnJlc2l6
ZShtYXhWYWx1ZSArIDEpOworICAgIG1fbWFwLnJlc2l6ZShzaXplKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293769</attachid>
            <date>2016-11-03 09:42:26 -0700</date>
            <delta_ts>2016-11-03 10:06:20 -0700</delta_ts>
            <desc>even more things compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61289</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODI5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMzAzLDYgKzMwMyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0ZhaWxlZEZpbmFsaXplci5jcHAKICAgICBkZmcvREZHRmluYWxpemVyLmNwcAogICAgIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcAorICAgIGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwCiAgICAgZGZnL0RG
R0ZsdXNoRm9ybWF0LmNwcAogICAgIGRmZy9ERkdGbHVzaGVkQXQuY3BwCiAgICAgZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC0zMzQsNyArMzM1LDkgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAK
KyAgICBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAogICAgIGRmZy9ERkdOb2RlRmxh
Z3MuY3BwCisgICAgZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAKICAgICBkZmcvREZHTm9k
ZU9yaWdpbi5jcHAKICAgICBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
ICAgICBkZmcvREZHT1NSRW50cnkuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsx
MjksMTMgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFF
M0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJ
MEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUz
QTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBG
MUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8q
IEFib3J0UmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyMDE3N0YxRENBREMzMzAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc3RDFE
Q0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCAqLzsgfTsKKwkJMEYyMDE3ODAx
RENBREMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERG
R0Zsb3dJbmRleGluZy5oICovOyB9OworCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZH
Rmxvd01hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyMDE3ODExRENBREQ0MDAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCAqLzsgfTsKKwkJMEYyMDE3
ODUxRENBRTE0OTAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODQxRENBRTE0NzAwRUE1
OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovOyB9OworCQkwRjIwMTc4NjFEQ0FFMTRD
MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBE
RkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwICovOyB9OworCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5
NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4ODFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9k
ZUFic3RyYWN0VmFsdWVQYWlyLmggKi87IH07CisJCTBGMjAxNzhBMURDQjk0MjYwMEVBNTk1MCAv
KiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVB
YnN0cmFjdFZhbHVlUGFpci5jcHAgKi87IH07CiAJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAv
KiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5j
cHAgKi87IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdGMTRC
RUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyog
Qnl0ZWNvZGVDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0yNDkyLDYgKzI0OTksMTMgQEAKIAkJMEYxRTNBNTAxNTM3QzJDQjAw
MEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNBMjFE
RjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0gZGZn
L0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0g
ZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIw
MTc4MTFEQ0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdGbG93TWFwLmg7IHBhdGggPSBkZmcvREZHRmxvd01hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MzFEQ0FFMTQ3MDBFQTU5NTAgLyogREZH
Tm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR05vZGVGbG93UHJvamVjdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZUZsb3dQcm9q
ZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODQxRENBRTE0
NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODcx
RENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3Bw
OyBwYXRoID0gZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJh
Y3RWYWx1ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZUFi
c3RyYWN0VmFsdWVQYWlyLmg7IHBhdGggPSBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjBDMjU4MUE4MDEzQUIwMERBMzIyOSAv
KiBWaXJ0dWFsUmVnaXN0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVmlydHVhbFJlZ2lzdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
MUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0
ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRl
Y29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Njc2LDgg
KzY2OTAsNiBAQAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5o
ICovLAogCQkJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8s
CiAJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCi0JCQkJ
RTMyMkU1QTAxREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3Bw
ICovLAotCQkJCUUzMjJFNUExMURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50
UGFyYW1zLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJ
ZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rl
c2lyZWRJZGVudGlmaWVycy5oICovLAogCQkJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBE
RkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCkBAIC02NjkyLDYgKzY3MDQsOCBAQAogCQkJCTBG
NUExMjcxMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICovLAogCQkJCTBGNUExMjcy
MTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuaCAqLywKIAkJCQkwRkQ4MUFEMDE1NEZCNEVC
MDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovLAorCQkJCUUzMjJFNUEwMURBNjQ0MzUwMDZF
NzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcCAqLywKKwkJCQlFMzIyRTVBMTFE
QTY0NDM1MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oICovLAogCQkJCTBG
MUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovLAogCQkJ
CTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAogCQkJCTBGRDND
ODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKQEAgLTY3MDgsNiArNjcyMiw5
IEBACiAJCQkJQTc4QTk3NkYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oICovLAog
CQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLywKIAkJ
CQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovLAorCQkJCTBG
MjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovLAorCQkJCTBG
MjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLywKKwkJCQkwRjIw
MTc4MTFEQ0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovLAogCQkJCTBGOUQzMzk0MTdG
RkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovLAogCQkJCTBGOUQzMzk1MTdGRkM0
RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJCQlBN0Q4OUNFODE3QTBCOENDMDA3
NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwICovLApAQCAtNjc3NSw5ICs2NzkyLDEzIEBACiAJ
CQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovLAogCQkJ
CTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLywKIAkJCQk4NkVDQTNF
OTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAorCQkJCTBGMjAxNzg3MURDQjk0MjIw
MEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwICovLAorCQkJCTBGMjAxNzg4
MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCAqLywKIAkJCQkw
RkI0QjUxRjE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZUFsbG9jYXRvci5oICovLAogCQkJCTBG
QTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJCTBGQTU4
MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKKwkJCQkwRjIwMTc4MzFE
Q0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLywKKwkJCQkwRjIw
MTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggKi8sCiAJCQkJ
MEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBG
MzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgx
QjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCkBAIC03NTM3LDYgKzc1NTgs
NyBAQAogCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1
ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1
MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NjFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTMx
QzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDE1
LDYgKzg0MzcsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8q
IEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUg
LyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4NTFEQ0FFMTQ5
MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzU1NUI4QTFEQUUwM0E1MDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclBhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmlu
Z0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3MEE0NzFENTQzQThCMDA2RTcyMzIg
LyogQ2VsbENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTExLDYgKzg1MzQsNyBAQAog
CQkJCTE0MTQ0OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJENkYxMjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyogREZHTm9kZUFi
c3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBD
ODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDBBNDg1MUE5MDUx
QUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzQzBF
MTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTc3LDYg
Kzg2MDEsNyBAQAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAv
KiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9u
S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzYzLDYg
Kzk3ODgsNyBAQAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlw
dE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3NjIwNDFEQjkyNDI2MDBCN0EyRkQg
LyogQ29sbGVjdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEE3QkVGMUI4Mjk3
NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
MDE3OEExRENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZy
YW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNCQUQwMEU1NUM5OSAv
KiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4NjE4NDAzOENB
MDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTk5ODksNiArMTAwMTUsNyBAQAogCQkJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1Bo
aUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0
NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIw
MEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAx
NzdGMURDQURDMzMwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM3OTRFNzUxQjc3RUI5NzAwNTU0M0FFIC8q
IE1vZHVsZUFuYWx5emVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNTVGMzUyMUI3REM4NTMw
MEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
MDA4Niw2ICsxMDExMyw3IEBACiAJCQkJQTVGRDAwNjcxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlw
dEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA2RDE4OUIwMEFBMDA2MzMy
MzEgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDZGMTg5
QjAwQUEwMDYzMzIzMSAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYyMDE3ODYxRENBRTE0QzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUZEMDA3RDE4OUIwQjRDMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0
YWNrRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyNTE4OEVGRkZEMDAxMTBG
MTQgLyogU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1RDkzQTUx
ODUwMTJBODAwNDAwREVEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlz
aW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFw
dGVyIHsKIAogICAgIFRtcExpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAgICBzdGF0aWMg
dW5zaWduZWQgbWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5k
aWNlcyhDb2RlJiBjb2RlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUu
bnVtVG1wcyhhZGFwdGVyVHlwZSk7CiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxh
ZGFwdGVyVHlwZT46OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CkBAIC02NSw5ICs2NSw5IEBAIHN0
cnVjdCBTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXIgewogICAgIHsKICAgICB9CiAKLSAgICBzdGF0
aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVt
SW5kaWNlcyhDb2RlJiBjb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGUuc3RhY2tTbG90
cygpLnNpemUoKSAtIDE7CisgICAgICAgIHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7
CiAgICAgfQogICAgIHN0YXRpYyBib29sIGFjY2VwdHNUeXBlKEFyZzo6VHlwZSkgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCB2YWx1ZVRvSW5kZXgoU3RhY2tTbG90KiBzdGFj
a1Nsb3QpIHsgcmV0dXJuIHN0YWNrU2xvdC0+aW5kZXgoKTsgfQpAQCAtODMsOSArODMsOSBAQCBz
dHJ1Y3QgUmVnTGl2ZW5lc3NBZGFwdGVyIHsKIAogICAgIFJlZ0xpdmVuZXNzQWRhcHRlcihDb2Rl
JikgeyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYpCisgICAgc3RhdGlj
IHVuc2lnbmVkIG51bUluZGljZXMoQ29kZSYpCiAgICAgewotICAgICAgICByZXR1cm4gUmVnOjpt
YXhJbmRleCgpOworICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpICsgMTsKICAgICB9CiAK
ICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzVHlwZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0K
QEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhD
b2RlJiBjb2RlKQogICAgICAgICA6IEFkYXB0ZXIoY29kZSkKLSAgICAgICAgLCBtX3dvcmtzZXQo
QWRhcHRlcjo6bWF4SW5kZXgoY29kZSkpCisgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om51
bUluZGljZXMoY29kZSkpCiAgICAgICAgICwgbV9saXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQogICAg
ICAgICAsIG1fbGl2ZUF0VGFpbChjb2RlLnNpemUoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdC
cmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKICNpbmNsdWRlICJERkdQ
aGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MSw3
ICs0Miw3IEBAIHB1YmxpYzoKICAgICBBYnN0cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJh
Y3RTdGF0ZVR5cGUmKTsKICAgICB+QWJzdHJhY3RJbnRlcnByZXRlcigpOwogICAgIAotICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3Rh
dGUuZm9yTm9kZShub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lv
biAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MDksNiArMjgwOSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNh
c2UgUGhpOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwor
ICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwg
Tm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpKTsKICAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRo
aXMgbm9kZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUg
YmVjb21lIGEKICAgICAgICAgLy8gY29uc3RhbnQsIGluIHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRv
IGtub3cuCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLm1fdmFsdWUpCkBAIC0yODE2LDggKzI4
MTcsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFVwc2lsb246IHsKLSAgICAgICAgbV9zdGF0ZS5j
cmVhdGVWYWx1ZUZvck5vZGUobm9kZS0+cGhpKCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPnBo
aSgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBOb2RlRmxvd1Byb2plY3Rp
b24gc2hhZG93KG5vZGUtPnBoaSgpLCBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdyk7CisgICAg
ICAgIG1fc3RhdGUuY3JlYXRlVmFsdWVGb3JOb2RlKHNoYWRvdyk7CisgICAgICAgIGZvck5vZGUo
c2hhZG93KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIApAQCAtMjk2OSwxMCArMjk3MSwxNSBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgZWxzZQogICAgICAgICBjbG9iYmVyTGltaXQrKzsKICAg
ICBBU1NFUlQoY2xvYmJlckxpbWl0IDw9IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gY2xvYmJlckxpbWl0OyBpLS07KQotICAgICAgICBmdW5jdG9yKGZvck5v
ZGUobV9zdGF0ZS5ibG9jaygpLT5hdChpKSkpOworICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVy
TGltaXQ7IGktLTspIHsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKAorICAg
ICAgICAgICAgbV9zdGF0ZS5ibG9jaygpLT5hdChpKSwKKyAgICAgICAgICAgIFsmXSAoTm9kZUZs
b3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgZnVuY3Rvcihm
b3JOb2RlKG5vZGVQcm9qZWN0aW9uKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CiAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0
YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgZm9yIChOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKQogICAgICAgICAg
ICAgZnVuY3Rvcihmb3JOb2RlKG5vZGUpKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IG1f
c3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKQEAgLTMwMjksOSAr
MzAzNiw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdm9pZCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KQogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwotICAgIEhhc2hTZXQ8Tm9kZSo+IHNl
ZW47CisgICAgSGFzaFNldDxOb2RlRmxvd1Byb2plY3Rpb24+IHNlZW47CiAgICAgaWYgKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJs
b2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlv
biBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQpIHsKICAgICAgICAgICAg
IHNlZW4uYWRkKG5vZGUpOwogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JO
b2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKQEAgLTMwNDAsMTUg
KzMwNDcsMTcgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdGF0ZS5ibG9jaygp
LT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5h
dChpKTsKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUsICI6IiwgdmFs
dWUpOworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCisgICAgICAgICAgICBt
X3N0YXRlLmJsb2NrKCktPmF0KGkpLCBbJl0gKE5vZGVGbG93UHJvamVjdGlvbiBub2RlUHJvamVj
dGlvbikgeworICAgICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGVQcm9qZWN0aW9uKTsKKyAgICAg
ICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZVByb2plY3Rpb24p
OworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGVQcm9qZWN0
aW9uLCAiOiIsIHZhbHVlKTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICBpZiAobV9ncmFw
aC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc3RhdGUuYmxv
Y2soKS0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFpbCkgewogICAgICAgICAgICAg
aWYgKHNlZW4uY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5j
cHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE2ICs0NywxNiBAQCBB
dFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0YXRlCiAKIEF0VGFpbEFic3RyYWN0
U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CiAKLXZvaWQgQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIEF0VGFpbEFic3RyYWN0
U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAg
ICBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKS5hZGQobm9kZSwgQWJzdHJhY3RWYWx1ZSgp
KTsKIH0KIAotQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2Rl
KiBub2RlKQorQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2Rl
Rmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAgICBhdXRvJiB2YWx1ZXNBdFRhaWwgPSBtX3ZhbHVl
c0F0VGFpbE1hcC5hdChtX2Jsb2NrKTsKLSAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVl
Pjo6aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOwotICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgaXRlciAhPSB2YWx1ZXNBdFRhaWwuZW5kKCkpOworICAgIEhhc2hN
YXA8Tm9kZUZsb3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9IHZh
bHVlc0F0VGFpbC5maW5kKG5vZGUpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZS5ub2Rl
KCksIGl0ZXIgIT0gdmFsdWVzQXRUYWlsLmVuZCgpKTsKICAgICByZXR1cm4gaXRlci0+dmFsdWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdCbG9ja01h
cC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0
aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsgCiAKQEAgLTQ3LDggKzQ4
LDggQEAgcHVibGljOgogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgfQogICAgIAotICAg
IHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKTsKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKE5vZGUqKTsKKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rp
b24pOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKICAg
ICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyByZXR1cm4gZm9yTm9kZShlZGdl
Lm5vZGUoKSk7IH0KICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkgeyBy
ZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9CiAgICAgCkBAIC02Niw3ICs2Nyw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICBCbG9ja01hcDxIYXNo
TWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRhaWxNYXA7CisgICAgQmxvY2tN
YXA8SGFzaE1hcDxOb2RlRmxvd1Byb2plY3Rpb24sIEFic3RyYWN0VmFsdWU+PiBtX3ZhbHVlc0F0
VGFpbE1hcDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIw
ODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Jy
YW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRG
R05vZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCIKICNpbmNsdWRl
ICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgi
CiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKQEAgLTI0OCwxMiArMjQ5LDggQEAgc3RydWN0IEJhc2lj
QmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZh
aWxhYmlsaXR5QXRIZWFkOwogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRU
YWlsOwogCi0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0SGVhZDsKLSAgICAgICAgVmVjdG9y
PE5vZGUqPiBsaXZlQXRUYWlsOwotICAgICAgICBzdHJ1Y3QgTm9kZUFic3RyYWN0VmFsdWVQYWly
IHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlOwotICAgICAgICB9OworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiBsaXZl
QXRIZWFkOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiBsaXZlQXRUYWlsOwog
ICAgICAgICBWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiB2YWx1ZXNBdEhlYWQ7CiAgICAg
ICAgIFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZhbHVlc0F0VGFpbDsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDEwIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIEhhc2hTZXQ8Tm9kZSo+IGxpdmVOb2Rl
c0F0SGVhZChHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIEhhc2hTZXQ8
Tm9kZSo+IHNlZW47Ci0gICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVh
ZCkKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24g
bm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgaWYgKG5vZGUua2luZCgp
ID09IE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeSkKKyAgICAgICAgICAgIHNlZW4uYWRkKG5v
ZGUubm9kZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxp
dHlNYXAgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CiAgICAgZ3JhcGguZm9yQWxs
TG9jYWxzTGl2ZUluQnl0ZWNvZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbWJpbmVkTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
NiArMzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gUmV0dXJucyB0
aGUgc2V0IG9mIG5vZGVzIGxpdmUgYXQgdGFpbCwgYm90aCBkdWUgdG8gZHVlIERGRyBhbmQgZHVl
IHRvIGJ5dGVjb2RlIChpLmUuIE9TUiBleGl0KS4KIEhhc2hTZXQ8Tm9kZSo+IGxpdmVOb2Rlc0F0
SGVhZChHcmFwaCYsIEJhc2ljQmxvY2sqKTsKIAorLy8gV0FSTklORzogVGhpcyBjdXJyZW50bHkg
ZG9lcyBub3QgcmVhc29uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiBzaGFkb3cgdmFsdWVzLiBUaGUg
ZXhlY3V0aW9uCisvLyBzZW1hbnRpY3Mgb2YgREZHIFNTQSBhcmUgdGhhdCBhbiBVcHNpbG9uIHN0
b3JlcyB0byB0aGUgc2hhZG93IHZhbHVlIG9mIGEgUGhpLCBhbmQgdGhlIFBoaSBsb2FkcworLy8g
ZnJvbSB0aGF0IHNoYWRvdyB2YWx1ZS4gSGVuY2UsIHRoZSBzaGFkb3cgdmFsdWVzIGFyZSBsaWtl
IHZhcmlhYmxlcywgYW5kIGhhdmUgbGl2ZW5lc3MuIFRoZSBub3JtYWwKKy8vIGxpdmVuZXNzIGFu
YWx5c2lzIHdpbGwgdGVsbCB5b3UgYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHNoYWRvdyB2YWx1ZXMu
IEl0J3MgT0sgdG8gaWdub3JlIHNoYWRvdworLy8gdmFsdWVzIGlmIHlvdSB0cmVhdCBVcHNpbG9u
IGFzIGFuIG9wYXF1ZSBlc2NhcGUsIGFuZCBhbGwgb2YgdGhlIGNsaW5ldHMgb2YgQ29tYmluZWRM
aXZlbmVzcyBkbyBzby4KIHN0cnVjdCBDb21iaW5lZExpdmVuZXNzIHsKICAgICBDb21iaW5lZExp
dmVuZXNzKCkgeyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zs
b3dJbmRleGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbG93SW5kZXhpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmxvd0luZGV4aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRmxvd0luZGV4aW5n
OjpGbG93SW5kZXhpbmcoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAs
IG1fbnVtSW5kaWNlcygwKQoreworICAgIHJlY29tcHV0ZSgpOworfQorCitGbG93SW5kZXhpbmc6
On5GbG93SW5kZXhpbmcoKQoreworfQorCit2b2lkIEZsb3dJbmRleGluZzo6cmVjb21wdXRlKCkK
K3sKKyAgICBtX25vZGVJbmRleFRvU2hhZG93SW5kZXgucmVzaXplKGdyYXBoLm1heE5vZGVDb3Vu
dCgpKTsKKyAgICBtX25vZGVJbmRleFRvU2hhZG93SW5kZXguZmlsbChVSU5UX01BWCk7CisKKyAg
ICB1bnNpZ25lZCBudW1Ob2RlSW5kaWNlcyA9IG1fZ3JhcGgubWF4Tm9kZUNvdW50KCk7CisgICAg
bV9udW1JbmRpY2VzID0gbnVtTm9kZUluZGljZXM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoaSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdW5zaWdu
ZWQgbm9kZUluZGV4ID0gbm9kZS0+aW5kZXgoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNoYWRv
d0luZGV4ID0gbV9udW1JbmRpY2VzKys7CisgICAgICAgICAgICBtX25vZGVJbmRleFRvU2hhZG93
SW5kZXhbbm9kZUluZGV4XSA9IHNoYWRvd0luZGV4OworICAgICAgICAgICAgbV9zaGFkb3dJbmRl
eFRvTm9kZUluZGV4LmFwcGVuZChub2RlSW5kZXgpOworICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBudWxscHRyLCBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXguc2l6ZSgpICsgbnVtTm9k
ZUluZGljZXMgPT0gbV9udW1JbmRpY2VzKTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbnVsbHB0ciwgbV9zaGFkb3dJbmRleFRvTm9kZUluZGV4W3NoYWRvd0luZGV4XSA9PSBub2Rl
SW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIGlzIGEgbWFwcGluZyBmcm9tIG5vZGVzIHRvIHVu
aXF1ZSwgZGVuc2UgaW5kaWNlcyB0aGF0IGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZyBmYXN0Cisv
LyBOb2RlLWtleWVkIG1hcHMuIFRoZSBzcGVjaWFsIHBhcnQgaXMgdGhhdCBpdCBhbHNvIGFsbG9j
YXRlZCBpbmRpY2VzIGZvciB0aGUgc2hhZG93IHZhbHVlcyBvZiBQaGkKKy8vIG5vZGVzLCB3aGlj
aCBpcyBuZWVkZWQgZm9yIGFueSBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcy4KK2NsYXNzIEZsb3dJ
bmRleGluZyB7CitwdWJsaWM6CisgICAgRmxvd0luZGV4aW5nKEdyYXBoJik7CisgICAgfkZsb3dJ
bmRleGluZygpOworICAgIAorICAgIHZvaWQgcmVjb21wdXRlKCk7CisgICAgCisgICAgR3JhcGgm
IGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAorICAgIHVuc2lnbmVkIG51
bUluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX251bUluZGljZXM7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBpbmRleCh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIG5vZGVJbmRleDsg
fQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4KG5vZGUtPmluZGV4KCkpOyB9CisgICAgCisgICAgdW5zaWduZWQgc2hhZG93SW5kZXgodW5z
aWduZWQgbm9kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4
VG9TaGFkb3dJbmRleFtub2RlSW5kZXhdOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaGFk
b3dJbmRleChOb2RlKiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBub2RlLCBub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgIHJldHVybiBzaGFkb3dJbmRl
eChub2RlLT5pbmRleCgpKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgodW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlv
bjo6UHJpbWFyeToKKyAgICAgICAgICAgIHJldHVybiBpbmRleChub2RlSW5kZXgpOworICAgICAg
ICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIHNo
YWRvd0luZGV4KG5vZGVJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4KE5vZGUgKm5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgTm9kZUZsb3dQ
cm9qZWN0aW9uOjpQcmltYXJ5OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4KG5vZGUpOworICAg
ICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93OgorICAgICAgICAgICAgcmV0dXJu
IHNoYWRvd0luZGV4KG5vZGUpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBpbmRleChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbmRleChwcm9qZWN0aW9uLm5vZGUoKSwgcHJvamVjdGlvbi5raW5kKCkpOwor
ICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCBtX25vZGVJbmRleFRv
U2hhZG93SW5kZXguc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIE5vZGVGbG93UHJvamVjdGlv
bihtX2dyYXBoLm5vZGVBdChpbmRleCkpOworICAgICAgICByZXR1cm4gTm9kZUZsb3dQcm9qZWN0
aW9uKAorICAgICAgICAgICAgbV9ncmFwaC5ub2RlQXQobV9zaGFkb3dJbmRleFRvTm9kZUluZGV4
W2luZGV4IC0gbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LnNpemUoKV0pLAorICAgICAgICAgICAg
Tm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
R3JhcGgmIG1fZ3JhcGg7CisgICAgdW5zaWduZWQgbV9udW1JbmRpY2VzOworICAgIFZlY3Rvcjx1
bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbm9kZUluZGV4VG9TaGFkb3dJbmRl
eDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3NoYWRv
d0luZGV4VG9Ob2RlSW5kZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbG93TWFwLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbG93TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRmxvd0luZGV4aW5nLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBub2RlcyB0byB2YWx1ZXMg
dGhhdCBpcyB1c2VmdWwgZm9yIGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lzLiBJbiBzdWNoIGFuCisv
LyBhbmFseXNpcywgYXQgZXZlcnkgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2UgbmVlZCB0byBjb25z
aWRlciB0aGUgdmFsdWVzIG9mIG5vZGVzIHBsdXMgdGhlIHNoYWRvdworLy8gdmFsdWVzIG9mIFBo
aXMuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBkbyBib3RoIG9mIHRob3NlIHRoaW5ncy4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBGbG93TWFwIHsKK3B1YmxpYzoKKyAgICBGbG93TWFwKEZs
b3dJbmRleGluZyYgaW5kZXhpbmcpCisgICAgICAgIDogbV9pbmRleGluZyhpbmRleGluZykKKyAg
ICB7CisgICAgICAgIHJlY29tcHV0ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMg
YWZ0ZXIgeW91IGhhdmUgcmVjb21wdXRlZCB0aGUgaW5kZXhpbmcgdG8gd2hpY2ggdGhpcyBpcyBz
bGF2ZWQuIFRoaXMgYWxzbyByZXNldHMgdGhlCisgICAgLy8gY29udGVudHMgb2YgdGhlIGRhdGEg
c3RydWN0dXJlLgorICAgIHZvaWQgcmVjb21wdXRlKCkKKyAgICB7CisgICAgICAgIG1fbWFwLnJl
c2l6ZShtX2luZGV4aW5nLm51bUluZGljZXMoKSk7CisgICAgICAgIG1fbWFwLmZpbGwoVCgpKTsK
KyAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGlu
Zy5ncmFwaCgpOyB9CisgICAgCisgICAgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbWFwW25vZGVJbmRleF07CisgICAgfQorICAgIAorICAgIFQmIGF0
KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSk7Cisg
ICAgfQorICAgIAorICAgIFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX21hcFttX2luZGV4aW5nLnNoYWRvd0luZGV4KG5vZGVJbmRleCldOwor
ICAgIH0KKyAgICAKKyAgICBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fbWFwW21faW5kZXhpbmcuc2hhZG93SW5kZXgobm9kZSldOworICAgIH0KKyAgICAK
KyAgICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBr
aW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5kZXhpbmcuaW5kZXgobm9kZUlu
ZGV4LCBraW5kKV07CisgICAgfQorICAgIAorICAgIFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93
UHJvamVjdGlvbjo6S2luZCBraW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5k
ZXhpbmcuaW5kZXgobm9kZSwga2luZCldOworICAgIH0KKyAgICAKKyAgICBUJiBhdChOb2RlRmxv
d1Byb2plY3Rpb24gcHJvamVjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFttX2lu
ZGV4aW5nLmluZGV4KHByb2plY3Rpb24pXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCYgYXQo
dW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0
aGlzKS0+YXQobm9kZUluZGV4KTsgfQorICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlKTsgfQorICAgIGNv
bnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGVJbmRleCk7IH0KKyAgICBjb25zdCBU
JiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAq
Pih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0KKyAgICBjb25zdCBUJiBhdCh1bnNpZ25lZCBub2Rl
SW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4LCBraW5kKTsgfQorICAgIGNvbnN0
IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSwga2luZCk7IH0KKyAg
ICBjb25zdCBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KHByb2plY3Rpb24pOyB9CisgICAgCitw
cml2YXRlOgorICAgIEZsb3dJbmRleGluZyYgbV9pbmRleGluZzsKKyAgICBWZWN0b3I8VCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbWFwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBKU0M6OkRGRzo6Rmxvd01hcDxUPiYg
bWFwKQoreworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbWFwLmdyYXBoKCkubWF4Tm9kZUNvdW50KCk7ICsraSkgeworICAgICAgICBpZiAoSlND
OjpERkc6Ok5vZGUqIG5vZGUgPSBtYXAuZ3JhcGgoKS5ub2RlQXQoaSkpIHsKKyAgICAgICAgICAg
IGlmIChjb25zdCBUJiB2YWx1ZSA9IG1hcC5hdChub2RlKSkKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIG5vZGUsICI9PiIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFwLmdyYXBoKCkubWF4Tm9kZUNvdW50KCk7ICsraSkg
eworICAgICAgICBpZiAoSlNDOjpERkc6Ok5vZGUqIG5vZGUgPSBtYXAuZ3JhcGgoKS5ub2RlQXQo
aSkpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBUJiB2YWx1ZSA9IG1hcC5hdFNoYWRvdyhub2Rl
KSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzaGFkb3coIiwgbm9kZSwgIik9
PiIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5j
bHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdDb250cm9sRXF1aXZh
bGVuY2VBbmFseXNpcy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJE
RkdGbG93SW5kZXhpbmcuaCIKKyNpbmNsdWRlICJERkdGbG93TWFwLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNsdWRlICJERkdOYXR1cmFs
TG9vcHMuaCIKQEAgLTc5LDYgKzgxLDggQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxh
biwgTG9uZ0xpdgogICAgICwgbV9mb3JtKExvYWRTdG9yZSkKICAgICAsIG1fdW5pZmljYXRpb25T
dGF0ZShMb2NhbGx5VW5pZmllZCkKICAgICAsIG1fcmVmQ291bnRTdGF0ZShFdmVyeXRoaW5nSXNM
aXZlKQorICAgICwgbV9pbmRleGluZ0NhY2hlKHN0ZDo6bWFrZV91bmlxdWU8Rmxvd0luZGV4aW5n
PigqdGhpcykpCisgICAgLCBtX2Fic3RyYWN0VmFsdWVzQ2FjaGUoc3RkOjptYWtlX3VuaXF1ZTxG
bG93TWFwPEFic3RyYWN0VmFsdWU+PigqbV9pbmRleGluZ0NhY2hlKSkKIHsKICAgICBBU1NFUlQo
bV9wcm9maWxlZEJsb2NrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksMTIgQEAgY2xhc3MgQmFja3dhcmRz
RG9taW5hdG9yczsKIGNsYXNzIENGRzsKIGNsYXNzIENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lz
OwogY2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIEZsb3dJbmRleGluZzsKIGNsYXNzIE5hdHVyYWxM
b29wczsKIGNsYXNzIFByZVBvc3ROdW1iZXJpbmc7CiAKK3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFz
cyBGbG93TWFwOworCiAjZGVmaW5lIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2Rl
LCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBcCiAgICAgICAgIE5vZGUqIF9ub2RlID0gKG5v
ZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg
IGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCkBAIC0yMDEsOCArMjA0LDYgQEAgcHVibGljOgogICAgIE5vZGUqIG5vZGVBdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc0J5SW5kZXhbaW5kZXhdOyB9CiAg
ICAgdm9pZCBwYWNrTm9kZUluZGljZXMoKTsKIAotICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAw
LCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGFic3RyYWN0VmFsdWVzQ2FjaGUoKSB7IHJldHVybiBt
X2Fic3RyYWN0VmFsdWVzQ2FjaGU7IH0KLQogICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAKICAg
ICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUpOyAvLyBXZSB1c2Ugd2VhayBmcmVlemluZyBi
eSBkZWZhdWx0LgpAQCAtOTM1LDYgKzkzNiw5IEBAIHB1YmxpYzoKICAgICBSZWZDb3VudFN0YXRl
IG1fcmVmQ291bnRTdGF0ZTsKICAgICBib29sIG1faGFzRGVidWdnZXJFbmFibGVkOwogICAgIGJv
b2wgbV9oYXNFeGNlcHRpb25IYW5kbGVycyB7IGZhbHNlIH07CisgICAgc3RkOjp1bmlxdWVfcHRy
PEZsb3dJbmRleGluZz4gbV9pbmRleGluZ0NhY2hlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93
TWFwPEFic3RyYWN0VmFsdWU+PiBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7CisKIHByaXZhdGU6CiAg
ICAgdm9pZCBhZGROb2RlVG9NYXBCeUluZGV4KE5vZGUqKTsKIApAQCAtOTcyLDcgKzk3Niw2IEBA
IHByaXZhdGU6CiAKICAgICBWZWN0b3I8Tm9kZSosIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBt
X25vZGVzQnlJbmRleDsKICAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiBtX25vZGVJbmRleEZyZWVMaXN0OwotICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw4IEBAIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2Ug
PSBmYWxzZTsKIAogSW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKEdy
YXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3JhcGgpCi0gICAgLCBtX2Fic3RyYWN0VmFsdWVz
KGdyYXBoLmFic3RyYWN0VmFsdWVzQ2FjaGUoKSkKKyAgICAsIG1faW5kZXhpbmcoKmdyYXBoLm1f
aW5kZXhpbmdDYWNoZSkKKyAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RW
YWx1ZXNDYWNoZSkKICAgICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBh
cmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMpCiAgICAgLCBtX2Jsb2NrKDApCiB7CkBAIC01
Nyw5ICs1OCw4IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG8KICAg
ICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0g
YmFzaWNCbG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwogICAgIEFTU0VSVChi
YXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2Nr
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAKLSAgICAvLyBDZXJ0YWluIHBo
YXNlcyBpbnNlcnQgbm9kZXMgaW4gYSBibG9jayBhZnRlciBydW5uaW5nIHRocm91Z2ggaXQuCi0g
ICAgLy8gV2UgY2Fubm90IHJlc2VydmUgdGhlIHNwYWNlIGZvciBBYnN0cmFjdFZhbHVlcyB3aGVu
IGluaXRpYWxpemluZyBBYnN0cmFjdFN0YXRlIGJlY2F1c2UgdGhlIG51bWJlciBvZiB2YWx1ZXMK
LSAgICAvLyBjYW4gaW5jcmVhc2UgYXMgd2UgZXhlY3V0ZS4gSW5zdGVhZCwgd2UgaW5jcmVhc2Ug
dGhlIHNpemUgYXMgbmVlZGVkIGJlZm9yZSBwcm9jZXNzaW5nIGVhY2ggYmxvY2suCisgICAgbV9p
bmRleGluZy5yZWNvbXB1dGUoKTsKKyAgICBtX2Fic3RyYWN0VmFsdWVzLnJlY29tcHV0ZSgpOwog
ICAgIG1fYWJzdHJhY3RWYWx1ZXMucmVzaXplKG1fZ3JhcGgubWF4Tm9kZUNvdW50KCkpOwogICAg
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgpOyBpKyspCkBA
IC0xOTksNyArMTk5LDcgQEAgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9j
awogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdFRhaWwuc2l6
ZSgpOyArK2kpCiAgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsW2ldLm1lcmdlKG1fdmFy
aWFibGVzW2ldKTsKIAotICAgICAgICBmb3IgKGF1dG8mIHZhbHVlQXRUYWlsIDogYmxvY2stPnNz
YS0+dmFsdWVzQXRUYWlsKSB7CisgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiB2
YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCkgewogICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWVBdE5vZGUgPSBmb3JOb2RlKHZhbHVlQXRUYWlsLm5vZGUpOwogICAg
ICAgICAgICAgdmFsdWVBdFRhaWwudmFsdWUubWVyZ2UodmFsdWVBdE5vZGUpOwogICAgICAgICAg
ICAgdmFsdWVBdE5vZGUgPSB2YWx1ZUF0VGFpbC52YWx1ZTsKQEAgLTI5MSwxMyArMjkxLDEzIEBA
IGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmwKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IGZyb20tPnZhbHVlc0F0VGFpbC5zaXplKCk7IGktLTspCiAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHRvLT52YWx1ZXNBdEhlYWRbaV0ubWVyZ2UoZnJvbS0+dmFsdWVzQXRUYWlsW2ld
KTsKIAotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdG8tPnNzYS0+dmFsdWVzQXRIZWFkKSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gZW50cnkubm9kZTsKKyAgICAgICAgZm9yIChOb2Rl
QWJzdHJhY3RWYWx1ZVBhaXImIGVudHJ5IDogdG8tPnNzYS0+dmFsdWVzQXRIZWFkKSB7CisgICAg
ICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA9IGVudHJ5Lm5vZGU7CiAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICBNZXJnaW5nIGZv
ciAiLCBub2RlLCAiOiBmcm9tICIsIGZvck5vZGUobm9kZSksICIgdG8gIiwgZW50cnkudmFsdWUs
ICJcbiIpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlQ291bnRJ
bkZyb21CbG9jayA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZyb21CbG9ja1ZhbHVlQXRU
YWlsIDogZnJvbS0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZUFi
c3RyYWN0VmFsdWVQYWlyJiBmcm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZyb20tPnNzYS0+dmFsdWVz
QXRUYWlsKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZyb21CbG9ja1ZhbHVlQXRUYWlsLm5vZGUg
PT0gbm9kZSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZnJvbUJsb2NrVmFsdWVBdFRh
aWwudmFsdWUgPT0gZm9yTm9kZShub2RlKSk7CiAgICAgICAgICAgICAgICAgICAgICsrdmFsdWVD
b3VudEluRnJvbUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5j
bHVkZSAiREZHRmxvd01hcC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDMsMTEgKzQ0LDExIEBAIHB1YmxpYzoKICAgICAKICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAot
ICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKSB7IH0KKyAgICB2b2lkIGNyZWF0ZVZh
bHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pIHsgfQogICAgIAotICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1
ZXNbbm9kZS0+aW5kZXgoKV07CisgICAgICAgIHJldHVybiBtX2Fic3RyYWN0VmFsdWVzLmF0KG5v
ZGUpOwogICAgIH0KICAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkK
QEAgLTEzMiw3ICsxMzMsOCBAQCBwcml2YXRlOgogICAgIAogICAgIEdyYXBoJiBtX2dyYXBoOwog
Ci0gICAgVmVjdG9yPEFic3RyYWN0VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgbV9h
YnN0cmFjdFZhbHVlczsKKyAgICBGbG93SW5kZXhpbmcmIG1faW5kZXhpbmc7CisgICAgRmxvd01h
cDxBYnN0cmFjdFZhbHVlPiYgbV9hYnN0cmFjdFZhbHVlczsKICAgICBPcGVyYW5kczxBYnN0cmFj
dFZhbHVlPiBtX3ZhcmlhYmxlczsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUg
IkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVk
ZSAiREZHUGhhc2UuaCIKQEAgLTQ0LDEwICs0NSwxMiBAQCBwdWJsaWM6CiAgICAgTGl2ZW5lc3NB
bmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImxpdmVu
ZXNzIGFuYWx5c2lzIikKICAgICAgICAgLCBtX2RpcnR5QmxvY2tzKG1fZ3JhcGgubnVtQmxvY2tz
KCkpCisgICAgICAgICwgbV9pbmRleGluZygqbV9yYXBoLm1faW5kZXhpbmdDYWNoZSkKICAgICAg
ICAgLCBtX2xpdmVBdEhlYWQobV9ncmFwaCkKICAgICAgICAgLCBtX2xpdmVBdFRhaWwobV9ncmFw
aCkKLSAgICAgICAgLCBtX3dvcmtzZXQoZ3JhcGgubWF4Tm9kZUNvdW50KCkgLSAxKQogICAgIHsK
KyAgICAgICAgbV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPnJlY29tcHV0ZSgpOworICAgICAgICBt
X3dvcmtzZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92
ZXJmbG93Pj4obV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPm51bUluZGljZXMoKSk7CiAgICAgfQog
CiAgICAgYm9vbCBydW4oKQpAQCAtODAsMjAgKzgzLDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOwotICAgICAg
ICAgICAgICAgIFZlY3RvcjxOb2RlKj4mIGxpdmVBdEhlYWQgPSBibG9jay0+c3NhLT5saXZlQXRI
ZWFkOworICAgICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVj
dG9yT3ZlcmZsb3csIDE+JgorICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkSW5kaWNlcyA9
IG1fbGl2ZUF0SGVhZFtibG9ja0luZGV4XTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZUZs
b3dQcm9qZWN0aW9uPiYgbGl2ZUF0SGVhZCA9IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQ7CiAgICAg
ICAgICAgICAgICAgbGl2ZUF0SGVhZC5yZXNpemUoMCk7CiAgICAgICAgICAgICAgICAgbGl2ZUF0
SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0SGVhZEluZGljZXMuc2l6ZSgpKTsKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbGl2ZUF0SGVhZEluZGljZXMpCi0gICAgICAg
ICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG1fZ3JhcGgubm9kZUF0KGlu
ZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG1f
aW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRUYWlsSW5kaWNlcyA9IG1f
bGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+JiBs
aXZlQXRUYWlsID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgICAgICAgICBjb25z
dCBIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5z
aWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiYKKyAgICAgICAgICAgICAgICAg
ICAgbGl2ZUF0VGFpbEluZGljZXMgPSBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF07CisgICAgICAg
ICAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmVBdFRhaWwgPSBibG9jay0+
c3NhLT5saXZlQXRUYWlsOwogICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVzaXplKDApOwog
ICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdFRhaWxJbmRp
Y2VzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IG1fbGl2
ZUF0VGFpbFtibG9ja0luZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC51bmNo
ZWNrZWRBcHBlbmQobV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAg
bGl2ZUF0VGFpbC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVjdGlvbihpbmRl
eCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEwNiw2NyArMTExLDU2IEBAIHBy
aXZhdGU6CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShibG9jaywgIk9ubHkgZGlydHkgYmxv
Y2tzIG5lZWRzIHVwZGF0ZXMuIEEgbnVsbCBibG9jayBzaG91bGQgbmV2ZXIgYmUgZGlydHkuIik7
CiAKLSAgICAgICAgbV93b3Jrc2V0LmNsZWFyKCk7CisgICAgICAgIG1fd29ya3NldC0+Y2xlYXIo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4
XSkKLSAgICAgICAgICAgIG1fd29ya3NldC5hZGQoaW5kZXgpOworICAgICAgICAgICAgbV93b3Jr
c2V0LT5hZGQoaW5kZXgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxv
Y2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KG5vZGVJbmRleCk7CiAKLSAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVwc2lsb246Ci0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbihAeCwgXnApCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQHAgYW5kIEBu
IGFuZCB1c2VzIEB4LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdpdmVuIGEgUGhp
OgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCi0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhlciBhIHVzZSBu
b3IgYSBkZWYuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gR2l2ZW4gYSBub2RlOgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwgQGIsIEBjKQot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBuIGFu
ZCB1c2VzIEBhLCBAYiwgQGMuCi0gICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRSghbV93b3Jrc2V0LmNvbnRhaW5zKG5vZGUtPmluZGV4KCkpLCAi
VXBzaWxvbiBzaG91bGQgbm90IGJlIHVzZWQgYXMgZGVmcyBieSBvdGhlciBub2Rlcy4iKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3dvcmtzZXQtPmNvbnRhaW5zKG5v
ZGUtPmluZGV4KCkpLCAiVXBzaWxvbiBzaG91bGQgbm90IGJlIHVzZWQgYXMgZGVmcyBieSBvdGhl
ciBub2Rlcy4iKTsKIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPnBoaSgpOwot
ICAgICAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUocGhpLT5pbmRleCgpKTsKLSAgICAgICAg
ICAgICAgICBtX3dvcmtzZXQuYWRkKG5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5nLnNoYWRvd0luZGV4KHBoaSkpOwor
ICAgICAgICAgICAgICAgIG1fd29ya3NldC0+YWRkKG1faW5kZXhpbmcuaW5kZXgobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIG1fd29ya3NldC0+cmVtb3Zl
KG1faW5kZXhpbmcuaW5kZXgobm9kZSkpOworICAgICAgICAgICAgICAgIG1fd29ya3NldC0+YWRk
KG1faW5kZXhpbmcuc2hhZG93SW5kZXgobm9kZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX3dv
cmtzZXQucmVtb3ZlKG5vZGUtPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIERGR19OT0RFX0RP
X1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZENoaWxkVXNlKTsKKyAgICAgICAgICAgICAg
ICBtX3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5nLmluZGV4KG5vZGUpKTsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgWyZd
IChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5ld0VudHJ5ID0g
bV93b3Jrc2V0LT5hZGQobV9pbmRleGluZy5pbmRleChlZGdlLm5vZGUoKSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG5ld0VudHJ5ID8gRG9lc0tpbGwgOiBE
b2VzTm90TmlsbCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gVXBkYXRlIGxpdmUg
YXQgaGVhZC4KLSAgICAgICAgYXV0byYgbGl2ZUF0SGVhZCA9IG1fbGl2ZUF0SGVhZFtibG9ja0lu
ZGV4XTsKLSAgICAgICAgaWYgKG1fd29ya3NldC5zaXplKCkgPT0gbGl2ZUF0SGVhZC5zaXplKCkp
CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3csIDE+JiBs
aXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOworICAgICAgICBpZiAobV93b3Jr
c2V0LT5zaXplKCkgPT0gbGl2ZUF0SGVhZC5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBsaXZlSW5kZXhBdEhlYWQgOiBsaXZlQXRIZWFk
KQotICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShsaXZlSW5kZXhBdEhlYWQpOwotICAgICAg
ICBBU1NFUlQoIW1fd29ya3NldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV93b3Jrc2V0LT5y
ZW1vdmUobGl2ZUluZGV4QXRIZWFkKTsKKyAgICAgICAgQVNTRVJUKCFtX3dvcmtzZXQtPmlzRW1w
dHkoKSk7CiAKLSAgICAgICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0SGVhZC5z
aXplKCkgKyBtX3dvcmtzZXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1
ZSA6IG1fd29ya3NldCkKKyAgICAgICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0
SGVhZC5zaXplKCkgKyBtX3dvcmtzZXQtPnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQg
bmV3VmFsdWUgOiAqbV93b3Jrc2V0KQogICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRB
cHBlbmQobmV3VmFsdWUpOwogCiAgICAgICAgIGJvb2wgY2hhbmdlZFByZWRlY2Vzc29yID0gZmFs
c2U7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVj
ZXNzb3JzKSB7Ci0gICAgICAgICAgICBhdXRvJiBsaXZlQXRUYWlsID0gbV9saXZlQXRUYWlsW3By
ZWRlY2Vzc29yXTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbmV3VmFsdWUgOiBtX3dvcmtz
ZXQpIHsKKyAgICAgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVk
Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+Jgor
ICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6ICptX3dvcmtzZXQpIHsKICAgICAg
ICAgICAgICAgICBpZiAobGl2ZUF0VGFpbC5hZGQobmV3VmFsdWUpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9kaXJ0eUJsb2Nrcy5xdWlja1NldChwcmVkZWNlc3Nvci0+aW5kZXgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByZWRlY2Vzc29yID0gdHJ1ZTsKQEAgLTE3
NiwyMSArMTcwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjaGFuZ2VkUHJlZGVjZXNz
b3I7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZENoaWxkVXNlKE5vZGUqLCBF
ZGdlJiBlZGdlKQotICAgIHsKLSAgICAgICAgYm9vbCBuZXdFbnRyeSA9IG1fd29ya3NldC5hZGQo
ZWRnZS0+aW5kZXgoKSk7Ci0gICAgICAgIGVkZ2Uuc2V0S2lsbFN0YXR1cyhuZXdFbnRyeSA/IERv
ZXNLaWxsIDogRG9lc05vdEtpbGwpOwotICAgIH0KLQogICAgIC8vIEJsb2NrcyB3aXRoIG5ldyBs
aXZlIHZhbHVlcyBhdCB0YWlsLgogICAgIEJpdFZlY3RvciBtX2RpcnR5QmxvY2tzOworICAgIAor
ICAgIEZsb3dJbmRleGluZyYgbV9pbmRleGluZzsKIAogICAgIC8vIExpdmUgdmFsdWVzIHBlciBi
bG9jayBlZGdlLgogICAgIEJsb2NrTWFwPFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3csIDE+PiBtX2xpdmVBdEhlYWQ7CiAgICAgQmxvY2tNYXA8SGFzaFNldDx1bnNpZ25l
ZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVuc2lnbmVkPj4+IG1fbGl2ZUF0VGFpbDsKIAogICAgIC8vIFNpbmdsZSBzcGFy
c2Ugc2V0IGFsbG9jYXRlZCBvbmNlIGFuZCB1c2VkIGJ5IGV2ZXJ5IGJhc2ljIGJsb2NrLgotICAg
IEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3dvcmtzZXQ7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93Pj4gbV93b3Jr
c2V0OwogfTsKIAogYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYgZ3JhcGgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA4Mjk0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1
MjksMTUgKzI1MjksMTggQEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIG93bmVyOwogfTsKIAot
aW5saW5lIGJvb2wgbm9kZUNvbXBhcmF0b3IoTm9kZSogYSwgTm9kZSogYikKLXsKLSAgICByZXR1
cm4gYS0+aW5kZXgoKSA8IGItPmluZGV4KCk7Ci19CitzdHJ1Y3QgTm9kZUNvbXBhcmF0b3Igewor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVQdHJUeXBlPgorICAgIGJvb2wgb3BlcmF0b3IoKShO
b2RlUHRyVHlwZSBhLCBOb2RlUHRyVHlwZSBiKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGEtPmluZGV4KCkgPCBiLT5pbmRleCgpOworICAgIH0KK307CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiBDU3RyaW5nIG5vZGVMaXN0RHVtcChjb25zdCBUJiBub2RlTGlzdCkKIHsKLSAgICByZXR1
cm4gc29ydGVkTGlzdER1bXAobm9kZUxpc3QsIG5vZGVDb21wYXJhdG9yKTsKKyAgICByZXR1cm4g
c29ydGVkTGlzdER1bXAobm9kZUxpc3QsIE5vZGVDb21wYXJhdG9yKCkpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgpAQCAtMjU0OCw3ICsyNTUxLDcgQEAgQ1N0cmluZyBub2RlTWFwRHVtcChj
b25zdCBUJiBub2RlTWFwLCBEdQogICAgICAgICB0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRvciBp
dGVyID0gbm9kZU1hcC5iZWdpbigpOwogICAgICAgICBpdGVyICE9IG5vZGVNYXAuZW5kKCk7ICsr
aXRlcikKICAgICAgICAga2V5cy5hcHBlbmQoaXRlci0+a2V5KTsKLSAgICBzdGQ6OnNvcnQoa2V5
cy5iZWdpbigpLCBrZXlzLmVuZCgpLCBub2RlQ29tcGFyYXRvcik7CisgICAgc3RkOjpzb3J0KGtl
eXMuYmVnaW4oKSwga2V5cy5lbmQoKSwgTm9kZUNvbXBhcmF0b3IoKSk7CiAgICAgU3RyaW5nUHJp
bnRTdHJlYW0gb3V0OwogICAgIENvbW1hUHJpbnRlciBjb21tYTsKICAgICBmb3IodW5zaWduZWQg
aSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQpAQCAtMjU2Miw3ICsyNTY1LDcgQEAgQ1N0cmlu
ZyBub2RlVmFsdWVQYWlyTGlzdER1bXAoY29uc3QgVCYgbgogICAgIHVzaW5nIFYgPSB0eXBlbmFt
ZSBUOjpWYWx1ZVR5cGU7CiAgICAgVCBzb3J0ZWRMaXN0ID0gbm9kZVZhbHVlUGFpckxpc3Q7CiAg
ICAgc3RkOjpzb3J0KHNvcnRlZExpc3QuYmVnaW4oKSwgc29ydGVkTGlzdC5lbmQoKSwgW10oY29u
c3QgViYgYSwgY29uc3QgViYgYikgewotICAgICAgICByZXR1cm4gbm9kZUNvbXBhcmF0b3IoYS5u
b2RlLCBiLm5vZGUpOworICAgICAgICByZXR1cm4gTm9kZUNvbXBhcmF0b3IoKShhLm5vZGUsIGIu
bm9kZSk7CiAgICAgfSk7CiAKICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZUFic3RyYWN0VmFsdWVQYWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
Tm9kZUFic3RyYWN0VmFsdWVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG5vZGUsICI9PiIsIHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZh
bHVlUGFpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJE
RkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitzdHJ1Y3QgTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsKKyAgICBOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIoKSB7IH0KKyAgICAKKyAgICBOb2RlQWJzdHJhY3RWYWx1ZVBhaXIoTm9kZUZsb3dQcm9q
ZWN0aW9uIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgICAgICA6IG5vZGUo
bm9kZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZTsKKyAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1By
b2plY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlRmxvd1Byb2pl
Y3Rpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7
CisgICAgICAgIG91dC5wcmludCgiLSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
IChraW5kKCkgPT0gUHJpbWFyeSkgeworICAgICAgICBvdXQucHJpbnQobm9kZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KCJzaGFkb3coIiwgbm9kZSwgIikiKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1By
b2plY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVGbG93UHJvamVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVk
ZSA8d3RmL0hhc2hUYWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIE5vZGVGbG93UHJvamVjdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAg
ICAgICAgUHJpbWFyeSwKKyAgICAgICAgU2hhZG93CisgICAgfTsKKyAgICAKKyAgICBOb2RlRmxv
d1Byb2plY3Rpb24oKSB7IH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oTm9kZSogbm9k
ZSkKKyAgICAgICAgOiBtX3dvcmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oTm9kZSogbm9kZSwgS2luZCBr
aW5kKQorICAgICAgICA6IG1fd29yZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSB8IChr
aW5kID09IFNoYWRvdyA/IHNoYWRvd0JpdCA6IDApKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
Tm9kZUZsb3dQcm9qZWN0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAg
ICAgOiBtX3dvcmQoc2hhZG93Qml0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV93b3JkOyB9CisgICAgCisgICAgS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gKG1fd29yZCAmIHNoYWRvd0JpdCkgPyBTaGFkb3cgOiBQ
cmltYXJ5OyB9CisgICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxOb2RlKj4obV93b3JkICYgfnNoYWRvd0JpdCk7IH0KKyAgICAKKyAgICBOb2RlJiBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiAqbm9kZSgpOyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigp
IGNvbnN0IHsgcmV0dXJuIG5vZGUoKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd29yZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvcj09KE5vZGVGbG93UHJvamVjdGlvbiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3dvcmQgPT0gb3RoZXIubV93b3JkOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yIT0oTm9kZUZsb3dQcm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBO
b2RlRmxvd1Byb2plY3Rpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2goTm9kZSogbm9kZSwgY29u
c3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAgIGZ1bmMoTm9kZUZsb3dQcm9qZWN0aW9uKG5v
ZGUpKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKQorICAgICAgICAgICAgZnVuYyhO
b2RlRmxvd1Byb2plY3Rpb24obm9kZSwgU2hhZG93KSk7CisgICAgfQorICAgIAorcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3Qgc2hhZG93Qml0ID0gMTsKKyAgICAgICAgICAgICAg
ICAgCisgICAgdWludHB0cl90IG1fd29yZCB7IDAgfTsKK307CisKK3N0cnVjdCBOb2RlRmxvd1By
b2plY3Rpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChOb2RlRmxvd1Byb2plY3Rp
b24ga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoTm9k
ZUZsb3dQcm9qZWN0aW9uIGEsIE5vZGVGbG93UHJvamVjdGlvbiBiKSB7IHJldHVybiBhID09IGI7
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiB7CisgICAg
dHlwZWRlZiBKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uSGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb24+IDogU2ltcGxlQ2xhc3NIYXNo
VHJhaXRzPEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb24+IHsgfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL1dURi93
dGYvSW5kZXhTcGFyc2VTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNw
YXJzZVNldC5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJz
ZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1l
IE92ZXJmbG93SGFuZGxlciA9IENyYXMKIGNsYXNzIEluZGV4U3BhcnNlU2V0IHsKICAgICB0eXBl
ZGVmIFZlY3Rvcjx1bnNpZ25lZCwgMCwgT3ZlcmZsb3dIYW5kbGVyPiBWYWx1ZUxpc3Q7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4VmFsdWUpOworICAg
IGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIHNpemUpOwogCiAgICAgYm9vbCBhZGQo
dW5zaWduZWQpOwogICAgIGJvb2wgcmVtb3ZlKHVuc2lnbmVkKTsKQEAgLTY1LDkgKzY1LDkgQEAg
cHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4KLWlubGlu
ZSBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpJbmRleFNwYXJzZVNldCh1bnNpZ25l
ZCBtYXhWYWx1ZSkKK2lubGluZSBJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpJbmRl
eFNwYXJzZVNldCh1bnNpZ25lZCBzaXplKQogewotICAgIG1fbWFwLnJlc2l6ZShtYXhWYWx1ZSAr
IDEpOworICAgIG1fbWFwLnJlc2l6ZShzaXplKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgT3Zl
cmZsb3dIYW5kbGVyPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293770</attachid>
            <date>2016-11-03 10:06:20 -0700</date>
            <delta_ts>2016-11-03 10:25:25 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>64576</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODI5NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMzAzLDYgKzMwMyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RG
R0ZhaWxlZEZpbmFsaXplci5jcHAKICAgICBkZmcvREZHRmluYWxpemVyLmNwcAogICAgIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcAorICAgIGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwCiAgICAgZGZnL0RG
R0ZsdXNoRm9ybWF0LmNwcAogICAgIGRmZy9ERkdGbHVzaGVkQXQuY3BwCiAgICAgZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC0zMzQsNyArMzM1LDkgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERh
dGEuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAK
KyAgICBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAogICAgIGRmZy9ERkdOb2RlRmxh
Z3MuY3BwCisgICAgZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAKICAgICBkZmcvREZHTm9k
ZU9yaWdpbi5jcHAKICAgICBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAK
ICAgICBkZmcvREZHT1NSRW50cnkuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsx
MjksMTMgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFF
M0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJ
MEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUz
QTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBG
MUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8q
IEFib3J0UmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyMDE3N0YxRENBREMzMzAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc3RDFE
Q0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCAqLzsgfTsKKwkJMEYyMDE3ODAx
RENBREMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERG
R0Zsb3dJbmRleGluZy5oICovOyB9OworCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZH
Rmxvd01hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyMDE3ODExRENBREQ0MDAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCAqLzsgfTsKKwkJMEYyMDE3
ODUxRENBRTE0OTAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODQxRENBRTE0NzAwRUE1
OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovOyB9OworCQkwRjIwMTc4NjFEQ0FFMTRD
MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBE
RkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwICovOyB9OworCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5
NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4ODFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9k
ZUFic3RyYWN0VmFsdWVQYWlyLmggKi87IH07CisJCTBGMjAxNzhBMURDQjk0MjYwMEVBNTk1MCAv
KiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVB
YnN0cmFjdFZhbHVlUGFpci5jcHAgKi87IH07CiAJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAv
KiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5j
cHAgKi87IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdGMTRC
RUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyog
Qnl0ZWNvZGVDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0yNDkyLDYgKzI0OTksMTMgQEAKIAkJMEYxRTNBNTAxNTM3QzJDQjAw
MEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xvd1BhdGhH
ZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNBMjFE
RjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0gZGZn
L0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNw
cDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0g
ZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIw
MTc4MTFEQ0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdGbG93TWFwLmg7IHBhdGggPSBkZmcvREZHRmxvd01hcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MzFEQ0FFMTQ3MDBFQTU5NTAgLyogREZH
Tm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR05vZGVGbG93UHJvamVjdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZUZsb3dQcm9q
ZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODQxRENBRTE0
NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODcx
RENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3Bw
OyBwYXRoID0gZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJh
Y3RWYWx1ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZUFi
c3RyYWN0VmFsdWVQYWlyLmg7IHBhdGggPSBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjBDMjU4MUE4MDEzQUIwMERBMzIyOSAv
KiBWaXJ0dWFsUmVnaXN0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gVmlydHVhbFJlZ2lzdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
MUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0
ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRl
Y29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Njc2LDgg
KzY2OTAsNiBAQAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5o
ICovLAogCQkJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8s
CiAJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCi0JCQkJ
RTMyMkU1QTAxREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3Bw
ICovLAotCQkJCUUzMjJFNUExMURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50
UGFyYW1zLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJ
ZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rl
c2lyZWRJZGVudGlmaWVycy5oICovLAogCQkJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBE
RkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCkBAIC02NjkyLDYgKzY3MDQsOCBAQAogCQkJCTBG
NUExMjcxMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICovLAogCQkJCTBGNUExMjcy
MTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuaCAqLywKIAkJCQkwRkQ4MUFEMDE1NEZCNEVC
MDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovLAorCQkJCUUzMjJFNUEwMURBNjQ0MzUwMDZF
NzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcCAqLywKKwkJCQlFMzIyRTVBMTFE
QTY0NDM1MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oICovLAogCQkJCTBG
MUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovLAogCQkJ
CTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAogCQkJCTBGRDND
ODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKQEAgLTY3MDgsNiArNjcyMiw5
IEBACiAJCQkJQTc4QTk3NkYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oICovLAog
CQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLywKIAkJ
CQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovLAorCQkJCTBG
MjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovLAorCQkJCTBG
MjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLywKKwkJCQkwRjIw
MTc4MTFEQ0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovLAogCQkJCTBGOUQzMzk0MTdG
RkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovLAogCQkJCTBGOUQzMzk1MTdGRkM0
RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJCQlBN0Q4OUNFODE3QTBCOENDMDA3
NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwICovLApAQCAtNjc3NSw5ICs2NzkyLDEzIEBACiAJ
CQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovLAogCQkJ
CTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLywKIAkJCQk4NkVDQTNF
OTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAorCQkJCTBGMjAxNzg3MURDQjk0MjIw
MEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwICovLAorCQkJCTBGMjAxNzg4
MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCAqLywKIAkJCQkw
RkI0QjUxRjE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZUFsbG9jYXRvci5oICovLAogCQkJCTBG
QTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJCTBGQTU4
MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKKwkJCQkwRjIwMTc4MzFE
Q0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLywKKwkJCQkwRjIw
MTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggKi8sCiAJCQkJ
MEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBG
MzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgx
QjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCkBAIC03NTM3LDYgKzc1NTgs
NyBAQAogCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1
ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1
MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NjFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTMx
QzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDE1
LDYgKzg0MzcsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8q
IEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUg
LyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4NTFEQ0FFMTQ5
MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzU1NUI4QTFEQUUwM0E1MDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclBhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmlu
Z0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3MEE0NzFENTQzQThCMDA2RTcyMzIg
LyogQ2VsbENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTExLDYgKzg1MzQsNyBAQAog
CQkJCTE0MTQ0OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDJENkYxMjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyogREZHTm9kZUFi
c3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBD
ODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDBBNDg1MUE5MDUx
QUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzQzBF
MTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTc3LDYg
Kzg2MDEsNyBAQAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJs
b2NrT3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAv
KiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9u
S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1
cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzYzLDYg
Kzk3ODgsNyBAQAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlw
dE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3NjIwNDFEQjkyNDI2MDBCN0EyRkQg
LyogQ29sbGVjdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEE3QkVGMUI4Mjk3
NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
MDE3OEExRENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZy
YW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNCQUQwMEU1NUM5OSAv
KiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4NjE4NDAzOENB
MDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTk5ODksNiArMTAwMTUsNyBAQAogCQkJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1Bo
aUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0
NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIw
MEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAx
NzdGMURDQURDMzMwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCNTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM3OTRFNzUxQjc3RUI5NzAwNTU0M0FFIC8q
IE1vZHVsZUFuYWx5emVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNTVGMzUyMUI3REM4NTMw
MEM1MERDNSAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0x
MDA4Niw2ICsxMDExMyw3IEBACiAJCQkJQTVGRDAwNjcxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlw
dEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA2RDE4OUIwMEFBMDA2MzMy
MzEgLyogU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDZGMTg5
QjAwQUEwMDYzMzIzMSAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYyMDE3ODYxRENBRTE0QzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUZEMDA3RDE4OUIwQjRDMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0
YWNrRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyNTE4OEVGRkZEMDAxMTBG
MTQgLyogU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1RDkzQTUx
ODUwMTJBODAwNDAwREVEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlz
aW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFw
dGVyIHsKIAogICAgIFRtcExpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAgICBzdGF0aWMg
dW5zaWduZWQgbWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5k
aWNlcyhDb2RlJiBjb2RlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUu
bnVtVG1wcyhhZGFwdGVyVHlwZSk7CiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxh
ZGFwdGVyVHlwZT46OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CkBAIC02NSw5ICs2NSw5IEBAIHN0
cnVjdCBTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXIgewogICAgIHsKICAgICB9CiAKLSAgICBzdGF0
aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVt
SW5kaWNlcyhDb2RlJiBjb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGUuc3RhY2tTbG90
cygpLnNpemUoKSAtIDE7CisgICAgICAgIHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7
CiAgICAgfQogICAgIHN0YXRpYyBib29sIGFjY2VwdHNUeXBlKEFyZzo6VHlwZSkgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCB2YWx1ZVRvSW5kZXgoU3RhY2tTbG90KiBzdGFj
a1Nsb3QpIHsgcmV0dXJuIHN0YWNrU2xvdC0+aW5kZXgoKTsgfQpAQCAtODMsOSArODMsOSBAQCBz
dHJ1Y3QgUmVnTGl2ZW5lc3NBZGFwdGVyIHsKIAogICAgIFJlZ0xpdmVuZXNzQWRhcHRlcihDb2Rl
JikgeyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYpCisgICAgc3RhdGlj
IHVuc2lnbmVkIG51bUluZGljZXMoQ29kZSYpCiAgICAgewotICAgICAgICByZXR1cm4gUmVnOjpt
YXhJbmRleCgpOworICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpICsgMTsKICAgICB9CiAK
ICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzVHlwZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0K
QEAgLTEwMSw3ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhD
b2RlJiBjb2RlKQogICAgICAgICA6IEFkYXB0ZXIoY29kZSkKLSAgICAgICAgLCBtX3dvcmtzZXQo
QWRhcHRlcjo6bWF4SW5kZXgoY29kZSkpCisgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om51
bUluZGljZXMoY29kZSkpCiAgICAgICAgICwgbV9saXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQogICAg
ICAgICAsIG1fbGl2ZUF0VGFpbChjb2RlLnNpemUoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNp
b24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdC
cmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKICNpbmNsdWRlICJERkdQ
aGlDaGlsZHJlbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MSw3
ICs0Miw3IEBAIHB1YmxpYzoKICAgICBBYnN0cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJh
Y3RTdGF0ZVR5cGUmKTsKICAgICB+QWJzdHJhY3RJbnRlcnByZXRlcigpOwogICAgIAotICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3Rh
dGUuZm9yTm9kZShub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lv
biAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MDksNiArMjgwOSw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNh
c2UgUGhpOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOwor
ICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwg
Tm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpKTsKICAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRo
aXMgbm9kZSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUg
YmVjb21lIGEKICAgICAgICAgLy8gY29uc3RhbnQsIGluIHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRv
IGtub3cuCiAgICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLm1fdmFsdWUpCkBAIC0yODE2LDggKzI4
MTcsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFVwc2lsb246IHsKLSAgICAgICAgbV9zdGF0ZS5j
cmVhdGVWYWx1ZUZvck5vZGUobm9kZS0+cGhpKCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPnBo
aSgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBOb2RlRmxvd1Byb2plY3Rp
b24gc2hhZG93KG5vZGUtPnBoaSgpLCBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdyk7CisgICAg
ICAgIG1fc3RhdGUuY3JlYXRlVmFsdWVGb3JOb2RlKHNoYWRvdyk7CisgICAgICAgIGZvck5vZGUo
c2hhZG93KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIApAQCAtMjk2OSwxMCArMjk3MSwxNSBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgZWxzZQogICAgICAgICBjbG9iYmVyTGltaXQrKzsKICAg
ICBBU1NFUlQoY2xvYmJlckxpbWl0IDw9IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gY2xvYmJlckxpbWl0OyBpLS07KQotICAgICAgICBmdW5jdG9yKGZvck5v
ZGUobV9zdGF0ZS5ibG9jaygpLT5hdChpKSkpOworICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVy
TGltaXQ7IGktLTspIHsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKAorICAg
ICAgICAgICAgbV9zdGF0ZS5ibG9jaygpLT5hdChpKSwKKyAgICAgICAgICAgIFsmXSAoTm9kZUZs
b3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgZnVuY3Rvcihm
b3JOb2RlKG5vZGVQcm9qZWN0aW9uKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CiAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0
YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgZm9yIChOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKQogICAgICAgICAg
ICAgZnVuY3Rvcihmb3JOb2RlKG5vZGUpKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IG1f
c3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKQEAgLTMwMjksOSAr
MzAzNiw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdm9pZCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KQogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwotICAgIEhhc2hTZXQ8Tm9kZSo+IHNl
ZW47CisgICAgSGFzaFNldDxOb2RlRmxvd1Byb2plY3Rpb24+IHNlZW47CiAgICAgaWYgKG1fZ3Jh
cGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJs
b2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlv
biBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQpIHsKICAgICAgICAgICAg
IHNlZW4uYWRkKG5vZGUpOwogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JO
b2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKQEAgLTMwNDAsMTUg
KzMwNDcsMTcgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdGF0ZS5ibG9jaygp
LT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5h
dChpKTsKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZh
bHVlID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUsICI6IiwgdmFs
dWUpOworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCisgICAgICAgICAgICBt
X3N0YXRlLmJsb2NrKCktPmF0KGkpLCBbJl0gKE5vZGVGbG93UHJvamVjdGlvbiBub2RlUHJvamVj
dGlvbikgeworICAgICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGVQcm9qZWN0aW9uKTsKKyAgICAg
ICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZVByb2plY3Rpb24p
OworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGVQcm9qZWN0
aW9uLCAiOiIsIHZhbHVlKTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICBpZiAobV9ncmFw
aC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc3RhdGUuYmxv
Y2soKS0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFpbCkgewogICAgICAgICAgICAg
aWYgKHNlZW4uY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5j
cHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE2ICs0NywxNiBAQCBB
dFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0YXRlCiAKIEF0VGFpbEFic3RyYWN0
U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CiAKLXZvaWQgQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIEF0VGFpbEFic3RyYWN0
U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAg
ICBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKS5hZGQobm9kZSwgQWJzdHJhY3RWYWx1ZSgp
KTsKIH0KIAotQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2Rl
KiBub2RlKQorQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2Rl
Rmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAgICBhdXRvJiB2YWx1ZXNBdFRhaWwgPSBtX3ZhbHVl
c0F0VGFpbE1hcC5hdChtX2Jsb2NrKTsKLSAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVl
Pjo6aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOwotICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgaXRlciAhPSB2YWx1ZXNBdFRhaWwuZW5kKCkpOworICAgIEhhc2hN
YXA8Tm9kZUZsb3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9IHZh
bHVlc0F0VGFpbC5maW5kKG5vZGUpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZS5ub2Rl
KCksIGl0ZXIgIT0gdmFsdWVzQXRUYWlsLmVuZCgpKTsKICAgICByZXR1cm4gaXRlci0+dmFsdWU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWls
QWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdCbG9ja01h
cC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0
aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsgCiAKQEAgLTQ3LDggKzQ4
LDggQEAgcHVibGljOgogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgfQogICAgIAotICAg
IHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKTsKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKE5vZGUqKTsKKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rp
b24pOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKICAg
ICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyByZXR1cm4gZm9yTm9kZShlZGdl
Lm5vZGUoKSk7IH0KICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkgeyBy
ZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9CiAgICAgCkBAIC02Niw3ICs2Nyw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICBCbG9ja01hcDxIYXNo
TWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRhaWxNYXA7CisgICAgQmxvY2tN
YXA8SGFzaE1hcDxOb2RlRmxvd1Byb2plY3Rpb24sIEFic3RyYWN0VmFsdWU+PiBtX3ZhbHVlc0F0
VGFpbE1hcDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIw
ODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Jy
YW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRG
R05vZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCIKICNpbmNsdWRl
ICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgi
CiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKQEAgLTI0OCwxMiArMjQ5LDggQEAgc3RydWN0IEJhc2lj
QmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZh
aWxhYmlsaXR5QXRIZWFkOwogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRU
YWlsOwogCi0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0SGVhZDsKLSAgICAgICAgVmVjdG9y
PE5vZGUqPiBsaXZlQXRUYWlsOwotICAgICAgICBzdHJ1Y3QgTm9kZUFic3RyYWN0VmFsdWVQYWly
IHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlOwotICAgICAgICB9OworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiBsaXZl
QXRIZWFkOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiBsaXZlQXRUYWlsOwog
ICAgICAgICBWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiB2YWx1ZXNBdEhlYWQ7CiAgICAg
ICAgIFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZhbHVlc0F0VGFpbDsKICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDEwIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIEhhc2hTZXQ8Tm9kZSo+IGxpdmVOb2Rl
c0F0SGVhZChHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIEhhc2hTZXQ8
Tm9kZSo+IHNlZW47Ci0gICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVh
ZCkKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24g
bm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgaWYgKG5vZGUua2luZCgp
ID09IE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeSkKKyAgICAgICAgICAgIHNlZW4uYWRkKG5v
ZGUubm9kZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxp
dHlNYXAgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CiAgICAgZ3JhcGguZm9yQWxs
TG9jYWxzTGl2ZUluQnl0ZWNvZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbWJpbmVkTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUs
NiArMzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gUmV0dXJucyB0
aGUgc2V0IG9mIG5vZGVzIGxpdmUgYXQgdGFpbCwgYm90aCBkdWUgdG8gZHVlIERGRyBhbmQgZHVl
IHRvIGJ5dGVjb2RlIChpLmUuIE9TUiBleGl0KS4KIEhhc2hTZXQ8Tm9kZSo+IGxpdmVOb2Rlc0F0
SGVhZChHcmFwaCYsIEJhc2ljQmxvY2sqKTsKIAorLy8gV0FSTklORzogVGhpcyBjdXJyZW50bHkg
ZG9lcyBub3QgcmVhc29uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiBzaGFkb3cgdmFsdWVzLiBUaGUg
ZXhlY3V0aW9uCisvLyBzZW1hbnRpY3Mgb2YgREZHIFNTQSBhcmUgdGhhdCBhbiBVcHNpbG9uIHN0
b3JlcyB0byB0aGUgc2hhZG93IHZhbHVlIG9mIGEgUGhpLCBhbmQgdGhlIFBoaSBsb2FkcworLy8g
ZnJvbSB0aGF0IHNoYWRvdyB2YWx1ZS4gSGVuY2UsIHRoZSBzaGFkb3cgdmFsdWVzIGFyZSBsaWtl
IHZhcmlhYmxlcywgYW5kIGhhdmUgbGl2ZW5lc3MuIFRoZSBub3JtYWwKKy8vIGxpdmVuZXNzIGFu
YWx5c2lzIHdpbGwgdGVsbCB5b3UgYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHNoYWRvdyB2YWx1ZXMu
IEl0J3MgT0sgdG8gaWdub3JlIHNoYWRvdworLy8gdmFsdWVzIGlmIHlvdSB0cmVhdCBVcHNpbG9u
IGFzIGFuIG9wYXF1ZSBlc2NhcGUsIGFuZCBhbGwgb2YgdGhlIGNsaW5ldHMgb2YgQ29tYmluZWRM
aXZlbmVzcyBkbyBzby4KIHN0cnVjdCBDb21iaW5lZExpdmVuZXNzIHsKICAgICBDb21iaW5lZExp
dmVuZXNzKCkgeyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zs
b3dJbmRleGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbG93SW5kZXhpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmxvd0luZGV4aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRmxvd0luZGV4aW5n
OjpGbG93SW5kZXhpbmcoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAs
IG1fbnVtSW5kaWNlcygwKQoreworICAgIHJlY29tcHV0ZSgpOworfQorCitGbG93SW5kZXhpbmc6
On5GbG93SW5kZXhpbmcoKQoreworfQorCit2b2lkIEZsb3dJbmRleGluZzo6cmVjb21wdXRlKCkK
K3sKKyAgICBtX25vZGVJbmRleFRvU2hhZG93SW5kZXgucmVzaXplKG1fZ3JhcGgubWF4Tm9kZUNv
dW50KCkpOworICAgIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleC5maWxsKFVJTlRfTUFYKTsKKwor
ICAgIHVuc2lnbmVkIG51bU5vZGVJbmRpY2VzID0gbV9ncmFwaC5tYXhOb2RlQ291bnQoKTsKKyAg
ICBtX251bUluZGljZXMgPSBudW1Ob2RlSW5kaWNlczsKKworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVu
c2lnbmVkIG5vZGVJbmRleCA9IG5vZGUtPmluZGV4KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBz
aGFkb3dJbmRleCA9IG1fbnVtSW5kaWNlcysrOworICAgICAgICAgICAgbV9ub2RlSW5kZXhUb1No
YWRvd0luZGV4W25vZGVJbmRleF0gPSBzaGFkb3dJbmRleDsKKyAgICAgICAgICAgIG1fc2hhZG93
SW5kZXhUb05vZGVJbmRleC5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbnVsbHB0ciwgbV9zaGFkb3dJbmRleFRvTm9kZUluZGV4LnNpemUoKSArIG51
bU5vZGVJbmRpY2VzID09IG1fbnVtSW5kaWNlcyk7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG51bGxwdHIsIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleFtzaGFkb3dJbmRleF0gPT0g
bm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBub2RlcyB0
byB1bmlxdWUsIGRlbnNlIGluZGljZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgZmFz
dAorLy8gTm9kZS1rZXllZCBtYXBzLiBUaGUgc3BlY2lhbCBwYXJ0IGlzIHRoYXQgaXQgYWxzbyBh
bGxvY2F0ZWQgaW5kaWNlcyBmb3IgdGhlIHNoYWRvdyB2YWx1ZXMgb2YgUGhpCisvLyBub2Rlcywg
d2hpY2ggaXMgbmVlZGVkIGZvciBhbnkgZmxvdy1zZW5zaXRpdmUgYW5hbHlzaXMuCitjbGFzcyBG
bG93SW5kZXhpbmcgeworcHVibGljOgorICAgIEZsb3dJbmRleGluZyhHcmFwaCYpOworICAgIH5G
bG93SW5kZXhpbmcoKTsKKyAgICAKKyAgICB2b2lkIHJlY29tcHV0ZSgpOworICAgIAorICAgIEdy
YXBoJiBncmFwaCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBudW1JbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9udW1JbmRpY2VzOyB9CisgICAgCisgICAg
dW5zaWduZWQgaW5kZXgodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBub2RlSW5k
ZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleChOb2RlKiBub2RlKSBjb25zdCB7IHJldHVy
biBpbmRleChub2RlLT5pbmRleCgpKTsgfQorICAgIAorICAgIHVuc2lnbmVkIHNoYWRvd0luZGV4
KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25vZGVJ
bmRleFRvU2hhZG93SW5kZXhbbm9kZUluZGV4XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
c2hhZG93SW5kZXgoTm9kZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICByZXR1cm4gc2hhZG93
SW5kZXgobm9kZS0+aW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KHVu
c2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0Cisg
ICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2pl
Y3Rpb246OlByaW1hcnk6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgobm9kZUluZGV4KTsKKyAg
ICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJldHVy
biBzaGFkb3dJbmRleChub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleChOb2RlICpub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIE5vZGVG
bG93UHJvamVjdGlvbjo6UHJpbWFyeToKKyAgICAgICAgICAgIHJldHVybiBpbmRleChub2RlKTsK
KyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJl
dHVybiBzaGFkb3dJbmRleChub2RlKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgaW5kZXgoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaW5kZXgocHJvamVjdGlvbi5ub2RlKCksIHByb2plY3Rpb24ua2luZCgp
KTsKKyAgICB9CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKHVu
c2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbV9ub2RlSW5k
ZXhUb1NoYWRvd0luZGV4LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBOb2RlRmxvd1Byb2pl
Y3Rpb24obV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIE5vZGVGbG93UHJv
amVjdGlvbigKKyAgICAgICAgICAgIG1fZ3JhcGgubm9kZUF0KG1fc2hhZG93SW5kZXhUb05vZGVJ
bmRleFtpbmRleCAtIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleC5zaXplKCldKSwKKyAgICAgICAg
ICAgIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KTsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIEdyYXBoJiBtX2dyYXBoOworICAgIHVuc2lnbmVkIG1fbnVtSW5kaWNlczsKKyAgICBWZWN0
b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVJbmRleFRvU2hhZG93
SW5kZXg7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9z
aGFkb3dJbmRleFRvTm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmxvd01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmxvd01hcC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmxvd01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gbm9kZXMgdG8gdmFs
dWVzIHRoYXQgaXMgdXNlZnVsIGZvciBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcy4gSW4gc3VjaCBh
bgorLy8gYW5hbHlzaXMsIGF0IGV2ZXJ5IHBvaW50IGluIHRoZSBwcm9ncmFtIHdlIG5lZWQgdG8g
Y29uc2lkZXIgdGhlIHZhbHVlcyBvZiBub2RlcyBwbHVzIHRoZSBzaGFkb3cKKy8vIHZhbHVlcyBv
ZiBQaGlzLiBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gZG8gYm90aCBvZiB0aG9zZSB0aGluZ3MuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRmxvd01hcCB7CitwdWJsaWM6CisgICAgRmxvd01h
cChGbG93SW5kZXhpbmcmIGluZGV4aW5nKQorICAgICAgICA6IG1faW5kZXhpbmcoaW5kZXhpbmcp
CisgICAgeworICAgICAgICByZWNvbXB1dGUoKTsKKyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0
aGlzIGFmdGVyIHlvdSBoYXZlIHJlY29tcHV0ZWQgdGhlIGluZGV4aW5nIHRvIHdoaWNoIHRoaXMg
aXMgc2xhdmVkLiBUaGlzIGFsc28gcmVzZXRzIHRoZQorICAgIC8vIGNvbnRlbnRzIG9mIHRoZSBk
YXRhIHN0cnVjdHVyZS4KKyAgICB2b2lkIHJlY29tcHV0ZSgpCisgICAgeworICAgICAgICBtX21h
cC5yZXNpemUobV9pbmRleGluZy5udW1JbmRpY2VzKCkpOworICAgICAgICBtX21hcC5maWxsKFQo
KSk7CisgICAgfQorICAgIAorICAgIEdyYXBoJiBncmFwaCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXhpbmcuZ3JhcGgoKTsgfQorICAgIAorICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX21hcFtub2RlSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBU
JiBhdChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGUtPmluZGV4KCkp
OworICAgIH0KKyAgICAKKyAgICBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXBbbV9pbmRleGluZy5zaGFkb3dJbmRleChub2RlSW5kZXgp
XTsKKyAgICB9CisgICAgCisgICAgVCYgYXRTaGFkb3coTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX21hcFttX2luZGV4aW5nLnNoYWRvd0luZGV4KG5vZGUpXTsKKyAgICB9Cisg
ICAgCisgICAgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246Oktp
bmQga2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFttX2luZGV4aW5nLmluZGV4KG5v
ZGVJbmRleCwga2luZCldOworICAgIH0KKyAgICAKKyAgICBUJiBhdChOb2RlKiBub2RlLCBOb2Rl
Rmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFtt
X2luZGV4aW5nLmluZGV4KG5vZGUsIGtpbmQpXTsKKyAgICB9CisgICAgCisgICAgVCYgYXQoTm9k
ZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBb
bV9pbmRleGluZy5pbmRleChwcm9qZWN0aW9uKV07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQm
IGF0KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFw
Kj4odGhpcyktPmF0KG5vZGVJbmRleCk7IH0KKyAgICBjb25zdCBUJiBhdChOb2RlKiBub2RlKSBj
b25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSk7IH0KKyAg
ICBjb25zdCBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2RlSW5kZXgpOyB9CisgICAgY29u
c3QgVCYgYXRTaGFkb3coTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93
TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGUpOyB9CisgICAgY29uc3QgVCYgYXQodW5zaWduZWQg
bm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCwga2luZCk7IH0KKyAgICBj
b25zdCBUJiBhdChOb2RlKiBub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUsIGtpbmQpOyB9
CisgICAgY29uc3QgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChwcm9qZWN0aW9uKTsgfQorICAg
IAorcHJpdmF0ZToKKyAgICBGbG93SW5kZXhpbmcmIG1faW5kZXhpbmc7CisgICAgVmVjdG9yPFQs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX21hcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSlNDOjpERkc6OkZsb3dNYXA8
VD4mIG1hcCkKK3sKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1hcC5ncmFwaCgpLm1heE5vZGVDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYg
KEpTQzo6REZHOjpOb2RlKiBub2RlID0gbWFwLmdyYXBoKCkubm9kZUF0KGkpKSB7CisgICAgICAg
ICAgICBpZiAoY29uc3QgVCYgdmFsdWUgPSBtYXAuYXQobm9kZSkpCisgICAgICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBub2RlLCAiPT4iLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hcC5ncmFwaCgpLm1heE5vZGVDb3VudCgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKEpTQzo6REZHOjpOb2RlKiBub2RlID0gbWFwLmdyYXBoKCkubm9k
ZUF0KGkpKSB7CisgICAgICAgICAgICBpZiAoY29uc3QgVCYgdmFsdWUgPSBtYXAuYXRTaGFkb3co
bm9kZSkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic2hhZG93KCIsIG5vZGUs
ICIpPT4iLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAog
I2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHQ29udHJvbEVx
dWl2YWxlbmNlQW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVk
ZSAiREZHRmxvd0luZGV4aW5nLmgiCisjaW5jbHVkZSAiREZHRmxvd01hcC5oIgogI2luY2x1ZGUg
IkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHTmF0
dXJhbExvb3BzLmgiCkBAIC03OSw2ICs4MSw4IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4m
IHBsYW4sIExvbmdMaXYKICAgICAsIG1fZm9ybShMb2FkU3RvcmUpCiAgICAgLCBtX3VuaWZpY2F0
aW9uU3RhdGUoTG9jYWxseVVuaWZpZWQpCiAgICAgLCBtX3JlZkNvdW50U3RhdGUoRXZlcnl0aGlu
Z0lzTGl2ZSkKKyAgICAsIG1faW5kZXhpbmdDYWNoZShzdGQ6Om1ha2VfdW5pcXVlPEZsb3dJbmRl
eGluZz4oKnRoaXMpKQorICAgICwgbV9hYnN0cmFjdFZhbHVlc0NhY2hlKHN0ZDo6bWFrZV91bmlx
dWU8Rmxvd01hcDxBYnN0cmFjdFZhbHVlPj4oKm1faW5kZXhpbmdDYWNoZSkpCiB7CiAgICAgQVNT
RVJUKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDEyIEBAIGNsYXNzIEJhY2t3
YXJkc0RvbWluYXRvcnM7CiBjbGFzcyBDRkc7CiBjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpczsKIGNsYXNzIERvbWluYXRvcnM7CitjbGFzcyBGbG93SW5kZXhpbmc7CiBjbGFzcyBOYXR1
cmFsTG9vcHM7CiBjbGFzcyBQcmVQb3N0TnVtYmVyaW5nOwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4g
Y2xhc3MgRmxvd01hcDsKKwogI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwg
bm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAogICAgICAgICBOb2RlKiBfbm9kZSA9
IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXApAQCAtMjAxLDggKzIwNCw2IEBAIHB1YmxpYzoKICAgICBOb2RlKiBub2Rl
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNCeUluZGV4W2luZGV4XTsg
fQogICAgIHZvaWQgcGFja05vZGVJbmRpY2VzKCk7CiAKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1
ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBhYnN0cmFjdFZhbHVlc0NhY2hlKCkgeyByZXR1
cm4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOyB9Ci0KICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAg
CiAgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXpp
bmcgYnkgZGVmYXVsdC4KQEAgLTkzNSw2ICs5MzYsOSBAQCBwdWJsaWM6CiAgICAgUmVmQ291bnRT
dGF0ZSBtX3JlZkNvdW50U3RhdGU7CiAgICAgYm9vbCBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsKICAg
ICBib29sIG1faGFzRXhjZXB0aW9uSGFuZGxlcnMgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxGbG93SW5kZXhpbmc+IG1faW5kZXhpbmdDYWNoZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Rmxvd01hcDxBYnN0cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOworCiBwcml2YXRl
OgogICAgIHZvaWQgYWRkTm9kZVRvTWFwQnlJbmRleChOb2RlKik7CiAKQEAgLTk3Miw3ICs5NzYs
NiBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPE5vZGUqLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gbV9ub2Rlc0J5SW5kZXg7CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV9ub2RlSW5kZXhGcmVlTGlzdDsKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWJzdHJhY3RWYWx1ZXNDYWNoZTsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDgyOTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBzdGF0aWMgY29uc3QgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiAKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RTdGF0
ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQotICAgICwgbV9hYnN0cmFjdFZh
bHVlcyhncmFwaC5hYnN0cmFjdFZhbHVlc0NhY2hlKCkpCisgICAgLCBtX2luZGV4aW5nKCpncmFw
aC5tX2luZGV4aW5nQ2FjaGUpCisgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFwaC5tX2Fic3Ry
YWN0VmFsdWVzQ2FjaGUpCiAgICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQogICAgICwgbV9ibG9jaygwKQogewpA
QCAtNTcsMTAgKzU4LDggQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Js
bwogICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMo
KSA9PSBiYXNpY0Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgQVNT
RVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2lj
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKIAotICAgIC8vIENlcnRh
aW4gcGhhc2VzIGluc2VydCBub2RlcyBpbiBhIGJsb2NrIGFmdGVyIHJ1bm5pbmcgdGhyb3VnaCBp
dC4KLSAgICAvLyBXZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIEFic3RyYWN0VmFsdWVz
IHdoZW4gaW5pdGlhbGl6aW5nIEFic3RyYWN0U3RhdGUgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHZh
bHVlcwotICAgIC8vIGNhbiBpbmNyZWFzZSBhcyB3ZSBleGVjdXRlLiBJbnN0ZWFkLCB3ZSBpbmNy
ZWFzZSB0aGUgc2l6ZSBhcyBuZWVkZWQgYmVmb3JlIHByb2Nlc3NpbmcgZWFjaCBibG9jay4KLSAg
ICBtX2Fic3RyYWN0VmFsdWVzLnJlc2l6ZShtX2dyYXBoLm1heE5vZGVDb3VudCgpKTsKKyAgICBt
X2luZGV4aW5nLnJlY29tcHV0ZSgpOworICAgIG1fYWJzdHJhY3RWYWx1ZXMucmVjb21wdXRlKCk7
CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5zaXplKCk7IGkr
KykKICAgICAgICAgZm9yTm9kZShiYXNpY0Jsb2NrLT5hdChpKSkuY2xlYXIoKTsKQEAgLTgwLDEy
ICs3OSwxMiBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvCiAgICAg
bV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSBiYXNpY0Jsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGVBdEhlYWQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPEJhc2lj
QmxvY2s6OlNTQURhdGE6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywgY29uc3QgVmVj
dG9yPE5vZGUqPiYgbGl2ZSkKK3N0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPE5vZGVB
YnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywgY29uc3QgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlv
bj4mIGxpdmUpCiB7CiAgICAgdmFsdWVzLnJlc2l6ZSgwKTsKICAgICB2YWx1ZXMucmVzZXJ2ZUNh
cGFjaXR5KGxpdmUuc2l6ZSgpKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgOiBsaXZlKQotICAgICAg
ICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5vZGVBYnN0cmFj
dFZhbHVlUGFpciB7IG5vZGUsIEFic3RyYWN0VmFsdWUoKSB9KTsKKyAgICBmb3IgKE5vZGVGbG93
UHJvamVjdGlvbiBub2RlIDogbGl2ZSkKKyAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChO
b2RlQWJzdHJhY3RWYWx1ZVBhaXIgeyBub2RlLCBBYnN0cmFjdFZhbHVlKCkgfSk7CiB9CiAKIHZv
aWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQpAQCAtMTk5LDcgKzE5OCw3IEBA
IGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2sKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CiAKLSAg
ICAgICAgZm9yIChhdXRvJiB2YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCkg
eworICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgdmFsdWVBdFRhaWwgOiBibG9j
ay0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
QXROb2RlID0gZm9yTm9kZSh2YWx1ZUF0VGFpbC5ub2RlKTsKICAgICAgICAgICAgIHZhbHVlQXRU
YWlsLnZhbHVlLm1lcmdlKHZhbHVlQXROb2RlKTsKICAgICAgICAgICAgIHZhbHVlQXROb2RlID0g
dmFsdWVBdFRhaWwudmFsdWU7CkBAIC0yOTEsMTMgKzI5MCwxMyBAQCBib29sIEluUGxhY2VBYnN0
cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmcm9tLT52
YWx1ZXNBdFRhaWwuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+dmFs
dWVzQXRIZWFkW2ldLm1lcmdlKGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7CiAKLSAgICAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IHRvLT5zc2EtPnZhbHVlc0F0SGVhZCkgewotICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGVudHJ5Lm5vZGU7CisgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWly
JiBlbnRyeSA6IHRvLT5zc2EtPnZhbHVlc0F0SGVhZCkgeworICAgICAgICAgICAgTm9kZUZsb3dQ
cm9qZWN0aW9uIG5vZGUgPSBlbnRyeS5ub2RlOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgTWVyZ2luZyBmb3IgIiwgbm9kZSwgIjogZnJv
bSAiLCBmb3JOb2RlKG5vZGUpLCAiIHRvICIsIGVudHJ5LnZhbHVlLCAiXG4iKTsKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZUNvdW50SW5Gcm9tQmxvY2sgPSAwOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiBmcm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZyb20tPnNzYS0+
dmFsdWVzQXRUYWlsKSB7CisgICAgICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYg
ZnJvbUJsb2NrVmFsdWVBdFRhaWwgOiBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbCkgewogICAgICAg
ICAgICAgICAgIGlmIChmcm9tQmxvY2tWYWx1ZUF0VGFpbC5ub2RlID09IG5vZGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGZyb21CbG9ja1ZhbHVlQXRUYWlsLnZhbHVlID09IGZvck5v
ZGUobm9kZSkpOwogICAgICAgICAgICAgICAgICAgICArK3ZhbHVlQ291bnRJbkZyb21CbG9jazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdCcmFuY2hE
aXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0Zsb3dNYXAu
aCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKQEAgLTQzLDExICs0NCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICAKLSAgICB2b2lkIGNyZWF0ZVZh
bHVlRm9yTm9kZShOb2RlKikgeyB9CisgICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZUZs
b3dQcm9qZWN0aW9uKSB7IH0KICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUq
IG5vZGUpCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9k
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2Fic3RyYWN0VmFsdWVzW25vZGUtPmluZGV4KCld
OworICAgICAgICByZXR1cm4gbV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKICAgICB9CiAgICAg
CiAgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpCkBAIC0xMzIsNyArMTMzLDgg
QEAgcHJpdmF0ZToKICAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKIAotICAgIFZlY3RvcjxBYnN0
cmFjdFZhbHVlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIG1fYWJzdHJhY3RWYWx1ZXM7Cisg
ICAgRmxvd0luZGV4aW5nJiBtX2luZGV4aW5nOworICAgIEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4m
IG1fYWJzdHJhY3RWYWx1ZXM7CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gbV92YXJpYWJs
ZXM7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJl
dmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKICNpbmNsdWRlICJERkdCbG9ja01hcElubGlu
ZXMuaCIKKyNpbmNsdWRlICJERkdGbG93SW5kZXhpbmcuaCIKICNpbmNsdWRlICJERkdHcmFwaC5o
IgogI2luY2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCkBA
IC00NCwxMCArNDUsMTIgQEAgcHVibGljOgogICAgIExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFw
aCYgZ3JhcGgpCiAgICAgICAgIDogUGhhc2UoZ3JhcGgsICJsaXZlbmVzcyBhbmFseXNpcyIpCiAg
ICAgICAgICwgbV9kaXJ0eUJsb2NrcyhtX2dyYXBoLm51bUJsb2NrcygpKQorICAgICAgICAsIG1f
aW5kZXhpbmcoKm1fZ3JhcGgubV9pbmRleGluZ0NhY2hlKQogICAgICAgICAsIG1fbGl2ZUF0SGVh
ZChtX2dyYXBoKQogICAgICAgICAsIG1fbGl2ZUF0VGFpbChtX2dyYXBoKQotICAgICAgICAsIG1f
d29ya3NldChncmFwaC5tYXhOb2RlQ291bnQoKSAtIDEpCiAgICAgeworICAgICAgICBtX2dyYXBo
Lm1faW5kZXhpbmdDYWNoZS0+cmVjb21wdXRlKCk7CisgICAgICAgIG1fd29ya3NldCA9IHN0ZDo6
bWFrZV91bmlxdWU8SW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+PihtX2dyYXBo
Lm1faW5kZXhpbmdDYWNoZS0+bnVtSW5kaWNlcygpKTsKICAgICB9CiAKICAgICBib29sIHJ1bigp
CkBAIC04MCwyMCArODMsMjIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgYXV0byYgbGl2ZUF0SGVhZElu
ZGljZXMgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF07Ci0gICAgICAgICAgICAgICAgVmVjdG9y
PE5vZGUqPiYgbGl2ZUF0SGVhZCA9IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQ7CisgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4m
CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Js
b2NrSW5kZXhdOworICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBs
aXZlQXRIZWFkID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKICAgICAgICAgICAgICAgICBsaXZl
QXRIZWFkLnJlc2l6ZSgwKTsKICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBh
Y2l0eShsaXZlQXRIZWFkSW5kaWNlcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggOiBsaXZlQXRIZWFkSW5kaWNlcykKLSAgICAgICAgICAgICAgICAgICAgbGl2
ZUF0SGVhZC51bmNoZWNrZWRBcHBlbmQobV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJv
amVjdGlvbihpbmRleCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGNvbnN0IGF1dG8mIGxpdmVBdFRhaWxJbmRpY2VzID0gbV9saXZlQXRUYWlsW2Jsb2Nr
SW5kZXhdOwotICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4mIGxpdmVBdFRhaWwgPSBibG9j
ay0+c3NhLT5saXZlQXRUYWlsOworICAgICAgICAgICAgICAgIGNvbnN0IEhhc2hTZXQ8dW5zaWdu
ZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5
SGFzaFRyYWl0czx1bnNpZ25lZD4+JgorICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsSW5k
aWNlcyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8
Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZUF0VGFpbCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7
CiAgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5yZXNpemUoMCk7CiAgICAgICAgICAgICAgICAg
bGl2ZUF0VGFpbC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0VGFpbEluZGljZXMuc2l6ZSgpKTsKICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbV9saXZlQXRUYWlsW2Jsb2NrSW5k
ZXhdKQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnVuY2hlY2tlZEFwcGVuZChtX2dy
YXBoLm5vZGVBdChpbmRleCkpOworICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnVuY2hl
Y2tlZEFwcGVuZChtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIApAQCAtMTA2LDY3ICsxMTEsNTYgQEAgcHJpdmF0ZToKICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKGJsb2NrLCAiT25seSBkaXJ0eSBibG9ja3MgbmVlZHMgdXBkYXRl
cy4gQSBudWxsIGJsb2NrIHNob3VsZCBuZXZlciBiZSBkaXJ0eS4iKTsKIAotICAgICAgICBtX3dv
cmtzZXQuY2xlYXIoKTsKKyAgICAgICAgbV93b3Jrc2V0LT5jbGVhcigpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4IDogbV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdKQotICAgICAgICAgICAg
bV93b3Jrc2V0LmFkZChpbmRleCk7CisgICAgICAgICAgICBtX3dvcmtzZXQtPmFkZChpbmRleCk7
CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2Rl
SW5kZXgtLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKIAotICAgICAgICAgICAgLy8gR2l2ZW4gYW4gVXBzaWxvbjoKLSAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAvLyAgICBuOiBVcHNpbG9uKEB4LCBecCkKLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAcCBhbmQgQG4gYW5kIHVzZXMgQHguCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gR2l2ZW4gYSBQaGk6Ci0gICAgICAgICAgICAv
LwotICAgICAgICAgICAgLy8gICAgcDogUGhpKCkKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBXZSBzYXkgbm90aGluZy4gSXQncyBuZWl0aGVyIGEgdXNlIG5vciBhIGRlZi4KLSAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAvLyBHaXZlbiBhIG5vZGU6Ci0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gICAgbjogVGhpbmd5KEBhLCBAYiwgQGMpCi0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3MgQG4gYW5kIHVzZXMgQGEsIEBiLCBA
Yy4KLSAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICBjYXNlIFVwc2lsb246IHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKCFtX3dvcmtzZXQuY29udGFpbnMobm9kZS0+aW5kZXgoKSksICJVcHNpbG9uIHNob3VsZCBu
b3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVyIG5vZGVzLiIpOworICAgICAgICAgICAgICAgIEFT
U0VSVF9XSVRIX01FU1NBR0UoIW1fd29ya3NldC0+Y29udGFpbnMobm9kZS0+aW5kZXgoKSksICJV
cHNpbG9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVyIG5vZGVzLiIpOwogCiAg
ICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7Ci0gICAgICAgICAgICAgICAg
bV93b3Jrc2V0LnJlbW92ZShwaGktPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1fd29ya3Nl
dC5hZGQobm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgIG1fd29ya3Nl
dC0+cmVtb3ZlKG1faW5kZXhpbmcuc2hhZG93SW5kZXgocGhpKSk7CisgICAgICAgICAgICAgICAg
bV93b3Jrc2V0LT5hZGQobV9pbmRleGluZy5pbmRleChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ug
UGhpOiB7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5yZW1vdmUobV9pbmRleGluZy5pbmRl
eChub2RlKSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5hZGQobV9pbmRleGluZy5zaGFk
b3dJbmRleChub2RlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUobm9k
ZS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbm9kZSwgYWRkQ2hpbGRVc2UpOworICAgICAgICAgICAgICAgIG1fd29ya3NldC0+cmVt
b3ZlKG1faW5kZXhpbmcuaW5kZXgobm9kZSkpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9U
b0NoaWxkcmVuKAorICAgICAgICAgICAgICAgICAgICBub2RlLCBbJl0gKEVkZ2UmIGVkZ2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbmV3RW50cnkgPSBtX3dvcmtzZXQtPmFkZCht
X2luZGV4aW5nLmluZGV4KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBl
ZGdlLnNldEtpbGxTdGF0dXMobmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgbGl2ZSBhdCBoZWFkLgotICAgICAg
ICBhdXRvJiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOwotICAgICAgICBp
ZiAobV93b3Jrc2V0LnNpemUoKSA9PSBsaXZlQXRIZWFkLnNpemUoKSkKKyAgICAgICAgVmVjdG9y
PHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4mIGxpdmVBdEhlYWQgPSBtX2xp
dmVBdEhlYWRbYmxvY2tJbmRleF07CisgICAgICAgIGlmIChtX3dvcmtzZXQtPnNpemUoKSA9PSBs
aXZlQXRIZWFkLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGxpdmVJbmRleEF0SGVhZCA6IGxpdmVBdEhlYWQpCi0gICAgICAgICAgICBt
X3dvcmtzZXQucmVtb3ZlKGxpdmVJbmRleEF0SGVhZCk7Ci0gICAgICAgIEFTU0VSVCghbV93b3Jr
c2V0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShsaXZlSW5kZXhB
dEhlYWQpOworICAgICAgICBBU1NFUlQoIW1fd29ya3NldC0+aXNFbXB0eSgpKTsKIAotICAgICAg
ICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkLnNpemUoKSArIG1fd29ya3Nl
dC5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0KQor
ICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkLnNpemUoKSArIG1f
d29ya3NldC0+c2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6ICptX3dv
cmtzZXQpCiAgICAgICAgICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVuZChuZXdWYWx1ZSk7
CiAKICAgICAgICAgYm9vbCBjaGFuZ2VkUHJlZGVjZXNzb3IgPSBmYWxzZTsKICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6IG1fd29ya3NldCkgeworICAgICAgICAg
ICAgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4mCisgICAgICAgICAgICAgICAg
bGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5ld1ZhbHVlIDogKm1fd29ya3NldCkgewogICAgICAgICAgICAgICAgIGlmIChs
aXZlQXRUYWlsLmFkZChuZXdWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2Rp
cnR5QmxvY2tzLnF1aWNrU2V0KHByZWRlY2Vzc29yLT5pbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFuZ2VkUHJlZGVjZXNzb3IgPSB0cnVlOwpAQCAtMTc2LDIxICsxNzAsMTcgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGNoYW5nZWRQcmVkZWNlc3NvcjsKICAgICB9CiAKLSAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2UpCi0gICAg
ewotICAgICAgICBib29sIG5ld0VudHJ5ID0gbV93b3Jrc2V0LmFkZChlZGdlLT5pbmRleCgpKTsK
LSAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG5ld0VudHJ5ID8gRG9lc0tpbGwgOiBEb2VzTm90
S2lsbCk7Ci0gICAgfQotCiAgICAgLy8gQmxvY2tzIHdpdGggbmV3IGxpdmUgdmFsdWVzIGF0IHRh
aWwuCiAgICAgQml0VmVjdG9yIG1fZGlydHlCbG9ja3M7CisgICAgCisgICAgRmxvd0luZGV4aW5n
JiBtX2luZGV4aW5nOwogCiAgICAgLy8gTGl2ZSB2YWx1ZXMgcGVyIGJsb2NrIGVkZ2UuCiAgICAg
QmxvY2tNYXA8VmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4+IG1f
bGl2ZUF0SGVhZDsKICAgICBCbG9ja01hcDxIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1
bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWdu
ZWQ+Pj4gbV9saXZlQXRUYWlsOwogCiAgICAgLy8gU2luZ2xlIHNwYXJzZSBzZXQgYWxsb2NhdGVk
IG9uY2UgYW5kIHVzZWQgYnkgZXZlcnkgYmFzaWMgYmxvY2suCi0gICAgSW5kZXhTcGFyc2VTZXQ8
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fd29ya3NldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5k
ZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+PiBtX3dvcmtzZXQ7CiB9OwogCiBib29s
IHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjUyOSwxNSArMjUyOSwxOCBA
QCBwdWJsaWM6CiAgICAgQmFzaWNCbG9jayogb3duZXI7CiB9OwogCi1pbmxpbmUgYm9vbCBub2Rl
Q29tcGFyYXRvcihOb2RlKiBhLCBOb2RlKiBiKQotewotICAgIHJldHVybiBhLT5pbmRleCgpIDwg
Yi0+aW5kZXgoKTsKLX0KK3N0cnVjdCBOb2RlQ29tcGFyYXRvciB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTm9kZVB0clR5cGU+CisgICAgYm9vbCBvcGVyYXRvcigpKE5vZGVQdHJUeXBlIGEsIE5v
ZGVQdHJUeXBlIGIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYS0+aW5kZXgoKSA8IGIt
PmluZGV4KCk7CisgICAgfQorfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIENTdHJpbmcgbm9k
ZUxpc3REdW1wKGNvbnN0IFQmIG5vZGVMaXN0KQogewotICAgIHJldHVybiBzb3J0ZWRMaXN0RHVt
cChub2RlTGlzdCwgbm9kZUNvbXBhcmF0b3IpOworICAgIHJldHVybiBzb3J0ZWRMaXN0RHVtcChu
b2RlTGlzdCwgTm9kZUNvbXBhcmF0b3IoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBA
IC0yNTQ4LDcgKzI1NTEsNyBAQCBDU3RyaW5nIG5vZGVNYXBEdW1wKGNvbnN0IFQmIG5vZGVNYXAs
IER1CiAgICAgICAgIHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2RlTWFwLmJl
Z2luKCk7CiAgICAgICAgIGl0ZXIgIT0gbm9kZU1hcC5lbmQoKTsgKytpdGVyKQogICAgICAgICBr
ZXlzLmFwcGVuZChpdGVyLT5rZXkpOwotICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMu
ZW5kKCksIG5vZGVDb21wYXJhdG9yKTsKKyAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlz
LmVuZCgpLCBOb2RlQ29tcGFyYXRvcigpKTsKICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CiAg
ICAgQ29tbWFQcmludGVyIGNvbW1hOwogICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMu
c2l6ZSgpOyArK2kpCkBAIC0yNTYyLDcgKzI1NjUsNyBAQCBDU3RyaW5nIG5vZGVWYWx1ZVBhaXJM
aXN0RHVtcChjb25zdCBUJiBuCiAgICAgdXNpbmcgViA9IHR5cGVuYW1lIFQ6OlZhbHVlVHlwZTsK
ICAgICBUIHNvcnRlZExpc3QgPSBub2RlVmFsdWVQYWlyTGlzdDsKICAgICBzdGQ6OnNvcnQoc29y
dGVkTGlzdC5iZWdpbigpLCBzb3J0ZWRMaXN0LmVuZCgpLCBbXShjb25zdCBWJiBhLCBjb25zdCBW
JiBiKSB7Ci0gICAgICAgIHJldHVybiBub2RlQ29tcGFyYXRvcihhLm5vZGUsIGIubm9kZSk7Cisg
ICAgICAgIHJldHVybiBOb2RlQ29tcGFyYXRvcigpKGEubm9kZSwgYi5ub2RlKTsKICAgICB9KTsK
IAogICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlQWJzdHJhY3RWYWx1
ZVBhaXI6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobm9k
ZSwgIj0+IiwgdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVj
dGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBOb2Rl
QWJzdHJhY3RWYWx1ZVBhaXIgeworICAgIE5vZGVBYnN0cmFjdFZhbHVlUGFpcigpIHsgfQorICAg
IAorICAgIE5vZGVBYnN0cmFjdFZhbHVlUGFpcihOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSwgY29u
c3QgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgICAgIDogbm9kZShub2RlKQorICAgICAgICAs
IHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbiBub2RlOworICAg
IEFic3RyYWN0VmFsdWUgdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9k
ZUZsb3dQcm9qZWN0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE5vZGVGbG93UHJvamVjdGlvbjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnBy
aW50KCItIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGtpbmQoKSA9PSBQcmlt
YXJ5KSB7CisgICAgICAgIG91dC5wcmludChub2RlKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG91dC5wcmludCgic2hhZG93KCIsIG5vZGUoKSwgIikiKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJv
amVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hU
YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE5vZGVG
bG93UHJvamVjdGlvbiB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgUHJpbWFy
eSwKKyAgICAgICAgU2hhZG93CisgICAgfTsKKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24o
KSB7IH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oTm9kZSogbm9kZSkKKyAgICAgICAg
OiBtX3dvcmQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oTm9kZSogbm9kZSwgS2luZCBraW5kKQorICAgICAg
ICA6IG1fd29yZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSB8IChraW5kID09IFNoYWRv
dyA/IHNoYWRvd0JpdCA6IDApKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZUZsb3dQcm9q
ZWN0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3dvcmQo
c2hhZG93Qml0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICEhbV93b3JkOyB9CisgICAgCisgICAgS2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gKG1fd29yZCAmIHNoYWRvd0JpdCkgPyBTaGFkb3cgOiBQcmltYXJ5OyB9Cisg
ICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2RlKj4o
bV93b3JkICYgfnNoYWRvd0JpdCk7IH0KKyAgICAKKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiAqbm9kZSgpOyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0
dXJuIG5vZGUoKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fd29yZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE5v
ZGVGbG93UHJvamVjdGlvbiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dv
cmQgPT0gb3RoZXIubV93b3JkOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oTm9k
ZUZsb3dQcm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBOb2RlRmxvd1Byb2pl
Y3Rpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2goTm9kZSogbm9kZSwgY29uc3QgRnVuYyYgZnVu
YykKKyAgICB7CisgICAgICAgIGZ1bmMoTm9kZUZsb3dQcm9qZWN0aW9uKG5vZGUpKTsKKyAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gUGhpKQorICAgICAgICAgICAgZnVuYyhOb2RlRmxvd1Byb2pl
Y3Rpb24obm9kZSwgU2hhZG93KSk7CisgICAgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyBj
b25zdCB1aW50cHRyX3Qgc2hhZG93Qml0ID0gMTsKKyAgICAgICAgICAgICAgICAgCisgICAgdWlu
dHB0cl90IG1fd29yZCB7IDAgfTsKK307CisKK3N0cnVjdCBOb2RlRmxvd1Byb2plY3Rpb25IYXNo
IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChOb2RlRmxvd1Byb2plY3Rpb24ga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoTm9kZUZsb3dQcm9qZWN0
aW9uIGEsIE5vZGVGbG93UHJvamVjdGlvbiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0
aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6
OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6
REZHOjpOb2RlRmxvd1Byb2plY3Rpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTEgKzEyNiwxMyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgc3RhdGUtYXQt
dGFpbCBiYXNlZCBvbiB0aGUgZXBvY2hzIG9mIGxpdmUgbm9kZXMgYW5kIHRoZQogICAgICAgICAg
ICAgICAgICAgICAvLyBjdXJyZW50IGVwb2NoLiBXZSBncm93IHN0YXRlLWF0LXRhaWwgbW9ub3Rv
bmljYWxseSB0byBlbnN1cmUgY29udmVyZ2VuY2UuCiAgICAgICAgICAgICAgICAgICAgIGJvb2wg
dGhpc0Jsb2NrQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRUYWlsKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5raW5kKCkgPT0gTm9kZUZsb3dQcm9qZWN0
aW9uOjpTaGFkb3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+ZXBvY2goKSAhPSBtX2N1cnJlbnRFcG9jaCkg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIG9sZGVyIHRo
YW4gdGhlIGN1cnJlbnQgZXBvY2gsIHRoZW4gd2UgbWF5IG5lZWQgdG8KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBydW4gYSBiYXJyaWVyIG9uIGl0IGluIHRoZSBmdXR1cmUuIFNvLCBh
ZGQgaXQgdG8gdGhlIHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNCbG9j
a0NoYW5nZWQgfD0gbV9zdGF0ZUF0VGFpbC0+YXQoYmxvY2spLmFkZChub2RlKS5pc05ld0VudHJ5
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNCbG9ja0NoYW5nZWQgfD0gbV9zdGF0
ZUF0VGFpbC0+YXQoYmxvY2spLmFkZChub2RlLm5vZGUoKSkuaXNOZXdFbnRyeTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKQEAgLTE3OCw4ICsxODAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICBtX3N0YXRlLT5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBibG9jay0+c3NhLT5s
aXZlQXRIZWFkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdGVBdEhlYWQtPmF0KGJsb2Nr
KS5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24g
bm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS5raW5kKCkgPT0gTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlQXRIZWFkLT5hdChibG9j
aykuY29udGFpbnMobm9kZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHBy
ZXZpb3VzIGJsb2NrcyB0ZWxsIHVzIHRoYXQgdGhpcyBub2RlIG1heSBuZWVkIGEgYmFycmllciBp
biB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8gZnV0dXJlLCB0aGVuIHB1dCBpdCBpbiB0aGUg
YW5jaWVudCBwcmltb3JkaWFsIGVwb2NoLiBUaGlzIGZvcmNlcyB1cyB0bwogICAgICAgICAgICAg
ICAgICAgICAvLyBlbWl0IGEgYmFycmllciBvbiBhbnkgcG9zc2libHktY2VsbCBzdG9yZSwgcmVn
YXJkbGVzcyBvZiB0aGUgZXBvY2ggb2YgdGhlCkBAIC0zMjYsNyArMzMwLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgVXBzaWxvbjoKLSAgICAgICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRFcG9jaChtX25v
ZGUtPmVwb2NoKCkpOworICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGUgd29yc3QgZm9yIFBo
aXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IFBoaSBzaGFkb3dzLgorICAg
ICAgICAgICAgICAgIG1fbm9kZS0+cGhpKCktPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAg
ICAgICAgIG1fbm9kZS0+c2V0RXBvY2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9u
IDIwODI5NCkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0g
Q3JhcwogY2xhc3MgSW5kZXhTcGFyc2VTZXQgewogICAgIHR5cGVkZWYgVmVjdG9yPHVuc2lnbmVk
LCAwLCBPdmVyZmxvd0hhbmRsZXI+IFZhbHVlTGlzdDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJ
bmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhWYWx1ZSk7CisgICAgZXhwbGljaXQgSW5kZXhTcGFy
c2VTZXQodW5zaWduZWQgc2l6ZSk7CiAKICAgICBib29sIGFkZCh1bnNpZ25lZCk7CiAgICAgYm9v
bCByZW1vdmUodW5zaWduZWQpOwpAQCAtNjUsOSArNjUsOSBAQCBwcml2YXRlOgogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyPgotaW5saW5lIEluZGV4U3BhcnNlU2V0PE92
ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIG1heFZhbHVlKQoraW5saW5l
IEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KHVuc2lnbmVk
IHNpemUpCiB7Ci0gICAgbV9tYXAucmVzaXplKG1heFZhbHVlICsgMSk7CisgICAgbV9tYXAucmVz
aXplKHNpemUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293773</attachid>
            <date>2016-11-03 10:25:25 -0700</date>
            <delta_ts>2016-11-03 12:02:40 -0700</delta_ts>
            <desc>it passes the test</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>73270</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzMjkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIHBsYXlzIGZhc3QgYW5kIGxvb3NlIHdpdGggdGhlIHNoYWRvdyB2
YWx1ZXMgb2YgYSBQaGkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDMwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB3aHkgdGhlIERGRyBuZWVkcyB0
byByZWNvZ25pemUgdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBoaS4KKworICAgICAgICAqIHN0cmVz
cy9kZmctc3NhLXN3YXAuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNi0xMS0wMyAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc2tpbmcgZm9yIGEg
dmFsdWUgcHJvZmlsZSBwcmVkaWN0aW9uIHNob3VsZCBiZSBkZWZlbnNpdmUgYWdhaW5zdCBub3Qg
ZmluZGluZyBhIHZhbHVlIHByb2ZpbGUKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy1zc2Etc3dh
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3NhLXN3YXAuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLXNzYS1zd2FwLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOCBAQAordmFyIGksYz0wOworZnVuY3Rpb24gZm9vKCkKK3sKKyAgICB2YXIg
YT0xLGI7Zm9yKGk9MDtpPDI7KytpKXtbYSxiXT1bYixhXTtjKyt9aWYoIWFeYil0aHJvdyBjCit9
Citub0lubGluZShmb28pOworZm9yKHZhciBrID0gMDsgayA8IDEwMDAwOyArK2spCisgICAgZm9v
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4Mjk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
OCBAQAorMjAxNi0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBwbGF5cyBmYXN0IGFuZCBsb29zZSB3aXRoIHRoZSBzaGFkb3cgdmFsdWVzIG9mIGEg
UGhpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQz
MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIE9oIGJveSwgd2hhdCBhbiBlbWJhcnJhc3NpbmcgbWlzdGFrZSEgVGhlIHN0eWxlIG9mIFNT
QSBJIGxpa2UgdG8gdXNlIGF2b2lkcyBibG9jay92YWx1ZQorICAgICAgICB0dXBsZXMgYXMgcGFy
YW1ldGVycyBvZiBhIFBoaSwgdGhlcmVieSBzaW1wbGlmeWluZyBDRkcgdHJhbnNmb3JtYXRpb25z
IGFuZCBtYWtpbmcgUGhpIGxhcmdlbHkKKyAgICAgICAgbm90IGEgc3BlY2lhbCBjYXNlIGZvciBt
b3N0IGNvbXBpbGVyIHRyYW5zZm9ybXMuIEl0IGRvZXMgdGhpcyBieSBpbnRyb2R1Y2luZyBhbm90
aGVyIHZhbHVlCisgICAgICAgIGNhbGxlZCBVcHNpbG9uLCB3aGljaCBzdG9yZXMgYSB2YWx1ZSBp
bnRvIHNvbWUgUGhpLgorICAgICAgICAKKyAgICAgICAgQjMgdXNlcyB0aGlzIGFsc28uIFRoZSBl
YXNpZXN0IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgVXBzaWxvbi9QaGkgYmVoYXZlIGxpa2UgaXMg
dG8gbG9vayBhdAorICAgICAgICB0aGUgQjMtPkFpciBsb3dlcmluZy4gQWlyIGlzIG5vdCBTU0Eg
LSBpdCBoYXMgVG1wcyB0aGF0IHlvdSBjYW4gYXNzaWduIHRvIGFuZCB1c2UgYXMgbWFueQorICAg
ICAgICB0aW1lcyBhcyB5b3UgbGlrZS4gQjMgYWxsb2NhdGVzIG9uZSBUbXAgcGVyIFZhbHVlLCBh
bmQgYW4gZXh0cmEgInBoaVRtcCIgZm9yIFBoaXMsIHNvIHRoYXQKKyAgICAgICAgUGhpcyBnZXQg
dHdvIFRtcHMgdG90YWwuIFVwc2lsb24gc3RvcmVzIHRoZSB2YWx1ZSBpbnRvIHRoZSBwaGlUbXAg
b2YgdGhlIFBoaSwgd2hpbGUgUGhpIG1vdmVzCisgICAgICAgIHRoZSB2YWx1ZSBmcm9tIGl0cyBw
aGlUbXAgdG8gaXRzIHRtcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRv
IHN1cHBvcnQgc2NlbmFyaW9zIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAgICAgICBhOiBQ
aGkoKQorICAgICAgICAgICAgYjogVXBzaWxvbihAeCwgXmEpCisgICAgICAgICAgICBjOiBVc2Uo
QGEpCisgICAgICAgIAorICAgICAgICBIZXJlLCB3ZSB3YW50IEBjIHRvIHNlZSBAYSdzIHZhbHVl
IGJlZm9yZSBAYi4gVGhhdCdzIGEgdmVyeSBiYXNpYyByZXF1aXJlbWVudCBvZiBTU0E6IHRoYXQK
KyAgICAgICAgdGhlIGEgdmFsdWUgKGxpa2UgQGEpIGRvZXNuJ3QgY2hhbmdlIGR1cmluZyBpdHMg
bGlmZXRpbWUuCisgICAgICAgIAorICAgICAgICBVbmZvcnR1bmF0ZWx5LCBERkcnYSBsaXZlbmVz
cyBhbmFseXNpcyBhbmQgYWJzdHJhY3QgaW50ZXJwcmV0ZXIgYm90aCBmYWlsZWQgdG8gY29ycmVj
dGx5CisgICAgICAgIG1vZGVsIFVwc2lsb24vUGhpIHRoaXMgd2F5LiBUaGV5IHdvdWxkIGFzc3Vt
ZSB0aGF0IGl0J3MgYWNjdXJhdGUgdG8gbW9kZWwgdGhlIFVwc2lsb24gYXMKKyAgICAgICAgc3Rv
cmluZyBpbnRvIHRoZSBQaGkgZGlyZWN0bHkuCisgICAgICAgIAorICAgICAgICBCZWNhdXNlIERG
RyBkb2VzIGZsb3cgYW5hbHlzaXMgb3ZlciBTU0EsIG1ha2luZyBpdCBjb3JyZWN0IG1lYW5zIGVu
YWJsaW5nIGl0IHRvIHNwZWFrIG9mIHRoZQorICAgICAgICBzaGFkb3cgdmFsdWUuIFRoaXMgY2hh
bmdlIGFkZHJlc3NlcyB0aGlzIHByb2JsZW0gYnkgaW50cm9kdWNpbmcgdGhlIGNvbmNlcHQgb2Yg
YQorICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24uIFRoaXMgaXMgYSBrZXkgdGhhdCBsZXRzIHVz
IHNwZWFrIG9mIGJvdGggYSBOb2RlJ3MgcHJpbWFyeSB2YWx1ZSBhbmQgaXRzCisgICAgICAgIG9w
dGlvbmFsICJzaGFkb3ciIHZhbHVlLiBMaXZlbmVzcyBhbmQgQUkgYXJlIG5vdyBrZXllZCBieSBO
b2RlRmxvd1Byb2plY3Rpb24gcmF0aGVyIHRoYW4KKyAgICAgICAgTm9kZSouIENvbmNlcHR1YWxs
eSB0aGlzIHR1cm5zIG91dCB0byBiZSBhIHZlcnkgc2ltcGxlIGNoYW5nZSwgYnV0IGl0IGRvZXMg
dG91Y2ggYSBnb29kCisgICAgICAgIGFtb3VudCBvZiBjb2RlLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wTGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RMaXZlbmVzcyk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzQWRhcHRlcjo6bWF4SW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI6Om1heEluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjpt
YXhJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpmb3JOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0
cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5oOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0Nv
bWJpbmVkTGl2ZW5lc3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmxpdmVOb2Rlc0F0SGVhZCk6
CisgICAgICAgICogZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaDoKKyAgICAgICAgKiBkZmcvREZH
Rmxvd0luZGV4aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5n
OjpGbG93SW5kZXhpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6fkZsb3dJ
bmRleGluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjpyZWNvbXB1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdGbG93SW5kZXhpbmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6Rmxvd0luZGV4aW5nOjpncmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5n
OjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OmluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OnNoYWRvd0luZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpGbG93SW5kZXhpbmc6Om5vZGVQcm9qZWN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHRmxvd01hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpGbG93TWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpyZWNvbXB1dGUpOgorICAgICAgICAoSlND
OjpERkc6OkZsb3dNYXA6OmdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjphdCk6
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6YXRTaGFkb3cpOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmFic3RyYWN0VmFsdWVzQ2FjaGUpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpzZXRMaXZlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJz
dHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFs
dWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Zm9y
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhh
c2UpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3NCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjphZGRDaGlsZFVzZSk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUxpc3REdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlTWFwRHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZVZhbHVlUGFpckxpc3REdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlQ29tcGFyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlQWJzdHJhY3RWYWx1ZVBhaXI6Ok5vZGVBYnN0cmFjdFZhbHVlUGFp
cik6CisgICAgICAgICogZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR05vZGVGbG93UHJvamVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Rmxvd1Byb2plY3Rpb246Ok5vZGVGbG93UHJvamVjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlRmxvd1Byb2plY3Rpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJv
amVjdGlvbjo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0
b3ItPik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlRmxvd1Byb2plY3Rpb25IYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDoKKwogMjAxNi0xMS0wMiAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBzaG91bGQgbm90IHBvcCBm
cm9tIGFuIGVtcHR5IHN0YWNrIGluIHRoZSBXYXNtIGZ1bmN0aW9uIHBhcnNlci4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDYg
KzMwMyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0ZhaWxlZEZp
bmFsaXplci5jcHAKICAgICBkZmcvREZHRmluYWxpemVyLmNwcAogICAgIGRmZy9ERkdGaXh1cFBo
YXNlLmNwcAorICAgIGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwCiAgICAgZGZnL0RGR0ZsdXNoRm9y
bWF0LmNwcAogICAgIGRmZy9ERkdGbHVzaGVkQXQuY3BwCiAgICAgZGZnL0RGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC0zMzQsNyArMzM1LDkgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCiAg
ICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKKyAgICBkZmcv
REZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCisg
ICAgZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAKICAgICBkZmcvREZHTm9kZU9yaWdpbi5j
cHAKICAgICBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcv
REZHT1NSRW50cnkuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksMTMgQEAK
IAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRD
QkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNBNjcx
NTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZFNTFDMTky
MkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVh
c29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyMDE3N0YxRENBREMzMzAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc3RDFEQ0FEQzMwMDBF
QTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCAqLzsgfTsKKwkJMEYyMDE3ODAxRENBREMzNTAw
RUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRl
eGluZy5oICovOyB9OworCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODEx
RENBREQ0MDAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCAqLzsgfTsKKwkJMEYyMDE3ODUxRENBRTE0
OTAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODQxRENBRTE0NzAwRUE1OTUwIC8qIERG
R05vZGVGbG93UHJvamVjdGlvbi5oICovOyB9OworCQkwRjIwMTc4NjFEQ0FFMTRDMDBFQTU5NTAg
LyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2RlRmxv
d1Byb2plY3Rpb24uY3BwICovOyB9OworCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyogREZH
Tm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIwMTc4ODFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0
VmFsdWVQYWlyLmggKi87IH07CisJCTBGMjAxNzhBMURDQjk0MjYwMEVBNTk1MCAvKiBERkdOb2Rl
QWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZh
bHVlUGFpci5jcHAgKi87IH07CiAJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFs
UmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi87IH07
CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0
QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdGMTRCRUFBODIwMEFE
QzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVD
b252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yNDkyLDYgKzI0OTksMTMgQEAKIAkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8q
IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0gZGZnL0RGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkU1
MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNwcDsgcGF0aCA9
IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0gZGZnL0RGR0Zs
b3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MTFEQ0FE
RDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdGbG93TWFwLmg7IHBhdGggPSBkZmcvREZHRmxvd01hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjIwMTc4MzFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQ
cm9qZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05v
ZGVGbG93UHJvamVjdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODQxRENBRTE0NzAwRUE1OTUw
IC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxvd1Byb2pl
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODcxRENCOTQyMjAw
RUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwOyBwYXRoID0g
ZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZUFic3RyYWN0VmFs
dWVQYWlyLmg7IHBhdGggPSBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjBDMjU4MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFs
UmVnaXN0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlydHVh
bFJlZ2lzdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyNzkxNEJF
NzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252
ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUNvbnZl
bnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Njc2LDggKzY2OTAsNiBA
QAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oICovLAogCQkJ
CTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8sCiAJCQkJMEYy
RkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCi0JCQkJRTMyMkU1QTAx
REE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwICovLAotCQkJ
CUUzMjJFNUExMURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmgg
Ki8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVu
dGlmaWVycy5oICovLAogCQkJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVk
SW5mZXJyZWRUeXBlLmggKi8sCkBAIC02NjkyLDYgKzY3MDQsOCBAQAogCQkJCTBGNUExMjcxMTky
RDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICovLAogCQkJCTBGNUExMjcyMTkyRDlGREYw
MDg3NjRBMyAvKiBERkdEb2VzR0MuaCAqLywKIAkJCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5oICovLAorCQkJCUUzMjJFNUEwMURBNjQ0MzUwMDZFNzcwOSAvKiBE
RkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcCAqLywKKwkJCQlFMzIyRTVBMTFEQTY0NDM1MDA2
RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oICovLAogCQkJCTBGMUUzQTQ0MTUz
NENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovLAogCQkJCTBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAogCQkJCTBGRDNDODIyMTQxMTVE
MEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKQEAgLTY3MDgsNiArNjcyMiw5IEBACiAJCQkJ
QTc4QTk3NkYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oICovLAogCQkJCTBGMkJE
QzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJCREMx
MzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovLAorCQkJCTBGMjAxNzdEMURD
QURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovLAorCQkJCTBGMjAxNzdFMURD
QURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLywKKwkJCQkwRjIwMTc4MTFEQ0FE
RDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovLAogCQkJCTBGOUQzMzk0MTdGRkM0RTYwMDcz
QzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovLAogCQkJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJC
QyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJCQlBN0Q4OUNFODE3QTBCOENDMDA3NzNBRDggLyog
REZHRmx1c2hGb3JtYXQuY3BwICovLApAQCAtNjc3NSw5ICs2NzkyLDEzIEBACiAJCQkJQTczNzgx
MEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovLAogCQkJCTBGQjRCNTFF
MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFD
MDAyQjJBRDcgLyogREZHTm9kZS5oICovLAorCQkJCTBGMjAxNzg3MURDQjk0MjIwMEVBNTk1MCAv
KiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwICovLAorCQkJCTBGMjAxNzg4MURDQjk0MjIw
MEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCAqLywKIAkJCQkwRkI0QjUxRjE2
QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZUFsbG9jYXRvci5oICovLAogCQkJCTBGQTU4MUI3MTUw
RTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJCTBGQTU4MUI4MTUwRTk1
MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKKwkJCQkwRjIwMTc4MzFEQ0FFMTQ3MDBF
QTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLywKKwkJCQkwRjIwMTc4NDFEQ0FF
MTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggKi8sCiAJCQkJMEY1RDA4NUMx
QjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCkBAIC03NTM3LDYgKzc1NTgsNyBAQAogCQkJ
CTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjMzOEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdG
bG93TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTMxQzBENjdFRTAw
MDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDE1LDYgKzg0Mzcs
NyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJp
bmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4NTFEQ0FFMTQ5MDBFQTU5NTAg
LyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzU1NUI4QTFE
QUUwM0E1MDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclBhdGNocG9pbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3MEE0NzFENTQzQThCMDA2RTcyMzIgLyogQ2VsbENv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTExLDYgKzg1MzQsNyBAQAogCQkJCTE0MTQ0
OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDJENkYxMjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFs
dWVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyog
TWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDBBNDg1MUE5MDUxQUYwMEQ3M0ND
QSAvKiBNYXRoQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzQzBFMTZGNUNEMDBC
MzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTc3LDYgKzg2MDEsNyBA
QAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdOdWxs
QWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1
QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgw
MURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzYzLDYgKzk3ODgsNyBA
QAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3NjIwNDFEQjkyNDI2MDBCN0EyRkQgLyogQ29sbGVj
dGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEE3QkVGMUI4Mjk3NUEwMDJEOTE1
NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3OEExRENC
OTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNCQUQwMEU1NUM5OSAvKiBJbnNwZWN0
b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcg
LyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk5ODksNiAr
MTAwMTUsNyBAQAogCQkJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRo
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAv
KiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAxNzdGMURDQURD
MzMwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZC
NTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTM3OTRFNzUxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFu
YWx5emVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNTVGMzUyMUI3REM4NTMwMEM1MERDNSAv
KiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDA4Niw2ICsx
MDExMyw3IEBACiAJCQkJQTVGRDAwNjcxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA2RDE4OUIwMEFBMDA2MzMyMzEgLyogU2Ny
aXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDZGMTg5QjAwQUEwMDYz
MzIzMSAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3ODYx
RENBRTE0QzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUZEMDA3RDE4OUIwQjRDMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyNTE4OEVGRkZEMDAxMTBGMTQgLyogU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1RDkzQTUxODUwMTJBODAw
NDAwREVEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDIwODI5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFwdGVyIHsKIAog
ICAgIFRtcExpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQg
bWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2Rl
JiBjb2RlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUubnVtVG1wcyhh
ZGFwdGVyVHlwZSk7CiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxhZGFwdGVyVHlw
ZT46OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CkBAIC02NSw5ICs2NSw5IEBAIHN0cnVjdCBTdGFj
a1Nsb3RMaXZlbmVzc0FkYXB0ZXIgewogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgbWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhD
b2RlJiBjb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGUuc3RhY2tTbG90cygpLnNpemUo
KSAtIDE7CisgICAgICAgIHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgfQog
ICAgIHN0YXRpYyBib29sIGFjY2VwdHNUeXBlKEFyZzo6VHlwZSkgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHN0YXRpYyB1bnNpZ25lZCB2YWx1ZVRvSW5kZXgoU3RhY2tTbG90KiBzdGFja1Nsb3QpIHsg
cmV0dXJuIHN0YWNrU2xvdC0+aW5kZXgoKTsgfQpAQCAtODMsOSArODMsOSBAQCBzdHJ1Y3QgUmVn
TGl2ZW5lc3NBZGFwdGVyIHsKIAogICAgIFJlZ0xpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAK
LSAgICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYpCisgICAgc3RhdGljIHVuc2lnbmVk
IG51bUluZGljZXMoQ29kZSYpCiAgICAgewotICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgp
OworICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpICsgMTsKICAgICB9CiAKICAgICBzdGF0
aWMgYm9vbCBhY2NlcHRzVHlwZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTEwMSw3
ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBjb2Rl
KQogICAgICAgICA6IEFkYXB0ZXIoY29kZSkKLSAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6
bWF4SW5kZXgoY29kZSkpCisgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om51bUluZGljZXMo
Y29kZSkpCiAgICAgICAgICwgbV9saXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQogICAgICAgICAsIG1f
bGl2ZUF0VGFpbChjb2RlLnNpemUoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjA4Mjk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJl
Y3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNp
bmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKICNpbmNsdWRlICJERkdQaGlDaGlsZHJl
bi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MSw3ICs0Miw3IEBA
IHB1YmxpYzoKICAgICBBYnN0cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJhY3RTdGF0ZVR5
cGUmKTsKICAgICB+QWJzdHJhY3RJbnRlcnByZXRlcigpOwogICAgIAotICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhdGUuZm9yTm9k
ZShub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDgyOTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MDksNiArMjgwOSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICBm
b3JOb2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQ
cm9qZWN0aW9uOjpTaGFkb3cpKTsKICAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3
b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUgYmVjb21lIGEK
ICAgICAgICAgLy8gY29uc3RhbnQsIGluIHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRvIGtub3cuCiAg
ICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLm1fdmFsdWUpCkBAIC0yODE2LDggKzI4MTcsOSBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIFVwc2lsb246IHsKLSAgICAgICAgbV9zdGF0ZS5jcmVhdGVWYWx1
ZUZvck5vZGUobm9kZS0+cGhpKCkpOwotICAgICAgICBmb3JOb2RlKG5vZGUtPnBoaSgpKSA9IGZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24gc2hhZG93
KG5vZGUtPnBoaSgpLCBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdyk7CisgICAgICAgIG1fc3Rh
dGUuY3JlYXRlVmFsdWVGb3JOb2RlKHNoYWRvdyk7CisgICAgICAgIGZvck5vZGUoc2hhZG93KSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtMjk2OSwxMCArMjk3MSwxNSBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgZWxzZQogICAgICAgICBjbG9iYmVyTGltaXQrKzsKICAgICBBU1NFUlQo
Y2xvYmJlckxpbWl0IDw9IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gY2xvYmJlckxpbWl0OyBpLS07KQotICAgICAgICBmdW5jdG9yKGZvck5vZGUobV9zdGF0
ZS5ibG9jaygpLT5hdChpKSkpOworICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVyTGltaXQ7IGkt
LTspIHsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKAorICAgICAgICAgICAg
bV9zdGF0ZS5ibG9jaygpLT5hdChpKSwKKyAgICAgICAgICAgIFsmXSAoTm9kZUZsb3dQcm9qZWN0
aW9uIG5vZGVQcm9qZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgZnVuY3Rvcihmb3JOb2RlKG5v
ZGVQcm9qZWN0aW9uKSk7CisgICAgICAgICAgICB9KTsKKyAgICB9CiAgICAgaWYgKG1fZ3JhcGgu
bV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2Nr
KCktPnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9k
ZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKQogICAgICAgICAgICAgZnVuY3Rv
cihmb3JOb2RlKG5vZGUpKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFy
aWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKQEAgLTMwMjksOSArMzAzNiw5IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdm9pZCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogewogICAg
IENvbW1hUHJpbnRlciBjb21tYSgiICIpOwotICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47CisgICAg
SGFzaFNldDxOb2RlRmxvd1Byb2plY3Rpb24+IHNlZW47CiAgICAgaWYgKG1fZ3JhcGgubV9mb3Jt
ID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNz
YS0+bGl2ZUF0SGVhZCkgeworICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDog
bV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQpIHsKICAgICAgICAgICAgIHNlZW4uYWRk
KG5vZGUpOwogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUp
OwogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKQEAgLTMwNDAsMTUgKzMwNDcsMTcg
QEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAg
ICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdGF0ZS5ibG9jaygpLT5zaXplKCk7
ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5hdChpKTsKLSAg
ICAgICAgc2Vlbi5hZGQobm9kZSk7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9y
Tm9kZShub2RlKTsKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUsICI6IiwgdmFsdWUpOworICAg
ICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCisgICAgICAgICAgICBtX3N0YXRlLmJs
b2NrKCktPmF0KGkpLCBbJl0gKE5vZGVGbG93UHJvamVjdGlvbiBub2RlUHJvamVjdGlvbikgewor
ICAgICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGVQcm9qZWN0aW9uKTsKKyAgICAgICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZVByb2plY3Rpb24pOworICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGVQcm9qZWN0aW9uLCAiOiIs
IHZhbHVlKTsKKyAgICAgICAgICAgIH0pOwogICAgIH0KICAgICBpZiAobV9ncmFwaC5tX2Zvcm0g
PT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3Nh
LT5saXZlQXRUYWlsKSB7CisgICAgICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBt
X3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFpbCkgewogICAgICAgICAgICAgaWYgKHNlZW4u
Y29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDE2ICs0NywxNiBAQCBBdFRhaWxBYnN0
cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0YXRlCiAKIEF0VGFpbEFic3RyYWN0U3RhdGU6On5B
dFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CiAKLXZvaWQgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3Jl
YXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUpCit2b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNy
ZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAgICBtX3ZhbHVl
c0F0VGFpbE1hcC5hdChtX2Jsb2NrKS5hZGQobm9kZSwgQWJzdHJhY3RWYWx1ZSgpKTsKIH0KIAot
QWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2RlKiBub2RlKQor
QWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZShOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZSkKIHsKICAgICBhdXRvJiB2YWx1ZXNBdFRhaWwgPSBtX3ZhbHVlc0F0VGFpbE1h
cC5hdChtX2Jsb2NrKTsKLSAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0
b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOwotICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgaXRlciAhPSB2YWx1ZXNBdFRhaWwuZW5kKCkpOworICAgIEhhc2hNYXA8Tm9kZUZs
b3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFp
bC5maW5kKG5vZGUpOworICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZS5ub2RlKCksIGl0ZXIg
IT0gdmFsdWVzQXRUYWlsLmVuZCgpKTsKICAgICByZXR1cm4gaXRlci0+dmFsdWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RT
dGF0ZS5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdCbG9ja01hcC5oIgogI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsgCiAKQEAgLTQ3LDggKzQ4LDggQEAgcHVi
bGljOgogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7CiAgICAgfQogICAgIAotICAgIHZvaWQgY3Jl
YXRlVmFsdWVGb3JOb2RlKE5vZGUqKTsKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUq
KTsKKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pOworICAg
IEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFj
dFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyByZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7
IH0KICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiYgdmFyaWFibGVzKCkgeyByZXR1cm4gbV9i
bG9jay0+dmFsdWVzQXRUYWlsOyB9CiAgICAgCkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsKLSAgICBCbG9ja01hcDxIYXNoTWFwPE5vZGUq
LCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRhaWxNYXA7CisgICAgQmxvY2tNYXA8SGFzaE1h
cDxOb2RlRmxvd1Byb2plY3Rpb24sIEFic3RyYWN0VmFsdWU+PiBtX3ZhbHVlc0F0VGFpbE1hcDsK
ICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OwogfTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDIwODI5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVj
dGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIK
KyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCIKICNpbmNsdWRlICJERkdOb2Rl
T3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgiCiAjaW5jbHVk
ZSAiT3BlcmFuZHMuaCIKQEAgLTI0OCwxMiArMjQ5LDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBS
ZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5
QXRIZWFkOwogICAgICAgICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRUYWlsOwogCi0g
ICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0SGVhZDsKLSAgICAgICAgVmVjdG9yPE5vZGUqPiBs
aXZlQXRUYWlsOwotICAgICAgICBzdHJ1Y3QgTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsKLSAgICAg
ICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAg
ICAgICB9OworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiBsaXZlQXRIZWFkOwor
ICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiBsaXZlQXRUYWlsOwogICAgICAgICBW
ZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiB2YWx1ZXNBdEhlYWQ7CiAgICAgICAgIFZlY3Rv
cjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZhbHVlc0F0VGFpbDsKICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAJ
KHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmlu
ZWRMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDggKzM4LDEwIEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIEhhc2hTZXQ8Tm9kZSo+IGxpdmVOb2Rlc0F0SGVhZChH
cmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJsb2NrKQogewogICAgIEhhc2hTZXQ8Tm9kZSo+IHNl
ZW47Ci0gICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKLSAgICAg
ICAgc2Vlbi5hZGQobm9kZSk7CisgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGJs
b2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgaWYgKG5vZGUua2luZCgpID09IE5vZGVG
bG93UHJvamVjdGlvbjo6UHJpbWFyeSkKKyAgICAgICAgICAgIHNlZW4uYWRkKG5vZGUubm9kZSgp
KTsKKyAgICB9CiAgICAgCiAgICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAgPSBi
bG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7CiAgICAgZ3JhcGguZm9yQWxsTG9jYWxzTGl2
ZUluQnl0ZWNvZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVk
TGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bWJpbmVkTGl2ZW5lc3MuaAkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gUmV0dXJucyB0aGUgc2V0IG9m
IG5vZGVzIGxpdmUgYXQgdGFpbCwgYm90aCBkdWUgdG8gZHVlIERGRyBhbmQgZHVlIHRvIGJ5dGVj
b2RlIChpLmUuIE9TUiBleGl0KS4KIEhhc2hTZXQ8Tm9kZSo+IGxpdmVOb2Rlc0F0SGVhZChHcmFw
aCYsIEJhc2ljQmxvY2sqKTsKIAorLy8gV0FSTklORzogVGhpcyBjdXJyZW50bHkgZG9lcyBub3Qg
cmVhc29uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiBzaGFkb3cgdmFsdWVzLiBUaGUgZXhlY3V0aW9u
CisvLyBzZW1hbnRpY3Mgb2YgREZHIFNTQSBhcmUgdGhhdCBhbiBVcHNpbG9uIHN0b3JlcyB0byB0
aGUgc2hhZG93IHZhbHVlIG9mIGEgUGhpLCBhbmQgdGhlIFBoaSBsb2FkcworLy8gZnJvbSB0aGF0
IHNoYWRvdyB2YWx1ZS4gSGVuY2UsIHRoZSBzaGFkb3cgdmFsdWVzIGFyZSBsaWtlIHZhcmlhYmxl
cywgYW5kIGhhdmUgbGl2ZW5lc3MuIFRoZSBub3JtYWwKKy8vIGxpdmVuZXNzIGFuYWx5c2lzIHdp
bGwgdGVsbCB5b3UgYWJvdXQgdGhlIGxpdmVuZXNzIG9mIHNoYWRvdyB2YWx1ZXMuIEl0J3MgT0sg
dG8gaWdub3JlIHNoYWRvdworLy8gdmFsdWVzIGlmIHlvdSB0cmVhdCBVcHNpbG9uIGFzIGFuIG9w
YXF1ZSBlc2NhcGUsIGFuZCBhbGwgb2YgdGhlIGNsaW5ldHMgb2YgQ29tYmluZWRMaXZlbmVzcyBk
byBzby4KIHN0cnVjdCBDb21iaW5lZExpdmVuZXNzIHsKICAgICBDb21iaW5lZExpdmVuZXNzKCkg
eyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5k
ZXhpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmxvd0luZGV4aW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRmxvd0luZGV4aW5nOjpGbG93SW5k
ZXhpbmcoR3JhcGgmIGdyYXBoKQorICAgIDogbV9ncmFwaChncmFwaCkKKyAgICAsIG1fbnVtSW5k
aWNlcygwKQoreworICAgIHJlY29tcHV0ZSgpOworfQorCitGbG93SW5kZXhpbmc6On5GbG93SW5k
ZXhpbmcoKQoreworfQorCit2b2lkIEZsb3dJbmRleGluZzo6cmVjb21wdXRlKCkKK3sKKyAgICB1
bnNpZ25lZCBudW1Ob2RlSW5kaWNlcyA9IG1fZ3JhcGgubWF4Tm9kZUNvdW50KCk7CisgICAgCisg
ICAgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LnJlc2l6ZShudW1Ob2RlSW5kaWNlcyk7CisgICAg
bV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LmZpbGwoVUlOVF9NQVgpOworICAgIAorICAgIG1fc2hh
ZG93SW5kZXhUb05vZGVJbmRleC5yZXNpemUoMCk7CisKKyAgICBtX251bUluZGljZXMgPSBudW1O
b2RlSW5kaWNlczsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7
CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBQaGkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IG5v
ZGUtPmluZGV4KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzaGFkb3dJbmRleCA9IG1fbnVtSW5k
aWNlcysrOworICAgICAgICAgICAgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4W25vZGVJbmRleF0g
PSBzaGFkb3dJbmRleDsKKyAgICAgICAgICAgIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleC5hcHBl
bmQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwg
bV9zaGFkb3dJbmRleFRvTm9kZUluZGV4LnNpemUoKSArIG51bU5vZGVJbmRpY2VzID09IG1fbnVt
SW5kaWNlcyk7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fc2hh
ZG93SW5kZXhUb05vZGVJbmRleFtzaGFkb3dJbmRleCAtIG51bU5vZGVJbmRpY2VzXSA9PSBub2Rl
SW5kZXgpOworICAgICAgICB9CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIGlzIGEgbWFwcGluZyBmcm9tIG5vZGVzIHRvIHVu
aXF1ZSwgZGVuc2UgaW5kaWNlcyB0aGF0IGNhbiBiZSB1c2VkIGZvciBjcmVhdGluZyBmYXN0Cisv
LyBOb2RlLWtleWVkIG1hcHMuIFRoZSBzcGVjaWFsIHBhcnQgaXMgdGhhdCBpdCBhbHNvIGFsbG9j
YXRlZCBpbmRpY2VzIGZvciB0aGUgc2hhZG93IHZhbHVlcyBvZiBQaGkKKy8vIG5vZGVzLCB3aGlj
aCBpcyBuZWVkZWQgZm9yIGFueSBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcy4KK2NsYXNzIEZsb3dJ
bmRleGluZyB7CitwdWJsaWM6CisgICAgRmxvd0luZGV4aW5nKEdyYXBoJik7CisgICAgfkZsb3dJ
bmRleGluZygpOworICAgIAorICAgIHZvaWQgcmVjb21wdXRlKCk7CisgICAgCisgICAgR3JhcGgm
IGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIAorICAgIHVuc2lnbmVkIG51
bUluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX251bUluZGljZXM7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBpbmRleCh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIG5vZGVJbmRleDsg
fQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGlu
ZGV4KG5vZGUtPmluZGV4KCkpOyB9CisgICAgCisgICAgdW5zaWduZWQgc2hhZG93SW5kZXgodW5z
aWduZWQgbm9kZUluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4
VG9TaGFkb3dJbmRleFtub2RlSW5kZXhdOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaGFk
b3dJbmRleChOb2RlKiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBub2RlLCBub2RlLT5vcCgpID09IFBoaSk7CisgICAgICAgIHJldHVybiBzaGFkb3dJbmRl
eChub2RlLT5pbmRleCgpKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgodW5zaWdu
ZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlv
bjo6UHJpbWFyeToKKyAgICAgICAgICAgIHJldHVybiBpbmRleChub2RlSW5kZXgpOworICAgICAg
ICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIHNo
YWRvd0luZGV4KG5vZGVJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGluZGV4KE5vZGUgKm5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgTm9kZUZsb3dQ
cm9qZWN0aW9uOjpQcmltYXJ5OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4KG5vZGUpOworICAg
ICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93OgorICAgICAgICAgICAgcmV0dXJu
IHNoYWRvd0luZGV4KG5vZGUpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBpbmRleChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpbmRleChwcm9qZWN0aW9uLm5vZGUoKSwgcHJvamVjdGlvbi5raW5kKCkpOwor
ICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCBtX25vZGVJbmRleFRv
U2hhZG93SW5kZXguc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIE5vZGVGbG93UHJvamVjdGlv
bihtX2dyYXBoLm5vZGVBdChpbmRleCkpOworICAgICAgICByZXR1cm4gTm9kZUZsb3dQcm9qZWN0
aW9uKAorICAgICAgICAgICAgbV9ncmFwaC5ub2RlQXQobV9zaGFkb3dJbmRleFRvTm9kZUluZGV4
W2luZGV4IC0gbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LnNpemUoKV0pLAorICAgICAgICAgICAg
Tm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
R3JhcGgmIG1fZ3JhcGg7CisgICAgdW5zaWduZWQgbV9udW1JbmRpY2VzOworICAgIFZlY3Rvcjx1
bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbm9kZUluZGV4VG9TaGFkb3dJbmRl
eDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3NoYWRv
d0luZGV4VG9Ob2RlSW5kZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbG93TWFwLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbG93TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHRmxvd0luZGV4aW5nLmgiCisjaW5jbHVkZSAi
REZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBub2RlcyB0byB2YWx1ZXMg
dGhhdCBpcyB1c2VmdWwgZm9yIGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lzLiBJbiBzdWNoIGFuCisv
LyBhbmFseXNpcywgYXQgZXZlcnkgcG9pbnQgaW4gdGhlIHByb2dyYW0gd2UgbmVlZCB0byBjb25z
aWRlciB0aGUgdmFsdWVzIG9mIG5vZGVzIHBsdXMgdGhlIHNoYWRvdworLy8gdmFsdWVzIG9mIFBo
aXMuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBkbyBib3RoIG9mIHRob3NlIHRoaW5ncy4KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBGbG93TWFwIHsKK3B1YmxpYzoKKyAgICBGbG93TWFwKEZs
b3dJbmRleGluZyYgaW5kZXhpbmcpCisgICAgICAgIDogbV9pbmRleGluZyhpbmRleGluZykKKyAg
ICB7CisgICAgICAgIHJlY29tcHV0ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMg
YWZ0ZXIgeW91IGhhdmUgcmVjb21wdXRlZCB0aGUgaW5kZXhpbmcgdG8gd2hpY2ggdGhpcyBpcyBz
bGF2ZWQuIFRoaXMgYWxzbyByZXNldHMgdGhlCisgICAgLy8gY29udGVudHMgb2YgdGhlIGRhdGEg
c3RydWN0dXJlLgorICAgIHZvaWQgcmVjb21wdXRlKCkKKyAgICB7CisgICAgICAgIG1fbWFwLnJl
c2l6ZShtX2luZGV4aW5nLm51bUluZGljZXMoKSk7CisgICAgICAgIG1fbWFwLmZpbGwoVCgpKTsK
KyAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGlu
Zy5ncmFwaCgpOyB9CisgICAgCisgICAgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbWFwW25vZGVJbmRleF07CisgICAgfQorICAgIAorICAgIFQmIGF0
KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSk7Cisg
ICAgfQorICAgIAorICAgIFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX21hcFttX2luZGV4aW5nLnNoYWRvd0luZGV4KG5vZGVJbmRleCldOwor
ICAgIH0KKyAgICAKKyAgICBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fbWFwW21faW5kZXhpbmcuc2hhZG93SW5kZXgobm9kZSldOworICAgIH0KKyAgICAK
KyAgICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBr
aW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5kZXhpbmcuaW5kZXgobm9kZUlu
ZGV4LCBraW5kKV07CisgICAgfQorICAgIAorICAgIFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93
UHJvamVjdGlvbjo6S2luZCBraW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5k
ZXhpbmcuaW5kZXgobm9kZSwga2luZCldOworICAgIH0KKyAgICAKKyAgICBUJiBhdChOb2RlRmxv
d1Byb2plY3Rpb24gcHJvamVjdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFttX2lu
ZGV4aW5nLmluZGV4KHByb2plY3Rpb24pXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCYgYXQo
dW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0
aGlzKS0+YXQobm9kZUluZGV4KTsgfQorICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlKTsgfQorICAgIGNv
bnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGVJbmRleCk7IH0KKyAgICBjb25zdCBU
JiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAq
Pih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0KKyAgICBjb25zdCBUJiBhdCh1bnNpZ25lZCBub2Rl
SW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4LCBraW5kKTsgfQorICAgIGNvbnN0
IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSwga2luZCk7IH0KKyAg
ICBjb25zdCBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KHByb2plY3Rpb24pOyB9CisgICAgCitw
cml2YXRlOgorICAgIEZsb3dJbmRleGluZyYgbV9pbmRleGluZzsKKyAgICBWZWN0b3I8VCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbWFwOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBKU0M6OkRGRzo6Rmxvd01hcDxUPiYg
bWFwKQoreworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbWFwLmdyYXBoKCkubWF4Tm9kZUNvdW50KCk7ICsraSkgeworICAgICAgICBpZiAoSlND
OjpERkc6Ok5vZGUqIG5vZGUgPSBtYXAuZ3JhcGgoKS5ub2RlQXQoaSkpIHsKKyAgICAgICAgICAg
IGlmIChjb25zdCBUJiB2YWx1ZSA9IG1hcC5hdChub2RlKSkKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIG5vZGUsICI9PiIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFwLmdyYXBoKCkubWF4Tm9kZUNvdW50KCk7ICsraSkg
eworICAgICAgICBpZiAoSlNDOjpERkc6Ok5vZGUqIG5vZGUgPSBtYXAuZ3JhcGgoKS5ub2RlQXQo
aSkpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBUJiB2YWx1ZSA9IG1hcC5hdFNoYWRvdyhub2Rl
KSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzaGFkb3coIiwgbm9kZSwgIik9
PiIsIHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5j
bHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdDb250cm9sRXF1aXZh
bGVuY2VBbmFseXNpcy5oIgogI2luY2x1ZGUgIkRGR0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJE
RkdGbG93SW5kZXhpbmcuaCIKKyNpbmNsdWRlICJERkdGbG93TWFwLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNsdWRlICJERkdOYXR1cmFs
TG9vcHMuaCIKQEAgLTgzLDYgKzg1LDkgQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxh
biwgTG9uZ0xpdgogICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwogICAgIAogICAgIG1faGFz
RGVidWdnZXJFbmFibGVkID0gbV9wcm9maWxlZEJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dp
bmdPcGNvZGVzKCkgfHwgT3B0aW9uczo6Zm9yY2VEZWJ1Z2dlckJ5dGVjb2RlR2VuZXJhdGlvbigp
OworICAgIAorICAgIG1faW5kZXhpbmdDYWNoZSA9IHN0ZDo6bWFrZV91bmlxdWU8Rmxvd0luZGV4
aW5nPigqdGhpcyk7CisgICAgbV9hYnN0cmFjdFZhbHVlc0NhY2hlID0gc3RkOjptYWtlX3VuaXF1
ZTxGbG93TWFwPEFic3RyYWN0VmFsdWU+PigqbV9pbmRleGluZ0NhY2hlKTsKIH0KIAogR3JhcGg6
On5HcmFwaCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDkgKzU5LDEyIEBAIGNsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7CiBj
bGFzcyBDRkc7CiBjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIGNsYXNzIERvbWlu
YXRvcnM7CitjbGFzcyBGbG93SW5kZXhpbmc7CiBjbGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBQ
cmVQb3N0TnVtYmVyaW5nOwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRmxvd01hcDsKKwog
I2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBk
byB7ICAgICAgICAgICAgXAogICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoX25vZGUtPmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAt
MjAxLDggKzIwNCw2IEBAIHB1YmxpYzoKICAgICBOb2RlKiBub2RlQXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNCeUluZGV4W2luZGV4XTsgfQogICAgIHZvaWQgcGFja05v
ZGVJbmRpY2VzKCk7CiAKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9y
T3ZlcmZsb3c+JiBhYnN0cmFjdFZhbHVlc0NhY2hlKCkgeyByZXR1cm4gbV9hYnN0cmFjdFZhbHVl
c0NhY2hlOyB9Ci0KICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCiAgICAgRnJvemVuVmFsdWUq
IGZyZWV6ZShKU1ZhbHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXppbmcgYnkgZGVmYXVsdC4KQEAg
LTkzNSw2ICs5MzYsOSBAQCBwdWJsaWM6CiAgICAgUmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3Rh
dGU7CiAgICAgYm9vbCBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsKICAgICBib29sIG1faGFzRXhjZXB0
aW9uSGFuZGxlcnMgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93SW5kZXhpbmc+
IG1faW5kZXhpbmdDYWNoZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd01hcDxBYnN0cmFjdFZh
bHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOworCiBwcml2YXRlOgogICAgIHZvaWQgYWRkTm9k
ZVRvTWFwQnlJbmRleChOb2RlKik7CiAKQEAgLTk3Miw3ICs5NzYsNiBAQCBwcml2YXRlOgogCiAg
ICAgVmVjdG9yPE5vZGUqLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9ub2Rlc0J5SW5kZXg7
CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9ub2RlSW5k
ZXhGcmVlTGlzdDsKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fYWJzdHJhY3RWYWx1ZXNDYWNoZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNyArNDEsOCBAQCBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAg
ICAgOiBtX2dyYXBoKGdyYXBoKQotICAgICwgbV9hYnN0cmFjdFZhbHVlcyhncmFwaC5hYnN0cmFj
dFZhbHVlc0NhY2hlKCkpCisgICAgLCBtX2luZGV4aW5nKCpncmFwaC5tX2luZGV4aW5nQ2FjaGUp
CisgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCiAg
ICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdy
YXBoLm1fbG9jYWxWYXJzKQogICAgICwgbV9ibG9jaygwKQogewpAQCAtNTcsMTAgKzU4LDggQEAg
dm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgIEFTU0VSVChiYXNp
Y0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52
YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZkxvY2FscygpKTsKIAotICAgIC8vIENlcnRhaW4gcGhhc2VzIGluc2VydCBu
b2RlcyBpbiBhIGJsb2NrIGFmdGVyIHJ1bm5pbmcgdGhyb3VnaCBpdC4KLSAgICAvLyBXZSBjYW5u
b3QgcmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIEFic3RyYWN0VmFsdWVzIHdoZW4gaW5pdGlhbGl6aW5n
IEFic3RyYWN0U3RhdGUgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHZhbHVlcwotICAgIC8vIGNhbiBp
bmNyZWFzZSBhcyB3ZSBleGVjdXRlLiBJbnN0ZWFkLCB3ZSBpbmNyZWFzZSB0aGUgc2l6ZSBhcyBu
ZWVkZWQgYmVmb3JlIHByb2Nlc3NpbmcgZWFjaCBibG9jay4KLSAgICBtX2Fic3RyYWN0VmFsdWVz
LnJlc2l6ZShtX2dyYXBoLm1heE5vZGVDb3VudCgpKTsKKyAgICBtX2luZGV4aW5nLnJlY29tcHV0
ZSgpOworICAgIG1fYWJzdHJhY3RWYWx1ZXMucmVjb21wdXRlKCk7CiAgICAgCiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5zaXplKCk7IGkrKykKICAgICAgICAgZm9yTm9k
ZShiYXNpY0Jsb2NrLT5hdChpKSkuY2xlYXIoKTsKQEAgLTgwLDEyICs3OSwxMiBAQCB2b2lkIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvCiAgICAgbV9zdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUgPSBiYXNpY0Jsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQ7CiB9CiAK
LXN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5v
ZGVBYnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywgY29uc3QgVmVjdG9yPE5vZGUqPiYgbGl2ZSkK
K3N0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPE5vZGVBYnN0cmFjdFZhbHVlUGFpcj4m
IHZhbHVlcywgY29uc3QgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmUpCiB7CiAgICAg
dmFsdWVzLnJlc2l6ZSgwKTsKICAgICB2YWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KGxpdmUuc2l6ZSgp
KTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgOiBsaXZlKQotICAgICAgICB2YWx1ZXMudW5jaGVja2Vk
QXBwZW5kKEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpciB7IG5vZGUs
IEFic3RyYWN0VmFsdWUoKSB9KTsKKyAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDog
bGl2ZSkKKyAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIgeyBub2RlLCBBYnN0cmFjdFZhbHVlKCkgfSk7CiB9CiAKIHZvaWQgSW5QbGFjZUFic3RyYWN0
U3RhdGU6OmluaXRpYWxpemUoKQpAQCAtMTk5LDcgKzE5OCw3IEBAIGJvb2wgSW5QbGFjZUFic3Ry
YWN0U3RhdGU6OmVuZEJhc2ljQmxvY2sKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiB2
YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCkgeworICAgICAgICBmb3IgKE5v
ZGVBYnN0cmFjdFZhbHVlUGFpciYgdmFsdWVBdFRhaWwgOiBibG9jay0+c3NhLT52YWx1ZXNBdFRh
aWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlQXROb2RlID0gZm9yTm9kZSh2
YWx1ZUF0VGFpbC5ub2RlKTsKICAgICAgICAgICAgIHZhbHVlQXRUYWlsLnZhbHVlLm1lcmdlKHZh
bHVlQXROb2RlKTsKICAgICAgICAgICAgIHZhbHVlQXROb2RlID0gdmFsdWVBdFRhaWwudmFsdWU7
CkBAIC0yOTEsMTMgKzI5MCwxMyBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZShC
YXNpY0JsCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmcm9tLT52YWx1ZXNBdFRhaWwuc2l6ZSgp
OyBpLS07KQogICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+dmFsdWVzQXRIZWFkW2ldLm1lcmdl
KGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHRv
LT5zc2EtPnZhbHVlc0F0SGVhZCkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGVudHJ5Lm5v
ZGU7CisgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiBlbnRyeSA6IHRvLT5zc2Et
PnZhbHVlc0F0SGVhZCkgeworICAgICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgPSBl
bnRyeS5ub2RlOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgTWVyZ2luZyBmb3IgIiwgbm9kZSwgIjogZnJvbSAiLCBmb3JOb2RlKG5vZGUp
LCAiIHRvICIsIGVudHJ5LnZhbHVlLCAiXG4iKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAg
ICB1bnNpZ25lZCB2YWx1ZUNvdW50SW5Gcm9tQmxvY2sgPSAwOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBmcm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZyb20tPnNzYS0+dmFsdWVzQXRUYWlsKSB7Cisg
ICAgICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgZnJvbUJsb2NrVmFsdWVBdFRh
aWwgOiBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbCkgewogICAgICAgICAgICAgICAgIGlmIChmcm9t
QmxvY2tWYWx1ZUF0VGFpbC5ub2RlID09IG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGZyb21CbG9ja1ZhbHVlQXRUYWlsLnZhbHVlID09IGZvck5vZGUobm9kZSkpOwogICAgICAg
ICAgICAgICAgICAgICArK3ZhbHVlQ291bnRJbkZyb21CbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlz
aW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRG
R0Fic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR0Zsb3dNYXAuaCIKICNpbmNsdWRlICJERkdO
b2RlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQzLDExICs0NCwx
MSBAQCBwdWJsaWM6CiAgICAgCiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICAKLSAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKikg
eyB9CisgICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKSB7IH0K
ICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCisgICAgQWJzdHJh
Y3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBtX2Fic3RyYWN0VmFsdWVzW25vZGUtPmluZGV4KCldOworICAgICAgICByZXR1cm4g
bV9hYnN0cmFjdFZhbHVlcy5hdChub2RlKTsKICAgICB9CiAgICAgCiAgICAgQWJzdHJhY3RWYWx1
ZSYgZm9yTm9kZShFZGdlIGVkZ2UpCkBAIC0xMzIsNyArMTMzLDggQEAgcHJpdmF0ZToKICAgICAK
ICAgICBHcmFwaCYgbV9ncmFwaDsKIAotICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4mIG1fYWJzdHJhY3RWYWx1ZXM7CisgICAgRmxvd0luZGV4aW5nJiBt
X2luZGV4aW5nOworICAgIEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4mIG1fYWJzdHJhY3RWYWx1ZXM7
CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gbV92YXJpYWJsZXM7CiAgICAgQmFzaWNCbG9j
ayogbV9ibG9jazsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2
ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9j
a0lubGluZXMuaCIKICNpbmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKKyNpbmNsdWRlICJE
RkdGbG93SW5kZXhpbmcuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR0lu
c2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCkBAIC00NCwxMCArNDUsMTIgQEAg
cHVibGljOgogICAgIExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAgICAgICAg
IDogUGhhc2UoZ3JhcGgsICJsaXZlbmVzcyBhbmFseXNpcyIpCiAgICAgICAgICwgbV9kaXJ0eUJs
b2NrcyhtX2dyYXBoLm51bUJsb2NrcygpKQorICAgICAgICAsIG1faW5kZXhpbmcoKm1fZ3JhcGgu
bV9pbmRleGluZ0NhY2hlKQogICAgICAgICAsIG1fbGl2ZUF0SGVhZChtX2dyYXBoKQogICAgICAg
ICAsIG1fbGl2ZUF0VGFpbChtX2dyYXBoKQotICAgICAgICAsIG1fd29ya3NldChncmFwaC5tYXhO
b2RlQ291bnQoKSAtIDEpCiAgICAgeworICAgICAgICBtX2dyYXBoLm1faW5kZXhpbmdDYWNoZS0+
cmVjb21wdXRlKCk7CisgICAgICAgIG1fd29ya3NldCA9IHN0ZDo6bWFrZV91bmlxdWU8SW5kZXhT
cGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZsb3c+PihtX2dyYXBoLm1faW5kZXhpbmdDYWNoZS0+
bnVtSW5kaWNlcygpKTsKICAgICB9CiAKICAgICBib29sIHJ1bigpCkBAIC04MCwyMCArODMsMjIg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgbGl2ZUF0SGVhZEluZGljZXMgPSBtX2xpdmVBdEhl
YWRbYmxvY2tJbmRleF07Ci0gICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiYgbGl2ZUF0SGVh
ZCA9IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQ7CisgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9y
PHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4mCisgICAgICAgICAgICAgICAg
ICAgIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOworICAgICAg
ICAgICAgICAgIFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZlQXRIZWFkID0gYmxvY2st
PnNzYS0+bGl2ZUF0SGVhZDsKICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2l6ZSgwKTsK
ICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkSW5k
aWNlcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBsaXZl
QXRIZWFkSW5kaWNlcykKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRB
cHBlbmQobV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZUF0
SGVhZC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVjdGlvbihpbmRleCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8m
IGxpdmVBdFRhaWxJbmRpY2VzID0gbV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdOwotICAgICAgICAg
ICAgICAgIFZlY3RvcjxOb2RlKj4mIGxpdmVBdFRhaWwgPSBibG9jay0+c3NhLT5saXZlQXRUYWls
OworICAgICAgICAgICAgICAgIGNvbnN0IEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVu
c2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25l
ZD4+JgorICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsSW5kaWNlcyA9IG1fbGl2ZUF0VGFp
bFtibG9ja0luZGV4XTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9u
PiYgbGl2ZUF0VGFpbCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7CiAgICAgICAgICAgICAgICAg
bGl2ZUF0VGFpbC5yZXNpemUoMCk7CiAgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbC5yZXNlcnZl
Q2FwYWNpdHkobGl2ZUF0VGFpbEluZGljZXMuc2l6ZSgpKTsKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4IDogbV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdKQotICAgICAgICAgICAg
ICAgICAgICBsaXZlQXRUYWlsLnVuY2hlY2tlZEFwcGVuZChtX2dyYXBoLm5vZGVBdChpbmRleCkp
OworICAgICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnVuY2hlY2tlZEFwcGVuZChtX2luZGV4
aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApA
QCAtMTA2LDY3ICsxMTEsNTYgQEAgcHJpdmF0ZToKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KGJsb2NrLCAiT25seSBkaXJ0eSBibG9ja3MgbmVlZHMgdXBkYXRlcy4gQSBudWxsIGJsb2NrIHNo
b3VsZCBuZXZlciBiZSBkaXJ0eS4iKTsKIAotICAgICAgICBtX3dvcmtzZXQuY2xlYXIoKTsKKyAg
ICAgICAgbV93b3Jrc2V0LT5jbGVhcigpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDog
bV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdKQotICAgICAgICAgICAgbV93b3Jrc2V0LmFkZChpbmRl
eCk7CisgICAgICAgICAgICBtX3dvcmtzZXQtPmFkZChpbmRleCk7CiAKICAgICAgICAgZm9yICh1
bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKICAgICAg
ICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKIAotICAgICAgICAgICAg
Ly8gR2l2ZW4gYW4gVXBzaWxvbjoKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBu
OiBVcHNpbG9uKEB4LCBecCkKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkg
dGhhdCBpdCBkZWYncyBAcCBhbmQgQG4gYW5kIHVzZXMgQHguCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gR2l2ZW4gYSBQaGk6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8g
ICAgcDogUGhpKCkKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgbm90aGlu
Zy4gSXQncyBuZWl0aGVyIGEgdXNlIG5vciBhIGRlZi4KLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAvLyBHaXZlbiBhIG5vZGU6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAg
bjogVGhpbmd5KEBhLCBAYiwgQGMpCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ug
c2F5IHRoYXQgaXQgZGVmJ3MgQG4gYW5kIHVzZXMgQGEsIEBiLCBAYy4KLSAgICAgICAgICAgIAog
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFVwc2ls
b246IHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3dvcmtzZXQuY29u
dGFpbnMobm9kZS0+aW5kZXgoKSksICJVcHNpbG9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBkZWZz
IGJ5IG90aGVyIG5vZGVzLiIpOworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
IW1fd29ya3NldC0+Y29udGFpbnMobm9kZS0+aW5kZXgoKSksICJVcHNpbG9uIHNob3VsZCBub3Qg
YmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVyIG5vZGVzLiIpOwogCiAgICAgICAgICAgICAgICAgTm9k
ZSogcGhpID0gbm9kZS0+cGhpKCk7Ci0gICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShw
aGktPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIG1fd29ya3NldC5hZGQobm9kZS0+Y2hpbGQx
KCktPmluZGV4KCkpOworICAgICAgICAgICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKG1faW5kZXhp
bmcuc2hhZG93SW5kZXgocGhpKSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5hZGQobV9p
bmRleGluZy5pbmRleChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAg
ICAgICAgbV93b3Jrc2V0LT5yZW1vdmUobV9pbmRleGluZy5pbmRleChub2RlKSk7CisgICAgICAg
ICAgICAgICAgbV93b3Jrc2V0LT5hZGQobV9pbmRleGluZy5zaGFkb3dJbmRleChub2RlKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUobm9kZS0+aW5kZXgoKSk7Ci0gICAg
ICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkQ2hp
bGRVc2UpOworICAgICAgICAgICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKG1faW5kZXhpbmcuaW5k
ZXgobm9kZSkpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxkcmVuKAorICAgICAg
ICAgICAgICAgICAgICBub2RlLCBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgbmV3RW50cnkgPSBtX3dvcmtzZXQtPmFkZChtX2luZGV4aW5nLmluZGV4KGVk
Z2Uubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldEtpbGxTdGF0dXMo
bmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKKyAgICAgICAgICAgICAgICAgICAg
fSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBVcGRhdGUgbGl2ZSBhdCBoZWFkLgotICAgICAgICBhdXRvJiBsaXZlQXRIZWFk
ID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAobV93b3Jrc2V0LnNpemUo
KSA9PSBsaXZlQXRIZWFkLnNpemUoKSkKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdywgMT4mIGxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRl
eF07CisgICAgICAgIGlmIChtX3dvcmtzZXQtPnNpemUoKSA9PSBsaXZlQXRIZWFkLnNpemUoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGxpdmVJ
bmRleEF0SGVhZCA6IGxpdmVBdEhlYWQpCi0gICAgICAgICAgICBtX3dvcmtzZXQucmVtb3ZlKGxp
dmVJbmRleEF0SGVhZCk7Ci0gICAgICAgIEFTU0VSVCghbV93b3Jrc2V0LmlzRW1wdHkoKSk7Cisg
ICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShsaXZlSW5kZXhBdEhlYWQpOworICAgICAgICBB
U1NFUlQoIW1fd29ya3NldC0+aXNFbXB0eSgpKTsKIAotICAgICAgICBsaXZlQXRIZWFkLnJlc2Vy
dmVDYXBhY2l0eShsaXZlQXRIZWFkLnNpemUoKSArIG1fd29ya3NldC5zaXplKCkpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0KQorICAgICAgICBsaXZlQXRIZWFk
LnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkLnNpemUoKSArIG1fd29ya3NldC0+c2l6ZSgpKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6ICptX3dvcmtzZXQpCiAgICAgICAgICAg
ICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVuZChuZXdWYWx1ZSk7CiAKICAgICAgICAgYm9vbCBj
aGFuZ2VkUHJlZGVjZXNzb3IgPSBmYWxzZTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKLSAgICAgICAgICAgIGF1dG8mIGxpdmVB
dFRhaWwgPSBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBuZXdWYWx1ZSA6IG1fd29ya3NldCkgeworICAgICAgICAgICAgSGFzaFNldDx1bnNpZ25l
ZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPHVuc2lnbmVkPj4mCisgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbCA9IG1fbGl2
ZUF0VGFpbFtwcmVkZWNlc3Nvcl07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVl
IDogKm1fd29ya3NldCkgewogICAgICAgICAgICAgICAgIGlmIChsaXZlQXRUYWlsLmFkZChuZXdW
YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2RpcnR5QmxvY2tzLnF1aWNrU2V0
KHByZWRlY2Vzc29yLT5pbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkUHJl
ZGVjZXNzb3IgPSB0cnVlOwpAQCAtMTc2LDIxICsxNzAsMTcgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIGNoYW5nZWRQcmVkZWNlc3NvcjsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2UpCi0gICAgewotICAgICAgICBib29sIG5l
d0VudHJ5ID0gbV93b3Jrc2V0LmFkZChlZGdlLT5pbmRleCgpKTsKLSAgICAgICAgZWRnZS5zZXRL
aWxsU3RhdHVzKG5ld0VudHJ5ID8gRG9lc0tpbGwgOiBEb2VzTm90S2lsbCk7Ci0gICAgfQotCiAg
ICAgLy8gQmxvY2tzIHdpdGggbmV3IGxpdmUgdmFsdWVzIGF0IHRhaWwuCiAgICAgQml0VmVjdG9y
IG1fZGlydHlCbG9ja3M7CisgICAgCisgICAgRmxvd0luZGV4aW5nJiBtX2luZGV4aW5nOwogCiAg
ICAgLy8gTGl2ZSB2YWx1ZXMgcGVyIGJsb2NrIGVkZ2UuCiAgICAgQmxvY2tNYXA8VmVjdG9yPHVu
c2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4+IG1fbGl2ZUF0SGVhZDsKICAgICBC
bG9ja01hcDxIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdU
Rjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+Pj4gbV9saXZlQXRUYWls
OwogCiAgICAgLy8gU2luZ2xlIHNwYXJzZSBzZXQgYWxsb2NhdGVkIG9uY2UgYW5kIHVzZWQgYnkg
ZXZlcnkgYmFzaWMgYmxvY2suCi0gICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IG1fd29ya3NldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5kZXhTcGFyc2VTZXQ8VW5zYWZl
VmVjdG9yT3ZlcmZsb3c+PiBtX3dvcmtzZXQ7CiB9OwogCiBib29sIHBlcmZvcm1MaXZlbmVzc0Fu
YWx5c2lzKEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUyOSwxNSArMjUyOSwxOCBAQCBwdWJsaWM6CiAgICAgQmFz
aWNCbG9jayogb3duZXI7CiB9OwogCi1pbmxpbmUgYm9vbCBub2RlQ29tcGFyYXRvcihOb2RlKiBh
LCBOb2RlKiBiKQotewotICAgIHJldHVybiBhLT5pbmRleCgpIDwgYi0+aW5kZXgoKTsKLX0KK3N0
cnVjdCBOb2RlQ29tcGFyYXRvciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZVB0clR5cGU+
CisgICAgYm9vbCBvcGVyYXRvcigpKE5vZGVQdHJUeXBlIGEsIE5vZGVQdHJUeXBlIGIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gYS0+aW5kZXgoKSA8IGItPmluZGV4KCk7CisgICAgfQor
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIENTdHJpbmcgbm9kZUxpc3REdW1wKGNvbnN0IFQm
IG5vZGVMaXN0KQogewotICAgIHJldHVybiBzb3J0ZWRMaXN0RHVtcChub2RlTGlzdCwgbm9kZUNv
bXBhcmF0b3IpOworICAgIHJldHVybiBzb3J0ZWRMaXN0RHVtcChub2RlTGlzdCwgTm9kZUNvbXBh
cmF0b3IoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0yNTQ4LDcgKzI1NTEsNyBA
QCBDU3RyaW5nIG5vZGVNYXBEdW1wKGNvbnN0IFQmIG5vZGVNYXAsIER1CiAgICAgICAgIHR5cGVu
YW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2RlTWFwLmJlZ2luKCk7CiAgICAgICAgIGl0
ZXIgIT0gbm9kZU1hcC5lbmQoKTsgKytpdGVyKQogICAgICAgICBrZXlzLmFwcGVuZChpdGVyLT5r
ZXkpOwotICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCksIG5vZGVDb21wYXJh
dG9yKTsKKyAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpLCBOb2RlQ29tcGFy
YXRvcigpKTsKICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CiAgICAgQ29tbWFQcmludGVyIGNv
bW1hOwogICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCkBAIC0y
NTYyLDcgKzI1NjUsNyBAQCBDU3RyaW5nIG5vZGVWYWx1ZVBhaXJMaXN0RHVtcChjb25zdCBUJiBu
CiAgICAgdXNpbmcgViA9IHR5cGVuYW1lIFQ6OlZhbHVlVHlwZTsKICAgICBUIHNvcnRlZExpc3Qg
PSBub2RlVmFsdWVQYWlyTGlzdDsKICAgICBzdGQ6OnNvcnQoc29ydGVkTGlzdC5iZWdpbigpLCBz
b3J0ZWRMaXN0LmVuZCgpLCBbXShjb25zdCBWJiBhLCBjb25zdCBWJiBiKSB7Ci0gICAgICAgIHJl
dHVybiBub2RlQ29tcGFyYXRvcihhLm5vZGUsIGIubm9kZSk7CisgICAgICAgIHJldHVybiBOb2Rl
Q29tcGFyYXRvcigpKGEubm9kZSwgYi5ub2RlKTsKICAgICB9KTsKIAogICAgIFN0cmluZ1ByaW50
U3RyZWFtIG91dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFic3Ry
YWN0VmFsdWVQYWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR05vZGVBYnN0cmFj
dFZhbHVlUGFpci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlQWJzdHJhY3RWYWx1ZVBhaXI6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobm9kZSwgIj0+IiwgdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVB
YnN0cmFjdFZhbHVlUGFpci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJh
Y3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBOb2RlQWJzdHJhY3RWYWx1ZVBhaXIg
eworICAgIE5vZGVBYnN0cmFjdFZhbHVlUGFpcigpIHsgfQorICAgIAorICAgIE5vZGVBYnN0cmFj
dFZhbHVlUGFpcihOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUpCisgICAgICAgIDogbm9kZShub2RlKQorICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
ICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbiBub2RlOworICAgIEFic3RyYWN0VmFsdWUgdmFs
dWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1By
b2plY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZUZsb3dQcm9qZWN0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCit2b2lkIE5vZGVGbG93UHJvamVjdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCItIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgaWYgKGtpbmQoKSA9PSBQcmltYXJ5KSB7CisgICAgICAgIG91
dC5wcmludChub2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG91dC5wcmludCgi
c2hhZG93KCIsIG5vZGUoKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE5vZGVGbG93UHJvamVjdGlvbiB7Citw
dWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgUHJpbWFyeSwKKyAgICAgICAgU2hhZG93
CisgICAgfTsKKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oKSB7IH0KKyAgICAKKyAgICBO
b2RlRmxvd1Byb2plY3Rpb24oTm9kZSogbm9kZSkKKyAgICAgICAgOiBtX3dvcmQoYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4obm9kZSkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1By
b2plY3Rpb24oTm9kZSogbm9kZSwgS2luZCBraW5kKQorICAgICAgICA6IG1fd29yZChiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihub2RlKSB8IChraW5kID09IFNoYWRvdyA/IHNoYWRvd0JpdCA6IDAp
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0aW9uKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3dvcmQoc2hhZG93Qml0KQorICAgIHsK
KyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhbV93b3JkOyB9CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gKG1fd29y
ZCAmIHNoYWRvd0JpdCkgPyBTaGFkb3cgOiBQcmltYXJ5OyB9CisgICAgCisgICAgTm9kZSogbm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2RlKj4obV93b3JkICYgfnNoYWRvd0Jp
dCk7IH0KKyAgICAKKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbm9kZSgp
OyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIG5vZGUoKTsgfQorICAg
IAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd29y
ZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KE5vZGVGbG93UHJvamVjdGlvbiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dvcmQgPT0gb3RoZXIubV93b3Jk
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oTm9kZUZsb3dQcm9qZWN0aW9uIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
IH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBOb2RlRmxvd1Byb2plY3Rpb24oV1RGOjpIYXNoVGFi
bGVEZWxldGVkVmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2goTm9kZSogbm9kZSwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7CisgICAgICAg
IGZ1bmMoTm9kZUZsb3dQcm9qZWN0aW9uKG5vZGUpKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gUGhpKQorICAgICAgICAgICAgZnVuYyhOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwgU2hhZG93
KSk7CisgICAgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3Qgc2hh
ZG93Qml0ID0gMTsKKyAgICAgICAgICAgICAgICAgCisgICAgdWludHB0cl90IG1fd29yZCB7IDAg
fTsKK307CisKK3N0cnVjdCBOb2RlRmxvd1Byb2plY3Rpb25IYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChOb2RlRmxvd1Byb2plY3Rpb24ga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CisgICAgc3RhdGljIGJvb2wgZXF1YWwoTm9kZUZsb3dQcm9qZWN0aW9uIGEsIE5vZGVGbG93UHJv
amVjdGlvbiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZl
VG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6
Tm9kZUZsb3dQcm9qZWN0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6Tm9kZUZsb3dQcm9q
ZWN0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hU
cmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpOb2RlRmxvd1By
b2plY3Rpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpOb2RlRmxvd1Byb2pl
Y3Rpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJ
bnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTEgKzEyNiwxMyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgc3RhdGUtYXQtdGFpbCBiYXNlZCBvbiB0aGUg
ZXBvY2hzIG9mIGxpdmUgbm9kZXMgYW5kIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBjdXJy
ZW50IGVwb2NoLiBXZSBncm93IHN0YXRlLWF0LXRhaWwgbW9ub3RvbmljYWxseSB0byBlbnN1cmUg
Y29udmVyZ2VuY2UuCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGhpc0Jsb2NrQ2hhbmdlZCA9
IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBibG9jay0+c3Nh
LT5saXZlQXRUYWlsKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0
aW9uIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobm9kZS5raW5kKCkgPT0gTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+ZXBvY2goKSAhPSBtX2N1cnJlbnRFcG9jaCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIG9sZGVyIHRoYW4gdGhlIGN1cnJlbnQgZXBv
Y2gsIHRoZW4gd2UgbWF5IG5lZWQgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBy
dW4gYSBiYXJyaWVyIG9uIGl0IGluIHRoZSBmdXR1cmUuIFNvLCBhZGQgaXQgdG8gdGhlIHN0YXRl
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNCbG9ja0NoYW5nZWQgfD0gbV9zdGF0
ZUF0VGFpbC0+YXQoYmxvY2spLmFkZChub2RlKS5pc05ld0VudHJ5OworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXNCbG9ja0NoYW5nZWQgfD0gbV9zdGF0ZUF0VGFpbC0+YXQoYmxvY2sp
LmFkZChub2RlLm5vZGUoKSkuaXNOZXdFbnRyeTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAgLTE3OCw4ICsx
ODAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBtX3N0YXRlLT5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fc3RhdGVBdEhlYWQtPmF0KGJsb2NrKS5jb250YWlucyhub2RlKSkg
eworICAgICAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGJsb2NrLT5zc2Et
PmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5raW5kKCkgPT0gTm9kZUZs
b3dQcm9qZWN0aW9uOjpTaGFkb3cpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXRlQXRIZWFkLT5hdChibG9jaykuY29udGFpbnMobm9kZS5u
b2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXZpb3VzIGJsb2NrcyB0ZWxs
IHVzIHRoYXQgdGhpcyBub2RlIG1heSBuZWVkIGEgYmFycmllciBpbiB0aGUKICAgICAgICAgICAg
ICAgICAgICAgLy8gZnV0dXJlLCB0aGVuIHB1dCBpdCBpbiB0aGUgYW5jaWVudCBwcmltb3JkaWFs
IGVwb2NoLiBUaGlzIGZvcmNlcyB1cyB0bwogICAgICAgICAgICAgICAgICAgICAvLyBlbWl0IGEg
YmFycmllciBvbiBhbnkgcG9zc2libHktY2VsbCBzdG9yZSwgcmVnYXJkbGVzcyBvZiB0aGUgZXBv
Y2ggb2YgdGhlCkBAIC0zMjYsNyArMzMwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKLSAgICAg
ICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRFcG9jaChtX25vZGUtPmVwb2NoKCkpOworICAg
ICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGUgd29yc3QgZm9yIFBoaXMgc28gdGhhdCB3ZSBkb24n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IFBoaSBzaGFkb3dzLgorICAgICAgICAgICAgICAgIG1fbm9k
ZS0+cGhpKCktPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0
RXBvY2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBwbGF5cyBmYXN0IGFuZCBsb29zZSB3aXRoIHRo
ZSBzaGFkb3cgdmFsdWVzIG9mIGEgUGhpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQzMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIE1hZGUgdGhpcyBBUEkgdXNlIHNpemUgcmF0aGVyIHRo
YW4gbWF4SW5kZXggYXMgaXRzIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlciwgYmVjYXVzZSB0aGF0
J3MKKyAgICAgICAgbGVzcyBjb25mdXNpbmcuCisKKyAgICAgICAgKiB3dGYvSW5kZXhTcGFyc2VT
ZXQuaDoKKyAgICAgICAgKFdURjo6SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5k
ZXhTcGFyc2VTZXQpOgorCiAyMDE2LTExLTAyICBSb21haW4gQmVsbGVzc29ydCAgPHJvbWFpbi5i
ZWxsZXNzb3J0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBbUmVhZGFibGUgU3RyZWFtcyBBUEld
IEVuYWJsZSBjcmVhdGlvbiBvZiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3JhcwogY2xhc3MgSW5kZXhTcGFyc2VTZXQg
ewogICAgIHR5cGVkZWYgVmVjdG9yPHVuc2lnbmVkLCAwLCBPdmVyZmxvd0hhbmRsZXI+IFZhbHVl
TGlzdDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhW
YWx1ZSk7CisgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQgc2l6ZSk7CiAKICAg
ICBib29sIGFkZCh1bnNpZ25lZCk7CiAgICAgYm9vbCByZW1vdmUodW5zaWduZWQpOwpAQCAtNjUs
OSArNjUsOSBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgotaW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNl
U2V0KHVuc2lnbmVkIG1heFZhbHVlKQoraW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFu
ZGxlcj46OkluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIHNpemUpCiB7Ci0gICAgbV9tYXAucmVzaXpl
KG1heFZhbHVlICsgMSk7CisgICAgbV9tYXAucmVzaXplKHNpemUpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293783</attachid>
            <date>2016-11-03 12:02:40 -0700</date>
            <delta_ts>2016-11-03 16:16:09 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74194</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzMjkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIHBsYXlzIGZhc3QgYW5kIGxvb3NlIHdpdGggdGhlIHNoYWRvdyB2
YWx1ZXMgb2YgYSBQaGkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDMwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB3aHkgdGhlIERGRyBuZWVkcyB0
byByZWNvZ25pemUgdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBoaS4KKworICAgICAgICAqIHN0cmVz
cy9kZmctc3NhLXN3YXAuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNi0xMS0wMyAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc2tpbmcgZm9yIGEg
dmFsdWUgcHJvZmlsZSBwcmVkaWN0aW9uIHNob3VsZCBiZSBkZWZlbnNpdmUgYWdhaW5zdCBub3Qg
ZmluZGluZyBhIHZhbHVlIHByb2ZpbGUKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy1zc2Etc3dh
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3NhLXN3YXAuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLXNzYS1zd2FwLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOCBAQAordmFyIGksYz0wOworZnVuY3Rpb24gZm9vKCkKK3sKKyAgICB2YXIg
YT0xLGI7Zm9yKGk9MDtpPDI7KytpKXtbYSxiXT1bYixhXTtjKyt9aWYoIWFeYil0aHJvdyBjCit9
Citub0lubGluZShmb28pOworZm9yKHZhciBrID0gMDsgayA8IDEwMDAwOyArK2spCisgICAgZm9v
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4Mjk0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
OCBAQAorMjAxNi0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBwbGF5cyBmYXN0IGFuZCBsb29zZSB3aXRoIHRoZSBzaGFkb3cgdmFsdWVzIG9mIGEg
UGhpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQz
MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIE9oIGJveSwgd2hhdCBhbiBlbWJhcnJhc3NpbmcgbWlzdGFrZSEgVGhlIHN0eWxlIG9mIFNT
QSBJIGxpa2UgdG8gdXNlIGF2b2lkcyBibG9jay92YWx1ZQorICAgICAgICB0dXBsZXMgYXMgcGFy
YW1ldGVycyBvZiBhIFBoaSwgdGhlcmVieSBzaW1wbGlmeWluZyBDRkcgdHJhbnNmb3JtYXRpb25z
IGFuZCBtYWtpbmcgUGhpIGxhcmdlbHkKKyAgICAgICAgbm90IGEgc3BlY2lhbCBjYXNlIGZvciBt
b3N0IGNvbXBpbGVyIHRyYW5zZm9ybXMuIEl0IGRvZXMgdGhpcyBieSBpbnRyb2R1Y2luZyBhbm90
aGVyIHZhbHVlCisgICAgICAgIGNhbGxlZCBVcHNpbG9uLCB3aGljaCBzdG9yZXMgYSB2YWx1ZSBp
bnRvIHNvbWUgUGhpLgorICAgICAgICAKKyAgICAgICAgQjMgdXNlcyB0aGlzIGFsc28uIFRoZSBl
YXNpZXN0IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgVXBzaWxvbi9QaGkgYmVoYXZlIGxpa2UgaXMg
dG8gbG9vayBhdAorICAgICAgICB0aGUgQjMtPkFpciBsb3dlcmluZy4gQWlyIGlzIG5vdCBTU0Eg
LSBpdCBoYXMgVG1wcyB0aGF0IHlvdSBjYW4gYXNzaWduIHRvIGFuZCB1c2UgYXMgbWFueQorICAg
ICAgICB0aW1lcyBhcyB5b3UgbGlrZS4gQjMgYWxsb2NhdGVzIG9uZSBUbXAgcGVyIFZhbHVlLCBh
bmQgYW4gZXh0cmEgInBoaVRtcCIgZm9yIFBoaXMsIHNvIHRoYXQKKyAgICAgICAgUGhpcyBnZXQg
dHdvIFRtcHMgdG90YWwuIFVwc2lsb24gc3RvcmVzIHRoZSB2YWx1ZSBpbnRvIHRoZSBwaGlUbXAg
b2YgdGhlIFBoaSwgd2hpbGUgUGhpIG1vdmVzCisgICAgICAgIHRoZSB2YWx1ZSBmcm9tIGl0cyBw
aGlUbXAgdG8gaXRzIHRtcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRv
IHN1cHBvcnQgc2NlbmFyaW9zIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAgICAgICBhOiBQ
aGkoKQorICAgICAgICAgICAgYjogVXBzaWxvbihAeCwgXmEpCisgICAgICAgICAgICBjOiBVc2Uo
QGEpCisgICAgICAgIAorICAgICAgICBIZXJlLCB3ZSB3YW50IEBjIHRvIHNlZSBAYSdzIHZhbHVl
IGJlZm9yZSBAYi4gVGhhdCdzIGEgdmVyeSBiYXNpYyByZXF1aXJlbWVudCBvZiBTU0E6IHRoYXQK
KyAgICAgICAgdGhlIGEgdmFsdWUgKGxpa2UgQGEpIGRvZXNuJ3QgY2hhbmdlIGR1cmluZyBpdHMg
bGlmZXRpbWUuCisgICAgICAgIAorICAgICAgICBVbmZvcnR1bmF0ZWx5LCBERkcnYSBsaXZlbmVz
cyBhbmFseXNpcyBhbmQgYWJzdHJhY3QgaW50ZXJwcmV0ZXIgYm90aCBmYWlsZWQgdG8gY29ycmVj
dGx5CisgICAgICAgIG1vZGVsIFVwc2lsb24vUGhpIHRoaXMgd2F5LiBUaGV5IHdvdWxkIGFzc3Vt
ZSB0aGF0IGl0J3MgYWNjdXJhdGUgdG8gbW9kZWwgdGhlIFVwc2lsb24gYXMKKyAgICAgICAgc3Rv
cmluZyBpbnRvIHRoZSBQaGkgZGlyZWN0bHkuCisgICAgICAgIAorICAgICAgICBCZWNhdXNlIERG
RyBkb2VzIGZsb3cgYW5hbHlzaXMgb3ZlciBTU0EsIG1ha2luZyBpdCBjb3JyZWN0IG1lYW5zIGVu
YWJsaW5nIGl0IHRvIHNwZWFrIG9mIHRoZQorICAgICAgICBzaGFkb3cgdmFsdWUuIFRoaXMgY2hh
bmdlIGFkZHJlc3NlcyB0aGlzIHByb2JsZW0gYnkgaW50cm9kdWNpbmcgdGhlIGNvbmNlcHQgb2Yg
YQorICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24uIFRoaXMgaXMgYSBrZXkgdGhhdCBsZXRzIHVz
IHNwZWFrIG9mIGJvdGggYSBOb2RlJ3MgcHJpbWFyeSB2YWx1ZSBhbmQgaXRzCisgICAgICAgIG9w
dGlvbmFsICJzaGFkb3ciIHZhbHVlLiBMaXZlbmVzcyBhbmQgQUkgYXJlIG5vdyBrZXllZCBieSBO
b2RlRmxvd1Byb2plY3Rpb24gcmF0aGVyIHRoYW4KKyAgICAgICAgTm9kZSouIENvbmNlcHR1YWxs
eSB0aGlzIHR1cm5zIG91dCB0byBiZSBhIHZlcnkgc2ltcGxlIGNoYW5nZSwgYnV0IGl0IGRvZXMg
dG91Y2ggYSBnb29kCisgICAgICAgIGFtb3VudCBvZiBjb2RlLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wTGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RMaXZlbmVzcyk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzQWRhcHRlcjo6bWF4SW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI6Om1heEluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjpt
YXhJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpmb3JOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0
cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5oOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0Nv
bWJpbmVkTGl2ZW5lc3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmxpdmVOb2Rlc0F0SGVhZCk6
CisgICAgICAgICogZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaDoKKyAgICAgICAgKiBkZmcvREZH
Rmxvd0luZGV4aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5n
OjpGbG93SW5kZXhpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6fkZsb3dJ
bmRleGluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjpyZWNvbXB1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdGbG93SW5kZXhpbmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6Rmxvd0luZGV4aW5nOjpncmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5n
OjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OmluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OnNoYWRvd0luZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpGbG93SW5kZXhpbmc6Om5vZGVQcm9qZWN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHRmxvd01hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpGbG93TWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpyZWNvbXB1dGUpOgorICAgICAgICAoSlND
OjpERkc6OkZsb3dNYXA6OmdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjphdCk6
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6YXRTaGFkb3cpOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmFic3RyYWN0VmFsdWVzQ2FjaGUpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpzZXRMaXZlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJz
dHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFs
dWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Zm9y
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhh
c2UpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3NCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjphZGRDaGlsZFVzZSk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUxpc3REdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlTWFwRHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZVZhbHVlUGFpckxpc3REdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlQ29tcGFyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlQWJzdHJhY3RWYWx1ZVBhaXI6Ok5vZGVBYnN0cmFjdFZhbHVlUGFp
cik6CisgICAgICAgICogZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR05vZGVGbG93UHJvamVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Rmxvd1Byb2plY3Rpb246Ok5vZGVGbG93UHJvamVjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlRmxvd1Byb2plY3Rpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJv
amVjdGlvbjo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0
b3ItPik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlRmxvd1Byb2plY3Rpb25IYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDoKKwogMjAxNi0xMS0wMiAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBXZSBzaG91bGQgbm90IHBvcCBm
cm9tIGFuIGVtcHR5IHN0YWNrIGluIHRoZSBXYXNtIGZ1bmN0aW9uIHBhcnNlci4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDYg
KzMwMyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0ZhaWxlZEZp
bmFsaXplci5jcHAKICAgICBkZmcvREZHRmluYWxpemVyLmNwcAogICAgIGRmZy9ERkdGaXh1cFBo
YXNlLmNwcAorICAgIGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwCiAgICAgZGZnL0RGR0ZsdXNoRm9y
bWF0LmNwcAogICAgIGRmZy9ERkdGbHVzaGVkQXQuY3BwCiAgICAgZGZnL0RGR0xpdmVDYXRjaFZh
cmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC0zMzQsNyArMzM1LDkgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCiAg
ICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKKyAgICBkZmcv
REZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCisg
ICAgZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAKICAgICBkZmcvREZHTm9kZU9yaWdpbi5j
cHAKICAgICBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcv
REZHT1NSRW50cnkuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksMTMgQEAK
IAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRD
QkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNBNjcx
NTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBG
OTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZFNTFDMTky
MkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVh
c29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyMDE3N0YxRENBREMzMzAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc3RDFEQ0FEQzMwMDBF
QTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCAqLzsgfTsKKwkJMEYyMDE3ODAxRENBREMzNTAw
RUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRl
eGluZy5oICovOyB9OworCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODEx
RENBREQ0MDAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCAqLzsgfTsKKwkJMEYyMDE3ODUxRENBRTE0
OTAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODQxRENBRTE0NzAwRUE1OTUwIC8qIERG
R05vZGVGbG93UHJvamVjdGlvbi5oICovOyB9OworCQkwRjIwMTc4NjFEQ0FFMTRDMDBFQTU5NTAg
LyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2RlRmxv
d1Byb2plY3Rpb24uY3BwICovOyB9OworCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyogREZH
Tm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIwMTc4ODFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0
VmFsdWVQYWlyLmggKi87IH07CisJCTBGMjAxNzhBMURDQjk0MjYwMEVBNTk1MCAvKiBERkdOb2Rl
QWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZh
bHVlUGFpci5jcHAgKi87IH07CiAJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFs
UmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi87IH07
CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0
QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdGMTRCRUFBODIwMEFE
QzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVD
b252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0yNDkyLDYgKzI0OTksMTMgQEAKIAkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8q
IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0gZGZnL0RGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkU1
MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNwcDsgcGF0aCA9
IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0gZGZnL0RGR0Zs
b3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MTFEQ0FE
RDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdGbG93TWFwLmg7IHBhdGggPSBkZmcvREZHRmxvd01hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjIwMTc4MzFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQ
cm9qZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05v
ZGVGbG93UHJvamVjdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODQxRENBRTE0NzAwRUE1OTUw
IC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxvd1Byb2pl
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODcxRENCOTQyMjAw
RUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwOyBwYXRoID0g
ZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZUFic3RyYWN0VmFs
dWVQYWlyLmg7IHBhdGggPSBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjBDMjU4MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFs
UmVnaXN0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlydHVh
bFJlZ2lzdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyNzkxNEJF
NzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252
ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUNvbnZl
bnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Njc2LDggKzY2OTAsNiBA
QAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oICovLAogCQkJ
CTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8sCiAJCQkJMEYy
RkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCi0JCQkJRTMyMkU1QTAx
REE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwICovLAotCQkJ
CUUzMjJFNUExMURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmgg
Ki8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVu
dGlmaWVycy5oICovLAogCQkJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVk
SW5mZXJyZWRUeXBlLmggKi8sCkBAIC02NjkyLDYgKzY3MDQsOCBAQAogCQkJCTBGNUExMjcxMTky
RDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICovLAogCQkJCTBGNUExMjcyMTkyRDlGREYw
MDg3NjRBMyAvKiBERkdEb2VzR0MuaCAqLywKIAkJCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5oICovLAorCQkJCUUzMjJFNUEwMURBNjQ0MzUwMDZFNzcwOSAvKiBE
RkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcCAqLywKKwkJCQlFMzIyRTVBMTFEQTY0NDM1MDA2
RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oICovLAogCQkJCTBGMUUzQTQ0MTUz
NENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovLAogCQkJCTBGRDNDODIw
MTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAogCQkJCTBGRDNDODIyMTQxMTVE
MEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKQEAgLTY3MDgsNiArNjcyMiw5IEBACiAJCQkJ
QTc4QTk3NkYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oICovLAogCQkJCTBGMkJE
QzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJCREMx
MzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovLAorCQkJCTBGMjAxNzdEMURD
QURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovLAorCQkJCTBGMjAxNzdFMURD
QURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLywKKwkJCQkwRjIwMTc4MTFEQ0FE
RDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovLAogCQkJCTBGOUQzMzk0MTdGRkM0RTYwMDcz
QzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovLAogCQkJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJC
QyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJCQlBN0Q4OUNFODE3QTBCOENDMDA3NzNBRDggLyog
REZHRmx1c2hGb3JtYXQuY3BwICovLApAQCAtNjc3NSw5ICs2NzkyLDEzIEBACiAJCQkJQTczNzgx
MEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovLAogCQkJCTBGQjRCNTFF
MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFD
MDAyQjJBRDcgLyogREZHTm9kZS5oICovLAorCQkJCTBGMjAxNzg3MURDQjk0MjIwMEVBNTk1MCAv
KiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwICovLAorCQkJCTBGMjAxNzg4MURDQjk0MjIw
MEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCAqLywKIAkJCQkwRkI0QjUxRjE2
QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZUFsbG9jYXRvci5oICovLAogCQkJCTBGQTU4MUI3MTUw
RTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJCTBGQTU4MUI4MTUwRTk1
MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKKwkJCQkwRjIwMTc4MzFEQ0FFMTQ3MDBF
QTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLywKKwkJCQkwRjIwMTc4NDFEQ0FF
MTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggKi8sCiAJCQkJMEY1RDA4NUMx
QjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCkBAIC03NTM3LDYgKzc1NTgsNyBAQAogCQkJ
CTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjMzOEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdG
bG93TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTMxQzBENjdFRTAw
MDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDE1LDYgKzg0Mzcs
NyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJp
bmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4NTFEQ0FFMTQ5MDBFQTU5NTAg
LyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzU1NUI4QTFE
QUUwM0E1MDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclBhdGNocG9pbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3MEE0NzFENTQzQThCMDA2RTcyMzIgLyogQ2VsbENv
bnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTExLDYgKzg1MzQsNyBAQAogCQkJCTE0MTQ0
OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDJENkYxMjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFs
dWVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyog
TWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDBBNDg1MUE5MDUxQUYwMEQ3M0ND
QSAvKiBNYXRoQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzQzBFMTZGNUNEMDBC
MzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTc3LDYgKzg2MDEsNyBA
QAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdOdWxs
QWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1
QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgw
MURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzYzLDYgKzk3ODgsNyBA
QAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3NjIwNDFEQjkyNDI2MDBCN0EyRkQgLyogQ29sbGVj
dGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEE3QkVGMUI4Mjk3NUEwMDJEOTE1
NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3OEExRENC
OTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNCQUQwMEU1NUM5OSAvKiBJbnNwZWN0
b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcg
LyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTk5ODksNiAr
MTAwMTUsNyBAQAogCQkJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVu
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRo
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAv
KiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAxNzdGMURDQURD
MzMwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZC
NTQ2N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRTM3OTRFNzUxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFu
YWx5emVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNTVGMzUyMUI3REM4NTMwMEM1MERDNSAv
KiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDA4Niw2ICsx
MDExMyw3IEBACiAJCQkJQTVGRDAwNjcxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA2RDE4OUIwMEFBMDA2MzMyMzEgLyogU2Ny
aXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDZGMTg5QjAwQUEwMDYz
MzIzMSAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3ODYx
RENBRTE0QzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUZEMDA3RDE4OUIwQjRDMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0YWNrRmFjdG9y
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyNTE4OEVGRkZEMDAxMTBGMTQgLyogU2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1RDkzQTUxODUwMTJBODAw
NDAwREVEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDIwODI5
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFwdGVyIHsKIAog
ICAgIFRtcExpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQg
bWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2Rl
JiBjb2RlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUubnVtVG1wcyhh
ZGFwdGVyVHlwZSk7CiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxhZGFwdGVyVHlw
ZT46OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CkBAIC02NSw5ICs2NSw5IEBAIHN0cnVjdCBTdGFj
a1Nsb3RMaXZlbmVzc0FkYXB0ZXIgewogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWdu
ZWQgbWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhD
b2RlJiBjb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGUuc3RhY2tTbG90cygpLnNpemUo
KSAtIDE7CisgICAgICAgIHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgfQog
ICAgIHN0YXRpYyBib29sIGFjY2VwdHNUeXBlKEFyZzo6VHlwZSkgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHN0YXRpYyB1bnNpZ25lZCB2YWx1ZVRvSW5kZXgoU3RhY2tTbG90KiBzdGFja1Nsb3QpIHsg
cmV0dXJuIHN0YWNrU2xvdC0+aW5kZXgoKTsgfQpAQCAtODMsOSArODMsOSBAQCBzdHJ1Y3QgUmVn
TGl2ZW5lc3NBZGFwdGVyIHsKIAogICAgIFJlZ0xpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAK
LSAgICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYpCisgICAgc3RhdGljIHVuc2lnbmVk
IG51bUluZGljZXMoQ29kZSYpCiAgICAgewotICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgp
OworICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpICsgMTsKICAgICB9CiAKICAgICBzdGF0
aWMgYm9vbCBhY2NlcHRzVHlwZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTEwMSw3
ICsxMDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBjb2Rl
KQogICAgICAgICA6IEFkYXB0ZXIoY29kZSkKLSAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6
bWF4SW5kZXgoY29kZSkpCisgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om51bUluZGljZXMo
Y29kZSkpCiAgICAgICAgICwgbV9saXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQogICAgICAgICAsIG1f
bGl2ZUF0VGFpbChjb2RlLnNpemUoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjA4Mjk0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJl
Y3Rpb24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNp
bmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKICNpbmNsdWRlICJERkdQaGlDaGlsZHJl
bi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MSw3ICs0Miw3IEBA
IHB1YmxpYzoKICAgICBBYnN0cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJhY3RTdGF0ZVR5
cGUmKTsKICAgICB+QWJzdHJhY3RJbnRlcnByZXRlcigpOwogICAgIAotICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhdGUuZm9yTm9k
ZShub2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDgyOTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MDksNiArMjgwOSw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICBm
b3JOb2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQ
cm9qZWN0aW9uOjpTaGFkb3cpKTsKICAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3
b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUgYmVjb21lIGEK
ICAgICAgICAgLy8gY29uc3RhbnQsIGluIHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRvIGtub3cuCiAg
ICAgICAgIGlmIChmb3JOb2RlKG5vZGUpLm1fdmFsdWUpCkBAIC0yODE2LDggKzI4MTcsMTEgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsK
ICAgICAgICAgCiAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgIG1fc3RhdGUuY3JlYXRlVmFs
dWVGb3JOb2RlKG5vZGUtPnBoaSgpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5waGkoKSkgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uIHNoYWRv
dyhub2RlLT5waGkoKSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOworICAgICAgICBpZiAo
c2hhZG93LmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBtX3N0YXRlLmNyZWF0ZVZhbHVl
Rm9yTm9kZShzaGFkb3cpOworICAgICAgICAgICAgZm9yTm9kZShzaGFkb3cpID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKQEAgLTI5NjksMTEgKzI5NzMsMTggQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgIGVsc2UKICAgICAgICAgY2xvYmJlckxpbWl0Kys7CiAgICAgQVNTRVJU
KGNsb2JiZXJMaW1pdCA8PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IGNsb2JiZXJMaW1pdDsgaS0tOykKLSAgICAgICAgZnVuY3Rvcihmb3JOb2RlKG1fc3Rh
dGUuYmxvY2soKS0+YXQoaSkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gY2xvYmJlckxpbWl0OyBp
LS07KSB7CisgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbjo6Zm9yRWFjaCgKKyAgICAgICAgICAg
IG1fc3RhdGUuYmxvY2soKS0+YXQoaSksCisgICAgICAgICAgICBbJl0gKE5vZGVGbG93UHJvamVj
dGlvbiBub2RlUHJvamVjdGlvbikgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShu
b2RlUHJvamVjdGlvbikpOworICAgICAgICAgICAgfSk7CisgICAgfQogICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zdGF0ZS5ibG9j
aygpLT5zc2EtPmxpdmVBdEhlYWQpCi0gICAgICAgICAgICBmdW5jdG9yKGZvck5vZGUobm9kZSkp
OworICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0ZS5ibG9jaygp
LT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShub2RlKSk7CisgICAgICAgIH0KICAg
ICB9CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1
bWVudHMoKTsgaS0tOykKICAgICAgICAgZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3Vt
ZW50KGkpKTsKQEAgLTMwMjksOSArMzA0MCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgogdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KQogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwot
ICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47CisgICAgSGFzaFNldDxOb2RlRmxvd1Byb2plY3Rpb24+
IHNlZW47CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5v
ZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICBm
b3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVB
dEhlYWQpIHsKICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGUpOwogICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2xlYXIoKSkKQEAgLTMwNDAsMTUgKzMwNTEsMTcgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9zdGF0ZS5ibG9jaygpLT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2Rl
ID0gbV9zdGF0ZS5ibG9jaygpLT5hdChpKTsKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7Ci0gICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAgaWYgKHZh
bHVlLmlzQ2xlYXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIG5vZGUsICI6IiwgdmFsdWUpOworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZv
ckVhY2goCisgICAgICAgICAgICBtX3N0YXRlLmJsb2NrKCktPmF0KGkpLCBbJl0gKE5vZGVGbG93
UHJvamVjdGlvbiBub2RlUHJvamVjdGlvbikgeworICAgICAgICAgICAgICAgIHNlZW4uYWRkKG5v
ZGVQcm9qZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZv
ck5vZGUobm9kZVByb2plY3Rpb24pOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFy
KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsIG5vZGVQcm9qZWN0aW9uLCAiOiIsIHZhbHVlKTsKKyAgICAgICAgICAgIH0pOwog
ICAgIH0KICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgIGZv
ciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0
VGFpbCkgewogICAgICAgICAgICAgaWYgKHNlZW4uY29udGFpbnMobm9kZSkpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDE2ICs0NywxNiBAQCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0
YXRlCiAKIEF0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CiAK
LXZvaWQgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUp
Cit2b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1By
b2plY3Rpb24gbm9kZSkKIHsKICAgICBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKS5hZGQo
bm9kZSwgQWJzdHJhY3RWYWx1ZSgpKTsKIH0KIAotQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJh
Y3RTdGF0ZTo6Zm9yTm9kZShOb2RlKiBub2RlKQorQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJh
Y3RTdGF0ZTo6Zm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAgICBhdXRvJiB2
YWx1ZXNBdFRhaWwgPSBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKTsKLSAgICBIYXNoTWFw
PE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5k
KG5vZGUpOwotICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaXRlciAhPSB2YWx1ZXNBdFRh
aWwuZW5kKCkpOworICAgIEhhc2hNYXA8Tm9kZUZsb3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVl
Pjo6aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOworICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZS5ub2RlKCksIGl0ZXIgIT0gdmFsdWVzQXRUYWlsLmVuZCgpKTsKICAg
ICByZXR1cm4gaXRlci0+dmFsdWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAyMDgyOTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIK
ICNpbmNsdWRlICJERkdCbG9ja01hcC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVk
ZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsgCiAKQEAgLTQ3LDggKzQ4LDggQEAgcHVibGljOgogICAgICAgICBtX2Jsb2NrID0gYmxv
Y2s7CiAgICAgfQogICAgIAotICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKTsKLSAg
ICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqKTsKKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9y
Tm9kZShOb2RlRmxvd1Byb2plY3Rpb24pOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9k
ZUZsb3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkg
eyByZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7IH0KICAgICBPcGVyYW5kczxBYnN0cmFjdFZh
bHVlPiYgdmFyaWFibGVzKCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9CiAgICAg
CkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFw
aDsKLSAgICBCbG9ja01hcDxIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNB
dFRhaWxNYXA7CisgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlRmxvd1Byb2plY3Rpb24sIEFic3Ry
YWN0VmFsdWU+PiBtX3ZhbHVlc0F0VGFpbE1hcDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsg
bnVsbHB0ciB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNo
ZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RW
YWx1ZVBhaXIuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKQEAgLTI0OCwxMiAr
MjQ5LDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAg
ICBBdmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRIZWFkOwogICAgICAgICBBdmFpbGFiaWxp
dHlNYXAgYXZhaWxhYmlsaXR5QXRUYWlsOwogCi0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0
SGVhZDsKLSAgICAgICAgVmVjdG9yPE5vZGUqPiBsaXZlQXRUYWlsOwotICAgICAgICBzdHJ1Y3Qg
Tm9kZUFic3RyYWN0VmFsdWVQYWlyIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgICAgICB9OworICAgICAgICBWZWN0b3I8Tm9k
ZUZsb3dQcm9qZWN0aW9uPiBsaXZlQXRIZWFkOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9q
ZWN0aW9uPiBsaXZlQXRUYWlsOwogICAgICAgICBWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWly
PiB2YWx1ZXNBdEhlYWQ7CiAgICAgICAgIFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZh
bHVlc0F0VGFpbDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbWJpbmVkTGl2ZW5lc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHJldmlzaW9uIDIwODI5NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDggKzM4LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIEhh
c2hTZXQ8Tm9kZSo+IGxpdmVOb2Rlc0F0SGVhZChHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJs
b2NrKQogewogICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47Ci0gICAgZm9yIChOb2RlKiBub2RlIDog
YmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgZm9y
IChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAg
ICAgICAgaWYgKG5vZGUua2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeSkKKyAg
ICAgICAgICAgIHNlZW4uYWRkKG5vZGUubm9kZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQXZhaWxh
YmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhl
YWQ7CiAgICAgZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAkocmV2aXNpb24g
MjA4Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogLy8gUmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIGxpdmUgYXQgdGFpbCwgYm90aCBk
dWUgdG8gZHVlIERGRyBhbmQgZHVlIHRvIGJ5dGVjb2RlIChpLmUuIE9TUiBleGl0KS4KIEhhc2hT
ZXQ8Tm9kZSo+IGxpdmVOb2Rlc0F0SGVhZChHcmFwaCYsIEJhc2ljQmxvY2sqKTsKIAorLy8gV0FS
TklORzogVGhpcyBjdXJyZW50bHkgZG9lcyBub3QgcmVhc29uIGFib3V0IHRoZSBsaXZlbmVzcyBv
ZiBzaGFkb3cgdmFsdWVzLiBUaGUgZXhlY3V0aW9uCisvLyBzZW1hbnRpY3Mgb2YgREZHIFNTQSBh
cmUgdGhhdCBhbiBVcHNpbG9uIHN0b3JlcyB0byB0aGUgc2hhZG93IHZhbHVlIG9mIGEgUGhpLCBh
bmQgdGhlIFBoaSBsb2FkcworLy8gZnJvbSB0aGF0IHNoYWRvdyB2YWx1ZS4gSGVuY2UsIHRoZSBz
aGFkb3cgdmFsdWVzIGFyZSBsaWtlIHZhcmlhYmxlcywgYW5kIGhhdmUgbGl2ZW5lc3MuIFRoZSBu
b3JtYWwKKy8vIGxpdmVuZXNzIGFuYWx5c2lzIHdpbGwgdGVsbCB5b3UgYWJvdXQgdGhlIGxpdmVu
ZXNzIG9mIHNoYWRvdyB2YWx1ZXMuIEl0J3MgT0sgdG8gaWdub3JlIHNoYWRvdworLy8gdmFsdWVz
IGlmIHlvdSB0cmVhdCBVcHNpbG9uIGFzIGFuIG9wYXF1ZSBlc2NhcGUsIGFuZCBhbGwgb2YgdGhl
IGNsaW5ldHMgb2YgQ29tYmluZWRMaXZlbmVzcyBkbyBzby4KIHN0cnVjdCBDb21iaW5lZExpdmVu
ZXNzIHsKICAgICBDb21iaW5lZExpdmVuZXNzKCkgeyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGlu
Zy5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworRmxvd0luZGV4aW5nOjpGbG93SW5kZXhpbmcoR3JhcGgmIGdyYXBoKQorICAgIDog
bV9ncmFwaChncmFwaCkKKyAgICAsIG1fbnVtSW5kaWNlcygwKQoreworICAgIHJlY29tcHV0ZSgp
OworfQorCitGbG93SW5kZXhpbmc6On5GbG93SW5kZXhpbmcoKQoreworfQorCit2b2lkIEZsb3dJ
bmRleGluZzo6cmVjb21wdXRlKCkKK3sKKyAgICB1bnNpZ25lZCBudW1Ob2RlSW5kaWNlcyA9IG1f
Z3JhcGgubWF4Tm9kZUNvdW50KCk7CisgICAgCisgICAgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4
LnJlc2l6ZShudW1Ob2RlSW5kaWNlcyk7CisgICAgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LmZp
bGwoVUlOVF9NQVgpOworICAgIAorICAgIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleC5yZXNpemUo
MCk7CisKKyAgICBtX251bUluZGljZXMgPSBudW1Ob2RlSW5kaWNlczsKKworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSAhPSBQaGkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IG5vZGUtPmluZGV4KCk7CisgICAgICAgICAgICB1
bnNpZ25lZCBzaGFkb3dJbmRleCA9IG1fbnVtSW5kaWNlcysrOworICAgICAgICAgICAgbV9ub2Rl
SW5kZXhUb1NoYWRvd0luZGV4W25vZGVJbmRleF0gPSBzaGFkb3dJbmRleDsKKyAgICAgICAgICAg
IG1fc2hhZG93SW5kZXhUb05vZGVJbmRleC5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9zaGFkb3dJbmRleFRvTm9kZUluZGV4LnNp
emUoKSArIG51bU5vZGVJbmRpY2VzID09IG1fbnVtSW5kaWNlcyk7CisgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleFtzaGFkb3dJ
bmRleCAtIG51bU5vZGVJbmRpY2VzXSA9PSBub2RlSW5kZXgpOworICAgICAgICB9CisgICAgfQor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4
aW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1By
b2plY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlz
IGlzIGEgbWFwcGluZyBmcm9tIG5vZGVzIHRvIHVuaXF1ZSwgZGVuc2UgaW5kaWNlcyB0aGF0IGNh
biBiZSB1c2VkIGZvciBjcmVhdGluZyBmYXN0CisvLyBOb2RlLWtleWVkIG1hcHMuIFRoZSBzcGVj
aWFsIHBhcnQgaXMgdGhhdCBpdCBhbHNvIGFsbG9jYXRlZCBpbmRpY2VzIGZvciB0aGUgc2hhZG93
IHZhbHVlcyBvZiBQaGkKKy8vIG5vZGVzLCB3aGljaCBpcyBuZWVkZWQgZm9yIGFueSBmbG93LXNl
bnNpdGl2ZSBhbmFseXNpcy4KK2NsYXNzIEZsb3dJbmRleGluZyB7CitwdWJsaWM6CisgICAgRmxv
d0luZGV4aW5nKEdyYXBoJik7CisgICAgfkZsb3dJbmRleGluZygpOworICAgIAorICAgIHZvaWQg
cmVjb21wdXRlKCk7CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9n
cmFwaDsgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUluZGljZXMoKSBjb25zdCB7IHJldHVybiBt
X251bUluZGljZXM7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCh1bnNpZ25lZCBub2RlSW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG5vZGVJbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4
KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGluZGV4KG5vZGUtPmluZGV4KCkpOyB9CisgICAg
CisgICAgdW5zaWduZWQgc2hhZG93SW5kZXgodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleFtub2RlSW5kZXhdOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaGFkb3dJbmRleChOb2RlKiBub2RlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcCgpID09IFBo
aSk7CisgICAgICAgIHJldHVybiBzaGFkb3dJbmRleChub2RlLT5pbmRleCgpKTsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgaW5kZXgodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2pl
Y3Rpb246OktpbmQga2luZCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgewor
ICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeToKKyAgICAgICAgICAgIHJl
dHVybiBpbmRleChub2RlSW5kZXgpOworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd0luZGV4KG5vZGVJbmRleCk7CisgICAg
ICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KE5vZGUgKm5vZGUsIE5vZGVG
bG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpQcmltYXJ5OgorICAgICAg
ICAgICAgcmV0dXJuIGluZGV4KG5vZGUpOworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlv
bjo6U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd0luZGV4KG5vZGUpOworICAgICAg
ICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleChOb2RlRmxvd1Byb2plY3Rpb24g
cHJvamVjdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleChwcm9qZWN0aW9u
Lm5vZGUoKSwgcHJvamVjdGlvbi5raW5kKCkpOworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1By
b2plY3Rpb24gbm9kZVByb2plY3Rpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaW5kZXggPCBtX25vZGVJbmRleFRvU2hhZG93SW5kZXguc2l6ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIE5vZGVGbG93UHJvamVjdGlvbihtX2dyYXBoLm5vZGVBdChpbmRleCkpOwor
ICAgICAgICByZXR1cm4gTm9kZUZsb3dQcm9qZWN0aW9uKAorICAgICAgICAgICAgbV9ncmFwaC5u
b2RlQXQobV9zaGFkb3dJbmRleFRvTm9kZUluZGV4W2luZGV4IC0gbV9ub2RlSW5kZXhUb1NoYWRv
d0luZGV4LnNpemUoKV0pLAorICAgICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cp
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgdW5zaWdu
ZWQgbV9udW1JbmRpY2VzOworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDAs
IFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXg7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHRmxvd0luZGV4aW5nLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdO
b2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBh
IG1hcHBpbmcgZnJvbSBub2RlcyB0byB2YWx1ZXMgdGhhdCBpcyB1c2VmdWwgZm9yIGZsb3ctc2Vu
c2l0aXZlIGFuYWx5c2lzLiBJbiBzdWNoIGFuCisvLyBhbmFseXNpcywgYXQgZXZlcnkgcG9pbnQg
aW4gdGhlIHByb2dyYW0gd2UgbmVlZCB0byBjb25zaWRlciB0aGUgdmFsdWVzIG9mIG5vZGVzIHBs
dXMgdGhlIHNoYWRvdworLy8gdmFsdWVzIG9mIFBoaXMuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBk
byBib3RoIG9mIHRob3NlIHRoaW5ncy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBGbG93
TWFwIHsKK3B1YmxpYzoKKyAgICBGbG93TWFwKEZsb3dJbmRleGluZyYgaW5kZXhpbmcpCisgICAg
ICAgIDogbV9pbmRleGluZyhpbmRleGluZykKKyAgICB7CisgICAgICAgIHJlY29tcHV0ZSgpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgYWZ0ZXIgeW91IGhhdmUgcmVjb21wdXRlZCB0
aGUgaW5kZXhpbmcgdG8gd2hpY2ggdGhpcyBpcyBzbGF2ZWQuIFRoaXMgYWxzbyByZXNldHMgdGhl
CisgICAgLy8gY29udGVudHMgb2YgdGhlIGRhdGEgc3RydWN0dXJlLgorICAgIHZvaWQgcmVjb21w
dXRlKCkKKyAgICB7CisgICAgICAgIG1fbWFwLnJlc2l6ZShtX2luZGV4aW5nLm51bUluZGljZXMo
KSk7CisgICAgICAgIG1fbWFwLmZpbGwoVCgpKTsKKyAgICB9CisgICAgCisgICAgR3JhcGgmIGdy
YXBoKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleGluZy5ncmFwaCgpOyB9CisgICAgCisgICAgVCYg
YXQodW5zaWduZWQgbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW25vZGVJ
bmRleF07CisgICAgfQorICAgIAorICAgIFQmIGF0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIFQmIGF0U2hhZG93
KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcFttX2luZGV4
aW5nLnNoYWRvd0luZGV4KG5vZGVJbmRleCldOworICAgIH0KKyAgICAKKyAgICBUJiBhdFNoYWRv
dyhOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5kZXhpbmcuc2hh
ZG93SW5kZXgobm9kZSldOworICAgIH0KKyAgICAKKyAgICBUJiBhdCh1bnNpZ25lZCBub2RlSW5k
ZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbWFwW21faW5kZXhpbmcuaW5kZXgobm9kZUluZGV4LCBraW5kKV07CisgICAgfQorICAgIAor
ICAgIFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbWFwW21faW5kZXhpbmcuaW5kZXgobm9kZSwga2luZCldOwor
ICAgIH0KKyAgICAKKyAgICBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX21hcFttX2luZGV4aW5nLmluZGV4KHByb2plY3Rpb24pXTsK
KyAgICB9CisgICAgCisgICAgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4KTsgfQorICAg
IGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01h
cCo+KHRoaXMpLT5hdChub2RlKTsgfQorICAgIGNvbnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5v
ZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hh
ZG93KG5vZGVJbmRleCk7IH0KKyAgICBjb25zdCBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0K
KyAgICBjb25zdCBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6
S2luZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQo
bm9kZUluZGV4LCBraW5kKTsgfQorICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93
UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAq
Pih0aGlzKS0+YXQobm9kZSwga2luZCk7IH0KKyAgICBjb25zdCBUJiBhdChOb2RlRmxvd1Byb2pl
Y3Rpb24gcHJvamVjdGlvbikgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhp
cyktPmF0KHByb2plY3Rpb24pOyB9CisgICAgCitwcml2YXRlOgorICAgIEZsb3dJbmRleGluZyYg
bV9pbmRleGluZzsKKyAgICBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbWFw
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBjb25zdCBKU0M6OkRGRzo6Rmxvd01hcDxUPiYgbWFwKQoreworICAgIENvbW1hUHJpbnRlciBj
b21tYTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFwLmdyYXBoKCkubWF4Tm9kZUNv
dW50KCk7ICsraSkgeworICAgICAgICBpZiAoSlNDOjpERkc6Ok5vZGUqIG5vZGUgPSBtYXAuZ3Jh
cGgoKS5ub2RlQXQoaSkpIHsKKyAgICAgICAgICAgIGlmIChjb25zdCBUJiB2YWx1ZSA9IG1hcC5h
dChub2RlKSkKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIG5vZGUsICI9PiIsIHZh
bHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFw
LmdyYXBoKCkubWF4Tm9kZUNvdW50KCk7ICsraSkgeworICAgICAgICBpZiAoSlNDOjpERkc6Ok5v
ZGUqIG5vZGUgPSBtYXAuZ3JhcGgoKS5ub2RlQXQoaSkpIHsKKyAgICAgICAgICAgIGlmIChjb25z
dCBUJiB2YWx1ZSA9IG1hcC5hdFNoYWRvdyhub2RlKSkKKyAgICAgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJzaGFkb3coIiwgbm9kZSwgIik9PiIsIHZhbHVlKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIw
ODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUu
aCIKICNpbmNsdWRlICJERkdDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy5oIgogI2luY2x1ZGUg
IkRGR0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJERkdGbG93SW5kZXhpbmcuaCIKKyNpbmNsdWRl
ICJERkdGbG93TWFwLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkRGR01h
eUV4aXQuaCIKICNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKQEAgLTgzLDYgKzg1LDkgQEAg
R3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogICAgIEFTU0VSVChtX3By
b2ZpbGVkQmxvY2spOwogICAgIAogICAgIG1faGFzRGVidWdnZXJFbmFibGVkID0gbV9wcm9maWxl
ZEJsb2NrLT53YXNDb21waWxlZFdpdGhEZWJ1Z2dpbmdPcGNvZGVzKCkgfHwgT3B0aW9uczo6Zm9y
Y2VEZWJ1Z2dlckJ5dGVjb2RlR2VuZXJhdGlvbigpOworICAgIAorICAgIG1faW5kZXhpbmdDYWNo
ZSA9IHN0ZDo6bWFrZV91bmlxdWU8Rmxvd0luZGV4aW5nPigqdGhpcyk7CisgICAgbV9hYnN0cmFj
dFZhbHVlc0NhY2hlID0gc3RkOjptYWtlX3VuaXF1ZTxGbG93TWFwPEFic3RyYWN0VmFsdWU+Pigq
bV9pbmRleGluZ0NhY2hlKTsKIH0KIAogR3JhcGg6On5HcmFwaCgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDEyIEBA
IGNsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7CiBjbGFzcyBDRkc7CiBjbGFzcyBDb250cm9sRXF1
aXZhbGVuY2VBbmFseXNpczsKIGNsYXNzIERvbWluYXRvcnM7CitjbGFzcyBGbG93SW5kZXhpbmc7
CiBjbGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBQcmVQb3N0TnVtYmVyaW5nOwogCit0ZW1wbGF0
ZTx0eXBlbmFtZT4gY2xhc3MgRmxvd01hcDsKKwogI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElM
RFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAogICAgICAgICBO
b2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjAxLDggKzIwNCw2IEBAIHB1YmxpYzoKICAg
ICBOb2RlKiBub2RlQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNCeUlu
ZGV4W2luZGV4XTsgfQogICAgIHZvaWQgcGFja05vZGVJbmRpY2VzKCk7CiAKLSAgICBWZWN0b3I8
QWJzdHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBhYnN0cmFjdFZhbHVlc0Nh
Y2hlKCkgeyByZXR1cm4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOyB9Ci0KICAgICB2b2lkIGRldGhy
ZWFkKCk7CiAgICAgCiAgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlKTsgLy8gV2UgdXNl
IHdlYWsgZnJlZXppbmcgYnkgZGVmYXVsdC4KQEAgLTkzNSw2ICs5MzYsOSBAQCBwdWJsaWM6CiAg
ICAgUmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7CiAgICAgYm9vbCBtX2hhc0RlYnVnZ2Vy
RW5hYmxlZDsKICAgICBib29sIG1faGFzRXhjZXB0aW9uSGFuZGxlcnMgeyBmYWxzZSB9OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxGbG93SW5kZXhpbmc+IG1faW5kZXhpbmdDYWNoZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Rmxvd01hcDxBYnN0cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hl
OworCiBwcml2YXRlOgogICAgIHZvaWQgYWRkTm9kZVRvTWFwQnlJbmRleChOb2RlKik7CiAKQEAg
LTk3Miw3ICs5NzYsNiBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPE5vZGUqLCAwLCBVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV9ub2Rlc0J5SW5kZXg7CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9ub2RlSW5kZXhGcmVlTGlzdDsKLSAgICBWZWN0b3I8QWJz
dHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWJzdHJhY3RWYWx1ZXNDYWNo
ZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZp
c2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsOCBAQCBzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNl
QWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQotICAgICwg
bV9hYnN0cmFjdFZhbHVlcyhncmFwaC5hYnN0cmFjdFZhbHVlc0NhY2hlKCkpCisgICAgLCBtX2lu
ZGV4aW5nKCpncmFwaC5tX2luZGV4aW5nQ2FjaGUpCisgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpn
cmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCiAgICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQogICAgICwgbV9i
bG9jaygwKQogewpAQCAtNTcsMTAgKzU4LDggQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
YmVnaW5CYXNpY0JsbwogICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMo
KSk7CiAgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2Fs
cygpID09IGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpKTsKIAot
ICAgIC8vIENlcnRhaW4gcGhhc2VzIGluc2VydCBub2RlcyBpbiBhIGJsb2NrIGFmdGVyIHJ1bm5p
bmcgdGhyb3VnaCBpdC4KLSAgICAvLyBXZSBjYW5ub3QgcmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIEFi
c3RyYWN0VmFsdWVzIHdoZW4gaW5pdGlhbGl6aW5nIEFic3RyYWN0U3RhdGUgYmVjYXVzZSB0aGUg
bnVtYmVyIG9mIHZhbHVlcwotICAgIC8vIGNhbiBpbmNyZWFzZSBhcyB3ZSBleGVjdXRlLiBJbnN0
ZWFkLCB3ZSBpbmNyZWFzZSB0aGUgc2l6ZSBhcyBuZWVkZWQgYmVmb3JlIHByb2Nlc3NpbmcgZWFj
aCBibG9jay4KLSAgICBtX2Fic3RyYWN0VmFsdWVzLnJlc2l6ZShtX2dyYXBoLm1heE5vZGVDb3Vu
dCgpKTsKKyAgICBtX2luZGV4aW5nLnJlY29tcHV0ZSgpOworICAgIG1fYWJzdHJhY3RWYWx1ZXMu
cmVjb21wdXRlKCk7CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2Nr
LT5zaXplKCk7IGkrKykKICAgICAgICAgZm9yTm9kZShiYXNpY0Jsb2NrLT5hdChpKSkuY2xlYXIo
KTsKQEAgLTY4LDggKzY3LDEwIEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmJlZ2luQmFz
aWNCbG8KICAgICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZDsKICAgICAK
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoYXV0byYgZW50
cnkgOiBiYXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZCkKLSAgICAgICAgICAgIGZvck5vZGUo
ZW50cnkubm9kZSkgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgZm9yIChOb2RlQWJzdHJhY3RWYWx1
ZVBhaXImIGVudHJ5IDogYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQpIHsKKyAgICAgICAg
ICAgIGlmIChlbnRyeS5ub2RlLmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZvck5v
ZGUoZW50cnkubm9kZSkgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgfQogICAgIH0KICAgICBiYXNp
Y0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CiAgICAgYmFzaWNCbG9jay0+Y2ZhSGFz
VmlzaXRlZCA9IHRydWU7CkBAIC04MCwxMiArODEsMTIgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlID0gYmFzaWNC
bG9jay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkOwogfQogCi1zdGF0aWMgdm9pZCBz
ZXRMaXZlVmFsdWVzKFZlY3RvcjxCYXNpY0Jsb2NrOjpTU0FEYXRhOjpOb2RlQWJzdHJhY3RWYWx1
ZVBhaXI+JiB2YWx1ZXMsIGNvbnN0IFZlY3RvcjxOb2RlKj4mIGxpdmUpCitzdGF0aWMgdm9pZCBz
ZXRMaXZlVmFsdWVzKFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+JiB2YWx1ZXMsIGNvbnN0
IFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZlKQogewogICAgIHZhbHVlcy5yZXNpemUo
MCk7CiAgICAgdmFsdWVzLnJlc2VydmVDYXBhY2l0eShsaXZlLnNpemUoKSk7Ci0gICAgZm9yIChO
b2RlKiBub2RlIDogbGl2ZSkKLSAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChCYXNpY0Js
b2NrOjpTU0FEYXRhOjpOb2RlQWJzdHJhY3RWYWx1ZVBhaXIgeyBub2RlLCBBYnN0cmFjdFZhbHVl
KCkgfSk7CisgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGxpdmUpCisgICAgICAg
IHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJz
dHJhY3RWYWx1ZSgpIH0pOwogfQogCiB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFs
aXplKCkKQEAgLTE5OSw3ICsyMDAsNyBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjplbmRC
YXNpY0Jsb2NrCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnZhbHVlc0F0
VGFpbC5zaXplKCk7ICsraSkKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXNBdFRhaWxbaV0ubWVy
Z2UobV92YXJpYWJsZXNbaV0pOwogCi0gICAgICAgIGZvciAoYXV0byYgdmFsdWVBdFRhaWwgOiBi
bG9jay0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKKyAgICAgICAgZm9yIChOb2RlQWJzdHJhY3RWYWx1
ZVBhaXImIHZhbHVlQXRUYWlsIDogYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKSB7CiAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZUF0Tm9kZSA9IGZvck5vZGUodmFsdWVBdFRhaWwubm9k
ZSk7CiAgICAgICAgICAgICB2YWx1ZUF0VGFpbC52YWx1ZS5tZXJnZSh2YWx1ZUF0Tm9kZSk7CiAg
ICAgICAgICAgICB2YWx1ZUF0Tm9kZSA9IHZhbHVlQXRUYWlsLnZhbHVlOwpAQCAtMjkxLDEzICsy
OTIsMTMgQEAgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbAogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gZnJvbS0+dmFsdWVzQXRUYWlsLnNpemUoKTsgaS0tOykKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gdG8tPnZhbHVlc0F0SGVhZFtpXS5tZXJnZShmcm9tLT52YWx1ZXNB
dFRhaWxbaV0pOwogCi0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiB0by0+c3NhLT52YWx1ZXNB
dEhlYWQpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBlbnRyeS5ub2RlOworICAgICAgICBm
b3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgZW50cnkgOiB0by0+c3NhLT52YWx1ZXNBdEhlYWQp
IHsKKyAgICAgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbiBub2RlID0gZW50cnkubm9kZTsKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIE1l
cmdpbmcgZm9yICIsIG5vZGUsICI6IGZyb20gIiwgZm9yTm9kZShub2RlKSwgIiB0byAiLCBlbnRy
eS52YWx1ZSwgIlxuIik7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICAgICAgdW5zaWduZWQgdmFs
dWVDb3VudEluRnJvbUJsb2NrID0gMDsKLSAgICAgICAgICAgIGZvciAoYXV0byYgZnJvbUJsb2Nr
VmFsdWVBdFRhaWwgOiBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbCkgeworICAgICAgICAgICAgZm9y
IChOb2RlQWJzdHJhY3RWYWx1ZVBhaXImIGZyb21CbG9ja1ZhbHVlQXRUYWlsIDogZnJvbS0+c3Nh
LT52YWx1ZXNBdFRhaWwpIHsKICAgICAgICAgICAgICAgICBpZiAoZnJvbUJsb2NrVmFsdWVBdFRh
aWwubm9kZSA9PSBub2RlKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChmcm9tQmxvY2tW
YWx1ZUF0VGFpbC52YWx1ZSA9PSBmb3JOb2RlKG5vZGUpKTsKICAgICAgICAgICAgICAgICAgICAg
Kyt2YWx1ZUNvdW50SW5Gcm9tQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAyMDgyOTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVl
LmgiCiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdGbG93TWFwLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MywxMSArNDQsMTEgQEAgcHVibGljOgog
ICAgIAogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAgICAgCi0gICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZSopIHsgfQorICAgIHZvaWQg
Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbikgeyB9CiAgICAgCi0gICAgQWJz
dHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKiBub2RlKQorICAgIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9hYnN0
cmFjdFZhbHVlc1tub2RlLT5pbmRleCgpXTsKKyAgICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1
ZXMuYXQobm9kZSk7CiAgICAgfQogICAgIAogICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRn
ZSBlZGdlKQpAQCAtMTMyLDcgKzEzMyw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgR3JhcGgmIG1f
Z3JhcGg7CiAKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+JiBtX2Fic3RyYWN0VmFsdWVzOworICAgIEZsb3dJbmRleGluZyYgbV9pbmRleGluZzsKKyAg
ICBGbG93TWFwPEFic3RyYWN0VmFsdWU+JiBtX2Fic3RyYWN0VmFsdWVzOwogICAgIE9wZXJhbmRz
PEFic3RyYWN0VmFsdWU+IG1fdmFyaWFibGVzOwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgyOTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRmxvd0luZGV4aW5n
LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJERkdQaGFzZS5oIgpAQCAtNDQsMTAgKzQ1LDEyIEBAIHB1YmxpYzoKICAgICBM
aXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAibGl2ZW5lc3MgYW5hbHlzaXMiKQogICAgICAgICAsIG1fZGlydHlCbG9ja3MobV9ncmFwaC5u
dW1CbG9ja3MoKSkKKyAgICAgICAgLCBtX2luZGV4aW5nKCptX2dyYXBoLm1faW5kZXhpbmdDYWNo
ZSkKICAgICAgICAgLCBtX2xpdmVBdEhlYWQobV9ncmFwaCkKICAgICAgICAgLCBtX2xpdmVBdFRh
aWwobV9ncmFwaCkKLSAgICAgICAgLCBtX3dvcmtzZXQoZ3JhcGgubWF4Tm9kZUNvdW50KCkgLSAx
KQogICAgIHsKKyAgICAgICAgbV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPnJlY29tcHV0ZSgpOwor
ICAgICAgICBtX3dvcmtzZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZGV4U3BhcnNlU2V0PFVuc2Fm
ZVZlY3Rvck92ZXJmbG93Pj4obV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPm51bUluZGljZXMoKSk7
CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQpAQCAtODAsMjAgKzgzLDIyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhd
OwotICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4mIGxpdmVBdEhlYWQgPSBibG9jay0+c3Nh
LT5saXZlQXRIZWFkOworICAgICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3csIDE+JgorICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFk
SW5kaWNlcyA9IG1fbGl2ZUF0SGVhZFtibG9ja0luZGV4XTsKKyAgICAgICAgICAgICAgICBWZWN0
b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZUF0SGVhZCA9IGJsb2NrLT5zc2EtPmxpdmVBdEhl
YWQ7CiAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC5yZXNpemUoMCk7CiAgICAgICAgICAgICAg
ICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0SGVhZEluZGljZXMuc2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbGl2ZUF0SGVhZEluZGljZXMp
Ci0gICAgICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG1fZ3JhcGgu
bm9kZUF0KGluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2Vk
QXBwZW5kKG1faW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRUYWlsSW5k
aWNlcyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8
Tm9kZSo+JiBsaXZlQXRUYWlsID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgICAg
ICAgICBjb25zdCBIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gs
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiYKKyAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0VGFpbEluZGljZXMgPSBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF07
CisgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmVBdFRhaWwg
PSBibG9jay0+c3NhLT5saXZlQXRUYWlsOwogICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVz
aXplKDApOwogICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVzZXJ2ZUNhcGFjaXR5KGxpdmVB
dFRhaWxJbmRpY2VzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA6IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0
VGFpbC51bmNoZWNrZWRBcHBlbmQobV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0VGFpbC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVj
dGlvbihpbmRleCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEwNiw2NyArMTEx
LDU2IEBAIHByaXZhdGU6CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShibG9jaywgIk9ubHkg
ZGlydHkgYmxvY2tzIG5lZWRzIHVwZGF0ZXMuIEEgbnVsbCBibG9jayBzaG91bGQgbmV2ZXIgYmUg
ZGlydHkuIik7CiAKLSAgICAgICAgbV93b3Jrc2V0LmNsZWFyKCk7CisgICAgICAgIG1fd29ya3Nl
dC0+Y2xlYXIoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IG1fbGl2ZUF0VGFpbFti
bG9ja0luZGV4XSkKLSAgICAgICAgICAgIG1fd29ya3NldC5hZGQoaW5kZXgpOworICAgICAgICAg
ICAgbV93b3Jrc2V0LT5hZGQoaW5kZXgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKLSAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVw
c2lsb246Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbihAeCwg
XnApCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3Mg
QHAgYW5kIEBuIGFuZCB1c2VzIEB4LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdp
dmVuIGEgUGhpOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhl
ciBhIHVzZSBub3IgYSBkZWYuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gR2l2ZW4g
YSBub2RlOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwg
QGIsIEBjKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRl
ZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCi0gICAgICAgICAgICAKICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV93b3Jrc2V0LmNvbnRhaW5zKG5vZGUtPmlu
ZGV4KCkpLCAiVXBzaWxvbiBzaG91bGQgbm90IGJlIHVzZWQgYXMgZGVmcyBieSBvdGhlciBub2Rl
cy4iKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3dvcmtzZXQtPmNv
bnRhaW5zKG5vZGUtPmluZGV4KCkpLCAiVXBzaWxvbiBzaG91bGQgbm90IGJlIHVzZWQgYXMgZGVm
cyBieSBvdGhlciBub2Rlcy4iKTsKIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUt
PnBoaSgpOwotICAgICAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUocGhpLT5pbmRleCgpKTsK
LSAgICAgICAgICAgICAgICBtX3dvcmtzZXQuYWRkKG5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsK
KyAgICAgICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5nLnNoYWRvd0luZGV4
KHBoaSkpOworICAgICAgICAgICAgICAgIG1fd29ya3NldC0+YWRkKG1faW5kZXhpbmcuaW5kZXgo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgICAgIG1fd29ya3Nl
dC0+cmVtb3ZlKG1faW5kZXhpbmcuaW5kZXgobm9kZSkpOworICAgICAgICAgICAgICAgIG1fd29y
a3NldC0+YWRkKG1faW5kZXhpbmcuc2hhZG93SW5kZXgobm9kZSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICBtX3dvcmtzZXQucmVtb3ZlKG5vZGUtPmluZGV4KCkpOwotICAgICAgICAgICAgICAgIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFkZENoaWxkVXNlKTsKKyAgICAg
ICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5nLmluZGV4KG5vZGUpKTsKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSwgWyZdIChFZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5l
d0VudHJ5ID0gbV93b3Jrc2V0LT5hZGQobV9pbmRleGluZy5pbmRleChlZGdlLm5vZGUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG5ld0VudHJ5ID8gRG9l
c0tpbGwgOiBEb2VzTm90S2lsbCk7CisgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgLy8gVXBk
YXRlIGxpdmUgYXQgaGVhZC4KLSAgICAgICAgYXV0byYgbGl2ZUF0SGVhZCA9IG1fbGl2ZUF0SGVh
ZFtibG9ja0luZGV4XTsKLSAgICAgICAgaWYgKG1fd29ya3NldC5zaXplKCkgPT0gbGl2ZUF0SGVh
ZC5zaXplKCkpCisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3csIDE+JiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOworICAgICAgICBp
ZiAobV93b3Jrc2V0LT5zaXplKCkgPT0gbGl2ZUF0SGVhZC5zaXplKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCBsaXZlSW5kZXhBdEhlYWQgOiBs
aXZlQXRIZWFkKQotICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShsaXZlSW5kZXhBdEhlYWQp
OwotICAgICAgICBBU1NFUlQoIW1fd29ya3NldC5pc0VtcHR5KCkpOworICAgICAgICAgICAgbV93
b3Jrc2V0LT5yZW1vdmUobGl2ZUluZGV4QXRIZWFkKTsKKyAgICAgICAgQVNTRVJUKCFtX3dvcmtz
ZXQtPmlzRW1wdHkoKSk7CiAKLSAgICAgICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2
ZUF0SGVhZC5zaXplKCkgKyBtX3dvcmtzZXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBuZXdWYWx1ZSA6IG1fd29ya3NldCkKKyAgICAgICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNp
dHkobGl2ZUF0SGVhZC5zaXplKCkgKyBtX3dvcmtzZXQtPnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgbmV3VmFsdWUgOiAqbV93b3Jrc2V0KQogICAgICAgICAgICAgbGl2ZUF0SGVhZC51
bmNoZWNrZWRBcHBlbmQobmV3VmFsdWUpOwogCiAgICAgICAgIGJvb2wgY2hhbmdlZFByZWRlY2Vz
c29yID0gZmFsc2U7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9j
ay0+cHJlZGVjZXNzb3JzKSB7Ci0gICAgICAgICAgICBhdXRvJiBsaXZlQXRUYWlsID0gbV9saXZl
QXRUYWlsW3ByZWRlY2Vzc29yXTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbmV3VmFsdWUg
OiBtX3dvcmtzZXQpIHsKKyAgICAgICAgICAgIEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNo
PHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNp
Z25lZD4+JgorICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbcHJlZGVj
ZXNzb3JdOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6ICptX3dvcmtzZXQp
IHsKICAgICAgICAgICAgICAgICBpZiAobGl2ZUF0VGFpbC5hZGQobmV3VmFsdWUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghbV9kaXJ0eUJsb2Nrcy5xdWlja1NldChwcmVkZWNlc3Nvci0+
aW5kZXgpKQogICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByZWRlY2Vzc29yID0gdHJ1
ZTsKQEAgLTE3NiwyMSArMTcwLDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBjaGFuZ2Vk
UHJlZGVjZXNzb3I7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZENoaWxkVXNl
KE5vZGUqLCBFZGdlJiBlZGdlKQotICAgIHsKLSAgICAgICAgYm9vbCBuZXdFbnRyeSA9IG1fd29y
a3NldC5hZGQoZWRnZS0+aW5kZXgoKSk7Ci0gICAgICAgIGVkZ2Uuc2V0S2lsbFN0YXR1cyhuZXdF
bnRyeSA/IERvZXNLaWxsIDogRG9lc05vdEtpbGwpOwotICAgIH0KLQogICAgIC8vIEJsb2NrcyB3
aXRoIG5ldyBsaXZlIHZhbHVlcyBhdCB0YWlsLgogICAgIEJpdFZlY3RvciBtX2RpcnR5QmxvY2tz
OworICAgIAorICAgIEZsb3dJbmRleGluZyYgbV9pbmRleGluZzsKIAogICAgIC8vIExpdmUgdmFs
dWVzIHBlciBibG9jayBlZGdlLgogICAgIEJsb2NrTWFwPFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3csIDE+PiBtX2xpdmVBdEhlYWQ7CiAgICAgQmxvY2tNYXA8SGFzaFNl
dDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4+IG1fbGl2ZUF0VGFpbDsKIAogICAgIC8vIFNp
bmdsZSBzcGFyc2Ugc2V0IGFsbG9jYXRlZCBvbmNlIGFuZCB1c2VkIGJ5IGV2ZXJ5IGJhc2ljIGJs
b2NrLgotICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3dvcmtzZXQ7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93
Pj4gbV93b3Jrc2V0OwogfTsKIAogYm9vbCBwZXJmb3JtTGl2ZW5lc3NBbmFseXNpcyhHcmFwaCYg
Z3JhcGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA4
Mjk0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MjksMTUgKzI1MjksMTggQEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIG93bmVy
OwogfTsKIAotaW5saW5lIGJvb2wgbm9kZUNvbXBhcmF0b3IoTm9kZSogYSwgTm9kZSogYikKLXsK
LSAgICByZXR1cm4gYS0+aW5kZXgoKSA8IGItPmluZGV4KCk7Ci19CitzdHJ1Y3QgTm9kZUNvbXBh
cmF0b3IgeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGVQdHJUeXBlPgorICAgIGJvb2wgb3Bl
cmF0b3IoKShOb2RlUHRyVHlwZSBhLCBOb2RlUHRyVHlwZSBiKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGEtPmluZGV4KCkgPCBiLT5pbmRleCgpOworICAgIH0KK307CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiBDU3RyaW5nIG5vZGVMaXN0RHVtcChjb25zdCBUJiBub2RlTGlzdCkKIHsK
LSAgICByZXR1cm4gc29ydGVkTGlzdER1bXAobm9kZUxpc3QsIG5vZGVDb21wYXJhdG9yKTsKKyAg
ICByZXR1cm4gc29ydGVkTGlzdER1bXAobm9kZUxpc3QsIE5vZGVDb21wYXJhdG9yKCkpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMjU0OCw3ICsyNTUxLDcgQEAgQ1N0cmluZyBub2Rl
TWFwRHVtcChjb25zdCBUJiBub2RlTWFwLCBEdQogICAgICAgICB0eXBlbmFtZSBUOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gbm9kZU1hcC5iZWdpbigpOwogICAgICAgICBpdGVyICE9IG5vZGVNYXAu
ZW5kKCk7ICsraXRlcikKICAgICAgICAga2V5cy5hcHBlbmQoaXRlci0+a2V5KTsKLSAgICBzdGQ6
OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpLCBub2RlQ29tcGFyYXRvcik7CisgICAgc3Rk
Ojpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSwgTm9kZUNvbXBhcmF0b3IoKSk7CiAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OwogICAgIENvbW1hUHJpbnRlciBjb21tYTsKICAgICBmb3Io
dW5zaWduZWQgaSA9IDA7IGkgPCBrZXlzLnNpemUoKTsgKytpKQpAQCAtMjU2Miw3ICsyNTY1LDcg
QEAgQ1N0cmluZyBub2RlVmFsdWVQYWlyTGlzdER1bXAoY29uc3QgVCYgbgogICAgIHVzaW5nIFYg
PSB0eXBlbmFtZSBUOjpWYWx1ZVR5cGU7CiAgICAgVCBzb3J0ZWRMaXN0ID0gbm9kZVZhbHVlUGFp
ckxpc3Q7CiAgICAgc3RkOjpzb3J0KHNvcnRlZExpc3QuYmVnaW4oKSwgc29ydGVkTGlzdC5lbmQo
KSwgW10oY29uc3QgViYgYSwgY29uc3QgViYgYikgewotICAgICAgICByZXR1cm4gbm9kZUNvbXBh
cmF0b3IoYS5ub2RlLCBiLm5vZGUpOworICAgICAgICByZXR1cm4gTm9kZUNvbXBhcmF0b3IoKShh
Lm5vZGUsIGIubm9kZSk7CiAgICAgfSk7CiAKICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJh
Y3RWYWx1ZVBhaXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK3ZvaWQgTm9kZUFic3RyYWN0VmFsdWVQYWlyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG5vZGUsICI9PiIsIHZhbHVlKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVB
YnN0cmFjdFZhbHVlUGFpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNp
bmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgTm9kZUFic3RyYWN0VmFsdWVQYWlyIHsKKyAgICBOb2RlQWJz
dHJhY3RWYWx1ZVBhaXIoKSB7IH0KKyAgICAKKyAgICBOb2RlQWJzdHJhY3RWYWx1ZVBhaXIoTm9k
ZUZsb3dQcm9qZWN0aW9uIG5vZGUsIGNvbnN0IEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgICAg
ICA6IG5vZGUobm9kZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICBOb2Rl
Rmxvd1Byb2plY3Rpb24gbm9kZTsKKyAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVj
dGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlRmxvd1Byb2plY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2Rl
Rmxvd1Byb2plY3Rpb246OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAo
ISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiLSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChraW5kKCkgPT0gUHJpbWFyeSkgeworICAgICAgICBvdXQucHJpbnQobm9kZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBvdXQucHJpbnQoInNoYWRvdygiLCBub2Rl
KCksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVG
bG93UHJvamVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZUZsb3dQcm9qZWN0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHTm9k
ZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoVGFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCitjbGFzcyBOb2RlRmxvd1Byb2plY3Rpb24geworcHVibGljOgorICAgIGVu
dW0gS2luZCB7CisgICAgICAgIFByaW1hcnksCisgICAgICAgIFNoYWRvdworICAgIH07CisgICAg
CisgICAgTm9kZUZsb3dQcm9qZWN0aW9uKCkgeyB9CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0
aW9uKE5vZGUqIG5vZGUpCisgICAgICAgIDogbV93b3JkKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KG5vZGUpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0aW9uKE5vZGUq
IG5vZGUsIEtpbmQga2luZCkKKyAgICAgICAgOiBtX3dvcmQoYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZSkgfCAoa2luZCA9PSBTaGFkb3cgPyBzaGFkb3dCaXQgOiAwKSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCisgICAgICAgIDogbV93b3JkKHNoYWRvd0JpdCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fd29yZDsgfQor
ICAgIAorICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIChtX3dvcmQgJiBzaGFkb3dCaXQp
ID8gU2hhZG93IDogUHJpbWFyeTsgfQorICAgIAorICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8Tm9kZSo+KG1fd29yZCAmIH5zaGFkb3dCaXQpOyB9CisgICAgCisg
ICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm5vZGUoKTsgfQorICAgIE5vZGUq
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBub2RlKCk7IH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dvcmQ7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3I9PShOb2RlRmxvd1Byb2plY3Rpb24gb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV93b3JkID09IG90aGVyLm1fd29yZDsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciE9KE5vZGVGbG93UHJvamVjdGlvbiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gKnRoaXMgPT0gTm9kZUZsb3dQcm9qZWN0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgLy8gUGhpIHNoYWRvdyBwcm9qZWN0aW9ucyBjYW4gYmVjb21l
IGludmFsaWQgYmVjYXVzZSB0aGUgUGhpIG1pZ2h0IGJlIGZvbGRlZCB0byBzb21ldGhpbmcgZWxz
ZS4KKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IFByaW1hcnkgfHwgbm9kZSgpLT5vcCgpID09IFBoaTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuYz4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKE5vZGUqIG5vZGUsIGNvbnN0IEZ1
bmMmIGZ1bmMpCisgICAgeworICAgICAgICBmdW5jKE5vZGVGbG93UHJvamVjdGlvbihub2RlKSk7
CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFBoaSkKKyAgICAgICAgICAgIGZ1bmMoTm9kZUZs
b3dQcm9qZWN0aW9uKG5vZGUsIFNoYWRvdykpOworICAgIH0KKyAgICAKK3B1YmxpYzoKKyAgICBz
dGF0aWMgY29uc3QgdWludHB0cl90IHNoYWRvd0JpdCA9IDE7CisgICAgCisgICAgdWludHB0cl90
IG1fd29yZCB7IDAgfTsKK307CisKK3N0cnVjdCBOb2RlRmxvd1Byb2plY3Rpb25IYXNoIHsKKyAg
ICBzdGF0aWMgdW5zaWduZWQgaGFzaChOb2RlRmxvd1Byb2plY3Rpb24ga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoTm9kZUZsb3dQcm9qZWN0aW9uIGEs
IE5vZGVGbG93UHJvamVjdGlvbiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFz
aDxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6
Tm9kZUZsb3dQcm9qZWN0aW9uSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZH
OjpOb2RlRmxvd1Byb2plY3Rpb24+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpO
b2RlRmxvd1Byb2plY3Rpb24+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDIwODI5NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5z
ZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsMTEgKzEyNiwxMyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIC8vIENvbnN0cnVjdCB0aGUgc3RhdGUtYXQtdGFpbCBi
YXNlZCBvbiB0aGUgZXBvY2hzIG9mIGxpdmUgbm9kZXMgYW5kIHRoZQogICAgICAgICAgICAgICAg
ICAgICAvLyBjdXJyZW50IGVwb2NoLiBXZSBncm93IHN0YXRlLWF0LXRhaWwgbW9ub3RvbmljYWxs
eSB0byBlbnN1cmUgY29udmVyZ2VuY2UuCiAgICAgICAgICAgICAgICAgICAgIGJvb2wgdGhpc0Js
b2NrQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUg
OiBibG9jay0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoTm9k
ZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobm9kZS5raW5kKCkgPT0gTm9kZUZsb3dQcm9qZWN0aW9uOjpT
aGFkb3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+ZXBvY2goKSAhPSBtX2N1cnJlbnRFcG9jaCkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBub2RlIGlzIG9sZGVyIHRoYW4gdGhl
IGN1cnJlbnQgZXBvY2gsIHRoZW4gd2UgbWF5IG5lZWQgdG8KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBydW4gYSBiYXJyaWVyIG9uIGl0IGluIHRoZSBmdXR1cmUuIFNvLCBhZGQgaXQg
dG8gdGhlIHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNCbG9ja0NoYW5n
ZWQgfD0gbV9zdGF0ZUF0VGFpbC0+YXQoYmxvY2spLmFkZChub2RlKS5pc05ld0VudHJ5OworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNCbG9ja0NoYW5nZWQgfD0gbV9zdGF0ZUF0VGFp
bC0+YXQoYmxvY2spLmFkZChub2RlLm5vZGUoKSkuaXNOZXdFbnRyeTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
QEAgLTE3OCw4ICsxODAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBtX3N0YXRlLT5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRI
ZWFkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdGVBdEhlYWQtPmF0KGJsb2NrKS5jb250
YWlucyhub2RlKSkgeworICAgICAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6
IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5raW5k
KCkgPT0gTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlQXRIZWFkLT5hdChibG9jaykuY29u
dGFpbnMobm9kZS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHByZXZpb3Vz
IGJsb2NrcyB0ZWxsIHVzIHRoYXQgdGhpcyBub2RlIG1heSBuZWVkIGEgYmFycmllciBpbiB0aGUK
ICAgICAgICAgICAgICAgICAgICAgLy8gZnV0dXJlLCB0aGVuIHB1dCBpdCBpbiB0aGUgYW5jaWVu
dCBwcmltb3JkaWFsIGVwb2NoLiBUaGlzIGZvcmNlcyB1cyB0bwogICAgICAgICAgICAgICAgICAg
ICAvLyBlbWl0IGEgYmFycmllciBvbiBhbnkgcG9zc2libHktY2VsbCBzdG9yZSwgcmVnYXJkbGVz
cyBvZiB0aGUgZXBvY2ggb2YgdGhlCkBAIC0zMjYsNyArMzMwLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgVXBz
aWxvbjoKLSAgICAgICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRFcG9jaChtX25vZGUtPmVw
b2NoKCkpOworICAgICAgICAgICAgICAgIC8vIEFzc3VtZSB0aGUgd29yc3QgZm9yIFBoaXMgc28g
dGhhdCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IFBoaSBzaGFkb3dzLgorICAgICAgICAg
ICAgICAgIG1fbm9kZS0+cGhpKCktPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAgICAgICAg
IG1fbm9kZS0+c2V0RXBvY2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4Mjk0KQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0xMS0wMyAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBwbGF5cyBmYXN0IGFuZCBs
b29zZSB3aXRoIHRoZSBzaGFkb3cgdmFsdWVzIG9mIGEgUGhpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQzMDkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1hZGUgdGhpcyBBUEkgdXNlIHNp
emUgcmF0aGVyIHRoYW4gbWF4SW5kZXggYXMgaXRzIGluaXRpYWxpemF0aW9uIHBhcmFtZXRlciwg
YmVjYXVzZSB0aGF0J3MKKyAgICAgICAgbGVzcyBjb25mdXNpbmcuCisKKyAgICAgICAgKiB3dGYv
SW5kZXhTcGFyc2VTZXQuaDoKKyAgICAgICAgKFdURjo6SW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dI
YW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQpOgorCiAyMDE2LTExLTAyICBSb21haW4gQmVsbGVzc29y
dCAgPHJvbWFpbi5iZWxsZXNzb3J0QGNyZi5jYW5vbi5mcj4KIAogICAgICAgICBbUmVhZGFibGUg
U3RyZWFtcyBBUEldIEVuYWJsZSBjcmVhdGlvbiBvZiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9s
bGVyCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9uIDIwODI5NCkKKysrIFNv
dXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3JhcwogY2xhc3MgSW5k
ZXhTcGFyc2VTZXQgewogICAgIHR5cGVkZWYgVmVjdG9yPHVuc2lnbmVkLCAwLCBPdmVyZmxvd0hh
bmRsZXI+IFZhbHVlTGlzdDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1
bnNpZ25lZCBtYXhWYWx1ZSk7CisgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQg
c2l6ZSk7CiAKICAgICBib29sIGFkZCh1bnNpZ25lZCk7CiAgICAgYm9vbCByZW1vdmUodW5zaWdu
ZWQpOwpAQCAtNjUsOSArNjUsOSBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
T3ZlcmZsb3dIYW5kbGVyPgotaW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46
OkluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIG1heFZhbHVlKQoraW5saW5lIEluZGV4U3BhcnNlU2V0
PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIHNpemUpCiB7Ci0gICAg
bV9tYXAucmVzaXplKG1heFZhbHVlICsgMSk7CisgICAgbV9tYXAucmVzaXplKHNpemUpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293818</attachid>
            <date>2016-11-03 16:16:09 -0700</date>
            <delta_ts>2016-11-03 16:55:47 -0700</delta_ts>
            <desc>possibly better patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>81801</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzMzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIHBsYXlzIGZhc3QgYW5kIGxvb3NlIHdpdGggdGhlIHNoYWRvdyB2
YWx1ZXMgb2YgYSBQaGkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDMwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB3aHkgdGhlIERGRyBuZWVkcyB0
byByZWNvZ25pemUgdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBoaS4KKworICAgICAgICAqIHN0cmVz
cy9kZmctc3NhLXN3YXAuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNi0xMS0wMyAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc2tpbmcgZm9yIGEg
dmFsdWUgcHJvZmlsZSBwcmVkaWN0aW9uIHNob3VsZCBiZSBkZWZlbnNpdmUgYWdhaW5zdCBub3Qg
ZmluZGluZyBhIHZhbHVlIHByb2ZpbGUKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy1zc2Etc3dh
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3NhLXN3YXAuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLXNzYS1zd2FwLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOCBAQAordmFyIGksYz0wOworZnVuY3Rpb24gZm9vKCkKK3sKKyAgICB2YXIg
YT0xLGI7Zm9yKGk9MDtpPDI7KytpKXtbYSxiXT1bYixhXTtjKyt9aWYoIWFeYil0aHJvdyBjCit9
Citub0lubGluZShmb28pOworZm9yKHZhciBrID0gMDsgayA8IDEwMDAwOyArK2spCisgICAgZm9v
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzM5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
OCBAQAorMjAxNi0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBwbGF5cyBmYXN0IGFuZCBsb29zZSB3aXRoIHRoZSBzaGFkb3cgdmFsdWVzIG9mIGEg
UGhpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQz
MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIE9oIGJveSwgd2hhdCBhbiBlbWJhcnJhc3NpbmcgbWlzdGFrZSEgVGhlIHN0eWxlIG9mIFNT
QSBJIGxpa2UgdG8gdXNlIGF2b2lkcyBibG9jay92YWx1ZQorICAgICAgICB0dXBsZXMgYXMgcGFy
YW1ldGVycyBvZiBhIFBoaSwgdGhlcmVieSBzaW1wbGlmeWluZyBDRkcgdHJhbnNmb3JtYXRpb25z
IGFuZCBtYWtpbmcgUGhpIGxhcmdlbHkKKyAgICAgICAgbm90IGEgc3BlY2lhbCBjYXNlIGZvciBt
b3N0IGNvbXBpbGVyIHRyYW5zZm9ybXMuIEl0IGRvZXMgdGhpcyBieSBpbnRyb2R1Y2luZyBhbm90
aGVyIHZhbHVlCisgICAgICAgIGNhbGxlZCBVcHNpbG9uLCB3aGljaCBzdG9yZXMgYSB2YWx1ZSBp
bnRvIHNvbWUgUGhpLgorICAgICAgICAKKyAgICAgICAgQjMgdXNlcyB0aGlzIGFsc28uIFRoZSBl
YXNpZXN0IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgVXBzaWxvbi9QaGkgYmVoYXZlIGxpa2UgaXMg
dG8gbG9vayBhdAorICAgICAgICB0aGUgQjMtPkFpciBsb3dlcmluZy4gQWlyIGlzIG5vdCBTU0Eg
LSBpdCBoYXMgVG1wcyB0aGF0IHlvdSBjYW4gYXNzaWduIHRvIGFuZCB1c2UgYXMgbWFueQorICAg
ICAgICB0aW1lcyBhcyB5b3UgbGlrZS4gQjMgYWxsb2NhdGVzIG9uZSBUbXAgcGVyIFZhbHVlLCBh
bmQgYW4gZXh0cmEgInBoaVRtcCIgZm9yIFBoaXMsIHNvIHRoYXQKKyAgICAgICAgUGhpcyBnZXQg
dHdvIFRtcHMgdG90YWwuIFVwc2lsb24gc3RvcmVzIHRoZSB2YWx1ZSBpbnRvIHRoZSBwaGlUbXAg
b2YgdGhlIFBoaSwgd2hpbGUgUGhpIG1vdmVzCisgICAgICAgIHRoZSB2YWx1ZSBmcm9tIGl0cyBw
aGlUbXAgdG8gaXRzIHRtcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRv
IHN1cHBvcnQgc2NlbmFyaW9zIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAgICAgICBhOiBQ
aGkoKQorICAgICAgICAgICAgYjogVXBzaWxvbihAeCwgXmEpCisgICAgICAgICAgICBjOiBVc2Uo
QGEpCisgICAgICAgIAorICAgICAgICBIZXJlLCB3ZSB3YW50IEBjIHRvIHNlZSBAYSdzIHZhbHVl
IGJlZm9yZSBAYi4gVGhhdCdzIGEgdmVyeSBiYXNpYyByZXF1aXJlbWVudCBvZiBTU0E6IHRoYXQK
KyAgICAgICAgdGhlIGEgdmFsdWUgKGxpa2UgQGEpIGRvZXNuJ3QgY2hhbmdlIGR1cmluZyBpdHMg
bGlmZXRpbWUuCisgICAgICAgIAorICAgICAgICBVbmZvcnR1bmF0ZWx5LCBERkcnYSBsaXZlbmVz
cyBhbmFseXNpcyBhbmQgYWJzdHJhY3QgaW50ZXJwcmV0ZXIgYm90aCBmYWlsZWQgdG8gY29ycmVj
dGx5CisgICAgICAgIG1vZGVsIFVwc2lsb24vUGhpIHRoaXMgd2F5LiBUaGV5IHdvdWxkIGFzc3Vt
ZSB0aGF0IGl0J3MgYWNjdXJhdGUgdG8gbW9kZWwgdGhlIFVwc2lsb24gYXMKKyAgICAgICAgc3Rv
cmluZyBpbnRvIHRoZSBQaGkgZGlyZWN0bHkuCisgICAgICAgIAorICAgICAgICBCZWNhdXNlIERG
RyBkb2VzIGZsb3cgYW5hbHlzaXMgb3ZlciBTU0EsIG1ha2luZyBpdCBjb3JyZWN0IG1lYW5zIGVu
YWJsaW5nIGl0IHRvIHNwZWFrIG9mIHRoZQorICAgICAgICBzaGFkb3cgdmFsdWUuIFRoaXMgY2hh
bmdlIGFkZHJlc3NlcyB0aGlzIHByb2JsZW0gYnkgaW50cm9kdWNpbmcgdGhlIGNvbmNlcHQgb2Yg
YQorICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24uIFRoaXMgaXMgYSBrZXkgdGhhdCBsZXRzIHVz
IHNwZWFrIG9mIGJvdGggYSBOb2RlJ3MgcHJpbWFyeSB2YWx1ZSBhbmQgaXRzCisgICAgICAgIG9w
dGlvbmFsICJzaGFkb3ciIHZhbHVlLiBMaXZlbmVzcyBhbmQgQUkgYXJlIG5vdyBrZXllZCBieSBO
b2RlRmxvd1Byb2plY3Rpb24gcmF0aGVyIHRoYW4KKyAgICAgICAgTm9kZSouIENvbmNlcHR1YWxs
eSB0aGlzIHR1cm5zIG91dCB0byBiZSBhIHZlcnkgc2ltcGxlIGNoYW5nZSwgYnV0IGl0IGRvZXMg
dG91Y2ggYSBnb29kCisgICAgICAgIGFtb3VudCBvZiBjb2RlLgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wTGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZlbmVzczo6QWJzdHJhY3RMaXZlbmVzcyk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzQWRhcHRlcjo6bWF4SW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI6Om1heEluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjpt
YXhJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpmb3JOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVm
ZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0
cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5oOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0Nv
bWJpbmVkTGl2ZW5lc3MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmxpdmVOb2Rlc0F0SGVhZCk6
CisgICAgICAgICogZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaDoKKyAgICAgICAgKiBkZmcvREZH
Rmxvd0luZGV4aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5n
OjpGbG93SW5kZXhpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6fkZsb3dJ
bmRleGluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjpyZWNvbXB1dGUpOgor
ICAgICAgICAqIGRmZy9ERkdGbG93SW5kZXhpbmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6Rmxvd0luZGV4aW5nOjpncmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5n
OjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OmluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OnNoYWRvd0luZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpGbG93SW5kZXhpbmc6Om5vZGVQcm9qZWN0aW9uKToKKyAgICAgICAgKiBkZmcv
REZHRmxvd01hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpGbG93TWFw
KToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpyZWNvbXB1dGUpOgorICAgICAgICAoSlND
OjpERkc6OkZsb3dNYXA6OmdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjphdCk6
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6YXRTaGFkb3cpOgorICAgICAgICAoV1RGOjpw
cmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjpHcmFwaCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OmFic3RyYWN0VmFsdWVzQ2FjaGUpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAg
KEpTQzo6REZHOjpzZXRMaXZlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJz
dHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFs
dWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Zm9y
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhh
c2UpOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnByb2Nlc3NCbG9jayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlOjphZGRDaGlsZFVzZSk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Q29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUxpc3REdW1w
KToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlTWFwRHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6
bm9kZVZhbHVlUGFpckxpc3REdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlQ29tcGFyYXRv
cik6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlQWJzdHJhY3RWYWx1ZVBhaXI6Ok5vZGVBYnN0cmFjdFZhbHVlUGFp
cik6CisgICAgICAgICogZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR05vZGVGbG93UHJvamVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Rmxvd1Byb2plY3Rpb246Ok5vZGVGbG93UHJvamVjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlRmxvd1Byb2plY3Rpb246OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJv
amVjdGlvbjo6bm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpv
cGVyYXRvciopOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0
b3ItPik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpoYXNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb25IYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlRmxvd1Byb2plY3Rpb25IYXNoOjplcXVhbCk6CisgICAgICAgICogZGZnL0RGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDoKKwogMjAxNi0xMS0wMyAgU2FhbSBCYXJhdGkg
IDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc2tpbmcgZm9yIGEgdmFsdWUgcHJvZmls
ZSBwcmVkaWN0aW9uIHNob3VsZCBiZSBkZWZlbnNpdmUgYWdhaW5zdCBub3QgZmluZGluZyBhIHZh
bHVlIHByb2ZpbGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAKICAgICBkZmcvREZHRmluYWxpemVyLmNw
cAogICAgIGRmZy9ERkdGaXh1cFBoYXNlLmNwcAorICAgIGRmZy9ERkdGbG93SW5kZXhpbmcuY3Bw
CiAgICAgZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAogICAgIGRmZy9ERkdGbHVzaGVkQXQuY3BwCiAg
ICAgZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC0zNDMs
NyArMzQ0LDkgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTXVsdGlH
ZXRCeU9mZnNldERhdGEuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcv
REZHTm9kZS5jcHAKKyAgICBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAogICAgIGRm
Zy9ERkdOb2RlRmxhZ3MuY3BwCisgICAgZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAKICAg
ICBkZmcvREZHTm9kZU9yaWdpbi5jcHAKICAgICBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlz
aXNQaGFzZS5jcHAKICAgICBkZmcvREZHT1NSRW50cnkuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTEyOSw2ICsxMjksMTMgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0Rv
dWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUu
aCAqLzsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVy
U2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmgg
Ki87IH07CiAJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1MUIxOTIyQTNC
QzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMDE3N0YxRENBREMzMzAwRUE1OTUwIC8qIERGR0Zsb3dJ
bmRleGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjIwMTc3RDFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCAqLzsgfTsK
KwkJMEYyMDE3ODAxRENBREMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0UxRENBREMzMDAw
RUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oICovOyB9OworCQkwRjIwMTc4MjFEQ0FERDQyMDBF
QTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMDE3ODExRENBREQ0MDAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCAqLzsg
fTsKKwkJMEYyMDE3ODUxRENBRTE0OTAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODQx
RENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovOyB9OworCQkwRjIw
MTc4NjFEQ0FFMTRDMDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzgzMURDQUUxNDcw
MEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwICovOyB9OworCQkwRjIwMTc4OTFE
Q0I5NDI0MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4ODFEQ0I5NDIyMDBFQTU5
NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggKi87IH07CisJCTBGMjAxNzhBMURDQjk0
MjYwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUw
IC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi87IH07CiAJCTBGMjBDMjU5MUE4MDEz
QUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1
YWxSZWdpc3Rlci5jcHAgKi87IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9u
S2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgw
MDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNTE3LDYgKzI1MjQsMTMgQEAKIAkJMEYxRTNB
NTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcv
REZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
RTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5o
OyBwYXRoID0gZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93
SW5kZXhpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxv
d0luZGV4aW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0lu
ZGV4aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGlu
Zy5oOyBwYXRoID0gZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjIwMTc4MTFEQ0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbG93TWFwLmg7IHBhdGggPSBkZmcvREZHRmxv
d01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MzFEQ0FFMTQ3MDBF
QTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR05vZGVGbG93UHJvamVjdGlvbi5jcHA7IHBhdGggPSBkZmcvREZH
Tm9kZUZsb3dQcm9qZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
MDE3ODQxRENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgcGF0aCA9
IGRmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RW
YWx1ZVBhaXIuY3BwOyBwYXRoID0gZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBE
RkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmg7IHBhdGggPSBkZmcvREZHTm9kZUFic3RyYWN0
VmFsdWVQYWlyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjBDMjU4MUE4MDEz
QUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktp
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNpYWxpemF0aW9u
S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgwMDBB
REM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBCeXRlY29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02NzI5LDggKzY3NDMsNiBAQAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBE
RkdDU0VQaGFzZS5oICovLAogCQkJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQ
aGFzZS5jcHAgKi8sCiAJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNl
LmggKi8sCi0JCQkJRTMyMkU1QTAxREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9p
bnRQYXJhbXMuY3BwICovLAotCQkJCUUzMjJFNUExMURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01K
SVRQYXRjaHBvaW50UGFyYW1zLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RC
REE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAogCQkJCTBGRkM5MjEzMUI5NEU4M0Uw
MDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCkBAIC02NzQ1LDYgKzY3NTcs
OCBAQAogCQkJCTBGNUExMjcxMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICovLAog
CQkJCTBGNUExMjcyMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuaCAqLywKIAkJCQkwRkQ4
MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovLAorCQkJCUUzMjJFNUEw
MURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcCAqLywKKwkJ
CQlFMzIyRTVBMTFEQTY0NDM1MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5o
ICovLAogCQkJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0
ZS5oICovLAogCQkJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICov
LAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKQEAgLTY3
NjEsNiArNjc3NSw5IEBACiAJCQkJQTc4QTk3NkYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFs
aXplci5oICovLAogCQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNl
LmNwcCAqLywKIAkJCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5o
ICovLAorCQkJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3Bw
ICovLAorCQkJCTBGMjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAq
LywKKwkJCQkwRjIwMTc4MTFEQ0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovLAogCQkJ
CTBGOUQzMzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovLAogCQkJCTBG
OUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJCQlBN0Q4OUNF
ODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwICovLApAQCAtNjgyOCw5ICs2
ODQ1LDEzIEBACiAJCQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29w
cy5oICovLAogCQkJCTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLywK
IAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAorCQkJCTBGMjAx
Nzg3MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwICovLAor
CQkJCTBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIu
aCAqLywKIAkJCQkwRkI0QjUxRjE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZUFsbG9jYXRvci5o
ICovLAogCQkJCTBGQTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICov
LAogCQkJCTBGQTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKKwkJ
CQkwRjIwMTc4MzFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAq
LywKKwkJCQkwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9u
LmggKi8sCiAJCQkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3Bw
ICovLAogCQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8s
CiAJCQkJMEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCkBAIC03
NjEyLDYgKzc2MzMsNyBAQAogCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyog
QjNDQ2FsbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxNjFCRjAyNzZDMDAxM0M4
OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgyMURD
QURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3
NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzNzMwOTMxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC04NDk4LDYgKzg1MjAsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAv
KiBDTG9vcFN0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5
OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIw
MTc4NTFEQ0FFMTQ5MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlFMzU1NUI4QTFEQUUwM0E1MDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRl
clBhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFG
QSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3MEE0NzFENTQz
QThCMDA2RTcyMzIgLyogQ2VsbENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTk1LDYg
Kzg2MTgsNyBAQAogCQkJCTE0MTQ0OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1Nl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtl
ZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJENkYxMjEzNTM5QTQxMDBCMDJFODYgLyog
TWFya1N0YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAg
LyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRD
RDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQz
NDBBNDg1MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8s
CkBAIC04NjYzLDYgKzg2ODcsNyBAQAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBB
aXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjBEMUNFQkFG
NzUwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAw
MTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC05ODU4LDYgKzk4ODMsNyBAQAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJ
bmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3NjIwNDFEQjky
NDI2MDBCN0EyRkQgLyogQ29sbGVjdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
OEE3QkVGMUI4Mjk3NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEYyMDE3OEExRENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVl
UGFpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyog
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNC
QUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkz
Q0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTEwMDg3LDYgKzEwMTEzLDcgQEAKIAkJCQkwRjM3MzA4QzFDMEJEMjkxMDAw
NTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEw
N0VDN0U3MDA2NTA0NDYgLyogTWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIx
M0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjIwMTc3RjFEQ0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNzk0RTc1MUI3N0VC
OTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFseXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzU1
RjM1MjFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtMTAxODQsNiArMTAyMTEsNyBAQAogCQkJCUE1RkQwMDY3MTg5QUZFOUMwMDYz
MzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwNkQx
ODlCMDBBQTAwNjMzMjMxIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNUZEMDA2RjE4OUIwMEFBMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGMjAxNzg2MURDQUUxNEMwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2pl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwN0QxODlCMEI0QzAwNjMzMjMxIC8q
IFNjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjUx
ODhFRkZGRDAwMTEwRjE0IC8qIFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1NUQ5M0E1MTg1MDEyQTgwMDQwMERFRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVu
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZl
bmVzcy5oCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RydWN0IFRt
cExpdmVuZXNzQWRhcHRlciB7CiAKICAgICBUbXBMaXZlbmVzc0FkYXB0ZXIoQ29kZSYpIHsgfQog
Ci0gICAgc3RhdGljIHVuc2lnbmVkIG1heEluZGV4KENvZGUmIGNvZGUpCisgICAgc3RhdGljIHVu
c2lnbmVkIG51bUluZGljZXMoQ29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG51
bVRtcHMgPSBjb2RlLm51bVRtcHMoYWRhcHRlclR5cGUpOwogICAgICAgICByZXR1cm4gQWJzb2x1
dGVUbXBNYXBwZXI8YWRhcHRlclR5cGU+OjphYnNvbHV0ZUluZGV4KG51bVRtcHMpOwpAQCAtNjUs
OSArNjUsOSBAQCBzdHJ1Y3QgU3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyIHsKICAgICB7CiAgICAg
fQogCi0gICAgc3RhdGljIHVuc2lnbmVkIG1heEluZGV4KENvZGUmIGNvZGUpCisgICAgc3RhdGlj
IHVuc2lnbmVkIG51bUluZGljZXMoQ29kZSYgY29kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBj
b2RlLnN0YWNrU2xvdHMoKS5zaXplKCkgLSAxOworICAgICAgICByZXR1cm4gY29kZS5zdGFja1Ns
b3RzKCkuc2l6ZSgpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzVHlwZShBcmc6OlR5
cGUpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWVUb0luZGV4KFN0
YWNrU2xvdCogc3RhY2tTbG90KSB7IHJldHVybiBzdGFja1Nsb3QtPmluZGV4KCk7IH0KQEAgLTgz
LDkgKzgzLDkgQEAgc3RydWN0IFJlZ0xpdmVuZXNzQWRhcHRlciB7CiAKICAgICBSZWdMaXZlbmVz
c0FkYXB0ZXIoQ29kZSYpIHsgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIG1heEluZGV4KENvZGUm
KQorICAgIHN0YXRpYyB1bnNpZ25lZCBudW1JbmRpY2VzKENvZGUmKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIFJlZzo6bWF4SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6bWF4SW5kZXgoKSAr
IDE7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgYWNjZXB0c1R5cGUoQXJnOjpUeXBlKSB7IHJl
dHVybiB0cnVlOyB9CkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAgIAogICAgIEFic3Ry
YWN0TGl2ZW5lc3MoQ29kZSYgY29kZSkKICAgICAgICAgOiBBZGFwdGVyKGNvZGUpCi0gICAgICAg
ICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om1heEluZGV4KGNvZGUpKQorICAgICAgICAsIG1fd29ya3Nl
dChBZGFwdGVyOjpudW1JbmRpY2VzKGNvZGUpKQogICAgICAgICAsIG1fbGl2ZUF0SGVhZChjb2Rl
LnNpemUoKSkKICAgICAgICAgLCBtX2xpdmVBdFRhaWwoY29kZS5zaXplKCkpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVyLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNp
bmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCiAj
aW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewpAQCAtNDEsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcihH
cmFwaCYsIEFic3RyYWN0U3RhdGVUeXBlJik7CiAgICAgfkFic3RyYWN0SW50ZXJwcmV0ZXIoKTsK
ICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCisgICAgQWJzdHJh
Y3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3N0YXRlLmZvck5vZGUobm9kZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODE3LDYgKzI4
MTcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
ICAgICAKICAgICBjYXNlIFBoaToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zv
cm0gPT0gU1NBKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUoTm9kZUZsb3dQcm9q
ZWN0aW9uKG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KSk7CiAgICAgICAgIC8vIFRo
ZSBzdGF0ZSBvZiB0aGlzIG5vZGUgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZGVjaWRlZCwgYnV0
IGl0IG1heSBoYXZlIGJlY29tZSBhCiAgICAgICAgIC8vIGNvbnN0YW50LCBpbiB3aGljaCBjYXNl
IHdlJ2QgbGlrZSB0byBrbm93LgogICAgICAgICBpZiAoZm9yTm9kZShub2RlKS5tX3ZhbHVlKQpA
QCAtMjgyNCw4ICsyODI1LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVXBzaWxvbjogewotICAg
ICAgICBtX3N0YXRlLmNyZWF0ZVZhbHVlRm9yTm9kZShub2RlLT5waGkoKSk7Ci0gICAgICAgIGZv
ck5vZGUobm9kZS0+cGhpKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIE5v
ZGVGbG93UHJvamVjdGlvbiBzaGFkb3cobm9kZS0+cGhpKCksIE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93KTsKKyAgICAgICAgaWYgKHNoYWRvdy5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAg
ICAgbV9zdGF0ZS5jcmVhdGVWYWx1ZUZvck5vZGUoc2hhZG93KTsKKyAgICAgICAgICAgIGZvck5v
ZGUoc2hhZG93KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yOTc3LDExICsyOTgxLDE4IEBAIHZvaWQgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBlbHNlCiAgICAgICAgIGNsb2Ji
ZXJMaW1pdCsrOwogICAgIEFTU0VSVChjbG9iYmVyTGltaXQgPD0gbV9zdGF0ZS5ibG9jaygpLT5z
aXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVyTGltaXQ7IGktLTspCi0gICAgICAg
IGZ1bmN0b3IoZm9yTm9kZShtX3N0YXRlLmJsb2NrKCktPmF0KGkpKSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IGNsb2JiZXJMaW1pdDsgaS0tOykgeworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246
OmZvckVhY2goCisgICAgICAgICAgICBtX3N0YXRlLmJsb2NrKCktPmF0KGkpLAorICAgICAgICAg
ICAgWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKKyAgICAgICAgICAg
ICAgICBmdW5jdG9yKGZvck5vZGUobm9kZVByb2plY3Rpb24pKTsKKyAgICAgICAgICAgIH0pOwor
ICAgIH0KICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKQotICAgICAgICAgICAg
ZnVuY3Rvcihmb3JOb2RlKG5vZGUpKTsKKyAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24g
bm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgICAgICBp
ZiAobm9kZS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGZvck5vZGUo
bm9kZSkpOworICAgICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZh
cmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCiAgICAgICAgIGZ1bmN0b3IobV9z
dGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKSk7CkBAIC0zMDM3LDkgKzMwNDgsOSBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBDb21t
YVByaW50ZXIgY29tbWEoIiAiKTsKLSAgICBIYXNoU2V0PE5vZGUqPiBzZWVuOworICAgIEhhc2hT
ZXQ8Tm9kZUZsb3dQcm9qZWN0aW9uPiBzZWVuOwogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBT
U0EpIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxp
dmVBdEhlYWQpIHsKKyAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IG1fc3Rh
dGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKSB7CiAgICAgICAgICAgICBzZWVuLmFkZChub2Rl
KTsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlKTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCkBAIC0zMDQ4LDE1ICszMDU5LDE3IEBAIHZv
aWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgIH0K
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fc3RhdGUuYmxvY2soKS0+YXQoaSk7Ci0gICAgICAg
IHNlZW4uYWRkKG5vZGUpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZSk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLCAiOiIsIHZhbHVlKTsKKyAgICAgICAg
Tm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKAorICAgICAgICAgICAgbV9zdGF0ZS5ibG9jaygp
LT5hdChpKSwgWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICBzZWVuLmFkZChub2RlUHJvamVjdGlvbik7CisgICAgICAgICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGVQcm9qZWN0aW9uKTsKKyAgICAgICAgICAg
ICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlUHJvamVjdGlvbiwgIjoiLCB2YWx1
ZSk7CisgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNT
QSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2
ZUF0VGFpbCkgeworICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0
ZS5ibG9jaygpLT5zc2EtPmxpdmVBdFRhaWwpIHsKICAgICAgICAgICAgIGlmIChzZWVuLmNvbnRh
aW5zKG5vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAy
MDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcsMTYgQEAgQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6QXRUYWlsQWJzdHJhY3RTdGF0ZQogCiBBdFRhaWxBYnN0cmFjdFN0YXRlOjp+QXRUYWls
QWJzdHJhY3RTdGF0ZSgpIHsgfQogCi12b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZh
bHVlRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVW
YWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiB7CiAgICAgbV92YWx1ZXNBdFRh
aWxNYXAuYXQobV9ibG9jaykuYWRkKG5vZGUsIEFic3RyYWN0VmFsdWUoKSk7CiB9CiAKLUFic3Ry
YWN0VmFsdWUmIEF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZSogbm9kZSkKK0Fic3Ry
YWN0VmFsdWUmIEF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGUpCiB7CiAgICAgYXV0byYgdmFsdWVzQXRUYWlsID0gbV92YWx1ZXNBdFRhaWxNYXAuYXQo
bV9ibG9jayk7Ci0gICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0
ZXIgPSB2YWx1ZXNBdFRhaWwuZmluZChub2RlKTsKLSAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIGl0ZXIgIT0gdmFsdWVzQXRUYWlsLmVuZCgpKTsKKyAgICBIYXNoTWFwPE5vZGVGbG93UHJv
amVjdGlvbiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSB2YWx1ZXNBdFRhaWwuZmlu
ZChub2RlKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUubm9kZSgpLCBpdGVyICE9IHZh
bHVlc0F0VGFpbC5lbmQoKSk7CiAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
aAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRh
aWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKICNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7IAogCkBAIC00Nyw4ICs0OCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNyZWF0ZVZh
bHVlRm9yTm9kZShOb2RlKik7Ci0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKik7Cisg
ICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKKyAgICBBYnN0
cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbik7CiAgICAgQWJzdHJhY3RWYWx1
ZSYgZm9yTm9kZShFZGdlIGVkZ2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOyB9CiAg
ICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fYmxvY2st
PnZhbHVlc0F0VGFpbDsgfQogICAgIApAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7Ci0gICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwgQWJz
dHJhY3RWYWx1ZT4+IG1fdmFsdWVzQXRUYWlsTWFwOworICAgIEJsb2NrTWFwPEhhc2hNYXA8Tm9k
ZUZsb3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRhaWxNYXA7CiAgICAg
QmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rpb24u
aCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5j
bHVkZSAiREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdp
bi5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgogI2luY2x1ZGUgIk9w
ZXJhbmRzLmgiCkBAIC0yNDgsMTIgKzI0OSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291
bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVh
ZDsKICAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsKIAotICAgICAg
ICBWZWN0b3I8Tm9kZSo+IGxpdmVBdEhlYWQ7Ci0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0
VGFpbDsKLSAgICAgICAgc3RydWN0IE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7Ci0gICAgICAgICAg
ICBOb2RlKiBub2RlOwotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAgICAg
fTsKKyAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4gbGl2ZUF0SGVhZDsKKyAgICAg
ICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4gbGl2ZUF0VGFpbDsKICAgICAgICAgVmVjdG9y
PE5vZGVBYnN0cmFjdFZhbHVlUGFpcj4gdmFsdWVzQXRIZWFkOwogICAgICAgICBWZWN0b3I8Tm9k
ZUFic3RyYWN0VmFsdWVQYWlyPiB2YWx1ZXNBdFRhaWw7CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCShyZXZp
c2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2
ZW5lc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCwxMCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiBIYXNoU2V0PE5vZGUqPiBsaXZlTm9kZXNBdEhlYWQoR3JhcGgm
IGdyYXBoLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBIYXNoU2V0PE5vZGUqPiBzZWVuOwot
ICAgIGZvciAoTm9kZSogbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpCi0gICAgICAgIHNl
ZW4uYWRkKG5vZGUpOworICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBibG9jay0+
c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgIGlmIChub2RlLmtpbmQoKSA9PSBOb2RlRmxvd1By
b2plY3Rpb246OlByaW1hcnkpCisgICAgICAgICAgICBzZWVuLmFkZChub2RlLm5vZGUoKSk7Cisg
ICAgfQogICAgIAogICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwID0gYmxvY2st
PnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogICAgIGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5
dGVjb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVu
ZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5l
ZExpdmVuZXNzLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDExIEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFJldHVybnMgdGhlIHNldCBvZiBub2Rl
cyBsaXZlIGF0IHRhaWwsIGJvdGggZHVlIHRvIGR1ZSBERkcgYW5kIGR1ZSB0byBieXRlY29kZSAo
aS5lLiBPU1IgZXhpdCkuCiBIYXNoU2V0PE5vZGUqPiBsaXZlTm9kZXNBdEhlYWQoR3JhcGgmLCBC
YXNpY0Jsb2NrKik7CiAKKy8vIFdBUk5JTkc6IFRoaXMgY3VycmVudGx5IGRvZXMgbm90IHJlYXNv
biBhYm91dCB0aGUgbGl2ZW5lc3Mgb2Ygc2hhZG93IHZhbHVlcy4gVGhlIGV4ZWN1dGlvbgorLy8g
c2VtYW50aWNzIG9mIERGRyBTU0EgYXJlIHRoYXQgYW4gVXBzaWxvbiBzdG9yZXMgdG8gdGhlIHNo
YWRvdyB2YWx1ZSBvZiBhIFBoaSwgYW5kIHRoZSBQaGkgbG9hZHMKKy8vIGZyb20gdGhhdCBzaGFk
b3cgdmFsdWUuIEhlbmNlLCB0aGUgc2hhZG93IHZhbHVlcyBhcmUgbGlrZSB2YXJpYWJsZXMsIGFu
ZCBoYXZlIGxpdmVuZXNzLiBUaGUgbm9ybWFsCisvLyBsaXZlbmVzcyBhbmFseXNpcyB3aWxsIHRl
bGwgeW91IGFib3V0IHRoZSBsaXZlbmVzcyBvZiBzaGFkb3cgdmFsdWVzLiBJdCdzIE9LIHRvIGln
bm9yZSBzaGFkb3cKKy8vIHZhbHVlcyBpZiB5b3UgdHJlYXQgVXBzaWxvbiBhcyBhbiBvcGFxdWUg
ZXNjYXBlLCBhbmQgYWxsIG9mIHRoZSBjbGluZXRzIG9mIENvbWJpbmVkTGl2ZW5lc3MgZG8gc28u
CiBzdHJ1Y3QgQ29tYmluZWRMaXZlbmVzcyB7CiAgICAgQ29tYmluZWRMaXZlbmVzcygpIHsgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5n
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJ
bmRleGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdGbG93SW5kZXhpbmcuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Zsb3dJbmRleGluZzo6Rmxvd0luZGV4aW5n
KEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgLCBtX251bUluZGljZXMo
MCkKK3sKKyAgICByZWNvbXB1dGUoKTsKK30KKworRmxvd0luZGV4aW5nOjp+Rmxvd0luZGV4aW5n
KCkKK3sKK30KKwordm9pZCBGbG93SW5kZXhpbmc6OnJlY29tcHV0ZSgpCit7CisgICAgdW5zaWdu
ZWQgbnVtTm9kZUluZGljZXMgPSBtX2dyYXBoLm1heE5vZGVDb3VudCgpOworICAgIAorICAgIG1f
bm9kZUluZGV4VG9TaGFkb3dJbmRleC5yZXNpemUobnVtTm9kZUluZGljZXMpOworICAgIG1fbm9k
ZUluZGV4VG9TaGFkb3dJbmRleC5maWxsKFVJTlRfTUFYKTsKKyAgICAKKyAgICBtX3NoYWRvd0lu
ZGV4VG9Ob2RlSW5kZXgucmVzaXplKDApOworCisgICAgbV9udW1JbmRpY2VzID0gbnVtTm9kZUlu
ZGljZXM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5h
dHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBub2RlSW5kZXggPSBub2RlLT5p
bmRleCgpOworICAgICAgICAgICAgdW5zaWduZWQgc2hhZG93SW5kZXggPSBtX251bUluZGljZXMr
KzsKKyAgICAgICAgICAgIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleFtub2RlSW5kZXhdID0gc2hh
ZG93SW5kZXg7CisgICAgICAgICAgICBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXguYXBwZW5kKG5v
ZGVJbmRleCk7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fc2hh
ZG93SW5kZXhUb05vZGVJbmRleC5zaXplKCkgKyBudW1Ob2RlSW5kaWNlcyA9PSBtX251bUluZGlj
ZXMpOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX3NoYWRvd0lu
ZGV4VG9Ob2RlSW5kZXhbc2hhZG93SW5kZXggLSBudW1Ob2RlSW5kaWNlc10gPT0gbm9kZUluZGV4
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmxvd0luZGV4aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbG93SW5kZXhpbmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisj
aW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBub2RlcyB0byB1bmlxdWUs
IGRlbnNlIGluZGljZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgZmFzdAorLy8gTm9k
ZS1rZXllZCBtYXBzLiBUaGUgc3BlY2lhbCBwYXJ0IGlzIHRoYXQgaXQgYWxzbyBhbGxvY2F0ZWQg
aW5kaWNlcyBmb3IgdGhlIHNoYWRvdyB2YWx1ZXMgb2YgUGhpCisvLyBub2Rlcywgd2hpY2ggaXMg
bmVlZGVkIGZvciBhbnkgZmxvdy1zZW5zaXRpdmUgYW5hbHlzaXMuCitjbGFzcyBGbG93SW5kZXhp
bmcgeworcHVibGljOgorICAgIEZsb3dJbmRleGluZyhHcmFwaCYpOworICAgIH5GbG93SW5kZXhp
bmcoKTsKKyAgICAKKyAgICB2b2lkIHJlY29tcHV0ZSgpOworICAgIAorICAgIEdyYXBoJiBncmFw
aCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1JbmRp
Y2VzKCkgY29uc3QgeyByZXR1cm4gbV9udW1JbmRpY2VzOyB9CisgICAgCisgICAgdW5zaWduZWQg
aW5kZXgodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBub2RlSW5kZXg7IH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBpbmRleChOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBpbmRleChu
b2RlLT5pbmRleCgpKTsgfQorICAgIAorICAgIHVuc2lnbmVkIHNoYWRvd0luZGV4KHVuc2lnbmVk
IG5vZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25vZGVJbmRleFRvU2hh
ZG93SW5kZXhbbm9kZUluZGV4XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgc2hhZG93SW5k
ZXgoTm9kZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgbm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICByZXR1cm4gc2hhZG93SW5kZXgobm9k
ZS0+aW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KHVuc2lnbmVkIG5v
ZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0CisgICAgeworICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlBy
aW1hcnk6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgobm9kZUluZGV4KTsKKyAgICAgICAgY2Fz
ZSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiBzaGFkb3dJ
bmRleChub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBp
bmRleChOb2RlICpub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVj
dGlvbjo6UHJpbWFyeToKKyAgICAgICAgICAgIHJldHVybiBpbmRleChub2RlKTsKKyAgICAgICAg
Y2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiBzaGFk
b3dJbmRleChub2RlKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5k
ZXgoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaW5kZXgocHJvamVjdGlvbi5ub2RlKCksIHByb2plY3Rpb24ua2luZCgpKTsKKyAgICB9
CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbV9ub2RlSW5kZXhUb1NoYWRv
d0luZGV4LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBOb2RlRmxvd1Byb2plY3Rpb24obV9n
cmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIE5vZGVGbG93UHJvamVjdGlvbigK
KyAgICAgICAgICAgIG1fZ3JhcGgubm9kZUF0KG1fc2hhZG93SW5kZXhUb05vZGVJbmRleFtpbmRl
eCAtIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleC5zaXplKCldKSwKKyAgICAgICAgICAgIE5vZGVG
bG93UHJvamVjdGlvbjo6U2hhZG93KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEdyYXBo
JiBtX2dyYXBoOworICAgIHVuc2lnbmVkIG1fbnVtSW5kaWNlczsKKyAgICBWZWN0b3I8dW5zaWdu
ZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVJbmRleFRvU2hhZG93SW5kZXg7Cisg
ICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9zaGFkb3dJbmRl
eFRvTm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rmxvd01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxv
d01hcC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxv
d01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKKy8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gbm9kZXMgdG8gdmFsdWVzIHRoYXQg
aXMgdXNlZnVsIGZvciBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcy4gSW4gc3VjaCBhbgorLy8gYW5h
bHlzaXMsIGF0IGV2ZXJ5IHBvaW50IGluIHRoZSBwcm9ncmFtIHdlIG5lZWQgdG8gY29uc2lkZXIg
dGhlIHZhbHVlcyBvZiBub2RlcyBwbHVzIHRoZSBzaGFkb3cKKy8vIHZhbHVlcyBvZiBQaGlzLiBU
aGlzIG1ha2VzIGl0IGVhc3kgdG8gZG8gYm90aCBvZiB0aG9zZSB0aGluZ3MuCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgRmxvd01hcCB7CitwdWJsaWM6CisgICAgRmxvd01hcChHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICB7CisgICAgICAgIHJlc2l6ZSgp
OworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgaWYgdGhlIG51bWJlciBvZiBub2RlcyBp
biB0aGUgZ3JhcGggaGFzIGNoYW5nZWQuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHJlc2V0IGFu
eQorICAgIC8vIGVudHJpZXMuCisgICAgdm9pZCByZXNpemUoKQorICAgIHsKKyAgICAgICAgbV9t
YXAucmVzaXplKG1fZ3JhcGgubWF4Tm9kZUNvdW50KCkpOworICAgICAgICBtX3NoYWRvd01hcC5y
ZXNpemUobV9ncmFwaC5tYXhOb2RlQ291bnQoKSk7CisgICAgfQorICAgIAorICAgIEdyYXBoJiBn
cmFwaCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICBUJiBhdCh1bnNpZ25l
ZCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbbm9kZUluZGV4XTsKKyAg
ICB9CisgICAgCisgICAgVCYgYXQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
dChub2RlLT5pbmRleCgpKTsKKyAgICB9CisgICAgCisgICAgVCYgYXRTaGFkb3codW5zaWduZWQg
bm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2hhZG93TWFwW25vZGVJbmRleF07
CisgICAgfQorICAgIAorICAgIFQmIGF0U2hhZG93KE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gYXRTaGFkb3cobm9kZS0+aW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIFQmIGF0
KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rp
b246OlByaW1hcnk6CisgICAgICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KTsKKyAgICAgICAg
Y2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiBhdFNo
YWRvdyhub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFQqPihudWxscHRyKTsKKyAg
ICB9CisgICAgCisgICAgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5k
IGtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSwga2luZCk7Cisg
ICAgfQorICAgIAorICAgIFQmIGF0KE5vZGVGbG93UHJvamVjdGlvbiBwcm9qZWN0aW9uKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGF0KHByb2plY3Rpb24ubm9kZSgpLCBwcm9qZWN0aW9uLmtpbmQo
KSk7CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCk7IH0K
KyAgICBjb25zdCBUJiBhdChOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZs
b3dNYXAqPih0aGlzKS0+YXQobm9kZSk7IH0KKyAgICBjb25zdCBUJiBhdFNoYWRvdyh1bnNpZ25l
ZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5h
dFNoYWRvdyhub2RlSW5kZXgpOyB9CisgICAgY29uc3QgVCYgYXRTaGFkb3coTm9kZSogbm9kZSkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGUp
OyB9CisgICAgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rp
b246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcykt
PmF0KG5vZGVJbmRleCwga2luZCk7IH0KKyAgICBjb25zdCBUJiBhdChOb2RlKiBub2RlLCBOb2Rl
Rmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93
TWFwKj4odGhpcyktPmF0KG5vZGUsIGtpbmQpOyB9CisgICAgY29uc3QgVCYgYXQoTm9kZUZsb3dQ
cm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+
KHRoaXMpLT5hdChwcm9qZWN0aW9uKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9n
cmFwaDsKKyAgICBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbWFwOworICAg
IFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9zaGFkb3dNYXA7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEpT
Qzo6REZHOjpGbG93TWFwPFQ+JiBtYXApCit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXAuZ3JhcGgoKS5tYXhOb2RlQ291bnQoKTsgKytp
KSB7CisgICAgICAgIGlmIChKU0M6OkRGRzo6Tm9kZSogbm9kZSA9IG1hcC5ncmFwaCgpLm5vZGVB
dChpKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IFQmIHZhbHVlID0gbWFwLmF0KG5vZGUpKQor
ICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZSwgIj0+IiwgdmFsdWUpOworICAg
ICAgICB9CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXAuZ3JhcGgoKS5t
YXhOb2RlQ291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChKU0M6OkRGRzo6Tm9kZSogbm9kZSA9
IG1hcC5ncmFwaCgpLm5vZGVBdChpKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IFQmIHZhbHVl
ID0gbWFwLmF0U2hhZG93KG5vZGUpKQorICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwg
InNoYWRvdygiLCBub2RlLCAiKT0+IiwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjA4MzM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1
ZGUgIkRGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHRG9taW5h
dG9ycy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dN
YXAuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgog
I2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgpAQCAtODMsNiArODUsOSBAQCBHcmFwaDo6R3Jh
cGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9j
ayk7CiAgICAgCiAgICAgbV9oYXNEZWJ1Z2dlckVuYWJsZWQgPSBtX3Byb2ZpbGVkQmxvY2stPndh
c0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSB8fCBPcHRpb25zOjpmb3JjZURlYnVnZ2Vy
Qnl0ZWNvZGVHZW5lcmF0aW9uKCk7CisgICAgCisgICAgbV9pbmRleGluZ0NhY2hlID0gc3RkOjpt
YWtlX3VuaXF1ZTxGbG93SW5kZXhpbmc+KCp0aGlzKTsKKyAgICBtX2Fic3RyYWN0VmFsdWVzQ2Fj
aGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4+KCp0aGlzKTsKIH0K
IAogR3JhcGg6On5HcmFwaCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDEyIEBAIGNsYXNzIEJhY2t3YXJkc0RvbWlu
YXRvcnM7CiBjbGFzcyBDRkc7CiBjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIGNs
YXNzIERvbWluYXRvcnM7CitjbGFzcyBGbG93SW5kZXhpbmc7CiBjbGFzcyBOYXR1cmFsTG9vcHM7
CiBjbGFzcyBQcmVQb3N0TnVtYmVyaW5nOwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRmxv
d01hcDsKKwogI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhp
bmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAogICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAo
X25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXApAQCAtMjAxLDggKzIwNCw2IEBAIHB1YmxpYzoKICAgICBOb2RlKiBub2RlQXQodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNCeUluZGV4W2luZGV4XTsgfQogICAgIHZv
aWQgcGFja05vZGVJbmRpY2VzKCk7CiAKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3c+JiBhYnN0cmFjdFZhbHVlc0NhY2hlKCkgeyByZXR1cm4gbV9hYnN0
cmFjdFZhbHVlc0NhY2hlOyB9Ci0KICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCiAgICAgRnJv
emVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXppbmcgYnkgZGVm
YXVsdC4KQEAgLTkzNSw2ICs5MzYsOSBAQCBwdWJsaWM6CiAgICAgUmVmQ291bnRTdGF0ZSBtX3Jl
ZkNvdW50U3RhdGU7CiAgICAgYm9vbCBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsKICAgICBib29sIG1f
aGFzRXhjZXB0aW9uSGFuZGxlcnMgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93
SW5kZXhpbmc+IG1faW5kZXhpbmdDYWNoZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd01hcDxB
YnN0cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOworCiBwcml2YXRlOgogICAgIHZv
aWQgYWRkTm9kZVRvTWFwQnlJbmRleChOb2RlKik7CiAKQEAgLTk3Miw3ICs5NzYsNiBAQCBwcml2
YXRlOgogCiAgICAgVmVjdG9yPE5vZGUqLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9ub2Rl
c0J5SW5kZXg7CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4g
bV9ub2RlSW5kZXhGcmVlTGlzdDsKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwgMCwgVW5zYWZl
VmVjdG9yT3ZlcmZsb3c+IG1fYWJzdHJhY3RWYWx1ZXNDYWNoZTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CiAKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RTdGF0ZShHcmFwaCYg
Z3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQotICAgICwgbV9hYnN0cmFjdFZhbHVlcyhncmFw
aC5hYnN0cmFjdFZhbHVlc0NhY2hlKCkpCisgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFwaC5t
X2Fic3RyYWN0VmFsdWVzQ2FjaGUpCiAgICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1fY29kZUJs
b2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQogICAgICwgbV9ibG9jaygw
KQogewpAQCAtNTcsMTkgKzU3LDIyIEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmJlZ2lu
QmFzaWNCbG8KICAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9m
TG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwog
ICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9
PSBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAKLSAgICAv
LyBDZXJ0YWluIHBoYXNlcyBpbnNlcnQgbm9kZXMgaW4gYSBibG9jayBhZnRlciBydW5uaW5nIHRo
cm91Z2ggaXQuCi0gICAgLy8gV2UgY2Fubm90IHJlc2VydmUgdGhlIHNwYWNlIGZvciBBYnN0cmFj
dFZhbHVlcyB3aGVuIGluaXRpYWxpemluZyBBYnN0cmFjdFN0YXRlIGJlY2F1c2UgdGhlIG51bWJl
ciBvZiB2YWx1ZXMKLSAgICAvLyBjYW4gaW5jcmVhc2UgYXMgd2UgZXhlY3V0ZS4gSW5zdGVhZCwg
d2UgaW5jcmVhc2UgdGhlIHNpemUgYXMgbmVlZGVkIGJlZm9yZSBwcm9jZXNzaW5nIGVhY2ggYmxv
Y2suCi0gICAgbV9hYnN0cmFjdFZhbHVlcy5yZXNpemUobV9ncmFwaC5tYXhOb2RlQ291bnQoKSk7
CisgICAgbV9hYnN0cmFjdFZhbHVlcy5yZXNpemUoKTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgaSsrKQotICAgICAgICBmb3JOb2RlKGJhc2lj
QmxvY2stPmF0KGkpKS5jbGVhcigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNC
bG9jay0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNo
KAorICAgICAgICAgICAgYmFzaWNCbG9jay0+YXQoaSksIFsmXSAoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGVQcm9qZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlUHJvamVjdGlv
bikuY2xlYXIoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KIAogICAgIG1fdmFyaWFibGVzID0g
YmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOwogICAgIAogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9
PSBTU0EpIHsKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGJhc2ljQmxvY2stPnNzYS0+dmFs
dWVzQXRIZWFkKQotICAgICAgICAgICAgZm9yTm9kZShlbnRyeS5ub2RlKSA9IGVudHJ5LnZhbHVl
OworICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgZW50cnkgOiBiYXNpY0Jsb2Nr
LT5zc2EtPnZhbHVlc0F0SGVhZCkgeworICAgICAgICAgICAgaWYgKGVudHJ5Lm5vZGUuaXNTdGls
bFZhbGlkKCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShlbnRyeS5ub2RlKSA9IGVudHJ5LnZh
bHVlOworICAgICAgICB9CiAgICAgfQogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQg
PSBmYWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKQEAgLTgwLDEy
ICs4MywxMiBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvCiAgICAg
bV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSBiYXNpY0Jsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGVBdEhlYWQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPEJhc2lj
QmxvY2s6OlNTQURhdGE6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywgY29uc3QgVmVj
dG9yPE5vZGUqPiYgbGl2ZSkKK3N0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPE5vZGVB
YnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywgY29uc3QgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlv
bj4mIGxpdmUpCiB7CiAgICAgdmFsdWVzLnJlc2l6ZSgwKTsKICAgICB2YWx1ZXMucmVzZXJ2ZUNh
cGFjaXR5KGxpdmUuc2l6ZSgpKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgOiBsaXZlKQotICAgICAg
ICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5vZGVBYnN0cmFj
dFZhbHVlUGFpciB7IG5vZGUsIEFic3RyYWN0VmFsdWUoKSB9KTsKKyAgICBmb3IgKE5vZGVGbG93
UHJvamVjdGlvbiBub2RlIDogbGl2ZSkKKyAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChO
b2RlQWJzdHJhY3RWYWx1ZVBhaXIgeyBub2RlLCBBYnN0cmFjdFZhbHVlKCkgfSk7CiB9CiAKIHZv
aWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQpAQCAtMTk5LDcgKzIwMiw3IEBA
IGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2sKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQogICAgICAg
ICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CiAKLSAg
ICAgICAgZm9yIChhdXRvJiB2YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCkg
eworICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgdmFsdWVBdFRhaWwgOiBibG9j
ay0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
QXROb2RlID0gZm9yTm9kZSh2YWx1ZUF0VGFpbC5ub2RlKTsKICAgICAgICAgICAgIHZhbHVlQXRU
YWlsLnZhbHVlLm1lcmdlKHZhbHVlQXROb2RlKTsKICAgICAgICAgICAgIHZhbHVlQXROb2RlID0g
dmFsdWVBdFRhaWwudmFsdWU7CkBAIC0yOTEsMTMgKzI5NCwxMyBAQCBib29sIEluUGxhY2VBYnN0
cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmcm9tLT52
YWx1ZXNBdFRhaWwuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+dmFs
dWVzQXRIZWFkW2ldLm1lcmdlKGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7CiAKLSAgICAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IHRvLT5zc2EtPnZhbHVlc0F0SGVhZCkgewotICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGVudHJ5Lm5vZGU7CisgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWly
JiBlbnRyeSA6IHRvLT5zc2EtPnZhbHVlc0F0SGVhZCkgeworICAgICAgICAgICAgTm9kZUZsb3dQ
cm9qZWN0aW9uIG5vZGUgPSBlbnRyeS5ub2RlOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgTWVyZ2luZyBmb3IgIiwgbm9kZSwgIjogZnJv
bSAiLCBmb3JOb2RlKG5vZGUpLCAiIHRvICIsIGVudHJ5LnZhbHVlLCAiXG4iKTsKICNpZm5kZWYg
TkRFQlVHCiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZUNvdW50SW5Gcm9tQmxvY2sgPSAwOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiBmcm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZyb20tPnNzYS0+
dmFsdWVzQXRUYWlsKSB7CisgICAgICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYg
ZnJvbUJsb2NrVmFsdWVBdFRhaWwgOiBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbCkgewogICAgICAg
ICAgICAgICAgIGlmIChmcm9tQmxvY2tWYWx1ZUF0VGFpbC5ub2RlID09IG5vZGUpIHsKICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGZyb21CbG9ja1ZhbHVlQXRUYWlsLnZhbHVlID09IGZvck5v
ZGUobm9kZSkpOwogICAgICAgICAgICAgICAgICAgICArK3ZhbHVlQ291bnRJbkZyb21CbG9jazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0JyYW5j
aERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIkRGR0Zsb3dNYXAuaCIKICNpbmNsdWRlICJERkdHcmFw
aC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKIApAQCAtNDMsMTEgKzQ0LDExIEBAIHB1YmxpYzoK
ICAgICAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIAotICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKSB7IH0KKyAgICB2b2lk
IGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pIHsgfQogICAgIAotICAgIEFi
c3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JO
b2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYWJz
dHJhY3RWYWx1ZXNbbm9kZS0+aW5kZXgoKV07CisgICAgICAgIHJldHVybiBtX2Fic3RyYWN0VmFs
dWVzLmF0KG5vZGUpOwogICAgIH0KICAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVk
Z2UgZWRnZSkKQEAgLTEzMiw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEdyYXBoJiBt
X2dyYXBoOwogCi0gICAgVmVjdG9yPEFic3RyYWN0VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiYgbV9hYnN0cmFjdFZhbHVlczsKKyAgICBGbG93TWFwPEFic3RyYWN0VmFsdWU+JiBtX2Fi
c3RyYWN0VmFsdWVzOwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fdmFyaWFibGVzOwog
ICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdCbG9ja1NldC5oIgogI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQ
cm9qZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1
bXAuaCIKQEAgLTEyMSw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAg
ICBSZWxhdGlvbnNoaXAoTm9kZSogbGVmdCwgTm9kZSogcmlnaHQsIEtpbmQga2luZCwgaW50IG9m
ZnNldCA9IDApCisgICAgUmVsYXRpb25zaGlwKE5vZGVGbG93UHJvamVjdGlvbiBsZWZ0LCBOb2Rl
Rmxvd1Byb2plY3Rpb24gcmlnaHQsIEtpbmQga2luZCwgaW50IG9mZnNldCA9IDApCiAgICAgICAg
IDogbV9sZWZ0KGxlZnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKICAgICAgICAgLCBtX2tp
bmQoa2luZCkKQEAgLTEzMiwxNyArMTMzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV9sZWZ0ICE9IG1fcmlnaHQpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgUmVsYXRp
b25zaGlwIHNhZmVDcmVhdGUoTm9kZSogbGVmdCwgTm9kZSogcmlnaHQsIEtpbmQga2luZCwgaW50
IG9mZnNldCA9IDApCisgICAgc3RhdGljIFJlbGF0aW9uc2hpcCBzYWZlQ3JlYXRlKE5vZGVGbG93
UHJvamVjdGlvbiBsZWZ0LCBOb2RlRmxvd1Byb2plY3Rpb24gcmlnaHQsIEtpbmQga2luZCwgaW50
IG9mZnNldCA9IDApCiAgICAgewotICAgICAgICBpZiAoIWxlZnQgfHwgIXJpZ2h0IHx8IGxlZnQg
PT0gcmlnaHQpCisgICAgICAgIGlmICghbGVmdC5pc1N0aWxsVmFsaWQoKSB8fCAhcmlnaHQuaXNT
dGlsbFZhbGlkKCkgfHwgbGVmdCA9PSByaWdodCkKICAgICAgICAgICAgIHJldHVybiBSZWxhdGlv
bnNoaXAoKTsKICAgICAgICAgcmV0dXJuIFJlbGF0aW9uc2hpcChsZWZ0LCByaWdodCwga2luZCwg
b2Zmc2V0KTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gbV9sZWZ0OyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhbV9sZWZ0OyB9CiAgICAgCi0gICAgTm9kZSogbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVmdDsgfQotICAgIE5vZGUqIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorICAg
IE5vZGVGbG93UHJvamVjdGlvbiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAg
Tm9kZUZsb3dQcm9qZWN0aW9uIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQogICAg
IEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIGludCBvZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldDsgfQogCkBAIC0yNTgsNyArMjU5LDcgQEAgcHVibGljOgog
ICAgIC8vIElmIHBvc3NpYmxlLCByZXR1cm5zIGEgZm9ybSBvZiB0aGlzIHJlbGF0aW9uc2hpcCB3
aGVyZSB0aGUgZ2l2ZW4gbm9kZSBpcyB0aGUgbGVmdAogICAgIC8vIHNpZGUuIFJldHVybnMgYSBu
dWxsIHJlbGF0aW9uc2hpcCBpZiB0aGlzIHJlbGF0aW9uc2hpcCBjYW5ub3Qgc2F5IGFueXRoaW5n
IGFib3V0IHRoaXMKICAgICAvLyBub2RlLgotICAgIFJlbGF0aW9uc2hpcCBmb3JOb2RlKE5vZGUq
IG5vZGUpIGNvbnN0CisgICAgUmVsYXRpb25zaGlwIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9u
IG5vZGUpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9sZWZ0ID09IG5vZGUpCiAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CkBAIC0yNjcsNyArMjY4LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gUmVsYXRpb25zaGlwKCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0TGVmdChOb2Rl
KiBsZWZ0KQorICAgIHZvaWQgc2V0TGVmdChOb2RlRmxvd1Byb2plY3Rpb24gbGVmdCkKICAgICB7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlZnQgIT0gbV9yaWdodCk7CiAgICAgICAgIG1fbGVm
dCA9IGxlZnQ7CkBAIC05ODQsMTMgKzk4NSwxMyBAQCBwcml2YXRlOgogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBtX2xlZnQ7Ci0g
ICAgTm9kZSogbV9yaWdodDsKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24gbV9sZWZ0OworICAgIE5v
ZGVGbG93UHJvamVjdGlvbiBtX3JpZ2h0OwogICAgIEtpbmQgbV9raW5kOwogICAgIGludCBtX29m
ZnNldDsgLy8gVGhpcyBvZmZzZXQgY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlLgogfTsKIAotdHlw
ZWRlZiBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8UmVsYXRpb25zaGlwPj4gUmVsYXRpb25zaGlwTWFw
OwordHlwZWRlZiBIYXNoTWFwPE5vZGVGbG93UHJvamVjdGlvbiwgVmVjdG9yPFJlbGF0aW9uc2hp
cD4+IFJlbGF0aW9uc2hpcE1hcDsKIAogY2xhc3MgSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhh
c2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgpAQCAtMTMxNCw3ICsxMzE1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5taW5WYWx1ZU9mTGVm
dCgpID49IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uTmVnYXRpdmUgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cmVsYXRpb25zaGlwLnJpZ2h0KCkgPT0gbm9kZS0+Y2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAucmlnaHQoKSA9PSBub2RlLT5jaGlsZDIoKS5ub2Rl
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsYXRpb25zaGlwLmtpbmQo
KSA9PSBSZWxhdGlvbnNoaXA6OkVxdWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHJlbGF0aW9uc2hpcC5vZmZzZXQoKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxlc3NUaGFuTGVuZ3RoID0gdHJ1ZTsKQEAgLTE0OTEsMjMgKzE0OTIsMTYgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVXBzaWxvbjogewot
ICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKAotICAgICAgICAgICAgICAgIFJlbGF0aW9uc2hp
cDo6c2FmZUNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5waGkoKSwgUmVsYXRpb25zaGlwOjpFcXVhbCwgMCkpOworICAgICAgICAgICAgc2V0
RXF1aXZhbGVuY2UoCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLAorICAg
ICAgICAgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbihub2RlLT5waGkoKSwgTm9kZUZsb3dQcm9q
ZWN0aW9uOjpTaGFkb3cpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fcmVsYXRpb25zaGlwcy5maW5kKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBtX3JlbGF0aW9uc2hp
cHMuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8UmVsYXRpb25zaGlwPiB0b0FkZDsK
LSAgICAgICAgICAgICAgICBmb3IgKFJlbGF0aW9uc2hpcCByZWxhdGlvbnNoaXAgOiBpdGVyLT52
YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBSZWxhdGlvbnNoaXAgbmV3UmVsYXRpb25zaGlw
ID0gcmVsYXRpb25zaGlwOwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGhpKCkgPT0g
bmV3UmVsYXRpb25zaGlwLnJpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3UmVsYXRpb25zaGlwLnNldExlZnQobm9kZS0+cGhp
KCkpOwotICAgICAgICAgICAgICAgICAgICB0b0FkZC5hcHBlbmQobmV3UmVsYXRpb25zaGlwKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChSZWxhdGlvbnNoaXAgcmVs
YXRpb25zaGlwIDogdG9BZGQpCi0gICAgICAgICAgICAgICAgICAgIHNldFJlbGF0aW9uc2hpcChy
ZWxhdGlvbnNoaXApOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFBoaTogeworICAgICAg
ICAgICAgc2V0RXF1aXZhbGVuY2UoCisgICAgICAgICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9u
KG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KSwKKyAgICAgICAgICAgICAgICBub2Rl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE1MTYs
NiArMTUxMCwyNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIHZvaWQg
c2V0RXF1aXZhbGVuY2UoTm9kZUZsb3dQcm9qZWN0aW9uIG9sZE5vZGUsIE5vZGVGbG93UHJvamVj
dGlvbiBuZXdOb2RlKQorICAgIHsKKyAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hp
cDo6c2FmZUNyZWF0ZShvbGROb2RlLCBuZXdOb2RlLCBSZWxhdGlvbnNoaXA6OkVxdWFsLCAwKSk7
CisgICAgICAgIAorICAgICAgICBhdXRvIGl0ZXIgPSBtX3JlbGF0aW9uc2hpcHMuZmluZChvbGRO
b2RlKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gbV9yZWxhdGlvbnNoaXBzLmVuZCgpKSB7CisgICAg
ICAgICAgICBWZWN0b3I8UmVsYXRpb25zaGlwPiB0b0FkZDsKKyAgICAgICAgICAgIGZvciAoUmVs
YXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAgICAg
UmVsYXRpb25zaGlwIG5ld1JlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcDsKKyAgICAgICAgICAg
ICAgICAvLyBBdm9pZCBjcmVhdGluZyBhbnkga2luZCBvZiBzZWxmLXJlbGF0aW9uc2hpcC4KKyAg
ICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5ub2RlKCkgPT0gbmV3UmVsYXRpb25zaGlwLnJpZ2h0
KCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBuZXdSZWxhdGlvbnNoaXAuc2V0TGVmdChuZXdOb2RlKTsKKyAgICAgICAgICAgICAgICB0b0Fk
ZC5hcHBlbmQobmV3UmVsYXRpb25zaGlwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAoUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IHRvQWRkKQorICAgICAgICAgICAgICAgIHNl
dFJlbGF0aW9uc2hpcChyZWxhdGlvbnNoaXApOworICAgICAgICB9CisgICAgfQorICAgICAgICAg
ICAgCiAgICAgdm9pZCBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCwg
dW5zaWduZWQgdGltZVRvTGl2ZSA9IDEpCiAgICAgewogICAgICAgICBzZXRSZWxhdGlvbnNoaXAo
bV9yZWxhdGlvbnNoaXBzLCByZWxhdGlvbnNoaXAsIHRpbWVUb0xpdmUpOwpAQCAtMTY2OSw3ICsx
NjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChtX3NlZW5CbG9ja3MuYWRk
KHRhcmdldCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgYmxvY2suIFdlIGNvcHkg
c3ViamVjdCB0byBsaXZlbmVzcyBwcnVuaW5nLgotICAgICAgICAgICAgYXV0byBpc0xpdmUgPSBb
Jl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgIGF1dG8gaXNMaXZlID0gWyZdIChOb2RlRmxv
d1Byb2plY3Rpb24gbm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChub2RlID09IG1femVybykK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRhcmdldC0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKG5vZGUpOwpAQCAtMTcwMSw3ICsxNzE1
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gYXNzaWduZWQgd291bGQgb25seSBoYXBwZW4gaWYg
d2UgaGF2ZSBub3QgcHJvY2Vzc2VkIHRoZSBub2RlJ3MgcHJlZGVjZXNzb3IuIFdlCiAgICAgICAg
IC8vIHNob3VsZG4ndCBwcm9jZXNzIGJsb2NrcyB1bnRpbCB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUg
YmxvY2sncyBwcmVkZWNlc3NvciBiZWNhdXNlIHdlCiAgICAgICAgIC8vIGFyZSB1c2luZyByZXZl
cnNlIHBvc3RvcmRlci4KLSAgICAgICAgVmVjdG9yPE5vZGUqPiB0b1JlbW92ZTsKKyAgICAgICAg
VmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4gdG9SZW1vdmU7CiAgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9yZWxhdGlvbnNoaXBzQXRI
ZWFkW3RhcmdldF0pIHsKICAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlbGF0aW9uc2hpcE1hcC5m
aW5kKGVudHJ5LmtleSk7CkBAIC0xNzkxLDcgKzE4MDUsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgZW50cnkudmFsdWUgPSBtZXJnZWRSZWxhdGlvbnNoaXBzOwogICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDogdG9SZW1vdmUp
CisgICAgICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiB0b1JlbW92ZSkKICAgICAg
ICAgICAgIG1fcmVsYXRpb25zaGlwc0F0SGVhZFt0YXJnZXRdLnJlbW92ZShub2RlKTsKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24g
MjA4MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJE
RkdCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgor
I2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5j
bHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKQEAgLTQ0LDEw
ICs0NSwxMiBAQCBwdWJsaWM6CiAgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFw
aCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKICAgICAgICAg
LCBtX2RpcnR5QmxvY2tzKG1fZ3JhcGgubnVtQmxvY2tzKCkpCisgICAgICAgICwgbV9pbmRleGlu
ZygqbV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUpCiAgICAgICAgICwgbV9saXZlQXRIZWFkKG1fZ3Jh
cGgpCiAgICAgICAgICwgbV9saXZlQXRUYWlsKG1fZ3JhcGgpCi0gICAgICAgICwgbV93b3Jrc2V0
KGdyYXBoLm1heE5vZGVDb3VudCgpIC0gMSkKICAgICB7CisgICAgICAgIG1fZ3JhcGgubV9pbmRl
eGluZ0NhY2hlLT5yZWNvbXB1dGUoKTsKKyAgICAgICAgbV93b3Jrc2V0ID0gc3RkOjptYWtlX3Vu
aXF1ZTxJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4+KG1fZ3JhcGgubV9pbmRl
eGluZ0NhY2hlLT5udW1JbmRpY2VzKCkpOwogICAgIH0KIAogICAgIGJvb2wgcnVuKCkKQEAgLTgw
LDIwICs4MywyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRIZWFkSW5kaWNlcyA9
IG1fbGl2ZUF0SGVhZFtibG9ja0luZGV4XTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+
JiBsaXZlQXRIZWFkID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKKyAgICAgICAgICAgICAgICBj
b25zdCBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPiYKKyAgICAg
ICAgICAgICAgICAgICAgbGl2ZUF0SGVhZEluZGljZXMgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRl
eF07CisgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmVBdEhl
YWQgPSBibG9jay0+c3NhLT5saXZlQXRIZWFkOwogICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQu
cmVzaXplKDApOwogICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxp
dmVBdEhlYWRJbmRpY2VzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA6IGxpdmVBdEhlYWRJbmRpY2VzKQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFk
LnVuY2hlY2tlZEFwcGVuZChtX2dyYXBoLm5vZGVBdChpbmRleCkpOworICAgICAgICAgICAgICAg
ICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVuZChtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9u
KGluZGV4KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgYXV0byYgbGl2ZUF0VGFpbEluZGljZXMgPSBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF07
Ci0gICAgICAgICAgICAgICAgVmVjdG9yPE5vZGUqPiYgbGl2ZUF0VGFpbCA9IGJsb2NrLT5zc2Et
PmxpdmVBdFRhaWw7CisgICAgICAgICAgICAgICAgY29uc3QgSGFzaFNldDx1bnNpZ25lZCwgRGVm
YXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVuc2lnbmVkPj4mCisgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWxJbmRpY2VzID0g
bV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdOworICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlRmxv
d1Byb2plY3Rpb24+JiBsaXZlQXRUYWlsID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKICAgICAg
ICAgICAgICAgICBsaXZlQXRUYWlsLnJlc2l6ZSgwKTsKICAgICAgICAgICAgICAgICBsaXZlQXRU
YWlsLnJlc2VydmVDYXBhY2l0eShsaXZlQXRUYWlsSW5kaWNlcy5zaXplKCkpOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF0pCi0g
ICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwudW5jaGVja2VkQXBwZW5kKG1fZ3JhcGgubm9k
ZUF0KGluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwudW5jaGVja2VkQXBw
ZW5kKG1faW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCkBAIC0xMDYsNjcgKzExMSw1NiBAQCBwcml2YXRlOgogICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UoYmxvY2ssICJPbmx5IGRpcnR5IGJsb2NrcyBuZWVkcyB1cGRhdGVzLiBBIG51
bGwgYmxvY2sgc2hvdWxkIG5ldmVyIGJlIGRpcnR5LiIpOwogCi0gICAgICAgIG1fd29ya3NldC5j
bGVhcigpOworICAgICAgICBtX3dvcmtzZXQtPmNsZWFyKCk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggOiBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF0pCi0gICAgICAgICAgICBtX3dvcmtz
ZXQuYWRkKGluZGV4KTsKKyAgICAgICAgICAgIG1fd29ya3NldC0+YWRkKGluZGV4KTsKIAogICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0t
OykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogCi0g
ICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgotICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBAbiBhbmQgdXNlcyBAeC4KLSAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAvLyBHaXZlbiBhIFBoaToKLSAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICAvLyAgICBwOiBQaGkoKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdl
IHNheSBub3RoaW5nLiBJdCdzIG5laXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToKLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAvLyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykKLSAgICAgICAgICAgIC8vCi0gICAgICAg
ICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBhbmQgdXNlcyBAYSwgQGIsIEBjLgotICAg
ICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAg
IGNhc2UgVXBzaWxvbjogewotICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1f
d29ya3NldC5jb250YWlucyhub2RlLT5pbmRleCgpKSwgIlVwc2lsb24gc2hvdWxkIG5vdCBiZSB1
c2VkIGFzIGRlZnMgYnkgb3RoZXIgbm9kZXMuIik7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghbV93b3Jrc2V0LT5jb250YWlucyhub2RlLT5pbmRleCgpKSwgIlVwc2lsb24g
c2hvdWxkIG5vdCBiZSB1c2VkIGFzIGRlZnMgYnkgb3RoZXIgbm9kZXMuIik7CiAKICAgICAgICAg
ICAgICAgICBOb2RlKiBwaGkgPSBub2RlLT5waGkoKTsKLSAgICAgICAgICAgICAgICBtX3dvcmtz
ZXQucmVtb3ZlKHBoaS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICAgICAgbV93b3Jrc2V0LmFkZChu
b2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5yZW1v
dmUobV9pbmRleGluZy5zaGFkb3dJbmRleChwaGkpKTsKKyAgICAgICAgICAgICAgICBtX3dvcmtz
ZXQtPmFkZChtX2luZGV4aW5nLmluZGV4KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQaGk6IHsK
KyAgICAgICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5nLmluZGV4KG5vZGUp
KTsKKyAgICAgICAgICAgICAgICBtX3dvcmtzZXQtPmFkZChtX2luZGV4aW5nLnNoYWRvd0luZGV4
KG5vZGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShub2RlLT5pbmRl
eCgpKTsKLSAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBu
b2RlLCBhZGRDaGlsZFVzZSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5yZW1vdmUobV9p
bmRleGluZy5pbmRleChub2RlKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRy
ZW4oCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIFsmXSAoRWRnZSYgZWRnZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBuZXdFbnRyeSA9IG1fd29ya3NldC0+YWRkKG1faW5kZXhp
bmcuaW5kZXgoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0
S2lsbFN0YXR1cyhuZXdFbnRyeSA/IERvZXNLaWxsIDogRG9lc05vdEtpbGwpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFVwZGF0ZSBsaXZlIGF0IGhlYWQuCi0gICAgICAgIGF1dG8m
IGxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF07Ci0gICAgICAgIGlmIChtX3dv
cmtzZXQuc2l6ZSgpID09IGxpdmVBdEhlYWQuc2l6ZSgpKQorICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPiYgbGl2ZUF0SGVhZCA9IG1fbGl2ZUF0SGVh
ZFtibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKG1fd29ya3NldC0+c2l6ZSgpID09IGxpdmVBdEhl
YWQuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgbGl2ZUluZGV4QXRIZWFkIDogbGl2ZUF0SGVhZCkKLSAgICAgICAgICAgIG1fd29ya3Nl
dC5yZW1vdmUobGl2ZUluZGV4QXRIZWFkKTsKLSAgICAgICAgQVNTRVJUKCFtX3dvcmtzZXQuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKGxpdmVJbmRleEF0SGVhZCk7
CisgICAgICAgIEFTU0VSVCghbV93b3Jrc2V0LT5pc0VtcHR5KCkpOwogCi0gICAgICAgIGxpdmVB
dEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0LnNpemUo
KSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbmV3VmFsdWUgOiBtX3dvcmtzZXQpCisgICAgICAg
IGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0
LT5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogKm1fd29ya3NldCkK
ICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG5ld1ZhbHVlKTsKIAogICAg
ICAgICBib29sIGNoYW5nZWRQcmVkZWNlc3NvciA9IGZhbHNlOwogICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycykgewotICAgICAgICAgICAg
YXV0byYgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0KSB7CisgICAgICAgICAgICBIYXNo
U2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiYKKyAgICAgICAgICAgICAgICBsaXZlQXRU
YWlsID0gbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbmV3VmFsdWUgOiAqbV93b3Jrc2V0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVBdFRh
aWwuYWRkKG5ld1ZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZGlydHlCbG9j
a3MucXVpY2tTZXQocHJlZGVjZXNzb3ItPmluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWRQcmVkZWNlc3NvciA9IHRydWU7CkBAIC0xNzYsMjEgKzE3MCwxNyBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gY2hhbmdlZFByZWRlY2Vzc29yOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhZGRDaGlsZFVzZShOb2RlKiwgRWRnZSYgZWRnZSkKLSAgICB7Ci0gICAg
ICAgIGJvb2wgbmV3RW50cnkgPSBtX3dvcmtzZXQuYWRkKGVkZ2UtPmluZGV4KCkpOwotICAgICAg
ICBlZGdlLnNldEtpbGxTdGF0dXMobmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsK
LSAgICB9Ci0KICAgICAvLyBCbG9ja3Mgd2l0aCBuZXcgbGl2ZSB2YWx1ZXMgYXQgdGFpbC4KICAg
ICBCaXRWZWN0b3IgbV9kaXJ0eUJsb2NrczsKKyAgICAKKyAgICBGbG93SW5kZXhpbmcmIG1faW5k
ZXhpbmc7CiAKICAgICAvLyBMaXZlIHZhbHVlcyBwZXIgYmxvY2sgZWRnZS4KICAgICBCbG9ja01h
cDxWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPj4gbV9saXZlQXRI
ZWFkOwogICAgIEJsb2NrTWFwPEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVk
Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+PiBt
X2xpdmVBdFRhaWw7CiAKICAgICAvLyBTaW5nbGUgc3BhcnNlIHNldCBhbGxvY2F0ZWQgb25jZSBh
bmQgdXNlZCBieSBldmVyeSBiYXNpYyBibG9jay4KLSAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV93b3Jrc2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmRleFNwYXJz
ZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4+IG1fd29ya3NldDsKIH07CiAKIGJvb2wgcGVyZm9y
bUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYwLDE1ICsyNTYwLDE4IEBAIHB1Ymxp
YzoKICAgICBCYXNpY0Jsb2NrKiBvd25lcjsKIH07CiAKLWlubGluZSBib29sIG5vZGVDb21wYXJh
dG9yKE5vZGUqIGEsIE5vZGUqIGIpCi17Ci0gICAgcmV0dXJuIGEtPmluZGV4KCkgPCBiLT5pbmRl
eCgpOwotfQorc3RydWN0IE5vZGVDb21wYXJhdG9yIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBO
b2RlUHRyVHlwZT4KKyAgICBib29sIG9wZXJhdG9yKCkoTm9kZVB0clR5cGUgYSwgTm9kZVB0clR5
cGUgYikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhLT5pbmRleCgpIDwgYi0+aW5kZXgo
KTsKKyAgICB9Cit9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQ1N0cmluZyBub2RlTGlzdER1
bXAoY29uc3QgVCYgbm9kZUxpc3QpCiB7Ci0gICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVM
aXN0LCBub2RlQ29tcGFyYXRvcik7CisgICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVMaXN0
LCBOb2RlQ29tcGFyYXRvcigpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTI1Nzks
NyArMjU4Miw3IEBAIENTdHJpbmcgbm9kZU1hcER1bXAoY29uc3QgVCYgbm9kZU1hcCwgRHUKICAg
ICAgICAgdHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVNYXAuYmVnaW4oKTsK
ICAgICAgICAgaXRlciAhPSBub2RlTWFwLmVuZCgpOyArK2l0ZXIpCiAgICAgICAgIGtleXMuYXBw
ZW5kKGl0ZXItPmtleSk7Ci0gICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSwg
bm9kZUNvbXBhcmF0b3IpOworICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCks
IE5vZGVDb21wYXJhdG9yKCkpOwogICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKICAgICBDb21t
YVByaW50ZXIgY29tbWE7CiAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkKQEAgLTI1OTMsNyArMjU5Niw3IEBAIENTdHJpbmcgbm9kZVZhbHVlUGFpckxpc3REdW1w
KGNvbnN0IFQmIG4KICAgICB1c2luZyBWID0gdHlwZW5hbWUgVDo6VmFsdWVUeXBlOwogICAgIFQg
c29ydGVkTGlzdCA9IG5vZGVWYWx1ZVBhaXJMaXN0OwogICAgIHN0ZDo6c29ydChzb3J0ZWRMaXN0
LmJlZ2luKCksIHNvcnRlZExpc3QuZW5kKCksIFtdKGNvbnN0IFYmIGEsIGNvbnN0IFYmIGIpIHsK
LSAgICAgICAgcmV0dXJuIG5vZGVDb21wYXJhdG9yKGEubm9kZSwgYi5ub2RlKTsKKyAgICAgICAg
cmV0dXJuIE5vZGVDb21wYXJhdG9yKCkoYS5ub2RlLCBiLm5vZGUpOwogICAgIH0pOwogCiAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
Tm9kZUFic3RyYWN0VmFsdWVQYWlyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChub2RlLCAiPT4i
LCB2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVB
YnN0cmFjdFZhbHVlUGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IE5vZGVBYnN0cmFj
dFZhbHVlUGFpciB7CisgICAgTm9kZUFic3RyYWN0VmFsdWVQYWlyKCkgeyB9CisgICAgCisgICAg
Tm9kZUFic3RyYWN0VmFsdWVQYWlyKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBjb25zdCBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBub2RlKG5vZGUpCisgICAgICAgICwgdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3Q7CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGU7CisgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVGbG93UHJvamVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1By
b2plY3Rpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgTm9kZUZsb3dQcm9qZWN0aW9uOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIi0i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoa2luZCgpID09IFByaW1hcnkpIHsK
KyAgICAgICAgb3V0LnByaW50KG5vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
b3V0LnByaW50KCJzaGFkb3coIiwgbm9kZSgpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTm9kZUZsb3dQcm9q
ZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBQcmltYXJ5LAorICAg
ICAgICBTaGFkb3cKKyAgICB9OworICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbigpIHsgfQor
ICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbihOb2RlKiBub2RlKQorICAgICAgICA6IG1fd29y
ZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IE5vZGVGbG93UHJvamVjdGlvbihOb2RlKiBub2RlLCBLaW5kIGtpbmQpCisgICAgICAgIDogbV93
b3JkKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIHwgKGtpbmQgPT0gU2hhZG93ID8gc2hh
ZG93Qml0IDogMCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24o
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fd29yZChzaGFkb3dC
aXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX3dvcmQ7IH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiAobV93b3JkICYgc2hhZG93Qml0KSA/IFNoYWRvdyA6IFByaW1hcnk7IH0KKyAgICAKKyAg
ICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX3dvcmQg
JiB+c2hhZG93Qml0KTsgfQorICAgIAorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpub2RlKCk7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbm9k
ZSgpOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV93b3JkOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oTm9kZUZsb3dQ
cm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd29yZCA9PSBv
dGhlci5tX3dvcmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShOb2RlRmxvd1By
b2plY3Rpb24gb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KE5vZGVGbG93UHJvamVjdGlv
biBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGtpbmQoKSA8IG90aGVyLmtpbmQoKTsKKyAgICAgICAgcmV0
dXJuIG5vZGUoKSA8IG90aGVyLm5vZGUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj4oTm9kZUZsb3dQcm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG90aGVyIDwgKnRoaXM7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8PShOb2RlRmxv
d1Byb2plY3Rpb24gb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA+
IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KE5vZGVGbG93UHJvamVj
dGlvbiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzIDwgb3RoZXIp
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBOb2RlRmxvd1Byb2plY3Rpb24oV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKyAgICAKKyAgICAvLyBQaGkgc2hhZG93IHBy
b2plY3Rpb25zIGNhbiBiZWNvbWUgaW52YWxpZCBiZWNhdXNlIHRoZSBQaGkgbWlnaHQgYmUgZm9s
ZGVkIHRvIHNvbWV0aGluZyBlbHNlLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAqdGhpcyAmJiAoa2luZCgpID09IFByaW1hcnkgfHwgbm9kZSgp
LT5vcCgpID09IFBoaSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZv
aWQgZm9yRWFjaChOb2RlKiBub2RlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAg
ZnVuYyhOb2RlRmxvd1Byb2plY3Rpb24obm9kZSkpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBQaGkpCisgICAgICAgICAgICBmdW5jKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBTaGFkb3cp
KTsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBzaGFk
b3dCaXQgPSAxOworICAgIAorICAgIHVpbnRwdHJfdCBtX3dvcmQgeyAwIH07Cit9OworCitzdHJ1
Y3QgTm9kZUZsb3dQcm9qZWN0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goTm9k
ZUZsb3dQcm9qZWN0aW9uIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKE5vZGVGbG93UHJvamVjdGlvbiBhLCBOb2RlRmxvd1Byb2plY3Rpb24gYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNo
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6Ok5vZGVGbG93UHJvamVj
dGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbkhhc2ggSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiA6IFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI2LDExICsxMjYsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAv
LyBDb25zdHJ1Y3QgdGhlIHN0YXRlLWF0LXRhaWwgYmFzZWQgb24gdGhlIGVwb2NocyBvZiBsaXZl
IG5vZGVzIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBlcG9jaC4gV2Ug
Z3JvdyBzdGF0ZS1hdC10YWlsIG1vbm90b25pY2FsbHkgdG8gZW5zdXJlIGNvbnZlcmdlbmNlLgog
ICAgICAgICAgICAgICAgICAgICBib29sIHRoaXNCbG9ja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCkg
eworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogYmxv
Y2stPnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
a2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmVw
b2NoKCkgIT0gbV9jdXJyZW50RXBvY2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgbm9kZSBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IGVwb2NoLCB0aGVuIHdlIG1h
eSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVuIGEgYmFycmllciBv
biBpdCBpbiB0aGUgZnV0dXJlLiBTbywgYWRkIGl0IHRvIHRoZSBzdGF0ZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3RhdGVBdFRhaWwtPmF0KGJs
b2NrKS5hZGQobm9kZSkuaXNOZXdFbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3RhdGVBdFRhaWwtPmF0KGJsb2NrKS5hZGQobm9kZS5ub2Rl
KCkpLmlzTmV3RW50cnk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNzgsOCArMTgwLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgbV9zdGF0ZS0+
YmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkgewotICAgICAgICAgICAgICAgIGlm
IChtX3N0YXRlQXRIZWFkLT5hdChibG9jaykuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAg
IGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUua2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0ZUF0SGVhZC0+YXQoYmxvY2spLmNvbnRhaW5zKG5vZGUubm9kZSgpKSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2aW91cyBibG9ja3MgdGVsbCB1cyB0aGF0IHRoaXMg
bm9kZSBtYXkgbmVlZCBhIGJhcnJpZXIgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIGZ1
dHVyZSwgdGhlbiBwdXQgaXQgaW4gdGhlIGFuY2llbnQgcHJpbW9yZGlhbCBlcG9jaC4gVGhpcyBm
b3JjZXMgdXMgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gZW1pdCBhIGJhcnJpZXIgb24gYW55
IHBvc3NpYmx5LWNlbGwgc3RvcmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVwb2NoIG9mIHRoZQpAQCAt
MzI2LDcgKzMzMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFVwc2lsb246Ci0gICAgICAgICAgICAgICAgbV9u
b2RlLT5waGkoKS0+c2V0RXBvY2gobV9ub2RlLT5lcG9jaCgpKTsKKyAgICAgICAgICAgICAgICAv
LyBBc3N1bWUgdGhlIHdvcnN0IGZvciBQaGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCBQaGkgc2hhZG93cy4KKyAgICAgICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRF
cG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIwODMzOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTYtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBERkcgcGxheXMgZmFzdCBhbmQgbG9vc2Ugd2l0aCB0aGUgc2hhZG93IHZhbHVl
cyBvZiBhIFBoaQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBNYWRlIHRoaXMgQVBJIHVzZSBzaXplIHJhdGhlciB0aGFuIG1heEluZGV4IGFz
IGl0cyBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIsIGJlY2F1c2UgdGhhdCdzCisgICAgICAgIGxl
c3MgY29uZnVzaW5nLgorCisgICAgICAgICogd3RmL0luZGV4U3BhcnNlU2V0Lmg6CisgICAgICAg
IChXVEY6OkluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KToK
KwogMjAxNi0xMS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgaW4gYSB0aHJlYWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4
U3BhcnNlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQu
aAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIgPSBDcmFzCiBjbGFzcyBJbmRleFNwYXJzZVNldCB7CiAgICAgdHlwZWRlZiBWZWN0
b3I8dW5zaWduZWQsIDAsIE92ZXJmbG93SGFuZGxlcj4gVmFsdWVMaXN0OwogcHVibGljOgotICAg
IGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIG1heFZhbHVlKTsKKyAgICBleHBsaWNp
dCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBzaXplKTsKIAogICAgIGJvb2wgYWRkKHVuc2lnbmVk
KTsKICAgICBib29sIHJlbW92ZSh1bnNpZ25lZCk7CkBAIC02NSw5ICs2NSw5IEBAIHByaXZhdGU6
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUgSW5kZXhT
cGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4VmFs
dWUpCitpbmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VT
ZXQodW5zaWduZWQgc2l6ZSkKIHsKLSAgICBtX21hcC5yZXNpemUobWF4VmFsdWUgKyAxKTsKKyAg
ICBtX21hcC5yZXNpemUoc2l6ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293829</attachid>
            <date>2016-11-03 16:55:47 -0700</date>
            <delta_ts>2016-11-03 17:43:44 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82125</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzMzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIHBsYXlzIGZhc3QgYW5kIGxvb3NlIHdpdGggdGhlIHNoYWRvdyB2
YWx1ZXMgb2YgYSBQaGkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDMwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB3aHkgdGhlIERGRyBuZWVkcyB0
byByZWNvZ25pemUgdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBoaS4KKworICAgICAgICAqIHN0cmVz
cy9kZmctc3NhLXN3YXAuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNi0xMS0wMyAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc2tpbmcgZm9yIGEg
dmFsdWUgcHJvZmlsZSBwcmVkaWN0aW9uIHNob3VsZCBiZSBkZWZlbnNpdmUgYWdhaW5zdCBub3Qg
ZmluZGluZyBhIHZhbHVlIHByb2ZpbGUKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy1zc2Etc3dh
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3NhLXN3YXAuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLXNzYS1zd2FwLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOCBAQAordmFyIGksYz0wOworZnVuY3Rpb24gZm9vKCkKK3sKKyAgICB2YXIg
YT0xLGI7Zm9yKGk9MDtpPDI7KytpKXtbYSxiXT1bYixhXTtjKyt9aWYoIWFeYil0aHJvdyBjCit9
Citub0lubGluZShmb28pOworZm9yKHZhciBrID0gMDsgayA8IDEwMDAwOyArK2spCisgICAgZm9v
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
NCBAQAorMjAxNi0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBwbGF5cyBmYXN0IGFuZCBsb29zZSB3aXRoIHRoZSBzaGFkb3cgdmFsdWVzIG9mIGEg
UGhpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQz
MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIE9oIGJveSwgd2hhdCBhbiBlbWJhcnJhc3NpbmcgbWlzdGFrZSEgVGhlIHN0eWxlIG9mIFNT
QSBJIGxpa2UgdG8gdXNlIGF2b2lkcyBibG9jay92YWx1ZQorICAgICAgICB0dXBsZXMgYXMgcGFy
YW1ldGVycyBvZiBhIFBoaSwgdGhlcmVieSBzaW1wbGlmeWluZyBDRkcgdHJhbnNmb3JtYXRpb25z
IGFuZCBtYWtpbmcgUGhpIGxhcmdlbHkKKyAgICAgICAgbm90IGEgc3BlY2lhbCBjYXNlIGZvciBt
b3N0IGNvbXBpbGVyIHRyYW5zZm9ybXMuIEl0IGRvZXMgdGhpcyBieSBpbnRyb2R1Y2luZyBhbm90
aGVyIHZhbHVlCisgICAgICAgIGNhbGxlZCBVcHNpbG9uLCB3aGljaCBzdG9yZXMgYSB2YWx1ZSBp
bnRvIHNvbWUgUGhpLgorICAgICAgICAKKyAgICAgICAgQjMgdXNlcyB0aGlzIGFsc28uIFRoZSBl
YXNpZXN0IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgVXBzaWxvbi9QaGkgYmVoYXZlIGxpa2UgaXMg
dG8gbG9vayBhdAorICAgICAgICB0aGUgQjMtPkFpciBsb3dlcmluZy4gQWlyIGlzIG5vdCBTU0Eg
LSBpdCBoYXMgVG1wcyB0aGF0IHlvdSBjYW4gYXNzaWduIHRvIGFuZCB1c2UgYXMgbWFueQorICAg
ICAgICB0aW1lcyBhcyB5b3UgbGlrZS4gQjMgYWxsb2NhdGVzIG9uZSBUbXAgcGVyIFZhbHVlLCBh
bmQgYW4gZXh0cmEgInBoaVRtcCIgZm9yIFBoaXMsIHNvIHRoYXQKKyAgICAgICAgUGhpcyBnZXQg
dHdvIFRtcHMgdG90YWwuIFVwc2lsb24gc3RvcmVzIHRoZSB2YWx1ZSBpbnRvIHRoZSBwaGlUbXAg
b2YgdGhlIFBoaSwgd2hpbGUgUGhpIG1vdmVzCisgICAgICAgIHRoZSB2YWx1ZSBmcm9tIGl0cyBw
aGlUbXAgdG8gaXRzIHRtcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRv
IHN1cHBvcnQgc2NlbmFyaW9zIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAgICAgICBhOiBQ
aGkoKQorICAgICAgICAgICAgYjogVXBzaWxvbihAeCwgXmEpCisgICAgICAgICAgICBjOiBVc2Uo
QGEpCisgICAgICAgIAorICAgICAgICBIZXJlLCB3ZSB3YW50IEBjIHRvIHNlZSBAYSdzIHZhbHVl
IGJlZm9yZSBAYi4gVGhhdCdzIGEgdmVyeSBiYXNpYyByZXF1aXJlbWVudCBvZiBTU0E6IHRoYXQK
KyAgICAgICAgdGhlIGEgdmFsdWUgKGxpa2UgQGEpIGRvZXNuJ3QgY2hhbmdlIGR1cmluZyBpdHMg
bGlmZXRpbWUuCisgICAgICAgIAorICAgICAgICBVbmZvcnR1bmF0ZWx5LCBERkcnYSBsaXZlbmVz
cyBhbmFseXNpcywgYWJzdHJhY3QgaW50ZXJwcmV0ZXIsIGFuZCBpbnRlZ2VyIHJhbmdlIG9wdGlt
aXphdGlvbgorICAgICAgICBhbGwgZmFpbGVkIHRvIGNvcnJlY3RseSBtb2RlbCBVcHNpbG9uL1Bo
aSB0aGlzIHdheS4gVGhleSB3b3VsZCBhc3N1bWUgdGhhdCBpdCdzIGFjY3VyYXRlIHRvCisgICAg
ICAgIG1vZGVsIHRoZSBVcHNpbG9uIGFzIHN0b3JpbmcgaW50byB0aGUgUGhpIGRpcmVjdGx5Lgor
ICAgICAgICAKKyAgICAgICAgQmVjYXVzZSBERkcgZG9lcyBmbG93IGFuYWx5c2lzIG92ZXIgU1NB
LCBtYWtpbmcgaXQgY29ycmVjdCBtZWFucyBlbmFibGluZyBpdCB0byBzcGVhayBvZiB0aGUKKyAg
ICAgICAgc2hhZG93IHZhbHVlLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5
IGludHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIGEKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9u
LiBUaGlzIGlzIGEga2V5IHRoYXQgbGV0cyB1cyBzcGVhayBvZiBib3RoIGEgTm9kZSdzIHByaW1h
cnkgdmFsdWUgYW5kIGl0cworICAgICAgICBvcHRpb25hbCAic2hhZG93IiB2YWx1ZS4gTGl2ZW5l
c3MsIEFJLCBhbmQgaW50ZWdlciByYW5nZSBhcmUgbm93IGtleWVkIGJ5IE5vZGVGbG93UHJvamVj
dGlvbgorICAgICAgICByYXRoZXIgdGhhbiBOb2RlKi4gQ29uY2VwdHVhbGx5IHRoaXMgdHVybnMg
b3V0IHRvIGJlIGEgdmVyeSBzaW1wbGUgY2hhbmdlLCBidXQgaXQgZG9lcyB0b3VjaAorICAgICAg
ICBhIGdvb2QgYW1vdW50IG9mIGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGIzL2Fpci9BaXJMaXZlbmVzcy5oOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBMaXZl
bmVzc0FkYXB0ZXI6Om51bUluZGljZXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Ns
b3RMaXZlbmVzc0FkYXB0ZXI6Om51bUluZGljZXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdMaXZlbmVzc0FkYXB0ZXI6Om51bUluZGljZXMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
YnN0cmFjdExpdmVuZXNzOjpBYnN0cmFjdExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6VG1wTGl2ZW5lc3NBZGFwdGVyOjptYXhJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlN0YWNrU2xvdExpdmVuZXNzQWRhcHRlcjo6bWF4SW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpSZWdMaXZlbmVzc0FkYXB0ZXI6Om1heEluZGV4KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OmZvck5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZv
ckFsbFZhbHVlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0
YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVW
YWx1ZUZvck5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmZv
ck5vZGUpOgorICAgICAgICAqIGRmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmg6CisgICAgICAg
ICogZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQ29tYmluZWRMaXZlbmVz
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6bGl2ZU5vZGVzQXRIZWFkKToKKyAgICAgICAgKiBk
ZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oOgorICAgICAgICAqIGRmZy9ERkdGbG93SW5kZXhpbmcu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OkZsb3dJbmRleGlu
Zyk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjp+Rmxvd0luZGV4aW5nKToKKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OnJlY29tcHV0ZSk6CisgICAgICAgICogZGZn
L0RGR0Zsb3dJbmRleGluZy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhp
bmc6OmdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6Om51bUluZGljZXMp
OgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6aW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OkZsb3dJbmRleGluZzo6c2hhZG93SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OkZs
b3dJbmRleGluZzo6bm9kZVByb2plY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdGbG93TWFwLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkZsb3dNYXA6OkZsb3dNYXApOgorICAgICAgICAo
SlNDOjpERkc6OkZsb3dNYXA6OnJlc2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6
Z3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dNYXA6OmF0KToKKyAgICAgICAgKEpTQzo6
REZHOjpGbG93TWFwOjphdFNoYWRvdyk6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Okdy
YXBoKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6YWJzdHJhY3RWYWx1ZXNDYWNoZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RT
dGF0ZTo6SW5QbGFjZUFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VB
YnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OnNldExp
dmVWYWx1ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjplbmRC
YXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVy
Z2UpOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpjcmVhdGVWYWx1ZUZvck5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAgICAgICAg
KiBkZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVu
ZXNzQW5hbHlzaXNQaGFzZTo6TGl2ZW5lc3NBbmFseXNpc1BoYXNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6TGl2
ZW5lc3NBbmFseXNpc1BoYXNlOjpwcm9jZXNzQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6Okxp
dmVuZXNzQW5hbHlzaXNQaGFzZTo6YWRkQ2hpbGRVc2UpOiBEZWxldGVkLgorICAgICAgICAqIGRm
Zy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUNvbXBhcmF0b3I6Om9wZXJhdG9y
KCkpOgorICAgICAgICAoSlNDOjpERkc6Om5vZGVMaXN0RHVtcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6bm9kZU1hcER1bXApOgorICAgICAgICAoSlNDOjpERkc6Om5vZGVWYWx1ZVBhaXJMaXN0RHVt
cCk6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZUNvbXBhcmF0b3IpOiBEZWxldGVkLgorICAgICAg
ICAqIGRmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlQWJzdHJhY3RWYWx1ZVBhaXI6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdO
b2RlQWJzdHJhY3RWYWx1ZVBhaXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUFi
c3RyYWN0VmFsdWVQYWlyOjpOb2RlQWJzdHJhY3RWYWx1ZVBhaXIpOgorICAgICAgICAqIGRmZy9E
RkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Rmxvd1Byb2plY3Rpb246OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdOb2RlRmxvd1Byb2plY3Rp
b24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpOb2Rl
Rmxvd1Byb2plY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6
b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpr
aW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3IqKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJhdG9yLT4pOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxv
d1Byb2plY3Rpb246Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJv
amVjdGlvbjo6b3BlcmF0b3I8KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rp
b246Om9wZXJhdG9yPik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpv
cGVyYXRvcjw9KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJh
dG9yPj0pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6
aXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246OmZv
ckVhY2gpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbkhhc2g6Omhhc2gp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbkhhc2g6OmVxdWFsKToKKyAg
ICAgICAgKiBkZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwOgorCiAyMDE2LTEx
LTAzICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIGNoYW5nZWxvZyBmaXggZHVlIHRvIGZhaWxlZCBnaXQgcmViYXNlLi4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwODMzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzEy
LDYgKzMxMiw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0ZhaWxl
ZEZpbmFsaXplci5jcHAKICAgICBkZmcvREZHRmluYWxpemVyLmNwcAogICAgIGRmZy9ERkdGaXh1
cFBoYXNlLmNwcAorICAgIGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwCiAgICAgZGZnL0RGR0ZsdXNo
Rm9ybWF0LmNwcAogICAgIGRmZy9ERkdGbHVzaGVkQXQuY3BwCiAgICAgZGZnL0RGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwCkBAIC0zNDMsNyArMzQ0LDkgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3Bw
CiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAKICAgICBkZmcvREZHTm9kZS5jcHAKKyAgICBk
ZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3Bw
CisgICAgZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAKICAgICBkZmcvREZHTm9kZU9yaWdp
bi5jcHAKICAgICBkZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5jcHAKICAgICBk
ZmcvREZHT1NSRW50cnkuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMjA4MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEyOSw2ICsxMjksMTMg
QEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1
MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNB
NjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IH07CiAJCTBGMUZFNTFD
MTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0
UmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEYyMDE3N0YxRENBREMzMzAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc3RDFEQ0FEQzMw
MDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCAqLzsgfTsKKwkJMEYyMDE3ODAxRENBREMz
NTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0UxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJ
bmRleGluZy5oICovOyB9OworCQkwRjIwMTc4MjFEQ0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3
ODExRENBREQ0MDAwRUE1OTUwIC8qIERGR0Zsb3dNYXAuaCAqLzsgfTsKKwkJMEYyMDE3ODUxRENB
RTE0OTAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODQxRENBRTE0NzAwRUE1OTUwIC8q
IERGR05vZGVGbG93UHJvamVjdGlvbi5oICovOyB9OworCQkwRjIwMTc4NjFEQ0FFMTRDMDBFQTU5
NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uY3BwICovOyB9OworCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyog
REZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4ODFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9kZUFic3Ry
YWN0VmFsdWVQYWlyLmggKi87IH07CisJCTBGMjAxNzhBMURDQjk0MjYwMEVBNTk1MCAvKiBERkdO
b2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFj
dFZhbHVlUGFpci5jcHAgKi87IH07CiAJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0
dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi87
IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3
OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdGMTRCRUFBODIw
MEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNv
ZGVDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0yNTE3LDYgKzI1MjQsMTMgQEAKIAkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2
IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xvd1BhdGhHZW5lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNBMjFERjAwMEY5
NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0gZGZnL0RGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYx
RkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmNwcDsgcGF0
aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zsb3dJbmRleGluZy5oOyBwYXRoID0gZGZnL0RG
R0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MTFE
Q0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdGbG93TWFwLmg7IHBhdGggPSBkZmcvREZHRmxvd01hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MzFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZs
b3dQcm9qZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R05vZGVGbG93UHJvamVjdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODQxRENBRTE0NzAwRUE1
OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxvd1By
b2plY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMDE3ODcxRENCOTQy
MjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwOyBwYXRo
ID0gZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTm9kZUFic3RyYWN0
VmFsdWVQYWlyLmg7IHBhdGggPSBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjBDMjU4MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0
dWFsUmVnaXN0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmly
dHVhbFJlZ2lzdGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyNzkx
NEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVD
b252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUNv
bnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NzI5LDggKzY3NDMs
NiBAQAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5oICovLAog
CQkJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAvKiBERkdEQ0VQaGFzZS5jcHAgKi8sCiAJCQkJ
MEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmggKi8sCi0JCQkJRTMyMkU1
QTAxREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwICovLAot
CQkJCUUzMjJFNUExMURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1z
LmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlm
aWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJGMDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJ
ZGVudGlmaWVycy5oICovLAogCQkJCTBGRkM5MjEzMUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNp
cmVkSW5mZXJyZWRUeXBlLmggKi8sCkBAIC02NzQ1LDYgKzY3NTcsOCBAQAogCQkJCTBGNUExMjcx
MTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuY3BwICovLAogCQkJCTBGNUExMjcyMTkyRDlG
REYwMDg3NjRBMyAvKiBERkdEb2VzR0MuaCAqLywKIAkJCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNF
NzIgLyogREZHRG9taW5hdG9ycy5oICovLAorCQkJCUUzMjJFNUEwMURBNjQ0MzUwMDZFNzcwOSAv
KiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmNwcCAqLywKKwkJCQlFMzIyRTVBMTFEQTY0NDM1
MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5oICovLAogCQkJCTBGMUUzQTQ0
MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovLAogCQkJCTBGRDND
ODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovLAogCQkJCTBGRDNDODIyMTQx
MTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLywKQEAgLTY3NjEsNiArNjc3NSw5IEBACiAJ
CQkJQTc4QTk3NkYxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oICovLAogCQkJCTBG
MkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJC
REMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovLAorCQkJCTBGMjAxNzdE
MURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovLAorCQkJCTBGMjAxNzdF
MURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLywKKwkJCQkwRjIwMTc4MTFE
Q0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovLAogCQkJCTBGOUQzMzk0MTdGRkM0RTYw
MDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICovLAogCQkJCTBGOUQzMzk1MTdGRkM0RTYwMDcz
QzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJCQlBN0Q4OUNFODE3QTBCOENDMDA3NzNBRDgg
LyogREZHRmx1c2hGb3JtYXQuY3BwICovLApAQCAtNjgyOCw5ICs2ODQ1LDEzIEBACiAJCQkJQTcz
NzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29wcy5oICovLAogCQkJCTBGQjRC
NTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRF
RjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAorCQkJCTBGMjAxNzg3MURDQjk0MjIwMEVBNTk1
MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwICovLAorCQkJCTBGMjAxNzg4MURDQjk0
MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCAqLywKIAkJCQkwRkI0QjUx
RjE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZUFsbG9jYXRvci5oICovLAogCQkJCTBGQTU4MUI3
MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJCTBGQTU4MUI4MTUw
RTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKKwkJCQkwRjIwMTc4MzFEQ0FFMTQ3
MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLywKKwkJCQkwRjIwMTc4NDFE
Q0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggKi8sCiAJCQkJMEY1RDA4
NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3
MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBF
OTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCkBAIC03NjEyLDYgKzc2MzMsNyBAQAog
CQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjMzOERGQTFCRTk2QUE4MDAxM0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjMzOEUxNjFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlu
bGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBE
RkdGbG93TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODU3NjFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNzMwOTMxQzBENjdF
RTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDk4LDYgKzg1
MjAsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3Ry
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNT
dHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4NTFEQ0FFMTQ5MDBFQTU5
NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzU1NUI4
QTFEQUUwM0E1MDBGMzY5MjEgLyogRE9NSklUQ2FsbERPTUdldHRlclBhdGNocG9pbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3MEE0NzFENTQzQThCMDA2RTcyMzIgLyogQ2Vs
bENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCkBAIC04NTk1LDYgKzg2MTgsNyBAQAogCQkJCTE0
MTQ0OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJrZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDJENkYxMjEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0
VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUg
LyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNDBBNDg1MUE5MDUxQUYwMEQ3
M0NDQSAvKiBNYXRoQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzQzBFMTZGNUNE
MDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC04NjYzLDYgKzg2ODcs
NyBAQAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUzQUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3Jk
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUyMjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdO
dWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAw
MEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAx
NzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkExQzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2Ft
cGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFBy
b2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05ODU4LDYgKzk4ODMs
NyBAQAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVs
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3NjIwNDFEQjkyNDI2MDBCN0EyRkQgLyogQ29s
bGVjdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEE3QkVGMUI4Mjk3NUEwMDJE
OTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3OEEx
RENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBBQkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VFRTE0MTg3RjNCQUQwMEU1NUM5OSAvKiBJbnNw
ZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNF
MjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwMDg3
LDYgKzEwMTEzLDcgQEAKIAkJCQkwRjM3MzA4QzFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGls
ZHJlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIy
RjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIwMTc3RjFE
Q0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNzk0RTc1MUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1
bGVBbmFseXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzU1RjM1MjFCN0RDODUzMDBDNTBE
QzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAxODQs
NiArMTAyMTEsNyBAQAogCQkJCUE1RkQwMDY3MTg5QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1
bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwNkQxODlCMDBBQTAwNjMzMjMxIC8q
IFNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA2RjE4OUIwMEFB
MDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAx
Nzg2MURDQUUxNEMwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTVGRDAwN0QxODlCMEI0QzAwNjMzMjMxIC8qIFNjcmlwdENhbGxTdGFja0Zh
Y3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjUxODhFRkZGRDAwMTEwRjE0IC8q
IFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NUQ5M0E1MTg1MDEy
QTgwMDQwMERFRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAy
MDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RydWN0IFRtcExpdmVuZXNzQWRhcHRlciB7
CiAKICAgICBUbXBMaXZlbmVzc0FkYXB0ZXIoQ29kZSYpIHsgfQogCi0gICAgc3RhdGljIHVuc2ln
bmVkIG1heEluZGV4KENvZGUmIGNvZGUpCisgICAgc3RhdGljIHVuc2lnbmVkIG51bUluZGljZXMo
Q29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIG51bVRtcHMgPSBjb2RlLm51bVRt
cHMoYWRhcHRlclR5cGUpOwogICAgICAgICByZXR1cm4gQWJzb2x1dGVUbXBNYXBwZXI8YWRhcHRl
clR5cGU+OjphYnNvbHV0ZUluZGV4KG51bVRtcHMpOwpAQCAtNjUsOSArNjUsOSBAQCBzdHJ1Y3Qg
U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyIHsKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHVu
c2lnbmVkIG1heEluZGV4KENvZGUmIGNvZGUpCisgICAgc3RhdGljIHVuc2lnbmVkIG51bUluZGlj
ZXMoQ29kZSYgY29kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5z
aXplKCkgLSAxOworICAgICAgICByZXR1cm4gY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOwogICAg
IH0KICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzVHlwZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7
IH0KICAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWVUb0luZGV4KFN0YWNrU2xvdCogc3RhY2tTbG90
KSB7IHJldHVybiBzdGFja1Nsb3QtPmluZGV4KCk7IH0KQEAgLTgzLDkgKzgzLDkgQEAgc3RydWN0
IFJlZ0xpdmVuZXNzQWRhcHRlciB7CiAKICAgICBSZWdMaXZlbmVzc0FkYXB0ZXIoQ29kZSYpIHsg
fQogCi0gICAgc3RhdGljIHVuc2lnbmVkIG1heEluZGV4KENvZGUmKQorICAgIHN0YXRpYyB1bnNp
Z25lZCBudW1JbmRpY2VzKENvZGUmKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFJlZzo6bWF4SW5k
ZXgoKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6bWF4SW5kZXgoKSArIDE7CiAgICAgfQogCiAgICAg
c3RhdGljIGJvb2wgYWNjZXB0c1R5cGUoQXJnOjpUeXBlKSB7IHJldHVybiB0cnVlOyB9CkBAIC0x
MDEsNyArMTAxLDcgQEAgcHVibGljOgogICAgIAogICAgIEFic3RyYWN0TGl2ZW5lc3MoQ29kZSYg
Y29kZSkKICAgICAgICAgOiBBZGFwdGVyKGNvZGUpCi0gICAgICAgICwgbV93b3Jrc2V0KEFkYXB0
ZXI6Om1heEluZGV4KGNvZGUpKQorICAgICAgICAsIG1fd29ya3NldChBZGFwdGVyOjpudW1JbmRp
Y2VzKGNvZGUpKQogICAgICAgICAsIG1fbGl2ZUF0SGVhZChjb2RlLnNpemUoKSkKICAgICAgICAg
LCBtX2xpdmVBdFRhaWwoY29kZS5zaXplKCkpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDIw
ODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiREZHQnJhbmNo
RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdOb2RlLmgi
CisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHUGhpQ2hp
bGRyZW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDEsNyArNDIs
NyBAQCBwdWJsaWM6CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcihHcmFwaCYsIEFic3RyYWN0U3Rh
dGVUeXBlJik7CiAgICAgfkFic3RyYWN0SW50ZXJwcmV0ZXIoKTsKICAgICAKLSAgICBBYnN0cmFj
dFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShO
b2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3N0YXRlLmZv
ck5vZGUobm9kZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA4
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODE3LDYgKzI4MTcsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAKICAgICBjYXNlIFBo
aToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKG5vZGUsIE5vZGVG
bG93UHJvamVjdGlvbjo6U2hhZG93KSk7CiAgICAgICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5v
ZGUgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZGVjaWRlZCwgYnV0IGl0IG1heSBoYXZlIGJlY29t
ZSBhCiAgICAgICAgIC8vIGNvbnN0YW50LCBpbiB3aGljaCBjYXNlIHdlJ2QgbGlrZSB0byBrbm93
LgogICAgICAgICBpZiAoZm9yTm9kZShub2RlKS5tX3ZhbHVlKQpAQCAtMjgyNCw4ICsyODI1LDEx
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIAogICAgIGNhc2UgVXBzaWxvbjogewotICAgICAgICBtX3N0YXRlLmNyZWF0
ZVZhbHVlRm9yTm9kZShub2RlLT5waGkoKSk7Ci0gICAgICAgIGZvck5vZGUobm9kZS0+cGhpKCkp
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbiBz
aGFkb3cobm9kZS0+cGhpKCksIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KTsKKyAgICAgICAg
aWYgKHNoYWRvdy5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgbV9zdGF0ZS5jcmVhdGVW
YWx1ZUZvck5vZGUoc2hhZG93KTsKKyAgICAgICAgICAgIGZvck5vZGUoc2hhZG93KSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC0yOTc3LDExICsyOTgxLDE4IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICBlbHNlCiAgICAgICAgIGNsb2JiZXJMaW1pdCsrOwogICAgIEFT
U0VSVChjbG9iYmVyTGltaXQgPD0gbV9zdGF0ZS5ibG9jaygpLT5zaXplKCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSBjbG9iYmVyTGltaXQ7IGktLTspCi0gICAgICAgIGZ1bmN0b3IoZm9yTm9kZSht
X3N0YXRlLmJsb2NrKCktPmF0KGkpKSk7CisgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJMaW1p
dDsgaS0tOykgeworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCisgICAgICAg
ICAgICBtX3N0YXRlLmJsb2NrKCktPmF0KGkpLAorICAgICAgICAgICAgWyZdIChOb2RlRmxvd1By
b2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGZvck5v
ZGUobm9kZVByb2plY3Rpb24pKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KICAgICBpZiAobV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc3RhdGUu
YmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKQotICAgICAgICAgICAgZnVuY3Rvcihmb3JOb2RlKG5v
ZGUpKTsKKyAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IG1fc3RhdGUuYmxv
Y2soKS0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgICAgICBpZiAobm9kZS5pc1N0aWxsVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICBmdW5jdG9yKGZvck5vZGUobm9kZSkpOworICAgICAgICB9
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9m
QXJndW1lbnRzKCk7IGktLTspCiAgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5h
cmd1bWVudChpKSk7CkBAIC0zMDM3LDkgKzMwNDgsOSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0
cmFjdFN0YXRlVHlwZT4KIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAi
KTsKLSAgICBIYXNoU2V0PE5vZGUqPiBzZWVuOworICAgIEhhc2hTZXQ8Tm9kZUZsb3dQcm9qZWN0
aW9uPiBzZWVuOwogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAg
ICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5s
aXZlQXRIZWFkKSB7CiAgICAgICAgICAgICBzZWVuLmFkZChub2RlKTsKICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIGlmICh2YWx1
ZS5pc0NsZWFyKCkpCkBAIC0zMDQ4LDE1ICszMDU5LDE3IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgfQogICAgIH0KICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZSog
bm9kZSA9IG1fc3RhdGUuYmxvY2soKS0+YXQoaSk7Ci0gICAgICAgIHNlZW4uYWRkKG5vZGUpOwot
ICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc0NsZWFyKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBub2RlLCAiOiIsIHZhbHVlKTsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9u
Ojpmb3JFYWNoKAorICAgICAgICAgICAgbV9zdGF0ZS5ibG9jaygpLT5hdChpKSwgWyZdIChOb2Rl
Rmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBzZWVuLmFk
ZChub2RlUHJvamVjdGlvbik7CisgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBmb3JOb2RlKG5vZGVQcm9qZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXND
bGVhcigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBub2RlUHJvamVjdGlvbiwgIjoiLCB2YWx1ZSk7CisgICAgICAgICAgICB9
KTsKICAgICB9CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3Ig
KE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAg
ICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxp
dmVBdFRhaWwpIHsKICAgICAgICAgICAgIGlmIChzZWVuLmNvbnRhaW5zKG5vZGUpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBm
b3JOb2RlKG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NywxNiArNDcsMTYgQEAgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6QXRUYWlsQWJzdHJh
Y3RTdGF0ZQogCiBBdFRhaWxBYnN0cmFjdFN0YXRlOjp+QXRUYWlsQWJzdHJhY3RTdGF0ZSgpIHsg
fQogCi12b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKiBu
b2RlKQordm9pZCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZUZs
b3dQcm9qZWN0aW9uIG5vZGUpCiB7CiAgICAgbV92YWx1ZXNBdFRhaWxNYXAuYXQobV9ibG9jayku
YWRkKG5vZGUsIEFic3RyYWN0VmFsdWUoKSk7CiB9CiAKLUFic3RyYWN0VmFsdWUmIEF0VGFpbEFi
c3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZSogbm9kZSkKK0Fic3RyYWN0VmFsdWUmIEF0VGFpbEFi
c3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiB7CiAgICAgYXV0
byYgdmFsdWVzQXRUYWlsID0gbV92YWx1ZXNBdFRhaWxNYXAuYXQobV9ibG9jayk7Ci0gICAgSGFz
aE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSB2YWx1ZXNBdFRhaWwu
ZmluZChub2RlKTsKLSAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGl0ZXIgIT0gdmFsdWVz
QXRUYWlsLmVuZCgpKTsKKyAgICBIYXNoTWFwPE5vZGVGbG93UHJvamVjdGlvbiwgQWJzdHJhY3RW
YWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSB2YWx1ZXNBdFRhaWwuZmluZChub2RlKTsKKyAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUubm9kZSgpLCBpdGVyICE9IHZhbHVlc0F0VGFpbC5lbmQoKSk7
CiAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjA4MzM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
LmgiCiAjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2lu
Y2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7IAogCkBAIC00Nyw4ICs0OCw4IEBAIHB1YmxpYzoKICAgICAgICAgbV9ibG9jayA9
IGJsb2NrOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKik7
Ci0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlKik7CisgICAgdm9pZCBjcmVhdGVWYWx1
ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2Rl
KE5vZGVGbG93UHJvamVjdGlvbik7CiAgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVk
Z2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2RlKCkpOyB9CiAgICAgT3BlcmFuZHM8QWJzdHJh
Y3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fYmxvY2stPnZhbHVlc0F0VGFpbDsgfQog
ICAgIApAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgR3JhcGgmIG1f
Z3JhcGg7Ci0gICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4+IG1fdmFs
dWVzQXRUYWlsTWFwOworICAgIEJsb2NrTWFwPEhhc2hNYXA8Tm9kZUZsb3dQcm9qZWN0aW9uLCBB
YnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRhaWxNYXA7CiAgICAgQmFzaWNCbG9jayogbV9ibG9j
ayB7IG51bGxwdHIgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdG
bHVzaGVkQXQuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUFic3Ry
YWN0VmFsdWVQYWlyLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRG
R1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCkBAIC0yNDgs
MTIgKzI0OSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAg
ICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0SGVhZDsKICAgICAgICAgQXZhaWxh
YmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsKIAotICAgICAgICBWZWN0b3I8Tm9kZSo+IGxp
dmVBdEhlYWQ7Ci0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0VGFpbDsKLSAgICAgICAgc3Ry
dWN0IE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlOwotICAg
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAgICAgfTsKKyAgICAgICAgVmVjdG9y
PE5vZGVGbG93UHJvamVjdGlvbj4gbGl2ZUF0SGVhZDsKKyAgICAgICAgVmVjdG9yPE5vZGVGbG93
UHJvamVjdGlvbj4gbGl2ZUF0VGFpbDsKICAgICAgICAgVmVjdG9yPE5vZGVBYnN0cmFjdFZhbHVl
UGFpcj4gdmFsdWVzQXRIZWFkOwogICAgICAgICBWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWly
PiB2YWx1ZXNBdFRhaWw7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw4ICszOCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiBIYXNoU2V0PE5vZGUqPiBsaXZlTm9kZXNBdEhlYWQoR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2Nr
KiBibG9jaykKIHsKICAgICBIYXNoU2V0PE5vZGUqPiBzZWVuOwotICAgIGZvciAoTm9kZSogbm9k
ZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpCi0gICAgICAgIHNlZW4uYWRkKG5vZGUpOworICAg
IGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7
CisgICAgICAgIGlmIChub2RlLmtpbmQoKSA9PSBOb2RlRmxvd1Byb2plY3Rpb246OlByaW1hcnkp
CisgICAgICAgICAgICBzZWVuLmFkZChub2RlLm5vZGUoKSk7CisgICAgfQogICAgIAogICAgIEF2
YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5
QXRIZWFkOwogICAgIGdyYXBoLmZvckFsbExvY2Fsc0xpdmVJbkJ5dGVjb2RlKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmgJKHJldmlz
aW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZl
bmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKIC8vIFJldHVybnMgdGhlIHNldCBvZiBub2RlcyBsaXZlIGF0IHRhaWwsIGJv
dGggZHVlIHRvIGR1ZSBERkcgYW5kIGR1ZSB0byBieXRlY29kZSAoaS5lLiBPU1IgZXhpdCkuCiBI
YXNoU2V0PE5vZGUqPiBsaXZlTm9kZXNBdEhlYWQoR3JhcGgmLCBCYXNpY0Jsb2NrKik7CiAKKy8v
IFdBUk5JTkc6IFRoaXMgY3VycmVudGx5IGRvZXMgbm90IHJlYXNvbiBhYm91dCB0aGUgbGl2ZW5l
c3Mgb2Ygc2hhZG93IHZhbHVlcy4gVGhlIGV4ZWN1dGlvbgorLy8gc2VtYW50aWNzIG9mIERGRyBT
U0EgYXJlIHRoYXQgYW4gVXBzaWxvbiBzdG9yZXMgdG8gdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBo
aSwgYW5kIHRoZSBQaGkgbG9hZHMKKy8vIGZyb20gdGhhdCBzaGFkb3cgdmFsdWUuIEhlbmNlLCB0
aGUgc2hhZG93IHZhbHVlcyBhcmUgbGlrZSB2YXJpYWJsZXMsIGFuZCBoYXZlIGxpdmVuZXNzLiBU
aGUgbm9ybWFsCisvLyBsaXZlbmVzcyBhbmFseXNpcyB3aWxsIHRlbGwgeW91IGFib3V0IHRoZSBs
aXZlbmVzcyBvZiBzaGFkb3cgdmFsdWVzLiBJdCdzIE9LIHRvIGlnbm9yZSBzaGFkb3cKKy8vIHZh
bHVlcyBpZiB5b3UgdHJlYXQgVXBzaWxvbiBhcyBhbiBvcGFxdWUgZXNjYXBlLCBhbmQgYWxsIG9m
IHRoZSBjbGluZXRzIG9mIENvbWJpbmVkTGl2ZW5lc3MgZG8gc28uCiBzdHJ1Y3QgQ29tYmluZWRM
aXZlbmVzcyB7CiAgICAgQ29tYmluZWRMaXZlbmVzcygpIHsgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdGbG93SW5k
ZXhpbmcuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0Zsb3dJbmRleGluZzo6Rmxvd0luZGV4aW5nKEdyYXBoJiBncmFwaCkKKyAg
ICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgLCBtX251bUluZGljZXMoMCkKK3sKKyAgICByZWNvbXB1
dGUoKTsKK30KKworRmxvd0luZGV4aW5nOjp+Rmxvd0luZGV4aW5nKCkKK3sKK30KKwordm9pZCBG
bG93SW5kZXhpbmc6OnJlY29tcHV0ZSgpCit7CisgICAgdW5zaWduZWQgbnVtTm9kZUluZGljZXMg
PSBtX2dyYXBoLm1heE5vZGVDb3VudCgpOworICAgIAorICAgIG1fbm9kZUluZGV4VG9TaGFkb3dJ
bmRleC5yZXNpemUobnVtTm9kZUluZGljZXMpOworICAgIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRl
eC5maWxsKFVJTlRfTUFYKTsKKyAgICAKKyAgICBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXgucmVz
aXplKDApOworCisgICAgbV9udW1JbmRpY2VzID0gbnVtTm9kZUluZGljZXM7CisKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Cisg
ICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gUGhpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICB1bnNpZ25lZCBub2RlSW5kZXggPSBub2RlLT5pbmRleCgpOworICAgICAgICAg
ICAgdW5zaWduZWQgc2hhZG93SW5kZXggPSBtX251bUluZGljZXMrKzsKKyAgICAgICAgICAgIG1f
bm9kZUluZGV4VG9TaGFkb3dJbmRleFtub2RlSW5kZXhdID0gc2hhZG93SW5kZXg7CisgICAgICAg
ICAgICBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXguYXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fc2hhZG93SW5kZXhUb05vZGVJbmRl
eC5zaXplKCkgKyBudW1Ob2RlSW5kaWNlcyA9PSBtX251bUluZGljZXMpOworICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXhbc2hh
ZG93SW5kZXggLSBudW1Ob2RlSW5kaWNlc10gPT0gbm9kZUluZGV4KTsKKyAgICAgICAgfQorICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhp
bmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJ
bmRleGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZUZs
b3dQcm9qZWN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8g
VGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBub2RlcyB0byB1bmlxdWUsIGRlbnNlIGluZGljZXMgdGhh
dCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgZmFzdAorLy8gTm9kZS1rZXllZCBtYXBzLiBUaGUg
c3BlY2lhbCBwYXJ0IGlzIHRoYXQgaXQgYWxzbyBhbGxvY2F0ZWQgaW5kaWNlcyBmb3IgdGhlIHNo
YWRvdyB2YWx1ZXMgb2YgUGhpCisvLyBub2Rlcywgd2hpY2ggaXMgbmVlZGVkIGZvciBhbnkgZmxv
dy1zZW5zaXRpdmUgYW5hbHlzaXMuCitjbGFzcyBGbG93SW5kZXhpbmcgeworcHVibGljOgorICAg
IEZsb3dJbmRleGluZyhHcmFwaCYpOworICAgIH5GbG93SW5kZXhpbmcoKTsKKyAgICAKKyAgICB2
b2lkIHJlY29tcHV0ZSgpOworICAgIAorICAgIEdyYXBoJiBncmFwaCgpIGNvbnN0IHsgcmV0dXJu
IG1fZ3JhcGg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBudW1JbmRpY2VzKCkgY29uc3QgeyByZXR1
cm4gbV9udW1JbmRpY2VzOyB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgodW5zaWduZWQgbm9k
ZUluZGV4KSBjb25zdCB7IHJldHVybiBub2RlSW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBp
bmRleChOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBpbmRleChub2RlLT5pbmRleCgpKTsgfQor
ICAgIAorICAgIHVuc2lnbmVkIHNoYWRvd0luZGV4KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX25vZGVJbmRleFRvU2hhZG93SW5kZXhbbm9kZUluZGV4
XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgc2hhZG93SW5kZXgoTm9kZSogbm9kZSkgY29u
c3QKKyAgICB7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9
PSBQaGkpOworICAgICAgICByZXR1cm4gc2hhZG93SW5kZXgobm9kZS0+aW5kZXgoKSk7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQ
cm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlByaW1hcnk6CisgICAgICAgICAg
ICByZXR1cm4gaW5kZXgobm9kZUluZGV4KTsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rp
b246OlNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiBzaGFkb3dJbmRleChub2RlSW5kZXgpOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleChOb2RlICpub2RlLCBO
b2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoa2luZCkgeworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeToKKyAg
ICAgICAgICAgIHJldHVybiBpbmRleChub2RlKTsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2pl
Y3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiBzaGFkb3dJbmRleChub2RlKTsKKyAg
ICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaW5kZXgoTm9kZUZsb3dQcm9qZWN0
aW9uIHByb2plY3Rpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaW5kZXgocHJvamVj
dGlvbi5ub2RlKCksIHByb2plY3Rpb24ua2luZCgpKTsKKyAgICB9CisgICAgCisgICAgTm9kZUZs
b3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGluZGV4IDwgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBOb2RlRmxvd1Byb2plY3Rpb24obV9ncmFwaC5ub2RlQXQoaW5kZXgp
KTsKKyAgICAgICAgcmV0dXJuIE5vZGVGbG93UHJvamVjdGlvbigKKyAgICAgICAgICAgIG1fZ3Jh
cGgubm9kZUF0KG1fc2hhZG93SW5kZXhUb05vZGVJbmRleFtpbmRleCAtIG1fbm9kZUluZGV4VG9T
aGFkb3dJbmRleC5zaXplKCldKSwKKyAgICAgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbjo6U2hh
ZG93KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIHVu
c2lnbmVkIG1fbnVtSW5kaWNlczsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX25vZGVJbmRleFRvU2hhZG93SW5kZXg7CisgICAgVmVjdG9yPHVuc2lnbmVk
LCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9zaGFkb3dJbmRleFRvTm9kZUluZGV4OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd01hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAi
REZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMg
aXMgYSBtYXBwaW5nIGZyb20gbm9kZXMgdG8gdmFsdWVzIHRoYXQgaXMgdXNlZnVsIGZvciBmbG93
LXNlbnNpdGl2ZSBhbmFseXNpcy4gSW4gc3VjaCBhbgorLy8gYW5hbHlzaXMsIGF0IGV2ZXJ5IHBv
aW50IGluIHRoZSBwcm9ncmFtIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIHZhbHVlcyBvZiBub2Rl
cyBwbHVzIHRoZSBzaGFkb3cKKy8vIHZhbHVlcyBvZiBQaGlzLiBUaGlzIG1ha2VzIGl0IGVhc3kg
dG8gZG8gYm90aCBvZiB0aG9zZSB0aGluZ3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
Rmxvd01hcCB7CitwdWJsaWM6CisgICAgRmxvd01hcChHcmFwaCYgZ3JhcGgpCisgICAgICAgIDog
bV9ncmFwaChncmFwaCkKKyAgICB7CisgICAgICAgIHJlc2l6ZSgpOworICAgIH0KKyAgICAKKyAg
ICAvLyBDYWxsIHRoaXMgaWYgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgZ3JhcGggaGFzIGNo
YW5nZWQuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHJlc2V0IGFueQorICAgIC8vIGVudHJpZXMu
CisgICAgdm9pZCByZXNpemUoKQorICAgIHsKKyAgICAgICAgbV9tYXAucmVzaXplKG1fZ3JhcGgu
bWF4Tm9kZUNvdW50KCkpOworICAgICAgICBtX3NoYWRvd01hcC5yZXNpemUobV9ncmFwaC5tYXhO
b2RlQ291bnQoKSk7CisgICAgfQorICAgIAorICAgIEdyYXBoJiBncmFwaCgpIGNvbnN0IHsgcmV0
dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICBUJiBhdCh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXBbbm9kZUluZGV4XTsKKyAgICB9CisgICAgCisgICAgVCYg
YXQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhdChub2RlLT5pbmRleCgpKTsK
KyAgICB9CisgICAgCisgICAgVCYgYXRTaGFkb3codW5zaWduZWQgbm9kZUluZGV4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc2hhZG93TWFwW25vZGVJbmRleF07CisgICAgfQorICAgIAorICAg
IFQmIGF0U2hhZG93KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYXRTaGFkb3co
bm9kZS0+aW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRl
eCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGtpbmQpIHsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlByaW1hcnk6CisgICAg
ICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KTsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2pl
Y3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJldHVybiBhdFNoYWRvdyhub2RlSW5kZXgpOwor
ICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiAqYml0d2lzZV9jYXN0PFQqPihudWxscHRyKTsKKyAgICB9CisgICAgCisgICAgVCYg
YXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpCisgICAgeworICAg
ICAgICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSwga2luZCk7CisgICAgfQorICAgIAorICAgIFQm
IGF0KE5vZGVGbG93UHJvamVjdGlvbiBwcm9qZWN0aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGF0KHByb2plY3Rpb24ubm9kZSgpLCBwcm9qZWN0aW9uLmtpbmQoKSk7CisgICAgfQorICAgIAor
ICAgIGNvbnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCk7IH0KKyAgICBjb25zdCBUJiBhdChO
b2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQo
bm9kZSk7IH0KKyAgICBjb25zdCBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdFNoYWRvdyhub2RlSW5kZXgp
OyB9CisgICAgY29uc3QgVCYgYXRTaGFkb3coTm9kZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29u
c3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGUpOyB9CisgICAgY29uc3QgVCYg
YXQodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGVJbmRleCwga2lu
ZCk7IH0KKyAgICBjb25zdCBUJiBhdChOb2RlKiBub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246Oktp
bmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5v
ZGUsIGtpbmQpOyB9CisgICAgY29uc3QgVCYgYXQoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rp
b24pIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChwcm9qZWN0
aW9uKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8
VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fbWFwOworICAgIFZlY3RvcjxULCAwLCBVbnNh
ZmVWZWN0b3JPdmVyZmxvdz4gbV9zaGFkb3dNYXA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEpTQzo6REZHOjpGbG93TWFwPFQ+
JiBtYXApCit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtYXAuZ3JhcGgoKS5tYXhOb2RlQ291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChK
U0M6OkRGRzo6Tm9kZSogbm9kZSA9IG1hcC5ncmFwaCgpLm5vZGVBdChpKSkgeworICAgICAgICAg
ICAgaWYgKGNvbnN0IFQmIHZhbHVlID0gbWFwLmF0KG5vZGUpKQorICAgICAgICAgICAgICAgIG91
dC5wcmludChjb21tYSwgbm9kZSwgIj0+IiwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXAuZ3JhcGgoKS5tYXhOb2RlQ291bnQoKTsgKytp
KSB7CisgICAgICAgIGlmIChKU0M6OkRGRzo6Tm9kZSogbm9kZSA9IG1hcC5ncmFwaCgpLm5vZGVB
dChpKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IFQmIHZhbHVlID0gbWFwLmF0U2hhZG93KG5v
ZGUpKQorICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgInNoYWRvdygiLCBub2RlLCAi
KT0+IiwgdmFsdWUpOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNp
bmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0NvbnRyb2xFcXVp
dmFsZW5jZUFuYWx5c2lzLmgiCiAjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgorI2luY2x1ZGUg
IkRGR0Zsb3dJbmRleGluZy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dNYXAuaCIKICNpbmNsdWRlICJE
RkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkRGR05hdHVy
YWxMb29wcy5oIgpAQCAtODMsNiArODUsOSBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBw
bGFuLCBMb25nTGl2CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgCiAgICAgbV9o
YXNEZWJ1Z2dlckVuYWJsZWQgPSBtX3Byb2ZpbGVkQmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVn
Z2luZ09wY29kZXMoKSB8fCBPcHRpb25zOjpmb3JjZURlYnVnZ2VyQnl0ZWNvZGVHZW5lcmF0aW9u
KCk7CisgICAgCisgICAgbV9pbmRleGluZ0NhY2hlID0gc3RkOjptYWtlX3VuaXF1ZTxGbG93SW5k
ZXhpbmc+KCp0aGlzKTsKKyAgICBtX2Fic3RyYWN0VmFsdWVzQ2FjaGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4+KCp0aGlzKTsKIH0KIAogR3JhcGg6On5HcmFwaCgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAyMDgzMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDkgKzU5LDEyIEBAIGNsYXNzIEJhY2t3YXJkc0RvbWluYXRvcnM7CiBjbGFzcyBDRkc7
CiBjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFseXNpczsKIGNsYXNzIERvbWluYXRvcnM7Citj
bGFzcyBGbG93SW5kZXhpbmc7CiBjbGFzcyBOYXR1cmFsTG9vcHM7CiBjbGFzcyBQcmVQb3N0TnVt
YmVyaW5nOwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRmxvd01hcDsKKwogI2RlZmluZSBE
RkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAg
ICAgICAgXAogICAgICAgICBOb2RlKiBfbm9kZSA9IChub2RlKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBO
b2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMjAxLDggKzIw
NCw2IEBAIHB1YmxpYzoKICAgICBOb2RlKiBub2RlQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZXNCeUluZGV4W2luZGV4XTsgfQogICAgIHZvaWQgcGFja05vZGVJbmRpY2Vz
KCk7CiAKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+
JiBhYnN0cmFjdFZhbHVlc0NhY2hlKCkgeyByZXR1cm4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOyB9
Ci0KICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCiAgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShK
U1ZhbHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXppbmcgYnkgZGVmYXVsdC4KQEAgLTkzNSw2ICs5
MzYsOSBAQCBwdWJsaWM6CiAgICAgUmVmQ291bnRTdGF0ZSBtX3JlZkNvdW50U3RhdGU7CiAgICAg
Ym9vbCBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsKICAgICBib29sIG1faGFzRXhjZXB0aW9uSGFuZGxl
cnMgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93SW5kZXhpbmc+IG1faW5kZXhp
bmdDYWNoZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rmxvd01hcDxBYnN0cmFjdFZhbHVlPj4gbV9h
YnN0cmFjdFZhbHVlc0NhY2hlOworCiBwcml2YXRlOgogICAgIHZvaWQgYWRkTm9kZVRvTWFwQnlJ
bmRleChOb2RlKik7CiAKQEAgLTk3Miw3ICs5NzYsNiBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9y
PE5vZGUqLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9ub2Rlc0J5SW5kZXg7CiAgICAgVmVj
dG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9ub2RlSW5kZXhGcmVlTGlz
dDsKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1f
YWJzdHJhY3RWYWx1ZXNDYWNoZTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsNyBAQCBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKIEluUGxhY2VBYnN0
cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dy
YXBoKGdyYXBoKQotICAgICwgbV9hYnN0cmFjdFZhbHVlcyhncmFwaC5hYnN0cmFjdFZhbHVlc0Nh
Y2hlKCkpCisgICAgLCBtX2Fic3RyYWN0VmFsdWVzKCpncmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2Fj
aGUpCiAgICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCksIGdyYXBoLm1fbG9jYWxWYXJzKQogICAgICwgbV9ibG9jaygwKQogewpAQCAtNTcsMTkgKzU3
LDIyIEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG8KICAgICBBU1NF
UlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNC
bG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkpOwogICAgIEFTU0VSVChiYXNpY0Js
b2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAKLSAgICAvLyBDZXJ0YWluIHBoYXNlcyBp
bnNlcnQgbm9kZXMgaW4gYSBibG9jayBhZnRlciBydW5uaW5nIHRocm91Z2ggaXQuCi0gICAgLy8g
V2UgY2Fubm90IHJlc2VydmUgdGhlIHNwYWNlIGZvciBBYnN0cmFjdFZhbHVlcyB3aGVuIGluaXRp
YWxpemluZyBBYnN0cmFjdFN0YXRlIGJlY2F1c2UgdGhlIG51bWJlciBvZiB2YWx1ZXMKLSAgICAv
LyBjYW4gaW5jcmVhc2UgYXMgd2UgZXhlY3V0ZS4gSW5zdGVhZCwgd2UgaW5jcmVhc2UgdGhlIHNp
emUgYXMgbmVlZGVkIGJlZm9yZSBwcm9jZXNzaW5nIGVhY2ggYmxvY2suCi0gICAgbV9hYnN0cmFj
dFZhbHVlcy5yZXNpemUobV9ncmFwaC5tYXhOb2RlQ291bnQoKSk7CisgICAgbV9hYnN0cmFjdFZh
bHVlcy5yZXNpemUoKTsKICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhc2ljQmxv
Y2stPnNpemUoKTsgaSsrKQotICAgICAgICBmb3JOb2RlKGJhc2ljQmxvY2stPmF0KGkpKS5jbGVh
cigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKAorICAgICAgICAgICAgYmFz
aWNCbG9jay0+YXQoaSksIFsmXSAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKSB7
CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlUHJvamVjdGlvbikuY2xlYXIoKTsKKyAgICAg
ICAgICAgIH0pOworICAgIH0KIAogICAgIG1fdmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVz
QXRIZWFkOwogICAgIAogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBlbnRyeSA6IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkKQotICAgICAg
ICAgICAgZm9yTm9kZShlbnRyeS5ub2RlKSA9IGVudHJ5LnZhbHVlOworICAgICAgICBmb3IgKE5v
ZGVBYnN0cmFjdFZhbHVlUGFpciYgZW50cnkgOiBiYXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVh
ZCkgeworICAgICAgICAgICAgaWYgKGVudHJ5Lm5vZGUuaXNTdGlsbFZhbGlkKCkpCisgICAgICAg
ICAgICAgICAgZm9yTm9kZShlbnRyeS5ub2RlKSA9IGVudHJ5LnZhbHVlOworICAgICAgICB9CiAg
ICAgfQogICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKICAgICBiYXNp
Y0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKQEAgLTgwLDEyICs4MywxMiBAQCB2b2lkIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvCiAgICAgbV9zdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUgPSBiYXNpY0Jsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQ7CiB9CiAK
LXN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5v
ZGVBYnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywgY29uc3QgVmVjdG9yPE5vZGUqPiYgbGl2ZSkK
K3N0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVjdG9yPE5vZGVBYnN0cmFjdFZhbHVlUGFpcj4m
IHZhbHVlcywgY29uc3QgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmUpCiB7CiAgICAg
dmFsdWVzLnJlc2l6ZSgwKTsKICAgICB2YWx1ZXMucmVzZXJ2ZUNhcGFjaXR5KGxpdmUuc2l6ZSgp
KTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgOiBsaXZlKQotICAgICAgICB2YWx1ZXMudW5jaGVja2Vk
QXBwZW5kKEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpciB7IG5vZGUs
IEFic3RyYWN0VmFsdWUoKSB9KTsKKyAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDog
bGl2ZSkKKyAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIgeyBub2RlLCBBYnN0cmFjdFZhbHVlKCkgfSk7CiB9CiAKIHZvaWQgSW5QbGFjZUFic3RyYWN0
U3RhdGU6OmluaXRpYWxpemUoKQpAQCAtMTk5LDcgKzIwMiw3IEBAIGJvb2wgSW5QbGFjZUFic3Ry
YWN0U3RhdGU6OmVuZEJhc2ljQmxvY2sKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQogICAgICAgICAgICAgYmxvY2stPnZhbHVl
c0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tpXSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiB2
YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCkgeworICAgICAgICBmb3IgKE5v
ZGVBYnN0cmFjdFZhbHVlUGFpciYgdmFsdWVBdFRhaWwgOiBibG9jay0+c3NhLT52YWx1ZXNBdFRh
aWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlQXROb2RlID0gZm9yTm9kZSh2
YWx1ZUF0VGFpbC5ub2RlKTsKICAgICAgICAgICAgIHZhbHVlQXRUYWlsLnZhbHVlLm1lcmdlKHZh
bHVlQXROb2RlKTsKICAgICAgICAgICAgIHZhbHVlQXROb2RlID0gdmFsdWVBdFRhaWwudmFsdWU7
CkBAIC0yOTEsMTMgKzI5NCwxMyBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZShC
YXNpY0JsCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBmcm9tLT52YWx1ZXNBdFRhaWwuc2l6ZSgp
OyBpLS07KQogICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+dmFsdWVzQXRIZWFkW2ldLm1lcmdl
KGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHRv
LT5zc2EtPnZhbHVlc0F0SGVhZCkgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGVudHJ5Lm5v
ZGU7CisgICAgICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiBlbnRyeSA6IHRvLT5zc2Et
PnZhbHVlc0F0SGVhZCkgeworICAgICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgPSBl
bnRyeS5ub2RlOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgTWVyZ2luZyBmb3IgIiwgbm9kZSwgIjogZnJvbSAiLCBmb3JOb2RlKG5vZGUp
LCAiIHRvICIsIGVudHJ5LnZhbHVlLCAiXG4iKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAg
ICB1bnNpZ25lZCB2YWx1ZUNvdW50SW5Gcm9tQmxvY2sgPSAwOwotICAgICAgICAgICAgZm9yIChh
dXRvJiBmcm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZyb20tPnNzYS0+dmFsdWVzQXRUYWlsKSB7Cisg
ICAgICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgZnJvbUJsb2NrVmFsdWVBdFRh
aWwgOiBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbCkgewogICAgICAgICAgICAgICAgIGlmIChmcm9t
QmxvY2tWYWx1ZUF0VGFpbC5ub2RlID09IG5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGZyb21CbG9ja1ZhbHVlQXRUYWlsLnZhbHVlID09IGZvck5vZGUobm9kZSkpOwogICAgICAg
ICAgICAgICAgICAgICArK3ZhbHVlQ291bnRJbkZyb21CbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlz
aW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAi
REZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIkRGR0Zsb3dNYXAuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRG
R05vZGUuaCIKIApAQCAtNDMsMTEgKzQ0LDExIEBAIHB1YmxpYzoKICAgICAKICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIAotICAgIHZvaWQg
Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKSB7IH0KKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9k
ZShOb2RlRmxvd1Byb2plY3Rpb24pIHsgfQogICAgIAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5v
ZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVj
dGlvbiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1ZXNbbm9kZS0+
aW5kZXgoKV07CisgICAgICAgIHJldHVybiBtX2Fic3RyYWN0VmFsdWVzLmF0KG5vZGUpOwogICAg
IH0KICAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkKQEAgLTEzMiw3
ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIEdyYXBoJiBtX2dyYXBoOwogCi0gICAgVmVj
dG9yPEFic3RyYWN0VmFsdWUsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiYgbV9hYnN0cmFjdFZh
bHVlczsKKyAgICBGbG93TWFwPEFic3RyYWN0VmFsdWU+JiBtX2Fic3RyYWN0VmFsdWVzOwogICAg
IE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fdmFyaWFibGVzOwogICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MjA4MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRp
bWl6YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJERkdCbG9ja1NldC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZH
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCiAjaW5j
bHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKQEAgLTEyMSw3ICsx
MjIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KICAgICAKLSAgICBSZWxhdGlvbnNoaXAoTm9k
ZSogbGVmdCwgTm9kZSogcmlnaHQsIEtpbmQga2luZCwgaW50IG9mZnNldCA9IDApCisgICAgUmVs
YXRpb25zaGlwKE5vZGVGbG93UHJvamVjdGlvbiBsZWZ0LCBOb2RlRmxvd1Byb2plY3Rpb24gcmln
aHQsIEtpbmQga2luZCwgaW50IG9mZnNldCA9IDApCiAgICAgICAgIDogbV9sZWZ0KGxlZnQpCiAg
ICAgICAgICwgbV9yaWdodChyaWdodCkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKQEAgLTEzMiwx
NyArMTMzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9sZWZ0ICE9IG1f
cmlnaHQpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgUmVsYXRpb25zaGlwIHNhZmVDcmVhdGUo
Tm9kZSogbGVmdCwgTm9kZSogcmlnaHQsIEtpbmQga2luZCwgaW50IG9mZnNldCA9IDApCisgICAg
c3RhdGljIFJlbGF0aW9uc2hpcCBzYWZlQ3JlYXRlKE5vZGVGbG93UHJvamVjdGlvbiBsZWZ0LCBO
b2RlRmxvd1Byb2plY3Rpb24gcmlnaHQsIEtpbmQga2luZCwgaW50IG9mZnNldCA9IDApCiAgICAg
ewotICAgICAgICBpZiAoIWxlZnQgfHwgIXJpZ2h0IHx8IGxlZnQgPT0gcmlnaHQpCisgICAgICAg
IGlmICghbGVmdC5pc1N0aWxsVmFsaWQoKSB8fCAhcmlnaHQuaXNTdGlsbFZhbGlkKCkgfHwgbGVm
dCA9PSByaWdodCkKICAgICAgICAgICAgIHJldHVybiBSZWxhdGlvbnNoaXAoKTsKICAgICAgICAg
cmV0dXJuIFJlbGF0aW9uc2hpcChsZWZ0LCByaWdodCwga2luZCwgb2Zmc2V0KTsKICAgICB9CiAK
LSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9Cisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9sZWZ0OyB9CiAg
ICAgCi0gICAgTm9kZSogbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdDsgfQotICAgIE5vZGUq
IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorICAgIE5vZGVGbG93UHJvamVjdGlv
biBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgTm9kZUZsb3dQcm9qZWN0aW9u
IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQogICAgIEtpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIGludCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQogCkBAIC0yNTgsNyArMjU5LDcgQEAgcHVibGljOgogICAgIC8vIElmIHBvc3NpYmxl
LCByZXR1cm5zIGEgZm9ybSBvZiB0aGlzIHJlbGF0aW9uc2hpcCB3aGVyZSB0aGUgZ2l2ZW4gbm9k
ZSBpcyB0aGUgbGVmdAogICAgIC8vIHNpZGUuIFJldHVybnMgYSBudWxsIHJlbGF0aW9uc2hpcCBp
ZiB0aGlzIHJlbGF0aW9uc2hpcCBjYW5ub3Qgc2F5IGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAv
LyBub2RlLgotICAgIFJlbGF0aW9uc2hpcCBmb3JOb2RlKE5vZGUqIG5vZGUpIGNvbnN0CisgICAg
UmVsYXRpb25zaGlwIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpIGNvbnN0CiAgICAg
ewogICAgICAgICBpZiAobV9sZWZ0ID09IG5vZGUpCiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CkBAIC0yNjcsNyArMjY4LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gUmVsYXRpb25zaGlw
KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0TGVmdChOb2RlKiBsZWZ0KQorICAgIHZvaWQg
c2V0TGVmdChOb2RlRmxvd1Byb2plY3Rpb24gbGVmdCkKICAgICB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGxlZnQgIT0gbV9yaWdodCk7CiAgICAgICAgIG1fbGVmdCA9IGxlZnQ7CkBAIC05ODQs
MTMgKzk4NSwxMyBAQCBwcml2YXRlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBtX2xlZnQ7Ci0gICAgTm9kZSogbV9yaWdodDsK
KyAgICBOb2RlRmxvd1Byb2plY3Rpb24gbV9sZWZ0OworICAgIE5vZGVGbG93UHJvamVjdGlvbiBt
X3JpZ2h0OwogICAgIEtpbmQgbV9raW5kOwogICAgIGludCBtX29mZnNldDsgLy8gVGhpcyBvZmZz
ZXQgY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlLgogfTsKIAotdHlwZWRlZiBIYXNoTWFwPE5vZGUq
LCBWZWN0b3I8UmVsYXRpb25zaGlwPj4gUmVsYXRpb25zaGlwTWFwOwordHlwZWRlZiBIYXNoTWFw
PE5vZGVGbG93UHJvamVjdGlvbiwgVmVjdG9yPFJlbGF0aW9uc2hpcD4+IFJlbGF0aW9uc2hpcE1h
cDsKIAogY2xhc3MgSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
ewogcHVibGljOgpAQCAtMTMxNCw3ICsxMzE1LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5taW5WYWx1ZU9mTGVmdCgpID49IDApCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9uTmVnYXRpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsYXRpb25zaGlwLnJpZ2h0
KCkgPT0gbm9kZS0+Y2hpbGQyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxh
dGlvbnNoaXAucmlnaHQoKSA9PSBub2RlLT5jaGlsZDIoKS5ub2RlKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocmVsYXRpb25zaGlwLmtpbmQoKSA9PSBSZWxhdGlvbnNoaXA6
OkVxdWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHJlbGF0aW9uc2hpcC5v
ZmZzZXQoKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlc3NUaGFuTGVu
Z3RoID0gdHJ1ZTsKQEAgLTE0OTEsMjMgKzE0OTIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVXBzaWxvbjogewotICAgICAgICAgICAgc2V0UmVs
YXRpb25zaGlwKAotICAgICAgICAgICAgICAgIFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2RlLT5waGkoKSwgUmVs
YXRpb25zaGlwOjpFcXVhbCwgMCkpOworICAgICAgICAgICAgc2V0RXF1aXZhbGVuY2UoCisgICAg
ICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLAorICAgICAgICAgICAgICAgIE5vZGVG
bG93UHJvamVjdGlvbihub2RlLT5waGkoKSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGF1dG8gaXRlciA9IG1fcmVsYXRpb25zaGlwcy5maW5kKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBtX3JlbGF0aW9uc2hpcHMuZW5kKCkpIHsKLSAgICAg
ICAgICAgICAgICBWZWN0b3I8UmVsYXRpb25zaGlwPiB0b0FkZDsKLSAgICAgICAgICAgICAgICBm
b3IgKFJlbGF0aW9uc2hpcCByZWxhdGlvbnNoaXAgOiBpdGVyLT52YWx1ZSkgewotICAgICAgICAg
ICAgICAgICAgICBSZWxhdGlvbnNoaXAgbmV3UmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+cGhpKCkgPT0gbmV3UmVsYXRpb25zaGlwLnJp
Z2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgbmV3UmVsYXRpb25zaGlwLnNldExlZnQobm9kZS0+cGhpKCkpOwotICAgICAgICAgICAg
ICAgICAgICB0b0FkZC5hcHBlbmQobmV3UmVsYXRpb25zaGlwKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZm9yIChSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwIDogdG9BZGQp
Ci0gICAgICAgICAgICAgICAgICAgIHNldFJlbGF0aW9uc2hpcChyZWxhdGlvbnNoaXApOwotICAg
ICAgICAgICAgfQorICAgICAgICBjYXNlIFBoaTogeworICAgICAgICAgICAgc2V0RXF1aXZhbGVu
Y2UoCisgICAgICAgICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uKG5vZGUsIE5vZGVGbG93UHJv
amVjdGlvbjo6U2hhZG93KSwKKyAgICAgICAgICAgICAgICBub2RlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE1MTYsNiArMTUxMCwyNiBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAorICAgIHZvaWQgc2V0RXF1aXZhbGVuY2UoTm9k
ZUZsb3dQcm9qZWN0aW9uIG9sZE5vZGUsIE5vZGVGbG93UHJvamVjdGlvbiBuZXdOb2RlKQorICAg
IHsKKyAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShvbGRO
b2RlLCBuZXdOb2RlLCBSZWxhdGlvbnNoaXA6OkVxdWFsLCAwKSk7CisgICAgICAgIAorICAgICAg
ICBhdXRvIGl0ZXIgPSBtX3JlbGF0aW9uc2hpcHMuZmluZChvbGROb2RlKTsKKyAgICAgICAgaWYg
KGl0ZXIgIT0gbV9yZWxhdGlvbnNoaXBzLmVuZCgpKSB7CisgICAgICAgICAgICBWZWN0b3I8UmVs
YXRpb25zaGlwPiB0b0FkZDsKKyAgICAgICAgICAgIGZvciAoUmVsYXRpb25zaGlwIHJlbGF0aW9u
c2hpcCA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgUmVsYXRpb25zaGlwIG5ld1Jl
bGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcDsKKyAgICAgICAgICAgICAgICAvLyBBdm9pZCBjcmVh
dGluZyBhbnkga2luZCBvZiBzZWxmLXJlbGF0aW9uc2hpcC4KKyAgICAgICAgICAgICAgICBpZiAo
bmV3Tm9kZS5ub2RlKCkgPT0gbmV3UmVsYXRpb25zaGlwLnJpZ2h0KCkubm9kZSgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBuZXdSZWxhdGlvbnNoaXAu
c2V0TGVmdChuZXdOb2RlKTsKKyAgICAgICAgICAgICAgICB0b0FkZC5hcHBlbmQobmV3UmVsYXRp
b25zaGlwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoUmVsYXRpb25zaGlwIHJl
bGF0aW9uc2hpcCA6IHRvQWRkKQorICAgICAgICAgICAgICAgIHNldFJlbGF0aW9uc2hpcChyZWxh
dGlvbnNoaXApOworICAgICAgICB9CisgICAgfQorICAgICAgICAgICAgCiAgICAgdm9pZCBzZXRS
ZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCwgdW5zaWduZWQgdGltZVRvTGl2
ZSA9IDEpCiAgICAgewogICAgICAgICBzZXRSZWxhdGlvbnNoaXAobV9yZWxhdGlvbnNoaXBzLCBy
ZWxhdGlvbnNoaXAsIHRpbWVUb0xpdmUpOwpAQCAtMTY2OSw3ICsxNjgzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIGlmIChtX3NlZW5CbG9ja3MuYWRkKHRhcmdldCkpIHsKICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgYmxvY2suIFdlIGNvcHkgc3ViamVjdCB0byBsaXZlbmVz
cyBwcnVuaW5nLgotICAgICAgICAgICAgYXV0byBpc0xpdmUgPSBbJl0gKE5vZGUqIG5vZGUpIHsK
KyAgICAgICAgICAgIGF1dG8gaXNMaXZlID0gWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkg
ewogICAgICAgICAgICAgICAgIGlmIChub2RlID09IG1femVybykKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldC0+c3NhLT5saXZl
QXRIZWFkLmNvbnRhaW5zKG5vZGUpOwpAQCAtMTcwMSw3ICsxNzE1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gYXNzaWduZWQgd291bGQgb25seSBoYXBwZW4gaWYgd2UgaGF2ZSBub3QgcHJvY2Vz
c2VkIHRoZSBub2RlJ3MgcHJlZGVjZXNzb3IuIFdlCiAgICAgICAgIC8vIHNob3VsZG4ndCBwcm9j
ZXNzIGJsb2NrcyB1bnRpbCB3ZSBoYXZlIHByb2Nlc3NlZCB0aGUgYmxvY2sncyBwcmVkZWNlc3Nv
ciBiZWNhdXNlIHdlCiAgICAgICAgIC8vIGFyZSB1c2luZyByZXZlcnNlIHBvc3RvcmRlci4KLSAg
ICAgICAgVmVjdG9yPE5vZGUqPiB0b1JlbW92ZTsKKyAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJv
amVjdGlvbj4gdG9SZW1vdmU7CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogbV9yZWxhdGlvbnNoaXBzQXRIZWFkW3RhcmdldF0pIHsKICAg
ICAgICAgICAgIGF1dG8gaXRlciA9IHJlbGF0aW9uc2hpcE1hcC5maW5kKGVudHJ5LmtleSk7CkBA
IC0xNzkxLDcgKzE4MDUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZW50cnkudmFsdWUgPSBt
ZXJnZWRSZWxhdGlvbnNoaXBzOwogICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
IH0KLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDogdG9SZW1vdmUpCisgICAgICAgIGZvciAoTm9k
ZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiB0b1JlbW92ZSkKICAgICAgICAgICAgIG1fcmVsYXRpb25z
aGlwc0F0SGVhZFt0YXJnZXRdLnJlbW92ZShub2RlKTsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biBjaGFuZ2VkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0Fu
YWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5l
cy5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJ
bmRleGluZy5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9u
U2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKQEAgLTQ0LDEwICs0NSwxMiBAQCBwdWJsaWM6
CiAgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFz
ZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKICAgICAgICAgLCBtX2RpcnR5QmxvY2tzKG1f
Z3JhcGgubnVtQmxvY2tzKCkpCisgICAgICAgICwgbV9pbmRleGluZygqbV9ncmFwaC5tX2luZGV4
aW5nQ2FjaGUpCiAgICAgICAgICwgbV9saXZlQXRIZWFkKG1fZ3JhcGgpCiAgICAgICAgICwgbV9s
aXZlQXRUYWlsKG1fZ3JhcGgpCi0gICAgICAgICwgbV93b3Jrc2V0KGdyYXBoLm1heE5vZGVDb3Vu
dCgpIC0gMSkKICAgICB7CisgICAgICAgIG1fZ3JhcGgubV9pbmRleGluZ0NhY2hlLT5yZWNvbXB1
dGUoKTsKKyAgICAgICAgbV93b3Jrc2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxJbmRleFNwYXJzZVNl
dDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4+KG1fZ3JhcGgubV9pbmRleGluZ0NhY2hlLT5udW1JbmRp
Y2VzKCkpOwogICAgIH0KIAogICAgIGJvb2wgcnVuKCkKQEAgLTgwLDIwICs4MywyMiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRIZWFkSW5kaWNlcyA9IG1fbGl2ZUF0SGVhZFtibG9j
a0luZGV4XTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+JiBsaXZlQXRIZWFkID0gYmxv
Y2stPnNzYS0+bGl2ZUF0SGVhZDsKKyAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPiYKKyAgICAgICAgICAgICAgICAgICAgbGl2
ZUF0SGVhZEluZGljZXMgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF07CisgICAgICAgICAgICAg
ICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmVBdEhlYWQgPSBibG9jay0+c3NhLT5s
aXZlQXRIZWFkOwogICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQucmVzaXplKDApOwogICAgICAg
ICAgICAgICAgIGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWRJbmRpY2VzLnNp
emUoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IGxpdmVBdEhlYWRJ
bmRpY2VzKQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVuZCht
X2dyYXBoLm5vZGVBdChpbmRleCkpOworICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnVu
Y2hlY2tlZEFwcGVuZChtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgYXV0byYgbGl2ZUF0
VGFpbEluZGljZXMgPSBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF07Ci0gICAgICAgICAgICAgICAg
VmVjdG9yPE5vZGUqPiYgbGl2ZUF0VGFpbCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7CisgICAg
ICAgICAgICAgICAgY29uc3QgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+
OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4mCisg
ICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWxJbmRpY2VzID0gbV9saXZlQXRUYWlsW2Jsb2Nr
SW5kZXhdOworICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZl
QXRUYWlsID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKICAgICAgICAgICAgICAgICBsaXZlQXRU
YWlsLnJlc2l6ZSgwKTsKICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnJlc2VydmVDYXBhY2l0
eShsaXZlQXRUYWlsSW5kaWNlcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggOiBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF0pCi0gICAgICAgICAgICAgICAgICAg
IGxpdmVBdFRhaWwudW5jaGVja2VkQXBwZW5kKG1fZ3JhcGgubm9kZUF0KGluZGV4KSk7CisgICAg
ICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwudW5jaGVja2VkQXBwZW5kKG1faW5kZXhpbmcubm9k
ZVByb2plY3Rpb24oaW5kZXgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMDYs
NjcgKzExMSw1NiBAQCBwcml2YXRlOgogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYmxvY2ss
ICJPbmx5IGRpcnR5IGJsb2NrcyBuZWVkcyB1cGRhdGVzLiBBIG51bGwgYmxvY2sgc2hvdWxkIG5l
dmVyIGJlIGRpcnR5LiIpOwogCi0gICAgICAgIG1fd29ya3NldC5jbGVhcigpOworICAgICAgICBt
X3dvcmtzZXQtPmNsZWFyKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBtX2xpdmVB
dFRhaWxbYmxvY2tJbmRleF0pCi0gICAgICAgICAgICBtX3dvcmtzZXQuYWRkKGluZGV4KTsKKyAg
ICAgICAgICAgIG1fd29ya3NldC0+YWRkKGluZGV4KTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewogICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwogCi0gICAgICAgICAgICAvLyBHaXZl
biBhbiBVcHNpbG9uOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFVwc2ls
b24oQHgsIF5wKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0
IGRlZidzIEBwIGFuZCBAbiBhbmQgdXNlcyBAeC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBHaXZlbiBhIFBoaToKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBwOiBQ
aGkoKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdz
IG5laXRoZXIgYSB1c2Ugbm9yIGEgZGVmLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8v
IEdpdmVuIGEgbm9kZToKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBuOiBUaGlu
Z3koQGEsIEBiLCBAYykKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgdGhh
dCBpdCBkZWYncyBAbiBhbmQgdXNlcyBAYSwgQGIsIEBjLgotICAgICAgICAgICAgCiAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjogewot
ICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1fd29ya3NldC5jb250YWlucyhu
b2RlLT5pbmRleCgpKSwgIlVwc2lsb24gc2hvdWxkIG5vdCBiZSB1c2VkIGFzIGRlZnMgYnkgb3Ro
ZXIgbm9kZXMuIik7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghbV93b3Jr
c2V0LT5jb250YWlucyhub2RlLT5pbmRleCgpKSwgIlVwc2lsb24gc2hvdWxkIG5vdCBiZSB1c2Vk
IGFzIGRlZnMgYnkgb3RoZXIgbm9kZXMuIik7CiAKICAgICAgICAgICAgICAgICBOb2RlKiBwaGkg
PSBub2RlLT5waGkoKTsKLSAgICAgICAgICAgICAgICBtX3dvcmtzZXQucmVtb3ZlKHBoaS0+aW5k
ZXgoKSk7Ci0gICAgICAgICAgICAgICAgbV93b3Jrc2V0LmFkZChub2RlLT5jaGlsZDEoKS0+aW5k
ZXgoKSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5yZW1vdmUobV9pbmRleGluZy5zaGFk
b3dJbmRleChwaGkpKTsKKyAgICAgICAgICAgICAgICBtX3dvcmtzZXQtPmFkZChtX2luZGV4aW5n
LmluZGV4KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAgICBt
X3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5nLmluZGV4KG5vZGUpKTsKKyAgICAgICAgICAgICAg
ICBtX3dvcmtzZXQtPmFkZChtX2luZGV4aW5nLnNoYWRvd0luZGV4KG5vZGUpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShub2RlLT5pbmRleCgpKTsKLSAgICAgICAgICAg
ICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7
CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5yZW1vdmUobV9pbmRleGluZy5pbmRleChub2Rl
KSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCisgICAgICAgICAgICAg
ICAgICAgIG5vZGUsIFsmXSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBuZXdFbnRyeSA9IG1fd29ya3NldC0+YWRkKG1faW5kZXhpbmcuaW5kZXgoZWRnZS5ub2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0S2lsbFN0YXR1cyhuZXdFbnRy
eSA/IERvZXNLaWxsIDogRG9lc05vdEtpbGwpOworICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAg
IC8vIFVwZGF0ZSBsaXZlIGF0IGhlYWQuCi0gICAgICAgIGF1dG8mIGxpdmVBdEhlYWQgPSBtX2xp
dmVBdEhlYWRbYmxvY2tJbmRleF07Ci0gICAgICAgIGlmIChtX3dvcmtzZXQuc2l6ZSgpID09IGxp
dmVBdEhlYWQuc2l6ZSgpKQorICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93LCAxPiYgbGl2ZUF0SGVhZCA9IG1fbGl2ZUF0SGVhZFtibG9ja0luZGV4XTsKKyAg
ICAgICAgaWYgKG1fd29ya3NldC0+c2l6ZSgpID09IGxpdmVBdEhlYWQuc2l6ZSgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgbGl2ZUluZGV4QXRI
ZWFkIDogbGl2ZUF0SGVhZCkKLSAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUobGl2ZUluZGV4
QXRIZWFkKTsKLSAgICAgICAgQVNTRVJUKCFtX3dvcmtzZXQuaXNFbXB0eSgpKTsKKyAgICAgICAg
ICAgIG1fd29ya3NldC0+cmVtb3ZlKGxpdmVJbmRleEF0SGVhZCk7CisgICAgICAgIEFTU0VSVCgh
bV93b3Jrc2V0LT5pc0VtcHR5KCkpOwogCi0gICAgICAgIGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFj
aXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0LnNpemUoKSk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgbmV3VmFsdWUgOiBtX3dvcmtzZXQpCisgICAgICAgIGxpdmVBdEhlYWQucmVzZXJ2
ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0LT5zaXplKCkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogKm1fd29ya3NldCkKICAgICAgICAgICAgIGxpdmVB
dEhlYWQudW5jaGVja2VkQXBwZW5kKG5ld1ZhbHVlKTsKIAogICAgICAgICBib29sIGNoYW5nZWRQ
cmVkZWNlc3NvciA9IGZhbHNlOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
IDogYmxvY2stPnByZWRlY2Vzc29ycykgewotICAgICAgICAgICAgYXV0byYgbGl2ZUF0VGFpbCA9
IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5l
d1ZhbHVlIDogbV93b3Jrc2V0KSB7CisgICAgICAgICAgICBIYXNoU2V0PHVuc2lnbmVkLCBEZWZh
dWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8dW5zaWduZWQ+PiYKKyAgICAgICAgICAgICAgICBsaXZlQXRUYWlsID0gbV9saXZlQXRUYWls
W3ByZWRlY2Vzc29yXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbmV3VmFsdWUgOiAqbV93
b3Jrc2V0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVBdFRhaWwuYWRkKG5ld1ZhbHVlKSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZGlydHlCbG9ja3MucXVpY2tTZXQocHJlZGVj
ZXNzb3ItPmluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWRQcmVkZWNlc3Nv
ciA9IHRydWU7CkBAIC0xNzYsMjEgKzE3MCwxNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4g
Y2hhbmdlZFByZWRlY2Vzc29yOwogICAgIH0KIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGRD
aGlsZFVzZShOb2RlKiwgRWRnZSYgZWRnZSkKLSAgICB7Ci0gICAgICAgIGJvb2wgbmV3RW50cnkg
PSBtX3dvcmtzZXQuYWRkKGVkZ2UtPmluZGV4KCkpOwotICAgICAgICBlZGdlLnNldEtpbGxTdGF0
dXMobmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKLSAgICB9Ci0KICAgICAvLyBC
bG9ja3Mgd2l0aCBuZXcgbGl2ZSB2YWx1ZXMgYXQgdGFpbC4KICAgICBCaXRWZWN0b3IgbV9kaXJ0
eUJsb2NrczsKKyAgICAKKyAgICBGbG93SW5kZXhpbmcmIG1faW5kZXhpbmc7CiAKICAgICAvLyBM
aXZlIHZhbHVlcyBwZXIgYmxvY2sgZWRnZS4KICAgICBCbG9ja01hcDxWZWN0b3I8dW5zaWduZWQs
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPj4gbV9saXZlQXRIZWFkOwogICAgIEJsb2NrTWFw
PEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVkPjo6SGFzaCwgV1RGOjpVbnNp
Z25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+PiBtX2xpdmVBdFRhaWw7CiAKICAg
ICAvLyBTaW5nbGUgc3BhcnNlIHNldCBhbGxvY2F0ZWQgb25jZSBhbmQgdXNlZCBieSBldmVyeSBi
YXNpYyBibG9jay4KLSAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV93
b3Jrc2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JP
dmVyZmxvdz4+IG1fd29ya3NldDsKIH07CiAKIGJvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMo
R3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlz
aW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTYwLDE1ICsyNTYwLDE4IEBAIHB1YmxpYzoKICAgICBCYXNpY0Jsb2Nr
KiBvd25lcjsKIH07CiAKLWlubGluZSBib29sIG5vZGVDb21wYXJhdG9yKE5vZGUqIGEsIE5vZGUq
IGIpCi17Ci0gICAgcmV0dXJuIGEtPmluZGV4KCkgPCBiLT5pbmRleCgpOwotfQorc3RydWN0IE5v
ZGVDb21wYXJhdG9yIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOb2RlUHRyVHlwZT4KKyAgICBi
b29sIG9wZXJhdG9yKCkoTm9kZVB0clR5cGUgYSwgTm9kZVB0clR5cGUgYikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBhLT5pbmRleCgpIDwgYi0+aW5kZXgoKTsKKyAgICB9Cit9OwogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQ1N0cmluZyBub2RlTGlzdER1bXAoY29uc3QgVCYgbm9kZUxp
c3QpCiB7Ci0gICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVMaXN0LCBub2RlQ29tcGFyYXRv
cik7CisgICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVMaXN0LCBOb2RlQ29tcGFyYXRvcigp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTI1NzksNyArMjU4Miw3IEBAIENTdHJp
bmcgbm9kZU1hcER1bXAoY29uc3QgVCYgbm9kZU1hcCwgRHUKICAgICAgICAgdHlwZW5hbWUgVDo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVNYXAuYmVnaW4oKTsKICAgICAgICAgaXRlciAhPSBu
b2RlTWFwLmVuZCgpOyArK2l0ZXIpCiAgICAgICAgIGtleXMuYXBwZW5kKGl0ZXItPmtleSk7Ci0g
ICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSwgbm9kZUNvbXBhcmF0b3IpOwor
ICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCksIE5vZGVDb21wYXJhdG9yKCkp
OwogICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKICAgICBDb21tYVByaW50ZXIgY29tbWE7CiAg
ICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7ICsraSkKQEAgLTI1OTMsNyAr
MjU5Niw3IEBAIENTdHJpbmcgbm9kZVZhbHVlUGFpckxpc3REdW1wKGNvbnN0IFQmIG4KICAgICB1
c2luZyBWID0gdHlwZW5hbWUgVDo6VmFsdWVUeXBlOwogICAgIFQgc29ydGVkTGlzdCA9IG5vZGVW
YWx1ZVBhaXJMaXN0OwogICAgIHN0ZDo6c29ydChzb3J0ZWRMaXN0LmJlZ2luKCksIHNvcnRlZExp
c3QuZW5kKCksIFtdKGNvbnN0IFYmIGEsIGNvbnN0IFYmIGIpIHsKLSAgICAgICAgcmV0dXJuIG5v
ZGVDb21wYXJhdG9yKGEubm9kZSwgYi5ub2RlKTsKKyAgICAgICAgcmV0dXJuIE5vZGVDb21wYXJh
dG9yKCkoYS5ub2RlLCBiLm5vZGUpOwogICAgIH0pOwogCiAgICAgU3RyaW5nUHJpbnRTdHJlYW0g
b3V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZUFic3RyYWN0VmFsdWVQYWlyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZUFic3RyYWN0VmFsdWVQ
YWlyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCit2b2lkIE5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChub2RlLCAiPT4iLCB2YWx1ZSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0
VmFsdWVQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVl
LmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7CisgICAg
Tm9kZUFic3RyYWN0VmFsdWVQYWlyKCkgeyB9CisgICAgCisgICAgTm9kZUFic3RyYWN0VmFsdWVQ
YWlyKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBjb25zdCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSkK
KyAgICAgICAgOiBub2RlKG5vZGUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisg
ICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGU7CisgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxv
d1Byb2plY3Rpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Zv
aWQgTm9kZUZsb3dQcm9qZWN0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIi0iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoa2luZCgpID09IFByaW1hcnkpIHsKKyAgICAgICAgb3V0LnByaW50
KG5vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KCJzaGFkb3co
Iiwgbm9kZSgpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlRmxvd1Byb2plY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTm9kZUZsb3dQcm9qZWN0aW9uIHsKK3B1YmxpYzoK
KyAgICBlbnVtIEtpbmQgeworICAgICAgICBQcmltYXJ5LAorICAgICAgICBTaGFkb3cKKyAgICB9
OworICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbigpIHsgfQorICAgIAorICAgIE5vZGVGbG93
UHJvamVjdGlvbihOb2RlKiBub2RlKQorICAgICAgICA6IG1fd29yZChiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90Pihub2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlv
bihOb2RlKiBub2RlLCBLaW5kIGtpbmQpCisgICAgICAgIDogbV93b3JkKGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KG5vZGUpIHwgKGtpbmQgPT0gU2hhZG93ID8gc2hhZG93Qml0IDogMCkpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fd29yZChzaGFkb3dCaXQpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3dv
cmQ7IH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiAobV93b3JkICYgc2hh
ZG93Qml0KSA/IFNoYWRvdyA6IFByaW1hcnk7IH0KKyAgICAKKyAgICBOb2RlKiBub2RlKCkgY29u
c3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX3dvcmQgJiB+c2hhZG93Qml0KTsgfQor
ICAgIAorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpub2RlKCk7IH0KKyAg
ICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbm9kZSgpOyB9CisgICAgCisgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV93b3JkOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oTm9kZUZsb3dQcm9qZWN0aW9uIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd29yZCA9PSBvdGhlci5tX3dvcmQ7CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShOb2RlRmxvd1Byb2plY3Rpb24gb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3I8KE5vZGVGbG93UHJvamVjdGlvbiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgpKQorICAgICAgICAgICAgcmV0
dXJuIGtpbmQoKSA8IG90aGVyLmtpbmQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGUoKSA8IG90aGVy
Lm5vZGUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj4oTm9kZUZsb3dQcm9qZWN0
aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG90aGVyIDwgKnRoaXM7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8PShOb2RlRmxvd1Byb2plY3Rpb24gb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA+IG90aGVyKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj49KE5vZGVGbG93UHJvamVjdGlvbiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzIDwgb3RoZXIpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAqdGhpcyA9PSBOb2RlRmxvd1Byb2plY3Rpb24oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWUpOworICAgIH0KKyAgICAKKyAgICAvLyBQaGkgc2hhZG93IHByb2plY3Rpb25zIGNhbiBiZWNv
bWUgaW52YWxpZCBiZWNhdXNlIHRoZSBQaGkgbWlnaHQgYmUgZm9sZGVkIHRvIHNvbWV0aGluZyBl
bHNlLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyAmJiAoa2luZCgpID09IFByaW1hcnkgfHwgbm9kZSgpLT5vcCgpID09IFBoaSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChOb2RlKiBu
b2RlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAgZnVuYyhOb2RlRmxvd1Byb2pl
Y3Rpb24obm9kZSkpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBQaGkpCisgICAgICAgICAg
ICBmdW5jKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBTaGFkb3cpKTsKKyAgICB9CisgICAgCitw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBzaGFkb3dCaXQgPSAxOworICAgIAor
ICAgIHVpbnRwdHJfdCBtX3dvcmQgeyAwIH07Cit9OworCitzdHJ1Y3QgTm9kZUZsb3dQcm9qZWN0
aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goTm9kZUZsb3dQcm9qZWN0aW9uIGtl
eSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKE5vZGVGbG93
UHJvamVjdGlvbiBhLCBOb2RlRmxvd1Byb2plY3Rpb24gYikgeyByZXR1cm4gYSA9PSBiOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1
Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbj4geworICAgIHR5cGVk
ZWYgSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbkhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRy
YWl0czxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0
czxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDExICsx
MjYsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIHN0
YXRlLWF0LXRhaWwgYmFzZWQgb24gdGhlIGVwb2NocyBvZiBsaXZlIG5vZGVzIGFuZCB0aGUKICAg
ICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBlcG9jaC4gV2UgZ3JvdyBzdGF0ZS1hdC10YWls
IG1vbm90b25pY2FsbHkgdG8gZW5zdXJlIGNvbnZlcmdlbmNlLgogICAgICAgICAgICAgICAgICAg
ICBib29sIHRoaXNCbG9ja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFp
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUua2luZCgpID09IE5vZGVGbG93
UHJvamVjdGlvbjo6U2hhZG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmVwb2NoKCkgIT0gbV9jdXJyZW50
RXBvY2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSBpcyBv
bGRlciB0aGFuIHRoZSBjdXJyZW50IGVwb2NoLCB0aGVuIHdlIG1heSBuZWVkIHRvCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gcnVuIGEgYmFycmllciBvbiBpdCBpbiB0aGUgZnV0dXJl
LiBTbywgYWRkIGl0IHRvIHRoZSBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3RhdGVBdFRhaWwtPmF0KGJsb2NrKS5hZGQobm9kZSkuaXNO
ZXdFbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzQmxvY2tDaGFuZ2VkIHw9
IG1fc3RhdGVBdFRhaWwtPmF0KGJsb2NrKS5hZGQobm9kZS5ub2RlKCkpLmlzTmV3RW50cnk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0xNzgsOCArMTgwLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgbV9zdGF0ZS0+YmVnaW5CYXNpY0Jsb2NrKGJs
b2NrKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2st
PnNzYS0+bGl2ZUF0SGVhZCkgewotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlQXRIZWFkLT5h
dChibG9jaykuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZUZsb3dQcm9q
ZWN0aW9uIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgICAgICAgICAg
aWYgKG5vZGUua2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZUF0SGVhZC0+
YXQoYmxvY2spLmNvbnRhaW5zKG5vZGUubm9kZSgpKSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBJZiBwcmV2aW91cyBibG9ja3MgdGVsbCB1cyB0aGF0IHRoaXMgbm9kZSBtYXkgbmVlZCBhIGJh
cnJpZXIgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVyZSwgdGhlbiBwdXQgaXQg
aW4gdGhlIGFuY2llbnQgcHJpbW9yZGlhbCBlcG9jaC4gVGhpcyBmb3JjZXMgdXMgdG8KICAgICAg
ICAgICAgICAgICAgICAgLy8gZW1pdCBhIGJhcnJpZXIgb24gYW55IHBvc3NpYmx5LWNlbGwgc3Rv
cmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVwb2NoIG9mIHRoZQpAQCAtMzI2LDcgKzMzMCw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIFVwc2lsb246Ci0gICAgICAgICAgICAgICAgbV9ub2RlLT5waGkoKS0+c2V0RXBv
Y2gobV9ub2RlLT5lcG9jaCgpKTsKKyAgICAgICAgICAgICAgICAvLyBBc3N1bWUgdGhlIHdvcnN0
IGZvciBQaGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBQaGkgc2hhZG93
cy4KKyAgICAgICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRFcG9jaChFcG9jaCgpKTsKICAg
ICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwODMzOSkKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYt
MTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBERkcgcGxh
eXMgZmFzdCBhbmQgbG9vc2Ugd2l0aCB0aGUgc2hhZG93IHZhbHVlcyBvZiBhIFBoaQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MzA5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBNYWRlIHRo
aXMgQVBJIHVzZSBzaXplIHJhdGhlciB0aGFuIG1heEluZGV4IGFzIGl0cyBpbml0aWFsaXphdGlv
biBwYXJhbWV0ZXIsIGJlY2F1c2UgdGhhdCdzCisgICAgICAgIGxlc3MgY29uZnVzaW5nLgorCisg
ICAgICAgICogd3RmL0luZGV4U3BhcnNlU2V0Lmg6CisgICAgICAgIChXVEY6OkluZGV4U3BhcnNl
U2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KToKKwogMjAxNi0xMS0wMiAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSBHQyBzaG91bGQgYmUg
aW4gYSB0aHJlYWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4U3BhcnNlU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAkocmV2aXNpb24gMjA4MzM5
KQorKysgU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzCiBj
bGFzcyBJbmRleFNwYXJzZVNldCB7CiAgICAgdHlwZWRlZiBWZWN0b3I8dW5zaWduZWQsIDAsIE92
ZXJmbG93SGFuZGxlcj4gVmFsdWVMaXN0OwogcHVibGljOgotICAgIGV4cGxpY2l0IEluZGV4U3Bh
cnNlU2V0KHVuc2lnbmVkIG1heFZhbHVlKTsKKyAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1
bnNpZ25lZCBzaXplKTsKIAogICAgIGJvb2wgYWRkKHVuc2lnbmVkKTsKICAgICBib29sIHJlbW92
ZSh1bnNpZ25lZCk7CkBAIC02NSw5ICs2NSw5IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dI
YW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4VmFsdWUpCitpbmxpbmUgSW5kZXhT
cGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQodW5zaWduZWQgc2l6ZSkK
IHsKLSAgICBtX21hcC5yZXNpemUobWF4VmFsdWUgKyAxKTsKKyAgICBtX21hcC5yZXNpemUoc2l6
ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293836</attachid>
            <date>2016-11-03 17:43:44 -0700</date>
            <delta_ts>2016-11-03 17:46:08 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82143</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzMzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIHBsYXlzIGZhc3QgYW5kIGxvb3NlIHdpdGggdGhlIHNoYWRvdyB2
YWx1ZXMgb2YgYSBQaGkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDMwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB3aHkgdGhlIERGRyBuZWVkcyB0
byByZWNvZ25pemUgdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBoaS4KKworICAgICAgICAqIHN0cmVz
cy9kZmctc3NhLXN3YXAuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNi0xMS0wMyAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc2tpbmcgZm9yIGEg
dmFsdWUgcHJvZmlsZSBwcmVkaWN0aW9uIHNob3VsZCBiZSBkZWZlbnNpdmUgYWdhaW5zdCBub3Qg
ZmluZGluZyBhIHZhbHVlIHByb2ZpbGUKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy1zc2Etc3dh
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3NhLXN3YXAuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLXNzYS1zd2FwLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOCBAQAordmFyIGksYz0wOworZnVuY3Rpb24gZm9vKCkKK3sKKyAgICB2YXIg
YT0xLGI7Zm9yKGk9MDtpPDI7KytpKXtbYSxiXT1bYixhXTtjKyt9aWYoIWFeYil0aHJvdyBjCit9
Citub0lubGluZShmb28pOworZm9yKHZhciBrID0gMDsgayA8IDEwMDAwOyArK2spCisgICAgZm9v
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
NiBAQAorMjAxNi0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBwbGF5cyBmYXN0IGFuZCBsb29zZSB3aXRoIHRoZSBzaGFkb3cgdmFsdWVzIG9mIGEg
UGhpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQz
MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIE9oIGJveSwgd2hhdCBhbiBlbWJhcnJhc3NpbmcgbWlzdGFrZSEgVGhlIHN0eWxlIG9mIFNT
QSBJIGxpa2UgdG8gdXNlIGF2b2lkcyBibG9jay92YWx1ZQorICAgICAgICB0dXBsZXMgYXMgcGFy
YW1ldGVycyBvZiBhIFBoaSwgdGhlcmVieSBzaW1wbGlmeWluZyBDRkcgdHJhbnNmb3JtYXRpb25z
IGFuZCBtYWtpbmcgUGhpIGxhcmdlbHkKKyAgICAgICAgbm90IGEgc3BlY2lhbCBjYXNlIGZvciBt
b3N0IGNvbXBpbGVyIHRyYW5zZm9ybXMuIEl0IGRvZXMgdGhpcyBieSBpbnRyb2R1Y2luZyBhbm90
aGVyIHZhbHVlCisgICAgICAgIGNhbGxlZCBVcHNpbG9uLCB3aGljaCBzdG9yZXMgYSB2YWx1ZSBp
bnRvIHNvbWUgUGhpLgorICAgICAgICAKKyAgICAgICAgQjMgdXNlcyB0aGlzIGFsc28uIFRoZSBl
YXNpZXN0IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgVXBzaWxvbi9QaGkgYmVoYXZlIGxpa2UgaXMg
dG8gbG9vayBhdAorICAgICAgICB0aGUgQjMtPkFpciBsb3dlcmluZy4gQWlyIGlzIG5vdCBTU0Eg
LSBpdCBoYXMgVG1wcyB0aGF0IHlvdSBjYW4gYXNzaWduIHRvIGFuZCB1c2UgYXMgbWFueQorICAg
ICAgICB0aW1lcyBhcyB5b3UgbGlrZS4gQjMgYWxsb2NhdGVzIG9uZSBUbXAgcGVyIFZhbHVlLCBh
bmQgYW4gZXh0cmEgInBoaVRtcCIgZm9yIFBoaXMsIHNvIHRoYXQKKyAgICAgICAgUGhpcyBnZXQg
dHdvIFRtcHMgdG90YWwuIFVwc2lsb24gc3RvcmVzIHRoZSB2YWx1ZSBpbnRvIHRoZSBwaGlUbXAg
b2YgdGhlIFBoaSwgd2hpbGUgUGhpIG1vdmVzCisgICAgICAgIHRoZSB2YWx1ZSBmcm9tIGl0cyBw
aGlUbXAgdG8gaXRzIHRtcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRv
IHN1cHBvcnQgc2NlbmFyaW9zIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAgICAgICBhOiBQ
aGkoKQorICAgICAgICAgICAgYjogVXBzaWxvbihAeCwgXmEpCisgICAgICAgICAgICBjOiBVc2Uo
QGEpCisgICAgICAgIAorICAgICAgICBIZXJlLCB3ZSB3YW50IEBjIHRvIHNlZSBAYSdzIHZhbHVl
IGJlZm9yZSBAYi4gVGhhdCdzIGEgdmVyeSBiYXNpYyByZXF1aXJlbWVudCBvZiBTU0E6IHRoYXQK
KyAgICAgICAgdGhlIGEgdmFsdWUgKGxpa2UgQGEpIGRvZXNuJ3QgY2hhbmdlIGR1cmluZyBpdHMg
bGlmZXRpbWUuCisgICAgICAgIAorICAgICAgICBVbmZvcnR1bmF0ZWx5LCBERkcnYSBsaXZlbmVz
cyBhbmFseXNpcywgYWJzdHJhY3QgaW50ZXJwcmV0ZXIsIGFuZCBpbnRlZ2VyIHJhbmdlIG9wdGlt
aXphdGlvbgorICAgICAgICBhbGwgZmFpbGVkIHRvIGNvcnJlY3RseSBtb2RlbCBVcHNpbG9uL1Bo
aSB0aGlzIHdheS4gVGhleSB3b3VsZCBhc3N1bWUgdGhhdCBpdCdzIGFjY3VyYXRlIHRvCisgICAg
ICAgIG1vZGVsIHRoZSBVcHNpbG9uIGFzIHN0b3JpbmcgaW50byB0aGUgUGhpIGRpcmVjdGx5Lgor
ICAgICAgICAKKyAgICAgICAgQmVjYXVzZSBERkcgZG9lcyBmbG93IGFuYWx5c2lzIG92ZXIgU1NB
LCBtYWtpbmcgaXQgY29ycmVjdCBtZWFucyBlbmFibGluZyBpdCB0byBzcGVhayBvZiB0aGUKKyAg
ICAgICAgc2hhZG93IHZhbHVlLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5
IGludHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIGEKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9u
LiBUaGlzIGlzIGEga2V5IHRoYXQgbGV0cyB1cyBzcGVhayBvZiBib3RoIGEgTm9kZSdzIHByaW1h
cnkgdmFsdWUgYW5kIGl0cworICAgICAgICBvcHRpb25hbCAic2hhZG93IiB2YWx1ZS4gTGl2ZW5l
c3MsIEFJLCBhbmQgaW50ZWdlciByYW5nZSBhcmUgbm93IGtleWVkIGJ5IE5vZGVGbG93UHJvamVj
dGlvbgorICAgICAgICByYXRoZXIgdGhhbiBOb2RlKi4gQ29uY2VwdHVhbGx5IHRoaXMgdHVybnMg
b3V0IHRvIGJlIGEgdmVyeSBzaW1wbGUgY2hhbmdlLCBidXQgaXQgZG9lcyB0b3VjaAorICAgICAg
ICBhIGdvb2QgYW1vdW50IG9mIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIGxvb2tzIHRv
IGJlIHBlcmYtbmV1dHJhbC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMv
YWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzQWRh
cHRlcjo6bnVtSW5kaWNlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdExpdmVu
ZXNzQWRhcHRlcjo6bnVtSW5kaWNlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVu
ZXNzQWRhcHRlcjo6bnVtSW5kaWNlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0
TGl2ZW5lc3M6OkFic3RyYWN0TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBM
aXZlbmVzc0FkYXB0ZXI6Om1heEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyOjptYXhJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVuZXNzQWRhcHRlcjo6bWF4SW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6Zm9yTm9kZSk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFs
dWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9y
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpsaXZlTm9kZXNBdEhlYWQpOgorICAgICAgICAqIGRmZy9ERkdD
b21iaW5lZExpdmVuZXNzLmg6CisgICAgICAgICogZGZnL0RGR0Zsb3dJbmRleGluZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6Rmxvd0luZGV4aW5nKToKKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6On5GbG93SW5kZXhpbmcpOgorICAgICAgICAo
SlNDOjpERkc6OkZsb3dJbmRleGluZzo6cmVjb21wdXRlKToKKyAgICAgICAgKiBkZmcvREZHRmxv
d0luZGV4aW5nLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6Z3Jh
cGgpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6bnVtSW5kaWNlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjppbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6
Rmxvd0luZGV4aW5nOjpzaGFkb3dJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4
aW5nOjpub2RlUHJvamVjdGlvbik6CisgICAgICAgICogZGZnL0RGR0Zsb3dNYXAuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6Rmxvd01hcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Rmxvd01hcDo6cmVzaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpncmFwaCk6
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6YXQpOgorICAgICAgICAoSlNDOjpERkc6OkZs
b3dNYXA6OmF0U2hhZG93KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphYnN0
cmFjdFZhbHVlc0NhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJ
blBsYWNlQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6OmJlZ2luQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6c2V0TGl2ZVZhbHVl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZSk6Cisg
ICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFs
eXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Okxp
dmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U6OnByb2Nlc3NCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NB
bmFseXNpc1BoYXNlOjphZGRDaGlsZFVzZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bm9kZUxpc3REdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpub2Rl
TWFwRHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZVZhbHVlUGFpckxpc3REdW1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpub2RlQ29tcGFyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR05vZGVBYnN0
cmFjdFZhbHVlUGFpci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlQWJzdHJhY3RW
YWx1ZVBhaXI6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcik6CisgICAgICAgICogZGZnL0RGR05vZGVG
bG93UHJvamVjdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJv
amVjdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Ok5vZGVGbG93UHJv
amVjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRv
ciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246OmtpbmQpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6bm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3ItPik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZUZsb3dQcm9qZWN0aW9uOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1By
b2plY3Rpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVj
dGlvbjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9u
OjpvcGVyYXRvcjwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJhdG9y
PD0pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3I+PSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjppc1N0aWxs
VmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6Zm9yRWFjaCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uSGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAq
IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6CisKIDIwMTYtMTEtMDMgIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgY2hhbmdlbG9nIGZpeCBkdWUgdG8gZmFpbGVkIGdpdCByZWJhc2UuLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEy
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHRmFpbGVkRmluYWxp
emVyLmNwcAogICAgIGRmZy9ERkdGaW5hbGl6ZXIuY3BwCiAgICAgZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCisgICAgZGZnL0RGR0Zsb3dJbmRleGluZy5jcHAKICAgICBkZmcvREZHRmx1c2hGb3JtYXQu
Y3BwCiAgICAgZGZnL0RGR0ZsdXNoZWRBdC5jcHAKICAgICBkZmcvREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTM0Myw3ICszNDQsOSBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKICAgICBk
ZmcvREZHTmF0dXJhbExvb3BzLmNwcAogICAgIGRmZy9ERkdOb2RlLmNwcAorICAgIGRmZy9ERkdO
b2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKKyAgICBk
ZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAogICAgIGRmZy9ERkdOb2RlT3JpZ2luLmNwcAog
ICAgIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAogICAgIGRmZy9ERkdP
U1JFbnRyeS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQkw
RjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQw
MDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0Ey
MUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNC
QzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIw
MTc3RjFEQ0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1
MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovOyB9OworCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5
NTAgLyogREZHRmxvd0luZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5n
LmggKi87IH07CisJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4MTFEQ0FE
RDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovOyB9OworCQkwRjIwMTc4NTFEQ0FFMTQ5MDBF
QTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9k
ZUZsb3dQcm9qZWN0aW9uLmggKi87IH07CisJCTBGMjAxNzg2MURDQUUxNEMwMEVBNTk1MCAvKiBE
RkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMDE3ODMxRENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJv
amVjdGlvbi5jcHAgKi87IH07CisJCTBGMjAxNzg5MURDQjk0MjQwMEVBNTk1MCAvKiBERkdOb2Rl
QWJzdHJhY3RWYWx1ZVBhaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIuaCAqLzsgfTsKKwkJMEYyMDE3OEExRENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0
cmFjdFZhbHVlUGFpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIwMTc4NzFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQ
YWlyLmNwcCAqLzsgfTsKIAkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdp
c3Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIwQzI1ODFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCAqLzsgfTsKIAkJ
MEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcy
NzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRC
IC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZl
bnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTI1MTcsNiArMjUyNCwxMyBAQAogCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZH
U2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
U2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyog
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHBhdGggPSBkZmcvREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGRTUxQjE5
MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWJvcnRSZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
MDE3N0QxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbG93SW5kZXhpbmcuY3BwOyBwYXRoID0gZGZn
L0RGR0Zsb3dJbmRleGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAx
NzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmg7IHBhdGggPSBkZmcvREZHRmxvd0lu
ZGV4aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzgxMURDQURENDAw
MEVBNTk1MCAvKiBERkdGbG93TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0Zsb3dNYXAuaDsgcGF0aCA9IGRmZy9ERkdGbG93TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2pl
Y3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZUZs
b3dQcm9qZWN0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyog
REZHTm9kZUZsb3dQcm9qZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR05vZGVGbG93UHJvamVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR05vZGVGbG93UHJvamVjdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4NzFEQ0I5NDIyMDBFQTU5
NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHBhdGggPSBkZmcv
REZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyMDE3ODgxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuaDsgcGF0aCA9IGRmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdp
c3Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXJ0dWFsUmVn
aXN0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3OTE0QkU3Mjcz
MDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlQ29udmVudGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY3MjksOCArNjc0Myw2IEBACiAJ
CQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYy
RkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKIAkJCQkwRjJGQzc3
MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKLQkJCQlFMzIyRTVBMDFEQTY0
NDM1MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgKi8sCi0JCQkJRTMy
MkU1QTExREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCAqLywK
IAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNw
cCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZp
ZXJzLmggKi8sCiAJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLywKQEAgLTY3NDUsNiArNjc1Nyw4IEBACiAJCQkJMEY1QTEyNzExOTJEOUZE
RjAwODc2NEEzIC8qIERGR0RvZXNHQy5jcHAgKi8sCiAJCQkJMEY1QTEyNzIxOTJEOUZERjAwODc2
NEEzIC8qIERGR0RvZXNHQy5oICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggKi8sCisJCQkJRTMyMkU1QTAxREE2NDQzNTAwNkU3NzA5IC8qIERGR0RP
TUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwICovLAorCQkJCUUzMjJFNUExMURBNjQ0MzUwMDZFNzcw
OSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JB
RDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8sCiAJCQkJMEZEM0M4MjAxNDEx
NUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8sCiAJCQkJMEZEM0M4MjIxNDExNUQwRTAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oICovLApAQCAtNjc2MSw2ICs2Nzc1LDkgQEAKIAkJCQlBNzhB
OTc2RjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggKi8sCiAJCQkJMEYyQkRDMTIx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovLAogCQkJCTBGMkJEQzEzMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8sCisJCQkJMEYyMDE3N0QxRENBREMz
MDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgKi8sCisJCQkJMEYyMDE3N0UxRENBREMz
MDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oICovLAorCQkJCTBGMjAxNzgxMURDQURENDAw
MEVBNTk1MCAvKiBERkdGbG93TWFwLmggKi8sCiAJCQkJMEY5RDMzOTQxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5jcHAgKi8sCiAJCQkJMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8q
IERGR0ZsdXNoZWRBdC5oICovLAogCQkJCUE3RDg5Q0U4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5jcHAgKi8sCkBAIC02ODI4LDkgKzY4NDUsMTMgQEAKIAkJCQlBNzM3ODEwQjE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2
Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJC
MkFENyAvKiBERkdOb2RlLmggKi8sCisJCQkJMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERG
R05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi8sCisJCQkJMEYyMDE3ODgxRENCOTQyMjAwRUE1
OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5oICovLAogCQkJCTBGQjRCNTFGMTZCNjI3
NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNTgxQjcxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgKi8sCiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAw
QjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAorCQkJCTBGMjAxNzgzMURDQUUxNDcwMEVBNTk1
MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwICovLAorCQkJCTBGMjAxNzg0MURDQUUxNDcw
MEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uaCAqLywKIAkJCQkwRjVEMDg1QzFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8sCiAJCQkJMEYzMDBCNzcxOEFCMDUx
MTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLywKIAkJCQkwRkE1ODFCOTE1MEU5NTJBMDBC
OUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKQEAgLTc2MTIsNiArNzYzMyw3IEBACiAJCQkJMEZF
Qzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMzM4REZBMUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzM4RTE2MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
Q2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJC
RkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTg0OTgsNiArODUyMCw3IEBA
CiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzg1MURDQUUxNDkwMEVBNTk1MCAvKiBE
RkdOb2RlRmxvd1Byb2plY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNTU1QjhBMURBRTAz
QTUwMEYzNjkyMSAvKiBET01KSVRDYWxsRE9NR2V0dGVyUGF0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzBFQzBFQzMxQUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMDcwQTQ3MUQ1NDNBOEIwMDZFNzIzMiAvKiBDZWxsQ29udGFp
bmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg1OTUsNiArODYxOCw3IEBACiAJCQkJMTQxNDQ4Q0Ix
M0ExNzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MkQ2RjEyMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMjAxNzg5MURDQjk0MjQwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRj
aFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8q
IE1hdGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg2NjMsNiArODY4Nyw3IEBACiAJ
CQkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERGR051bGxBYnN0
cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMg
LyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMDE3ODAxRENB
REMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NTgsNiArOTg4Myw3IEBACiAJ
CQkJQTU4NDBFMjAxODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQTc2MjA0MURCOTI0MjYwMEI3QTJGRCAvKiBDb2xsZWN0aW9u
U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4QTdCRUYxQjgyOTc1QTAwMkQ5MTU3IC8q
IElubGluZUNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIwMTc4QTFEQ0I5NDI2
MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjRFNTU1MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJ
bnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAwODcsNiArMTAx
MTMsNyBAQAogCQkJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBN
ZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAxNzdGMURDQURDMzMw
MEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2
N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTM3OTRFNzUxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFuYWx5
emVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNTVGMzUyMUI3REM4NTMwMEM1MERDNSAvKiBN
b2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDE4NCw2ICsxMDIx
MSw3IEBACiAJCQkJQTVGRDAwNjcxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA2RDE4OUIwMEFBMDA2MzMyMzEgLyogU2NyaXB0
Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDZGMTg5QjAwQUEwMDYzMzIz
MSAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3ODYxRENB
RTE0QzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNUZEMDA3RDE4OUIwQjRDMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyNTE4OEVGRkZEMDAxMTBGMTQgLyogU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1RDkzQTUxODUwMTJBODAwNDAw
REVEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDIwODMzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFwdGVyIHsKIAogICAg
IFRtcExpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgbWF4
SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2RlJiBj
b2RlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUubnVtVG1wcyhhZGFw
dGVyVHlwZSk7CiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxhZGFwdGVyVHlwZT46
OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CkBAIC02NSw5ICs2NSw5IEBAIHN0cnVjdCBTdGFja1Ns
b3RMaXZlbmVzc0FkYXB0ZXIgewogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQg
bWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2Rl
JiBjb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSAt
IDE7CisgICAgICAgIHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgfQogICAg
IHN0YXRpYyBib29sIGFjY2VwdHNUeXBlKEFyZzo6VHlwZSkgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHN0YXRpYyB1bnNpZ25lZCB2YWx1ZVRvSW5kZXgoU3RhY2tTbG90KiBzdGFja1Nsb3QpIHsgcmV0
dXJuIHN0YWNrU2xvdC0+aW5kZXgoKTsgfQpAQCAtODMsOSArODMsOSBAQCBzdHJ1Y3QgUmVnTGl2
ZW5lc3NBZGFwdGVyIHsKIAogICAgIFJlZ0xpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAg
ICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYpCisgICAgc3RhdGljIHVuc2lnbmVkIG51
bUluZGljZXMoQ29kZSYpCiAgICAgewotICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpOwor
ICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpICsgMTsKICAgICB9CiAKICAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzVHlwZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTEwMSw3ICsx
MDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBjb2RlKQog
ICAgICAgICA6IEFkYXB0ZXIoY29kZSkKLSAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6bWF4
SW5kZXgoY29kZSkpCisgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om51bUluZGljZXMoY29k
ZSkpCiAgICAgICAgICwgbV9saXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQogICAgICAgICAsIG1fbGl2
ZUF0VGFpbChjb2RlLnNpemUoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjA4MzM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rp
b24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNs
dWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKICNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MSw3ICs0Miw3IEBAIHB1
YmxpYzoKICAgICBBYnN0cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJhY3RTdGF0ZVR5cGUm
KTsKICAgICB+QWJzdHJhY3RJbnRlcnByZXRlcigpOwogICAgIAotICAgIEFic3RyYWN0VmFsdWUm
IGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93
UHJvamVjdGlvbiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhdGUuZm9yTm9kZShu
b2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDgzMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MTcsNiArMjgxNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICBmb3JO
b2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQcm9q
ZWN0aW9uOjpTaGFkb3cpKTsKICAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3Vs
ZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUgYmVjb21lIGEKICAg
ICAgICAgLy8gY29uc3RhbnQsIGluIHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRvIGtub3cuCiAgICAg
ICAgIGlmIChmb3JOb2RlKG5vZGUpLm1fdmFsdWUpCkBAIC0yODI0LDggKzI4MjUsMTEgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgIG1fc3RhdGUuY3JlYXRlVmFsdWVG
b3JOb2RlKG5vZGUtPnBoaSgpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5waGkoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uIHNoYWRvdyhu
b2RlLT5waGkoKSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOworICAgICAgICBpZiAoc2hh
ZG93LmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBtX3N0YXRlLmNyZWF0ZVZhbHVlRm9y
Tm9kZShzaGFkb3cpOworICAgICAgICAgICAgZm9yTm9kZShzaGFkb3cpID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
QEAgLTI5NzcsMTEgKzI5ODEsMTggQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGVsc2UKICAgICAgICAgY2xvYmJlckxpbWl0Kys7CiAgICAgQVNTRVJUKGNs
b2JiZXJMaW1pdCA8PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IGNsb2JiZXJMaW1pdDsgaS0tOykKLSAgICAgICAgZnVuY3Rvcihmb3JOb2RlKG1fc3RhdGUu
YmxvY2soKS0+YXQoaSkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gY2xvYmJlckxpbWl0OyBpLS07
KSB7CisgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbjo6Zm9yRWFjaCgKKyAgICAgICAgICAgIG1f
c3RhdGUuYmxvY2soKS0+YXQoaSksCisgICAgICAgICAgICBbJl0gKE5vZGVGbG93UHJvamVjdGlv
biBub2RlUHJvamVjdGlvbikgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShub2Rl
UHJvamVjdGlvbikpOworICAgICAgICAgICAgfSk7CisgICAgfQogICAgIGlmIChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zdGF0ZS5ibG9jaygp
LT5zc2EtPmxpdmVBdEhlYWQpCi0gICAgICAgICAgICBmdW5jdG9yKGZvck5vZGUobm9kZSkpOwor
ICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5z
c2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzU3RpbGxWYWxpZCgpKQor
ICAgICAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShub2RlKSk7CisgICAgICAgIH0KICAgICB9
CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgaS0tOykKICAgICAgICAgZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50
KGkpKTsKQEAgLTMwMzcsOSArMzA0OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgogdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KQogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwotICAg
IEhhc2hTZXQ8Tm9kZSo+IHNlZW47CisgICAgSGFzaFNldDxOb2RlRmxvd1Byb2plY3Rpb24+IHNl
ZW47CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICBmb3Ig
KE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhl
YWQpIHsKICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGUpOwogICAgICAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xl
YXIoKSkKQEAgLTMwNDgsMTUgKzMwNTksMTcgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9zdGF0ZS5ibG9jaygpLT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0g
bV9zdGF0ZS5ibG9jaygpLT5hdChpKTsKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7Ci0gICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAgaWYgKHZhbHVl
LmlzQ2xlYXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoY29t
bWEsIG5vZGUsICI6IiwgdmFsdWUpOworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVh
Y2goCisgICAgICAgICAgICBtX3N0YXRlLmJsb2NrKCktPmF0KGkpLCBbJl0gKE5vZGVGbG93UHJv
amVjdGlvbiBub2RlUHJvamVjdGlvbikgeworICAgICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGVQ
cm9qZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZVByb2plY3Rpb24pOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIG5vZGVQcm9qZWN0aW9uLCAiOiIsIHZhbHVlKTsKKyAgICAgICAgICAgIH0pOwogICAg
IH0KICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9kZSog
bm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgIGZvciAo
Tm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFp
bCkgewogICAgICAgICAgICAgaWYgKHNlZW4uY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0
U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDE2ICs0NywxNiBAQCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0YXRl
CiAKIEF0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CiAKLXZv
aWQgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUpCit2
b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZSkKIHsKICAgICBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKS5hZGQobm9k
ZSwgQWJzdHJhY3RWYWx1ZSgpKTsKIH0KIAotQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Zm9yTm9kZShOb2RlKiBub2RlKQorQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Zm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAgICBhdXRvJiB2YWx1
ZXNBdFRhaWwgPSBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKTsKLSAgICBIYXNoTWFwPE5v
ZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5v
ZGUpOwotICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaXRlciAhPSB2YWx1ZXNBdFRhaWwu
ZW5kKCkpOworICAgIEhhc2hNYXA8Tm9kZUZsb3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVlPjo6
aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOworICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZS5ub2RlKCksIGl0ZXIgIT0gdmFsdWVzQXRUYWlsLmVuZCgpKTsKICAgICBy
ZXR1cm4gaXRlci0+dmFsdWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAyMDgzMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNp
bmNsdWRlICJERkdCbG9ja01hcC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAi
REZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsgCiAKQEAgLTQ3LDggKzQ4LDggQEAgcHVibGljOgogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKTsKLSAgICBB
YnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqKTsKKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9k
ZShOb2RlRmxvd1Byb2plY3Rpb24pOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZs
b3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyBy
ZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7IH0KICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVl
PiYgdmFyaWFibGVzKCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9CiAgICAgCkBA
IC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsK
LSAgICBCbG9ja01hcDxIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRh
aWxNYXA7CisgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlRmxvd1Byb2plY3Rpb24sIEFic3RyYWN0
VmFsdWU+PiBtX3ZhbHVlc0F0VGFpbE1hcDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVs
bHB0ciB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRB
dC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKQEAgLTI0OCwxMiArMjQ5
LDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBB
dmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRIZWFkOwogICAgICAgICBBdmFpbGFiaWxpdHlN
YXAgYXZhaWxhYmlsaXR5QXRUYWlsOwogCi0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0SGVh
ZDsKLSAgICAgICAgVmVjdG9yPE5vZGUqPiBsaXZlQXRUYWlsOwotICAgICAgICBzdHJ1Y3QgTm9k
ZUFic3RyYWN0VmFsdWVQYWlyIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgICAgICB9OworICAgICAgICBWZWN0b3I8Tm9kZUZs
b3dQcm9qZWN0aW9uPiBsaXZlQXRIZWFkOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0
aW9uPiBsaXZlQXRUYWlsOwogICAgICAgICBWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiB2
YWx1ZXNBdEhlYWQ7CiAgICAgICAgIFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZhbHVl
c0F0VGFpbDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bWJpbmVkTGl2ZW5lc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDggKzM4LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIEhhc2hT
ZXQ8Tm9kZSo+IGxpdmVOb2Rlc0F0SGVhZChHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJsb2Nr
KQogewogICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47Ci0gICAgZm9yIChOb2RlKiBub2RlIDogYmxv
Y2stPnNzYS0+bGl2ZUF0SGVhZCkKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgZm9yIChO
b2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAg
ICAgaWYgKG5vZGUua2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeSkKKyAgICAg
ICAgICAgIHNlZW4uYWRkKG5vZGUubm9kZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQXZhaWxhYmls
aXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7
CiAgICAgZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAkocmV2aXNpb24gMjA4
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzUsNiArMzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogLy8gUmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIGxpdmUgYXQgdGFpbCwgYm90aCBkdWUg
dG8gZHVlIERGRyBhbmQgZHVlIHRvIGJ5dGVjb2RlIChpLmUuIE9TUiBleGl0KS4KIEhhc2hTZXQ8
Tm9kZSo+IGxpdmVOb2Rlc0F0SGVhZChHcmFwaCYsIEJhc2ljQmxvY2sqKTsKIAorLy8gV0FSTklO
RzogVGhpcyBjdXJyZW50bHkgZG9lcyBub3QgcmVhc29uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiBz
aGFkb3cgdmFsdWVzLiBUaGUgZXhlY3V0aW9uCisvLyBzZW1hbnRpY3Mgb2YgREZHIFNTQSBhcmUg
dGhhdCBhbiBVcHNpbG9uIHN0b3JlcyB0byB0aGUgc2hhZG93IHZhbHVlIG9mIGEgUGhpLCBhbmQg
dGhlIFBoaSBsb2FkcworLy8gZnJvbSB0aGF0IHNoYWRvdyB2YWx1ZS4gSGVuY2UsIHRoZSBzaGFk
b3cgdmFsdWVzIGFyZSBsaWtlIHZhcmlhYmxlcywgYW5kIGhhdmUgbGl2ZW5lc3MuIFRoZSBub3Jt
YWwKKy8vIGxpdmVuZXNzIGFuYWx5c2lzIHdpbGwgdGVsbCB5b3UgYWJvdXQgdGhlIGxpdmVuZXNz
IG9mIHNoYWRvdyB2YWx1ZXMuIEl0J3MgT0sgdG8gaWdub3JlIHNoYWRvdworLy8gdmFsdWVzIGlm
IHlvdSB0cmVhdCBVcHNpbG9uIGFzIGFuIG9wYXF1ZSBlc2NhcGUsIGFuZCBhbGwgb2YgdGhlIGNs
aW5ldHMgb2YgQ29tYmluZWRMaXZlbmVzcyBkbyBzby4KIHN0cnVjdCBDb21iaW5lZExpdmVuZXNz
IHsKICAgICBDb21iaW5lZExpdmVuZXNzKCkgeyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworRmxvd0luZGV4aW5nOjpGbG93SW5kZXhpbmcoR3JhcGgmIGdyYXBoKQorICAgIDogbV9n
cmFwaChncmFwaCkKKyAgICAsIG1fbnVtSW5kaWNlcygwKQoreworICAgIHJlY29tcHV0ZSgpOwor
fQorCitGbG93SW5kZXhpbmc6On5GbG93SW5kZXhpbmcoKQoreworfQorCit2b2lkIEZsb3dJbmRl
eGluZzo6cmVjb21wdXRlKCkKK3sKKyAgICB1bnNpZ25lZCBudW1Ob2RlSW5kaWNlcyA9IG1fZ3Jh
cGgubWF4Tm9kZUNvdW50KCk7CisgICAgCisgICAgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LnJl
c2l6ZShudW1Ob2RlSW5kaWNlcyk7CisgICAgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LmZpbGwo
VUlOVF9NQVgpOworICAgIAorICAgIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleC5yZXNpemUoMCk7
CisKKyAgICBtX251bUluZGljZXMgPSBudW1Ob2RlSW5kaWNlczsKKworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAh
PSBQaGkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IG5vZGUtPmluZGV4KCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBzaGFkb3dJbmRleCA9IG1fbnVtSW5kaWNlcysrOworICAgICAgICAgICAgbV9ub2RlSW5k
ZXhUb1NoYWRvd0luZGV4W25vZGVJbmRleF0gPSBzaGFkb3dJbmRleDsKKyAgICAgICAgICAgIG1f
c2hhZG93SW5kZXhUb05vZGVJbmRleC5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9zaGFkb3dJbmRleFRvTm9kZUluZGV4LnNpemUo
KSArIG51bU5vZGVJbmRpY2VzID09IG1fbnVtSW5kaWNlcyk7CisgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleFtzaGFkb3dJbmRl
eCAtIG51bU5vZGVJbmRpY2VzXSA9PSBub2RlSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2pl
Y3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIGlz
IGEgbWFwcGluZyBmcm9tIG5vZGVzIHRvIHVuaXF1ZSwgZGVuc2UgaW5kaWNlcyB0aGF0IGNhbiBi
ZSB1c2VkIGZvciBjcmVhdGluZyBmYXN0CisvLyBOb2RlLWtleWVkIG1hcHMuIFRoZSBzcGVjaWFs
IHBhcnQgaXMgdGhhdCBpdCBhbHNvIGFsbG9jYXRlZCBpbmRpY2VzIGZvciB0aGUgc2hhZG93IHZh
bHVlcyBvZiBQaGkKKy8vIG5vZGVzLCB3aGljaCBpcyBuZWVkZWQgZm9yIGFueSBmbG93LXNlbnNp
dGl2ZSBhbmFseXNpcy4KK2NsYXNzIEZsb3dJbmRleGluZyB7CitwdWJsaWM6CisgICAgRmxvd0lu
ZGV4aW5nKEdyYXBoJik7CisgICAgfkZsb3dJbmRleGluZygpOworICAgIAorICAgIHZvaWQgcmVj
b21wdXRlKCk7CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFw
aDsgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX251
bUluZGljZXM7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCh1bnNpZ25lZCBub2RlSW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG5vZGVJbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KE5v
ZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGluZGV4KG5vZGUtPmluZGV4KCkpOyB9CisgICAgCisg
ICAgdW5zaWduZWQgc2hhZG93SW5kZXgodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleFtub2RlSW5kZXhdOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaGFkb3dJbmRleChOb2RlKiBub2RlKSBjb25zdAorICAg
IHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcCgpID09IFBoaSk7
CisgICAgICAgIHJldHVybiBzaGFkb3dJbmRleChub2RlLT5pbmRleCgpKTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgaW5kZXgodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rp
b246OktpbmQga2luZCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeToKKyAgICAgICAgICAgIHJldHVy
biBpbmRleChub2RlSW5kZXgpOworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6U2hh
ZG93OgorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd0luZGV4KG5vZGVJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KE5vZGUgKm5vZGUsIE5vZGVGbG93
UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5k
KSB7CisgICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpQcmltYXJ5OgorICAgICAgICAg
ICAgcmV0dXJuIGluZGV4KG5vZGUpOworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd0luZGV4KG5vZGUpOworICAgICAgICB9
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleChOb2RlRmxvd1Byb2plY3Rpb24gcHJv
amVjdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleChwcm9qZWN0aW9uLm5v
ZGUoKSwgcHJvamVjdGlvbi5raW5kKCkpOworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZVByb2plY3Rpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPCBtX25vZGVJbmRleFRvU2hhZG93SW5kZXguc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIE5vZGVGbG93UHJvamVjdGlvbihtX2dyYXBoLm5vZGVBdChpbmRleCkpOworICAg
ICAgICByZXR1cm4gTm9kZUZsb3dQcm9qZWN0aW9uKAorICAgICAgICAgICAgbV9ncmFwaC5ub2Rl
QXQobV9zaGFkb3dJbmRleFRvTm9kZUluZGV4W2luZGV4IC0gbV9ub2RlSW5kZXhUb1NoYWRvd0lu
ZGV4LnNpemUoKV0pLAorICAgICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOwor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgdW5zaWduZWQg
bV9udW1JbmRpY2VzOworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVu
c2FmZVZlY3Rvck92ZXJmbG93PiBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXg7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Rmxvd0luZGV4aW5nLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2Rl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1h
cHBpbmcgZnJvbSBub2RlcyB0byB2YWx1ZXMgdGhhdCBpcyB1c2VmdWwgZm9yIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzLiBJbiBzdWNoIGFuCisvLyBhbmFseXNpcywgYXQgZXZlcnkgcG9pbnQgaW4g
dGhlIHByb2dyYW0gd2UgbmVlZCB0byBjb25zaWRlciB0aGUgdmFsdWVzIG9mIG5vZGVzIHBsdXMg
dGhlIHNoYWRvdworLy8gdmFsdWVzIG9mIFBoaXMuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBkbyBi
b3RoIG9mIHRob3NlIHRoaW5ncy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBGbG93TWFw
IHsKK3B1YmxpYzoKKyAgICBGbG93TWFwKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2dyYXBo
KGdyYXBoKQorICAgIHsKKyAgICAgICAgcmVzaXplKCk7CisgICAgfQorICAgIAorICAgIC8vIENh
bGwgdGhpcyBpZiB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBncmFwaCBoYXMgY2hhbmdlZC4g
Tm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgcmVzZXQgYW55CisgICAgLy8gZW50cmllcy4KKyAgICB2
b2lkIHJlc2l6ZSgpCisgICAgeworICAgICAgICBtX21hcC5yZXNpemUobV9ncmFwaC5tYXhOb2Rl
Q291bnQoKSk7CisgICAgICAgIG1fc2hhZG93TWFwLnJlc2l6ZShtX2dyYXBoLm1heE5vZGVDb3Vu
dCgpKTsKKyAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9n
cmFwaDsgfQorICAgIAorICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX21hcFtub2RlSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBUJiBhdChOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGUtPmluZGV4KCkpOworICAgIH0K
KyAgICAKKyAgICBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9zaGFkb3dNYXBbbm9kZUluZGV4XTsKKyAgICB9CisgICAgCisgICAgVCYgYXRT
aGFkb3coTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhdFNoYWRvdyhub2RlLT5p
bmRleCgpKTsKKyAgICB9CisgICAgCisgICAgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBOb2Rl
Rmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkg
eworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeToKKyAgICAgICAgICAg
IHJldHVybiBhdChub2RlSW5kZXgpOworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIGF0U2hhZG93KG5vZGVJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
ICpiaXR3aXNlX2Nhc3Q8VCo+KG51bGxwdHIpOworICAgIH0KKyAgICAKKyAgICBUJiBhdChOb2Rl
KiBub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChub2RlLT5pbmRleCgpLCBraW5kKTsKKyAgICB9CisgICAgCisgICAgVCYgYXQoTm9k
ZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gYXQocHJv
amVjdGlvbi5ub2RlKCksIHByb2plY3Rpb24ua2luZCgpKTsKKyAgICB9CisgICAgCisgICAgY29u
c3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZs
b3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4KTsgfQorICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5v
ZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlKTsg
fQorICAgIGNvbnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGVJbmRleCk7IH0KKyAg
ICBjb25zdCBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0KKyAgICBjb25zdCBUJiBhdCh1bnNp
Z25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4LCBraW5kKTsgfQor
ICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5k
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSwga2lu
ZCk7IH0KKyAgICBjb25zdCBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KHByb2plY3Rpb24pOyB9
CisgICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZlY3RvcjxULCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9tYXA7CisgICAgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX3NoYWRvd01hcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSlNDOjpERkc6OkZsb3dNYXA8VD4mIG1hcCkK
K3sKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1hcC5ncmFwaCgpLm1heE5vZGVDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYgKEpTQzo6REZH
OjpOb2RlKiBub2RlID0gbWFwLmdyYXBoKCkubm9kZUF0KGkpKSB7CisgICAgICAgICAgICBpZiAo
Y29uc3QgVCYgdmFsdWUgPSBtYXAuYXQobm9kZSkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBub2RlLCAiPT4iLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1hcC5ncmFwaCgpLm1heE5vZGVDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKEpTQzo6REZHOjpOb2RlKiBub2RlID0gbWFwLmdyYXBoKCkubm9kZUF0KGkpKSB7
CisgICAgICAgICAgICBpZiAoY29uc3QgVCYgdmFsdWUgPSBtYXAuYXRTaGFkb3cobm9kZSkpCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic2hhZG93KCIsIG5vZGUsICIpPT4iLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUg
IkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHRmxv
d0luZGV4aW5nLmgiCisjaW5jbHVkZSAiREZHRmxvd01hcC5oIgogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHTmF0dXJhbExvb3Bz
LmgiCkBAIC04Myw2ICs4NSw5IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExv
bmdMaXYKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKICAgICAKICAgICBtX2hhc0RlYnVn
Z2VyRW5hYmxlZCA9IG1fcHJvZmlsZWRCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlcygpIHx8IE9wdGlvbnM6OmZvcmNlRGVidWdnZXJCeXRlY29kZUdlbmVyYXRpb24oKTsKKyAg
ICAKKyAgICBtX2luZGV4aW5nQ2FjaGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb3dJbmRleGluZz4o
KnRoaXMpOworICAgIG1fYWJzdHJhY3RWYWx1ZXNDYWNoZSA9IHN0ZDo6bWFrZV91bmlxdWU8Rmxv
d01hcDxBYnN0cmFjdFZhbHVlPj4oKnRoaXMpOwogfQogCiBHcmFwaDo6fkdyYXBoKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNTks
OSArNTksMTIgQEAgY2xhc3MgQmFja3dhcmRzRG9taW5hdG9yczsKIGNsYXNzIENGRzsKIGNsYXNz
IENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogY2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIEZs
b3dJbmRleGluZzsKIGNsYXNzIE5hdHVyYWxMb29wczsKIGNsYXNzIFByZVBvc3ROdW1iZXJpbmc7
CiAKK3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBGbG93TWFwOworCiAjZGVmaW5lIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBc
CiAgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMDEsOCArMjA0LDYgQEAg
cHVibGljOgogICAgIE5vZGUqIG5vZGVBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9ub2Rlc0J5SW5kZXhbaW5kZXhdOyB9CiAgICAgdm9pZCBwYWNrTm9kZUluZGljZXMoKTsKIAot
ICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGFic3Ry
YWN0VmFsdWVzQ2FjaGUoKSB7IHJldHVybiBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7IH0KLQogICAg
IHZvaWQgZGV0aHJlYWQoKTsKICAgICAKICAgICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUp
OyAvLyBXZSB1c2Ugd2VhayBmcmVlemluZyBieSBkZWZhdWx0LgpAQCAtOTM1LDYgKzkzNiw5IEBA
IHB1YmxpYzoKICAgICBSZWZDb3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsKICAgICBib29sIG1f
aGFzRGVidWdnZXJFbmFibGVkOwogICAgIGJvb2wgbV9oYXNFeGNlcHRpb25IYW5kbGVycyB7IGZh
bHNlIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dJbmRleGluZz4gbV9pbmRleGluZ0NhY2hl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93TWFwPEFic3RyYWN0VmFsdWU+PiBtX2Fic3RyYWN0
VmFsdWVzQ2FjaGU7CisKIHByaXZhdGU6CiAgICAgdm9pZCBhZGROb2RlVG9NYXBCeUluZGV4KE5v
ZGUqKTsKIApAQCAtOTcyLDcgKzk3Niw2IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8Tm9kZSos
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVzQnlJbmRleDsKICAgICBWZWN0b3I8dW5z
aWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVJbmRleEZyZWVMaXN0OwotICAg
IFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hYnN0cmFj
dFZhbHVlc0NhY2hlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogSW5QbGFjZUFic3RyYWN0U3Rh
dGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3Jh
cGgpCi0gICAgLCBtX2Fic3RyYWN0VmFsdWVzKGdyYXBoLmFic3RyYWN0VmFsdWVzQ2FjaGUoKSkK
KyAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKICAg
ICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3Jh
cGgubV9sb2NhbFZhcnMpCiAgICAgLCBtX2Jsb2NrKDApCiB7CkBAIC01NywxOSArNTcsMjIgQEAg
dm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgIEFTU0VSVChiYXNp
Y0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52
YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZkxvY2FscygpKTsKIAotICAgIC8vIENlcnRhaW4gcGhhc2VzIGluc2VydCBu
b2RlcyBpbiBhIGJsb2NrIGFmdGVyIHJ1bm5pbmcgdGhyb3VnaCBpdC4KLSAgICAvLyBXZSBjYW5u
b3QgcmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIEFic3RyYWN0VmFsdWVzIHdoZW4gaW5pdGlhbGl6aW5n
IEFic3RyYWN0U3RhdGUgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHZhbHVlcwotICAgIC8vIGNhbiBp
bmNyZWFzZSBhcyB3ZSBleGVjdXRlLiBJbnN0ZWFkLCB3ZSBpbmNyZWFzZSB0aGUgc2l6ZSBhcyBu
ZWVkZWQgYmVmb3JlIHByb2Nlc3NpbmcgZWFjaCBibG9jay4KLSAgICBtX2Fic3RyYWN0VmFsdWVz
LnJlc2l6ZShtX2dyYXBoLm1heE5vZGVDb3VudCgpKTsKKyAgICBtX2Fic3RyYWN0VmFsdWVzLnJl
c2l6ZSgpOwogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6
ZSgpOyBpKyspCi0gICAgICAgIGZvck5vZGUoYmFzaWNCbG9jay0+YXQoaSkpLmNsZWFyKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5zaXplKCk7IGkrKykgeworICAg
ICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCisgICAgICAgICAgICBiYXNpY0Jsb2Nr
LT5hdChpKSwgWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVQcm9qZWN0aW9uKS5jbGVhcigpOworICAgICAgICAgICAg
fSk7CisgICAgfQogCiAgICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQ7
CiAgICAgCiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQpCi0gICAgICAgICAgICBm
b3JOb2RlKGVudHJ5Lm5vZGUpID0gZW50cnkudmFsdWU7CisgICAgICAgIGZvciAoTm9kZUFic3Ry
YWN0VmFsdWVQYWlyJiBlbnRyeSA6IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkKSB7Cisg
ICAgICAgICAgICBpZiAoZW50cnkubm9kZS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICBmb3JOb2RlKGVudHJ5Lm5vZGUpID0gZW50cnkudmFsdWU7CisgICAgICAgIH0KICAgICB9CiAg
ICAgYmFzaWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOwogICAgIGJhc2ljQmxvY2st
PmNmYUhhc1Zpc2l0ZWQgPSB0cnVlOwpAQCAtODAsMTIgKzgzLDEyIEBAIHZvaWQgSW5QbGFjZUFi
c3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG8KICAgICBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9
IGJhc2ljQmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZDsKIH0KIAotc3RhdGlj
IHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8QmFzaWNCbG9jazo6U1NBRGF0YTo6Tm9kZUFic3Ry
YWN0VmFsdWVQYWlyPiYgdmFsdWVzLCBjb25zdCBWZWN0b3I8Tm9kZSo+JiBsaXZlKQorc3RhdGlj
IHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiYgdmFsdWVz
LCBjb25zdCBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZSkKIHsKICAgICB2YWx1ZXMu
cmVzaXplKDApOwogICAgIHZhbHVlcy5yZXNlcnZlQ2FwYWNpdHkobGl2ZS5zaXplKCkpOwotICAg
IGZvciAoTm9kZSogbm9kZSA6IGxpdmUpCi0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQo
QmFzaWNCbG9jazo6U1NBRGF0YTo6Tm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJzdHJh
Y3RWYWx1ZSgpIH0pOworICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBsaXZlKQor
ICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7IG5v
ZGUsIEFic3RyYWN0VmFsdWUoKSB9KTsKIH0KIAogdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
aW5pdGlhbGl6ZSgpCkBAIC0xOTksNyArMjAyLDcgQEAgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0
ZTo6ZW5kQmFzaWNCbG9jawogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52
YWx1ZXNBdFRhaWwuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWls
W2ldLm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKIAotICAgICAgICBmb3IgKGF1dG8mIHZhbHVlQXRU
YWlsIDogYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKSB7CisgICAgICAgIGZvciAoTm9kZUFic3Ry
YWN0VmFsdWVQYWlyJiB2YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCkgewog
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWVBdE5vZGUgPSBmb3JOb2RlKHZhbHVlQXRU
YWlsLm5vZGUpOwogICAgICAgICAgICAgdmFsdWVBdFRhaWwudmFsdWUubWVyZ2UodmFsdWVBdE5v
ZGUpOwogICAgICAgICAgICAgdmFsdWVBdE5vZGUgPSB2YWx1ZUF0VGFpbC52YWx1ZTsKQEAgLTI5
MSwxMyArMjk0LDEzIEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmwK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZyb20tPnZhbHVlc0F0VGFpbC5zaXplKCk7IGktLTsp
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRvLT52YWx1ZXNBdEhlYWRbaV0ubWVyZ2UoZnJvbS0+
dmFsdWVzQXRUYWlsW2ldKTsKIAotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdG8tPnNzYS0+
dmFsdWVzQXRIZWFkKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gZW50cnkubm9kZTsKKyAg
ICAgICAgZm9yIChOb2RlQWJzdHJhY3RWYWx1ZVBhaXImIGVudHJ5IDogdG8tPnNzYS0+dmFsdWVz
QXRIZWFkKSB7CisgICAgICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA9IGVudHJ5Lm5v
ZGU7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgICBNZXJnaW5nIGZvciAiLCBub2RlLCAiOiBmcm9tICIsIGZvck5vZGUobm9kZSksICIgdG8g
IiwgZW50cnkudmFsdWUsICJcbiIpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIHVuc2ln
bmVkIHZhbHVlQ291bnRJbkZyb21CbG9jayA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZy
b21CbG9ja1ZhbHVlQXRUYWlsIDogZnJvbS0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKKyAgICAgICAg
ICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiBmcm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZy
b20tPnNzYS0+dmFsdWVzQXRUYWlsKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZyb21CbG9ja1Zh
bHVlQXRUYWlsLm5vZGUgPT0gbm9kZSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZnJv
bUJsb2NrVmFsdWVBdFRhaWwudmFsdWUgPT0gZm9yTm9kZShub2RlKSk7CiAgICAgICAgICAgICAg
ICAgICAgICsrdmFsdWVDb3VudEluRnJvbUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjA4
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0
cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCisjaW5jbHVkZSAi
REZHRmxvd01hcC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5o
IgogCkBAIC00MywxMSArNDQsMTEgQEAgcHVibGljOgogICAgIAogICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0gICAgdm9pZCBjcmVhdGVW
YWx1ZUZvck5vZGUoTm9kZSopIHsgfQorICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbikgeyB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2Rl
KiBub2RlKQorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5v
ZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9hYnN0cmFjdFZhbHVlc1tub2RlLT5pbmRleCgp
XTsKKyAgICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CiAgICAgfQogICAg
IAogICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQpAQCAtMTMyLDcgKzEzMyw3
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKLSAgICBWZWN0b3I8QWJz
dHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBtX2Fic3RyYWN0VmFsdWVzOwor
ICAgIEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4mIG1fYWJzdHJhY3RWYWx1ZXM7CiAgICAgT3BlcmFu
ZHM8QWJzdHJhY3RWYWx1ZT4gbV92YXJpYWJsZXM7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgzMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRG
R0Jsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKICNpbmNsdWRlICJE
RkdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgpAQCAtMTIxLDcgKzEyMiw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFJlbGF0aW9uc2hpcChOb2RlKiBsZWZ0
LCBOb2RlKiByaWdodCwgS2luZCBraW5kLCBpbnQgb2Zmc2V0ID0gMCkKKyAgICBSZWxhdGlvbnNo
aXAoTm9kZUZsb3dQcm9qZWN0aW9uIGxlZnQsIE5vZGVGbG93UHJvamVjdGlvbiByaWdodCwgS2lu
ZCBraW5kLCBpbnQgb2Zmc2V0ID0gMCkKICAgICAgICAgOiBtX2xlZnQobGVmdCkKICAgICAgICAg
LCBtX3JpZ2h0KHJpZ2h0KQogICAgICAgICAsIG1fa2luZChraW5kKQpAQCAtMTMyLDE3ICsxMzMs
MTcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2xlZnQgIT0gbV9yaWdodCk7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBSZWxhdGlvbnNoaXAgc2FmZUNyZWF0ZShOb2RlKiBs
ZWZ0LCBOb2RlKiByaWdodCwgS2luZCBraW5kLCBpbnQgb2Zmc2V0ID0gMCkKKyAgICBzdGF0aWMg
UmVsYXRpb25zaGlwIHNhZmVDcmVhdGUoTm9kZUZsb3dQcm9qZWN0aW9uIGxlZnQsIE5vZGVGbG93
UHJvamVjdGlvbiByaWdodCwgS2luZCBraW5kLCBpbnQgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAg
ICAgIGlmICghbGVmdCB8fCAhcmlnaHQgfHwgbGVmdCA9PSByaWdodCkKKyAgICAgICAgaWYgKCFs
ZWZ0LmlzU3RpbGxWYWxpZCgpIHx8ICFyaWdodC5pc1N0aWxsVmFsaWQoKSB8fCBsZWZ0ID09IHJp
Z2h0KQogICAgICAgICAgICAgcmV0dXJuIFJlbGF0aW9uc2hpcCgpOwogICAgICAgICByZXR1cm4g
UmVsYXRpb25zaGlwKGxlZnQsIHJpZ2h0LCBraW5kLCBvZmZzZXQpOwogICAgIH0KIAotICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2xlZnQ7IH0KICAgICAKLSAg
ICBOb2RlKiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9Ci0gICAgTm9kZSogcmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIGxlZnQo
KSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBOb2RlRmxvd1Byb2plY3Rpb24gcmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9
CiAKQEAgLTI1OCw3ICsyNTksNyBAQCBwdWJsaWM6CiAgICAgLy8gSWYgcG9zc2libGUsIHJldHVy
bnMgYSBmb3JtIG9mIHRoaXMgcmVsYXRpb25zaGlwIHdoZXJlIHRoZSBnaXZlbiBub2RlIGlzIHRo
ZSBsZWZ0CiAgICAgLy8gc2lkZS4gUmV0dXJucyBhIG51bGwgcmVsYXRpb25zaGlwIGlmIHRoaXMg
cmVsYXRpb25zaGlwIGNhbm5vdCBzYXkgYW55dGhpbmcgYWJvdXQgdGhpcwogICAgIC8vIG5vZGUu
Ci0gICAgUmVsYXRpb25zaGlwIGZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKKyAgICBSZWxhdGlv
bnNoaXAgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmIChtX2xlZnQgPT0gbm9kZSkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTI2
Nyw3ICsyNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBSZWxhdGlvbnNoaXAoKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBzZXRMZWZ0KE5vZGUqIGxlZnQpCisgICAgdm9pZCBzZXRMZWZ0
KE5vZGVGbG93UHJvamVjdGlvbiBsZWZ0KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGVmdCAhPSBtX3JpZ2h0KTsKICAgICAgICAgbV9sZWZ0ID0gbGVmdDsKQEAgLTk4NCwxMyArOTg1
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQogICAgIAotICAgIE5vZGUqIG1fbGVmdDsKLSAgICBOb2RlKiBtX3JpZ2h0OworICAgIE5v
ZGVGbG93UHJvamVjdGlvbiBtX2xlZnQ7CisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG1fcmlnaHQ7
CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgaW50IG1fb2Zmc2V0OyAvLyBUaGlzIG9mZnNldCBjYW4g
YmUgYXJiaXRyYXJpbHkgbGFyZ2UuCiB9OwogCi10eXBlZGVmIEhhc2hNYXA8Tm9kZSosIFZlY3Rv
cjxSZWxhdGlvbnNoaXA+PiBSZWxhdGlvbnNoaXBNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Tm9kZUZs
b3dQcm9qZWN0aW9uLCBWZWN0b3I8UmVsYXRpb25zaGlwPj4gUmVsYXRpb25zaGlwTWFwOwogCiBj
bGFzcyBJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJs
aWM6CkBAIC0xMzE0LDcgKzEzMTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmVsYXRpb25zaGlwLm1pblZhbHVlT2ZMZWZ0KCkgPj0gMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub25OZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAucmlnaHQoKSA9PSBu
b2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hp
cC5yaWdodCgpID09IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAua2luZCgpID09IFJlbGF0aW9uc2hpcDo6RXF1YWwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVsYXRpb25zaGlwLm9mZnNldCgp
IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVzc1RoYW5MZW5ndGggPSB0
cnVlOwpAQCAtMTQ5MSwyMyArMTQ5MiwxNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgICAgICBzZXRSZWxhdGlvbnNo
aXAoCi0gICAgICAgICAgICAgICAgUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRlKAotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPnBoaSgpLCBSZWxhdGlvbnNo
aXA6OkVxdWFsLCAwKSk7CisgICAgICAgICAgICBzZXRFcXVpdmFsZW5jZSgKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCksCisgICAgICAgICAgICAgICAgTm9kZUZsb3dQcm9q
ZWN0aW9uKG5vZGUtPnBoaSgpLCBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdykpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBp
dGVyID0gbV9yZWxhdGlvbnNoaXBzLmZpbmQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAg
ICAgICAgIGlmIChpdGVyICE9IG1fcmVsYXRpb25zaGlwcy5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIFZlY3RvcjxSZWxhdGlvbnNoaXA+IHRvQWRkOwotICAgICAgICAgICAgICAgIGZvciAoUmVs
YXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IGl0ZXItPnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlbGF0aW9uc2hpcCBuZXdSZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXA7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5waGkoKSA9PSBuZXdSZWxhdGlvbnNoaXAucmlnaHQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBu
ZXdSZWxhdGlvbnNoaXAuc2V0TGVmdChub2RlLT5waGkoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRvQWRkLmFwcGVuZChuZXdSZWxhdGlvbnNoaXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBmb3IgKFJlbGF0aW9uc2hpcCByZWxhdGlvbnNoaXAgOiB0b0FkZCkKLSAgICAg
ICAgICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKHJlbGF0aW9uc2hpcCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICBzZXRFcXVpdmFsZW5jZSgKKyAg
ICAgICAgICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9u
OjpTaGFkb3cpLAorICAgICAgICAgICAgICAgIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTUxNiw2ICsxNTEwLDI2IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRFcXVpdmFsZW5jZShOb2RlRmxvd1By
b2plY3Rpb24gb2xkTm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uIG5ld05vZGUpCisgICAgeworICAg
ICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRlKG9sZE5vZGUsIG5l
d05vZGUsIFJlbGF0aW9uc2hpcDo6RXF1YWwsIDApKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
aXRlciA9IG1fcmVsYXRpb25zaGlwcy5maW5kKG9sZE5vZGUpOworICAgICAgICBpZiAoaXRlciAh
PSBtX3JlbGF0aW9uc2hpcHMuZW5kKCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxSZWxhdGlvbnNo
aXA+IHRvQWRkOworICAgICAgICAgICAgZm9yIChSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwIDog
aXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICBSZWxhdGlvbnNoaXAgbmV3UmVsYXRpb25z
aGlwID0gcmVsYXRpb25zaGlwOworICAgICAgICAgICAgICAgIC8vIEF2b2lkIGNyZWF0aW5nIGFu
eSBraW5kIG9mIHNlbGYtcmVsYXRpb25zaGlwLgorICAgICAgICAgICAgICAgIGlmIChuZXdOb2Rl
Lm5vZGUoKSA9PSBuZXdSZWxhdGlvbnNoaXAucmlnaHQoKS5ub2RlKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG5ld1JlbGF0aW9uc2hpcC5zZXRMZWZ0
KG5ld05vZGUpOworICAgICAgICAgICAgICAgIHRvQWRkLmFwcGVuZChuZXdSZWxhdGlvbnNoaXAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChSZWxhdGlvbnNoaXAgcmVsYXRpb25z
aGlwIDogdG9BZGQpCisgICAgICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKHJlbGF0aW9uc2hp
cCk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgICAgICAKICAgICB2b2lkIHNldFJlbGF0aW9u
c2hpcChSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwLCB1bnNpZ25lZCB0aW1lVG9MaXZlID0gMSkK
ICAgICB7CiAgICAgICAgIHNldFJlbGF0aW9uc2hpcChtX3JlbGF0aW9uc2hpcHMsIHJlbGF0aW9u
c2hpcCwgdGltZVRvTGl2ZSk7CkBAIC0xNjY5LDcgKzE2ODMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgaWYgKG1fc2VlbkJsb2Nrcy5hZGQodGFyZ2V0KSkgewogICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIG5ldyBibG9jay4gV2UgY29weSBzdWJqZWN0IHRvIGxpdmVuZXNzIHBydW5p
bmcuCi0gICAgICAgICAgICBhdXRvIGlzTGl2ZSA9IFsmXSAoTm9kZSogbm9kZSkgeworICAgICAg
ICAgICAgYXV0byBpc0xpdmUgPSBbJl0gKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV96ZXJvKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LT5zc2EtPmxpdmVBdEhlYWQu
Y29udGFpbnMobm9kZSk7CkBAIC0xNzAxLDcgKzE3MTUsNyBAQCBwcml2YXRlOgogICAgICAgICAv
LyBhc3NpZ25lZCB3b3VsZCBvbmx5IGhhcHBlbiBpZiB3ZSBoYXZlIG5vdCBwcm9jZXNzZWQgdGhl
IG5vZGUncyBwcmVkZWNlc3Nvci4gV2UKICAgICAgICAgLy8gc2hvdWxkbid0IHByb2Nlc3MgYmxv
Y2tzIHVudGlsIHdlIGhhdmUgcHJvY2Vzc2VkIHRoZSBibG9jaydzIHByZWRlY2Vzc29yIGJlY2F1
c2Ugd2UKICAgICAgICAgLy8gYXJlIHVzaW5nIHJldmVyc2UgcG9zdG9yZGVyLgotICAgICAgICBW
ZWN0b3I8Tm9kZSo+IHRvUmVtb3ZlOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9u
PiB0b1JlbW92ZTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX3JlbGF0aW9uc2hpcHNBdEhlYWRbdGFyZ2V0XSkgewogICAgICAgICAg
ICAgYXV0byBpdGVyID0gcmVsYXRpb25zaGlwTWFwLmZpbmQoZW50cnkua2V5KTsKQEAgLTE3OTEs
NyArMTgwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IG1lcmdlZFJl
bGF0aW9uc2hpcHM7CiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgOiB0b1JlbW92ZSkKKyAgICAgICAgZm9yIChOb2RlRmxvd1By
b2plY3Rpb24gbm9kZSA6IHRvUmVtb3ZlKQogICAgICAgICAgICAgbV9yZWxhdGlvbnNoaXBzQXRI
ZWFkW3RhcmdldF0ucmVtb3ZlKG5vZGUpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5n
ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRmxvd0luZGV4aW5n
LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJERkdQaGFzZS5oIgpAQCAtNDQsMTAgKzQ1LDEyIEBAIHB1YmxpYzoKICAgICBM
aXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAibGl2ZW5lc3MgYW5hbHlzaXMiKQogICAgICAgICAsIG1fZGlydHlCbG9ja3MobV9ncmFwaC5u
dW1CbG9ja3MoKSkKKyAgICAgICAgLCBtX2luZGV4aW5nKCptX2dyYXBoLm1faW5kZXhpbmdDYWNo
ZSkKICAgICAgICAgLCBtX2xpdmVBdEhlYWQobV9ncmFwaCkKICAgICAgICAgLCBtX2xpdmVBdFRh
aWwobV9ncmFwaCkKLSAgICAgICAgLCBtX3dvcmtzZXQoZ3JhcGgubWF4Tm9kZUNvdW50KCkgLSAx
KQogICAgIHsKKyAgICAgICAgbV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPnJlY29tcHV0ZSgpOwor
ICAgICAgICBtX3dvcmtzZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZGV4U3BhcnNlU2V0PFVuc2Fm
ZVZlY3Rvck92ZXJmbG93Pj4obV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPm51bUluZGljZXMoKSk7
CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQpAQCAtODAsMjAgKzgzLDIyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhd
OwotICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4mIGxpdmVBdEhlYWQgPSBibG9jay0+c3Nh
LT5saXZlQXRIZWFkOworICAgICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3csIDE+JgorICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFk
SW5kaWNlcyA9IG1fbGl2ZUF0SGVhZFtibG9ja0luZGV4XTsKKyAgICAgICAgICAgICAgICBWZWN0
b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZUF0SGVhZCA9IGJsb2NrLT5zc2EtPmxpdmVBdEhl
YWQ7CiAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC5yZXNpemUoMCk7CiAgICAgICAgICAgICAg
ICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0SGVhZEluZGljZXMuc2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbGl2ZUF0SGVhZEluZGljZXMp
Ci0gICAgICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG1fZ3JhcGgu
bm9kZUF0KGluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2Vk
QXBwZW5kKG1faW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRUYWlsSW5k
aWNlcyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8
Tm9kZSo+JiBsaXZlQXRUYWlsID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgICAg
ICAgICBjb25zdCBIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gs
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiYKKyAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0VGFpbEluZGljZXMgPSBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF07
CisgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmVBdFRhaWwg
PSBibG9jay0+c3NhLT5saXZlQXRUYWlsOwogICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVz
aXplKDApOwogICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVzZXJ2ZUNhcGFjaXR5KGxpdmVB
dFRhaWxJbmRpY2VzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA6IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0
VGFpbC51bmNoZWNrZWRBcHBlbmQobV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0VGFpbC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVj
dGlvbihpbmRleCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEwNiw2NyArMTEx
LDU3IEBAIHByaXZhdGU6CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShibG9jaywgIk9ubHkg
ZGlydHkgYmxvY2tzIG5lZWRzIHVwZGF0ZXMuIEEgbnVsbCBibG9jayBzaG91bGQgbmV2ZXIgYmUg
ZGlydHkuIik7CiAKLSAgICAgICAgbV93b3Jrc2V0LmNsZWFyKCk7CisgICAgICAgIG1fd29ya3Nl
dC0+Y2xlYXIoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IG1fbGl2ZUF0VGFpbFti
bG9ja0luZGV4XSkKLSAgICAgICAgICAgIG1fd29ya3NldC5hZGQoaW5kZXgpOworICAgICAgICAg
ICAgbV93b3Jrc2V0LT5hZGQoaW5kZXgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKLSAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVw
c2lsb246Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbihAeCwg
XnApCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3Mg
QHAgYW5kIEBuIGFuZCB1c2VzIEB4LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdp
dmVuIGEgUGhpOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhl
ciBhIHVzZSBub3IgYSBkZWYuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gR2l2ZW4g
YSBub2RlOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwg
QGIsIEBjKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRl
ZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCisgICAgICAgICAgICBhdXRvIGhhbmRsZUVkZ2Ug
PSBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBib29sIG5ld0VudHJ5ID0gbV93
b3Jrc2V0LT5hZGQobV9pbmRleGluZy5pbmRleChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAg
ICAgIGVkZ2Uuc2V0S2lsbFN0YXR1cyhuZXdFbnRyeSA/IERvZXNLaWxsIDogRG9lc05vdEtpbGwp
OworICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKLSAgICAgICAgICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFtX3dvcmtzZXQuY29udGFpbnMobm9kZS0+aW5kZXgoKSksICJV
cHNpbG9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVyIG5vZGVzLiIpOworICAg
ICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1fd29ya3NldC0+Y29udGFpbnMobm9k
ZS0+aW5kZXgoKSksICJVcHNpbG9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVy
IG5vZGVzLiIpOwogCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7Ci0g
ICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShwaGktPmluZGV4KCkpOwotICAgICAgICAg
ICAgICAgIG1fd29ya3NldC5hZGQobm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOworICAgICAgICAg
ICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKG1faW5kZXhpbmcuc2hhZG93SW5kZXgocGhpKSk7Cisg
ICAgICAgICAgICAgICAgaGFuZGxlRWRnZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAg
ICAgICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKG1faW5kZXhpbmcuaW5kZXgobm9kZSkpOworICAg
ICAgICAgICAgICAgIG1fd29ya3NldC0+YWRkKG1faW5kZXhpbmcuc2hhZG93SW5kZXgobm9kZSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBtX3dvcmtzZXQucmVtb3ZlKG5vZGUtPmluZGV4KCkpOwot
ICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFk
ZENoaWxkVXNlKTsKKyAgICAgICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5n
LmluZGV4KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbihub2Rl
LCBoYW5kbGVFZGdlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFVwZGF0ZSBsaXZlIGF0IGhlYWQuCi0gICAgICAgIGF1dG8m
IGxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF07Ci0gICAgICAgIGlmIChtX3dv
cmtzZXQuc2l6ZSgpID09IGxpdmVBdEhlYWQuc2l6ZSgpKQorICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPiYgbGl2ZUF0SGVhZCA9IG1fbGl2ZUF0SGVh
ZFtibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKG1fd29ya3NldC0+c2l6ZSgpID09IGxpdmVBdEhl
YWQuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgbGl2ZUluZGV4QXRIZWFkIDogbGl2ZUF0SGVhZCkKLSAgICAgICAgICAgIG1fd29ya3Nl
dC5yZW1vdmUobGl2ZUluZGV4QXRIZWFkKTsKLSAgICAgICAgQVNTRVJUKCFtX3dvcmtzZXQuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKGxpdmVJbmRleEF0SGVhZCk7
CisgICAgICAgIEFTU0VSVCghbV93b3Jrc2V0LT5pc0VtcHR5KCkpOwogCi0gICAgICAgIGxpdmVB
dEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0LnNpemUo
KSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbmV3VmFsdWUgOiBtX3dvcmtzZXQpCisgICAgICAg
IGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0
LT5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogKm1fd29ya3NldCkK
ICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG5ld1ZhbHVlKTsKIAogICAg
ICAgICBib29sIGNoYW5nZWRQcmVkZWNlc3NvciA9IGZhbHNlOwogICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycykgewotICAgICAgICAgICAg
YXV0byYgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0KSB7CisgICAgICAgICAgICBIYXNo
U2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiYKKyAgICAgICAgICAgICAgICBsaXZlQXRU
YWlsID0gbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbmV3VmFsdWUgOiAqbV93b3Jrc2V0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVBdFRh
aWwuYWRkKG5ld1ZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZGlydHlCbG9j
a3MucXVpY2tTZXQocHJlZGVjZXNzb3ItPmluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWRQcmVkZWNlc3NvciA9IHRydWU7CkBAIC0xNzYsMjEgKzE3MSwxNyBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gY2hhbmdlZFByZWRlY2Vzc29yOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhZGRDaGlsZFVzZShOb2RlKiwgRWRnZSYgZWRnZSkKLSAgICB7Ci0gICAg
ICAgIGJvb2wgbmV3RW50cnkgPSBtX3dvcmtzZXQuYWRkKGVkZ2UtPmluZGV4KCkpOwotICAgICAg
ICBlZGdlLnNldEtpbGxTdGF0dXMobmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsK
LSAgICB9Ci0KICAgICAvLyBCbG9ja3Mgd2l0aCBuZXcgbGl2ZSB2YWx1ZXMgYXQgdGFpbC4KICAg
ICBCaXRWZWN0b3IgbV9kaXJ0eUJsb2NrczsKKyAgICAKKyAgICBGbG93SW5kZXhpbmcmIG1faW5k
ZXhpbmc7CiAKICAgICAvLyBMaXZlIHZhbHVlcyBwZXIgYmxvY2sgZWRnZS4KICAgICBCbG9ja01h
cDxWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPj4gbV9saXZlQXRI
ZWFkOwogICAgIEJsb2NrTWFwPEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVk
Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+PiBt
X2xpdmVBdFRhaWw7CiAKICAgICAvLyBTaW5nbGUgc3BhcnNlIHNldCBhbGxvY2F0ZWQgb25jZSBh
bmQgdXNlZCBieSBldmVyeSBiYXNpYyBibG9jay4KLSAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV93b3Jrc2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmRleFNwYXJz
ZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4+IG1fd29ya3NldDsKIH07CiAKIGJvb2wgcGVyZm9y
bUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYwLDE1ICsyNTYwLDE4IEBAIHB1Ymxp
YzoKICAgICBCYXNpY0Jsb2NrKiBvd25lcjsKIH07CiAKLWlubGluZSBib29sIG5vZGVDb21wYXJh
dG9yKE5vZGUqIGEsIE5vZGUqIGIpCi17Ci0gICAgcmV0dXJuIGEtPmluZGV4KCkgPCBiLT5pbmRl
eCgpOwotfQorc3RydWN0IE5vZGVDb21wYXJhdG9yIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBO
b2RlUHRyVHlwZT4KKyAgICBib29sIG9wZXJhdG9yKCkoTm9kZVB0clR5cGUgYSwgTm9kZVB0clR5
cGUgYikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhLT5pbmRleCgpIDwgYi0+aW5kZXgo
KTsKKyAgICB9Cit9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQ1N0cmluZyBub2RlTGlzdER1
bXAoY29uc3QgVCYgbm9kZUxpc3QpCiB7Ci0gICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVM
aXN0LCBub2RlQ29tcGFyYXRvcik7CisgICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVMaXN0
LCBOb2RlQ29tcGFyYXRvcigpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTI1Nzks
NyArMjU4Miw3IEBAIENTdHJpbmcgbm9kZU1hcER1bXAoY29uc3QgVCYgbm9kZU1hcCwgRHUKICAg
ICAgICAgdHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVNYXAuYmVnaW4oKTsK
ICAgICAgICAgaXRlciAhPSBub2RlTWFwLmVuZCgpOyArK2l0ZXIpCiAgICAgICAgIGtleXMuYXBw
ZW5kKGl0ZXItPmtleSk7Ci0gICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSwg
bm9kZUNvbXBhcmF0b3IpOworICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCks
IE5vZGVDb21wYXJhdG9yKCkpOwogICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKICAgICBDb21t
YVByaW50ZXIgY29tbWE7CiAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkKQEAgLTI1OTMsNyArMjU5Niw3IEBAIENTdHJpbmcgbm9kZVZhbHVlUGFpckxpc3REdW1w
KGNvbnN0IFQmIG4KICAgICB1c2luZyBWID0gdHlwZW5hbWUgVDo6VmFsdWVUeXBlOwogICAgIFQg
c29ydGVkTGlzdCA9IG5vZGVWYWx1ZVBhaXJMaXN0OwogICAgIHN0ZDo6c29ydChzb3J0ZWRMaXN0
LmJlZ2luKCksIHNvcnRlZExpc3QuZW5kKCksIFtdKGNvbnN0IFYmIGEsIGNvbnN0IFYmIGIpIHsK
LSAgICAgICAgcmV0dXJuIG5vZGVDb21wYXJhdG9yKGEubm9kZSwgYi5ub2RlKTsKKyAgICAgICAg
cmV0dXJuIE5vZGVDb21wYXJhdG9yKCkoYS5ub2RlLCBiLm5vZGUpOwogICAgIH0pOwogCiAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
Tm9kZUFic3RyYWN0VmFsdWVQYWlyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChub2RlLCAiPT4i
LCB2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVB
YnN0cmFjdFZhbHVlUGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IE5vZGVBYnN0cmFj
dFZhbHVlUGFpciB7CisgICAgTm9kZUFic3RyYWN0VmFsdWVQYWlyKCkgeyB9CisgICAgCisgICAg
Tm9kZUFic3RyYWN0VmFsdWVQYWlyKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBjb25zdCBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBub2RlKG5vZGUpCisgICAgICAgICwgdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3Q7CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGU7CisgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVGbG93UHJvamVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1By
b2plY3Rpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgTm9kZUZsb3dQcm9qZWN0aW9uOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIi0i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoa2luZCgpID09IFByaW1hcnkpIHsK
KyAgICAgICAgb3V0LnByaW50KG5vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
b3V0LnByaW50KCJzaGFkb3coIiwgbm9kZSgpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTm9kZUZsb3dQcm9q
ZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBQcmltYXJ5LAorICAg
ICAgICBTaGFkb3cKKyAgICB9OworICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbigpIHsgfQor
ICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbihOb2RlKiBub2RlKQorICAgICAgICA6IG1fd29y
ZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IE5vZGVGbG93UHJvamVjdGlvbihOb2RlKiBub2RlLCBLaW5kIGtpbmQpCisgICAgICAgIDogbV93
b3JkKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIHwgKGtpbmQgPT0gU2hhZG93ID8gc2hh
ZG93Qml0IDogMCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24o
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fd29yZChzaGFkb3dC
aXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX3dvcmQ7IH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiAobV93b3JkICYgc2hhZG93Qml0KSA/IFNoYWRvdyA6IFByaW1hcnk7IH0KKyAgICAKKyAg
ICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX3dvcmQg
JiB+c2hhZG93Qml0KTsgfQorICAgIAorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpub2RlKCk7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbm9k
ZSgpOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV93b3JkOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oTm9kZUZsb3dQ
cm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd29yZCA9PSBv
dGhlci5tX3dvcmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShOb2RlRmxvd1By
b2plY3Rpb24gb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KE5vZGVGbG93UHJvamVjdGlv
biBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGtpbmQoKSA8IG90aGVyLmtpbmQoKTsKKyAgICAgICAgcmV0
dXJuIG5vZGUoKSA8IG90aGVyLm5vZGUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj4oTm9kZUZsb3dQcm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG90aGVyIDwgKnRoaXM7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8PShOb2RlRmxv
d1Byb2plY3Rpb24gb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA+
IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KE5vZGVGbG93UHJvamVj
dGlvbiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzIDwgb3RoZXIp
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBOb2RlRmxvd1Byb2plY3Rpb24oV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKyAgICAKKyAgICAvLyBQaGkgc2hhZG93IHBy
b2plY3Rpb25zIGNhbiBiZWNvbWUgaW52YWxpZCBiZWNhdXNlIHRoZSBQaGkgbWlnaHQgYmUgZm9s
ZGVkIHRvIHNvbWV0aGluZyBlbHNlLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAqdGhpcyAmJiAoa2luZCgpID09IFByaW1hcnkgfHwgbm9kZSgp
LT5vcCgpID09IFBoaSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZv
aWQgZm9yRWFjaChOb2RlKiBub2RlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAg
ZnVuYyhOb2RlRmxvd1Byb2plY3Rpb24obm9kZSkpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBQaGkpCisgICAgICAgICAgICBmdW5jKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBTaGFkb3cp
KTsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBzaGFk
b3dCaXQgPSAxOworICAgIAorICAgIHVpbnRwdHJfdCBtX3dvcmQgeyAwIH07Cit9OworCitzdHJ1
Y3QgTm9kZUZsb3dQcm9qZWN0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goTm9k
ZUZsb3dQcm9qZWN0aW9uIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKE5vZGVGbG93UHJvamVjdGlvbiBhLCBOb2RlRmxvd1Byb2plY3Rpb24gYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNo
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6Ok5vZGVGbG93UHJvamVj
dGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbkhhc2ggSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiA6IFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI2LDExICsxMjYsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAv
LyBDb25zdHJ1Y3QgdGhlIHN0YXRlLWF0LXRhaWwgYmFzZWQgb24gdGhlIGVwb2NocyBvZiBsaXZl
IG5vZGVzIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBlcG9jaC4gV2Ug
Z3JvdyBzdGF0ZS1hdC10YWlsIG1vbm90b25pY2FsbHkgdG8gZW5zdXJlIGNvbnZlcmdlbmNlLgog
ICAgICAgICAgICAgICAgICAgICBib29sIHRoaXNCbG9ja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCkg
eworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogYmxv
Y2stPnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
a2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmVw
b2NoKCkgIT0gbV9jdXJyZW50RXBvY2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgbm9kZSBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IGVwb2NoLCB0aGVuIHdlIG1h
eSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVuIGEgYmFycmllciBv
biBpdCBpbiB0aGUgZnV0dXJlLiBTbywgYWRkIGl0IHRvIHRoZSBzdGF0ZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3RhdGVBdFRhaWwtPmF0KGJs
b2NrKS5hZGQobm9kZSkuaXNOZXdFbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3RhdGVBdFRhaWwtPmF0KGJsb2NrKS5hZGQobm9kZS5ub2Rl
KCkpLmlzTmV3RW50cnk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNzgsOCArMTgwLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgbV9zdGF0ZS0+
YmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkgewotICAgICAgICAgICAgICAgIGlm
IChtX3N0YXRlQXRIZWFkLT5hdChibG9jaykuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAg
IGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUua2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0ZUF0SGVhZC0+YXQoYmxvY2spLmNvbnRhaW5zKG5vZGUubm9kZSgpKSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2aW91cyBibG9ja3MgdGVsbCB1cyB0aGF0IHRoaXMg
bm9kZSBtYXkgbmVlZCBhIGJhcnJpZXIgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIGZ1
dHVyZSwgdGhlbiBwdXQgaXQgaW4gdGhlIGFuY2llbnQgcHJpbW9yZGlhbCBlcG9jaC4gVGhpcyBm
b3JjZXMgdXMgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gZW1pdCBhIGJhcnJpZXIgb24gYW55
IHBvc3NpYmx5LWNlbGwgc3RvcmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVwb2NoIG9mIHRoZQpAQCAt
MzI2LDcgKzMzMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFVwc2lsb246Ci0gICAgICAgICAgICAgICAgbV9u
b2RlLT5waGkoKS0+c2V0RXBvY2gobV9ub2RlLT5lcG9jaCgpKTsKKyAgICAgICAgICAgICAgICAv
LyBBc3N1bWUgdGhlIHdvcnN0IGZvciBQaGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCBQaGkgc2hhZG93cy4KKyAgICAgICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRF
cG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIwODMzOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTYtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBERkcgcGxheXMgZmFzdCBhbmQgbG9vc2Ugd2l0aCB0aGUgc2hhZG93IHZhbHVl
cyBvZiBhIFBoaQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBNYWRlIHRoaXMgQVBJIHVzZSBzaXplIHJhdGhlciB0aGFuIG1heEluZGV4IGFz
IGl0cyBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIsIGJlY2F1c2UgdGhhdCdzCisgICAgICAgIGxl
c3MgY29uZnVzaW5nLgorCisgICAgICAgICogd3RmL0luZGV4U3BhcnNlU2V0Lmg6CisgICAgICAg
IChXVEY6OkluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KToK
KwogMjAxNi0xMS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgaW4gYSB0aHJlYWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4
U3BhcnNlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQu
aAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIgPSBDcmFzCiBjbGFzcyBJbmRleFNwYXJzZVNldCB7CiAgICAgdHlwZWRlZiBWZWN0
b3I8dW5zaWduZWQsIDAsIE92ZXJmbG93SGFuZGxlcj4gVmFsdWVMaXN0OwogcHVibGljOgotICAg
IGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIG1heFZhbHVlKTsKKyAgICBleHBsaWNp
dCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBzaXplKTsKIAogICAgIGJvb2wgYWRkKHVuc2lnbmVk
KTsKICAgICBib29sIHJlbW92ZSh1bnNpZ25lZCk7CkBAIC02NSw5ICs2NSw5IEBAIHByaXZhdGU6
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUgSW5kZXhT
cGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4VmFs
dWUpCitpbmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VT
ZXQodW5zaWduZWQgc2l6ZSkKIHsKLSAgICBtX21hcC5yZXNpemUobWF4VmFsdWUgKyAxKTsKKyAg
ICBtX21hcC5yZXNpemUoc2l6ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293837</attachid>
            <date>2016-11-03 17:46:08 -0700</date>
            <delta_ts>2016-11-03 21:52:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82143</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzMzkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIHBsYXlzIGZhc3QgYW5kIGxvb3NlIHdpdGggdGhlIHNoYWRvdyB2
YWx1ZXMgb2YgYSBQaGkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDMwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB3aHkgdGhlIERGRyBuZWVkcyB0
byByZWNvZ25pemUgdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBoaS4KKworICAgICAgICAqIHN0cmVz
cy9kZmctc3NhLXN3YXAuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNi0xMS0wMyAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBBc2tpbmcgZm9yIGEg
dmFsdWUgcHJvZmlsZSBwcmVkaWN0aW9uIHNob3VsZCBiZSBkZWZlbnNpdmUgYWdhaW5zdCBub3Qg
ZmluZGluZyBhIHZhbHVlIHByb2ZpbGUKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy1zc2Etc3dh
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3NhLXN3YXAuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLXNzYS1zd2FwLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOCBAQAordmFyIGksYz0wOworZnVuY3Rpb24gZm9vKCkKK3sKKyAgICB2YXIg
YT0xLGI7Zm9yKGk9MDtpPDI7KytpKXtbYSxiXT1bYixhXTtjKyt9aWYoIWFeYil0aHJvdyBjCit9
Citub0lubGluZShmb28pOworZm9yKHZhciBrID0gMDsgayA8IDEwMDAwOyArK2spCisgICAgZm9v
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
NiBAQAorMjAxNi0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBwbGF5cyBmYXN0IGFuZCBsb29zZSB3aXRoIHRoZSBzaGFkb3cgdmFsdWVzIG9mIGEg
UGhpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQz
MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIE9oIGJveSwgd2hhdCBhbiBlbWJhcnJhc3NpbmcgbWlzdGFrZSEgVGhlIHN0eWxlIG9mIFNT
QSBJIGxpa2UgdG8gdXNlIGF2b2lkcyBibG9jay92YWx1ZQorICAgICAgICB0dXBsZXMgYXMgcGFy
YW1ldGVycyBvZiBhIFBoaSwgdGhlcmVieSBzaW1wbGlmeWluZyBDRkcgdHJhbnNmb3JtYXRpb25z
IGFuZCBtYWtpbmcgUGhpIGxhcmdlbHkKKyAgICAgICAgbm90IGEgc3BlY2lhbCBjYXNlIGZvciBt
b3N0IGNvbXBpbGVyIHRyYW5zZm9ybXMuIEl0IGRvZXMgdGhpcyBieSBpbnRyb2R1Y2luZyBhbm90
aGVyIHZhbHVlCisgICAgICAgIGNhbGxlZCBVcHNpbG9uLCB3aGljaCBzdG9yZXMgYSB2YWx1ZSBp
bnRvIHNvbWUgUGhpLgorICAgICAgICAKKyAgICAgICAgQjMgdXNlcyB0aGlzIGFsc28uIFRoZSBl
YXNpZXN0IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgVXBzaWxvbi9QaGkgYmVoYXZlIGxpa2UgaXMg
dG8gbG9vayBhdAorICAgICAgICB0aGUgQjMtPkFpciBsb3dlcmluZy4gQWlyIGlzIG5vdCBTU0Eg
LSBpdCBoYXMgVG1wcyB0aGF0IHlvdSBjYW4gYXNzaWduIHRvIGFuZCB1c2UgYXMgbWFueQorICAg
ICAgICB0aW1lcyBhcyB5b3UgbGlrZS4gQjMgYWxsb2NhdGVzIG9uZSBUbXAgcGVyIFZhbHVlLCBh
bmQgYW4gZXh0cmEgInBoaVRtcCIgZm9yIFBoaXMsIHNvIHRoYXQKKyAgICAgICAgUGhpcyBnZXQg
dHdvIFRtcHMgdG90YWwuIFVwc2lsb24gc3RvcmVzIHRoZSB2YWx1ZSBpbnRvIHRoZSBwaGlUbXAg
b2YgdGhlIFBoaSwgd2hpbGUgUGhpIG1vdmVzCisgICAgICAgIHRoZSB2YWx1ZSBmcm9tIGl0cyBw
aGlUbXAgdG8gaXRzIHRtcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRv
IHN1cHBvcnQgc2NlbmFyaW9zIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAgICAgICBhOiBQ
aGkoKQorICAgICAgICAgICAgYjogVXBzaWxvbihAeCwgXmEpCisgICAgICAgICAgICBjOiBVc2Uo
QGEpCisgICAgICAgIAorICAgICAgICBIZXJlLCB3ZSB3YW50IEBjIHRvIHNlZSBAYSdzIHZhbHVl
IGJlZm9yZSBAYi4gVGhhdCdzIGEgdmVyeSBiYXNpYyByZXF1aXJlbWVudCBvZiBTU0E6IHRoYXQK
KyAgICAgICAgdGhlIGEgdmFsdWUgKGxpa2UgQGEpIGRvZXNuJ3QgY2hhbmdlIGR1cmluZyBpdHMg
bGlmZXRpbWUuCisgICAgICAgIAorICAgICAgICBVbmZvcnR1bmF0ZWx5LCBERkcncyBsaXZlbmVz
cyBhbmFseXNpcywgYWJzdHJhY3QgaW50ZXJwcmV0ZXIsIGFuZCBpbnRlZ2VyIHJhbmdlIG9wdGlt
aXphdGlvbgorICAgICAgICBhbGwgZmFpbGVkIHRvIGNvcnJlY3RseSBtb2RlbCBVcHNpbG9uL1Bo
aSB0aGlzIHdheS4gVGhleSB3b3VsZCBhc3N1bWUgdGhhdCBpdCdzIGFjY3VyYXRlIHRvCisgICAg
ICAgIG1vZGVsIHRoZSBVcHNpbG9uIGFzIHN0b3JpbmcgaW50byB0aGUgUGhpIGRpcmVjdGx5Lgor
ICAgICAgICAKKyAgICAgICAgQmVjYXVzZSBERkcgZG9lcyBmbG93IGFuYWx5c2lzIG92ZXIgU1NB
LCBtYWtpbmcgaXQgY29ycmVjdCBtZWFucyBlbmFibGluZyBpdCB0byBzcGVhayBvZiB0aGUKKyAg
ICAgICAgc2hhZG93IHZhbHVlLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5
IGludHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIGEKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9u
LiBUaGlzIGlzIGEga2V5IHRoYXQgbGV0cyB1cyBzcGVhayBvZiBib3RoIGEgTm9kZSdzIHByaW1h
cnkgdmFsdWUgYW5kIGl0cworICAgICAgICBvcHRpb25hbCAic2hhZG93IiB2YWx1ZS4gTGl2ZW5l
c3MsIEFJLCBhbmQgaW50ZWdlciByYW5nZSBhcmUgbm93IGtleWVkIGJ5IE5vZGVGbG93UHJvamVj
dGlvbgorICAgICAgICByYXRoZXIgdGhhbiBOb2RlKi4gQ29uY2VwdHVhbGx5IHRoaXMgdHVybnMg
b3V0IHRvIGJlIGEgdmVyeSBzaW1wbGUgY2hhbmdlLCBidXQgaXQgZG9lcyB0b3VjaAorICAgICAg
ICBhIGdvb2QgYW1vdW50IG9mIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIGxvb2tzIHRv
IGJlIHBlcmYtbmV1dHJhbC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYjMv
YWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVuZXNzQWRh
cHRlcjo6bnVtSW5kaWNlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdExpdmVu
ZXNzQWRhcHRlcjo6bnVtSW5kaWNlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVu
ZXNzQWRhcHRlcjo6bnVtSW5kaWNlcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFic3RyYWN0
TGl2ZW5lc3M6OkFic3RyYWN0TGl2ZW5lc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBM
aXZlbmVzc0FkYXB0ZXI6Om1heEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyOjptYXhJbmRleCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlJlZ0xpdmVuZXNzQWRhcHRlcjo6bWF4SW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RJbnRlcnByZXRlcjo6Zm9yTm9kZSk6CisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFs
dWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9y
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6
CisgICAgICAgICogZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKiBkZmcv
REZHQmFzaWNCbG9jay5oOgorICAgICAgICAqIGRmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpsaXZlTm9kZXNBdEhlYWQpOgorICAgICAgICAqIGRmZy9ERkdD
b21iaW5lZExpdmVuZXNzLmg6CisgICAgICAgICogZGZnL0RGR0Zsb3dJbmRleGluZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6Rmxvd0luZGV4aW5nKToKKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6On5GbG93SW5kZXhpbmcpOgorICAgICAgICAo
SlNDOjpERkc6OkZsb3dJbmRleGluZzo6cmVjb21wdXRlKToKKyAgICAgICAgKiBkZmcvREZHRmxv
d0luZGV4aW5nLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6Z3Jh
cGgpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6bnVtSW5kaWNlcyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjppbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6
Rmxvd0luZGV4aW5nOjpzaGFkb3dJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4
aW5nOjpub2RlUHJvamVjdGlvbik6CisgICAgICAgICogZGZnL0RGR0Zsb3dNYXAuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6Rmxvd01hcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Rmxvd01hcDo6cmVzaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpncmFwaCk6
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01hcDo6YXQpOgorICAgICAgICAoSlNDOjpERkc6OkZs
b3dNYXA6OmF0U2hhZG93KToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6R3JhcGgpOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphYnN0
cmFjdFZhbHVlc0NhY2hlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpJ
blBsYWNlQWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0
U3RhdGU6OmJlZ2luQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6c2V0TGl2ZVZhbHVl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZSk6Cisg
ICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NBbmFs
eXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6Okxp
dmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0Fu
YWx5c2lzUGhhc2U6OnByb2Nlc3NCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NB
bmFseXNpc1BoYXNlOjphZGRDaGlsZFVzZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR05v
ZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlQ29tcGFyYXRvcjo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6bm9kZUxpc3REdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpub2Rl
TWFwRHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6bm9kZVZhbHVlUGFpckxpc3REdW1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpub2RlQ29tcGFyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR05vZGVBYnN0
cmFjdFZhbHVlUGFpci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlQWJzdHJhY3RW
YWx1ZVBhaXI6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcik6CisgICAgICAgICogZGZnL0RGR05vZGVG
bG93UHJvamVjdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJv
amVjdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Ok5vZGVGbG93UHJv
amVjdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRv
ciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246OmtpbmQpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6bm9kZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3ItPik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZUZsb3dQcm9qZWN0aW9uOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1By
b2plY3Rpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVj
dGlvbjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9u
OjpvcGVyYXRvcjwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3Bl
cmF0b3I+KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJhdG9y
PD0pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3I+PSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjppc1N0aWxs
VmFsaWQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6Zm9yRWFjaCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uSGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uSGFzaDo6ZXF1YWwpOgorICAgICAgICAq
IGRmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHA6CisKIDIwMTYtMTEtMDMgIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgY2hhbmdlbG9nIGZpeCBkdWUgdG8gZmFpbGVkIGdpdCByZWJhc2UuLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEy
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHRmFpbGVkRmluYWxp
emVyLmNwcAogICAgIGRmZy9ERkdGaW5hbGl6ZXIuY3BwCiAgICAgZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCisgICAgZGZnL0RGR0Zsb3dJbmRleGluZy5jcHAKICAgICBkZmcvREZHRmx1c2hGb3JtYXQu
Y3BwCiAgICAgZGZnL0RGR0ZsdXNoZWRBdC5jcHAKICAgICBkZmcvREZHTGl2ZUNhdGNoVmFyaWFi
bGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKQEAgLTM0Myw3ICszNDQsOSBAQCBzZXQoSmF2YVNjcmlw
dENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5jcHAKICAgICBk
ZmcvREZHTmF0dXJhbExvb3BzLmNwcAogICAgIGRmZy9ERkdOb2RlLmNwcAorICAgIGRmZy9ERkdO
b2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwCiAgICAgZGZnL0RGR05vZGVGbGFncy5jcHAKKyAgICBk
ZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAogICAgIGRmZy9ERkdOb2RlT3JpZ2luLmNwcAog
ICAgIGRmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAogICAgIGRmZy9ERkdP
U1JFbnRyeS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAy
MDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCQkw
RjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTQ0MTUzNENCQUQw
MDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyB9OwogCQkwRjFFM0E2NzE1M0Ey
MUUyMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2
IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLzsgfTsKIAkJMEYxRkU1MUMxOTIyQTNC
QzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFGRTUxQjE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIw
MTc3RjFEQ0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzdEMURDQURDMzAwMEVBNTk1
MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwICovOyB9OworCQkwRjIwMTc4MDFEQ0FEQzM1MDBFQTU5
NTAgLyogREZHRmxvd0luZGV4aW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5n
LmggKi87IH07CisJCTBGMjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4MTFEQ0FE
RDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5oICovOyB9OworCQkwRjIwMTc4NTFEQ0FFMTQ5MDBF
QTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9k
ZUZsb3dQcm9qZWN0aW9uLmggKi87IH07CisJCTBGMjAxNzg2MURDQUUxNEMwMEVBNTk1MCAvKiBE
RkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMDE3ODMxRENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJv
amVjdGlvbi5jcHAgKi87IH07CisJCTBGMjAxNzg5MURDQjk0MjQwMEVBNTk1MCAvKiBERkdOb2Rl
QWJzdHJhY3RWYWx1ZVBhaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIuaCAqLzsgfTsKKwkJMEYyMDE3OEExRENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0
cmFjdFZhbHVlUGFpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIwMTc4NzFEQ0I5NDIyMDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQ
YWlyLmNwcCAqLzsgfTsKIAkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdp
c3Rlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIwQzI1ODFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCAqLzsgfTsKIAkJ
MEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjc5MTRCRTcy
NzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0YxNEJFQUE4MjAwQURDNjRC
IC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZl
bnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTI1MTcsNiArMjUyNCwxMyBAQAogCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZH
U2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
U2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyog
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHBhdGggPSBkZmcvREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFGRTUxQjE5
MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQWJvcnRSZWFzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
MDE3N0QxRENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdGbG93SW5kZXhpbmcuY3BwOyBwYXRoID0gZGZn
L0RGR0Zsb3dJbmRleGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAx
NzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHRmxvd0luZGV4aW5nLmg7IHBhdGggPSBkZmcvREZHRmxvd0lu
ZGV4aW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzgxMURDQURENDAw
MEVBNTk1MCAvKiBERkdGbG93TWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0Zsb3dNYXAuaDsgcGF0aCA9IGRmZy9ERkdGbG93TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjAxNzgzMURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2pl
Y3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTm9kZUZs
b3dQcm9qZWN0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyog
REZHTm9kZUZsb3dQcm9qZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR05vZGVGbG93UHJvamVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR05vZGVGbG93UHJvamVjdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4NzFEQ0I5NDIyMDBFQTU5
NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHA7IHBhdGggPSBkZmcv
REZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEYyMDE3ODgxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuaDsgcGF0aCA9IGRmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdp
c3Rlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWaXJ0dWFsUmVn
aXN0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3OTE0QkU3Mjcz
MDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlQ29udmVudGlv
bnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY3MjksOCArNjc0Myw2IEBACiAJ
CQkJMEZGRkM5NEUxNEVGOTA5NTAwQzcyNTMyIC8qIERGR0NTRVBoYXNlLmggKi8sCiAJCQkJMEYy
RkM3NzAxNkUxMkY2RjAwMzhEOTc2IC8qIERGR0RDRVBoYXNlLmNwcCAqLywKIAkJCQkwRjJGQzc3
MTE2RTEyRjZGMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuaCAqLywKLQkJCQlFMzIyRTVBMDFEQTY0
NDM1MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2ludFBhcmFtcy5jcHAgKi8sCi0JCQkJRTMy
MkU1QTExREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJVFBhdGNocG9pbnRQYXJhbXMuaCAqLywK
IAkJCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNw
cCAqLywKIAkJCQkwRjhGMkI5ODE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZp
ZXJzLmggKi8sCiAJCQkJMEZGQzkyMTMxQjk0RTgzRTAwNzFERDY2IC8qIERGR0Rlc2lyZWRJbmZl
cnJlZFR5cGUuaCAqLywKQEAgLTY3NDUsNiArNjc1Nyw4IEBACiAJCQkJMEY1QTEyNzExOTJEOUZE
RjAwODc2NEEzIC8qIERGR0RvZXNHQy5jcHAgKi8sCiAJCQkJMEY1QTEyNzIxOTJEOUZERjAwODc2
NEEzIC8qIERGR0RvZXNHQy5oICovLAogCQkJCTBGRDgxQUQwMTU0RkI0RUIwMDk4M0U3MiAvKiBE
RkdEb21pbmF0b3JzLmggKi8sCisJCQkJRTMyMkU1QTAxREE2NDQzNTAwNkU3NzA5IC8qIERGR0RP
TUpJVFBhdGNocG9pbnRQYXJhbXMuY3BwICovLAorCQkJCUUzMjJFNUExMURBNjQ0MzUwMDZFNzcw
OSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmggKi8sCiAJCQkJMEYxRTNBNDQxNTM0Q0JB
RDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8sCiAJCQkJMEZEM0M4MjAxNDEx
NUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8sCiAJCQkJMEZEM0M4MjIxNDExNUQwRTAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oICovLApAQCAtNjc2MSw2ICs2Nzc1LDkgQEAKIAkJCQlBNzhB
OTc2RjE3OTczOEI4MDA5REY3NDQgLyogREZHRmluYWxpemVyLmggKi8sCiAJCQkJMEYyQkRDMTIx
NTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovLAogCQkJCTBGMkJEQzEzMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmggKi8sCisJCQkJMEYyMDE3N0QxRENBREMz
MDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5jcHAgKi8sCisJCQkJMEYyMDE3N0UxRENBREMz
MDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oICovLAorCQkJCTBGMjAxNzgxMURDQURENDAw
MEVBNTk1MCAvKiBERkdGbG93TWFwLmggKi8sCiAJCQkJMEY5RDMzOTQxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5jcHAgKi8sCiAJCQkJMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8q
IERGR0ZsdXNoZWRBdC5oICovLAogCQkJCUE3RDg5Q0U4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdG
bHVzaEZvcm1hdC5jcHAgKi8sCkBAIC02ODI4LDkgKzY4NDUsMTMgQEAKIAkJCQlBNzM3ODEwQjE3
OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmggKi8sCiAJCQkJMEZCNEI1MUUxNkI2
Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGUuY3BwICovLAogCQkJCTg2RUNBM0U5MTMyREVGMUMwMDJC
MkFENyAvKiBERkdOb2RlLmggKi8sCisJCQkJMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERG
R05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi8sCisJCQkJMEYyMDE3ODgxRENCOTQyMjAwRUE1
OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5oICovLAogCQkJCTBGQjRCNTFGMTZCNjI3
NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi8sCiAJCQkJMEZBNTgxQjcxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgKi8sCiAJCQkJMEZBNTgxQjgxNTBFOTUyQTAw
QjlBMkQ5IC8qIERGR05vZGVGbGFncy5oICovLAorCQkJCTBGMjAxNzgzMURDQUUxNDcwMEVBNTk1
MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwICovLAorCQkJCTBGMjAxNzg0MURDQUUxNDcw
MEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uaCAqLywKIAkJCQkwRjVEMDg1QzFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8sCiAJCQkJMEYzMDBCNzcxOEFCMDUx
MTAwQTZENzJFIC8qIERGR05vZGVPcmlnaW4uaCAqLywKIAkJCQkwRkE1ODFCOTE1MEU5NTJBMDBC
OUEyRDkgLyogREZHTm9kZVR5cGUuaCAqLywKQEAgLTc2MTIsNiArNzYzMyw3IEBACiAJCQkJMEZF
Qzg1NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMzM4REZBMUJFOTZBQTgwMDEzQzg4RiAvKiBCM0NDYWxsVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMzM4RTE2MUJGMDI3NkMwMDEzQzg4RiAvKiBCM1ZhbHVlS2V5SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMDE3ODIxRENBREQ0MjAwRUE1OTUwIC8qIERGR0Zsb3dN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
Q2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA5MzFDMEQ2N0VFMDAwNTJC
RkEgLyogQWlyVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTg0OTgsNiArODUyMCw3IEBA
CiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzg1MURDQUUxNDkwMEVBNTk1MCAvKiBE
RkdOb2RlRmxvd1Byb2plY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUUzNTU1QjhBMURBRTAz
QTUwMEYzNjkyMSAvKiBET01KSVRDYWxsRE9NR2V0dGVyUGF0Y2hwb2ludC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzBFQzBFQzMxQUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMDcwQTQ3MUQ1NDNBOEIwMDZFNzIzMiAvKiBDZWxsQ29udGFp
bmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTg1OTUsNiArODYxOCw3IEBACiAJCQkJMTQxNDQ4Q0Ix
M0ExNzZFQzAwRjVCQTFBIC8qIE1hcmtlZEJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEQyRjNEQjEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MkQ2RjEyMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGMjAxNzg5MURDQjk0MjQwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MTJFNENEMTUyMzg5RUMwMEM4MzZCRSAvKiBNYXRj
aFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM0MEE0ODUxQTkwNTFBRjAwRDczQ0NBIC8q
IE1hdGhDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNDMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBNYXRoT2JqZWN0LmggaW4gSGVhZGVycyAqLywKQEAgLTg2NjMsNiArODY4Nyw3IEBACiAJ
CQkJMEZCMzg3OTAxQkZCQzQ0RDAwRTNBQjFFIC8qIEFpck9wdGltaXplQmxvY2tPcmRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRENFRTIyMEQxQ0VCQUY3NTAwMEMyMzk2IC8qIERGR051bGxBYnN0
cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMg
LyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMDE3ODAxRENB
REMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjRBMzhGQTFDOEUxM0RGMDAxOTAzMTggLyogU3VwZXJTYW1wbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTk4NTgsNiArOTg4Myw3IEBACiAJ
CQkJQTU4NDBFMjAxODdCN0I4NjAwODQzQjEwIC8qIEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQTc2MjA0MURCOTI0MjYwMEI3QTJGRCAvKiBDb2xsZWN0aW9u
U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4QTdCRUYxQjgyOTc1QTAwMkQ5MTU3IC8q
IElubGluZUNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIwMTc4QTFEQ0I5NDI2
MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjRFNTU1MTdGMEI3MUMwMEFCQjIxNyAvKiBJbmxpbmVDYWxsRnJhbWVTZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVDRUVFMTQxODdGM0JBRDAwRTU1Qzk5IC8qIEluc3BlY3RvckFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJ
bnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTAwODcsNiArMTAx
MTMsNyBAQAogCQkJCTBGMzczMDhDMUMwQkQyOTEwMDA1MkJGQSAvKiBCM1BoaUNoaWxkcmVuLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNEMTIzQTQwQzIwMEQ0MjJGMyAvKiBN
ZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAxNzdGMURDQURDMzMw
MEVBNTk1MCAvKiBERkdGbG93SW5kZXhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2
N0QxNEY1Q0ZENjAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTM3OTRFNzUxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFuYWx5
emVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNTVGMzUyMUI3REM4NTMwMEM1MERDNSAvKiBN
b2R1bGVMb2FkZXJQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xMDE4NCw2ICsxMDIx
MSw3IEBACiAJCQkJQTVGRDAwNjcxODlBRkU5QzAwNjMzMjMxIC8qIFNjcmlwdEFyZ3VtZW50cy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA2RDE4OUIwMEFBMDA2MzMyMzEgLyogU2NyaXB0
Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDZGMTg5QjAwQUEwMDYzMzIz
MSAvKiBTY3JpcHRDYWxsU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3ODYxRENB
RTE0QzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNUZEMDA3RDE4OUIwQjRDMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyNTE4OEVGRkZEMDAxMTBGMTQgLyogU2NyaXB0
RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1RDkzQTUxODUwMTJBODAwNDAw
REVEIC8qIFNjcmlwdEZ1bmN0aW9uQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDIwODMzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQCBzdHJ1Y3QgVG1wTGl2ZW5lc3NBZGFwdGVyIHsKIAogICAg
IFRtcExpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQgbWF4
SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2RlJiBj
b2RlKQogICAgIHsKICAgICAgICAgdW5zaWduZWQgbnVtVG1wcyA9IGNvZGUubnVtVG1wcyhhZGFw
dGVyVHlwZSk7CiAgICAgICAgIHJldHVybiBBYnNvbHV0ZVRtcE1hcHBlcjxhZGFwdGVyVHlwZT46
OmFic29sdXRlSW5kZXgobnVtVG1wcyk7CkBAIC02NSw5ICs2NSw5IEBAIHN0cnVjdCBTdGFja1Ns
b3RMaXZlbmVzc0FkYXB0ZXIgewogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdW5zaWduZWQg
bWF4SW5kZXgoQ29kZSYgY29kZSkKKyAgICBzdGF0aWMgdW5zaWduZWQgbnVtSW5kaWNlcyhDb2Rl
JiBjb2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSAt
IDE7CisgICAgICAgIHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCk7CiAgICAgfQogICAg
IHN0YXRpYyBib29sIGFjY2VwdHNUeXBlKEFyZzo6VHlwZSkgeyByZXR1cm4gdHJ1ZTsgfQogICAg
IHN0YXRpYyB1bnNpZ25lZCB2YWx1ZVRvSW5kZXgoU3RhY2tTbG90KiBzdGFja1Nsb3QpIHsgcmV0
dXJuIHN0YWNrU2xvdC0+aW5kZXgoKTsgfQpAQCAtODMsOSArODMsOSBAQCBzdHJ1Y3QgUmVnTGl2
ZW5lc3NBZGFwdGVyIHsKIAogICAgIFJlZ0xpdmVuZXNzQWRhcHRlcihDb2RlJikgeyB9CiAKLSAg
ICBzdGF0aWMgdW5zaWduZWQgbWF4SW5kZXgoQ29kZSYpCisgICAgc3RhdGljIHVuc2lnbmVkIG51
bUluZGljZXMoQ29kZSYpCiAgICAgewotICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpOwor
ICAgICAgICByZXR1cm4gUmVnOjptYXhJbmRleCgpICsgMTsKICAgICB9CiAKICAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzVHlwZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0KQEAgLTEwMSw3ICsx
MDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgQWJzdHJhY3RMaXZlbmVzcyhDb2RlJiBjb2RlKQog
ICAgICAgICA6IEFkYXB0ZXIoY29kZSkKLSAgICAgICAgLCBtX3dvcmtzZXQoQWRhcHRlcjo6bWF4
SW5kZXgoY29kZSkpCisgICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om51bUluZGljZXMoY29k
ZSkpCiAgICAgICAgICwgbV9saXZlQXRIZWFkKGNvZGUuc2l6ZSgpKQogICAgICAgICAsIG1fbGl2
ZUF0VGFpbChjb2RlLnNpemUoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjA4MzM5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hEaXJlY3Rp
b24uaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNs
dWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKICNpbmNsdWRlICJERkdQaGlDaGlsZHJlbi5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MSw3ICs0Miw3IEBAIHB1
YmxpYzoKICAgICBBYnN0cmFjdEludGVycHJldGVyKEdyYXBoJiwgQWJzdHJhY3RTdGF0ZVR5cGUm
KTsKICAgICB+QWJzdHJhY3RJbnRlcnByZXRlcigpOwogICAgIAotICAgIEFic3RyYWN0VmFsdWUm
IGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93
UHJvamVjdGlvbiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3RhdGUuZm9yTm9kZShu
b2RlKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAyMDgzMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MTcsNiArMjgxNyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIAogICAgIGNhc2UgUGhpOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpOworICAgICAgICBmb3JO
b2RlKG5vZGUpID0gZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQcm9q
ZWN0aW9uOjpTaGFkb3cpKTsKICAgICAgICAgLy8gVGhlIHN0YXRlIG9mIHRoaXMgbm9kZSB3b3Vs
ZCBoYXZlIGFscmVhZHkgYmVlbiBkZWNpZGVkLCBidXQgaXQgbWF5IGhhdmUgYmVjb21lIGEKICAg
ICAgICAgLy8gY29uc3RhbnQsIGluIHdoaWNoIGNhc2Ugd2UnZCBsaWtlIHRvIGtub3cuCiAgICAg
ICAgIGlmIChmb3JOb2RlKG5vZGUpLm1fdmFsdWUpCkBAIC0yODI0LDggKzI4MjUsMTEgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgIG1fc3RhdGUuY3JlYXRlVmFsdWVG
b3JOb2RlKG5vZGUtPnBoaSgpKTsKLSAgICAgICAgZm9yTm9kZShub2RlLT5waGkoKSkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uIHNoYWRvdyhu
b2RlLT5waGkoKSwgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOworICAgICAgICBpZiAoc2hh
ZG93LmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBtX3N0YXRlLmNyZWF0ZVZhbHVlRm9y
Tm9kZShzaGFkb3cpOworICAgICAgICAgICAgZm9yTm9kZShzaGFkb3cpID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
QEAgLTI5NzcsMTEgKzI5ODEsMTggQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIGVsc2UKICAgICAgICAgY2xvYmJlckxpbWl0Kys7CiAgICAgQVNTRVJUKGNs
b2JiZXJMaW1pdCA8PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IGNsb2JiZXJMaW1pdDsgaS0tOykKLSAgICAgICAgZnVuY3Rvcihmb3JOb2RlKG1fc3RhdGUu
YmxvY2soKS0+YXQoaSkpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gY2xvYmJlckxpbWl0OyBpLS07
KSB7CisgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbjo6Zm9yRWFjaCgKKyAgICAgICAgICAgIG1f
c3RhdGUuYmxvY2soKS0+YXQoaSksCisgICAgICAgICAgICBbJl0gKE5vZGVGbG93UHJvamVjdGlv
biBub2RlUHJvamVjdGlvbikgeworICAgICAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShub2Rl
UHJvamVjdGlvbikpOworICAgICAgICAgICAgfSk7CisgICAgfQogICAgIGlmIChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zdGF0ZS5ibG9jaygp
LT5zc2EtPmxpdmVBdEhlYWQpCi0gICAgICAgICAgICBmdW5jdG9yKGZvck5vZGUobm9kZSkpOwor
ICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5z
c2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgICAgIGlmIChub2RlLmlzU3RpbGxWYWxpZCgpKQor
ICAgICAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShub2RlKSk7CisgICAgICAgIH0KICAgICB9
CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVu
dHMoKTsgaS0tOykKICAgICAgICAgZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50
KGkpKTsKQEAgLTMwMzcsOSArMzA0OCw5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgogdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KQogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwotICAg
IEhhc2hTZXQ8Tm9kZSo+IHNlZW47CisgICAgSGFzaFNldDxOb2RlRmxvd1Byb2plY3Rpb24+IHNl
ZW47CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkgeworICAgICAgICBmb3Ig
KE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhl
YWQpIHsKICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGUpOwogICAgICAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xl
YXIoKSkKQEAgLTMwNDgsMTUgKzMwNTksMTcgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9zdGF0ZS5ibG9jaygpLT5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0g
bV9zdGF0ZS5ibG9jaygpLT5hdChpKTsKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7Ci0gICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlKTsKLSAgICAgICAgaWYgKHZhbHVl
LmlzQ2xlYXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXQucHJpbnQoY29t
bWEsIG5vZGUsICI6IiwgdmFsdWUpOworICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVh
Y2goCisgICAgICAgICAgICBtX3N0YXRlLmJsb2NrKCktPmF0KGkpLCBbJl0gKE5vZGVGbG93UHJv
amVjdGlvbiBub2RlUHJvamVjdGlvbikgeworICAgICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGVQ
cm9qZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZVByb2plY3Rpb24pOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIG5vZGVQcm9qZWN0aW9uLCAiOiIsIHZhbHVlKTsKKyAgICAgICAgICAgIH0pOwogICAg
IH0KICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIGZvciAoTm9kZSog
bm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRUYWlsKSB7CisgICAgICAgIGZvciAo
Tm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFp
bCkgewogICAgICAgICAgICAgaWYgKHNlZW4uY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0
U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDE2ICs0NywxNiBAQCBBdFRhaWxBYnN0cmFjdFN0YXRlOjpBdFRhaWxBYnN0cmFjdFN0YXRl
CiAKIEF0VGFpbEFic3RyYWN0U3RhdGU6On5BdFRhaWxBYnN0cmFjdFN0YXRlKCkgeyB9CiAKLXZv
aWQgQXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqIG5vZGUpCit2
b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZSkKIHsKICAgICBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKS5hZGQobm9k
ZSwgQWJzdHJhY3RWYWx1ZSgpKTsKIH0KIAotQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Zm9yTm9kZShOb2RlKiBub2RlKQorQWJzdHJhY3RWYWx1ZSYgQXRUYWlsQWJzdHJhY3RT
dGF0ZTo6Zm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKIHsKICAgICBhdXRvJiB2YWx1
ZXNBdFRhaWwgPSBtX3ZhbHVlc0F0VGFpbE1hcC5hdChtX2Jsb2NrKTsKLSAgICBIYXNoTWFwPE5v
ZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5v
ZGUpOwotICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaXRlciAhPSB2YWx1ZXNBdFRhaWwu
ZW5kKCkpOworICAgIEhhc2hNYXA8Tm9kZUZsb3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVlPjo6
aXRlcmF0b3IgaXRlciA9IHZhbHVlc0F0VGFpbC5maW5kKG5vZGUpOworICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZS5ub2RlKCksIGl0ZXIgIT0gdmFsdWVzQXRUYWlsLmVuZCgpKTsKICAgICBy
ZXR1cm4gaXRlci0+dmFsdWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAyMDgzMzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNp
bmNsdWRlICJERkdCbG9ja01hcC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAi
REZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsgCiAKQEAgLTQ3LDggKzQ4LDggQEAgcHVibGljOgogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKTsKLSAgICBB
YnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqKTsKKyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9k
ZShOb2RlRmxvd1Byb2plY3Rpb24pOworICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZs
b3dQcm9qZWN0aW9uKTsKICAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKEVkZ2UgZWRnZSkgeyBy
ZXR1cm4gZm9yTm9kZShlZGdlLm5vZGUoKSk7IH0KICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVl
PiYgdmFyaWFibGVzKCkgeyByZXR1cm4gbV9ibG9jay0+dmFsdWVzQXRUYWlsOyB9CiAgICAgCkBA
IC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBHcmFwaCYgbV9ncmFwaDsK
LSAgICBCbG9ja01hcDxIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRh
aWxNYXA7CisgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlRmxvd1Byb2plY3Rpb24sIEFic3RyYWN0
VmFsdWU+PiBtX3ZhbHVlc0F0VGFpbE1hcDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVs
bHB0ciB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlvbi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRB
dC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdOb2RlQWJzdHJhY3RWYWx1
ZVBhaXIuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0
dXJlQ2xvYmJlclN0YXRlLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKQEAgLTI0OCwxMiArMjQ5
LDggQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICBB
dmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5QXRIZWFkOwogICAgICAgICBBdmFpbGFiaWxpdHlN
YXAgYXZhaWxhYmlsaXR5QXRUYWlsOwogCi0gICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0SGVh
ZDsKLSAgICAgICAgVmVjdG9yPE5vZGUqPiBsaXZlQXRUYWlsOwotICAgICAgICBzdHJ1Y3QgTm9k
ZUFic3RyYWN0VmFsdWVQYWlyIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGU7Ci0gICAgICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgICAgICB9OworICAgICAgICBWZWN0b3I8Tm9kZUZs
b3dQcm9qZWN0aW9uPiBsaXZlQXRIZWFkOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0
aW9uPiBsaXZlQXRUYWlsOwogICAgICAgICBWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiB2
YWx1ZXNBdEhlYWQ7CiAgICAgICAgIFZlY3RvcjxOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+IHZhbHVl
c0F0VGFpbDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bWJpbmVkTGl2ZW5lc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDggKzM4LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIEhhc2hT
ZXQ8Tm9kZSo+IGxpdmVOb2Rlc0F0SGVhZChHcmFwaCYgZ3JhcGgsIEJhc2ljQmxvY2sqIGJsb2Nr
KQogewogICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47Ci0gICAgZm9yIChOb2RlKiBub2RlIDogYmxv
Y2stPnNzYS0+bGl2ZUF0SGVhZCkKLSAgICAgICAgc2Vlbi5hZGQobm9kZSk7CisgICAgZm9yIChO
b2RlRmxvd1Byb2plY3Rpb24gbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAg
ICAgaWYgKG5vZGUua2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeSkKKyAgICAg
ICAgICAgIHNlZW4uYWRkKG5vZGUubm9kZSgpKTsKKyAgICB9CiAgICAgCiAgICAgQXZhaWxhYmls
aXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAgPSBibG9jay0+c3NhLT5hdmFpbGFiaWxpdHlBdEhlYWQ7
CiAgICAgZ3JhcGguZm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUoCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuaAkocmV2aXNpb24gMjA4
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzUsNiArMzUsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogLy8gUmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIGxpdmUgYXQgdGFpbCwgYm90aCBkdWUg
dG8gZHVlIERGRyBhbmQgZHVlIHRvIGJ5dGVjb2RlIChpLmUuIE9TUiBleGl0KS4KIEhhc2hTZXQ8
Tm9kZSo+IGxpdmVOb2Rlc0F0SGVhZChHcmFwaCYsIEJhc2ljQmxvY2sqKTsKIAorLy8gV0FSTklO
RzogVGhpcyBjdXJyZW50bHkgZG9lcyBub3QgcmVhc29uIGFib3V0IHRoZSBsaXZlbmVzcyBvZiBz
aGFkb3cgdmFsdWVzLiBUaGUgZXhlY3V0aW9uCisvLyBzZW1hbnRpY3Mgb2YgREZHIFNTQSBhcmUg
dGhhdCBhbiBVcHNpbG9uIHN0b3JlcyB0byB0aGUgc2hhZG93IHZhbHVlIG9mIGEgUGhpLCBhbmQg
dGhlIFBoaSBsb2FkcworLy8gZnJvbSB0aGF0IHNoYWRvdyB2YWx1ZS4gSGVuY2UsIHRoZSBzaGFk
b3cgdmFsdWVzIGFyZSBsaWtlIHZhcmlhYmxlcywgYW5kIGhhdmUgbGl2ZW5lc3MuIFRoZSBub3Jt
YWwKKy8vIGxpdmVuZXNzIGFuYWx5c2lzIHdpbGwgdGVsbCB5b3UgYWJvdXQgdGhlIGxpdmVuZXNz
IG9mIHNoYWRvdyB2YWx1ZXMuIEl0J3MgT0sgdG8gaWdub3JlIHNoYWRvdworLy8gdmFsdWVzIGlm
IHlvdSB0cmVhdCBVcHNpbG9uIGFzIGFuIG9wYXF1ZSBlc2NhcGUsIGFuZCBhbGwgb2YgdGhlIGNs
aWVudHMgb2YgQ29tYmluZWRMaXZlbmVzcyBkbyBzby4KIHN0cnVjdCBDb21iaW5lZExpdmVuZXNz
IHsKICAgICBDb21iaW5lZExpdmVuZXNzKCkgeyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5o
IgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworRmxvd0luZGV4aW5nOjpGbG93SW5kZXhpbmcoR3JhcGgmIGdyYXBoKQorICAgIDogbV9n
cmFwaChncmFwaCkKKyAgICAsIG1fbnVtSW5kaWNlcygwKQoreworICAgIHJlY29tcHV0ZSgpOwor
fQorCitGbG93SW5kZXhpbmc6On5GbG93SW5kZXhpbmcoKQoreworfQorCit2b2lkIEZsb3dJbmRl
eGluZzo6cmVjb21wdXRlKCkKK3sKKyAgICB1bnNpZ25lZCBudW1Ob2RlSW5kaWNlcyA9IG1fZ3Jh
cGgubWF4Tm9kZUNvdW50KCk7CisgICAgCisgICAgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LnJl
c2l6ZShudW1Ob2RlSW5kaWNlcyk7CisgICAgbV9ub2RlSW5kZXhUb1NoYWRvd0luZGV4LmZpbGwo
VUlOVF9NQVgpOworICAgIAorICAgIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleC5yZXNpemUoMCk7
CisKKyAgICBtX251bUluZGljZXMgPSBudW1Ob2RlSW5kaWNlczsKKworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAg
Zm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAh
PSBQaGkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG5vZGVJbmRleCA9IG5vZGUtPmluZGV4KCk7CisgICAgICAgICAgICB1bnNp
Z25lZCBzaGFkb3dJbmRleCA9IG1fbnVtSW5kaWNlcysrOworICAgICAgICAgICAgbV9ub2RlSW5k
ZXhUb1NoYWRvd0luZGV4W25vZGVJbmRleF0gPSBzaGFkb3dJbmRleDsKKyAgICAgICAgICAgIG1f
c2hhZG93SW5kZXhUb05vZGVJbmRleC5hcHBlbmQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbV9zaGFkb3dJbmRleFRvTm9kZUluZGV4LnNpemUo
KSArIG51bU5vZGVJbmRpY2VzID09IG1fbnVtSW5kaWNlcyk7CisgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleFtzaGFkb3dJbmRl
eCAtIG51bU5vZGVJbmRpY2VzXSA9PSBub2RlSW5kZXgpOworICAgICAgICB9CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2pl
Y3Rpb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBUaGlzIGlz
IGEgbWFwcGluZyBmcm9tIG5vZGVzIHRvIHVuaXF1ZSwgZGVuc2UgaW5kaWNlcyB0aGF0IGNhbiBi
ZSB1c2VkIGZvciBjcmVhdGluZyBmYXN0CisvLyBOb2RlLWtleWVkIG1hcHMuIFRoZSBzcGVjaWFs
IHBhcnQgaXMgdGhhdCBpdCBhbHNvIGFsbG9jYXRlZCBpbmRpY2VzIGZvciB0aGUgc2hhZG93IHZh
bHVlcyBvZiBQaGkKKy8vIG5vZGVzLCB3aGljaCBpcyBuZWVkZWQgZm9yIGFueSBmbG93LXNlbnNp
dGl2ZSBhbmFseXNpcy4KK2NsYXNzIEZsb3dJbmRleGluZyB7CitwdWJsaWM6CisgICAgRmxvd0lu
ZGV4aW5nKEdyYXBoJik7CisgICAgfkZsb3dJbmRleGluZygpOworICAgIAorICAgIHZvaWQgcmVj
b21wdXRlKCk7CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9ncmFw
aDsgfQorICAgIAorICAgIHVuc2lnbmVkIG51bUluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX251
bUluZGljZXM7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleCh1bnNpZ25lZCBub2RlSW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG5vZGVJbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KE5v
ZGUqIG5vZGUpIGNvbnN0IHsgcmV0dXJuIGluZGV4KG5vZGUtPmluZGV4KCkpOyB9CisgICAgCisg
ICAgdW5zaWduZWQgc2hhZG93SW5kZXgodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleFtub2RlSW5kZXhdOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaGFkb3dJbmRleChOb2RlKiBub2RlKSBjb25zdAorICAg
IHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcCgpID09IFBoaSk7
CisgICAgICAgIHJldHVybiBzaGFkb3dJbmRleChub2RlLT5pbmRleCgpKTsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgaW5kZXgodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxvd1Byb2plY3Rp
b246OktpbmQga2luZCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeToKKyAgICAgICAgICAgIHJldHVy
biBpbmRleChub2RlSW5kZXgpOworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6U2hh
ZG93OgorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd0luZGV4KG5vZGVJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KE5vZGUgKm5vZGUsIE5vZGVGbG93
UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5k
KSB7CisgICAgICAgIGNhc2UgTm9kZUZsb3dQcm9qZWN0aW9uOjpQcmltYXJ5OgorICAgICAgICAg
ICAgcmV0dXJuIGluZGV4KG5vZGUpOworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIHNoYWRvd0luZGV4KG5vZGUpOworICAgICAgICB9
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAw
OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleChOb2RlRmxvd1Byb2plY3Rpb24gcHJv
amVjdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleChwcm9qZWN0aW9uLm5v
ZGUoKSwgcHJvamVjdGlvbi5raW5kKCkpOworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2pl
Y3Rpb24gbm9kZVByb2plY3Rpb24odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPCBtX25vZGVJbmRleFRvU2hhZG93SW5kZXguc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIE5vZGVGbG93UHJvamVjdGlvbihtX2dyYXBoLm5vZGVBdChpbmRleCkpOworICAg
ICAgICByZXR1cm4gTm9kZUZsb3dQcm9qZWN0aW9uKAorICAgICAgICAgICAgbV9ncmFwaC5ub2Rl
QXQobV9zaGFkb3dJbmRleFRvTm9kZUluZGV4W2luZGV4IC0gbV9ub2RlSW5kZXhUb1NoYWRvd0lu
ZGV4LnNpemUoKV0pLAorICAgICAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpOwor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgdW5zaWduZWQg
bV9udW1JbmRpY2VzOworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleDsKKyAgICBWZWN0b3I8dW5zaWduZWQsIDAsIFVu
c2FmZVZlY3Rvck92ZXJmbG93PiBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXg7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93TWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
Rmxvd0luZGV4aW5nLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2Rl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1h
cHBpbmcgZnJvbSBub2RlcyB0byB2YWx1ZXMgdGhhdCBpcyB1c2VmdWwgZm9yIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzLiBJbiBzdWNoIGFuCisvLyBhbmFseXNpcywgYXQgZXZlcnkgcG9pbnQgaW4g
dGhlIHByb2dyYW0gd2UgbmVlZCB0byBjb25zaWRlciB0aGUgdmFsdWVzIG9mIG5vZGVzIHBsdXMg
dGhlIHNoYWRvdworLy8gdmFsdWVzIG9mIFBoaXMuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBkbyBi
b3RoIG9mIHRob3NlIHRoaW5ncy4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBGbG93TWFw
IHsKK3B1YmxpYzoKKyAgICBGbG93TWFwKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBtX2dyYXBo
KGdyYXBoKQorICAgIHsKKyAgICAgICAgcmVzaXplKCk7CisgICAgfQorICAgIAorICAgIC8vIENh
bGwgdGhpcyBpZiB0aGUgbnVtYmVyIG9mIG5vZGVzIGluIHRoZSBncmFwaCBoYXMgY2hhbmdlZC4g
Tm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgcmVzZXQgYW55CisgICAgLy8gZW50cmllcy4KKyAgICB2
b2lkIHJlc2l6ZSgpCisgICAgeworICAgICAgICBtX21hcC5yZXNpemUobV9ncmFwaC5tYXhOb2Rl
Q291bnQoKSk7CisgICAgICAgIG1fc2hhZG93TWFwLnJlc2l6ZShtX2dyYXBoLm1heE5vZGVDb3Vu
dCgpKTsKKyAgICB9CisgICAgCisgICAgR3JhcGgmIGdyYXBoKCkgY29uc3QgeyByZXR1cm4gbV9n
cmFwaDsgfQorICAgIAorICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX21hcFtub2RlSW5kZXhdOworICAgIH0KKyAgICAKKyAgICBUJiBhdChOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KG5vZGUtPmluZGV4KCkpOworICAgIH0K
KyAgICAKKyAgICBUJiBhdFNoYWRvdyh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9zaGFkb3dNYXBbbm9kZUluZGV4XTsKKyAgICB9CisgICAgCisgICAgVCYgYXRT
aGFkb3coTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhdFNoYWRvdyhub2RlLT5p
bmRleCgpKTsKKyAgICB9CisgICAgCisgICAgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBOb2Rl
Rmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkg
eworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6UHJpbWFyeToKKyAgICAgICAgICAg
IHJldHVybiBhdChub2RlSW5kZXgpOworICAgICAgICBjYXNlIE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93OgorICAgICAgICAgICAgcmV0dXJuIGF0U2hhZG93KG5vZGVJbmRleCk7CisgICAgICAg
IH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
ICpiaXR3aXNlX2Nhc3Q8VCo+KG51bGxwdHIpOworICAgIH0KKyAgICAKKyAgICBUJiBhdChOb2Rl
KiBub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChub2RlLT5pbmRleCgpLCBraW5kKTsKKyAgICB9CisgICAgCisgICAgVCYgYXQoTm9k
ZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gYXQocHJv
amVjdGlvbi5ub2RlKCksIHByb2plY3Rpb24ua2luZCgpKTsKKyAgICB9CisgICAgCisgICAgY29u
c3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZs
b3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4KTsgfQorICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5v
ZGUpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+KHRoaXMpLT5hdChub2RlKTsg
fQorICAgIGNvbnN0IFQmIGF0U2hhZG93KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hhZG93KG5vZGVJbmRleCk7IH0KKyAg
ICBjb25zdCBUJiBhdFNoYWRvdyhOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0
PEZsb3dNYXAqPih0aGlzKS0+YXRTaGFkb3cobm9kZSk7IH0KKyAgICBjb25zdCBUJiBhdCh1bnNp
Z25lZCBub2RlSW5kZXgsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5kKSBjb25zdCB7IHJl
dHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZUluZGV4LCBraW5kKTsgfQor
ICAgIGNvbnN0IFQmIGF0KE5vZGUqIG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6S2luZCBraW5k
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSwga2lu
ZCk7IH0KKyAgICBjb25zdCBUJiBhdChOb2RlRmxvd1Byb2plY3Rpb24gcHJvamVjdGlvbikgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KHByb2plY3Rpb24pOyB9
CisgICAgCitwcml2YXRlOgorICAgIEdyYXBoJiBtX2dyYXBoOworICAgIFZlY3RvcjxULCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9tYXA7CisgICAgVmVjdG9yPFQsIDAsIFVuc2FmZVZlY3Rv
ck92ZXJmbG93PiBtX3NoYWRvd01hcDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSlNDOjpERkc6OkZsb3dNYXA8VD4mIG1hcCkK
K3sKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1hcC5ncmFwaCgpLm1heE5vZGVDb3VudCgpOyArK2kpIHsKKyAgICAgICAgaWYgKEpTQzo6REZH
OjpOb2RlKiBub2RlID0gbWFwLmdyYXBoKCkubm9kZUF0KGkpKSB7CisgICAgICAgICAgICBpZiAo
Y29uc3QgVCYgdmFsdWUgPSBtYXAuYXQobm9kZSkpCisgICAgICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBub2RlLCAiPT4iLCB2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1hcC5ncmFwaCgpLm1heE5vZGVDb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKEpTQzo6REZHOjpOb2RlKiBub2RlID0gbWFwLmdyYXBoKCkubm9kZUF0KGkpKSB7
CisgICAgICAgICAgICBpZiAoY29uc3QgVCYgdmFsdWUgPSBtYXAuYXRTaGFkb3cobm9kZSkpCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAic2hhZG93KCIsIG5vZGUsICIpPT4iLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQAogI2luY2x1ZGUg
IkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHQ29udHJvbEVxdWl2YWxlbmNl
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHRmxv
d0luZGV4aW5nLmgiCisjaW5jbHVkZSAiREZHRmxvd01hcC5oIgogI2luY2x1ZGUgIkRGR0pJVENv
ZGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHTmF0dXJhbExvb3Bz
LmgiCkBAIC04Myw2ICs4NSw5IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExv
bmdMaXYKICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKICAgICAKICAgICBtX2hhc0RlYnVn
Z2VyRW5hYmxlZCA9IG1fcHJvZmlsZWRCbG9jay0+d2FzQ29tcGlsZWRXaXRoRGVidWdnaW5nT3Bj
b2RlcygpIHx8IE9wdGlvbnM6OmZvcmNlRGVidWdnZXJCeXRlY29kZUdlbmVyYXRpb24oKTsKKyAg
ICAKKyAgICBtX2luZGV4aW5nQ2FjaGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb3dJbmRleGluZz4o
KnRoaXMpOworICAgIG1fYWJzdHJhY3RWYWx1ZXNDYWNoZSA9IHN0ZDo6bWFrZV91bmlxdWU8Rmxv
d01hcDxBYnN0cmFjdFZhbHVlPj4oKnRoaXMpOwogfQogCiBHcmFwaDo6fkdyYXBoKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNTks
OSArNTksMTIgQEAgY2xhc3MgQmFja3dhcmRzRG9taW5hdG9yczsKIGNsYXNzIENGRzsKIGNsYXNz
IENvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzOwogY2xhc3MgRG9taW5hdG9yczsKK2NsYXNzIEZs
b3dJbmRleGluZzsKIGNsYXNzIE5hdHVyYWxMb29wczsKIGNsYXNzIFByZVBvc3ROdW1iZXJpbmc7
CiAKK3RlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBGbG93TWFwOworCiAjZGVmaW5lIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCB0aGluZ1RvRG8pIGRvIHsgICAgICAgICAgICBc
CiAgICAgICAgIE5vZGUqIF9ub2RlID0gKG5vZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChfbm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNW
YXJBcmdzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMDEsOCArMjA0LDYgQEAg
cHVibGljOgogICAgIE5vZGUqIG5vZGVBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9ub2Rlc0J5SW5kZXhbaW5kZXhdOyB9CiAgICAgdm9pZCBwYWNrTm9kZUluZGljZXMoKTsKIAot
ICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4mIGFic3Ry
YWN0VmFsdWVzQ2FjaGUoKSB7IHJldHVybiBtX2Fic3RyYWN0VmFsdWVzQ2FjaGU7IH0KLQogICAg
IHZvaWQgZGV0aHJlYWQoKTsKICAgICAKICAgICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUp
OyAvLyBXZSB1c2Ugd2VhayBmcmVlemluZyBieSBkZWZhdWx0LgpAQCAtOTM1LDYgKzkzNiw5IEBA
IHB1YmxpYzoKICAgICBSZWZDb3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsKICAgICBib29sIG1f
aGFzRGVidWdnZXJFbmFibGVkOwogICAgIGJvb2wgbV9oYXNFeGNlcHRpb25IYW5kbGVycyB7IGZh
bHNlIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEZsb3dJbmRleGluZz4gbV9pbmRleGluZ0NhY2hl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxGbG93TWFwPEFic3RyYWN0VmFsdWU+PiBtX2Fic3RyYWN0
VmFsdWVzQ2FjaGU7CisKIHByaXZhdGU6CiAgICAgdm9pZCBhZGROb2RlVG9NYXBCeUluZGV4KE5v
ZGUqKTsKIApAQCAtOTcyLDcgKzk3Niw2IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8Tm9kZSos
IDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVzQnlJbmRleDsKICAgICBWZWN0b3I8dW5z
aWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVJbmRleEZyZWVMaXN0OwotICAg
IFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9hYnN0cmFj
dFZhbHVlc0NhY2hlOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBA
IHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAogSW5QbGFjZUFic3RyYWN0U3Rh
dGU6OkluUGxhY2VBYnN0cmFjdFN0YXRlKEdyYXBoJiBncmFwaCkKICAgICA6IG1fZ3JhcGgoZ3Jh
cGgpCi0gICAgLCBtX2Fic3RyYWN0VmFsdWVzKGdyYXBoLmFic3RyYWN0VmFsdWVzQ2FjaGUoKSkK
KyAgICAsIG1fYWJzdHJhY3RWYWx1ZXMoKmdyYXBoLm1fYWJzdHJhY3RWYWx1ZXNDYWNoZSkKICAg
ICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3Jh
cGgubV9sb2NhbFZhcnMpCiAgICAgLCBtX2Jsb2NrKDApCiB7CkBAIC01NywxOSArNTcsMjIgQEAg
dm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgIEFTU0VSVChiYXNp
Y0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52
YWx1ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgQVNTRVJUKGJhc2ljQmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IGJhc2ljQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZkxvY2FscygpKTsKIAotICAgIC8vIENlcnRhaW4gcGhhc2VzIGluc2VydCBu
b2RlcyBpbiBhIGJsb2NrIGFmdGVyIHJ1bm5pbmcgdGhyb3VnaCBpdC4KLSAgICAvLyBXZSBjYW5u
b3QgcmVzZXJ2ZSB0aGUgc3BhY2UgZm9yIEFic3RyYWN0VmFsdWVzIHdoZW4gaW5pdGlhbGl6aW5n
IEFic3RyYWN0U3RhdGUgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHZhbHVlcwotICAgIC8vIGNhbiBp
bmNyZWFzZSBhcyB3ZSBleGVjdXRlLiBJbnN0ZWFkLCB3ZSBpbmNyZWFzZSB0aGUgc2l6ZSBhcyBu
ZWVkZWQgYmVmb3JlIHByb2Nlc3NpbmcgZWFjaCBibG9jay4KLSAgICBtX2Fic3RyYWN0VmFsdWVz
LnJlc2l6ZShtX2dyYXBoLm1heE5vZGVDb3VudCgpKTsKKyAgICBtX2Fic3RyYWN0VmFsdWVzLnJl
c2l6ZSgpOwogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+c2l6
ZSgpOyBpKyspCi0gICAgICAgIGZvck5vZGUoYmFzaWNCbG9jay0+YXQoaSkpLmNsZWFyKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLT5zaXplKCk7IGkrKykgeworICAg
ICAgICBOb2RlRmxvd1Byb2plY3Rpb246OmZvckVhY2goCisgICAgICAgICAgICBiYXNpY0Jsb2Nr
LT5hdChpKSwgWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKKyAgICAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVQcm9qZWN0aW9uKS5jbGVhcigpOworICAgICAgICAgICAg
fSk7CisgICAgfQogCiAgICAgbV92YXJpYWJsZXMgPSBiYXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQ7
CiAgICAgCiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQpCi0gICAgICAgICAgICBm
b3JOb2RlKGVudHJ5Lm5vZGUpID0gZW50cnkudmFsdWU7CisgICAgICAgIGZvciAoTm9kZUFic3Ry
YWN0VmFsdWVQYWlyJiBlbnRyeSA6IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkKSB7Cisg
ICAgICAgICAgICBpZiAoZW50cnkubm9kZS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICBmb3JOb2RlKGVudHJ5Lm5vZGUpID0gZW50cnkudmFsdWU7CisgICAgICAgIH0KICAgICB9CiAg
ICAgYmFzaWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOwogICAgIGJhc2ljQmxvY2st
PmNmYUhhc1Zpc2l0ZWQgPSB0cnVlOwpAQCAtODAsMTIgKzgzLDEyIEBAIHZvaWQgSW5QbGFjZUFi
c3RyYWN0U3RhdGU6OmJlZ2luQmFzaWNCbG8KICAgICBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9
IGJhc2ljQmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZDsKIH0KIAotc3RhdGlj
IHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8QmFzaWNCbG9jazo6U1NBRGF0YTo6Tm9kZUFic3Ry
YWN0VmFsdWVQYWlyPiYgdmFsdWVzLCBjb25zdCBWZWN0b3I8Tm9kZSo+JiBsaXZlKQorc3RhdGlj
IHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiYgdmFsdWVz
LCBjb25zdCBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZSkKIHsKICAgICB2YWx1ZXMu
cmVzaXplKDApOwogICAgIHZhbHVlcy5yZXNlcnZlQ2FwYWNpdHkobGl2ZS5zaXplKCkpOwotICAg
IGZvciAoTm9kZSogbm9kZSA6IGxpdmUpCi0gICAgICAgIHZhbHVlcy51bmNoZWNrZWRBcHBlbmQo
QmFzaWNCbG9jazo6U1NBRGF0YTo6Tm9kZUFic3RyYWN0VmFsdWVQYWlyIHsgbm9kZSwgQWJzdHJh
Y3RWYWx1ZSgpIH0pOworICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBsaXZlKQor
ICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7IG5v
ZGUsIEFic3RyYWN0VmFsdWUoKSB9KTsKIH0KIAogdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6
aW5pdGlhbGl6ZSgpCkBAIC0xOTksNyArMjAyLDcgQEAgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0
ZTo6ZW5kQmFzaWNCbG9jawogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52
YWx1ZXNBdFRhaWwuc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICBibG9jay0+dmFsdWVzQXRUYWls
W2ldLm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKIAotICAgICAgICBmb3IgKGF1dG8mIHZhbHVlQXRU
YWlsIDogYmxvY2stPnNzYS0+dmFsdWVzQXRUYWlsKSB7CisgICAgICAgIGZvciAoTm9kZUFic3Ry
YWN0VmFsdWVQYWlyJiB2YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVlc0F0VGFpbCkgewog
ICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWVBdE5vZGUgPSBmb3JOb2RlKHZhbHVlQXRU
YWlsLm5vZGUpOwogICAgICAgICAgICAgdmFsdWVBdFRhaWwudmFsdWUubWVyZ2UodmFsdWVBdE5v
ZGUpOwogICAgICAgICAgICAgdmFsdWVBdE5vZGUgPSB2YWx1ZUF0VGFpbC52YWx1ZTsKQEAgLTI5
MSwxMyArMjk0LDEzIEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmwK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGZyb20tPnZhbHVlc0F0VGFpbC5zaXplKCk7IGktLTsp
CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHRvLT52YWx1ZXNBdEhlYWRbaV0ubWVyZ2UoZnJvbS0+
dmFsdWVzQXRUYWlsW2ldKTsKIAotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogdG8tPnNzYS0+
dmFsdWVzQXRIZWFkKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gZW50cnkubm9kZTsKKyAg
ICAgICAgZm9yIChOb2RlQWJzdHJhY3RWYWx1ZVBhaXImIGVudHJ5IDogdG8tPnNzYS0+dmFsdWVz
QXRIZWFkKSB7CisgICAgICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSA9IGVudHJ5Lm5v
ZGU7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgICBNZXJnaW5nIGZvciAiLCBub2RlLCAiOiBmcm9tICIsIGZvck5vZGUobm9kZSksICIgdG8g
IiwgZW50cnkudmFsdWUsICJcbiIpOwogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIHVuc2ln
bmVkIHZhbHVlQ291bnRJbkZyb21CbG9jayA9IDA7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGZy
b21CbG9ja1ZhbHVlQXRUYWlsIDogZnJvbS0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKKyAgICAgICAg
ICAgIGZvciAoTm9kZUFic3RyYWN0VmFsdWVQYWlyJiBmcm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZy
b20tPnNzYS0+dmFsdWVzQXRUYWlsKSB7CiAgICAgICAgICAgICAgICAgaWYgKGZyb21CbG9ja1Zh
bHVlQXRUYWlsLm5vZGUgPT0gbm9kZSkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZnJv
bUJsb2NrVmFsdWVBdFRhaWwudmFsdWUgPT0gZm9yTm9kZShub2RlKSk7CiAgICAgICAgICAgICAg
ICAgICAgICsrdmFsdWVDb3VudEluRnJvbUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMjA4
MzM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0
cmFjdFZhbHVlLmgiCiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCisjaW5jbHVkZSAi
REZHRmxvd01hcC5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5o
IgogCkBAIC00MywxMSArNDQsMTEgQEAgcHVibGljOgogICAgIAogICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0gICAgdm9pZCBjcmVhdGVW
YWx1ZUZvck5vZGUoTm9kZSopIHsgfQorICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGVG
bG93UHJvamVjdGlvbikgeyB9CiAgICAgCi0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2Rl
KiBub2RlKQorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5v
ZGUpCiAgICAgewotICAgICAgICByZXR1cm4gbV9hYnN0cmFjdFZhbHVlc1tub2RlLT5pbmRleCgp
XTsKKyAgICAgICAgcmV0dXJuIG1fYWJzdHJhY3RWYWx1ZXMuYXQobm9kZSk7CiAgICAgfQogICAg
IAogICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoRWRnZSBlZGdlKQpAQCAtMTMyLDcgKzEzMyw3
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAKLSAgICBWZWN0b3I8QWJz
dHJhY3RWYWx1ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBtX2Fic3RyYWN0VmFsdWVzOwor
ICAgIEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4mIG1fYWJzdHJhY3RWYWx1ZXM7CiAgICAgT3BlcmFu
ZHM8QWJzdHJhY3RWYWx1ZT4gbV92YXJpYWJsZXM7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgzMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRG
R0Jsb2NrU2V0LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1Byb2plY3Rpb24uaCIKICNpbmNsdWRlICJE
RkdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgpAQCAtMTIxLDcgKzEyMiw3IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFJlbGF0aW9uc2hpcChOb2RlKiBsZWZ0
LCBOb2RlKiByaWdodCwgS2luZCBraW5kLCBpbnQgb2Zmc2V0ID0gMCkKKyAgICBSZWxhdGlvbnNo
aXAoTm9kZUZsb3dQcm9qZWN0aW9uIGxlZnQsIE5vZGVGbG93UHJvamVjdGlvbiByaWdodCwgS2lu
ZCBraW5kLCBpbnQgb2Zmc2V0ID0gMCkKICAgICAgICAgOiBtX2xlZnQobGVmdCkKICAgICAgICAg
LCBtX3JpZ2h0KHJpZ2h0KQogICAgICAgICAsIG1fa2luZChraW5kKQpAQCAtMTMyLDE3ICsxMzMs
MTcgQEAgcHVibGljOgogICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2xlZnQgIT0gbV9yaWdodCk7
CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBSZWxhdGlvbnNoaXAgc2FmZUNyZWF0ZShOb2RlKiBs
ZWZ0LCBOb2RlKiByaWdodCwgS2luZCBraW5kLCBpbnQgb2Zmc2V0ID0gMCkKKyAgICBzdGF0aWMg
UmVsYXRpb25zaGlwIHNhZmVDcmVhdGUoTm9kZUZsb3dQcm9qZWN0aW9uIGxlZnQsIE5vZGVGbG93
UHJvamVjdGlvbiByaWdodCwgS2luZCBraW5kLCBpbnQgb2Zmc2V0ID0gMCkKICAgICB7Ci0gICAg
ICAgIGlmICghbGVmdCB8fCAhcmlnaHQgfHwgbGVmdCA9PSByaWdodCkKKyAgICAgICAgaWYgKCFs
ZWZ0LmlzU3RpbGxWYWxpZCgpIHx8ICFyaWdodC5pc1N0aWxsVmFsaWQoKSB8fCBsZWZ0ID09IHJp
Z2h0KQogICAgICAgICAgICAgcmV0dXJuIFJlbGF0aW9uc2hpcCgpOwogICAgICAgICByZXR1cm4g
UmVsYXRpb25zaGlwKGxlZnQsIHJpZ2h0LCBraW5kLCBvZmZzZXQpOwogICAgIH0KIAotICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX2xlZnQ7IH0KICAgICAKLSAg
ICBOb2RlKiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9Ci0gICAgTm9kZSogcmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIGxlZnQo
KSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBOb2RlRmxvd1Byb2plY3Rpb24gcmlnaHQo
KSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9CiAgICAgaW50IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9
CiAKQEAgLTI1OCw3ICsyNTksNyBAQCBwdWJsaWM6CiAgICAgLy8gSWYgcG9zc2libGUsIHJldHVy
bnMgYSBmb3JtIG9mIHRoaXMgcmVsYXRpb25zaGlwIHdoZXJlIHRoZSBnaXZlbiBub2RlIGlzIHRo
ZSBsZWZ0CiAgICAgLy8gc2lkZS4gUmV0dXJucyBhIG51bGwgcmVsYXRpb25zaGlwIGlmIHRoaXMg
cmVsYXRpb25zaGlwIGNhbm5vdCBzYXkgYW55dGhpbmcgYWJvdXQgdGhpcwogICAgIC8vIG5vZGUu
Ci0gICAgUmVsYXRpb25zaGlwIGZvck5vZGUoTm9kZSogbm9kZSkgY29uc3QKKyAgICBSZWxhdGlv
bnNoaXAgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkgY29uc3QKICAgICB7CiAgICAg
ICAgIGlmIChtX2xlZnQgPT0gbm9kZSkKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKQEAgLTI2
Nyw3ICsyNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBSZWxhdGlvbnNoaXAoKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBzZXRMZWZ0KE5vZGUqIGxlZnQpCisgICAgdm9pZCBzZXRMZWZ0
KE5vZGVGbG93UHJvamVjdGlvbiBsZWZ0KQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGVmdCAhPSBtX3JpZ2h0KTsKICAgICAgICAgbV9sZWZ0ID0gbGVmdDsKQEAgLTk4NCwxMyArOTg1
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQogICAgIAotICAgIE5vZGUqIG1fbGVmdDsKLSAgICBOb2RlKiBtX3JpZ2h0OworICAgIE5v
ZGVGbG93UHJvamVjdGlvbiBtX2xlZnQ7CisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG1fcmlnaHQ7
CiAgICAgS2luZCBtX2tpbmQ7CiAgICAgaW50IG1fb2Zmc2V0OyAvLyBUaGlzIG9mZnNldCBjYW4g
YmUgYXJiaXRyYXJpbHkgbGFyZ2UuCiB9OwogCi10eXBlZGVmIEhhc2hNYXA8Tm9kZSosIFZlY3Rv
cjxSZWxhdGlvbnNoaXA+PiBSZWxhdGlvbnNoaXBNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Tm9kZUZs
b3dQcm9qZWN0aW9uLCBWZWN0b3I8UmVsYXRpb25zaGlwPj4gUmVsYXRpb25zaGlwTWFwOwogCiBj
bGFzcyBJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJs
aWM6CkBAIC0xMzE0LDcgKzEzMTUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocmVsYXRpb25zaGlwLm1pblZhbHVlT2ZMZWZ0KCkgPj0gMCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub25OZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAucmlnaHQoKSA9PSBu
b2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hp
cC5yaWdodCgpID09IG5vZGUtPmNoaWxkMigpLm5vZGUoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAua2luZCgpID09IFJlbGF0aW9uc2hpcDo6RXF1YWwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgcmVsYXRpb25zaGlwLm9mZnNldCgp
IDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVzc1RoYW5MZW5ndGggPSB0
cnVlOwpAQCAtMTQ5MSwyMyArMTQ5MiwxNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgICAgICBzZXRSZWxhdGlvbnNo
aXAoCi0gICAgICAgICAgICAgICAgUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRlKAotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPnBoaSgpLCBSZWxhdGlvbnNo
aXA6OkVxdWFsLCAwKSk7CisgICAgICAgICAgICBzZXRFcXVpdmFsZW5jZSgKKyAgICAgICAgICAg
ICAgICBub2RlLT5jaGlsZDEoKS5ub2RlKCksCisgICAgICAgICAgICAgICAgTm9kZUZsb3dQcm9q
ZWN0aW9uKG5vZGUtPnBoaSgpLCBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdykpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBp
dGVyID0gbV9yZWxhdGlvbnNoaXBzLmZpbmQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAg
ICAgICAgIGlmIChpdGVyICE9IG1fcmVsYXRpb25zaGlwcy5lbmQoKSkgewotICAgICAgICAgICAg
ICAgIFZlY3RvcjxSZWxhdGlvbnNoaXA+IHRvQWRkOwotICAgICAgICAgICAgICAgIGZvciAoUmVs
YXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IGl0ZXItPnZhbHVlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFJlbGF0aW9uc2hpcCBuZXdSZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXA7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5waGkoKSA9PSBuZXdSZWxhdGlvbnNoaXAucmlnaHQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICBu
ZXdSZWxhdGlvbnNoaXAuc2V0TGVmdChub2RlLT5waGkoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHRvQWRkLmFwcGVuZChuZXdSZWxhdGlvbnNoaXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBmb3IgKFJlbGF0aW9uc2hpcCByZWxhdGlvbnNoaXAgOiB0b0FkZCkKLSAgICAg
ICAgICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKHJlbGF0aW9uc2hpcCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgIGNhc2UgUGhpOiB7CisgICAgICAgICAgICBzZXRFcXVpdmFsZW5jZSgKKyAg
ICAgICAgICAgICAgICBOb2RlRmxvd1Byb2plY3Rpb24obm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9u
OjpTaGFkb3cpLAorICAgICAgICAgICAgICAgIG5vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTUxNiw2ICsxNTEwLDI2IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCBzZXRFcXVpdmFsZW5jZShOb2RlRmxvd1By
b2plY3Rpb24gb2xkTm9kZSwgTm9kZUZsb3dQcm9qZWN0aW9uIG5ld05vZGUpCisgICAgeworICAg
ICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRlKG9sZE5vZGUsIG5l
d05vZGUsIFJlbGF0aW9uc2hpcDo6RXF1YWwsIDApKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8g
aXRlciA9IG1fcmVsYXRpb25zaGlwcy5maW5kKG9sZE5vZGUpOworICAgICAgICBpZiAoaXRlciAh
PSBtX3JlbGF0aW9uc2hpcHMuZW5kKCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxSZWxhdGlvbnNo
aXA+IHRvQWRkOworICAgICAgICAgICAgZm9yIChSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwIDog
aXRlci0+dmFsdWUpIHsKKyAgICAgICAgICAgICAgICBSZWxhdGlvbnNoaXAgbmV3UmVsYXRpb25z
aGlwID0gcmVsYXRpb25zaGlwOworICAgICAgICAgICAgICAgIC8vIEF2b2lkIGNyZWF0aW5nIGFu
eSBraW5kIG9mIHNlbGYtcmVsYXRpb25zaGlwLgorICAgICAgICAgICAgICAgIGlmIChuZXdOb2Rl
Lm5vZGUoKSA9PSBuZXdSZWxhdGlvbnNoaXAucmlnaHQoKS5ub2RlKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIG5ld1JlbGF0aW9uc2hpcC5zZXRMZWZ0
KG5ld05vZGUpOworICAgICAgICAgICAgICAgIHRvQWRkLmFwcGVuZChuZXdSZWxhdGlvbnNoaXAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChSZWxhdGlvbnNoaXAgcmVsYXRpb25z
aGlwIDogdG9BZGQpCisgICAgICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKHJlbGF0aW9uc2hp
cCk7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgICAgICAKICAgICB2b2lkIHNldFJlbGF0aW9u
c2hpcChSZWxhdGlvbnNoaXAgcmVsYXRpb25zaGlwLCB1bnNpZ25lZCB0aW1lVG9MaXZlID0gMSkK
ICAgICB7CiAgICAgICAgIHNldFJlbGF0aW9uc2hpcChtX3JlbGF0aW9uc2hpcHMsIHJlbGF0aW9u
c2hpcCwgdGltZVRvTGl2ZSk7CkBAIC0xNjY5LDcgKzE2ODMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgaWYgKG1fc2VlbkJsb2Nrcy5hZGQodGFyZ2V0KSkgewogICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIG5ldyBibG9jay4gV2UgY29weSBzdWJqZWN0IHRvIGxpdmVuZXNzIHBydW5p
bmcuCi0gICAgICAgICAgICBhdXRvIGlzTGl2ZSA9IFsmXSAoTm9kZSogbm9kZSkgeworICAgICAg
ICAgICAgYXV0byBpc0xpdmUgPSBbJl0gKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV96ZXJvKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LT5zc2EtPmxpdmVBdEhlYWQu
Y29udGFpbnMobm9kZSk7CkBAIC0xNzAxLDcgKzE3MTUsNyBAQCBwcml2YXRlOgogICAgICAgICAv
LyBhc3NpZ25lZCB3b3VsZCBvbmx5IGhhcHBlbiBpZiB3ZSBoYXZlIG5vdCBwcm9jZXNzZWQgdGhl
IG5vZGUncyBwcmVkZWNlc3Nvci4gV2UKICAgICAgICAgLy8gc2hvdWxkbid0IHByb2Nlc3MgYmxv
Y2tzIHVudGlsIHdlIGhhdmUgcHJvY2Vzc2VkIHRoZSBibG9jaydzIHByZWRlY2Vzc29yIGJlY2F1
c2Ugd2UKICAgICAgICAgLy8gYXJlIHVzaW5nIHJldmVyc2UgcG9zdG9yZGVyLgotICAgICAgICBW
ZWN0b3I8Tm9kZSo+IHRvUmVtb3ZlOworICAgICAgICBWZWN0b3I8Tm9kZUZsb3dQcm9qZWN0aW9u
PiB0b1JlbW92ZTsKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIGZvciAo
YXV0byYgZW50cnkgOiBtX3JlbGF0aW9uc2hpcHNBdEhlYWRbdGFyZ2V0XSkgewogICAgICAgICAg
ICAgYXV0byBpdGVyID0gcmVsYXRpb25zaGlwTWFwLmZpbmQoZW50cnkua2V5KTsKQEAgLTE3OTEs
NyArMTgwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IG1lcmdlZFJl
bGF0aW9uc2hpcHM7CiAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgOiB0b1JlbW92ZSkKKyAgICAgICAgZm9yIChOb2RlRmxvd1By
b2plY3Rpb24gbm9kZSA6IHRvUmVtb3ZlKQogICAgICAgICAgICAgbV9yZWxhdGlvbnNoaXBzQXRI
ZWFkW3RhcmdldF0ucmVtb3ZlKG5vZGUpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIGNoYW5n
ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZl
bmVzc0FuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRmxvd0luZGV4aW5n
LmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIK
ICNpbmNsdWRlICJERkdQaGFzZS5oIgpAQCAtNDQsMTAgKzQ1LDEyIEBAIHB1YmxpYzoKICAgICBM
aXZlbmVzc0FuYWx5c2lzUGhhc2UoR3JhcGgmIGdyYXBoKQogICAgICAgICA6IFBoYXNlKGdyYXBo
LCAibGl2ZW5lc3MgYW5hbHlzaXMiKQogICAgICAgICAsIG1fZGlydHlCbG9ja3MobV9ncmFwaC5u
dW1CbG9ja3MoKSkKKyAgICAgICAgLCBtX2luZGV4aW5nKCptX2dyYXBoLm1faW5kZXhpbmdDYWNo
ZSkKICAgICAgICAgLCBtX2xpdmVBdEhlYWQobV9ncmFwaCkKICAgICAgICAgLCBtX2xpdmVBdFRh
aWwobV9ncmFwaCkKLSAgICAgICAgLCBtX3dvcmtzZXQoZ3JhcGgubWF4Tm9kZUNvdW50KCkgLSAx
KQogICAgIHsKKyAgICAgICAgbV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPnJlY29tcHV0ZSgpOwor
ICAgICAgICBtX3dvcmtzZXQgPSBzdGQ6Om1ha2VfdW5pcXVlPEluZGV4U3BhcnNlU2V0PFVuc2Fm
ZVZlY3Rvck92ZXJmbG93Pj4obV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUtPm51bUluZGljZXMoKSk7
CiAgICAgfQogCiAgICAgYm9vbCBydW4oKQpAQCAtODAsMjAgKzgzLDIyIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhd
OwotICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4mIGxpdmVBdEhlYWQgPSBibG9jay0+c3Nh
LT5saXZlQXRIZWFkOworICAgICAgICAgICAgICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCwgMCwg
VW5zYWZlVmVjdG9yT3ZlcmZsb3csIDE+JgorICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFk
SW5kaWNlcyA9IG1fbGl2ZUF0SGVhZFtibG9ja0luZGV4XTsKKyAgICAgICAgICAgICAgICBWZWN0
b3I8Tm9kZUZsb3dQcm9qZWN0aW9uPiYgbGl2ZUF0SGVhZCA9IGJsb2NrLT5zc2EtPmxpdmVBdEhl
YWQ7CiAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC5yZXNpemUoMCk7CiAgICAgICAgICAgICAg
ICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0SGVhZEluZGljZXMuc2l6ZSgpKTsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4IDogbGl2ZUF0SGVhZEluZGljZXMp
Ci0gICAgICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG1fZ3JhcGgu
bm9kZUF0KGluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2Vk
QXBwZW5kKG1faW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5kZXgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRUYWlsSW5k
aWNlcyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8
Tm9kZSo+JiBsaXZlQXRUYWlsID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgICAg
ICAgICBjb25zdCBIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gs
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiYKKyAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0VGFpbEluZGljZXMgPSBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF07
CisgICAgICAgICAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmVBdFRhaWwg
PSBibG9jay0+c3NhLT5saXZlQXRUYWlsOwogICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVz
aXplKDApOwogICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVzZXJ2ZUNhcGFjaXR5KGxpdmVB
dFRhaWxJbmRpY2VzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA6IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgbGl2ZUF0
VGFpbC51bmNoZWNrZWRBcHBlbmQobV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGl2ZUF0VGFpbC51bmNoZWNrZWRBcHBlbmQobV9pbmRleGluZy5ub2RlUHJvamVj
dGlvbihpbmRleCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTEwNiw2NyArMTEx
LDU3IEBAIHByaXZhdGU6CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9j
ayhibG9ja0luZGV4KTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShibG9jaywgIk9ubHkg
ZGlydHkgYmxvY2tzIG5lZWRzIHVwZGF0ZXMuIEEgbnVsbCBibG9jayBzaG91bGQgbmV2ZXIgYmUg
ZGlydHkuIik7CiAKLSAgICAgICAgbV93b3Jrc2V0LmNsZWFyKCk7CisgICAgICAgIG1fd29ya3Nl
dC0+Y2xlYXIoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IG1fbGl2ZUF0VGFpbFti
bG9ja0luZGV4XSkKLSAgICAgICAgICAgIG1fd29ya3NldC5hZGQoaW5kZXgpOworICAgICAgICAg
ICAgbV93b3Jrc2V0LT5hZGQoaW5kZXgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAKLSAgICAgICAgICAgIC8vIEdpdmVuIGFuIFVw
c2lsb246Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgbjogVXBzaWxvbihAeCwg
XnApCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IHRoYXQgaXQgZGVmJ3Mg
QHAgYW5kIEBuIGFuZCB1c2VzIEB4LgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdp
dmVuIGEgUGhpOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIHA6IFBoaSgpCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gV2Ugc2F5IG5vdGhpbmcuIEl0J3MgbmVpdGhl
ciBhIHVzZSBub3IgYSBkZWYuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gR2l2ZW4g
YSBub2RlOgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFRoaW5neShAYSwg
QGIsIEBjKQotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRl
ZidzIEBuIGFuZCB1c2VzIEBhLCBAYiwgQGMuCisgICAgICAgICAgICBhdXRvIGhhbmRsZUVkZ2Ug
PSBbJl0gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBib29sIG5ld0VudHJ5ID0gbV93
b3Jrc2V0LT5hZGQobV9pbmRleGluZy5pbmRleChlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAg
ICAgIGVkZ2Uuc2V0S2lsbFN0YXR1cyhuZXdFbnRyeSA/IERvZXNLaWxsIDogRG9lc05vdEtpbGwp
OworICAgICAgICAgICAgfTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKLSAgICAgICAgICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKCFtX3dvcmtzZXQuY29udGFpbnMobm9kZS0+aW5kZXgoKSksICJV
cHNpbG9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVyIG5vZGVzLiIpOworICAg
ICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIW1fd29ya3NldC0+Y29udGFpbnMobm9k
ZS0+aW5kZXgoKSksICJVcHNpbG9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVy
IG5vZGVzLiIpOwogCiAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7Ci0g
ICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShwaGktPmluZGV4KCkpOwotICAgICAgICAg
ICAgICAgIG1fd29ya3NldC5hZGQobm9kZS0+Y2hpbGQxKCktPmluZGV4KCkpOworICAgICAgICAg
ICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKG1faW5kZXhpbmcuc2hhZG93SW5kZXgocGhpKSk7Cisg
ICAgICAgICAgICAgICAgaGFuZGxlRWRnZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIFBoaTogeworICAgICAg
ICAgICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKG1faW5kZXhpbmcuaW5kZXgobm9kZSkpOworICAg
ICAgICAgICAgICAgIG1fd29ya3NldC0+YWRkKG1faW5kZXhpbmcuc2hhZG93SW5kZXgobm9kZSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBtX3dvcmtzZXQucmVtb3ZlKG5vZGUtPmluZGV4KCkpOwot
ICAgICAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG5vZGUsIGFk
ZENoaWxkVXNlKTsKKyAgICAgICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5n
LmluZGV4KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbihub2Rl
LCBoYW5kbGVFZGdlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFVwZGF0ZSBsaXZlIGF0IGhlYWQuCi0gICAgICAgIGF1dG8m
IGxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF07Ci0gICAgICAgIGlmIChtX3dv
cmtzZXQuc2l6ZSgpID09IGxpdmVBdEhlYWQuc2l6ZSgpKQorICAgICAgICBWZWN0b3I8dW5zaWdu
ZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPiYgbGl2ZUF0SGVhZCA9IG1fbGl2ZUF0SGVh
ZFtibG9ja0luZGV4XTsKKyAgICAgICAgaWYgKG1fd29ya3NldC0+c2l6ZSgpID09IGxpdmVBdEhl
YWQuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGZvciAodW5z
aWduZWQgbGl2ZUluZGV4QXRIZWFkIDogbGl2ZUF0SGVhZCkKLSAgICAgICAgICAgIG1fd29ya3Nl
dC5yZW1vdmUobGl2ZUluZGV4QXRIZWFkKTsKLSAgICAgICAgQVNTRVJUKCFtX3dvcmtzZXQuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgIG1fd29ya3NldC0+cmVtb3ZlKGxpdmVJbmRleEF0SGVhZCk7
CisgICAgICAgIEFTU0VSVCghbV93b3Jrc2V0LT5pc0VtcHR5KCkpOwogCi0gICAgICAgIGxpdmVB
dEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0LnNpemUo
KSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbmV3VmFsdWUgOiBtX3dvcmtzZXQpCisgICAgICAg
IGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWQuc2l6ZSgpICsgbV93b3Jrc2V0
LT5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogKm1fd29ya3NldCkK
ICAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG5ld1ZhbHVlKTsKIAogICAg
ICAgICBib29sIGNoYW5nZWRQcmVkZWNlc3NvciA9IGZhbHNlOwogICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycykgewotICAgICAgICAgICAg
YXV0byYgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07Ci0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0KSB7CisgICAgICAgICAgICBIYXNo
U2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gsIFdURjo6VW5zaWduZWRX
aXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+PiYKKyAgICAgICAgICAgICAgICBsaXZlQXRU
YWlsID0gbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbmV3VmFsdWUgOiAqbV93b3Jrc2V0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGxpdmVBdFRh
aWwuYWRkKG5ld1ZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fZGlydHlCbG9j
a3MucXVpY2tTZXQocHJlZGVjZXNzb3ItPmluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWRQcmVkZWNlc3NvciA9IHRydWU7CkBAIC0xNzYsMjEgKzE3MSwxNyBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gY2hhbmdlZFByZWRlY2Vzc29yOwogICAgIH0KIAotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBhZGRDaGlsZFVzZShOb2RlKiwgRWRnZSYgZWRnZSkKLSAgICB7Ci0gICAg
ICAgIGJvb2wgbmV3RW50cnkgPSBtX3dvcmtzZXQuYWRkKGVkZ2UtPmluZGV4KCkpOwotICAgICAg
ICBlZGdlLnNldEtpbGxTdGF0dXMobmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsK
LSAgICB9Ci0KICAgICAvLyBCbG9ja3Mgd2l0aCBuZXcgbGl2ZSB2YWx1ZXMgYXQgdGFpbC4KICAg
ICBCaXRWZWN0b3IgbV9kaXJ0eUJsb2NrczsKKyAgICAKKyAgICBGbG93SW5kZXhpbmcmIG1faW5k
ZXhpbmc7CiAKICAgICAvLyBMaXZlIHZhbHVlcyBwZXIgYmxvY2sgZWRnZS4KICAgICBCbG9ja01h
cDxWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAxPj4gbV9saXZlQXRI
ZWFkOwogICAgIEJsb2NrTWFwPEhhc2hTZXQ8dW5zaWduZWQsIERlZmF1bHRIYXNoPHVuc2lnbmVk
Pjo6SGFzaCwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1bnNpZ25lZD4+PiBt
X2xpdmVBdFRhaWw7CiAKICAgICAvLyBTaW5nbGUgc3BhcnNlIHNldCBhbGxvY2F0ZWQgb25jZSBh
bmQgdXNlZCBieSBldmVyeSBiYXNpYyBibG9jay4KLSAgICBJbmRleFNwYXJzZVNldDxVbnNhZmVW
ZWN0b3JPdmVyZmxvdz4gbV93b3Jrc2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbmRleFNwYXJz
ZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4+IG1fd29ya3NldDsKIH07CiAKIGJvb2wgcGVyZm9y
bUxpdmVuZXNzQW5hbHlzaXMoR3JhcGgmIGdyYXBoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwODMzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYwLDE1ICsyNTYwLDE4IEBAIHB1Ymxp
YzoKICAgICBCYXNpY0Jsb2NrKiBvd25lcjsKIH07CiAKLWlubGluZSBib29sIG5vZGVDb21wYXJh
dG9yKE5vZGUqIGEsIE5vZGUqIGIpCi17Ci0gICAgcmV0dXJuIGEtPmluZGV4KCkgPCBiLT5pbmRl
eCgpOwotfQorc3RydWN0IE5vZGVDb21wYXJhdG9yIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBO
b2RlUHRyVHlwZT4KKyAgICBib29sIG9wZXJhdG9yKCkoTm9kZVB0clR5cGUgYSwgTm9kZVB0clR5
cGUgYikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhLT5pbmRleCgpIDwgYi0+aW5kZXgo
KTsKKyAgICB9Cit9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogQ1N0cmluZyBub2RlTGlzdER1
bXAoY29uc3QgVCYgbm9kZUxpc3QpCiB7Ci0gICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVM
aXN0LCBub2RlQ29tcGFyYXRvcik7CisgICAgcmV0dXJuIHNvcnRlZExpc3REdW1wKG5vZGVMaXN0
LCBOb2RlQ29tcGFyYXRvcigpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTI1Nzks
NyArMjU4Miw3IEBAIENTdHJpbmcgbm9kZU1hcER1bXAoY29uc3QgVCYgbm9kZU1hcCwgRHUKICAg
ICAgICAgdHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG5vZGVNYXAuYmVnaW4oKTsK
ICAgICAgICAgaXRlciAhPSBub2RlTWFwLmVuZCgpOyArK2l0ZXIpCiAgICAgICAgIGtleXMuYXBw
ZW5kKGl0ZXItPmtleSk7Ci0gICAgc3RkOjpzb3J0KGtleXMuYmVnaW4oKSwga2V5cy5lbmQoKSwg
bm9kZUNvbXBhcmF0b3IpOworICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCks
IE5vZGVDb21wYXJhdG9yKCkpOwogICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKICAgICBDb21t
YVByaW50ZXIgY29tbWE7CiAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwga2V5cy5zaXplKCk7
ICsraSkKQEAgLTI1OTMsNyArMjU5Niw3IEBAIENTdHJpbmcgbm9kZVZhbHVlUGFpckxpc3REdW1w
KGNvbnN0IFQmIG4KICAgICB1c2luZyBWID0gdHlwZW5hbWUgVDo6VmFsdWVUeXBlOwogICAgIFQg
c29ydGVkTGlzdCA9IG5vZGVWYWx1ZVBhaXJMaXN0OwogICAgIHN0ZDo6c29ydChzb3J0ZWRMaXN0
LmJlZ2luKCksIHNvcnRlZExpc3QuZW5kKCksIFtdKGNvbnN0IFYmIGEsIGNvbnN0IFYmIGIpIHsK
LSAgICAgICAgcmV0dXJuIG5vZGVDb21wYXJhdG9yKGEubm9kZSwgYi5ub2RlKTsKKyAgICAgICAg
cmV0dXJuIE5vZGVDb21wYXJhdG9yKCkoYS5ub2RlLCBiLm5vZGUpOwogICAgIH0pOwogCiAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZH
Tm9kZUFic3RyYWN0VmFsdWVQYWlyLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIE5vZGVBYnN0cmFjdFZhbHVlUGFpcjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChub2RlLCAiPT4i
LCB2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVB
YnN0cmFjdFZhbHVlUGFpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworc3RydWN0IE5vZGVBYnN0cmFj
dFZhbHVlUGFpciB7CisgICAgTm9kZUFic3RyYWN0VmFsdWVQYWlyKCkgeyB9CisgICAgCisgICAg
Tm9kZUFic3RyYWN0VmFsdWVQYWlyKE5vZGVGbG93UHJvamVjdGlvbiBub2RlLCBjb25zdCBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgOiBub2RlKG5vZGUpCisgICAgICAgICwgdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3Q7CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGU7CisgICAgQWJzdHJh
Y3RWYWx1ZSB2YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVGbG93UHJvamVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlRmxvd1By
b2plY3Rpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK3ZvaWQgTm9kZUZsb3dQcm9qZWN0aW9uOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIi0i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoa2luZCgpID09IFByaW1hcnkpIHsK
KyAgICAgICAgb3V0LnByaW50KG5vZGUoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
b3V0LnByaW50KCJzaGFkb3coIiwgbm9kZSgpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgTm9kZUZsb3dQcm9q
ZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICBQcmltYXJ5LAorICAg
ICAgICBTaGFkb3cKKyAgICB9OworICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbigpIHsgfQor
ICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbihOb2RlKiBub2RlKQorICAgICAgICA6IG1fd29y
ZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IE5vZGVGbG93UHJvamVjdGlvbihOb2RlKiBub2RlLCBLaW5kIGtpbmQpCisgICAgICAgIDogbV93
b3JkKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIHwgKGtpbmQgPT0gU2hhZG93ID8gc2hh
ZG93Qml0IDogMCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24o
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fd29yZChzaGFkb3dC
aXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX3dvcmQ7IH0KKyAgICAKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiAobV93b3JkICYgc2hhZG93Qml0KSA/IFNoYWRvdyA6IFByaW1hcnk7IH0KKyAgICAKKyAg
ICBOb2RlKiBub2RlKCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PE5vZGUqPihtX3dvcmQg
JiB+c2hhZG93Qml0KTsgfQorICAgIAorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuICpub2RlKCk7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gbm9k
ZSgpOyB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV93b3JkOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oTm9kZUZsb3dQ
cm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd29yZCA9PSBv
dGhlci5tX3dvcmQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShOb2RlRmxvd1By
b2plY3Rpb24gb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8KE5vZGVGbG93UHJvamVjdGlv
biBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgIT0gb3RoZXIua2luZCgp
KQorICAgICAgICAgICAgcmV0dXJuIGtpbmQoKSA8IG90aGVyLmtpbmQoKTsKKyAgICAgICAgcmV0
dXJuIG5vZGUoKSA8IG90aGVyLm5vZGUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj4oTm9kZUZsb3dQcm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG90aGVyIDwgKnRoaXM7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I8PShOb2RlRmxv
d1Byb2plY3Rpb24gb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA+
IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj49KE5vZGVGbG93UHJvamVj
dGlvbiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzIDwgb3RoZXIp
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBOb2RlRmxvd1Byb2plY3Rpb24oV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKyAgICAKKyAgICAvLyBQaGkgc2hhZG93IHBy
b2plY3Rpb25zIGNhbiBiZWNvbWUgaW52YWxpZCBiZWNhdXNlIHRoZSBQaGkgbWlnaHQgYmUgZm9s
ZGVkIHRvIHNvbWV0aGluZyBlbHNlLgorICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAqdGhpcyAmJiAoa2luZCgpID09IFByaW1hcnkgfHwgbm9kZSgp
LT5vcCgpID09IFBoaSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CisgICAgc3RhdGljIHZv
aWQgZm9yRWFjaChOb2RlKiBub2RlLCBjb25zdCBGdW5jJiBmdW5jKQorICAgIHsKKyAgICAgICAg
ZnVuYyhOb2RlRmxvd1Byb2plY3Rpb24obm9kZSkpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9
PSBQaGkpCisgICAgICAgICAgICBmdW5jKE5vZGVGbG93UHJvamVjdGlvbihub2RlLCBTaGFkb3cp
KTsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBzaGFk
b3dCaXQgPSAxOworICAgIAorICAgIHVpbnRwdHJfdCBtX3dvcmQgeyAwIH07Cit9OworCitzdHJ1
Y3QgTm9kZUZsb3dQcm9qZWN0aW9uSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goTm9k
ZUZsb3dQcm9qZWN0aW9uIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKE5vZGVGbG93UHJvamVjdGlvbiBhLCBOb2RlRmxvd1Byb2plY3Rpb24gYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCitu
YW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNo
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6Ok5vZGVGbG93UHJvamVj
dGlvbj4geworICAgIHR5cGVkZWYgSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbkhhc2ggSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiA6IFNp
bXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uPiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJy
aWVySW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDgzMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI2LDExICsxMjYsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAv
LyBDb25zdHJ1Y3QgdGhlIHN0YXRlLWF0LXRhaWwgYmFzZWQgb24gdGhlIGVwb2NocyBvZiBsaXZl
IG5vZGVzIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBlcG9jaC4gV2Ug
Z3JvdyBzdGF0ZS1hdC10YWlsIG1vbm90b25pY2FsbHkgdG8gZW5zdXJlIGNvbnZlcmdlbmNlLgog
ICAgICAgICAgICAgICAgICAgICBib29sIHRoaXNCbG9ja0NoYW5nZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFpbCkg
eworICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogYmxv
Y2stPnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUu
a2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmVw
b2NoKCkgIT0gbV9jdXJyZW50RXBvY2gpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBJZiB0aGUgbm9kZSBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50IGVwb2NoLCB0aGVuIHdlIG1h
eSBuZWVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVuIGEgYmFycmllciBv
biBpdCBpbiB0aGUgZnV0dXJlLiBTbywgYWRkIGl0IHRvIHRoZSBzdGF0ZS4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3RhdGVBdFRhaWwtPmF0KGJs
b2NrKS5hZGQobm9kZSkuaXNOZXdFbnRyeTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzQmxvY2tDaGFuZ2VkIHw9IG1fc3RhdGVBdFRhaWwtPmF0KGJsb2NrKS5hZGQobm9kZS5ub2Rl
KCkpLmlzTmV3RW50cnk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNzgsOCArMTgwLDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgbV9zdGF0ZS0+
YmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChO
b2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCkgewotICAgICAgICAgICAgICAgIGlm
IChtX3N0YXRlQXRIZWFkLT5hdChibG9jaykuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAg
IGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUua2luZCgpID09IE5vZGVGbG93UHJvamVjdGlvbjo6
U2hhZG93KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0ZUF0SGVhZC0+YXQoYmxvY2spLmNvbnRhaW5zKG5vZGUubm9kZSgpKSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBJZiBwcmV2aW91cyBibG9ja3MgdGVsbCB1cyB0aGF0IHRoaXMg
bm9kZSBtYXkgbmVlZCBhIGJhcnJpZXIgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIGZ1
dHVyZSwgdGhlbiBwdXQgaXQgaW4gdGhlIGFuY2llbnQgcHJpbW9yZGlhbCBlcG9jaC4gVGhpcyBm
b3JjZXMgdXMgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gZW1pdCBhIGJhcnJpZXIgb24gYW55
IHBvc3NpYmx5LWNlbGwgc3RvcmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGVwb2NoIG9mIHRoZQpAQCAt
MzI2LDcgKzMzMCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFVwc2lsb246Ci0gICAgICAgICAgICAgICAgbV9u
b2RlLT5waGkoKS0+c2V0RXBvY2gobV9ub2RlLT5lcG9jaCgpKTsKKyAgICAgICAgICAgICAgICAv
LyBBc3N1bWUgdGhlIHdvcnN0IGZvciBQaGlzIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3Jy
eSBhYm91dCBQaGkgc2hhZG93cy4KKyAgICAgICAgICAgICAgICBtX25vZGUtPnBoaSgpLT5zZXRF
cG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2NoKCkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIwODMzOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTYgQEAKKzIwMTYtMTEtMDMgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBERkcgcGxheXMgZmFzdCBhbmQgbG9vc2Ugd2l0aCB0aGUgc2hhZG93IHZhbHVl
cyBvZiBhIFBoaQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTY0MzA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBNYWRlIHRoaXMgQVBJIHVzZSBzaXplIHJhdGhlciB0aGFuIG1heEluZGV4IGFz
IGl0cyBpbml0aWFsaXphdGlvbiBwYXJhbWV0ZXIsIGJlY2F1c2UgdGhhdCdzCisgICAgICAgIGxl
c3MgY29uZnVzaW5nLgorCisgICAgICAgICogd3RmL0luZGV4U3BhcnNlU2V0Lmg6CisgICAgICAg
IChXVEY6OkluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNlU2V0KToK
KwogMjAxNi0xMS0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IFRoZSBHQyBzaG91bGQgYmUgaW4gYSB0aHJlYWQKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0luZGV4
U3BhcnNlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQu
aAkocmV2aXNpb24gMjA4MzM5KQorKysgU291cmNlL1dURi93dGYvSW5kZXhTcGFyc2VTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxv
d0hhbmRsZXIgPSBDcmFzCiBjbGFzcyBJbmRleFNwYXJzZVNldCB7CiAgICAgdHlwZWRlZiBWZWN0
b3I8dW5zaWduZWQsIDAsIE92ZXJmbG93SGFuZGxlcj4gVmFsdWVMaXN0OwogcHVibGljOgotICAg
IGV4cGxpY2l0IEluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIG1heFZhbHVlKTsKKyAgICBleHBsaWNp
dCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBzaXplKTsKIAogICAgIGJvb2wgYWRkKHVuc2lnbmVk
KTsKICAgICBib29sIHJlbW92ZSh1bnNpZ25lZCk7CkBAIC02NSw5ICs2NSw5IEBAIHByaXZhdGU6
CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Ci1pbmxpbmUgSW5kZXhT
cGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VTZXQodW5zaWduZWQgbWF4VmFs
dWUpCitpbmxpbmUgSW5kZXhTcGFyc2VTZXQ8T3ZlcmZsb3dIYW5kbGVyPjo6SW5kZXhTcGFyc2VT
ZXQodW5zaWduZWQgc2l6ZSkKIHsKLSAgICBtX21hcC5yZXNpemUobWF4VmFsdWUgKyAxKTsKKyAg
ICBtX21hcC5yZXNpemUoc2l6ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIE92ZXJmbG93SGFu
ZGxlcj4K
</data>
<flag name="review"
          id="316667"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>293861</attachid>
            <date>2016-11-03 21:52:52 -0700</date>
            <delta_ts>2016-11-03 21:52:52 -0700</delta_ts>
            <desc>patch for relanding</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>82162</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDgzNjcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE2LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgREZHIHBsYXlzIGZhc3QgYW5kIGxvb3NlIHdpdGggdGhlIHNoYWRvdyB2
YWx1ZXMgb2YgYSBQaGkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDMwOQorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyB0ZXN0IGRlbW9uc3RyYXRlcyB3aHkgdGhlIERGRyBuZWVkcyB0byBy
ZWNvZ25pemUgdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBoaS4KKworICAgICAgICAqIHN0cmVzcy9k
Zmctc3NhLXN3YXAuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNi0xMS0wMyAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjIwODM2NC4KSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy1zc2Etc3dh
cC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctc3NhLXN3YXAuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLXNzYS1zd2FwLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOCBAQAordmFyIGksYz0wOworZnVuY3Rpb24gZm9vKCkKK3sKKyAgICB2YXIg
YT0xLGI7Zm9yKGk9MDtpPDI7KytpKXtbYSxiXT1bYixhXTtjKyt9aWYoIWFeYil0aHJvdyBjCit9
Citub0lubGluZShmb28pOworZm9yKHZhciBrID0gMDsgayA8IDEwMDAwOyArK2spCisgICAgZm9v
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA4MzY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
OCBAQAorMjAxNi0xMS0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIERGRyBwbGF5cyBmYXN0IGFuZCBsb29zZSB3aXRoIHRoZSBzaGFkb3cgdmFsdWVzIG9mIGEg
UGhpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQz
MDkKKworICAgICAgICBSZXZpZXdlZCBieSBTYWFtIEJhcmF0aS4KKyAgICAgICAgCisgICAgICAg
IE9oIGJveSwgd2hhdCBhbiBlbWJhcnJhc3NpbmcgbWlzdGFrZSEgVGhlIHN0eWxlIG9mIFNTQSBJ
IGxpa2UgdG8gdXNlIGF2b2lkcyBibG9jay92YWx1ZQorICAgICAgICB0dXBsZXMgYXMgcGFyYW1l
dGVycyBvZiBhIFBoaSwgdGhlcmVieSBzaW1wbGlmeWluZyBDRkcgdHJhbnNmb3JtYXRpb25zIGFu
ZCBtYWtpbmcgUGhpIGxhcmdlbHkKKyAgICAgICAgbm90IGEgc3BlY2lhbCBjYXNlIGZvciBtb3N0
IGNvbXBpbGVyIHRyYW5zZm9ybXMuIEl0IGRvZXMgdGhpcyBieSBpbnRyb2R1Y2luZyBhbm90aGVy
IHZhbHVlCisgICAgICAgIGNhbGxlZCBVcHNpbG9uLCB3aGljaCBzdG9yZXMgYSB2YWx1ZSBpbnRv
IHNvbWUgUGhpLgorICAgICAgICAKKyAgICAgICAgQjMgdXNlcyB0aGlzIGFsc28uIFRoZSBlYXNp
ZXN0IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgVXBzaWxvbi9QaGkgYmVoYXZlIGxpa2UgaXMgdG8g
bG9vayBhdAorICAgICAgICB0aGUgQjMtPkFpciBsb3dlcmluZy4gQWlyIGlzIG5vdCBTU0EgLSBp
dCBoYXMgVG1wcyB0aGF0IHlvdSBjYW4gYXNzaWduIHRvIGFuZCB1c2UgYXMgbWFueQorICAgICAg
ICB0aW1lcyBhcyB5b3UgbGlrZS4gQjMgYWxsb2NhdGVzIG9uZSBUbXAgcGVyIFZhbHVlLCBhbmQg
YW4gZXh0cmEgInBoaVRtcCIgZm9yIFBoaXMsIHNvIHRoYXQKKyAgICAgICAgUGhpcyBnZXQgdHdv
IFRtcHMgdG90YWwuIFVwc2lsb24gc3RvcmVzIHRoZSB2YWx1ZSBpbnRvIHRoZSBwaGlUbXAgb2Yg
dGhlIFBoaSwgd2hpbGUgUGhpIG1vdmVzCisgICAgICAgIHRoZSB2YWx1ZSBmcm9tIGl0cyBwaGlU
bXAgdG8gaXRzIHRtcC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHN1
cHBvcnQgc2NlbmFyaW9zIGxpa2UgdGhpczoKKyAgICAgICAgCisgICAgICAgICAgICBhOiBQaGko
KQorICAgICAgICAgICAgYjogVXBzaWxvbihAeCwgXmEpCisgICAgICAgICAgICBjOiBVc2UoQGEp
CisgICAgICAgIAorICAgICAgICBIZXJlLCB3ZSB3YW50IEBjIHRvIHNlZSBAYSdzIHZhbHVlIGJl
Zm9yZSBAYi4gVGhhdCdzIGEgdmVyeSBiYXNpYyByZXF1aXJlbWVudCBvZiBTU0E6IHRoYXQKKyAg
ICAgICAgdGhlIGEgdmFsdWUgKGxpa2UgQGEpIGRvZXNuJ3QgY2hhbmdlIGR1cmluZyBpdHMgbGlm
ZXRpbWUuCisgICAgICAgIAorICAgICAgICBVbmZvcnR1bmF0ZWx5LCBERkcncyBsaXZlbmVzcyBh
bmFseXNpcywgYWJzdHJhY3QgaW50ZXJwcmV0ZXIsIGFuZCBpbnRlZ2VyIHJhbmdlIG9wdGltaXph
dGlvbgorICAgICAgICBhbGwgZmFpbGVkIHRvIGNvcnJlY3RseSBtb2RlbCBVcHNpbG9uL1BoaSB0
aGlzIHdheS4gVGhleSB3b3VsZCBhc3N1bWUgdGhhdCBpdCdzIGFjY3VyYXRlIHRvCisgICAgICAg
IG1vZGVsIHRoZSBVcHNpbG9uIGFzIHN0b3JpbmcgaW50byB0aGUgUGhpIGRpcmVjdGx5LgorICAg
ICAgICAKKyAgICAgICAgQmVjYXVzZSBERkcgZG9lcyBmbG93IGFuYWx5c2lzIG92ZXIgU1NBLCBt
YWtpbmcgaXQgY29ycmVjdCBtZWFucyBlbmFibGluZyBpdCB0byBzcGVhayBvZiB0aGUKKyAgICAg
ICAgc2hhZG93IHZhbHVlLiBUaGlzIGNoYW5nZSBhZGRyZXNzZXMgdGhpcyBwcm9ibGVtIGJ5IGlu
dHJvZHVjaW5nIHRoZSBjb25jZXB0IG9mIGEKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uLiBU
aGlzIGlzIGEga2V5IHRoYXQgbGV0cyB1cyBzcGVhayBvZiBib3RoIGEgTm9kZSdzIHByaW1hcnkg
dmFsdWUgYW5kIGl0cworICAgICAgICBvcHRpb25hbCAic2hhZG93IiB2YWx1ZS4gTGl2ZW5lc3Ms
IEFJLCBhbmQgaW50ZWdlciByYW5nZSBhcmUgbm93IGtleWVkIGJ5IE5vZGVGbG93UHJvamVjdGlv
bgorICAgICAgICByYXRoZXIgdGhhbiBOb2RlKi4gQ29uY2VwdHVhbGx5IHRoaXMgdHVybnMgb3V0
IHRvIGJlIGEgdmVyeSBzaW1wbGUgY2hhbmdlLCBidXQgaXQgZG9lcyB0b3VjaAorICAgICAgICBh
IGdvb2QgYW1vdW50IG9mIGNvZGUuCisgICAgICAgIAorICAgICAgICBUaGlzIGxvb2tzIHRvIGJl
IHBlcmYtbmV1dHJhbC4KKworICAgICAgICBSb2xsZWQgYmFjayBpbiBhZnRlciBmaXhpbmcgdGhl
IGRlYnVnIGJ1aWxkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiMy9haXIv
QWlyTGl2ZW5lc3MuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wTGl2ZW5lc3NBZGFwdGVy
OjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90TGl2ZW5lc3NB
ZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NB
ZGFwdGVyOjpudW1JbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QWJzdHJhY3RMaXZl
bmVzczo6QWJzdHJhY3RMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcExpdmVu
ZXNzQWRhcHRlcjo6bWF4SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpT
dGFja1Nsb3RMaXZlbmVzc0FkYXB0ZXI6Om1heEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6UmVnTGl2ZW5lc3NBZGFwdGVyOjptYXhJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyOjpmb3JOb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2Rl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpmb3JOb2RlKToKKyAg
ICAgICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAqIGRmZy9ERkdC
YXNpY0Jsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3MuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OmxpdmVOb2Rlc0F0SGVhZCk6CisgICAgICAgICogZGZnL0RGR0NvbWJp
bmVkTGl2ZW5lc3MuaDoKKyAgICAgICAgKiBkZmcvREZHRmxvd0luZGV4aW5nLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjpGbG93SW5kZXhpbmcpOgorICAgICAg
ICAoSlNDOjpERkc6OkZsb3dJbmRleGluZzo6fkZsb3dJbmRleGluZyk6CisgICAgICAgIChKU0M6
OkRGRzo6Rmxvd0luZGV4aW5nOjpyZWNvbXB1dGUpOgorICAgICAgICAqIGRmZy9ERkdGbG93SW5k
ZXhpbmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjpncmFwaCk6
CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd0luZGV4aW5nOjpudW1JbmRpY2VzKToKKyAgICAgICAg
KEpTQzo6REZHOjpGbG93SW5kZXhpbmc6OmluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93
SW5kZXhpbmc6OnNoYWRvd0luZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpGbG93SW5kZXhpbmc6
Om5vZGVQcm9qZWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHRmxvd01hcC5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjpGbG93TWFwKToKKyAgICAgICAgKEpTQzo6REZHOjpG
bG93TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpERkc6OkZsb3dNYXA6OmdyYXBoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpGbG93TWFwOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6Rmxvd01h
cDo6YXRTaGFkb3cpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6CisgICAg
ICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFic3RyYWN0
VmFsdWVzQ2FjaGUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OkluUGxh
Y2VBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0
ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZlVmFsdWVzKToK
KyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAg
ICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJ
blBsYWNlQWJzdHJhY3RTdGF0ZTo6Y3JlYXRlVmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6
REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgICogZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHTGl2ZW5l
c3NBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lz
UGhhc2U6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5l
c3NBbmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlz
aXNQaGFzZTo6cHJvY2Vzc0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5
c2lzUGhhc2U6OmFkZENoaWxkVXNlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVDb21wYXJhdG9yOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpub2RlTGlzdER1bXApOgorICAgICAgICAoSlNDOjpERkc6Om5vZGVNYXBE
dW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpub2RlVmFsdWVQYWlyTGlzdER1bXApOgorICAgICAg
ICAoSlNDOjpERkc6Om5vZGVDb21wYXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZH
Tm9kZUFic3RyYWN0VmFsdWVQYWlyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZUFic3RyYWN0VmFsdWVQYWlyOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHTm9kZUFic3RyYWN0
VmFsdWVQYWlyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVBYnN0cmFjdFZhbHVl
UGFpcjo6Tm9kZUFic3RyYWN0VmFsdWVQYWlyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZUZsb3dQ
cm9qZWN0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0
aW9uOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6Tm9kZUZsb3dQcm9qZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6a2luZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpub2RlKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRvci0+KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Rmxvd1Byb2plY3Rpb246Omhhc2gpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVj
dGlvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9u
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246Om9w
ZXJhdG9yPCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRv
cj4pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlvbjo6b3BlcmF0b3I8PSk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpvcGVyYXRvcj49KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246OmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb246OmlzU3RpbGxWYWxp
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb25IYXNoOjpoYXNoKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rpb25IYXNoOjplcXVhbCk6CisgICAgICAgICogZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDoKKwogMjAxNi0xMS0wMyAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIwODM2NC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIwODM2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5jcHAKICAgICBkZmcvREZHRmlu
YWxpemVyLmNwcAogICAgIGRmZy9ERkdGaXh1cFBoYXNlLmNwcAorICAgIGRmZy9ERkdGbG93SW5k
ZXhpbmcuY3BwCiAgICAgZGZnL0RGR0ZsdXNoRm9ybWF0LmNwcAogICAgIGRmZy9ERkdGbHVzaGVk
QXQuY3BwCiAgICAgZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3Bw
CkBAIC0zNDMsNyArMzQ0LDkgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcv
REZHTXVsdGlHZXRCeU9mZnNldERhdGEuY3BwCiAgICAgZGZnL0RGR05hdHVyYWxMb29wcy5jcHAK
ICAgICBkZmcvREZHTm9kZS5jcHAKKyAgICBkZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmNw
cAogICAgIGRmZy9ERkdOb2RlRmxhZ3MuY3BwCisgICAgZGZnL0RGR05vZGVGbG93UHJvamVjdGlv
bi5jcHAKICAgICBkZmcvREZHTm9kZU9yaWdpbi5jcHAKICAgICBkZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5jcHAKICAgICBkZmcvREZHT1NSRW50cnkuY3BwCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjA4MzY3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTEyOSw2ICsxMjksMTMgQEAKIAkJMEYxRTNBNDcxNTM0Q0JCOTAwMEY5NDU2
IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9y
bWF0U3RhdGUuaCAqLzsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNh
dmVQbGFuLmggKi87IH07CiAJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRkU1
MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMDE3N0YxRENBREMzMzAwRUE1OTUwIC8q
IERGR0Zsb3dJbmRleGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIwMTc3RDFEQ0FEQzMwMDBFQTU5NTAgLyogREZHRmxvd0luZGV4aW5nLmNw
cCAqLzsgfTsKKwkJMEYyMDE3ODAxRENBREMzNTAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3N0Ux
RENBREMzMDAwRUE1OTUwIC8qIERGR0Zsb3dJbmRleGluZy5oICovOyB9OworCQkwRjIwMTc4MjFE
Q0FERDQyMDBFQTU5NTAgLyogREZHRmxvd01hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODExRENBREQ0MDAwRUE1OTUwIC8qIERGR0Zsb3dN
YXAuaCAqLzsgfTsKKwkJMEYyMDE3ODUxRENBRTE0OTAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJv
amVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyMDE3ODQxRENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5oICovOyB9
OworCQkwRjIwMTc4NjFEQ0FFMTRDMDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjAxNzgz
MURDQUUxNDcwMEVBNTk1MCAvKiBERkdOb2RlRmxvd1Byb2plY3Rpb24uY3BwICovOyB9OworCQkw
RjIwMTc4OTFEQ0I5NDI0MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIwMTc4ODFEQ0I5
NDIyMDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggKi87IH07CisJCTBGMjAx
NzhBMURDQjk0MjYwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMDE3ODcxRENCOTQy
MjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAgKi87IH07CiAJCTBGMjBD
MjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5
IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi87IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0
QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNp
YWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25z
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3
RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNTE3LDYgKzI1MjQsMTMgQEAK
IAkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBh
dGggPSBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBs
YW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJT
YXZlUGxhbi5oOyBwYXRoID0gZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRkU1MUIxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0
UmVhc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFib3J0UmVhc29uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAv
KiBERkdGbG93SW5kZXhpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHRmxvd0luZGV4aW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdGbG93SW5kZXhpbmcuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc3RTFEQ0FEQzMwMDBFQTU5NTAgLyog
REZHRmxvd0luZGV4aW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Zs
b3dJbmRleGluZy5oOyBwYXRoID0gZGZnL0RGR0Zsb3dJbmRleGluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjIwMTc4MTFEQ0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGbG93TWFwLmg7IHBhdGggPSBk
ZmcvREZHRmxvd01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIwMTc4MzFE
Q0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05vZGVGbG93UHJvamVjdGlvbi5jcHA7IHBhdGgg
PSBkZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyMDE3ODQxRENBRTE0NzAwRUE1OTUwIC8qIERGR05vZGVGbG93UHJvamVjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdOb2RlRmxvd1Byb2plY3Rpb24u
aDsgcGF0aCA9IGRmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYyMDE3ODcxRENCOTQyMjAwRUE1OTUwIC8qIERGR05vZGVBYnN0cmFjdFZh
bHVlUGFpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdOb2Rl
QWJzdHJhY3RWYWx1ZVBhaXIuY3BwOyBwYXRoID0gZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFp
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjAxNzg4MURDQjk0MjIwMEVB
NTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmg7IHBhdGggPSBkZmcvREZHTm9k
ZUFic3RyYWN0VmFsdWVQYWlyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjBD
MjU4MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmlydHVhbFJlZ2lzdGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFs
aXphdGlvbktpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNp
YWxpemF0aW9uS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3RTE0
QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUNvbnZlbnRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02NzI5LDggKzY3NDMsNiBAQAogCQkJCTBGRkZDOTRFMTRFRjkwOTUwMEM3
MjUzMiAvKiBERkdDU0VQaGFzZS5oICovLAogCQkJCTBGMkZDNzcwMTZFMTJGNkYwMDM4RDk3NiAv
KiBERkdEQ0VQaGFzZS5jcHAgKi8sCiAJCQkJMEYyRkM3NzExNkUxMkY2RjAwMzhEOTc2IC8qIERG
R0RDRVBoYXNlLmggKi8sCi0JCQkJRTMyMkU1QTAxREE2NDQzNTAwNkU3NzA5IC8qIERGR0RPTUpJ
VFBhdGNocG9pbnRQYXJhbXMuY3BwICovLAotCQkJCUUzMjJFNUExMURBNjQ0MzUwMDZFNzcwOSAv
KiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmggKi8sCiAJCQkJMEY4RjJCOTcxNzJGMDRGRDAw
N0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8sCiAJCQkJMEY4RjJCOTgxNzJG
MDRGRDAwN0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5oICovLAogCQkJCTBGRkM5MjEz
MUI5NEU4M0UwMDcxREQ2NiAvKiBERkdEZXNpcmVkSW5mZXJyZWRUeXBlLmggKi8sCkBAIC02NzQ1
LDYgKzY3NTcsOCBAQAogCQkJCTBGNUExMjcxMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0Mu
Y3BwICovLAogCQkJCTBGNUExMjcyMTkyRDlGREYwMDg3NjRBMyAvKiBERkdEb2VzR0MuaCAqLywK
IAkJCQkwRkQ4MUFEMDE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5oICovLAorCQkJ
CUUzMjJFNUEwMURBNjQ0MzUwMDZFNzcwOSAvKiBERkdET01KSVRQYXRjaHBvaW50UGFyYW1zLmNw
cCAqLywKKwkJCQlFMzIyRTVBMTFEQTY0NDM1MDA2RTc3MDkgLyogREZHRE9NSklUUGF0Y2hwb2lu
dFBhcmFtcy5oICovLAogCQkJCTBGMUUzQTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVG
b3JtYXRTdGF0ZS5oICovLAogCQkJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2
ZXIuY3BwICovLAogCQkJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAq
LywKQEAgLTY3NjEsNiArNjc3NSw5IEBACiAJCQkJQTc4QTk3NkYxNzk3MzhCODAwOURGNzQ0IC8q
IERGR0ZpbmFsaXplci5oICovLAogCQkJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdG
aXh1cFBoYXNlLmNwcCAqLywKIAkJCQkwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4
dXBQaGFzZS5oICovLAorCQkJCTBGMjAxNzdEMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuY3BwICovLAorCQkJCTBGMjAxNzdFMURDQURDMzAwMEVBNTk1MCAvKiBERkdGbG93SW5k
ZXhpbmcuaCAqLywKKwkJCQkwRjIwMTc4MTFEQ0FERDQwMDBFQTU5NTAgLyogREZHRmxvd01hcC5o
ICovLAogCQkJCTBGOUQzMzk0MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuY3BwICov
LAogCQkJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLywKIAkJ
CQlBN0Q4OUNFODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwICovLApAQCAt
NjgyOCw5ICs2ODQ1LDEzIEBACiAJCQkJQTczNzgxMEIxNzk5RUEyRTAwODE3NTMzIC8qIERGR05h
dHVyYWxMb29wcy5oICovLAogCQkJCTBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2Rl
LmNwcCAqLywKIAkJCQk4NkVDQTNFOTEzMkRFRjFDMDAyQjJBRDcgLyogREZHTm9kZS5oICovLAor
CQkJCTBGMjAxNzg3MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIu
Y3BwICovLAorCQkJCTBGMjAxNzg4MURDQjk0MjIwMEVBNTk1MCAvKiBERkdOb2RlQWJzdHJhY3RW
YWx1ZVBhaXIuaCAqLywKIAkJCQkwRkI0QjUxRjE2QjYyNzcyMDAzRjY5NkIgLyogREZHTm9kZUFs
bG9jYXRvci5oICovLAogCQkJCTBGQTU4MUI3MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxh
Z3MuY3BwICovLAogCQkJCTBGQTU4MUI4MTUwRTk1MkEwMEI5QTJEOSAvKiBERkdOb2RlRmxhZ3Mu
aCAqLywKKwkJCQkwRjIwMTc4MzFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0
aW9uLmNwcCAqLywKKwkJCQkwRjIwMTc4NDFEQ0FFMTQ3MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQ
cm9qZWN0aW9uLmggKi8sCiAJCQkJMEY1RDA4NUMxQjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVP
cmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThBQjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3Jp
Z2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUyQTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmgg
Ki8sCkBAIC03NjEyLDYgKzc2MzMsNyBAQAogCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOERGQTFCRTk2QUE4MDAx
M0M4OEYgLyogQjNDQ2FsbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxNjFCRjAy
NzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MjAxNzgyMURDQURENDIwMEVBNTk1MCAvKiBERkdGbG93TWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzNzMwOTMxQzBENjdFRTAwMDUyQkZBIC8qIEFpclVzZUNvdW50cy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC04NDk4LDYgKzg1MjAsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYw
MDI5OURCMiAvKiBDTG9vcFN0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4
NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjIwMTc4NTFEQ0FFMTQ5MDBFQTU5NTAgLyogREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzU1NUI4QTFEQUUwM0E1MDBGMzY5MjEgLyogRE9NSklUQ2Fs
bERPTUdldHRlclBhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3
REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3
MEE0NzFENTQzQThCMDA2RTcyMzIgLyogQ2VsbENvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8sCkBA
IC04NTk1LDYgKzg2MTgsNyBAQAogCQkJCTE0MTQ0OENCMTNBMTc2RUMwMEY1QkExQSAvKiBNYXJr
ZWRCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTREMkYzREIxMzlGNEJFMjAwNDkxMDMx
IC8qIE1hcmtlZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJENkYxMjEzNTM5QTQxMDBC
MDJFODYgLyogTWFya1N0YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIwMTc4OTFEQ0I5NDI0
MDBFQTU5NTAgLyogREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjEyRTRDRDE1MjM4OUVDMDBDODM2QkUgLyogTWF0Y2hSZXN1bHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzNDBBNDg1MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQzQzBFMTZGNUNEMDBCMzQ0NjAgLyogTWF0aE9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCkBAIC04NjYzLDYgKzg2ODcsNyBAQAogCQkJCTBGQjM4NzkwMUJGQkM0NEQwMEUz
QUIxRSAvKiBBaXJPcHRpbWl6ZUJsb2NrT3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCURDRUUy
MjBEMUNFQkFGNzUwMDBDMjM5NiAvKiBERkdOdWxsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjAxNzgwMURDQURDMzUwMEVBNTk1MCAvKiBERkdGbG93
SW5kZXhpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAv
KiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0QTM4RkEx
QzhFMTNERjAwMTkwMzE4IC8qIFN1cGVyU2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC05ODU4LDYgKzk4ODMsNyBAQAogCQkJCUE1ODQwRTIwMTg3QjdCODYwMDg0
M0IxMCAvKiBJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3
NjIwNDFEQjkyNDI2MDBCN0EyRkQgLyogQ29sbGVjdGlvblNjb3BlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0OEE3QkVGMUI4Mjk3NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEYyMDE3OEExRENCOTQyNjAwRUE1OTUwIC8qIERGR05vZGVBYnN0
cmFjdFZhbHVlUGFpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1NTE3RjBCNzFDMDBB
QkIyMTcgLyogSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1Q0VF
RTE0MTg3RjNCQUQwMEU1NUM5OSAvKiBJbnNwZWN0b3JBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTEwMDg3LDYgKzEwMTEzLDcgQEAKIAkJCQkwRjM3MzA4QzFD
MEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyogTWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5MDIxM0UzRDEyM0E0MEMyMDBENDIyRjMgLyogTWVtb3J5U3RhdGlzdGljcy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjIwMTc3RjFEQ0FEQzMzMDBFQTU5NTAgLyogREZHRmxvd0luZGV4
aW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzNzk0
RTc1MUI3N0VCOTcwMDU1NDNBRSAvKiBNb2R1bGVBbmFseXplci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFMzU1RjM1MjFCN0RDODUzMDBDNTBEQzUgLyogTW9kdWxlTG9hZGVyUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMTAxODQsNiArMTAyMTEsNyBAQAogCQkJCUE1RkQwMDY3MTg5
QUZFOUMwMDYzMzIzMSAvKiBTY3JpcHRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVGRDAwNkQxODlCMDBBQTAwNjMzMjMxIC8qIFNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNUZEMDA2RjE4OUIwMEFBMDA2MzMyMzEgLyogU2NyaXB0Q2FsbFN0YWNrLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjAxNzg2MURDQUUxNEMwMEVBNTk1MCAvKiBERkdOb2Rl
Rmxvd1Byb2plY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwN0QxODlCMEI0QzAw
NjMzMjMxIC8qIFNjcmlwdENhbGxTdGFja0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUwM0ZBMjUxODhFRkZGRDAwMTEwRjE0IC8qIFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1NUQ5M0E1MTg1MDEyQTgwMDQwMERFRCAvKiBTY3JpcHRGdW5jdGlvbkNh
bGwuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAyMDgzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
c3RydWN0IFRtcExpdmVuZXNzQWRhcHRlciB7CiAKICAgICBUbXBMaXZlbmVzc0FkYXB0ZXIoQ29k
ZSYpIHsgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIG1heEluZGV4KENvZGUmIGNvZGUpCisgICAg
c3RhdGljIHVuc2lnbmVkIG51bUluZGljZXMoQ29kZSYgY29kZSkKICAgICB7CiAgICAgICAgIHVu
c2lnbmVkIG51bVRtcHMgPSBjb2RlLm51bVRtcHMoYWRhcHRlclR5cGUpOwogICAgICAgICByZXR1
cm4gQWJzb2x1dGVUbXBNYXBwZXI8YWRhcHRlclR5cGU+OjphYnNvbHV0ZUluZGV4KG51bVRtcHMp
OwpAQCAtNjUsOSArNjUsOSBAQCBzdHJ1Y3QgU3RhY2tTbG90TGl2ZW5lc3NBZGFwdGVyIHsKICAg
ICB7CiAgICAgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIG1heEluZGV4KENvZGUmIGNvZGUpCisg
ICAgc3RhdGljIHVuc2lnbmVkIG51bUluZGljZXMoQ29kZSYgY29kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkgLSAxOworICAgICAgICByZXR1cm4gY29k
ZS5zdGFja1Nsb3RzKCkuc2l6ZSgpOwogICAgIH0KICAgICBzdGF0aWMgYm9vbCBhY2NlcHRzVHlw
ZShBcmc6OlR5cGUpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgdW5zaWduZWQgdmFsdWVU
b0luZGV4KFN0YWNrU2xvdCogc3RhY2tTbG90KSB7IHJldHVybiBzdGFja1Nsb3QtPmluZGV4KCk7
IH0KQEAgLTgzLDkgKzgzLDkgQEAgc3RydWN0IFJlZ0xpdmVuZXNzQWRhcHRlciB7CiAKICAgICBS
ZWdMaXZlbmVzc0FkYXB0ZXIoQ29kZSYpIHsgfQogCi0gICAgc3RhdGljIHVuc2lnbmVkIG1heElu
ZGV4KENvZGUmKQorICAgIHN0YXRpYyB1bnNpZ25lZCBudW1JbmRpY2VzKENvZGUmKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFJlZzo6bWF4SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6bWF4
SW5kZXgoKSArIDE7CiAgICAgfQogCiAgICAgc3RhdGljIGJvb2wgYWNjZXB0c1R5cGUoQXJnOjpU
eXBlKSB7IHJldHVybiB0cnVlOyB9CkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGljOgogICAgIAog
ICAgIEFic3RyYWN0TGl2ZW5lc3MoQ29kZSYgY29kZSkKICAgICAgICAgOiBBZGFwdGVyKGNvZGUp
Ci0gICAgICAgICwgbV93b3Jrc2V0KEFkYXB0ZXI6Om1heEluZGV4KGNvZGUpKQorICAgICAgICAs
IG1fd29ya3NldChBZGFwdGVyOjpudW1JbmRpY2VzKGNvZGUpKQogICAgICAgICAsIG1fbGl2ZUF0
SGVhZChjb2RlLnNpemUoKSkKICAgICAgICAgLCBtX2xpdmVBdFRhaWwoY29kZS5zaXplKCkpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyLmgJKHJldmlzaW9uIDIwODM2NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHR3Jh
cGguaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0
aW9uLmgiCiAjaW5jbHVkZSAiREZHUGhpQ2hpbGRyZW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewpAQCAtNDEsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgQWJzdHJhY3RJbnRl
cnByZXRlcihHcmFwaCYsIEFic3RyYWN0U3RhdGVUeXBlJik7CiAgICAgfkFic3RyYWN0SW50ZXJw
cmV0ZXIoKTsKICAgICAKLSAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGUqIG5vZGUpCisg
ICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3N0YXRlLmZvck5vZGUobm9kZSk7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA4MzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODE3LDYgKzI4MTcsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICAKICAgICBjYXNlIFBoaToKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9n
cmFwaC5tX2Zvcm0gPT0gU1NBKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUoTm9k
ZUZsb3dQcm9qZWN0aW9uKG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KSk7CiAgICAg
ICAgIC8vIFRoZSBzdGF0ZSBvZiB0aGlzIG5vZGUgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZGVj
aWRlZCwgYnV0IGl0IG1heSBoYXZlIGJlY29tZSBhCiAgICAgICAgIC8vIGNvbnN0YW50LCBpbiB3
aGljaCBjYXNlIHdlJ2QgbGlrZSB0byBrbm93LgogICAgICAgICBpZiAoZm9yTm9kZShub2RlKS5t
X3ZhbHVlKQpAQCAtMjgyNCw4ICsyODI1LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVXBzaWxv
bjogewotICAgICAgICBtX3N0YXRlLmNyZWF0ZVZhbHVlRm9yTm9kZShub2RlLT5waGkoKSk7Ci0g
ICAgICAgIGZvck5vZGUobm9kZS0+cGhpKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIE5vZGVGbG93UHJvamVjdGlvbiBzaGFkb3cobm9kZS0+cGhpKCksIE5vZGVGbG93UHJv
amVjdGlvbjo6U2hhZG93KTsKKyAgICAgICAgaWYgKHNoYWRvdy5pc1N0aWxsVmFsaWQoKSkgewor
ICAgICAgICAgICAgbV9zdGF0ZS5jcmVhdGVWYWx1ZUZvck5vZGUoc2hhZG93KTsKKyAgICAgICAg
ICAgIGZvck5vZGUoc2hhZG93KSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0yOTc3LDExICsyOTgxLDE4IEBA
IHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBlbHNlCiAgICAg
ICAgIGNsb2JiZXJMaW1pdCsrOwogICAgIEFTU0VSVChjbG9iYmVyTGltaXQgPD0gbV9zdGF0ZS5i
bG9jaygpLT5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVyTGltaXQ7IGktLTsp
Ci0gICAgICAgIGZ1bmN0b3IoZm9yTm9kZShtX3N0YXRlLmJsb2NrKCktPmF0KGkpKSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IGNsb2JiZXJMaW1pdDsgaS0tOykgeworICAgICAgICBOb2RlRmxvd1By
b2plY3Rpb246OmZvckVhY2goCisgICAgICAgICAgICBtX3N0YXRlLmJsb2NrKCktPmF0KGkpLAor
ICAgICAgICAgICAgWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24pIHsKKyAg
ICAgICAgICAgICAgICBmdW5jdG9yKGZvck5vZGUobm9kZVByb2plY3Rpb24pKTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0KICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAg
IGZvciAoTm9kZSogbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKQotICAg
ICAgICAgICAgZnVuY3Rvcihmb3JOb2RlKG5vZGUpKTsKKyAgICAgICAgZm9yIChOb2RlRmxvd1By
b2plY3Rpb24gbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAg
ICAgICAgICBpZiAobm9kZS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICBmdW5jdG9y
KGZvck5vZGUobm9kZSkpOworICAgICAgICB9CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCiAgICAgICAgIGZ1
bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKSk7CkBAIC0zMDM3LDkgKzMwNDgs
OSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIHZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKIHsK
ICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKLSAgICBIYXNoU2V0PE5vZGUqPiBzZWVuOwor
ICAgIEhhc2hTZXQ8Tm9kZUZsb3dQcm9qZWN0aW9uPiBzZWVuOwogICAgIGlmIChtX2dyYXBoLm1f
Zm9ybSA9PSBTU0EpIHsKLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zdGF0ZS5ibG9jaygp
LT5zc2EtPmxpdmVBdEhlYWQpIHsKKyAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24gbm9k
ZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKSB7CiAgICAgICAgICAgICBzZWVu
LmFkZChub2RlKTsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCkBAIC0zMDQ4LDE1ICszMDU5
LDE3IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
fQogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RhdGUuYmxvY2soKS0+c2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fc3RhdGUuYmxvY2soKS0+YXQoaSk7
Ci0gICAgICAgIHNlZW4uYWRkKG5vZGUpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZSk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0NsZWFyKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLCAiOiIsIHZhbHVlKTsK
KyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9uOjpmb3JFYWNoKAorICAgICAgICAgICAgbV9zdGF0
ZS5ibG9jaygpLT5hdChpKSwgWyZdIChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZVByb2plY3Rpb24p
IHsKKyAgICAgICAgICAgICAgICBzZWVuLmFkZChub2RlUHJvamVjdGlvbik7CisgICAgICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGVQcm9qZWN0aW9uKTsKKyAg
ICAgICAgICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlUHJvamVjdGlvbiwg
IjoiLCB2YWx1ZSk7CisgICAgICAgICAgICB9KTsKICAgICB9CiAgICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IFNTQSkgewotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCkt
PnNzYS0+bGl2ZUF0VGFpbCkgeworICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2Rl
IDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdFRhaWwpIHsKICAgICAgICAgICAgIGlmIChz
ZWVuLmNvbnRhaW5zKG5vZGUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwCShy
ZXZpc2lvbiAyMDgzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFi
c3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNiArNDcsMTYgQEAgQXRUYWls
QWJzdHJhY3RTdGF0ZTo6QXRUYWlsQWJzdHJhY3RTdGF0ZQogCiBBdFRhaWxBYnN0cmFjdFN0YXRl
Ojp+QXRUYWlsQWJzdHJhY3RTdGF0ZSgpIHsgfQogCi12b2lkIEF0VGFpbEFic3RyYWN0U3RhdGU6
OmNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKiBub2RlKQordm9pZCBBdFRhaWxBYnN0cmFjdFN0YXRl
OjpjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUpCiB7CiAgICAgbV92
YWx1ZXNBdFRhaWxNYXAuYXQobV9ibG9jaykuYWRkKG5vZGUsIEFic3RyYWN0VmFsdWUoKSk7CiB9
CiAKLUFic3RyYWN0VmFsdWUmIEF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZSogbm9k
ZSkKK0Fic3RyYWN0VmFsdWUmIEF0VGFpbEFic3RyYWN0U3RhdGU6OmZvck5vZGUoTm9kZUZsb3dQ
cm9qZWN0aW9uIG5vZGUpCiB7CiAgICAgYXV0byYgdmFsdWVzQXRUYWlsID0gbV92YWx1ZXNBdFRh
aWxNYXAuYXQobV9ibG9jayk7Ci0gICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT46Oml0
ZXJhdG9yIGl0ZXIgPSB2YWx1ZXNBdFRhaWwuZmluZChub2RlKTsKLSAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG5vZGUsIGl0ZXIgIT0gdmFsdWVzQXRUYWlsLmVuZCgpKTsKKyAgICBIYXNoTWFwPE5v
ZGVGbG93UHJvamVjdGlvbiwgQWJzdHJhY3RWYWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSB2YWx1ZXNB
dFRhaWwuZmluZChub2RlKTsKKyAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUubm9kZSgpLCBp
dGVyICE9IHZhbHVlc0F0VGFpbC5lbmQoKSk7CiAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuaAkocmV2aXNpb24gMjA4MzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tNYXAuaCIK
ICNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7IAogCkBAIC00Nyw4ICs0OCw4IEBA
IHB1YmxpYzoKICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlKik7Ci0gICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShO
b2RlKik7CisgICAgdm9pZCBjcmVhdGVWYWx1ZUZvck5vZGUoTm9kZUZsb3dQcm9qZWN0aW9uKTsK
KyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbik7CiAgICAgQWJz
dHJhY3RWYWx1ZSYgZm9yTm9kZShFZGdlIGVkZ2UpIHsgcmV0dXJuIGZvck5vZGUoZWRnZS5ub2Rl
KCkpOyB9CiAgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJu
IG1fYmxvY2stPnZhbHVlc0F0VGFpbDsgfQogICAgIApAQCAtNjYsNyArNjcsNyBAQCBwdWJsaWM6
CiAKIHByaXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7Ci0gICAgQmxvY2tNYXA8SGFzaE1hcDxO
b2RlKiwgQWJzdHJhY3RWYWx1ZT4+IG1fdmFsdWVzQXRUYWlsTWFwOworICAgIEJsb2NrTWFwPEhh
c2hNYXA8Tm9kZUZsb3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRhaWxN
YXA7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAyMDgzNjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMtMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdCcmFuY2hE
aXJlY3Rpb24uaCIKICNpbmNsdWRlICJERkdGbHVzaGVkQXQuaCIKICNpbmNsdWRlICJERkdOb2Rl
LmgiCisjaW5jbHVkZSAiREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgiCiAjaW5jbHVkZSAiREZH
Tm9kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgogI2lu
Y2x1ZGUgIk9wZXJhbmRzLmgiCkBAIC0yNDgsMTIgKzI0OSw4IEBAIHN0cnVjdCBCYXNpY0Jsb2Nr
IDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJp
bGl0eUF0SGVhZDsKICAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsK
IAotICAgICAgICBWZWN0b3I8Tm9kZSo+IGxpdmVBdEhlYWQ7Ci0gICAgICAgIFZlY3RvcjxOb2Rl
Kj4gbGl2ZUF0VGFpbDsKLSAgICAgICAgc3RydWN0IE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlOwotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsK
LSAgICAgICAgfTsKKyAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4gbGl2ZUF0SGVh
ZDsKKyAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4gbGl2ZUF0VGFpbDsKICAgICAg
ICAgVmVjdG9yPE5vZGVBYnN0cmFjdFZhbHVlUGFpcj4gdmFsdWVzQXRIZWFkOwogICAgICAgICBW
ZWN0b3I8Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiB2YWx1ZXNBdFRhaWw7CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21iaW5lZExpdmVuZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbWJpbmVkTGl2ZW5lc3Mu
Y3BwCShyZXZpc2lvbiAyMDgzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bWJpbmVkTGl2ZW5lc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw4ICszOCwxMCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBIYXNoU2V0PE5vZGUqPiBsaXZlTm9kZXNBdEhl
YWQoR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBIYXNoU2V0PE5vZGUq
PiBzZWVuOwotICAgIGZvciAoTm9kZSogbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpCi0g
ICAgICAgIHNlZW4uYWRkKG5vZGUpOworICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUg
OiBibG9jay0+c3NhLT5saXZlQXRIZWFkKSB7CisgICAgICAgIGlmIChub2RlLmtpbmQoKSA9PSBO
b2RlRmxvd1Byb2plY3Rpb246OlByaW1hcnkpCisgICAgICAgICAgICBzZWVuLmFkZChub2RlLm5v
ZGUoKSk7CisgICAgfQogICAgIAogICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFw
ID0gYmxvY2stPnNzYS0+YXZhaWxhYmlsaXR5QXRIZWFkOwogICAgIGdyYXBoLmZvckFsbExvY2Fs
c0xpdmVJbkJ5dGVjb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21i
aW5lZExpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21iaW5lZExpdmVuZXNzLmgJKHJldmlzaW9uIDIwODM2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tYmluZWRMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1
LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFJldHVybnMgdGhlIHNl
dCBvZiBub2RlcyBsaXZlIGF0IHRhaWwsIGJvdGggZHVlIHRvIGR1ZSBERkcgYW5kIGR1ZSB0byBi
eXRlY29kZSAoaS5lLiBPU1IgZXhpdCkuCiBIYXNoU2V0PE5vZGUqPiBsaXZlTm9kZXNBdEhlYWQo
R3JhcGgmLCBCYXNpY0Jsb2NrKik7CiAKKy8vIFdBUk5JTkc6IFRoaXMgY3VycmVudGx5IGRvZXMg
bm90IHJlYXNvbiBhYm91dCB0aGUgbGl2ZW5lc3Mgb2Ygc2hhZG93IHZhbHVlcy4gVGhlIGV4ZWN1
dGlvbgorLy8gc2VtYW50aWNzIG9mIERGRyBTU0EgYXJlIHRoYXQgYW4gVXBzaWxvbiBzdG9yZXMg
dG8gdGhlIHNoYWRvdyB2YWx1ZSBvZiBhIFBoaSwgYW5kIHRoZSBQaGkgbG9hZHMKKy8vIGZyb20g
dGhhdCBzaGFkb3cgdmFsdWUuIEhlbmNlLCB0aGUgc2hhZG93IHZhbHVlcyBhcmUgbGlrZSB2YXJp
YWJsZXMsIGFuZCBoYXZlIGxpdmVuZXNzLiBUaGUgbm9ybWFsCisvLyBsaXZlbmVzcyBhbmFseXNp
cyB3aWxsIHRlbGwgeW91IGFib3V0IHRoZSBsaXZlbmVzcyBvZiBzaGFkb3cgdmFsdWVzLiBJdCdz
IE9LIHRvIGlnbm9yZSBzaGFkb3cKKy8vIHZhbHVlcyBpZiB5b3UgdHJlYXQgVXBzaWxvbiBhcyBh
biBvcGFxdWUgZXNjYXBlLCBhbmQgYWxsIG9mIHRoZSBjbGllbnRzIG9mIENvbWJpbmVkTGl2ZW5l
c3MgZG8gc28uCiBzdHJ1Y3QgQ29tYmluZWRMaXZlbmVzcyB7CiAgICAgQ29tYmluZWRMaXZlbmVz
cygpIHsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbG93SW5k
ZXhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmxv
d0luZGV4aW5nLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Zsb3dJbmRleGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdGbG93SW5kZXhpbmcuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Zsb3dJbmRleGluZzo6Rmxv
d0luZGV4aW5nKEdyYXBoJiBncmFwaCkKKyAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgLCBtX251
bUluZGljZXMoMCkKK3sKKyAgICByZWNvbXB1dGUoKTsKK30KKworRmxvd0luZGV4aW5nOjp+Rmxv
d0luZGV4aW5nKCkKK3sKK30KKwordm9pZCBGbG93SW5kZXhpbmc6OnJlY29tcHV0ZSgpCit7Cisg
ICAgdW5zaWduZWQgbnVtTm9kZUluZGljZXMgPSBtX2dyYXBoLm1heE5vZGVDb3VudCgpOworICAg
IAorICAgIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleC5yZXNpemUobnVtTm9kZUluZGljZXMpOwor
ICAgIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleC5maWxsKFVJTlRfTUFYKTsKKyAgICAKKyAgICBt
X3NoYWRvd0luZGV4VG9Ob2RlSW5kZXgucmVzaXplKDApOworCisgICAgbV9udW1JbmRpY2VzID0g
bnVtTm9kZUluZGljZXM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgeworICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gUGhpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBub2RlSW5kZXgg
PSBub2RlLT5pbmRleCgpOworICAgICAgICAgICAgdW5zaWduZWQgc2hhZG93SW5kZXggPSBtX251
bUluZGljZXMrKzsKKyAgICAgICAgICAgIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleFtub2RlSW5k
ZXhdID0gc2hhZG93SW5kZXg7CisgICAgICAgICAgICBtX3NoYWRvd0luZGV4VG9Ob2RlSW5kZXgu
YXBwZW5kKG5vZGVJbmRleCk7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxw
dHIsIG1fc2hhZG93SW5kZXhUb05vZGVJbmRleC5zaXplKCkgKyBudW1Ob2RlSW5kaWNlcyA9PSBt
X251bUluZGljZXMpOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBt
X3NoYWRvd0luZGV4VG9Ob2RlSW5kZXhbc2hhZG93SW5kZXggLSBudW1Ob2RlSW5kaWNlc10gPT0g
bm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmxvd0luZGV4aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGbG93SW5kZXhpbmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zsb3dJbmRleGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVGhpcyBpcyBhIG1hcHBpbmcgZnJvbSBub2RlcyB0
byB1bmlxdWUsIGRlbnNlIGluZGljZXMgdGhhdCBjYW4gYmUgdXNlZCBmb3IgY3JlYXRpbmcgZmFz
dAorLy8gTm9kZS1rZXllZCBtYXBzLiBUaGUgc3BlY2lhbCBwYXJ0IGlzIHRoYXQgaXQgYWxzbyBh
bGxvY2F0ZWQgaW5kaWNlcyBmb3IgdGhlIHNoYWRvdyB2YWx1ZXMgb2YgUGhpCisvLyBub2Rlcywg
d2hpY2ggaXMgbmVlZGVkIGZvciBhbnkgZmxvdy1zZW5zaXRpdmUgYW5hbHlzaXMuCitjbGFzcyBG
bG93SW5kZXhpbmcgeworcHVibGljOgorICAgIEZsb3dJbmRleGluZyhHcmFwaCYpOworICAgIH5G
bG93SW5kZXhpbmcoKTsKKyAgICAKKyAgICB2b2lkIHJlY29tcHV0ZSgpOworICAgIAorICAgIEdy
YXBoJiBncmFwaCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICB1bnNpZ25l
ZCBudW1JbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9udW1JbmRpY2VzOyB9CisgICAgCisgICAg
dW5zaWduZWQgaW5kZXgodW5zaWduZWQgbm9kZUluZGV4KSBjb25zdCB7IHJldHVybiBub2RlSW5k
ZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBpbmRleChOb2RlKiBub2RlKSBjb25zdCB7IHJldHVy
biBpbmRleChub2RlLT5pbmRleCgpKTsgfQorICAgIAorICAgIHVuc2lnbmVkIHNoYWRvd0luZGV4
KHVuc2lnbmVkIG5vZGVJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25vZGVJ
bmRleFRvU2hhZG93SW5kZXhbbm9kZUluZGV4XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
c2hhZG93SW5kZXgoTm9kZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9PSBQaGkpOworICAgICAgICByZXR1cm4gc2hhZG93
SW5kZXgobm9kZS0+aW5kZXgoKSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGluZGV4KHVu
c2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtpbmQpIGNvbnN0Cisg
ICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2pl
Y3Rpb246OlByaW1hcnk6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgobm9kZUluZGV4KTsKKyAg
ICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJldHVy
biBzaGFkb3dJbmRleChub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBpbmRleChOb2RlICpub2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIE5vZGVG
bG93UHJvamVjdGlvbjo6UHJpbWFyeToKKyAgICAgICAgICAgIHJldHVybiBpbmRleChub2RlKTsK
KyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJl
dHVybiBzaGFkb3dJbmRleChub2RlKTsKKyAgICAgICAgfQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgaW5kZXgoTm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaW5kZXgocHJvamVjdGlvbi5ub2RlKCksIHByb2plY3Rpb24ua2luZCgp
KTsKKyAgICB9CisgICAgCisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKHVu
c2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgbV9ub2RlSW5k
ZXhUb1NoYWRvd0luZGV4LnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBOb2RlRmxvd1Byb2pl
Y3Rpb24obV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIE5vZGVGbG93UHJv
amVjdGlvbigKKyAgICAgICAgICAgIG1fZ3JhcGgubm9kZUF0KG1fc2hhZG93SW5kZXhUb05vZGVJ
bmRleFtpbmRleCAtIG1fbm9kZUluZGV4VG9TaGFkb3dJbmRleC5zaXplKCldKSwKKyAgICAgICAg
ICAgIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KTsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIEdyYXBoJiBtX2dyYXBoOworICAgIHVuc2lnbmVkIG1fbnVtSW5kaWNlczsKKyAgICBWZWN0
b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX25vZGVJbmRleFRvU2hhZG93
SW5kZXg7CisgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9z
aGFkb3dJbmRleFRvTm9kZUluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRmxvd01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmxvd01hcC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmxvd01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKKy8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gbm9kZXMgdG8gdmFs
dWVzIHRoYXQgaXMgdXNlZnVsIGZvciBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcy4gSW4gc3VjaCBh
bgorLy8gYW5hbHlzaXMsIGF0IGV2ZXJ5IHBvaW50IGluIHRoZSBwcm9ncmFtIHdlIG5lZWQgdG8g
Y29uc2lkZXIgdGhlIHZhbHVlcyBvZiBub2RlcyBwbHVzIHRoZSBzaGFkb3cKKy8vIHZhbHVlcyBv
ZiBQaGlzLiBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gZG8gYm90aCBvZiB0aG9zZSB0aGluZ3MuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgRmxvd01hcCB7CitwdWJsaWM6CisgICAgRmxvd01h
cChHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogbV9ncmFwaChncmFwaCkKKyAgICB7CisgICAgICAg
IHJlc2l6ZSgpOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgaWYgdGhlIG51bWJlciBv
ZiBub2RlcyBpbiB0aGUgZ3JhcGggaGFzIGNoYW5nZWQuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90
IHJlc2V0IGFueQorICAgIC8vIGVudHJpZXMuCisgICAgdm9pZCByZXNpemUoKQorICAgIHsKKyAg
ICAgICAgbV9tYXAucmVzaXplKG1fZ3JhcGgubWF4Tm9kZUNvdW50KCkpOworICAgICAgICBtX3No
YWRvd01hcC5yZXNpemUobV9ncmFwaC5tYXhOb2RlQ291bnQoKSk7CisgICAgfQorICAgIAorICAg
IEdyYXBoJiBncmFwaCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICAKKyAgICBUJiBh
dCh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXBbbm9kZUlu
ZGV4XTsKKyAgICB9CisgICAgCisgICAgVCYgYXQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhdChub2RlLT5pbmRleCgpKTsKKyAgICB9CisgICAgCisgICAgVCYgYXRTaGFkb3co
dW5zaWduZWQgbm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2hhZG93TWFwW25v
ZGVJbmRleF07CisgICAgfQorICAgIAorICAgIFQmIGF0U2hhZG93KE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICByZXR1cm4gYXRTaGFkb3cobm9kZS0+aW5kZXgoKSk7CisgICAgfQorICAgIAor
ICAgIFQmIGF0KHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZUZsb3dQcm9qZWN0aW9uOjpLaW5kIGtp
bmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBOb2RlRmxv
d1Byb2plY3Rpb246OlByaW1hcnk6CisgICAgICAgICAgICByZXR1cm4gYXQobm9kZUluZGV4KTsK
KyAgICAgICAgY2FzZSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdzoKKyAgICAgICAgICAgIHJl
dHVybiBhdFNoYWRvdyhub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFQqPihudWxs
cHRyKTsKKyAgICB9CisgICAgCisgICAgVCYgYXQoTm9kZSogbm9kZSwgTm9kZUZsb3dQcm9qZWN0
aW9uOjpLaW5kIGtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gYXQobm9kZS0+aW5kZXgoKSwg
a2luZCk7CisgICAgfQorICAgIAorICAgIFQmIGF0KE5vZGVGbG93UHJvamVjdGlvbiBwcm9qZWN0
aW9uKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KHByb2plY3Rpb24ubm9kZSgpLCBwcm9qZWN0
aW9uLmtpbmQoKSk7CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIGF0KHVuc2lnbmVkIG5vZGVJ
bmRleCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGVJ
bmRleCk7IH0KKyAgICBjb25zdCBUJiBhdChOb2RlKiBub2RlKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PEZsb3dNYXAqPih0aGlzKS0+YXQobm9kZSk7IH0KKyAgICBjb25zdCBUJiBhdFNoYWRv
dyh1bnNpZ25lZCBub2RlSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Rmxvd01hcCo+
KHRoaXMpLT5hdFNoYWRvdyhub2RlSW5kZXgpOyB9CisgICAgY29uc3QgVCYgYXRTaGFkb3coTm9k
ZSogbm9kZSkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFwKj4odGhpcyktPmF0U2hh
ZG93KG5vZGUpOyB9CisgICAgY29uc3QgVCYgYXQodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlRmxv
d1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxGbG93TWFw
Kj4odGhpcyktPmF0KG5vZGVJbmRleCwga2luZCk7IH0KKyAgICBjb25zdCBUJiBhdChOb2RlKiBu
b2RlLCBOb2RlRmxvd1Byb2plY3Rpb246OktpbmQga2luZCkgY29uc3QgeyByZXR1cm4gY29uc3Rf
Y2FzdDxGbG93TWFwKj4odGhpcyktPmF0KG5vZGUsIGtpbmQpOyB9CisgICAgY29uc3QgVCYgYXQo
Tm9kZUZsb3dQcm9qZWN0aW9uIHByb2plY3Rpb24pIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
Rmxvd01hcCo+KHRoaXMpLT5hdChwcm9qZWN0aW9uKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBH
cmFwaCYgbV9ncmFwaDsKKyAgICBWZWN0b3I8VCwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1f
bWFwOworICAgIFZlY3RvcjxULCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdz4gbV9zaGFkb3dNYXA7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IGNvbnN0IEpTQzo6REZHOjpGbG93TWFwPFQ+JiBtYXApCit7CisgICAgQ29tbWFQcmludGVyIGNv
bW1hOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXAuZ3JhcGgoKS5tYXhOb2RlQ291
bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChKU0M6OkRGRzo6Tm9kZSogbm9kZSA9IG1hcC5ncmFw
aCgpLm5vZGVBdChpKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IFQmIHZhbHVlID0gbWFwLmF0
KG5vZGUpKQorICAgICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZSwgIj0+IiwgdmFs
dWUpOworICAgICAgICB9CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXAu
Z3JhcGgoKS5tYXhOb2RlQ291bnQoKTsgKytpKSB7CisgICAgICAgIGlmIChKU0M6OkRGRzo6Tm9k
ZSogbm9kZSA9IG1hcC5ncmFwaCgpLm5vZGVBdChpKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0
IFQmIHZhbHVlID0gbWFwLmF0U2hhZG93KG5vZGUpKQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgInNoYWRvdygiLCBub2RlLCAiKT0+IiwgdmFsdWUpOworICAgICAgICB9CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjA4
MzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDYgKzQwLDggQEAKICNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5o
IgogI2luY2x1ZGUgIkRGR0NvbnRyb2xFcXVpdmFsZW5jZUFuYWx5c2lzLmgiCiAjaW5jbHVkZSAi
REZHRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgorI2luY2x1ZGUg
IkRGR0Zsb3dNYXAuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiREZHTWF5
RXhpdC5oIgogI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgpAQCAtODMsNiArODUsOSBAQCBH
cmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2CiAgICAgQVNTRVJUKG1fcHJv
ZmlsZWRCbG9jayk7CiAgICAgCiAgICAgbV9oYXNEZWJ1Z2dlckVuYWJsZWQgPSBtX3Byb2ZpbGVk
QmxvY2stPndhc0NvbXBpbGVkV2l0aERlYnVnZ2luZ09wY29kZXMoKSB8fCBPcHRpb25zOjpmb3Jj
ZURlYnVnZ2VyQnl0ZWNvZGVHZW5lcmF0aW9uKCk7CisgICAgCisgICAgbV9pbmRleGluZ0NhY2hl
ID0gc3RkOjptYWtlX3VuaXF1ZTxGbG93SW5kZXhpbmc+KCp0aGlzKTsKKyAgICBtX2Fic3RyYWN0
VmFsdWVzQ2FjaGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEZsb3dNYXA8QWJzdHJhY3RWYWx1ZT4+KCp0
aGlzKTsKIH0KIAogR3JhcGg6On5HcmFwaCgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAyMDgzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDkgKzU5LDEyIEBAIGNsYXNzIEJhY2t3
YXJkc0RvbWluYXRvcnM7CiBjbGFzcyBDRkc7CiBjbGFzcyBDb250cm9sRXF1aXZhbGVuY2VBbmFs
eXNpczsKIGNsYXNzIERvbWluYXRvcnM7CitjbGFzcyBGbG93SW5kZXhpbmc7CiBjbGFzcyBOYXR1
cmFsTG9vcHM7CiBjbGFzcyBQcmVQb3N0TnVtYmVyaW5nOwogCit0ZW1wbGF0ZTx0eXBlbmFtZT4g
Y2xhc3MgRmxvd01hcDsKKwogI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwg
bm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXAogICAgICAgICBOb2RlKiBfbm9kZSA9
IChub2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICBpZiAoX25vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgXApAQCAtMjAxLDggKzIwNCw2IEBAIHB1YmxpYzoKICAgICBOb2RlKiBub2Rl
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZXNCeUluZGV4W2luZGV4XTsg
fQogICAgIHZvaWQgcGFja05vZGVJbmRpY2VzKCk7CiAKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1
ZSwgMCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+JiBhYnN0cmFjdFZhbHVlc0NhY2hlKCkgeyByZXR1
cm4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOyB9Ci0KICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAg
CiAgICAgRnJvemVuVmFsdWUqIGZyZWV6ZShKU1ZhbHVlKTsgLy8gV2UgdXNlIHdlYWsgZnJlZXpp
bmcgYnkgZGVmYXVsdC4KQEAgLTkzNSw2ICs5MzYsOSBAQCBwdWJsaWM6CiAgICAgUmVmQ291bnRT
dGF0ZSBtX3JlZkNvdW50U3RhdGU7CiAgICAgYm9vbCBtX2hhc0RlYnVnZ2VyRW5hYmxlZDsKICAg
ICBib29sIG1faGFzRXhjZXB0aW9uSGFuZGxlcnMgeyBmYWxzZSB9OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxGbG93SW5kZXhpbmc+IG1faW5kZXhpbmdDYWNoZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
Rmxvd01hcDxBYnN0cmFjdFZhbHVlPj4gbV9hYnN0cmFjdFZhbHVlc0NhY2hlOworCiBwcml2YXRl
OgogICAgIHZvaWQgYWRkTm9kZVRvTWFwQnlJbmRleChOb2RlKik7CiAKQEAgLTk3Miw3ICs5NzYs
NiBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPE5vZGUqLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxv
dz4gbV9ub2Rlc0J5SW5kZXg7CiAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JP
dmVyZmxvdz4gbV9ub2RlSW5kZXhGcmVlTGlzdDsKLSAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwg
MCwgVW5zYWZlVmVjdG9yT3ZlcmZsb3c+IG1fYWJzdHJhY3RWYWx1ZXNDYWNoZTsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDgzNjcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBzdGF0aWMgY29uc3QgYm9vbCB2ZXJi
b3NlID0gZmFsc2U7CiAKIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpJblBsYWNlQWJzdHJhY3RTdGF0
ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBoKQotICAgICwgbV9hYnN0cmFjdFZh
bHVlcyhncmFwaC5hYnN0cmFjdFZhbHVlc0NhY2hlKCkpCisgICAgLCBtX2Fic3RyYWN0VmFsdWVz
KCpncmFwaC5tX2Fic3RyYWN0VmFsdWVzQ2FjaGUpCiAgICAgLCBtX3ZhcmlhYmxlcyhtX2dyYXBo
Lm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCksIGdyYXBoLm1fbG9jYWxWYXJzKQogICAgICwg
bV9ibG9jaygwKQogewpAQCAtNTcsMTkgKzU3LDIyIEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3Rh
dGU6OmJlZ2luQmFzaWNCbG8KICAgICBBU1NFUlQoYmFzaWNCbG9jay0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mTG9jYWxzKCkgPT0gYmFzaWNCbG9jay0+dmFsdWVzQXRUYWlsLm51bWJlck9mTG9j
YWxzKCkpOwogICAgIEFTU0VSVChiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZM
b2NhbHMoKSA9PSBiYXNpY0Jsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSk7
CiAKLSAgICAvLyBDZXJ0YWluIHBoYXNlcyBpbnNlcnQgbm9kZXMgaW4gYSBibG9jayBhZnRlciBy
dW5uaW5nIHRocm91Z2ggaXQuCi0gICAgLy8gV2UgY2Fubm90IHJlc2VydmUgdGhlIHNwYWNlIGZv
ciBBYnN0cmFjdFZhbHVlcyB3aGVuIGluaXRpYWxpemluZyBBYnN0cmFjdFN0YXRlIGJlY2F1c2Ug
dGhlIG51bWJlciBvZiB2YWx1ZXMKLSAgICAvLyBjYW4gaW5jcmVhc2UgYXMgd2UgZXhlY3V0ZS4g
SW5zdGVhZCwgd2UgaW5jcmVhc2UgdGhlIHNpemUgYXMgbmVlZGVkIGJlZm9yZSBwcm9jZXNzaW5n
IGVhY2ggYmxvY2suCi0gICAgbV9hYnN0cmFjdFZhbHVlcy5yZXNpemUobV9ncmFwaC5tYXhOb2Rl
Q291bnQoKSk7CisgICAgbV9hYnN0cmFjdFZhbHVlcy5yZXNpemUoKTsKICAgICAKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPnNpemUoKTsgaSsrKQotICAgICAgICBmb3JO
b2RlKGJhc2ljQmxvY2stPmF0KGkpKS5jbGVhcigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmFzaWNCbG9jay0+c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgTm9kZUZsb3dQcm9qZWN0aW9u
Ojpmb3JFYWNoKAorICAgICAgICAgICAgYmFzaWNCbG9jay0+YXQoaSksIFsmXSAoTm9kZUZsb3dQ
cm9qZWN0aW9uIG5vZGVQcm9qZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
UHJvamVjdGlvbikuY2xlYXIoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KIAogICAgIG1fdmFy
aWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOwogICAgIAogICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IGJhc2ljQmxvY2st
PnNzYS0+dmFsdWVzQXRIZWFkKQotICAgICAgICAgICAgZm9yTm9kZShlbnRyeS5ub2RlKSA9IGVu
dHJ5LnZhbHVlOworICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgZW50cnkgOiBi
YXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZCkgeworICAgICAgICAgICAgaWYgKGVudHJ5Lm5v
ZGUuaXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgZm9yTm9kZShlbnRyeS5ub2RlKSA9
IGVudHJ5LnZhbHVlOworICAgICAgICB9CiAgICAgfQogICAgIGJhc2ljQmxvY2stPmNmYVNob3Vs
ZFJldmlzaXQgPSBmYWxzZTsKICAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsK
QEAgLTgwLDEyICs4MywxMiBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2lj
QmxvCiAgICAgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSBiYXNpY0Jsb2NrLT5jZmFTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGVBdEhlYWQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVj
dG9yPEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5vZGVBYnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywg
Y29uc3QgVmVjdG9yPE5vZGUqPiYgbGl2ZSkKK3N0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoVmVj
dG9yPE5vZGVBYnN0cmFjdFZhbHVlUGFpcj4mIHZhbHVlcywgY29uc3QgVmVjdG9yPE5vZGVGbG93
UHJvamVjdGlvbj4mIGxpdmUpCiB7CiAgICAgdmFsdWVzLnJlc2l6ZSgwKTsKICAgICB2YWx1ZXMu
cmVzZXJ2ZUNhcGFjaXR5KGxpdmUuc2l6ZSgpKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgOiBsaXZl
KQotICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKEJhc2ljQmxvY2s6OlNTQURhdGE6Ok5v
ZGVBYnN0cmFjdFZhbHVlUGFpciB7IG5vZGUsIEFic3RyYWN0VmFsdWUoKSB9KTsKKyAgICBmb3Ig
KE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogbGl2ZSkKKyAgICAgICAgdmFsdWVzLnVuY2hlY2tl
ZEFwcGVuZChOb2RlQWJzdHJhY3RWYWx1ZVBhaXIgeyBub2RlLCBBYnN0cmFjdFZhbHVlKCkgfSk7
CiB9CiAKIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQpAQCAtMTk5LDcg
KzIwMiw3IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2sKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytp
KQogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbFtpXS5tZXJnZShtX3ZhcmlhYmxlc1tp
XSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiB2YWx1ZUF0VGFpbCA6IGJsb2NrLT5zc2EtPnZhbHVl
c0F0VGFpbCkgeworICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZhbHVlUGFpciYgdmFsdWVBdFRh
aWwgOiBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwpIHsKICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlQXROb2RlID0gZm9yTm9kZSh2YWx1ZUF0VGFpbC5ub2RlKTsKICAgICAgICAgICAg
IHZhbHVlQXRUYWlsLnZhbHVlLm1lcmdlKHZhbHVlQXROb2RlKTsKICAgICAgICAgICAgIHZhbHVl
QXROb2RlID0gdmFsdWVBdFRhaWwudmFsdWU7CkBAIC0yOTEsMTMgKzI5NCwxMyBAQCBib29sIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0JsCiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSBmcm9tLT52YWx1ZXNBdFRhaWwuc2l6ZSgpOyBpLS07KQogICAgICAgICAgICAgY2hhbmdlZCB8
PSB0by0+dmFsdWVzQXRIZWFkW2ldLm1lcmdlKGZyb20tPnZhbHVlc0F0VGFpbFtpXSk7CiAKLSAg
ICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHRvLT5zc2EtPnZhbHVlc0F0SGVhZCkgewotICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IGVudHJ5Lm5vZGU7CisgICAgICAgIGZvciAoTm9kZUFic3RyYWN0
VmFsdWVQYWlyJiBlbnRyeSA6IHRvLT5zc2EtPnZhbHVlc0F0SGVhZCkgeworICAgICAgICAgICAg
Tm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgPSBlbnRyeS5ub2RlOwogICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgTWVyZ2luZyBmb3IgIiwgbm9k
ZSwgIjogZnJvbSAiLCBmb3JOb2RlKG5vZGUpLCAiIHRvICIsIGVudHJ5LnZhbHVlLCAiXG4iKTsK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICB1bnNpZ25lZCB2YWx1ZUNvdW50SW5Gcm9tQmxv
Y2sgPSAwOwotICAgICAgICAgICAgZm9yIChhdXRvJiBmcm9tQmxvY2tWYWx1ZUF0VGFpbCA6IGZy
b20tPnNzYS0+dmFsdWVzQXRUYWlsKSB7CisgICAgICAgICAgICBmb3IgKE5vZGVBYnN0cmFjdFZh
bHVlUGFpciYgZnJvbUJsb2NrVmFsdWVBdFRhaWwgOiBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbCkg
ewogICAgICAgICAgICAgICAgIGlmIChmcm9tQmxvY2tWYWx1ZUF0VGFpbC5ub2RlID09IG5vZGUp
IHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZyb21CbG9ja1ZhbHVlQXRUYWlsLnZhbHVl
ID09IGZvck5vZGUobm9kZSkpOwogICAgICAgICAgICAgICAgICAgICArK3ZhbHVlQ291bnRJbkZy
b21CbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIwODM2NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUg
IkRGR0JyYW5jaERpcmVjdGlvbi5oIgorI2luY2x1ZGUgIkRGR0Zsb3dNYXAuaCIKICNpbmNsdWRl
ICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKIApAQCAtNDMsMTEgKzQ0LDExIEBA
IHB1YmxpYzoKICAgICAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIAotICAgIHZvaWQgY3JlYXRlVmFsdWVGb3JOb2RlKE5vZGUqKSB7IH0K
KyAgICB2b2lkIGNyZWF0ZVZhbHVlRm9yTm9kZShOb2RlRmxvd1Byb2plY3Rpb24pIHsgfQogICAg
IAotICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZSogbm9kZSkKKyAgICBBYnN0cmFjdFZh
bHVlJiBmb3JOb2RlKE5vZGVGbG93UHJvamVjdGlvbiBub2RlKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fYWJzdHJhY3RWYWx1ZXNbbm9kZS0+aW5kZXgoKV07CisgICAgICAgIHJldHVybiBtX2Fi
c3RyYWN0VmFsdWVzLmF0KG5vZGUpOwogICAgIH0KICAgICAKICAgICBBYnN0cmFjdFZhbHVlJiBm
b3JOb2RlKEVkZ2UgZWRnZSkKQEAgLTEzMiw3ICsxMzMsNyBAQCBwcml2YXRlOgogICAgIAogICAg
IEdyYXBoJiBtX2dyYXBoOwogCi0gICAgVmVjdG9yPEFic3RyYWN0VmFsdWUsIDAsIFVuc2FmZVZl
Y3Rvck92ZXJmbG93PiYgbV9hYnN0cmFjdFZhbHVlczsKKyAgICBGbG93TWFwPEFic3RyYWN0VmFs
dWU+JiBtX2Fic3RyYWN0VmFsdWVzOwogICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fdmFy
aWFibGVzOwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGlt
aXphdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4MzY3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdCbG9ja1NldC5oIgogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZH
Tm9kZUZsb3dQcm9qZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKICNpbmNsdWRlICJE
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNj
ZXNzRGF0YUR1bXAuaCIKQEAgLTEyMSw3ICsxMjIsNyBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
ICAgICAKLSAgICBSZWxhdGlvbnNoaXAoTm9kZSogbGVmdCwgTm9kZSogcmlnaHQsIEtpbmQga2lu
ZCwgaW50IG9mZnNldCA9IDApCisgICAgUmVsYXRpb25zaGlwKE5vZGVGbG93UHJvamVjdGlvbiBs
ZWZ0LCBOb2RlRmxvd1Byb2plY3Rpb24gcmlnaHQsIEtpbmQga2luZCwgaW50IG9mZnNldCA9IDAp
CiAgICAgICAgIDogbV9sZWZ0KGxlZnQpCiAgICAgICAgICwgbV9yaWdodChyaWdodCkKICAgICAg
ICAgLCBtX2tpbmQoa2luZCkKQEAgLTEzMiwxNyArMTMzLDE3IEBAIHB1YmxpYzoKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9sZWZ0ICE9IG1fcmlnaHQpOwogICAgIH0KICAgICAKLSAgICBzdGF0
aWMgUmVsYXRpb25zaGlwIHNhZmVDcmVhdGUoTm9kZSogbGVmdCwgTm9kZSogcmlnaHQsIEtpbmQg
a2luZCwgaW50IG9mZnNldCA9IDApCisgICAgc3RhdGljIFJlbGF0aW9uc2hpcCBzYWZlQ3JlYXRl
KE5vZGVGbG93UHJvamVjdGlvbiBsZWZ0LCBOb2RlRmxvd1Byb2plY3Rpb24gcmlnaHQsIEtpbmQg
a2luZCwgaW50IG9mZnNldCA9IDApCiAgICAgewotICAgICAgICBpZiAoIWxlZnQgfHwgIXJpZ2h0
IHx8IGxlZnQgPT0gcmlnaHQpCisgICAgICAgIGlmICghbGVmdC5pc1N0aWxsVmFsaWQoKSB8fCAh
cmlnaHQuaXNTdGlsbFZhbGlkKCkgfHwgbGVmdCA9PSByaWdodCkKICAgICAgICAgICAgIHJldHVy
biBSZWxhdGlvbnNoaXAoKTsKICAgICAgICAgcmV0dXJuIFJlbGF0aW9uc2hpcChsZWZ0LCByaWdo
dCwga2luZCwgb2Zmc2V0KTsKICAgICB9CiAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhbV9sZWZ0OyB9CiAgICAgCi0gICAgTm9kZSogbGVmdCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGVmdDsgfQotICAgIE5vZGUqIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdo
dDsgfQorICAgIE5vZGVGbG93UHJvamVjdGlvbiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0
OyB9CisgICAgTm9kZUZsb3dQcm9qZWN0aW9uIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdo
dDsgfQogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIGludCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogCkBAIC0yNTgsNyArMjU5LDcgQEAg
cHVibGljOgogICAgIC8vIElmIHBvc3NpYmxlLCByZXR1cm5zIGEgZm9ybSBvZiB0aGlzIHJlbGF0
aW9uc2hpcCB3aGVyZSB0aGUgZ2l2ZW4gbm9kZSBpcyB0aGUgbGVmdAogICAgIC8vIHNpZGUuIFJl
dHVybnMgYSBudWxsIHJlbGF0aW9uc2hpcCBpZiB0aGlzIHJlbGF0aW9uc2hpcCBjYW5ub3Qgc2F5
IGFueXRoaW5nIGFib3V0IHRoaXMKICAgICAvLyBub2RlLgotICAgIFJlbGF0aW9uc2hpcCBmb3JO
b2RlKE5vZGUqIG5vZGUpIGNvbnN0CisgICAgUmVsYXRpb25zaGlwIGZvck5vZGUoTm9kZUZsb3dQ
cm9qZWN0aW9uIG5vZGUpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9sZWZ0ID09IG5vZGUp
CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC0yNjcsNyArMjY4LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gUmVsYXRpb25zaGlwKCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0
TGVmdChOb2RlKiBsZWZ0KQorICAgIHZvaWQgc2V0TGVmdChOb2RlRmxvd1Byb2plY3Rpb24gbGVm
dCkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlZnQgIT0gbV9yaWdodCk7CiAgICAg
ICAgIG1fbGVmdCA9IGxlZnQ7CkBAIC05ODQsMTMgKzk4NSwxMyBAQCBwcml2YXRlOgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBOb2RlKiBt
X2xlZnQ7Ci0gICAgTm9kZSogbV9yaWdodDsKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24gbV9sZWZ0
OworICAgIE5vZGVGbG93UHJvamVjdGlvbiBtX3JpZ2h0OwogICAgIEtpbmQgbV9raW5kOwogICAg
IGludCBtX29mZnNldDsgLy8gVGhpcyBvZmZzZXQgY2FuIGJlIGFyYml0cmFyaWx5IGxhcmdlLgog
fTsKIAotdHlwZWRlZiBIYXNoTWFwPE5vZGUqLCBWZWN0b3I8UmVsYXRpb25zaGlwPj4gUmVsYXRp
b25zaGlwTWFwOwordHlwZWRlZiBIYXNoTWFwPE5vZGVGbG93UHJvamVjdGlvbiwgVmVjdG9yPFJl
bGF0aW9uc2hpcD4+IFJlbGF0aW9uc2hpcE1hcDsKIAogY2xhc3MgSW50ZWdlclJhbmdlT3B0aW1p
emF0aW9uUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgpAQCAtMTMxNCw3ICsxMzE1LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcC5taW5W
YWx1ZU9mTGVmdCgpID49IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uTmVnYXRp
dmUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVsYXRpb25zaGlwLnJpZ2h0KCkgPT0gbm9kZS0+Y2hpbGQyKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGlvbnNoaXAucmlnaHQoKSA9PSBub2RlLT5jaGls
ZDIoKS5ub2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVsYXRpb25z
aGlwLmtpbmQoKSA9PSBSZWxhdGlvbnNoaXA6OkVxdWFsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIHJlbGF0aW9uc2hpcC5vZmZzZXQoKSA8IDApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlc3NUaGFuTGVuZ3RoID0gdHJ1ZTsKQEAgLTE0OTEsMjMgKzE0OTIs
MTYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVXBz
aWxvbjogewotICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKAotICAgICAgICAgICAgICAgIFJl
bGF0aW9uc2hpcDo6c2FmZUNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkubm9kZSgpLCBub2RlLT5waGkoKSwgUmVsYXRpb25zaGlwOjpFcXVhbCwgMCkpOworICAgICAg
ICAgICAgc2V0RXF1aXZhbGVuY2UoCisgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLAorICAgICAgICAgICAgICAgIE5vZGVGbG93UHJvamVjdGlvbihub2RlLT5waGkoKSwgTm9k
ZUZsb3dQcm9qZWN0aW9uOjpTaGFkb3cpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fcmVsYXRpb25zaGlwcy5m
aW5kKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXRlciAhPSBtX3Jl
bGF0aW9uc2hpcHMuZW5kKCkpIHsKLSAgICAgICAgICAgICAgICBWZWN0b3I8UmVsYXRpb25zaGlw
PiB0b0FkZDsKLSAgICAgICAgICAgICAgICBmb3IgKFJlbGF0aW9uc2hpcCByZWxhdGlvbnNoaXAg
OiBpdGVyLT52YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBSZWxhdGlvbnNoaXAgbmV3UmVs
YXRpb25zaGlwID0gcmVsYXRpb25zaGlwOwotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
cGhpKCkgPT0gbmV3UmVsYXRpb25zaGlwLnJpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgbmV3UmVsYXRpb25zaGlwLnNldExlZnQo
bm9kZS0+cGhpKCkpOwotICAgICAgICAgICAgICAgICAgICB0b0FkZC5hcHBlbmQobmV3UmVsYXRp
b25zaGlwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZm9yIChSZWxhdGlv
bnNoaXAgcmVsYXRpb25zaGlwIDogdG9BZGQpCi0gICAgICAgICAgICAgICAgICAgIHNldFJlbGF0
aW9uc2hpcChyZWxhdGlvbnNoaXApOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFBoaTog
eworICAgICAgICAgICAgc2V0RXF1aXZhbGVuY2UoCisgICAgICAgICAgICAgICAgTm9kZUZsb3dQ
cm9qZWN0aW9uKG5vZGUsIE5vZGVGbG93UHJvamVjdGlvbjo6U2hhZG93KSwKKyAgICAgICAgICAg
ICAgICBub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTE1MTYsNiArMTUxMCwyNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAor
ICAgIHZvaWQgc2V0RXF1aXZhbGVuY2UoTm9kZUZsb3dQcm9qZWN0aW9uIG9sZE5vZGUsIE5vZGVG
bG93UHJvamVjdGlvbiBuZXdOb2RlKQorICAgIHsKKyAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJl
bGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShvbGROb2RlLCBuZXdOb2RlLCBSZWxhdGlvbnNoaXA6OkVx
dWFsLCAwKSk7CisgICAgICAgIAorICAgICAgICBhdXRvIGl0ZXIgPSBtX3JlbGF0aW9uc2hpcHMu
ZmluZChvbGROb2RlKTsKKyAgICAgICAgaWYgKGl0ZXIgIT0gbV9yZWxhdGlvbnNoaXBzLmVuZCgp
KSB7CisgICAgICAgICAgICBWZWN0b3I8UmVsYXRpb25zaGlwPiB0b0FkZDsKKyAgICAgICAgICAg
IGZvciAoUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IGl0ZXItPnZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgUmVsYXRpb25zaGlwIG5ld1JlbGF0aW9uc2hpcCA9IHJlbGF0aW9uc2hpcDsKKyAg
ICAgICAgICAgICAgICAvLyBBdm9pZCBjcmVhdGluZyBhbnkga2luZCBvZiBzZWxmLXJlbGF0aW9u
c2hpcC4KKyAgICAgICAgICAgICAgICBpZiAobmV3Tm9kZS5ub2RlKCkgPT0gbmV3UmVsYXRpb25z
aGlwLnJpZ2h0KCkubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICBuZXdSZWxhdGlvbnNoaXAuc2V0TGVmdChuZXdOb2RlKTsKKyAgICAgICAgICAg
ICAgICB0b0FkZC5hcHBlbmQobmV3UmVsYXRpb25zaGlwKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAoUmVsYXRpb25zaGlwIHJlbGF0aW9uc2hpcCA6IHRvQWRkKQorICAgICAgICAg
ICAgICAgIHNldFJlbGF0aW9uc2hpcChyZWxhdGlvbnNoaXApOworICAgICAgICB9CisgICAgfQor
ICAgICAgICAgICAgCiAgICAgdm9pZCBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwIHJlbGF0
aW9uc2hpcCwgdW5zaWduZWQgdGltZVRvTGl2ZSA9IDEpCiAgICAgewogICAgICAgICBzZXRSZWxh
dGlvbnNoaXAobV9yZWxhdGlvbnNoaXBzLCByZWxhdGlvbnNoaXAsIHRpbWVUb0xpdmUpOwpAQCAt
MTY2OSw3ICsxNjgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChtX3NlZW5C
bG9ja3MuYWRkKHRhcmdldCkpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgYmxvY2su
IFdlIGNvcHkgc3ViamVjdCB0byBsaXZlbmVzcyBwcnVuaW5nLgotICAgICAgICAgICAgYXV0byBp
c0xpdmUgPSBbJl0gKE5vZGUqIG5vZGUpIHsKKyAgICAgICAgICAgIGF1dG8gaXNMaXZlID0gWyZd
IChOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSkgewogICAgICAgICAgICAgICAgIGlmIChub2RlID09
IG1femVybykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRhcmdldC0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5zKG5vZGUpOwpAQCAtMTcw
MSw3ICsxNzE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gYXNzaWduZWQgd291bGQgb25seSBo
YXBwZW4gaWYgd2UgaGF2ZSBub3QgcHJvY2Vzc2VkIHRoZSBub2RlJ3MgcHJlZGVjZXNzb3IuIFdl
CiAgICAgICAgIC8vIHNob3VsZG4ndCBwcm9jZXNzIGJsb2NrcyB1bnRpbCB3ZSBoYXZlIHByb2Nl
c3NlZCB0aGUgYmxvY2sncyBwcmVkZWNlc3NvciBiZWNhdXNlIHdlCiAgICAgICAgIC8vIGFyZSB1
c2luZyByZXZlcnNlIHBvc3RvcmRlci4KLSAgICAgICAgVmVjdG9yPE5vZGUqPiB0b1JlbW92ZTsK
KyAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4gdG9SZW1vdmU7CiAgICAgICAgIGJv
b2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9yZWxhdGlv
bnNoaXBzQXRIZWFkW3RhcmdldF0pIHsKICAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlbGF0aW9u
c2hpcE1hcC5maW5kKGVudHJ5LmtleSk7CkBAIC0xNzkxLDcgKzE4MDUsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgZW50cnkudmFsdWUgPSBtZXJnZWRSZWxhdGlvbnNoaXBzOwogICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChOb2RlKiBub2RlIDog
dG9SZW1vdmUpCisgICAgICAgIGZvciAoTm9kZUZsb3dQcm9qZWN0aW9uIG5vZGUgOiB0b1JlbW92
ZSkKICAgICAgICAgICAgIG1fcmVsYXRpb25zaGlwc0F0SGVhZFt0YXJnZXRdLnJlbW92ZShub2Rl
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAko
cmV2aXNpb24gMjA4MzY3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVz
c0FuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkRGR0Zsb3dJbmRleGluZy5oIgogI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCiAjaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIK
QEAgLTQ0LDEwICs0NSwxMiBAQCBwdWJsaWM6CiAgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdy
YXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFzZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikK
ICAgICAgICAgLCBtX2RpcnR5QmxvY2tzKG1fZ3JhcGgubnVtQmxvY2tzKCkpCisgICAgICAgICwg
bV9pbmRleGluZygqbV9ncmFwaC5tX2luZGV4aW5nQ2FjaGUpCiAgICAgICAgICwgbV9saXZlQXRI
ZWFkKG1fZ3JhcGgpCiAgICAgICAgICwgbV9saXZlQXRUYWlsKG1fZ3JhcGgpCi0gICAgICAgICwg
bV93b3Jrc2V0KGdyYXBoLm1heE5vZGVDb3VudCgpIC0gMSkKICAgICB7CisgICAgICAgIG1fZ3Jh
cGgubV9pbmRleGluZ0NhY2hlLT5yZWNvbXB1dGUoKTsKKyAgICAgICAgbV93b3Jrc2V0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxJbmRleFNwYXJzZVNldDxVbnNhZmVWZWN0b3JPdmVyZmxvdz4+KG1fZ3Jh
cGgubV9pbmRleGluZ0NhY2hlLT5udW1JbmRpY2VzKCkpOwogICAgIH0KIAogICAgIGJvb2wgcnVu
KCkKQEAgLTgwLDIwICs4MywyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRIZWFk
SW5kaWNlcyA9IG1fbGl2ZUF0SGVhZFtibG9ja0luZGV4XTsKLSAgICAgICAgICAgICAgICBWZWN0
b3I8Tm9kZSo+JiBsaXZlQXRIZWFkID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKKyAgICAgICAg
ICAgICAgICBjb25zdCBWZWN0b3I8dW5zaWduZWQsIDAsIFVuc2FmZVZlY3Rvck92ZXJmbG93LCAx
PiYgbGl2ZUF0SGVhZEluZGljZXMgPSBtX2xpdmVBdEhlYWRbYmxvY2tJbmRleF07CisgICAgICAg
ICAgICAgICAgVmVjdG9yPE5vZGVGbG93UHJvamVjdGlvbj4mIGxpdmVBdEhlYWQgPSBibG9jay0+
c3NhLT5saXZlQXRIZWFkOwogICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQucmVzaXplKDApOwog
ICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWRJbmRp
Y2VzLnNpemUoKSk7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IGxpdmVB
dEhlYWRJbmRpY2VzKQotICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFw
cGVuZChtX2dyYXBoLm5vZGVBdChpbmRleCkpOworICAgICAgICAgICAgICAgICAgICBsaXZlQXRI
ZWFkLnVuY2hlY2tlZEFwcGVuZChtX2luZGV4aW5nLm5vZGVQcm9qZWN0aW9uKGluZGV4KSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgYXV0byYg
bGl2ZUF0VGFpbEluZGljZXMgPSBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF07Ci0gICAgICAgICAg
ICAgICAgVmVjdG9yPE5vZGUqPiYgbGl2ZUF0VGFpbCA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7
CisgICAgICAgICAgICAgICAgY29uc3QgSGFzaFNldDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5z
aWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVk
Pj4mIGxpdmVBdFRhaWxJbmRpY2VzID0gbV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdOworICAgICAg
ICAgICAgICAgIFZlY3RvcjxOb2RlRmxvd1Byb2plY3Rpb24+JiBsaXZlQXRUYWlsID0gYmxvY2st
PnNzYS0+bGl2ZUF0VGFpbDsKICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnJlc2l6ZSgwKTsK
ICAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnJlc2VydmVDYXBhY2l0eShsaXZlQXRUYWlsSW5k
aWNlcy5zaXplKCkpOwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBtX2xp
dmVBdFRhaWxbYmxvY2tJbmRleF0pCi0gICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwudW5j
aGVja2VkQXBwZW5kKG1fZ3JhcGgubm9kZUF0KGluZGV4KSk7CisgICAgICAgICAgICAgICAgICAg
IGxpdmVBdFRhaWwudW5jaGVja2VkQXBwZW5kKG1faW5kZXhpbmcubm9kZVByb2plY3Rpb24oaW5k
ZXgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMDYsNjcgKzEwOSw1NyBAQCBw
cml2YXRlOgogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJ
bmRleCk7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoYmxvY2ssICJPbmx5IGRpcnR5IGJs
b2NrcyBuZWVkcyB1cGRhdGVzLiBBIG51bGwgYmxvY2sgc2hvdWxkIG5ldmVyIGJlIGRpcnR5LiIp
OwogCi0gICAgICAgIG1fd29ya3NldC5jbGVhcigpOworICAgICAgICBtX3dvcmtzZXQtPmNsZWFy
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggOiBtX2xpdmVBdFRhaWxbYmxvY2tJbmRl
eF0pCi0gICAgICAgICAgICBtX3dvcmtzZXQuYWRkKGluZGV4KTsKKyAgICAgICAgICAgIG1fd29y
a3NldC0+YWRkKGluZGV4KTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJs
b2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwogCi0gICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgot
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQotICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSB0aGF0IGl0IGRlZidzIEBwIGFuZCBA
biBhbmQgdXNlcyBAeC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBHaXZlbiBhIFBo
aToKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBwOiBQaGkoKQotICAgICAgICAg
ICAgLy8KLSAgICAgICAgICAgIC8vIFdlIHNheSBub3RoaW5nLiBJdCdzIG5laXRoZXIgYSB1c2Ug
bm9yIGEgZGVmLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEdpdmVuIGEgbm9kZToK
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyAgICBuOiBUaGluZ3koQGEsIEBiLCBAYykK
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBXZSBzYXkgdGhhdCBpdCBkZWYncyBAbiBh
bmQgdXNlcyBAYSwgQGIsIEBjLgorICAgICAgICAgICAgYXV0byBoYW5kbGVFZGdlID0gWyZdIChF
ZGdlJiBlZGdlKSB7CisgICAgICAgICAgICAgICAgYm9vbCBuZXdFbnRyeSA9IG1fd29ya3NldC0+
YWRkKG1faW5kZXhpbmcuaW5kZXgoZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICBlZGdl
LnNldEtpbGxTdGF0dXMobmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNOb3RLaWxsKTsKKyAgICAg
ICAgICAgIH07CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOiB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRSghbV93b3Jrc2V0LmNvbnRhaW5zKG5vZGUtPmluZGV4KCkpLCAiVXBzaWxvbiBz
aG91bGQgbm90IGJlIHVzZWQgYXMgZGVmcyBieSBvdGhlciBub2Rlcy4iKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3dvcmtzZXQtPmNvbnRhaW5zKG5vZGUtPmluZGV4
KCkpLCAiVXBzaWxvbiBzaG91bGQgbm90IGJlIHVzZWQgYXMgZGVmcyBieSBvdGhlciBub2Rlcy4i
KTsKIAogICAgICAgICAgICAgICAgIE5vZGUqIHBoaSA9IG5vZGUtPnBoaSgpOwotICAgICAgICAg
ICAgICAgIG1fd29ya3NldC5yZW1vdmUocGhpLT5pbmRleCgpKTsKLSAgICAgICAgICAgICAgICBt
X3dvcmtzZXQuYWRkKG5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICBt
X3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5nLnNoYWRvd0luZGV4KHBoaSkpOworICAgICAgICAg
ICAgICAgIGhhbmRsZUVkZ2Uobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQaGk6IHsKKyAgICAgICAgICAgICAg
ICBtX3dvcmtzZXQtPnJlbW92ZShtX2luZGV4aW5nLmluZGV4KG5vZGUpKTsKKyAgICAgICAgICAg
ICAgICBtX3dvcmtzZXQtPmFkZChtX2luZGV4aW5nLnNoYWRvd0luZGV4KG5vZGUpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShub2RlLT5pbmRleCgpKTsKLSAgICAgICAg
ICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBoLCBub2RlLCBhZGRDaGlsZFVz
ZSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LT5yZW1vdmUobV9pbmRleGluZy5pbmRleChu
b2RlKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4obm9kZSwgaGFuZGxl
RWRnZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBVcGRhdGUgbGl2ZSBhdCBoZWFkLgotICAgICAgICBhdXRvJiBsaXZlQXRI
ZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhdOwotICAgICAgICBpZiAobV93b3Jrc2V0LnNp
emUoKSA9PSBsaXZlQXRIZWFkLnNpemUoKSkKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCAwLCBV
bnNhZmVWZWN0b3JPdmVyZmxvdywgMT4mIGxpdmVBdEhlYWQgPSBtX2xpdmVBdEhlYWRbYmxvY2tJ
bmRleF07CisgICAgICAgIGlmIChtX3dvcmtzZXQtPnNpemUoKSA9PSBsaXZlQXRIZWFkLnNpemUo
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGxp
dmVJbmRleEF0SGVhZCA6IGxpdmVBdEhlYWQpCi0gICAgICAgICAgICBtX3dvcmtzZXQucmVtb3Zl
KGxpdmVJbmRleEF0SGVhZCk7Ci0gICAgICAgIEFTU0VSVCghbV93b3Jrc2V0LmlzRW1wdHkoKSk7
CisgICAgICAgICAgICBtX3dvcmtzZXQtPnJlbW92ZShsaXZlSW5kZXhBdEhlYWQpOworICAgICAg
ICBBU1NFUlQoIW1fd29ya3NldC0+aXNFbXB0eSgpKTsKIAotICAgICAgICBsaXZlQXRIZWFkLnJl
c2VydmVDYXBhY2l0eShsaXZlQXRIZWFkLnNpemUoKSArIG1fd29ya3NldC5zaXplKCkpOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0KQorICAgICAgICBsaXZlQXRI
ZWFkLnJlc2VydmVDYXBhY2l0eShsaXZlQXRIZWFkLnNpemUoKSArIG1fd29ya3NldC0+c2l6ZSgp
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6ICptX3dvcmtzZXQpCiAgICAgICAg
ICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVuZChuZXdWYWx1ZSk7CiAKICAgICAgICAgYm9v
bCBjaGFuZ2VkUHJlZGVjZXNzb3IgPSBmYWxzZTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBw
cmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKLSAgICAgICAgICAgIGF1dG8mIGxp
dmVBdFRhaWwgPSBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBuZXdWYWx1ZSA6IG1fd29ya3NldCkgeworICAgICAgICAgICAgSGFzaFNldDx1bnNp
Z25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4mCisgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbCA9IG1f
bGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5ld1Zh
bHVlIDogKm1fd29ya3NldCkgewogICAgICAgICAgICAgICAgIGlmIChsaXZlQXRUYWlsLmFkZChu
ZXdWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2RpcnR5QmxvY2tzLnF1aWNr
U2V0KHByZWRlY2Vzc29yLT5pbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
UHJlZGVjZXNzb3IgPSB0cnVlOwpAQCAtMTc2LDIxICsxNjksMTcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIGNoYW5nZWRQcmVkZWNlc3NvcjsKICAgICB9CiAKLSAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2UpCi0gICAgewotICAgICAgICBib29s
IG5ld0VudHJ5ID0gbV93b3Jrc2V0LmFkZChlZGdlLT5pbmRleCgpKTsKLSAgICAgICAgZWRnZS5z
ZXRLaWxsU3RhdHVzKG5ld0VudHJ5ID8gRG9lc0tpbGwgOiBEb2VzTm90S2lsbCk7Ci0gICAgfQot
CiAgICAgLy8gQmxvY2tzIHdpdGggbmV3IGxpdmUgdmFsdWVzIGF0IHRhaWwuCiAgICAgQml0VmVj
dG9yIG1fZGlydHlCbG9ja3M7CisgICAgCisgICAgRmxvd0luZGV4aW5nJiBtX2luZGV4aW5nOwog
CiAgICAgLy8gTGl2ZSB2YWx1ZXMgcGVyIGJsb2NrIGVkZ2UuCiAgICAgQmxvY2tNYXA8VmVjdG9y
PHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4+IG1fbGl2ZUF0SGVhZDsKICAg
ICBCbG9ja01hcDxIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhhc2gs
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+Pj4gbV9saXZlQXRU
YWlsOwogCiAgICAgLy8gU2luZ2xlIHNwYXJzZSBzZXQgYWxsb2NhdGVkIG9uY2UgYW5kIHVzZWQg
YnkgZXZlcnkgYmFzaWMgYmxvY2suCi0gICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9yT3Zl
cmZsb3c+IG1fd29ya3NldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5kZXhTcGFyc2VTZXQ8VW5z
YWZlVmVjdG9yT3ZlcmZsb3c+PiBtX3dvcmtzZXQ7CiB9OwogCiBib29sIHBlcmZvcm1MaXZlbmVz
c0FuYWx5c2lzKEdyYXBoJiBncmFwaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAyMDgzNjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU2MCwxNSArMjU2MCwxOCBAQCBwdWJsaWM6CiAgICAg
QmFzaWNCbG9jayogb3duZXI7CiB9OwogCi1pbmxpbmUgYm9vbCBub2RlQ29tcGFyYXRvcihOb2Rl
KiBhLCBOb2RlKiBiKQotewotICAgIHJldHVybiBhLT5pbmRleCgpIDwgYi0+aW5kZXgoKTsKLX0K
K3N0cnVjdCBOb2RlQ29tcGFyYXRvciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgTm9kZVB0clR5
cGU+CisgICAgYm9vbCBvcGVyYXRvcigpKE5vZGVQdHJUeXBlIGEsIE5vZGVQdHJUeXBlIGIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gYS0+aW5kZXgoKSA8IGItPmluZGV4KCk7CisgICAg
fQorfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIENTdHJpbmcgbm9kZUxpc3REdW1wKGNvbnN0
IFQmIG5vZGVMaXN0KQogewotICAgIHJldHVybiBzb3J0ZWRMaXN0RHVtcChub2RlTGlzdCwgbm9k
ZUNvbXBhcmF0b3IpOworICAgIHJldHVybiBzb3J0ZWRMaXN0RHVtcChub2RlTGlzdCwgTm9kZUNv
bXBhcmF0b3IoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0yNTc5LDcgKzI1ODIs
NyBAQCBDU3RyaW5nIG5vZGVNYXBEdW1wKGNvbnN0IFQmIG5vZGVNYXAsIER1CiAgICAgICAgIHR5
cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBub2RlTWFwLmJlZ2luKCk7CiAgICAgICAg
IGl0ZXIgIT0gbm9kZU1hcC5lbmQoKTsgKytpdGVyKQogICAgICAgICBrZXlzLmFwcGVuZChpdGVy
LT5rZXkpOwotICAgIHN0ZDo6c29ydChrZXlzLmJlZ2luKCksIGtleXMuZW5kKCksIG5vZGVDb21w
YXJhdG9yKTsKKyAgICBzdGQ6OnNvcnQoa2V5cy5iZWdpbigpLCBrZXlzLmVuZCgpLCBOb2RlQ29t
cGFyYXRvcigpKTsKICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CiAgICAgQ29tbWFQcmludGVy
IGNvbW1hOwogICAgIGZvcih1bnNpZ25lZCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpCkBA
IC0yNTkzLDcgKzI1OTYsNyBAQCBDU3RyaW5nIG5vZGVWYWx1ZVBhaXJMaXN0RHVtcChjb25zdCBU
JiBuCiAgICAgdXNpbmcgViA9IHR5cGVuYW1lIFQ6OlZhbHVlVHlwZTsKICAgICBUIHNvcnRlZExp
c3QgPSBub2RlVmFsdWVQYWlyTGlzdDsKICAgICBzdGQ6OnNvcnQoc29ydGVkTGlzdC5iZWdpbigp
LCBzb3J0ZWRMaXN0LmVuZCgpLCBbXShjb25zdCBWJiBhLCBjb25zdCBWJiBiKSB7Ci0gICAgICAg
IHJldHVybiBub2RlQ29tcGFyYXRvcihhLm5vZGUsIGIubm9kZSk7CisgICAgICAgIHJldHVybiBO
b2RlQ29tcGFyYXRvcigpKGEubm9kZSwgYi5ub2RlKTsKICAgICB9KTsKIAogICAgIFN0cmluZ1By
aW50U3RyZWFtIG91dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZUFi
c3RyYWN0VmFsdWVQYWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVBYnN0cmFjdFZhbHVlUGFpci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RWYWx1ZVBhaXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR05vZGVBYnN0
cmFjdFZhbHVlUGFpci5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlQWJzdHJhY3RWYWx1ZVBhaXI6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobm9kZSwgIj0+IiwgdmFsdWUp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlQWJzdHJhY3RW
YWx1ZVBhaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVBYnN0cmFjdFZhbHVlUGFpci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZUFic3RyYWN0VmFsdWVQYWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJz
dHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR05vZGVGbG93UHJvamVjdGlvbi5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBOb2RlQWJzdHJhY3RWYWx1ZVBh
aXIgeworICAgIE5vZGVBYnN0cmFjdFZhbHVlUGFpcigpIHsgfQorICAgIAorICAgIE5vZGVBYnN0
cmFjdFZhbHVlUGFpcihOb2RlRmxvd1Byb2plY3Rpb24gbm9kZSwgY29uc3QgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUpCisgICAgICAgIDogbm9kZShub2RlKQorICAgICAgICAsIHZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OworICAgIAorICAgIE5vZGVGbG93UHJvamVjdGlvbiBub2RlOworICAgIEFic3RyYWN0VmFsdWUg
dmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxv
d1Byb2plY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZUZsb3dQcm9qZWN0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTm9kZUZsb3dQcm9qZWN0aW9u
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCit2b2lkIE5vZGVGbG93UHJvamVjdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCItIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGtpbmQoKSA9PSBQcmltYXJ5KSB7CisgICAgICAg
IG91dC5wcmludChub2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG91dC5wcmlu
dCgic2hhZG93KCIsIG5vZGUoKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZUZsb3dQcm9qZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlRmxvd1Byb2plY3Rpb24uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVGbG93UHJvamVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hUYWJsZS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIE5vZGVGbG93UHJvamVjdGlvbiB7
CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgUHJpbWFyeSwKKyAgICAgICAgU2hh
ZG93CisgICAgfTsKKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oKSB7IH0KKyAgICAKKyAg
ICBOb2RlRmxvd1Byb2plY3Rpb24oTm9kZSogbm9kZSkKKyAgICAgICAgOiBtX3dvcmQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpCisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IFByaW1hcnkpOworICAgIH0KKyAgICAKKyAgICBOb2RlRmxvd1Byb2plY3Rpb24oTm9kZSogbm9k
ZSwgS2luZCBraW5kKQorICAgICAgICA6IG1fd29yZChiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihu
b2RlKSB8IChraW5kID09IFNoYWRvdyA/IHNoYWRvd0JpdCA6IDApKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHRoaXMtPmtpbmQoKSA9PSBraW5kKTsKKyAgICB9CisgICAgCisgICAgTm9kZUZsb3dQ
cm9qZWN0aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3dv
cmQoc2hhZG93Qml0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV93b3JkOyB9CisgICAgCisgICAgS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gKG1fd29yZCAmIHNoYWRvd0JpdCkgPyBTaGFkb3cgOiBQcmltYXJ5OyB9
CisgICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxOb2Rl
Kj4obV93b3JkICYgfnNoYWRvd0JpdCk7IH0KKyAgICAKKyAgICBOb2RlJiBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiAqbm9kZSgpOyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsg
cmV0dXJuIG5vZGUoKTsgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fd29yZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KE5vZGVGbG93UHJvamVjdGlvbiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3dvcmQgPT0gb3RoZXIubV93b3JkOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0o
Tm9kZUZsb3dQcm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPChOb2RlRmxv
d1Byb2plY3Rpb24gb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2luZCgpICE9IG90
aGVyLmtpbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBraW5kKCkgPCBvdGhlci5raW5kKCk7Cisg
ICAgICAgIHJldHVybiBub2RlKCkgPCBvdGhlci5ub2RlKCk7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3I+KE5vZGVGbG93UHJvamVjdGlvbiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBvdGhlciA8ICp0aGlzOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PD0oTm9kZUZsb3dQcm9qZWN0aW9uIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPiBvdGhlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I+PShOb2Rl
Rmxvd1Byb2plY3Rpb24gb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA8IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gTm9kZUZsb3dQcm9qZWN0
aW9uKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgCisgICAgLy8gUGhp
IHNoYWRvdyBwcm9qZWN0aW9ucyBjYW4gYmVjb21lIGludmFsaWQgYmVjYXVzZSB0aGUgUGhpIG1p
Z2h0IGJlIGZvbGRlZCB0byBzb21ldGhpbmcgZWxzZS4KKyAgICBib29sIGlzU3RpbGxWYWxpZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgJiYgKGtpbmQoKSA9PSBQcmltYXJ5
IHx8IG5vZGUoKS0+b3AoKSA9PSBQaGkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgorICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goTm9kZSogbm9kZSwgY29uc3QgRnVuYyYgZnVuYykKKyAgICB7
CisgICAgICAgIGZ1bmMoTm9kZUZsb3dQcm9qZWN0aW9uKG5vZGUpKTsKKyAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gUGhpKQorICAgICAgICAgICAgZnVuYyhOb2RlRmxvd1Byb2plY3Rpb24obm9k
ZSwgU2hhZG93KSk7CisgICAgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyBjb25zdCB1aW50
cHRyX3Qgc2hhZG93Qml0ID0gMTsKKyAgICAKKyAgICB1aW50cHRyX3QgbV93b3JkIHsgMCB9Owor
fTsKKworc3RydWN0IE5vZGVGbG93UHJvamVjdGlvbkhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKE5vZGVGbG93UHJvamVjdGlvbiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChOb2RlRmxvd1Byb2plY3Rpb24gYSwgTm9kZUZsb3dQcm9qZWN0
aW9uIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0Nv
bXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBE
ZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6REZHOjpOb2Rl
Rmxvd1Byb2plY3Rpb24+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpOb2RlRmxvd1Byb2plY3Rp
b25IYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0
czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6Ok5vZGVGbG93UHJvamVj
dGlvbj4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6Ok5vZGVGbG93UHJvamVjdGlv
bj4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2Vy
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA4MzY3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNiwxMSArMTI2LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBzdGF0ZS1hdC10YWlsIGJhc2VkIG9uIHRoZSBlcG9j
aHMgb2YgbGl2ZSBub2RlcyBhbmQgdGhlCiAgICAgICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQg
ZXBvY2guIFdlIGdyb3cgc3RhdGUtYXQtdGFpbCBtb25vdG9uaWNhbGx5IHRvIGVuc3VyZSBjb252
ZXJnZW5jZS4KICAgICAgICAgICAgICAgICAgICAgYm9vbCB0aGlzQmxvY2tDaGFuZ2VkID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6IGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChOb2RlRmxvd1Byb2plY3Rpb24g
bm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLmtpbmQoKSA9PSBOb2RlRmxvd1Byb2plY3Rpb246OlNoYWRvdykKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChub2RlLT5lcG9jaCgpICE9IG1fY3VycmVudEVwb2NoKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIG5vZGUgaXMgb2xkZXIgdGhhbiB0aGUgY3VycmVudCBlcG9jaCwg
dGhlbiB3ZSBtYXkgbmVlZCB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1biBh
IGJhcnJpZXIgb24gaXQgaW4gdGhlIGZ1dHVyZS4gU28sIGFkZCBpdCB0byB0aGUgc3RhdGUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0Jsb2NrQ2hhbmdlZCB8PSBtX3N0YXRlQXRU
YWlsLT5hdChibG9jaykuYWRkKG5vZGUpLmlzTmV3RW50cnk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpc0Jsb2NrQ2hhbmdlZCB8PSBtX3N0YXRlQXRUYWlsLT5hdChibG9jaykuYWRk
KG5vZGUubm9kZSgpKS5pc05ld0VudHJ5OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTc4LDggKzE4MCwx
MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAg
IG1fc3RhdGUtPmJlZ2luQmFzaWNCbG9jayhibG9jayk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6IGJsb2NrLT5zc2EtPmxpdmVBdEhlYWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobV9zdGF0ZUF0SGVhZC0+YXQoYmxvY2spLmNvbnRhaW5zKG5vZGUpKSB7Cisg
ICAgICAgICAgICBmb3IgKE5vZGVGbG93UHJvamVjdGlvbiBub2RlIDogYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZCkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLmtpbmQoKSA9PSBOb2RlRmxvd1By
b2plY3Rpb246OlNoYWRvdykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgaWYgKG1fc3RhdGVBdEhlYWQtPmF0KGJsb2NrKS5jb250YWlucyhub2RlLm5vZGUo
KSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgcHJldmlvdXMgYmxvY2tzIHRlbGwgdXMg
dGhhdCB0aGlzIG5vZGUgbWF5IG5lZWQgYSBiYXJyaWVyIGluIHRoZQogICAgICAgICAgICAgICAg
ICAgICAvLyBmdXR1cmUsIHRoZW4gcHV0IGl0IGluIHRoZSBhbmNpZW50IHByaW1vcmRpYWwgZXBv
Y2guIFRoaXMgZm9yY2VzIHVzIHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGVtaXQgYSBiYXJy
aWVyIG9uIGFueSBwb3NzaWJseS1jZWxsIHN0b3JlLCByZWdhcmRsZXNzIG9mIHRoZSBlcG9jaCBv
ZiB0aGUKQEAgLTMyNiw3ICszMzAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgotICAgICAgICAg
ICAgICAgIG1fbm9kZS0+cGhpKCktPnNldEVwb2NoKG1fbm9kZS0+ZXBvY2goKSk7CisgICAgICAg
ICAgICAgICAgLy8gQXNzdW1lIHRoZSB3b3JzdCBmb3IgUGhpcyBzbyB0aGF0IHdlIGRvbid0IGhh
dmUgdG8gd29ycnkgYWJvdXQgUGhpIHNoYWRvd3MuCisgICAgICAgICAgICAgICAgbV9ub2RlLT5w
aGkoKS0+c2V0RXBvY2goRXBvY2goKSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9j
aChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMDgzNjcpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTExLTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgREZHIHBsYXlzIGZhc3QgYW5kIGxvb3NlIHdpdGggdGhlIHNo
YWRvdyB2YWx1ZXMgb2YgYSBQaGkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NDMwOQorCisgICAgICAgIFJldmlld2VkIGJ5IFNhYW0gQmFyYXRpLgor
ICAgICAgICAKKyAgICAgICAgTWFkZSB0aGlzIEFQSSB1c2Ugc2l6ZSByYXRoZXIgdGhhbiBtYXhJ
bmRleCBhcyBpdHMgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyLCBiZWNhdXNlIHRoYXQncworICAg
ICAgICBsZXNzIGNvbmZ1c2luZy4KKworICAgICAgICAqIHd0Zi9JbmRleFNwYXJzZVNldC5oOgor
ICAgICAgICAoV1RGOjpJbmRleFNwYXJzZVNldDxPdmVyZmxvd0hhbmRsZXI+OjpJbmRleFNwYXJz
ZVNldCk6CisKIDIwMTYtMTEtMDMgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDgzNjQuCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9JbmRleFNwYXJzZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0luZGV4U3BhcnNlU2V0LmgJKHJldmlzaW9uIDIwODM2NykKKysrIFNvdXJjZS9XVEYvd3Rm
L0luZGV4U3BhcnNlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5kbGVyID0gQ3JhcwogY2xhc3MgSW5kZXhTcGFyc2VTZXQg
ewogICAgIHR5cGVkZWYgVmVjdG9yPHVuc2lnbmVkLCAwLCBPdmVyZmxvd0hhbmRsZXI+IFZhbHVl
TGlzdDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBJbmRleFNwYXJzZVNldCh1bnNpZ25lZCBtYXhW
YWx1ZSk7CisgICAgZXhwbGljaXQgSW5kZXhTcGFyc2VTZXQodW5zaWduZWQgc2l6ZSk7CiAKICAg
ICBib29sIGFkZCh1bnNpZ25lZCk7CiAgICAgYm9vbCByZW1vdmUodW5zaWduZWQpOwpAQCAtNjUs
OSArNjUsOSBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgT3ZlcmZsb3dIYW5k
bGVyPgotaW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFuZGxlcj46OkluZGV4U3BhcnNl
U2V0KHVuc2lnbmVkIG1heFZhbHVlKQoraW5saW5lIEluZGV4U3BhcnNlU2V0PE92ZXJmbG93SGFu
ZGxlcj46OkluZGV4U3BhcnNlU2V0KHVuc2lnbmVkIHNpemUpCiB7Ci0gICAgbV9tYXAucmVzaXpl
KG1heFZhbHVlICsgMSk7CisgICAgbV9tYXAucmVzaXplKHNpemUpOwogfQogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>