<?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>194081</bug_id>
          
          <creation_ts>2019-01-30 23:00:43 -0800</creation_ts>
          <short_desc>B3 should use associativity to optimize expression trees</short_desc>
          <delta_ts>2019-04-04 16:52:00 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>154319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1500440</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-01-30 23:00:43 -0800</bug_when>
    <thetext>Currently, it is only using associativity for Add (and not even that comprehensively if I read the code correctly). So for example (3+x) + (y+4) is correctly reduced to x+y+7, but (3*x)*(y*7) is not reduced to x*y*12.
It should apply to Mul, BitOr and BitAnd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500464</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-30 23:38:31 -0800</bug_when>
    <thetext>(In reply to Robin Morisset from comment #0)
&gt; Currently, it is only using associativity for Add (and not even that
&gt; comprehensively if I read the code correctly). So for example (3+x) + (y+4)
&gt; is correctly reduced to x+y+7, but (3*x)*(y*7) is not reduced to x*y*12.
&gt; It should apply to Mul, BitOr and BitAnd.

That’s surprising.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505408</commentid>
    <comment_count>2</comment_count>
      <attachid>361843</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-12 14:27:20 -0800</bug_when>
    <thetext>Created attachment 361843
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1505412</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-02-12 14:31:59 -0800</bug_when>
    <thetext>Attachment 361843 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:648:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:934:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1043:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:1096:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2182:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2270:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2273:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2278:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 8 in 2 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>1505419</commentid>
    <comment_count>4</comment_count>
      <attachid>361846</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-02-12 14:41:34 -0800</bug_when>
    <thetext>Created attachment 361846
Patch

Just fixed the style nits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521030</commentid>
    <comment_count>5</comment_count>
      <attachid>361846</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2019-03-25 14:31:17 -0700</bug_when>
    <thetext>Comment on attachment 361846
Patch

Can you add testb3 tests for at least some cases of this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1521856</commentid>
    <comment_count>6</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-03-27 14:48:33 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; Comment on attachment 361846 [details]
&gt; Patch
&gt; 
&gt; Can you add testb3 tests for at least some cases of this?

I did not add tests because several of the already existing tests stress this code (and found bugs in earlier versions of this patch), but sure I can add a few more.

I looked a the performance impact of this patch:
https://perf-safari.apple.com/v3/#/analysis/task/6346
It is quite variable, with some large wins and losses, but the overall result is neutral.
After thinking some more about it, I can see several issues with my approach:
- The compile time can be quadratic in pathological cases, due to walking the graph forward, it would be a lot better to walk it backwards.
- We can accidentally duplicate quite a lot of code as we don&apos;t have use counts available
- We make the depth of the expression depth (and thus the latency to get its result) linear in its size instead of logarithmic. In other words, we completely sacrifice all ILP.

These problems combined have convinced me that putting this in B3ReduceStrength was the wrong approach. I should have a separate pass that does nothing but these associativity reorderings, trying to produce perfectly balanced expression trees, quickly and without code duplication. The fact that even the currently flawed approach got some serious speed-ups is encouraging that this would be a win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522514</commentid>
    <comment_count>7</comment_count>
      <attachid>366286</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-03-29 11:43:01 -0700</bug_when>
    <thetext>Created attachment 366286
Patch

New approach as a new pass, and with some extra tests.
I&apos;ll provide perf results as soon as I have them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522522</commentid>
    <comment_count>8</comment_count>
      <attachid>366288</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-03-29 11:57:59 -0700</bug_when>
    <thetext>Created attachment 366288
Patch

This time with a patch file that actually applies cleanly (made from svn diff and not git diff that seems to make patch files for new files that svn cannot read).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522527</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-29 12:02:59 -0700</bug_when>
    <thetext>Attachment 366288 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:81:  Missing space before ( in switch(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:87:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:131:  Non-label code inside switch statements should be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:130:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:136:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:137:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:138:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:139:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:140:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:141:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:142:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:143:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:144:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:145:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:186:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:214:  Missing space around : in range-based for statement  [whitespace/colon] [4]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:217:  Missing space around : in range-based for statement  [whitespace/colon] [4]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:248:  Missing space around : in range-based for statement  [whitespace/colon] [4]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:267:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/B3OptimizeAssociativeExpressionTrees.cpp:268:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 21 in 10 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>1522539</commentid>
    <comment_count>10</comment_count>
      <attachid>366294</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-03-29 12:28:15 -0700</bug_when>
    <thetext>Created attachment 366294
Patch

Fix style nits and missing import in testB3, that for some reason only the gtk build complained about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522547</commentid>
    <comment_count>11</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-03-29 12:40:40 -0700</bug_when>
    <thetext>The missing import was visibly not enough to appease the gtk-wk2 bot.. I will have to look deeper into what the linker error message means.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1522771</commentid>
    <comment_count>12</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-03-30 08:54:25 -0700</bug_when>
    <thetext>The results from the bots on MacBookPro just came in and they are bad (overall neutral, but all of the subtests with highly significant changes were regressed). I should understand why before trying to land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523477</commentid>
    <comment_count>13</comment_count>
      <attachid>366294</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-02 14:36:41 -0700</bug_when>
    <thetext>Comment on attachment 366294
Patch

I&apos;ve got the performance numbers from this patch on JetStream2 and they&apos;re overall neutral.
So I looked in more detail at when this optimization fires in a non-trivial way on all of JetStream2, and there are only a few subtests where it triggers:
- Unipoker: balances some BitOr trees (insignificant slowdown)
- tsf-wasm: balances a ton of BitOr trees (insignificant 1.4% speedup)
- stanford-crypto-sha256 and stanford-crypto-pbkdf2: balances a few BitXor trees (insignificant slowdown on first iteration, strongly significant 2% speedup on average iteration and 3.5% speedup on worst iteration)
- octane-zlib: balances a couple huge Add trees (no change)
- ML: balances one small BitXor tree (no change)
- mandreel: balances a couple (Add/BitAnd) small trees (0.7% insignificant slowdown on first iteration, strongly significant 1% improvement on average iteration and 2% on worst-case iteration)
- HashSet-wasm: balances a few BitOr trees (insignificant speedup)
- base64-SP: only balances one tiny BitXor tree (significant 2% slowdown on average iteration(?), insignificant change otherwise)

So at best we get a couple percent on three benchmarks, and are otherwise neutral.
Most likely we are just seeing noise even in these benchmarks where it balances trees. Surprisingly (to me) it does not find simplification opportunities beyond simple balancing.

I thus put this patch out-of-review, as it does not seem obviously worth it at this point. I plan to revisit it once we have better value analysis in B3. It should enable significantly more simplifications, and make more large trees appear by turning CheckAdd/Sub/Mul into their non-checked variants.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523488</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2019-04-02 14:55:31 -0700</bug_when>
    <thetext>(In reply to Robin Morisset from comment #13)
&gt; Comment on attachment 366294 [details]
&gt; Patch
&gt; 
&gt; I&apos;ve got the performance numbers from this patch on JetStream2 and they&apos;re
&gt; overall neutral.
&gt; So I looked in more detail at when this optimization fires in a non-trivial
&gt; way on all of JetStream2, and there are only a few subtests where it
&gt; triggers:
&gt; - Unipoker: balances some BitOr trees (insignificant slowdown)
&gt; - tsf-wasm: balances a ton of BitOr trees (insignificant 1.4% speedup)
&gt; - stanford-crypto-sha256 and stanford-crypto-pbkdf2: balances a few BitXor
&gt; trees (insignificant slowdown on first iteration, strongly significant 2%
&gt; speedup on average iteration and 3.5% speedup on worst iteration)
&gt; - octane-zlib: balances a couple huge Add trees (no change)
&gt; - ML: balances one small BitXor tree (no change)
&gt; - mandreel: balances a couple (Add/BitAnd) small trees (0.7% insignificant
&gt; slowdown on first iteration, strongly significant 1% improvement on average
&gt; iteration and 2% on worst-case iteration)
&gt; - HashSet-wasm: balances a few BitOr trees (insignificant speedup)
&gt; - base64-SP: only balances one tiny BitXor tree (significant 2% slowdown on
&gt; average iteration(?), insignificant change otherwise)
&gt; 
&gt; So at best we get a couple percent on three benchmarks, and are otherwise
&gt; neutral.
&gt; Most likely we are just seeing noise even in these benchmarks where it
&gt; balances trees. Surprisingly (to me) it does not find simplification
&gt; opportunities beyond simple balancing.
&gt; 
&gt; I thus put this patch out-of-review, as it does not seem obviously worth it
&gt; at this point. I plan to revisit it once we have better value analysis in
&gt; B3. It should enable significantly more simplifications, and make more large
&gt; trees appear by turning CheckAdd/Sub/Mul into their non-checked variants.

It&apos;s worth the benefit if you make a microbenchmark and it speeds up a lot (&gt;=20%, say) and the rest of these results hold.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523994</commentid>
    <comment_count>15</comment_count>
      <attachid>366657</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-03 15:31:43 -0700</bug_when>
    <thetext>Created attachment 366657
Patch

I wrote three microbenchmarks. None of them had any speedups. Upon investigating, I found that CSE tends to leave around dead values that are only eliminated much further (in the ReduceStrength just after my optimizations). This was a problem, as my optimization pass gives up when a node got a use count greater than one, and these dead values were using various subtrees.

So I ripped out killDeadCode from B3ReduceStrength, made it its own pass and added it after CSE. This worked: 2 of the three microbenchmarks now show wins of respectively 16% and 42%.

More surprisingly and very happily, this dead code elimination by itself was a massive win on a few other microbenchmarks: 50% on instanceof-always-hit-two and 16% on two variations of licm-dragons.
I suspect it is by enabling B3TailDuplication to do its work, as it runs after CSE, and needs tiny blocks to be able to do anything.

I sent this patch to the bots for more serious performance results on JetStream2, I will update this bug as soon as the results come in.

Beyond that the only difference with the previous patch, is that my pass now skips trees of size 3, as B3ReduceStrength can deal with them. This should help avoid a possible hit to compile time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524047</commentid>
    <comment_count>16</comment_count>
      <attachid>366657</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2019-04-03 16:50:12 -0700</bug_when>
    <thetext>Comment on attachment 366657
Patch

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

r=me with the one nit that EliminateDeadCode doesn&apos;t need a class.

&gt; Source/JavaScriptCore/b3/B3EliminateDeadCode.h:46
&gt; +// This class and its run function are public, so that they can be called directly from B3ReduceStrength
&gt; +class EliminateDeadCode {
&gt; +public:
&gt; +    EliminateDeadCode(Procedure&amp; proc)
&gt; +        : m_proc(proc)
&gt; +    {
&gt; +    }
&gt; +
&gt; +    bool run();
&gt; +
&gt; +private:
&gt; +    Procedure&amp; m_proc;
&gt; +};

Seems like this should just be a function - maybe bool eliminateDeadCodeImpl(Procedure&amp;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524093</commentid>
    <comment_count>17</comment_count>
      <attachid>366686</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-03 18:25:08 -0700</bug_when>
    <thetext>Created attachment 366686
Patch

Thanks for the review!
I replaced the class EliminateDeadCode by a function eliminateDeadCodeImpl as suggested, and fixed a dataLog that I had forgotten from debugging.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524094</commentid>
    <comment_count>18</comment_count>
      <attachid>366687</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-03 18:26:12 -0700</bug_when>
    <thetext>Created attachment 366687
Patch

Now without OOPS in changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524141</commentid>
    <comment_count>19</comment_count>
      <attachid>366687</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-03 20:37:29 -0700</bug_when>
    <thetext>Comment on attachment 366687
Patch

Clearing flags on attachment: 366687

Committed r243851: &lt;https://trac.webkit.org/changeset/243851&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524142</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-03 20:37:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524145</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-03 20:38:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/49590146&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524502</commentid>
    <comment_count>22</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-04 16:14:54 -0700</bug_when>
    <thetext>What was the result on JetStream 2?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524514</commentid>
    <comment_count>23</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-04-04 16:52:00 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #22)
&gt; What was the result on JetStream 2?

All bots failed :-(
I am trying again with different configurations/machines, maybe I&apos;ll be more lucky this time.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361843</attachid>
            <date>2019-02-12 14:27:20 -0800</date>
            <delta_ts>2019-02-12 14:41:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>B3ReduceStrengthAssociativity</filename>
            <type>text/plain</type>
            <size>18261</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxMzE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDE5LTAyLTEyICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aCBzaG91bGQgdXNlIGFzc29jaWF0aXZpdHkgdG8gY2Fub25p
Y2FsaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTQwODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHJlcGxhY2VzIHRoZSBhZC1ob2MgYXBwcm9hY2ggcHJldmlvdXNseSB1c2VkIGZvciBBZGQg
YnkgYSBnZW5lcmFsIGhhbmRsZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2aXR5KCkgdXNlZCBieSBB
ZGQvTXVsL0JpdE9yL0JpdEFuZC9CaXRYb3IuCisgICAgICAgIElmIHRoZSB2YWx1ZSBpcyB0aGUg
cm9vdCBvZiBhbiBpbnRlcmVzdGluZyBleHByZXNzaW9uIHRyZWUgKGkuZS4gc29tZSBvZiBpdHMg
Y2hpbGRyZW4gaGF2ZSB0aGUgc2FtZSBvcGNvZGUpLCB3ZSBnYXRoZXIgdGhlIGxlYXZlcyBvZiB0
aGUgZXhwcmVzc2lvbiB0cmVlLCBzb3J0IHRoZW0sIGFuZCByZWJ1aWxkIG1fdmFsdWUgYXMgYSBw
cm9wZXJseSBjYW5vbmljYWxpemVkIGV4cHJlc3Npb24gdHJlZS4KKyAgICAgICAgVGhlcmUgYXJl
IGEgZmV3IG1pbm9yIHN1YnRsZXRpZXM6CisgICAgICAgIC0gV2Ugb25seSBydW4gZm9yIEFkZC9N
dWwgb24gaW50ZWdlcnMsIGFzIHRoZXkgYXJlIG5vdCBhc3NvY2lhdGl2ZSBvbiBmbG9hdGluZyBw
b2ludCB2YWx1ZXMgaW4gZ2VuZXJhbC4KKyAgICAgICAgLSBJZiB3ZSBzZWUgdGhlIHNhbWUgbm9k
ZSB0d2ljZSBpbnNpZGUgdGhlIGV4cHJlc3Npb24gdHJlZSBmb3IgQWRkL011bCwgd2UgbXVzdCBi
YWlsIG91dC4gT3RoZXJ3aXNlIHdlIG1heSBiZSB0cnlpbmcgdG8gZnVsbHkgZXhwYW5kIGFuIGV4
cG9uZW50aWFsbHkgbGFyZ2UgZXhwcmVzc2lvbiB0aGF0IHdhcyBjb21wcmVzc2VkIGJ5IHNoYXJp
bmcuCisgICAgICAgICAgICAtIEhvd2V2ZXIsIGlmIHdlIHNlZSB0aGUgc2FtZSBub2RlIHR3aWNl
IGZvciBCaXRBbmQvQml0T3Igd2UgY2FuIGp1c3QgaWdub3JlIGl0LgorICAgICAgICAgICAgLSBX
ZSBjb3VsZCBpbiB0aGVvcnkgdHJ5IHRvIGRvIHNvbWV0aGluZyBzbWFydCBmb3IgQml0WG9yLCBi
dXQgY3VycmVudGx5IHdlIGp1c3QgYmFpbCBvdXQgYXMgZm9yIEFkZC9NdWwKKyAgICAgICAgLSBX
ZSBtdXN0IHRlYWNoIGVhY2ggb3BlcmF0aW9uIHRvIGRlYWwgd2l0aCBPcChPcChmb28sIGJhciks
IGJheikgYXMgaWYgaXQgd2VyZSBPcChmb28sIE9wKGJhciwgYmF6KSkgZm9yIGEgZmV3IGNhc2Vz
LgorCisgICAgICAgIEkgdXNlZCBhIEhhc2hTZXQgYW5kIG5vdCBhbiBJbmRleFNldCBmb3IgdGhl
IGlubmVyIG5vZGVzIHNlZW4sIGFzIEkgZXhwZWN0IHRoYXQgc2V0IHRvIGJlIHVzdWFsbHkgdGlu
eSwgYW5kIGFuIEluZGV4U2V0J3Mgc2l6ZSBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgaW5kaWNl
cyBpbiB1c2UgYnkgdGhlIHByb2NlZHVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIG1heSBpbiB0
aGVvcnkgY2F1c2Ugc29tZSBjb2RlIGR1cGxpY2F0aW9uIGJ5IHJlZHVjaW5nIHNoYXJpbmcgYSBi
aXQsIGJ1dCBub3RoaW5nIG1vcmUgdGhhbiB3aGF0IHdhcyBhbHJlYWR5IHRydWUgZm9yIEFkZC4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoZXJlIGFyZSBhbHJlYWR5IHF1aXRlIGEgZmV3
IHRlc3RzIGZvciBhc3NvY2lhdGl2aXR5IGluIHRlc3RiMy5jcHAKKyAgICAgICAgICAoZS5nLiB0
ZXN0U3BpbGxHUCwgdGVzdEJpdFhvckltbUJpdFhvckFyZ0ltbSwgZXRjLi4pCisKKyAgICAgICAg
KiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKwogMjAxOS0wMi0xMiAgTWljaGFlbCBDYXRhbnph
cm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IC1X
aW1wbGljaXQtZmFsbHRocm91Z2ggd2FybmluZyBhZnRlciByMjQxMTQwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyNDEy
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5Nyw1NyArNDk3LDEzIEBACiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0
aXZpdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBBZGQgJiYgbV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikK
LSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgY29uc3RhbnQxICsgY29u
c3RhbnQyKQotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVlLT5jaGlsZCgx
KS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwotICAg
ICAgICAgICAgICAgIGlmIChuZXdTdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsKLSAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3U3VtOwotICAgICAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdl
cigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2
aXR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFs
dWUsIGNvbnN0YW50KSwgb3RoZXJWYWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKLSAgICAgICAgICAgICAgICBp
ZiAoIW1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNv
bnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSogb3RoZXJWYWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDEpOwotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBsaWNhdGUgY29kZSBpZiBBZGQodmFsdWUsIGNv
bnN0YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZl
ciwgd2UgYWxyZWFkeSBtb2RlbCBhZGRpbmcgYSBjb25zdGFudCBhcyBpZiBpdCB3YXMgZnJlZSBp
biBvdGhlciBwbGFjZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gbGV0J3MganVzdCByb2xs
IHdpdGggaXQuIFRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBtZWFuIGhhdmluZyB0byBkbyBnb29kIHVz
ZQotICAgICAgICAgICAgICAgICAgICAvLyBjb3VudHMsIHdoaWNoIHJlZHVjZVN0cmVuZ3RoKCkg
Y3VycmVudGx5IGRvZXNuJ3QgaGF2ZS4KLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCkgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUt
Pm9yaWdpbigpLCB2YWx1ZSwgb3RoZXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPmNoaWxkKDEpID0gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEFkZChvdGhlclZhbHVlLCBBZGQodmFsdWUsIGNvbnN0YW50KSkKLSAgICAgICAgICAgIC8vIElu
dG8gdGhpczogQWRkKEFkZCh2YWx1ZSwgb3RoZXJWYWx1ZSksIGNvbnN0YW50KQotICAgICAgICAg
ICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpCi0gICAgICAgICAgICAgICAgJiYgIW1fdmFsdWUt
PmNoaWxkKDApLT5oYXNJbnQoKQotICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDEp
LT5vcGNvZGUoKSA9PSBBZGQKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+
Y2hpbGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92
YWx1ZS0+Y2hpbGQoMSktPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIFZhbHVlKiBjb25zdGFu
dCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5jaGlsZCgxKTsKLSAgICAgICAgICAgICAgICBWYWx1ZSog
b3RoZXJWYWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDApOwotICAgICAgICAgICAgICAgIC8vIFRoaXMg
Y3JlYXRlcyBhIGR1cGxpY2F0ZSBhZGQuIFRoYXQncyBkYW5nZXJvdXMgYnV0IHByb2JhYmx5IGZp
bmUsIHNlZSBhYm92ZS4KLSAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9Ci0gICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgb3Ro
ZXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBjb25zdGFudDsK
LSAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIFR1cm4gdGhp
czogQWRkKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBj
b25zdGFudDEgKyBjb25zdGFudDIKICAgICAgICAgICAgIGlmIChWYWx1ZSogY29uc3RhbnRBZGQg
PSBtX3ZhbHVlLT5jaGlsZCgwKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgx
KSkpIHsKQEAgLTU1NSwxNyArNTExLDYgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFkZCh2YWx1ZSwg
dmFsdWUpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgMSkKLSAgICAgICAg
ICAgIC8vIFRoaXMgaXMgYSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQg
dG8gYmUgYSBzdHJlbmd0aCByZWR1Y3Rpb24uCi0gICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJ
bnRlZ2VyKCkgJiYgbV92YWx1ZS0+Y2hpbGQoMCkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKLSAg
ICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKAotICAgICAgICAgICAgICAgICAgICBt
X3Byb2MuYWRkPFZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgIFNobCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4obV9pbmRleCwgbV92YWx1ZS0+b3JpZ2lu
KCksIDEpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KICAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQWRkKHZhbHVlLCB6ZXJvKQogICAgICAgICAgICAgLy8gSW50
byBhbiBJZGVudGl0eS4KICAgICAgICAgICAgIC8vCkBAIC01ODAsNiArNTI1LDI4IEBACiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5pc0ludGVnZXIoKSkgeworICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIHZhbHVlKQorICAg
ICAgICAgICAgICAgIC8vIEludG8gdGhpczogU2hsKHZhbHVlLCAxKQorICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgYSB1c2VmdWwgY2Fub25pY2FsaXphdGlvbi4gSXQncyBub3QgbWVhbnQgdG8g
YmUgYSBzdHJlbmd0aCByZWR1Y3Rpb24uCisgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcGxh
Y2VXaXRoTmV3VmFsdWUobV9wcm9jLmFkZDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAg
ICBTaGwsIG1fdmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgs
IG1fdmFsdWUtPm9yaWdpbigpLCAxKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIg
QWRkKEFkZCh2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAgICAgIC8v
IEludG8gdGhpczogQWRkKHZhbHVlLCBjb25zdGFudDEgKyBjb25zdGFudDIpCisgICAgICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVlLT5jaGlsZCgxKS0+YWRkQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdTdW0p
OworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5j
aGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGls
ZCgxKSA9IG5ld1N1bTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdl
ciBBZGQodmFsdWUsIE5lZyhvdGhlclZhbHVlKSkKICAgICAgICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IFN1Yih2YWx1ZSwgb3RoZXJWYWx1ZSkKICAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMSktPm9wY29kZSgpID09IE5lZykgewpAQCAtNjczLDcgKzY0MCwxMiBAQAogICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBNdWw6Ci0gICAgICAgICAgICBoYW5kbGVDb21t
dXRhdGl2aXR5KCk7CisgICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaGFuZGxlQ29tbXV0YXRpdml0eUFzc29jaWF0aXZpdHkoKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLy8gVHVybiB0aGlzOiBNdWwoY29uc3RhbnQxLCBjb25zdGFudDIpCiAgICAgICAgICAgICAv
LyBJbnRvIHRoaXM6IGNvbnN0YW50MSAqIGNvbnN0YW50MgpAQCAtNzExLDcgKzY4MywxOSBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
KworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBNdWwoQWRkKHZhbHVlLCBj
b25zdGFudDEpLCBjb25zdGFudDIpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBNdWwo
dmFsdWUsIGNvbnN0YW50MSAqIGNvbnN0YW50MikKKyAgICAgICAgICAgICAgICBpZiAobV92YWx1
ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IE11bCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
VmFsdWUqIG5ld1Byb2QgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+bXVsQ29uc3RhbnQobV9wcm9jLCBt
X3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdQcm9kKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDApOworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdQcm9k
OworICAgICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IE11bCh2YWx1ZSwgY29uc3RhbnQpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwo
dmFsdWUsIGxvZzIoY29uc3RhbnQpKQogICAgICAgICAgICAgICAgIGlmIChoYXNPbmVCaXRTZXQo
ZmFjdG9yKSkgewpAQCAtOTI1LDcgKzkwOSw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICBjYXNlIEJpdEFuZDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKyAg
ICAgICAgICAgIGlmIChoYW5kbGVDb21tdXRhdGl2aXR5QXNzb2NpYXRpdml0eSgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChjb25z
dGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3RhbnQxICYg
Y29uc3RhbnQyCkBAIC05MzQsOSArOTE5LDkgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRBbmQoQml0QW5kKHZh
bHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJp
dEFuZCh2YWx1ZSwgY29uc3RhbnQxICYgY29uc3RhbnQyKS4KICAgICAgICAgICAgIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQml0QW5kKSB7CisgICAgICAgICAgICAgICAgLy8g
VHVybiB0aGlzOiBCaXRBbmQoQml0QW5kKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisg
ICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRBbmQodmFsdWUsIGNvbnN0YW50MSAmIGNv
bnN0YW50MikuCiAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+
Y2hpbGQoMSktPmJpdEFuZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxk
KDEpKTsKICAgICAgICAgICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsKICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3Q29uc3RhbnQpOwpA
QCAtOTQ0LDYgKzkyOSwxMiBAQAogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgx
KSA9IG5ld0NvbnN0YW50OwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChC
aXRBbmQodmFsdWUsIHgpLCB4KQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5k
KHZhbHVlLCB4KS4KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+
Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVw
bGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBCaXRBbmQodmFsdWVYLCB2YWx1ZVgpCkBAIC0xMDI3LDcgKzEwMTgsOCBA
QAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBCaXRPcjoKLSAgICAgICAgICAg
IGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKyAgICAgICAgICAgIGlmIChoYW5kbGVDb21tdXRhdGl2
aXR5QXNzb2NpYXRpdml0eSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICAvLyBUdXJuIHRoaXM6IEJpdE9yKGNvbnN0YW50MSwgY29uc3RhbnQyKQogICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBjb25zdGFudDEgfCBjb25zdGFudDIKQEAgLTEwMzYsOSArMTAyOCw5IEBA
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8v
IFR1cm4gdGhpczogQml0T3IoQml0T3IodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKLSAg
ICAgICAgICAgIC8vIEludG8gdGhpczogQml0T3IodmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50
MikuCiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdE9y
KSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRPcihCaXRPcih2YWx1ZSwgY29u
c3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0T3Io
dmFsdWUsIGNvbnN0YW50MSAmIGNvbnN0YW50MikuCiAgICAgICAgICAgICAgICAgVmFsdWUqIG5l
d0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPmJpdE9yQ29uc3RhbnQobV9wcm9jLCBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgICAgIGlmIChuZXdDb25zdGFu
dCkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2lu
ZGV4LCBuZXdDb25zdGFudCk7CkBAIC0xMDQ2LDYgKzEwMzgsMTIgQEAKICAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKICAgICAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBCaXRPcihCaXRPcih2YWx1ZSwgeCksIHgpCisgICAgICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBCaXRPcih2YWx1ZSwgeCkuCisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IodmFsdWVYLCB2YWx1ZVgpCkBA
IC0xMDczLDcgKzEwNzEsOCBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBC
aXRYb3I6Ci0gICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisgICAgICAgICAgICBp
ZiAoaGFuZGxlQ29tbXV0YXRpdml0eUFzc29jaWF0aXZpdHkoKSkKKyAgICAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29uc3RhbnQxLCBjb25z
dGFudDIpCiAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0YW50MSBeIGNvbnN0YW50MgpA
QCAtMTA4Miw5ICsxMDgxLDkgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoQml0WG9yKHZhbHVlLCBjb25z
dGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdFhvcih2YWx1
ZSwgY29uc3RhbnQxIF4gY29uc3RhbnQyKS4KICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKS0+b3Bjb2RlKCkgPT0gQml0WG9yKSB7CisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlz
OiBCaXRYb3IoQml0WG9yKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCisgICAgICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3IodmFsdWUsIGNvbnN0YW50MSBeIGNvbnN0YW50Miku
CiAgICAgICAgICAgICAgICAgVmFsdWUqIG5ld0NvbnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSkt
PmJpdFhvckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKTsKICAg
ICAgICAgICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3Q29uc3RhbnQpOwpAQCAtMTA5Miw2
ICsxMDkxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3
Q29uc3RhbnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKEJpdFhvcihv
dGhlclZhbHVlLCB2YWx1ZVgpLCB2YWx1ZVgpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBvdGhlclZhbHVlLgorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5jaGlsZCgxKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXBsYWNlV2l0aElkZW50aXR5KG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoY29tcGFyZSwgMSkKQEAgLTIxNzAsMjkg
KzIxNzUsMzAgQEAKICAgICAgICAgcHJlZGVjZXNzb3ItPnVwZGF0ZVByZWRlY2Vzc29yc0FmdGVy
KCk7CiAgICAgfQogCisgICAgLy8gQXRvbWljU3Ryb25nQ0FTIHNob3VsZCBhbHdheXMgZ28gZmly
c3QsIGl0IGlzIGV4cGVjdGVkIGJ5IHNvbWUgcGF0dGVybiBpbiBCM0xvd2VyVG9BaXIKKyAgICAv
LyBDb25zdGFudHMgc2hvdWxkIGFsd2F5cyBnbyBsYXN0LCB0aGlzIGxldCB1cyBlbGltaW5hdGUg
dGhlbSBpbiB2YXJpb3VzIHBhdHRlcm5zIGluIHRoaXMgZmlsZQorICAgIC8vIEZpbmFsbHkgd2Ug
c29ydCBldmVyeXRoaW5nIGVsc2UgYnkgaW5kZXggdG8gY2Fub25pY2FsaXplIGV4cHJlc3Npb25z
LCBhbmQgbWFrZSB0aGluZ3MgZWFzaWVyIGZvciBDU0UuCisgICAgLy8gICBXZSB1c2UgdGhlIGlu
ZGV4IGFuZCBub3QgdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNsaWdodGx5IGRl
dGVybWluaXN0aWMuCisgICAgc3RhdGljIGJvb2wgc2hvdWxkR29CZWZvcmUoVmFsdWUqIHgsIFZh
bHVlKiB5KSB7CisgICAgICAgIGlmICgoeC0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTICYm
IHktPm9wY29kZSgpICE9IEF0b21pY1N0cm9uZ0NBUykKKyAgICAgICAgICAgIHx8ICgheC0+aXND
b25zdGFudCgpICYmIHktPmlzQ29uc3RhbnQoKSkpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKHgtPm9wY29kZSgpICE9IEF0b21p
Y1N0cm9uZ0NBUyAmJiB5LT5vcGNvZGUoKSA9PSBBdG9taWNTdHJvbmdDQVMpCisgICAgICAgICAg
ICB8fCAoeC0+aXNDb25zdGFudCgpICYmICF5LT5pc0NvbnN0YW50KCkpKSB7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB4LT5p
bmRleCgpIDwgeS0+aW5kZXgoKTsKKyAgICB9OworCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkU3dh
cEJpbmFyeU9wZXJhbmRzKFZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIC8vIE5vdGUgdGhh
dCB3ZSBoYXZlIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMgdGhhdCB0YWtlIG1vcmUgdGhhbiB0d28g
Y2hpbGRyZW4uIFRob3NlIG9wZXJhdGlvbnMgbWF5CiAgICAgICAgIC8vIGNvbW11dGUgdGhlaXIg
Zmlyc3QgdHdvIGNoaWxkcmVuIHdoaWxlIGxlYXZpbmcgdGhlIHJlc3QgdW5hZmZlY3RlZC4KICAg
ICAgICAgQVNTRVJUKHZhbHVlLT5udW1DaGlsZHJlbigpID49IDIpOwotCi0gICAgICAgIC8vIExl
YXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBpcyBhIGNvbnN0YW50LgotICAgICAgICBp
ZiAodmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkKLSAgICAgICAgICAgIHx8IHZhbHVlLT5j
aGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25nQ0FTKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPm9w
Y29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBUaGlzIGlzIGFuIGltcG9ydGFudCBjYW5vbmlj
YWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGluc3RlYWQgb2YKLSAgICAgICAgLy8gdGhlIGFk
ZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNsaWdodGx5IGRldGVybWluaXN0aWMuCi0gICAg
ICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkgPiB2YWx1ZS0+Y2hpbGQoMSktPmluZGV4
KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBzaG91bGRHb0JlZm9yZSh2YWx1ZS0+Y2hpbGQoMSksIHZhbHVlLT5jaGls
ZCgwKSk7CiAgICAgfQogCiAgICAgLy8gVHVybiB0aGlzOiBBZGQoY29uc3RhbnQsIHZhbHVlKQpA
QCAtMjIxMCw2ICsyMjE2LDcwIEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgbV92YWx1ZSBoYXMgYmVlbiByZXBsYWNlZCBieSBhbiBpZGVudGl0eS4KKyAgICBi
b29sIGhhbmRsZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2aXR5KCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3ZhbHVlLT5udW1DaGlsZHJlbigpID09IDIpOworCisgICAgICAgIGlmIChtX3Byb2Mu
b3B0TGV2ZWwoKSA8IDIpIHsKKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIE9wY29kZSBvcCA9
IG1fdmFsdWUtPm9wY29kZSgpOworICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29k
ZSgpICE9IG9wICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5vcGNvZGUoKSAhPSBvcCkgeworICAgICAg
ICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gU2luY2UgY2hpbGQoMCkgaXMgYWxyZWFkeSBjYW5vbmlj
YWxpemVkLCBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlLCB0aGVyZSBpcyBub3RoaW5nIGZvciB1
cyB0byBkby4KKyAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBvcAor
ICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpICE9IG9wCisgICAgICAg
ICAgICAmJiAhc2hvdWxkR29CZWZvcmUobV92YWx1ZS0+Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxk
KDApLT5jaGlsZCgxKSkpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSB3b3JrIHRvIGRvLCB3ZSBwcm9jZWVkIGlu
IHR3byBzdGVwczoKKyAgICAgICAgLy8gLSBmaXJzdCB3ZSBnYXRoZXIgYWxsIG9mIHRoZSBsZWF2
ZXMgb2YgdGhlIGV4cHJlc3Npb24gdHJlZSByb290ZWQgYXQgbV92YWx1ZXMgKFZhbHVlcyB0aGF0
IGhhdmUgYSBkaWZmZXJlbnQgb3ApCisgICAgICAgIC8vIC0gdGhlbiB3ZSBzb3J0IHRoZW0sIGFu
ZCBnZW5lcmF0ZSB0aGUgY2Fub25pY2FsIGV4cHJlc3Npb24gdHJlZS4KKworICAgICAgICAvLyBX
ZSBtdXN0IHRyYWNrIHRoZSBhbHJlYWR5IHZpc2l0ZWQgaW5uZXIgbm9kZXMsIHRvIGFib3J0IGlm
IG9uZSBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uCisgICAgICAgIC8vIE90aGVyd2lzZSB3ZSB3aWxs
IHRyeSB0byBleHBhbmQgdGhlIHRyZWUsIHdoaWNoIHdvdWxkIHRha2UgZXhwb25lbnRpYWwgdGlt
ZSBhbmQgc3BhY2UgZm9yIHRoZSBmb2xsb3dpbmcgY29kZSAob3IgYW55IG90aGVyIGV4YW1wbGUg
d2l0aCBsb3RzIG9mIHNoYXJpbmcpOgorICAgICAgICAvLyAgQDIgPSBBZGQoQDEsIEAwKTsKKyAg
ICAgICAgLy8gIEAzID0gQWRkKEAyLCBAMSk7CisgICAgICAgIC8vICAuLi4KKyAgICAgICAgLy8g
IEBuKzIgPSBBZGQoQG4rISwgQG4pOworICAgICAgICAvLyBUaGlzIHBhdHRlcm4gYXBwZWFycyBp
biB0ZXN0QjM6OnRlc3RTcGlsbEdQLgorICAgICAgICAvLyBPbmUgZXhjZXB0aW9uIGlzIEJpdEFu
ZCBhbmQgQml0T3I6IHdlIGNhbiBqdXN0IGlnbm9yZSByZXBlYXRlZCBjb3BpZXMgb2Ygb3BlcmFu
ZHMgYXMgdGhleSBhcmUgaWRlbXBvdGVudC4KKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHRyZWVJ
bm5lck5vZGVzOworICAgICAgICBWZWN0b3I8VmFsdWUqLCA0PiBsZWF2ZXM7CisgICAgICAgIFZl
Y3RvcjxWYWx1ZSosIDE+IHdvcmtsaXN0ID0geyBtX3ZhbHVlIH07CisgICAgICAgIHdoaWxlICgh
d29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBWYWx1ZSogdmFsID0gd29ya2xpc3Qu
dGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlmICh2YWwtPm9wY29kZSgpID09IG9wKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHRyZWVJbm5lck5vZGVzLmNvbnRhaW5zKHZhbCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG9wID09IEJpdE9yIHx8IG9wID09IEJpdEFuZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHRyZWVJbm5lck5vZGVzLmFkZCh2
YWwpOworICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFwcGVuZCh2YWwtPmNoaWxkKDApKTsKKyAg
ICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5jaGlsZCgxKSk7CisgICAgICAgICAg
ICB9IGVsc2UgeyAvLyB2YWwtPm9wY29kZSAhPSBvcAorICAgICAgICAgICAgICAgIGxlYXZlcy5h
cHBlbmQodmFsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6c29y
dChsZWF2ZXMuYmVnaW4oKSwgbGVhdmVzLmVuZCgpLCBbXShWYWx1ZSogeCwgVmFsdWUqIHkpe3Jl
dHVybiBzaG91bGRHb0JlZm9yZSh4LCB5KTt9KTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBs
YXN0T3AgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KG1faW5kZXgsIG9wLCBtX3ZhbHVl
LT5vcmlnaW4oKSwgbGVhdmVzWzBdLCBsZWF2ZXNbMV0pOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMjsgaSA8IGxlYXZlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgbGFzdE9wID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBvcCwgbV92YWx1ZS0+b3JpZ2luKCks
IGxhc3RPcCwgbGVhdmVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICByZXBsYWNlV2l0aElkZW50
aXR5KGxhc3RPcCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIHN0cnVjdCBD
YW5vbmljYWxpemVkQ29tcGFyaXNvbiB7CiAgICAgICAgIE9wY29kZSBvcGNvZGU7CiAgICAgICAg
IFZhbHVlKiBvcGVyYW5kc1syXTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>361846</attachid>
            <date>2019-02-12 14:41:34 -0800</date>
            <delta_ts>2019-03-29 11:43:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>B3ReduceStrengthAssociativity</filename>
            <type>text/plain</type>
            <size>18256</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQxMzE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDE5LTAyLTEyICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aCBzaG91bGQgdXNlIGFzc29jaWF0aXZpdHkgdG8gY2Fub25p
Y2FsaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTQwODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHJlcGxhY2VzIHRoZSBhZC1ob2MgYXBwcm9hY2ggcHJldmlvdXNseSB1c2VkIGZvciBBZGQg
YnkgYSBnZW5lcmFsIGhhbmRsZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2aXR5KCkgdXNlZCBieSBB
ZGQvTXVsL0JpdE9yL0JpdEFuZC9CaXRYb3IuCisgICAgICAgIElmIHRoZSB2YWx1ZSBpcyB0aGUg
cm9vdCBvZiBhbiBpbnRlcmVzdGluZyBleHByZXNzaW9uIHRyZWUgKGkuZS4gc29tZSBvZiBpdHMg
Y2hpbGRyZW4gaGF2ZSB0aGUgc2FtZSBvcGNvZGUpLCB3ZSBnYXRoZXIgdGhlIGxlYXZlcyBvZiB0
aGUgZXhwcmVzc2lvbiB0cmVlLCBzb3J0IHRoZW0sIGFuZCByZWJ1aWxkIG1fdmFsdWUgYXMgYSBw
cm9wZXJseSBjYW5vbmljYWxpemVkIGV4cHJlc3Npb24gdHJlZS4KKyAgICAgICAgVGhlcmUgYXJl
IGEgZmV3IG1pbm9yIHN1YnRsZXRpZXM6CisgICAgICAgIC0gV2Ugb25seSBydW4gZm9yIEFkZC9N
dWwgb24gaW50ZWdlcnMsIGFzIHRoZXkgYXJlIG5vdCBhc3NvY2lhdGl2ZSBvbiBmbG9hdGluZyBw
b2ludCB2YWx1ZXMgaW4gZ2VuZXJhbC4KKyAgICAgICAgLSBJZiB3ZSBzZWUgdGhlIHNhbWUgbm9k
ZSB0d2ljZSBpbnNpZGUgdGhlIGV4cHJlc3Npb24gdHJlZSBmb3IgQWRkL011bCwgd2UgbXVzdCBi
YWlsIG91dC4gT3RoZXJ3aXNlIHdlIG1heSBiZSB0cnlpbmcgdG8gZnVsbHkgZXhwYW5kIGFuIGV4
cG9uZW50aWFsbHkgbGFyZ2UgZXhwcmVzc2lvbiB0aGF0IHdhcyBjb21wcmVzc2VkIGJ5IHNoYXJp
bmcuCisgICAgICAgICAgICAtIEhvd2V2ZXIsIGlmIHdlIHNlZSB0aGUgc2FtZSBub2RlIHR3aWNl
IGZvciBCaXRBbmQvQml0T3Igd2UgY2FuIGp1c3QgaWdub3JlIGl0LgorICAgICAgICAgICAgLSBX
ZSBjb3VsZCBpbiB0aGVvcnkgdHJ5IHRvIGRvIHNvbWV0aGluZyBzbWFydCBmb3IgQml0WG9yLCBi
dXQgY3VycmVudGx5IHdlIGp1c3QgYmFpbCBvdXQgYXMgZm9yIEFkZC9NdWwKKyAgICAgICAgLSBX
ZSBtdXN0IHRlYWNoIGVhY2ggb3BlcmF0aW9uIHRvIGRlYWwgd2l0aCBPcChPcChmb28sIGJhciks
IGJheikgYXMgaWYgaXQgd2VyZSBPcChmb28sIE9wKGJhciwgYmF6KSkgZm9yIGEgZmV3IGNhc2Vz
LgorCisgICAgICAgIEkgdXNlZCBhIEhhc2hTZXQgYW5kIG5vdCBhbiBJbmRleFNldCBmb3IgdGhl
IGlubmVyIG5vZGVzIHNlZW4sIGFzIEkgZXhwZWN0IHRoYXQgc2V0IHRvIGJlIHVzdWFsbHkgdGlu
eSwgYW5kIGFuIEluZGV4U2V0J3Mgc2l6ZSBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2YgaW5kaWNl
cyBpbiB1c2UgYnkgdGhlIHByb2NlZHVyZS4KKworICAgICAgICBUaGlzIHBhdGNoIG1heSBpbiB0
aGVvcnkgY2F1c2Ugc29tZSBjb2RlIGR1cGxpY2F0aW9uIGJ5IHJlZHVjaW5nIHNoYXJpbmcgYSBi
aXQsIGJ1dCBub3RoaW5nIG1vcmUgdGhhbiB3aGF0IHdhcyBhbHJlYWR5IHRydWUgZm9yIEFkZC4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIHRoZXJlIGFyZSBhbHJlYWR5IHF1aXRlIGEgZmV3
IHRlc3RzIGZvciBhc3NvY2lhdGl2aXR5IGluIHRlc3RiMy5jcHAKKyAgICAgICAgICAoZS5nLiB0
ZXN0U3BpbGxHUCwgdGVzdEJpdFhvckltbUJpdFhvckFyZ0ltbSwgZXRjLi4pCisKKyAgICAgICAg
KiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKwogMjAxOS0wMi0xMiAgTWljaGFlbCBDYXRhbnph
cm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgZml4IC1X
aW1wbGljaXQtZmFsbHRocm91Z2ggd2FybmluZyBhZnRlciByMjQxMTQwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAyNDEy
NjcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5Nyw1NyArNDk3LDEyIEBACiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFkZDoKLSAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0
aXZpdHkoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBBZGQgJiYgbV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikK
LSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEFkZCh2YWx1ZSwgY29uc3RhbnQxICsgY29u
c3RhbnQyKQotICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVlLT5jaGlsZCgx
KS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwotICAg
ICAgICAgICAgICAgIGlmIChuZXdTdW0pIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsKLSAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3U3VtOwotICAgICAgICAgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdl
cigpKSB7CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2
aXR5KCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEFkZChBZGQodmFs
dWUsIGNvbnN0YW50KSwgb3RoZXJWYWx1ZSkKLSAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6
IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKLSAgICAgICAgICAgICAgICBp
ZiAoIW1fdmFsdWUtPmNoaWxkKDEpLT5oYXNJbnQoKSAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hp
bGQoMSktPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1f
dmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGNv
bnN0YW50ID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpOwotICAgICAgICAgICAgICAgICAg
ICBWYWx1ZSogb3RoZXJWYWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDEpOwotICAgICAgICAgICAgICAg
ICAgICAvLyBUaGlzIGNvdWxkIGNyZWF0ZSBkdXBsaWNhdGUgY29kZSBpZiBBZGQodmFsdWUsIGNv
bnN0YW50KSBpcyB1c2VkIGVsc2V3aGVyZS4KLSAgICAgICAgICAgICAgICAgICAgLy8gSG93ZXZl
ciwgd2UgYWxyZWFkeSBtb2RlbCBhZGRpbmcgYSBjb25zdGFudCBhcyBpZiBpdCB3YXMgZnJlZSBp
biBvdGhlciBwbGFjZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gbGV0J3MganVzdCByb2xs
IHdpdGggaXQuIFRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBtZWFuIGhhdmluZyB0byBkbyBnb29kIHVz
ZQotICAgICAgICAgICAgICAgICAgICAvLyBjb3VudHMsIHdoaWNoIHJlZHVjZVN0cmVuZ3RoKCkg
Y3VycmVudGx5IGRvZXNuJ3QgaGF2ZS4KLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hp
bGQoMCkgPQotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1fdmFsdWUt
Pm9yaWdpbigpLCB2YWx1ZSwgb3RoZXJWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdmFs
dWUtPmNoaWxkKDEpID0gY29uc3RhbnQ7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBBZGQo
b3RoZXJWYWx1ZSwgQWRkKHZhbHVlLCBjb25zdGFudCkpCi0gICAgICAgICAgICAvLyBJbnRvIHRo
aXM6IEFkZChBZGQodmFsdWUsIG90aGVyVmFsdWUpLCBjb25zdGFudCkKLSAgICAgICAgICAgIGlm
IChtX3ZhbHVlLT5pc0ludGVnZXIoKQotICAgICAgICAgICAgICAgICYmICFtX3ZhbHVlLT5jaGls
ZCgwKS0+aGFzSW50KCkKLSAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgxKS0+b3Bj
b2RlKCkgPT0gQWRkCi0gICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSktPmNoaWxk
KDEpLT5oYXNJbnQoKSkgewotICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUt
PmNoaWxkKDEpLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICBWYWx1ZSogY29uc3RhbnQgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+Y2hpbGQoMSk7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIG90aGVy
VmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIGNyZWF0
ZXMgYSBkdXBsaWNhdGUgYWRkLiBUaGF0J3MgZGFuZ2Vyb3VzIGJ1dCBwcm9iYWJseSBmaW5lLCBz
ZWUgYWJvdmUuCi0gICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPQotICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KAotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIG90aGVyVmFs
dWUpOwotICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gY29uc3RhbnQ7Ci0gICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAorICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IEFkZChjb25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29u
c3RhbnQxICsgY29uc3RhbnQyCiAgICAgICAgICAgICBpZiAoVmFsdWUqIGNvbnN0YW50QWRkID0g
bV92YWx1ZS0+Y2hpbGQoMCktPmFkZENvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMSkp
KSB7CkBAIC01NTUsMTcgKzUxMCw2IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogSW50ZWdlciBBZGQodmFsdWUsIHZh
bHVlKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBTaGwodmFsdWUsIDEpCi0gICAgICAgICAg
ICAvLyBUaGlzIGlzIGEgdXNlZnVsIGNhbm9uaWNhbGl6YXRpb24uIEl0J3Mgbm90IG1lYW50IHRv
IGJlIGEgc3RyZW5ndGggcmVkdWN0aW9uLgotICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50
ZWdlcigpICYmIG1fdmFsdWUtPmNoaWxkKDApID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7Ci0gICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgbV9w
cm9jLmFkZDxWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICBTaGwsIG1fdmFsdWUtPm9y
aWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KG1faW5kZXgsIG1fdmFsdWUtPm9yaWdpbigp
LCAxKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCiAgICAgICAg
ICAgICAvLyBUdXJuIHRoaXM6IEFkZCh2YWx1ZSwgemVybykKICAgICAgICAgICAgIC8vIEludG8g
YW4gSWRlbnRpdHkuCiAgICAgICAgICAgICAvLwpAQCAtNTgwLDYgKzUyNCwyOCBAQAogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+aXNJbnRlZ2VyKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIgQWRkKHZhbHVlLCB2YWx1ZSkKKyAgICAg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgMSkKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIGEgdXNlZnVsIGNhbm9uaWNhbGl6YXRpb24uIEl0J3Mgbm90IG1lYW50IHRvIGJl
IGEgc3RyZW5ndGggcmVkdWN0aW9uLgorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGls
ZCgwKSA9PSBtX3ZhbHVlLT5jaGlsZCgxKSkgeworICAgICAgICAgICAgICAgICAgICByZXBsYWNl
V2l0aE5ld1ZhbHVlKG1fcHJvYy5hZGQ8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAg
U2hsLCBtX3ZhbHVlLT5vcmlnaW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihtX2luZGV4LCBt
X3ZhbHVlLT5vcmlnaW4oKSwgMSkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBJbnRlZ2VyIEFk
ZChBZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IEFkZCh2YWx1ZSwgY29uc3RhbnQxICsgY29uc3RhbnQyKQorICAgICAgICAgICAg
ICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQWRkKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChWYWx1ZSogbmV3U3VtID0gbV92YWx1ZS0+Y2hpbGQoMSktPmFkZENvbnN0
YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQo
MSkgPSBuZXdTdW07CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEludGVnZXIg
QWRkKHZhbHVlLCBOZWcob3RoZXJWYWx1ZSkpCiAgICAgICAgICAgICAgICAgLy8gSW50byB0aGlz
OiBTdWIodmFsdWUsIG90aGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDEpLT5vcGNvZGUoKSA9PSBOZWcpIHsKQEAgLTY3Myw3ICs2MzksMTEgQEAKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTXVsOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0
YXRpdml0eSgpOworICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmlzSW50ZWdlcigpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGhhbmRsZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2aXR5KCkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogCiAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE11
bChjb25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3Rh
bnQxICogY29uc3RhbnQyCkBAIC03MTEsNyArNjgxLDE5IEBACiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAg
Ly8gVHVybiB0aGlzOiBJbnRlZ2VyIE11bChBZGQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50
MikKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE11bCh2YWx1ZSwgY29uc3RhbnQxICog
Y29uc3RhbnQyKQorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2Rl
KCkgPT0gTXVsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogbmV3UHJvZCA9IG1f
dmFsdWUtPmNoaWxkKDEpLT5tdWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5j
aGlsZCgxKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dFZhbHVlKG1faW5kZXgsIG5ld1Byb2QpOworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5ld1Byb2Q7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTXVsKHZhbHVlLCBjb25zdGFu
dCkKICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IFNobCh2YWx1ZSwgbG9nMihjb25zdGFu
dCkpCiAgICAgICAgICAgICAgICAgaWYgKGhhc09uZUJpdFNldChmYWN0b3IpKSB7CkBAIC05MjUs
NyArOTA3LDggQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQml0QW5kOgot
ICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworICAgICAgICAgICAgaWYgKGhhbmRs
ZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2aXR5KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0QW5kKGNvbnN0YW50MSwgY29uc3RhbnQyKQog
ICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgJiBjb25zdGFudDIKQEAgLTkzNCw5
ICs5MTcsOSBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChCaXRBbmQodmFsdWUsIGNvbnN0YW50MSksIGNv
bnN0YW50MikKLSAgICAgICAgICAgIC8vIEludG8gdGhpczogQml0QW5kKHZhbHVlLCBjb25zdGFu
dDEgJiBjb25zdGFudDIpLgogICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNv
ZGUoKSA9PSBCaXRBbmQpIHsKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChC
aXRBbmQodmFsdWUsIGNvbnN0YW50MSksIGNvbnN0YW50MikKKyAgICAgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgY29uc3RhbnQxICYgY29uc3RhbnQyKS4KICAgICAgICAg
ICAgICAgICBWYWx1ZSogbmV3Q29uc3RhbnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+Yml0QW5kQ29u
c3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAg
ICAgIGlmIChuZXdDb25zdGFudCkgewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdDb25zdGFudCk7CkBAIC05NDMsNiArOTI2LDExIEBA
CiAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQo
MCktPmNoaWxkKDApOwogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5l
d0NvbnN0YW50OwogICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEJpdEFuZChCaXRBbmQodmFsdWUsIHgpLCB4KQor
ICAgICAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdEFuZCh2YWx1ZSwgeCkuCisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkgPT0gbV92
YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0
eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTAyNyw3ICsxMDE1LDggQEAKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQml0T3I6Ci0gICAgICAgICAgICBoYW5kbGVD
b21tdXRhdGl2aXR5KCk7CisgICAgICAgICAgICBpZiAoaGFuZGxlQ29tbXV0YXRpdml0eUFzc29j
aWF0aXZpdHkoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLy8gVHVy
biB0aGlzOiBCaXRPcihjb25zdGFudDEsIGNvbnN0YW50MikKICAgICAgICAgICAgIC8vIEludG8g
dGhpczogY29uc3RhbnQxIHwgY29uc3RhbnQyCkBAIC0xMDM2LDkgKzEwMjUsOSBAQAogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEJpdE9yKEJpdE9yKHZhbHVlLCBjb25zdGFudDEpLCBjb25zdGFudDIpCi0gICAgICAgICAg
ICAvLyBJbnRvIHRoaXM6IEJpdE9yKHZhbHVlLCBjb25zdGFudDEgJiBjb25zdGFudDIpLgogICAg
ICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBCaXRPcikgeworICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0T3IoQml0T3IodmFsdWUsIGNvbnN0YW50MSks
IGNvbnN0YW50MikKKyAgICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEJpdE9yKHZhbHVlLCBj
b25zdGFudDEgJiBjb25zdGFudDIpLgogICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdDb25zdGFu
dCA9IG1fdmFsdWUtPmNoaWxkKDEpLT5iaXRPckNvbnN0YW50KG1fcHJvYywgbV92YWx1ZS0+Y2hp
bGQoMCktPmNoaWxkKDEpKTsKICAgICAgICAgICAgICAgICBpZiAobmV3Q29uc3RhbnQpIHsKICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3
Q29uc3RhbnQpOwpAQCAtMTA0NSw2ICsxMDM0LDExIEBACiAgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWUtPmNoaWxkKDApID0gbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApOwogICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgxKSA9IG5ld0NvbnN0YW50OwogICAgICAgICAgICAg
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIHRo
aXM6IEJpdE9yKEJpdE9yKHZhbHVlLCB4KSwgeCkKKyAgICAgICAgICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBCaXRPcih2YWx1ZSwgeCkuCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkgPT0gbV92YWx1ZS0+Y2hpbGQoMSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
IApAQCAtMTA3Myw3ICsxMDY3LDggQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgQml0WG9yOgotICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworICAgICAgICAg
ICAgaWYgKGhhbmRsZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2aXR5KCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CiAKICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKGNvbnN0YW50MSwg
Y29uc3RhbnQyKQogICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdGFudDEgXiBjb25zdGFu
dDIKQEAgLTEwODIsOSArMTA3Nyw5IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIC8vIFR1cm4gdGhpczogQml0WG9yKEJpdFhvcih2YWx1ZSwg
Y29uc3RhbnQxKSwgY29uc3RhbnQyKQotICAgICAgICAgICAgLy8gSW50byB0aGlzOiBCaXRYb3Io
dmFsdWUsIGNvbnN0YW50MSBeIGNvbnN0YW50MikuCiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPm9wY29kZSgpID09IEJpdFhvcikgeworICAgICAgICAgICAgICAgIC8vIFR1cm4g
dGhpczogQml0WG9yKEJpdFhvcih2YWx1ZSwgY29uc3RhbnQxKSwgY29uc3RhbnQyKQorICAgICAg
ICAgICAgICAgIC8vIEludG8gdGhpczogQml0WG9yKHZhbHVlLCBjb25zdGFudDEgXiBjb25zdGFu
dDIpLgogICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdDb25zdGFudCA9IG1fdmFsdWUtPmNoaWxk
KDEpLT5iaXRYb3JDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7
CiAgICAgICAgICAgICAgICAgaWYgKG5ld0NvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0NvbnN0YW50KTsKQEAgLTEw
OTEsNiArMTA4NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9
IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZS0+Y2hpbGQoMSkgPSBuZXdDb25zdGFudDsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCaXRYb3IoQml0WG9y
KG90aGVyVmFsdWUsIHZhbHVlWCksIHZhbHVlWCkKKyAgICAgICAgICAgICAgICAgICAgLy8gSW50
byB0aGlzOiBvdGhlclZhbHVlLgorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV92YWx1ZS0+
Y2hpbGQoMCktPmNoaWxkKDEpID09IG1fdmFsdWUtPmNoaWxkKDEpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJlcGxhY2VXaXRoSWRlbnRpdHkobV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogCkBAIC0yMTcwLDI5ICsyMTcwLDMxIEBACiAgICAgICAgIHByZWRlY2Vzc29yLT51cGRh
dGVQcmVkZWNlc3NvcnNBZnRlcigpOwogICAgIH0KIAorICAgIC8vIEF0b21pY1N0cm9uZ0NBUyBz
aG91bGQgYWx3YXlzIGdvIGZpcnN0LCBpdCBpcyBleHBlY3RlZCBieSBzb21lIHBhdHRlcm4gaW4g
QjNMb3dlclRvQWlyCisgICAgLy8gQ29uc3RhbnRzIHNob3VsZCBhbHdheXMgZ28gbGFzdCwgdGhp
cyBsZXQgdXMgZWxpbWluYXRlIHRoZW0gaW4gdmFyaW91cyBwYXR0ZXJucyBpbiB0aGlzIGZpbGUK
KyAgICAvLyBGaW5hbGx5IHdlIHNvcnQgZXZlcnl0aGluZyBlbHNlIGJ5IGluZGV4IHRvIGNhbm9u
aWNhbGl6ZSBleHByZXNzaW9ucywgYW5kIG1ha2UgdGhpbmdzIGVhc2llciBmb3IgQ1NFLgorICAg
IC8vICAgV2UgdXNlIHRoZSBpbmRleCBhbmQgbm90IHRoZSBhZGRyZXNzIHRvIG1ha2UgdGhpcyBh
dCBsZWFzdCBzbGlnaHRseSBkZXRlcm1pbmlzdGljLgorICAgIHN0YXRpYyBib29sIHNob3VsZEdv
QmVmb3JlKFZhbHVlKiB4LCBWYWx1ZSogeSkKKyAgICB7CisgICAgICAgIGlmICgoeC0+b3Bjb2Rl
KCkgPT0gQXRvbWljU3Ryb25nQ0FTICYmIHktPm9wY29kZSgpICE9IEF0b21pY1N0cm9uZ0NBUykK
KyAgICAgICAgICAgIHx8ICgheC0+aXNDb25zdGFudCgpICYmIHktPmlzQ29uc3RhbnQoKSkpIHsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoKHgtPm9wY29kZSgpICE9IEF0b21pY1N0cm9uZ0NBUyAmJiB5LT5vcGNvZGUoKSA9PSBBdG9t
aWNTdHJvbmdDQVMpCisgICAgICAgICAgICB8fCAoeC0+aXNDb25zdGFudCgpICYmICF5LT5pc0Nv
bnN0YW50KCkpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB4LT5pbmRleCgpIDwgeS0+aW5kZXgoKTsKKyAgICB9OworCiAg
ICAgc3RhdGljIGJvb2wgc2hvdWxkU3dhcEJpbmFyeU9wZXJhbmRzKFZhbHVlKiB2YWx1ZSkKICAg
ICB7CiAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIGNvbW11dGF0aXZlIG9wZXJhdGlvbnMg
dGhhdCB0YWtlIG1vcmUgdGhhbiB0d28gY2hpbGRyZW4uIFRob3NlIG9wZXJhdGlvbnMgbWF5CiAg
ICAgICAgIC8vIGNvbW11dGUgdGhlaXIgZmlyc3QgdHdvIGNoaWxkcmVuIHdoaWxlIGxlYXZpbmcg
dGhlIHJlc3QgdW5hZmZlY3RlZC4KICAgICAgICAgQVNTRVJUKHZhbHVlLT5udW1DaGlsZHJlbigp
ID49IDIpOwotCi0gICAgICAgIC8vIExlYXZlIGl0IGFsb25lIGlmIHRoZSByaWdodCBjaGlsZCBp
cyBhIGNvbnN0YW50LgotICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDEpLT5pc0NvbnN0YW50KCkK
LSAgICAgICAgICAgIHx8IHZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gQXRvbWljU3Ryb25n
Q0FTKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hp
bGQoMCktPmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAg
IGlmICh2YWx1ZS0+Y2hpbGQoMSktPm9wY29kZSgpID09IEF0b21pY1N0cm9uZ0NBUykKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIC8vIFNvcnQgdGhlIG9wZXJhbmRzLiBUaGlz
IGlzIGFuIGltcG9ydGFudCBjYW5vbmljYWxpemF0aW9uLiBXZSB1c2UgdGhlIGluZGV4IGluc3Rl
YWQgb2YKLSAgICAgICAgLy8gdGhlIGFkZHJlc3MgdG8gbWFrZSB0aGlzIGF0IGxlYXN0IHNsaWdo
dGx5IGRldGVybWluaXN0aWMuCi0gICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCktPmluZGV4KCkg
PiB2YWx1ZS0+Y2hpbGQoMSktPmluZGV4KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBzaG91bGRHb0JlZm9yZSh2YWx1
ZS0+Y2hpbGQoMSksIHZhbHVlLT5jaGlsZCgwKSk7CiAgICAgfQogCiAgICAgLy8gVHVybiB0aGlz
OiBBZGQoY29uc3RhbnQsIHZhbHVlKQpAQCAtMjIxMCw2ICsyMjEyLDY4IEBACiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgbV92YWx1ZSBoYXMgYmVlbiByZXBsYWNl
ZCBieSBhbiBpZGVudGl0eS4KKyAgICBib29sIGhhbmRsZUNvbW11dGF0aXZpdHlBc3NvY2lhdGl2
aXR5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZhbHVlLT5udW1DaGlsZHJlbigpID09IDIp
OworCisgICAgICAgIGlmIChtX3Byb2Mub3B0TGV2ZWwoKSA8IDIpIHsKKyAgICAgICAgICAgIGhh
bmRsZUNvbW11dGF0aXZpdHkoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIE9wY29kZSBvcCA9IG1fdmFsdWUtPm9wY29kZSgpOworICAgICAgICBpZiAo
bV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpICE9IG9wICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5v
cGNvZGUoKSAhPSBvcCkgeworICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2luY2UgY2hp
bGQoMCkgaXMgYWxyZWFkeSBjYW5vbmljYWxpemVkLCBpZiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVl
LCB0aGVyZSBpcyBub3RoaW5nIGZvciB1cyB0byBkby4KKyAgICAgICAgaWYgKG1fdmFsdWUtPmNo
aWxkKDApLT5vcGNvZGUoKSA9PSBvcAorICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMSkt
Pm9wY29kZSgpICE9IG9wCisgICAgICAgICAgICAmJiAhc2hvdWxkR29CZWZvcmUobV92YWx1ZS0+
Y2hpbGQoMSksIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSkpIHsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgaGF2ZSB3
b3JrIHRvIGRvLCB3ZSBwcm9jZWVkIGluIHR3byBzdGVwczoKKyAgICAgICAgLy8gLSBmaXJzdCB3
ZSBnYXRoZXIgYWxsIG9mIHRoZSBsZWF2ZXMgb2YgdGhlIGV4cHJlc3Npb24gdHJlZSByb290ZWQg
YXQgbV92YWx1ZXMgKFZhbHVlcyB0aGF0IGhhdmUgYSBkaWZmZXJlbnQgb3ApCisgICAgICAgIC8v
IC0gdGhlbiB3ZSBzb3J0IHRoZW0sIGFuZCBnZW5lcmF0ZSB0aGUgY2Fub25pY2FsIGV4cHJlc3Np
b24gdHJlZS4KKworICAgICAgICAvLyBXZSBtdXN0IHRyYWNrIHRoZSBhbHJlYWR5IHZpc2l0ZWQg
aW5uZXIgbm9kZXMsIHRvIGFib3J0IGlmIG9uZSBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uCisgICAg
ICAgIC8vIE90aGVyd2lzZSB3ZSB3aWxsIHRyeSB0byBleHBhbmQgdGhlIHRyZWUsIHdoaWNoIHdv
dWxkIHRha2UgZXhwb25lbnRpYWwgdGltZSBhbmQgc3BhY2UgZm9yIHRoZSBmb2xsb3dpbmcgY29k
ZSAob3IgYW55IG90aGVyIGV4YW1wbGUgd2l0aCBsb3RzIG9mIHNoYXJpbmcpOgorICAgICAgICAv
LyAgQDIgPSBBZGQoQDEsIEAwKTsKKyAgICAgICAgLy8gIEAzID0gQWRkKEAyLCBAMSk7CisgICAg
ICAgIC8vICAuLi4KKyAgICAgICAgLy8gIEBuKzIgPSBBZGQoQG4rISwgQG4pOworICAgICAgICAv
LyBUaGlzIHBhdHRlcm4gYXBwZWFycyBpbiB0ZXN0QjM6OnRlc3RTcGlsbEdQLgorICAgICAgICAv
LyBPbmUgZXhjZXB0aW9uIGlzIEJpdEFuZCBhbmQgQml0T3I6IHdlIGNhbiBqdXN0IGlnbm9yZSBy
ZXBlYXRlZCBjb3BpZXMgb2Ygb3BlcmFuZHMgYXMgdGhleSBhcmUgaWRlbXBvdGVudC4KKyAgICAg
ICAgSGFzaFNldDxWYWx1ZSo+IHRyZWVJbm5lck5vZGVzOworICAgICAgICBWZWN0b3I8VmFsdWUq
LCA0PiBsZWF2ZXM7CisgICAgICAgIFZlY3RvcjxWYWx1ZSosIDE+IHdvcmtsaXN0ID0geyBtX3Zh
bHVlIH07CisgICAgICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBWYWx1ZSogdmFsID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlmICh2YWwt
Pm9wY29kZSgpID09IG9wKSB7CisgICAgICAgICAgICAgICAgaWYgKHRyZWVJbm5lck5vZGVzLmNv
bnRhaW5zKHZhbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9wID09IEJpdE9yIHx8IG9w
ID09IEJpdEFuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHRyZWVJbm5lck5vZGVzLmFkZCh2YWwpOworICAgICAgICAgICAgICAgIHdvcmtsaXN0LmFw
cGVuZCh2YWwtPmNoaWxkKDApKTsKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFs
LT5jaGlsZCgxKSk7CisgICAgICAgICAgICB9IGVsc2UgLy8gdmFsLT5vcGNvZGUgIT0gb3AKKyAg
ICAgICAgICAgICAgICBsZWF2ZXMuYXBwZW5kKHZhbCk7CisgICAgICAgIH0KKworICAgICAgICBz
dGQ6OnNvcnQobGVhdmVzLmJlZ2luKCksIGxlYXZlcy5lbmQoKSwgW10oVmFsdWUqIHgsIFZhbHVl
KiB5KSB7cmV0dXJuIHNob3VsZEdvQmVmb3JlKHgsIHkpO30pOworICAgICAgICAKKyAgICAgICAg
VmFsdWUqIGxhc3RPcCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4obV9pbmRleCwgb3As
IG1fdmFsdWUtPm9yaWdpbigpLCBsZWF2ZXNbMF0sIGxlYXZlc1sxXSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAyOyBpIDwgbGVhdmVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbGFzdE9w
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihtX2luZGV4LCBvcCwgbV92YWx1ZS0+b3Jp
Z2luKCksIGxhc3RPcCwgbGVhdmVzW2ldKTsKKyAgICAgICAgcmVwbGFjZVdpdGhJZGVudGl0eShs
YXN0T3ApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBzdHJ1Y3QgQ2Fub25p
Y2FsaXplZENvbXBhcmlzb24gewogICAgICAgICBPcGNvZGUgb3Bjb2RlOwogICAgICAgICBWYWx1
ZSogb3BlcmFuZHNbMl07Cg==
</data>
<flag name="review"
          id="378485"
          type_id="1"
          status="-"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366286</attachid>
            <date>2019-03-29 11:43:01 -0700</date>
            <delta_ts>2019-03-29 11:57:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch194081</filename>
            <type>text/plain</type>
            <size>29237</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDU4MGQyMzhmZjVlLi45Y2E0ZjBjNzc1YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTktMDMtMjkgIFJvYmlu
IE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBCM1JlZHVjZVN0cmVu
Z3RoIHNob3VsZCB1c2UgYXNzb2NpYXRpdml0eSB0byBjYW5vbmljYWxpemUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDA4MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5l
dyBCMyBwYXNzLCB0aGF0IHRyaWVzIHRvIGZpbmQgYW5kIG9wdGltaXplIGV4cHJlc3Npb24gdHJl
ZXMgbWFkZSBwdXJlbHkgb2YgYW55IG9uZSBhc3NvY2lhdGl2ZSBhbmQgY29tbXV0YXRpdmUgb3Bl
cmF0b3IgKEFkZC9NdWwvQml0T3IvQml0QW5kL0JpdFhvcikuCisgICAgICAgIFRoZSBwYXNzIG9u
bHkgcnVucyBpbiBPMiwgYW5kIHJ1bnMgb25jZSwgYWZ0ZXIgbG93ZXJNYWNyb3MgYW5kIGp1c3Qg
YmVmb3JlIGEgcnVuIG9mIEIzUmVkdWNlU3RyZW5ndGggKHdoaWNoIGhlbHBzIGNsZWFuIHVwIHRo
ZSBkZWFkIGNvZGUgaXQgdGVuZHMgdG8gbGVhdmUgYmVoaW5kKS4KKworICAgICAgICBUaGUgcGFz
cyBpcyBjdXJyZW50bHkgZXh0cmVtZWx5IGNvbnNlcnZhdGl2ZSwgbm90IHRyeWluZyBhbnl0aGlu
ZyBpZiBpdCB3b3VsZCBjYXVzZSBfYW55XyBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAgICBGb3Ig
dGhpcyBwdXJwb3NlLCBpdCBzdGFydHMgYnkgY29tcHV0aW5nIHVzZSBjb3VudHMgZm9yIHRoZSBw
b3RlbnRpYWxseSBpbnRlcmVzdGluZyBub2RlcyAodGhvc2Ugd2l0aCB0aGUgcmlnaHQgb3Bjb2Rl
cyksIGFuZCBzZWdyZWdhdGUgdGhlbSBpbnRvIGV4cHJlc3Npb24gdHJlZXMuCisgICAgICAgIFRo
ZSByb290IG9mIGFuIGV4cHJlc3Npb24gdHJlZSBpcyBhIG5vZGUgdGhhdCBpcyBlaXRoZXIgdXNl
ZCBpbiBtdWx0aXBsZSBwbGFjZXMsIG9yIGlzIHVzZWQgYnkgYSB2YWx1ZSB3aXRoIGEgZGlmZmVy
ZW50IG9wY29kZS4KKyAgICAgICAgVGhlIGxlYXZlcyBvZiBhbiBleHByZXNzaW9uIHRyZWUgYXJl
IG5vZGVzIHRoYXQgYXJlIGVpdGhlciB1c2VkIGluIG11bHRpcGxlIHBsYWNlcywgb3IgaGF2ZSBh
IGRpZmZlcmVudCBvcGNvZGUuCisgICAgICAgIEFsbCBjb25zdGFudCBsZWF2ZXMgb2YgYSB0cmVl
IGFyZSBjb21iaW5lZCwgYXMgd2VsbCBhcyBhbGwgbGVhdmVzIHRoYXQgYXJlIGlkZW50aWNhbC4g
V2hhdCByZW1haW5zIGlzIHRoZW4gbGFpZCBvdXQgaW50byBhIGJhbGFuY2VkIGJpbmFyeSB0cmVl
LCBob3BlZnVsbHkgbWF4aW1pemluZyBJTFAuCisKKyAgICAgICAgVGhpcyBvcHRpbWl6YXRpb24g
d2FzIGltcGxlbWVudGVkIGFzIGEgc3RhbmQtYWxvbmUgcGFzcyBhbmQgbm90IGFzIHBhcnQgb2Yg
QjNSZWR1Y2VTdHJlbmd0aCBtb3N0bHkgYmVjYXVzZSBpdCBuZWVkcyB1c2UgY291bnRzIHRvIGF2
b2lkIGNvZGUgZHVwbGljYXRpb24uCisgICAgICAgIEl0IGFsc28gYmVuZWZpdHMgZnJvbSBmaW5k
aW5nIGFsbCB0cmVlIHJvb3RzIGZpcnN0LCBhbmQgbm90IHRyeWluZyB0byByZXBlYXRlZGx5IG9w
dGltaXplIHN1YnRyZWVzLgorCisgICAgICAgIEkgYWRkZWQgc2V2ZXJhbCB0ZXN0cyB0byB0ZXN0
QjMgd2l0aCB2YXJ5aW5nIHBhdHRlcm5zIG9mIHRyZWVzLiBJdCBpcyBhbHNvIHRlc3RlZCBpbiBh
IGxlc3MgZm9jdXNlZCB3YXkgYnkgbG90cyBvZiBvbGRlciB0ZXN0cy4KKworICAgICAgICBJbiB0
aGUgZnV0dXJlIHRoaXMgcGFzcyBjb3VsZCBiZSBleHBhbmRlZCB0byBhbGxvdyBzb21lIGJvdW5k
ZWQgYW1vdW50IG9mIGNvZGUgZHVwbGljYXRpb24sIGFuZCBtZXJnaW5nIG1vcmUgbGVhdmVzIChl
LmcuIE11bChhLCAzKSBhbmQgYSBpbiBhbiBBZGQgdHJlZSwgaW50byBNdWwoYSwgNCkpCisgICAg
ICAgIFRoZSBsYXR0ZXIgd2lsbCBuZWVkIGV4cG9zaW5nIHRoZSBwZWVwaG9sZSBvcHRpbWl6YXRp
b25zIG91dCBvZiBCM1JlZHVjZVN0cmVuZ3RoIHRvIGF2b2lkIGR1cGxpY2F0aW5nIGNvZGUuCisK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGIzL0IzQ29tbW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDoKKyAgICAgICAgKiBiMy9CM0dl
bmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9BaXIpOgorICAgICAgICAq
IGIzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6T3B0aW1p
emVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyk6CisgICAgICAgIChKU0M6OkIzOjpPcHRpbWl6
ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzOjpuZXV0cmFsRWxlbWVudCk6CisgICAgICAgIChK
U0M6OkIzOjpPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzOjppc0Fic29yYmluZ0Vs
ZW1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25U
cmVlczo6Y29tYmluZUNvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkIzOjpPcHRpbWl6ZUFzc29j
aWF0aXZlRXhwcmVzc2lvblRyZWVzOjplbWl0VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6T3B0
aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6b3B0aW1pemVSb290ZWRUcmVlKToKKyAg
ICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OnJ1bik6
CisgICAgICAgIChKU0M6OkIzOjpvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzKToK
KyAgICAgICAgKiBiMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaDoKKyAg
ICAgICAgKiBiMy9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpyZXBsYWNl
V2l0aElkZW50aXR5KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6dGVzdEJpdFhvclRyZWVBcmdzKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRYb3JUcmVl
QXJnc0V2ZW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdFhvclRyZWVBcmdJbW0pOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdEFkZFRyZWVBcmczMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
TXVsVHJlZUFyZzMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRBbmRUcmVlQXJnMzIpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdE9yVHJlZUFyZzMyKToKKyAgICAgICAgKEpTQzo6QjM6
OnJ1bik6CisKIDIwMTktMDMtMjUgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBOYXZpZ2F0b3JDb250ZW50VXRpbHMgaW4gV2ViQ29yZS9N
b2R1bGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRiMjViNzIzNjQ4Li4yZTM1
ZGUwY2JlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTMzMzUsNiArMzMzNSw4
IEBACiAJCTJBRjczODJCMThCQkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlEVGFibGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzAzMjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291
cmNlQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NvdXJjZUNvZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzBBNUY0MDNGMTFDNEY1OTlDRDU5NkQ1
IC8qIFdhc21TaWduYXR1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdhc21TaWduYXR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMzNzQzNjQ5MjI0RDc5RUYwMEM4QzIyNyAvKiBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNz
aW9uVHJlZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhw
cmVzc2lvblRyZWVzLmNwcDsgcGF0aCA9IGIzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Np
b25UcmVlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzNzQzNjRBMjI0RDc5
RUYwMEM4QzIyNyAvKiBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmg7IHBhdGgg
PSBiMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdl
dENvbmRpdGlvbmFscy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRp
b25hbHMueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdD
OThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6
LmR5bGliOyBwYXRoID0gdXNyL2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsg
fTsKIAkJMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01Mzk2LDYgKzUzOTgsOCBAQAogCQkJCTBGMzM4RTA3MUJGMDI3NkMwMDEzQzg4RiAv
KiBCM09wYXF1ZUJ5cHJvZHVjdHMuaCAqLywKIAkJCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQg
LyogQjNPcGNvZGUuY3BwICovLAogCQkJCTBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09w
Y29kZS5oICovLAorCQkJCTMzNzQzNjQ5MjI0RDc5RUYwMEM4QzIyNyAvKiBCM09wdGltaXplQXNz
b2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwICovLAorCQkJCTMzNzQzNjRBMjI0RDc5RUYwMEM4
QzIyNyAvKiBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaCAqLywKIAkJCQkw
RkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAogCQkJCTBGRUM4NERB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovLAogCQkJCTBGNERFMUQwMUM0RDc2NEIw
MDRENkMxMSAvKiBCM09yaWdpbkR1bXAuY3BwICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CmluZGV4IGYwNWEzZmU5ZTAzLi5lYzJmMTYyNDM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2Vz
LnR4dApAQCAtMTQzLDYgKzE0Myw3IEBAIGIzL0IzTWVtb3J5VmFsdWUuY3BwCiBiMy9CM01vdmVD
b25zdGFudHMuY3BwCiBiMy9CM09wYXF1ZUJ5cHJvZHVjdHMuY3BwCiBiMy9CM09wY29kZS5jcHAK
K2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAKIGIzL0IzT3JpZ2lu
LmNwcAogYjMvQjNPcmlnaW5EdW1wLmNwcAogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCmluZGV4IDQwYmIzMmJkNDI5Li4wZTJjZTNh
ZjVmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCkBAIC0zNSw3ICszNSw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1ib29sIHNob3VsZER1bXBJ
UihCM0NvbXBsaXRhdGlvbk1vZGUgbW9kZSkKK2Jvb2wgc2hvdWxkRHVtcElSKEIzQ29tcGlsYXRp
b25Nb2RlIG1vZGUpCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgcmV0dXJuIEZUTDo6dmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpIHx8IEZUTDo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkg
fHwgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UobW9kZSk7CkBAIC00NCw3ICs0NCw3IEBAIGJvb2wg
c2hvdWxkRHVtcElSKEIzQ29tcGxpdGF0aW9uTW9kZSBtb2RlKQogI2VuZGlmCiB9CiAKLWJvb2wg
c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjNDb21wbGl0YXRpb25Nb2RlIG1vZGUpCitib29sIHNo
b3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzQ29tcGlsYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYg
KG1vZGUgPT0gQjNNb2RlKQogICAgICAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNo
UGhhc2UoKSB8fCBPcHRpb25zOjpkdW1wQjNHcmFwaEF0RWFjaFBoYXNlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbW1vbi5oCmluZGV4IDc1Y2MwOTI3MjU3Li5lZDFkMDJkYzBkNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKQEAgLTM0LDEzICszNCwxMyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotZW51bSBCM0NvbXBsaXRhdGlvbk1vZGUgeworZW51
bSBCM0NvbXBpbGF0aW9uTW9kZSB7CiAgICAgQjNNb2RlLAogICAgIEFpck1vZGUKIH07CiAKLUpT
X0VYUE9SVF9QUklWQVRFIGJvb2wgc2hvdWxkRHVtcElSKEIzQ29tcGxpdGF0aW9uTW9kZSk7Ci1i
b29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzQ29tcGxpdGF0aW9uTW9kZSk7CitKU19FWFBP
UlRfUFJJVkFURSBib29sIHNob3VsZER1bXBJUihCM0NvbXBpbGF0aW9uTW9kZSk7Citib29sIHNo
b3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzQ29tcGlsYXRpb25Nb2RlKTsKIGJvb2wgc2hvdWxkVmFs
aWRhdGVJUigpOwogYm9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKIGJvb2wgc2hv
dWxkU2F2ZUlSQmVmb3JlUGhhc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmNwcAppbmRleCBhMTM4NTRmMWU5YS4uODlmYmFmZGQ5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNHZW5lcmF0ZS5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJCM0xvd2Vy
TWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmgiCiAjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCiAj
aW5jbHVkZSAiQjNNb3ZlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQjNPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRl
ICJCM1B1cmVDU0UuaCIKICNpbmNsdWRlICJCM1JlZHVjZURvdWJsZVRvRmxvYXQuaCIKQEAgLTky
LDcgKzkzLDYgQEAgdm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAg
ICAgICAgICAgZHVwbGljYXRlVGFpbHMocHJvY2VkdXJlKTsKICAgICAgICAgZml4U1NBKHByb2Nl
ZHVyZSk7CiAgICAgICAgIGZvbGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7Ci0gICAgICAgIAog
ICAgICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgogICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CiAgICAgfSBl
bHNlIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAxKSB7CkBAIC0xMDQsNiArMTA0LDcgQEAg
dm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgIGxvd2VyTWFjcm9z
KHByb2NlZHVyZSk7CiAKICAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikgeworICAg
ICAgICBvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzKHByb2NlZHVyZSk7CiAgICAg
ICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAKICAgICAgICAgLy8gRklYTUU6IEFkZCBt
b3JlIG9wdGltaXphdGlvbnMgaGVyZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAK
aW5kZXggMTY4MjA1ODZjOGQuLjhiOGZkN2Y0NTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lv
blRyZWVzLmNwcApAQCAtMSw4ICsxLDI5MiBAQAotLy8KLS8vICBCM09wdGltaXplQXNzb2NpYXRp
dmVFeHByZXNzaW9uVHJlZXMuY3BwCi0vLyAgSmF2YVNjcmlwdENvcmUKLS8vCi0vLyAgQ3JlYXRl
ZCBieSBSb2JpbiBNb3Jpc3NldCBvbiAyOC8zLzE5LgotLy8KLQotI2luY2x1ZGUgIkIzT3B0aW1p
emVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5ocHAiCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVl
LmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNl
dC5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisj
aW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIE9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMgeworcHVibGljOgorICAgIE9w
dGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMoUHJvY2VkdXJlJiBwcm9jKQorICAgICAg
ICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIHJ1bigpOworCitwcml2
YXRlOgorICAgIGludDY0X3QgbmV1dHJhbEVsZW1lbnQoT3Bjb2RlKTsKKyAgICBib29sIGlzQWJz
b3JiaW5nRWxlbWVudChPcGNvZGUsIGludDY0X3QpOworICAgIHZvaWQgY29tYmluZUNvbnN0YW50
cyhPcGNvZGUsIGludDY0X3QmLCBpbnQ2NF90KTsKKyAgICB2b2lkIGVtaXRWYWx1ZShPcGNvZGUs
IFZhbHVlKiwgdW5zaWduZWQgbnVtU2VlbiwgSW5zZXJ0aW9uU2V0Jiwgc2l6ZV90IGluZGV4SW5C
bG9jaywgVmVjdG9yPFZhbHVlKiwgND4mIHJlc3VsdHMpOworICAgIGJvb2wgb3B0aW1pemVSb290
ZWRUcmVlKFZhbHVlKiByb290LCBJbnNlcnRpb25TZXQmLCBzaXplX3QgaW5kZXhJbkJsb2NrLCBj
b25zdCBWZWN0b3I8dW5zaWduZWQ+JiB1c2VDb3VudHMpOworCisgICAgUHJvY2VkdXJlJiBtX3By
b2M7CisgICAgYm9vbCB2ZXJib3NlIHsgZmFsc2UgfTsKK307CisKK2ludDY0X3QgT3B0aW1pemVB
c3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6bmV1dHJhbEVsZW1lbnQoT3Bjb2RlIG9wKQorewor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNh
c2UgQml0WG9yOgorICAgICAgICByZXR1cm4gMDsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIHJldHVybiAtMTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9v
bCBPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzOjppc0Fic29yYmluZ0VsZW1lbnQo
T3Bjb2RlIG9wLCBpbnQ2NF90IGNvbnN0YW50KQoreworICAgIHN3aXRjaChvcCkgeworICAgIGNh
c2UgQWRkOgorICAgIGNhc2UgQml0WG9yOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2Fz
ZSBNdWw6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIHJldHVybiBjb25zdGFudCA9PSAwOwor
ICAgIGNhc2UgQml0T3I6CisgICAgICAgIHJldHVybiBjb25zdGFudCA9PSAtMTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwor
dm9pZCBPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzOjpjb21iaW5lQ29uc3RhbnRz
KE9wY29kZSBvcCwgaW50NjRfdCYgY29uc3QxLCBpbnQ2NF90IGNvbnN0MikKK3sKKyAgICBzd2l0
Y2ggKG9wKSB7CisgICAgY2FzZSBBZGQ6CisgICAgICAgIGNvbnN0MSArPSBjb25zdDI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTXVsOgorICAgICAgICBjb25zdDEgKj0gY29uc3QyOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgY29uc3QxICY9IGNvbnN0MjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY29uc3QxIHw9IGNvbnN0
MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGNvbnN0MSBePSBj
b25zdDI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE9wdGltaXplQXNzb2NpYXRpdmVF
eHByZXNzaW9uVHJlZXM6OmVtaXRWYWx1ZShPcGNvZGUgb3AsIFZhbHVlKiB2YWx1ZSwgdW5zaWdu
ZWQgbnVtU2VlbiwgSW5zZXJ0aW9uU2V0JiBpbnNlcnRpb25TZXQsIHNpemVfdCBpbmRleEluQmxv
Y2ssIFZlY3RvcjxWYWx1ZSosIDQ+JiByZXN1bHRzKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAg
ICBjYXNlIEFkZDoKKyAgICAgICAgaWYgKG51bVNlZW4gPiAxKSB7CisgICAgICAgICAgICBWYWx1
ZSogY29uc3ROdW1TZWVuOworICAgICAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgPT0gSW50MzIp
CisgICAgICAgICAgICAgICAgY29uc3ROdW1TZWVuID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25z
dDMyVmFsdWU+KGluZGV4SW5CbG9jaywgdmFsdWUtPm9yaWdpbigpLCBudW1TZWVuKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb25zdE51bVNlZW4gPSBpbnNlcnRpb25TZXQu
aW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5kZXhJbkJsb2NrLCB2YWx1ZS0+b3JpZ2luKCksIHN0YXRp
Y19jYXN0PGludDY0X3Q+KG51bVNlZW4pKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGlu
c2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGluZGV4SW5CbG9jaywgTXVsLCB2YWx1ZS0+b3JpZ2lu
KCksIHZhbHVlLCBjb25zdE51bVNlZW4pKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICBicmVhazsKKyAgICBjYXNlIE11bDoKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNlZW47ICsraSkKKyAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICBjYXNlIEJpdEFuZDoKKyAg
IGNhc2UgQml0T3I6CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICBicmVh
azsKKyAgIGNhc2UgQml0WG9yOgorICAgICAgICBpZiAobnVtU2VlbiAlIDIpCisgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICBicmVhazsKKyAgIGRlZmF1bHQ6CisgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgT3B0aW1p
emVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6b3B0aW1pemVSb290ZWRUcmVlKFZhbHVlKiBy
b290LCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgc2l6ZV90IGluZGV4SW5CbG9jaywgY29u
c3QgVmVjdG9yPHVuc2lnbmVkPiYgdXNlQ291bnRzKQoreworICAgIE9wY29kZSBvcCA9IHJvb3Qt
Pm9wY29kZSgpOworICAgIGlmICgocm9vdC0+Y2hpbGQoMCktPm9wY29kZSgpICE9IG9wIHx8IHVz
ZUNvdW50c1tyb290LT5jaGlsZCgwKS0+aW5kZXgoKV0gPiAxKQorICAgICAgICAmJiAocm9vdC0+
Y2hpbGQoMSktPm9wY29kZSgpICE9IG9wIHx8IHVzZUNvdW50c1tyb290LT5jaGlsZCgxKS0+aW5k
ZXgoKV0gPiAxKSkgeworICAgICAgICAvLyBUaGlzIGlzIGEgdHJpdmlhbCBleHByZXNzaW9uIHRy
ZWUgb2Ygc2l6ZSB0d28sIHdlIGhhdmUgbm90aGluZyB0byBkbyBoZXJlIHRoYXQgQjNSZWR1Y2VT
dHJlbmd0aCBjYW5ub3QgZG8gYmV0dGVyIHRoYW4gdXMuCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICAvLyBXZSBwcm9jZWVkIGluIHRocmVlIHN0ZXBzOgorICAgIC8vIC0gZ2F0
aGVyIGFsbCB0aGUgbGVhdmVzIG9mIHRoZSBleHByZXNzaW9uIHRyZWUKKyAgICAvLyAtIHNvcnQg
dGhlbSwgYW5kIGNvbWJpbmUgYXMgbWFueSBhcyBwb3NzaWJsZQorICAgIC8vIC0gbWFrZSBhIGJh
bGFuY2VkIGJpbmFyeSB0cmVlIG9mIHRoZW0KKworICAgIFZlY3RvcjxWYWx1ZSosIDQ+IGxlYXZl
czsKKyAgICBWZWN0b3I8VmFsdWUqLCAzPiB3b3JrbGlzdCA9IHsgcm9vdC0+Y2hpbGQoMCksIHJv
b3QtPmNoaWxkKDEpIH07CisgICAgaW50NjRfdCBjb25zdGFudCA9IG5ldXRyYWxFbGVtZW50KG9w
KTsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBWYWx1ZSogdmFs
ID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgaWYgKHZhbC0+b3Bjb2RlKCkgPT0gb3Ag
JiYgdXNlQ291bnRzW3ZhbC0+aW5kZXgoKV0gPCAyKSB7CisgICAgICAgICAgICB3b3JrbGlzdC5h
cHBlbmQodmFsLT5jaGlsZCgwKSk7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5j
aGlsZCgxKSk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsLT5oYXNJbnQoKSkKKyAgICAgICAgICAg
IGNvbWJpbmVDb25zdGFudHMob3AsIGNvbnN0YW50LCB2YWwtPmFzSW50KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBsZWF2ZXMuYXBwZW5kKHZhbCk7CisgICAgfQorICAgIGlmIChpc0Fi
c29yYmluZ0VsZW1lbnQob3AsIGNvbnN0YW50KSkgeworICAgICAgICBWYWx1ZSogbmV3Um9vdDsK
KyAgICAgICAgaWYgKHJvb3QtPnR5cGUoKSA9PSBJbnQzMikKKyAgICAgICAgICAgIG5ld1Jvb3Qg
PSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJsb2NrLCByb290LT5v
cmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oY29uc3RhbnQpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihp
bmRleEluQmxvY2ssIHJvb3QtPm9yaWdpbigpLCBjb25zdGFudCk7CisgICAgICAgIHJvb3QtPnJl
cGxhY2VXaXRoSWRlbnRpdHkobmV3Um9vdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIHN0ZDo6c29ydChsZWF2ZXMuYmVnaW4oKSwgbGVhdmVzLmVuZCgpLCBbXShWYWx1ZSog
eCwgVmFsdWUqIHkpIHsgcmV0dXJuIHgtPmluZGV4KCkgPCB5LT5pbmRleCgpOyB9KTsKKyAgICBW
ZWN0b3I8VmFsdWUqLCA0PiBvcHRMZWF2ZXM7CisgICAgVmFsdWUqIGxhc3RWYWx1ZSA9IG51bGxw
dHI7CisgICAgdW5zaWduZWQgbnVtU2VlbiA9IDA7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBs
ZWF2ZXMpIHsKKyAgICAgICAgaWYgKGxhc3RWYWx1ZSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIG51
bVNlZW4rKzsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAobGFzdFZhbHVlKQorICAg
ICAgICAgICAgICAgIGVtaXRWYWx1ZShvcCwgbGFzdFZhbHVlLCBudW1TZWVuLCBpbnNlcnRpb25T
ZXQsIGluZGV4SW5CbG9jaywgb3B0TGVhdmVzKTsKKyAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZh
bHVlOworICAgICAgICAgICAgbnVtU2VlbiA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KGxhc3RWYWx1ZSkKKyAgICAgICAgZW1pdFZhbHVlKG9wLCBsYXN0VmFsdWUsIG51bVNlZW4sIGlu
c2VydGlvblNldCwgaW5kZXhJbkJsb2NrLCBvcHRMZWF2ZXMpOworCisgICAgLy8gb3B0TGVhdmVz
IGNhbiBiZSBlbXB0eSBmb3IgdHJlZXMgb2YgQml0WG9yIHdoZXJlIGFsbCBsZWF2ZXMgaGFwcGVu
IGFuIGV2ZW4gbnVtYmVyIG9mIHRpbWVzLgorICAgIC8vIEluIHRoYXQgY2FzZSwgd2UgbWFrZSB0
aGUgd2hvbGUgdHJlZSBlcXVpdmFsZW50IHRvIHRoZSBuZXV0cmFsIGVsZW1lbnQgKHdoaWNoIGlz
IDAgZm9yIEJpdFhvcikuCisgICAgaWYgKGNvbnN0YW50ICE9IG5ldXRyYWxFbGVtZW50KG9wKSB8
fCBvcHRMZWF2ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChyb290LT50eXBlKCkgPT0gSW50
MzIpCisgICAgICAgICAgICBvcHRMZWF2ZXMuYXBwZW5kKGluc2VydGlvblNldC5pbnNlcnQ8Q29u
c3QzMlZhbHVlPihpbmRleEluQmxvY2ssIHJvb3QtPm9yaWdpbigpLCBzdGF0aWNfY2FzdDxpbnQz
Ml90Pihjb25zdGFudCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0TGVhdmVzLmFw
cGVuZChpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5kZXhJbkJsb2NrLCByb290
LT5vcmlnaW4oKSwgY29uc3RhbnQpKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkgeworICAg
ICAgICBkYXRhTG9nKCJFeHByZXNzaW9uIHRyZWUgcm9vdGVkIGF0ICIsICpyb290LCAiIHdpdGgg
bGVhdmVzIik7CisgICAgICAgIGZvciAoVmFsdWUqIGxlYWY6IGxlYXZlcykKKyAgICAgICAgICAg
IGRhdGFMb2coIiAiLCAqbGVhZik7CisgICAgICAgIGRhdGFMb2coIiA9PiIpOworICAgICAgICBm
b3IgKFZhbHVlKiBsZWFmOiBvcHRMZWF2ZXMpCisgICAgICAgICAgICBkYXRhTG9nKCIgIiwgKmxl
YWYpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0KKworICAgIC8vIEZpbmFsbHkgd2Ug
Y2FuIGJ1aWxkIHRoZSBiYWxhbmNlZCBiaW5hcnkgdHJlZQorICAgIHVuc2lnbmVkIGxlYWZJbmRl
eCA9IDA7CisgICAgd2hpbGUgKGxlYWZJbmRleCArIDEgPCBvcHRMZWF2ZXMuc2l6ZSgpKSB7Cisg
ICAgICAgIG9wdExlYXZlcy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5kZXhJ
bkJsb2NrLCBvcCwgcm9vdC0+b3JpZ2luKCksIG9wdExlYXZlc1tsZWFmSW5kZXhdLCBvcHRMZWF2
ZXNbbGVhZkluZGV4ICsgMV0pKTsKKyAgICAgICAgbGVhZkluZGV4ICs9IDI7CisgICAgfQorICAg
IEFTU0VSVChsZWFmSW5kZXggPT0gb3B0TGVhdmVzLnNpemUoKSAtIDEpOworICAgIHJvb3QtPnJl
cGxhY2VXaXRoSWRlbnRpdHkob3B0TGVhdmVzW2xlYWZJbmRleF0pOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIE9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OnJ1bigpCit7
CisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAvLyBXZSBwcm9jZWVkIGluIHR3byBw
aGFzZXMuCisgICAgLy8gSW4gdGhlIGZpcnN0IG9uZSB3ZSBjb21wdXRlIHRoZSB1c2UgY291bnRz
IG9mIGVhY2ggdmFsdWUgKG9mIGFuIGludGVyZXN0aW5nIG9wY29kZSksIGFuZCBmaW5kIHBvdGVu
dGlhbCByb290cyBvZiBpbnRlcmVzdGluZyBleHByZXNzaW9uIHRyZWVzLgorICAgIC8vIEluIHRo
ZSBzZWNvbmQgb25lIHdlIG9wdGltaXplIGVhY2ggc3VjaCBleHByZXNzaW9uIHRyZWUgaW4gdHVy
bi4KKyAgICAvLyBXZSBuZWVkIHRoZSB1c2UgY291bnRzIHRvIGF2b2lkIGR1cGxpY2F0aW5nIGNv
ZGUuCisKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHVzZUNvdW50cyhtX3Byb2MudmFsdWVzKCkuc2l6
ZSgpLCAwKTsgLy8gTWFwcGluZyBmcm9tIFZhbHVlOjptX2luZGV4IHRvIHVzZSBjb3VudHMuCisg
ICAgSGFzaFNldDxWYWx1ZSo+IGV4cHJlc3Npb25UcmVlUm9vdHM7CisgICAgSGFzaFNldDxCYXNp
Y0Jsb2NrKj4gcm9vdE93bmVyczsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3By
b2MpIHsKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAg
IGZvciAoVmFsdWUqIGNoaWxkOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAg
IGlmICghY2hpbGQtPmlzSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoaWxkLT5vcGNvZGUoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgTXVsOgorICAgICAgICAgICAgICAgIGNhc2UgQWRkOgorICAgICAgICAgICAgICAg
IGNhc2UgQml0QW5kOgorICAgICAgICAgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAgICAg
ICAgY2FzZSBCaXRYb3I6CisgICAgICAgICAgICAgICAgICAgIHVzZUNvdW50c1tjaGlsZC0+aW5k
ZXgoKV0rKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSAhPSB2YWx1
ZS0+b3Bjb2RlKCkgfHwgdXNlQ291bnRzW2NoaWxkLT5pbmRleCgpXSA+IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGV4cHJlc3Npb25UcmVlUm9vdHMuYWRkKGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJvb3RPd25lcnMuYWRkKGNoaWxkLT5vd25lcik7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0ID0gSW5zZXJ0aW9uU2V0KG1fcHJvYyk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IHJvb3RPd25lcnMpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgVmFsdWUqIHZhbHVl
ID0gYmxvY2stPmF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChleHByZXNzaW9uVHJlZVJvb3Rz
LmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG9wdGltaXplUm9v
dGVkVHJlZSh2YWx1ZSwgaW5zZXJ0aW9uU2V0LCBpbmRleCwgdXNlQ291bnRzKTsKKyAgICAgICAg
fQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorCisgICAgcmV0
dXJuIGNoYW5nZWQ7Cit9CisKK2Jvb2wgb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVl
cyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJv
cHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzIik7CisgICAgT3B0aW1pemVBc3NvY2lh
dGl2ZUV4cHJlc3Npb25UcmVlcyBvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzKHBy
b2MpOworICAgIHJldHVybiBvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLnJ1bigp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFzc29j
aWF0aXZlRXhwcmVzc2lvblRyZWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcHRp
bWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmgKaW5kZXggMjI5ZGEwZWE2ZDAuLjU4NjAy
ZTI4YzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFz
c29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oCkBAIC0xLDEzICsxLDQxIEBA
Ci0vLwotLy8gIEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5ocHAKLS8vICBK
YXZhU2NyaXB0Q29yZQotLy8KLS8vICBDcmVhdGVkIGJ5IFJvYmluIE1vcmlzc2V0IG9uIDI4LzMv
MTkuCi0vLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCiAKLSNp
Zm5kZWYgQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzX2hwcAotI2RlZmluZSBC
M09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXNfaHBwCisjcHJhZ21hIG9uY2UKIAot
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgRU5BQkxFKEIzX0pJVCkKIAotI2VuZGlmIC8qIEIzT3B0
aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlc19ocHAgKi8KK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIEZpbmRzIGxhcmdlIGV4cHJl
c3Npb24gdHJlZXMgdXNpbmcgb25lIG9mIHRoZSBhc3NvY2lhdGl2ZSBhbmQgY29tbXV0YXRpdmUg
b3Bjb2RlcyAoQWRkL011bC9CaXRBbmQvQml0T3IvQml0WG9yKSwKKy8vIHRoZW4gcmVvcmRlciB0
aGVtIHRvIGVsaW1pbmF0ZSBhcyBtYW55IG9wZXJhdGlvbnMgYXMgcG9zc2libGUsIHRoZW4gbWFr
ZSBiYWxhbmNlZCBiaW5hcnkgdHJlZXMgb3V0IG9mIHRoZW0KKy8vIHRvIG1heGltaXplIElMUCBh
bmQgbWluaW1pemUgdGhlIHRvdGFsIGxhdGVuY3kuCitib29sIG9wdGltaXplQXNzb2NpYXRpdmVF
eHByZXNzaW9uVHJlZXMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAppbmRleCBkNjcwNGNhMTBkMC4uZGZjYzllNGExMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAKQEAgLTYzLDYgKzYzLDcgQEAgdm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVu
dGl0eShWYWx1ZSogdmFsdWUpCiAgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0
aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCiAKICAgICBBU1NF
UlQobV90eXBlID09IHZhbHVlLT5tX3R5cGUpOworICAgIEFTU0VSVCh2YWx1ZSAhPSB0aGlzKTsK
IAogICAgIGlmIChtX3R5cGUgPT0gVm9pZCkgewogICAgICAgICByZXBsYWNlV2l0aE5vcElnbm9y
aW5nVHlwZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAppbmRleCAwZTM3MWJjMDE4
MS4uNTY2OTdjZTAyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0
YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0zOTgs
NiArMzk4LDEzMiBAQCB2b2lkIHRlc3RMb2FkT2Zmc2V0U2NhbGVkVW5zaWduZWRPdmVySW1tMTJN
YXgoKQogICAgIHRlc3RMb2FkV2l0aE9mZnNldEltcGwoMzI3NjgsIDE2Mzg0KTsKIH0KIAordm9p
ZCB0ZXN0Qml0WG9yVHJlZUFyZ3MoaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBW
YWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICBWYWx1ZSogbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgYXJnQik7CisgICAgbm9kZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgbm9kZSwgYXJnQik7CisgICAgbm9kZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgbm9kZSwgYXJn
QSk7CisgICAgbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmln
aW4oKSwgbm9kZSwgYXJnQik7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCBub2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRf
dD4ocHJvYywgYSwgYiksICgoKGEgXiBiKSBeIGIpIF4gYSkgXiBiKTsKK30KKwordm9pZCB0ZXN0
Qml0WG9yVHJlZUFyZ3NFdmVuKGludDY0X3QgYSwgaW50NjRfdCBiKQoreworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFs
dWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGFyZ0IgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CisgICAgVmFsdWUqIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJp
dFhvciwgT3JpZ2luKCksIGFyZ0EsIGFyZ0IpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5vZGUsIGFyZ0IpOworICAgIG5vZGUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5vZGUsIGFyZ0Ep
OworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9k
ZSk7CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEsIGIpLCAo
KGEgXiBiKSBeIGIpIF4gYSk7Cit9CisKK3ZvaWQgdGVzdEJpdFhvclRyZWVBcmdJbW0oaW50NjRf
dCBhLCBpbnQ2NF90IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KTsKKyAgICBWYWx1ZSogaW1tQiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBiKTsKKyAgICBWYWx1ZSogbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
cHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgaW1tQik7CisgICAgbm9kZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgbm9kZSk7CisgICAg
bm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgYXJn
QSwgbm9kZSk7CisgICAgbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9y
LCBPcmlnaW4oKSwgaW1tQiwgbm9kZSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCBub2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48
aW50NjRfdD4ocHJvYywgYSksIGIgXiAoYSBeIChhIF4gKGEgXiBiKSkpKTsKK30KKwordm9pZCB0
ZXN0QWRkVHJlZUFyZzMyKGludDMyX3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOworICAgIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwgYXJnQSk7CisgICAgVmFsdWUqIG5vZGUgPSBhcmdBOworICAgIGludDMy
X3QgZXhwZWN0ZWRSZXN1bHQgPSBhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyMDsg
KytpKSB7CisgICAgICAgIFZhbHVlKiBvdGhlck5vZGU7CisgICAgICAgIGlmICghKGkgJSAzKSkg
eworICAgICAgICAgICAgb3RoZXJOb2RlID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGkpOworICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQgKz0gaTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG90aGVyTm9kZSA9IGFyZ0E7CisgICAgICAgICAg
ICBleHBlY3RlZFJlc3VsdCArPSBhOworICAgICAgICB9CisgICAgICAgIG5vZGUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIG5vZGUsIG90aGVyTm9kZSk7Cisg
ICAgfQorICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
bm9kZSk7CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEpLCBl
eHBlY3RlZFJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdE11bFRyZWVBcmczMihpbnQzMl90IGEpCit7
CisgICAgLy8gRmlib25hY2NpLWxpa2UgZXhwcmVzc2lvbiB0cmVlIHdpdGggbXVsdGlwbGljYXRp
b24gaW5zdGVhZCBvZiBhZGRpdGlvbi4KKyAgICAvLyBWZXJpZmllcyB0aGF0IHdlIGRvbid0IGV4
cGxvZGUgb24gaGVhdmlseSBmYWN0b3JlZCBncmFwaHMuCisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKTsKKyAgICBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBUcnVuYywgT3JpZ2luKCksIGFyZ0EpOworICAgIFZhbHVlKiBub2RlQSA9IGFyZ0E7CisgICAg
VmFsdWUqIG5vZGVCID0gYXJnQTsKKyAgICBpbnQzMl90IGV4cGVjdGVkQSA9IGEsIGV4cGVjdGVk
UmVzdWx0ID0gYTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjA7ICsraSkgeworICAg
ICAgICBWYWx1ZSogbmV3Tm9kZUIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwg
T3JpZ2luKCksIG5vZGVBLCBub2RlQik7CisgICAgICAgIG5vZGVBID0gbm9kZUI7CisgICAgICAg
IG5vZGVCID0gbmV3Tm9kZUI7CisgICAgICAgIGludDMyX3QgbmV3RXhwZWN0ZWRSZXN1bHQgPSBl
eHBlY3RlZEEgKiBleHBlY3RlZFJlc3VsdDsKKyAgICAgICAgZXhwZWN0ZWRBID0gZXhwZWN0ZWRS
ZXN1bHQ7CisgICAgICAgIGV4cGVjdGVkUmVzdWx0ID0gbmV3RXhwZWN0ZWRSZXN1bHQ7CisgICAg
fQorICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9k
ZUIpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBhKSwgZXhw
ZWN0ZWRSZXN1bHQpOworfQorCit2b2lkIHRlc3RCaXRBbmRUcmVlQXJnMzIoaW50MzJfdCBhKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXJnQSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBhcmdBKTsKKyAgICBW
YWx1ZSogbm9kZSA9IGFyZ0E7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDg7ICsraSkg
eworICAgICAgICBWYWx1ZSogY29uc3RJID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGkgfCA0Mik7CisgICAgICAgIFZhbHVlKiBuZXdCaXRBbmQgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3JpZ2luKCksIGFyZ0EsIGNvbnN0SSk7
CisgICAgICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdEFuZCwgT3Jp
Z2luKCksIG5vZGUsIG5ld0JpdEFuZCk7CisgICAgfQorICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7CisKKyAgICBDSEVDS19FUShjb21waWxl
QW5kUnVuPGludDMyX3Q+KHByb2MsIGEpLCBhICYgNDIpOworfQorCit2b2lkIHRlc3RCaXRPclRy
ZWVBcmczMihpbnQzMl90IGEpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3Jp
Z2luKCksIGFyZ0EpOworICAgIFZhbHVlKiBub2RlID0gYXJnQTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgODsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjb25zdEkgPSByb290LT5hcHBl
bmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgaSk7CisgICAgICAgIFZhbHVlKiBu
ZXdCaXRBbmQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwg
YXJnQSwgY29uc3RJKTsKKyAgICAgICAgbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgQml0T3IsIE9yaWdpbigpLCBub2RlLCBuZXdCaXRBbmQpOworICAgIH0KKyAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hF
Q0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBhKSwgYSB8IDcpOworfQorCiB2b2lk
IHRlc3RBcmcoaW50IGFyZ3VtZW50KQogewogICAgIFByb2NlZHVyZSBwcm9jOwpAQCAtMTY5MTIs
NiArMTcwMzgsMTQgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0ZXN0
UmV0dXJuQ29uc3Q2NCgtNDIpKTsKICAgICBSVU4odGVzdFJldHVyblZvaWQoKSk7CiAKKyAgICBS
VU5fQklOQVJZKHRlc3RCaXRYb3JUcmVlQXJncywgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJh
bmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVzdEJpdFhvclRyZWVBcmdzRXZlbiwgaW50NjRPcGVy
YW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVzdEJpdFhvclRyZWVB
cmdJbW0sIGludDY0T3BlcmFuZHMoKSwgaW50NjRPcGVyYW5kcygpKTsKKyAgICBSVU5fVU5BUlko
dGVzdEFkZFRyZWVBcmczMiwgaW50MzJPcGVyYW5kcygpKTsKKyAgICBSVU5fVU5BUlkodGVzdE11
bFRyZWVBcmczMiwgaW50MzJPcGVyYW5kcygpKTsKKyAgICBSVU5fVU5BUlkodGVzdEJpdEFuZFRy
ZWVBcmczMiwgaW50MzJPcGVyYW5kcygpKTsKKyAgICBSVU5fVU5BUlkodGVzdEJpdE9yVHJlZUFy
ZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworCiAgICAgUlVOKHRlc3RBZGRBcmcoMTExKSk7CiAgICAg
UlVOKHRlc3RBZGRBcmdzKDEsIDEpKTsKICAgICBSVU4odGVzdEFkZEFyZ3MoMSwgMikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366288</attachid>
            <date>2019-03-29 11:57:59 -0700</date>
            <delta_ts>2019-03-29 12:28:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch194081</filename>
            <type>text/plain</type>
            <size>28583</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzNTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE5LTAzLTI5ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjNSZWR1Y2VTdHJlbmd0aCBzaG91bGQgdXNlIGFzc29jaWF0aXZpdHkgdG8gY2Fub25p
Y2FsaXplCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTQwODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIHBhdGNoIGFkZHMgYSBuZXcgQjMgcGFzcywgdGhhdCB0cmllcyB0byBmaW5kIGFuZCBvcHRp
bWl6ZSBleHByZXNzaW9uIHRyZWVzIG1hZGUgcHVyZWx5IG9mIGFueSBvbmUgYXNzb2NpYXRpdmUg
YW5kIGNvbW11dGF0aXZlIG9wZXJhdG9yIChBZGQvTXVsL0JpdE9yL0JpdEFuZC9CaXRYb3IpLgor
ICAgICAgICBUaGUgcGFzcyBvbmx5IHJ1bnMgaW4gTzIsIGFuZCBydW5zIG9uY2UsIGFmdGVyIGxv
d2VyTWFjcm9zIGFuZCBqdXN0IGJlZm9yZSBhIHJ1biBvZiBCM1JlZHVjZVN0cmVuZ3RoICh3aGlj
aCBoZWxwcyBjbGVhbiB1cCB0aGUgZGVhZCBjb2RlIGl0IHRlbmRzIHRvIGxlYXZlIGJlaGluZCku
CisKKyAgICAgICAgVGhlIHBhc3MgaXMgY3VycmVudGx5IGV4dHJlbWVseSBjb25zZXJ2YXRpdmUs
IG5vdCB0cnlpbmcgYW55dGhpbmcgaWYgaXQgd291bGQgY2F1c2UgX2FueV8gY29kZSBkdXBsaWNh
dGlvbi4KKyAgICAgICAgRm9yIHRoaXMgcHVycG9zZSwgaXQgc3RhcnRzIGJ5IGNvbXB1dGluZyB1
c2UgY291bnRzIGZvciB0aGUgcG90ZW50aWFsbHkgaW50ZXJlc3Rpbmcgbm9kZXMgKHRob3NlIHdp
dGggdGhlIHJpZ2h0IG9wY29kZXMpLCBhbmQgc2VncmVnYXRlIHRoZW0gaW50byBleHByZXNzaW9u
IHRyZWVzLgorICAgICAgICBUaGUgcm9vdCBvZiBhbiBleHByZXNzaW9uIHRyZWUgaXMgYSBub2Rl
IHRoYXQgaXMgZWl0aGVyIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBvciBpcyB1c2VkIGJ5IGEg
dmFsdWUgd2l0aCBhIGRpZmZlcmVudCBvcGNvZGUuCisgICAgICAgIFRoZSBsZWF2ZXMgb2YgYW4g
ZXhwcmVzc2lvbiB0cmVlIGFyZSBub2RlcyB0aGF0IGFyZSBlaXRoZXIgdXNlZCBpbiBtdWx0aXBs
ZSBwbGFjZXMsIG9yIGhhdmUgYSBkaWZmZXJlbnQgb3Bjb2RlLgorICAgICAgICBBbGwgY29uc3Rh
bnQgbGVhdmVzIG9mIGEgdHJlZSBhcmUgY29tYmluZWQsIGFzIHdlbGwgYXMgYWxsIGxlYXZlcyB0
aGF0IGFyZSBpZGVudGljYWwuIFdoYXQgcmVtYWlucyBpcyB0aGVuIGxhaWQgb3V0IGludG8gYSBi
YWxhbmNlZCBiaW5hcnkgdHJlZSwgaG9wZWZ1bGx5IG1heGltaXppbmcgSUxQLgorCisgICAgICAg
IFRoaXMgb3B0aW1pemF0aW9uIHdhcyBpbXBsZW1lbnRlZCBhcyBhIHN0YW5kLWFsb25lIHBhc3Mg
YW5kIG5vdCBhcyBwYXJ0IG9mIEIzUmVkdWNlU3RyZW5ndGggbW9zdGx5IGJlY2F1c2UgaXQgbmVl
ZHMgdXNlIGNvdW50cyB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAgICBJdCBhbHNv
IGJlbmVmaXRzIGZyb20gZmluZGluZyBhbGwgdHJlZSByb290cyBmaXJzdCwgYW5kIG5vdCB0cnlp
bmcgdG8gcmVwZWF0ZWRseSBvcHRpbWl6ZSBzdWJ0cmVlcy4KKworICAgICAgICBJIGFkZGVkIHNl
dmVyYWwgdGVzdHMgdG8gdGVzdEIzIHdpdGggdmFyeWluZyBwYXR0ZXJucyBvZiB0cmVlcy4gSXQg
aXMgYWxzbyB0ZXN0ZWQgaW4gYSBsZXNzIGZvY3VzZWQgd2F5IGJ5IGxvdHMgb2Ygb2xkZXIgdGVz
dHMuCisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSB0aGlzIHBhc3MgY291bGQgYmUgZXhwYW5kZWQg
dG8gYWxsb3cgc29tZSBib3VuZGVkIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0aW9uLCBhbmQgbWVy
Z2luZyBtb3JlIGxlYXZlcyAoZS5nLiBNdWwoYSwgMykgYW5kIGEgaW4gYW4gQWRkIHRyZWUsIGlu
dG8gTXVsKGEsIDQpKQorICAgICAgICBUaGUgbGF0dGVyIHdpbGwgbmVlZCBleHBvc2luZyB0aGUg
cGVlcGhvbGUgb3B0aW1pemF0aW9ucyBvdXQgb2YgQjNSZWR1Y2VTdHJlbmd0aCB0byBhdm9pZCBk
dXBsaWNhdGluZyBjb2RlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBiMy9CM0Nv
bW1vbi5jcHA6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVIpOgorICAgICAgICAoSlND
OjpCMzo6c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UpOgorICAgICAgICAqIGIzL0IzQ29tbW9uLmg6
CisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0
ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJl
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHBy
ZXNzaW9uVHJlZXM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMpOgorICAgICAg
ICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6bmV1dHJhbEVs
ZW1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25U
cmVlczo6aXNBYnNvcmJpbmdFbGVtZW50KToKKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNz
b2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OmNvbWJpbmVDb25zdGFudHMpOgorICAgICAgICAoSlND
OjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6ZW1pdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6Om9wdGlt
aXplUm9vdGVkVHJlZSk6CisgICAgICAgIChKU0M6OkIzOjpPcHRpbWl6ZUFzc29jaWF0aXZlRXhw
cmVzc2lvblRyZWVzOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6b3B0aW1pemVBc3NvY2lhdGl2
ZUV4cHJlc3Npb25UcmVlcyk6CisgICAgICAgICogYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhw
cmVzc2lvblRyZWVzLmg6CisgICAgICAgICogYjMvQjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgICogYjMvdGVzdGIzLmNw
cDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRYb3JUcmVlQXJncyk6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0Qml0WG9yVHJlZUFyZ3NFdmVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRY
b3JUcmVlQXJnSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRUcmVlQXJnMzIpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdE11bFRyZWVBcmczMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
Qml0QW5kVHJlZUFyZzMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RCaXRPclRyZWVBcmczMik6
CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorCiAyMDE5LTAzLTI3ICBTYWFtIEJhcmF0aSAgPHNi
YXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIHZhbGlkYXRlT1NSRW50cnlWYWx1ZSB3aXRoIElu
dDUyIHNob3VsZCBib3ggdGhlIHZhbHVlIGJlaW5nIGNoZWNrZWQgaW50byBkb3VibGUgZm9ybWF0
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjQzNTk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMzMzUsNiArMzMzNSw4IEBACiAJCTJBRjczODJCMThC
QkJGOTIwMDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlEVGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzAzMjE3NURGMUFENDdEODk5OEIzNEUxIC8qIEpTU291cmNlQ29kZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NvdXJjZUNvZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzBBNUY0MDNGMTFDNEY1OTlDRDU5NkQ1IC8qIFdhc21TaWduYXR1cmVJ
bmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdhc21TaWduYXR1cmVJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzNzQzNjQ5MjI0RDc5RUYw
MEM4QzIyNyAvKiBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmNwcDsg
cGF0aCA9IGIzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzNzQzNjRBMjI0RDc5RUYwMEM4QzIyNyAvKiBCM09w
dGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcHRp
bWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmg7IHBhdGggPSBiMy9CM09wdGltaXplQXNz
b2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdldENvbmRpdGlvbmFscy54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBs
aWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRoID0gdXNy
L2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJMzdDNzM4RDExRURC
NTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mzk2LDYgKzUz
OTgsOCBAQAogCQkJCTBGMzM4RTA3MUJGMDI3NkMwMDEzQzg4RiAvKiBCM09wYXF1ZUJ5cHJvZHVj
dHMuaCAqLywKIAkJCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICov
LAogCQkJCTBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oICovLAorCQkJCTMz
NzQzNjQ5MjI0RDc5RUYwMEM4QzIyNyAvKiBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9u
VHJlZXMuY3BwICovLAorCQkJCTMzNzQzNjRBMjI0RDc5RUYwMEM4QzIyNyAvKiBCM09wdGltaXpl
QXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaCAqLywKIAkJCQkwRkVDODREOTFCREFDREFDMDA4
MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAogCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM09yaWdpbi5oICovLAogCQkJCTBGNERFMUQwMUM0RDc2NEIwMDRENkMxMSAvKiBCM09yaWdp
bkR1bXAuY3BwICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24g
MjQzNTk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0xNDMsNiArMTQzLDcgQEAKIGIzL0IzTW92ZUNvbnN0YW50cy5jcHAKIGIzL0IzT3Bh
cXVlQnlwcm9kdWN0cy5jcHAKIGIzL0IzT3Bjb2RlLmNwcAorYjMvQjNPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzLmNwcAogYjMvQjNPcmlnaW4uY3BwCiBiMy9CM09yaWdpbkR1bXAu
Y3BwCiBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAyNDM1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1ib29sIHNob3VsZER1bXBJUihCM0NvbXBs
aXRhdGlvbk1vZGUgbW9kZSkKK2Jvb2wgc2hvdWxkRHVtcElSKEIzQ29tcGlsYXRpb25Nb2RlIG1v
ZGUpCiB7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAgICAgcmV0dXJuIEZUTDo6dmVyYm9zZUNvbXBp
bGF0aW9uRW5hYmxlZCgpIHx8IEZUTDo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgc2hvdWxk
RHVtcElSQXRFYWNoUGhhc2UobW9kZSk7CkBAIC00NCw3ICs0NCw3IEBACiAjZW5kaWYKIH0KIAot
Ym9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZShCM0NvbXBsaXRhdGlvbk1vZGUgbW9kZSkKK2Jv
b2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjNDb21waWxhdGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBpZiAobW9kZSA9PSBCM01vZGUpCiAgICAgICAgIHJldHVybiBPcHRpb25zOjpkdW1wR3JhcGhB
dEVhY2hQaGFzZSgpIHx8IE9wdGlvbnM6OmR1bXBCM0dyYXBoQXRFYWNoUGhhc2UoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAyNDM1OTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMg
KzM0LDEzIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCi1lbnVtIEIzQ29t
cGxpdGF0aW9uTW9kZSB7CitlbnVtIEIzQ29tcGlsYXRpb25Nb2RlIHsKICAgICBCM01vZGUsCiAg
ICAgQWlyTW9kZQogfTsKIAotSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzaG91bGREdW1wSVIoQjND
b21wbGl0YXRpb25Nb2RlKTsKLWJvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjNDb21wbGl0
YXRpb25Nb2RlKTsKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgc2hvdWxkRHVtcElSKEIzQ29tcGls
YXRpb25Nb2RlKTsKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjNDb21waWxhdGlvbk1v
ZGUpOwogYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7CiBib29sIHNob3VsZFZhbGlkYXRlSVJBdEVh
Y2hQaGFzZSgpOwogYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMjQzNTk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5o
IgogI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgogI2luY2x1ZGUgIkIzTW92ZUNvbnN0YW50cy5o
IgorI2luY2x1ZGUgIkIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oIgogI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCiAjaW5jbHVkZSAi
QjNSZWR1Y2VEb3VibGVUb0Zsb2F0LmgiCkBAIC05Miw3ICs5Myw2IEBACiAgICAgICAgICAgICBk
dXBsaWNhdGVUYWlscyhwcm9jZWR1cmUpOwogICAgICAgICBmaXhTU0EocHJvY2VkdXJlKTsKICAg
ICAgICAgZm9sZFBhdGhDb25zdGFudHMocHJvY2VkdXJlKTsKLSAgICAgICAgCiAgICAgICAgIC8v
IEZJWE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKICAgICB9IGVsc2UgaWYgKHBy
b2NlZHVyZS5vcHRMZXZlbCgpID49IDEpIHsKQEAgLTEwNCw2ICsxMDQsNyBAQAogICAgIGxvd2Vy
TWFjcm9zKHByb2NlZHVyZSk7CiAKICAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikg
eworICAgICAgICBvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzKHByb2NlZHVyZSk7
CiAgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CiAKICAgICAgICAgLy8gRklYTUU6
IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNz
aW9uVHJlZXMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3B0aW1pemVBc3NvY2lhdGl2
ZUV4cHJlc3Npb25UcmVlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIz
T3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1
cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIE9wdGltaXplQXNzb2Np
YXRpdmVFeHByZXNzaW9uVHJlZXMgeworcHVibGljOgorICAgIE9wdGltaXplQXNzb2NpYXRpdmVF
eHByZXNzaW9uVHJlZXMoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIHJ1bigpOworCitwcml2YXRlOgorICAgIGludDY0X3Qg
bmV1dHJhbEVsZW1lbnQoT3Bjb2RlKTsKKyAgICBib29sIGlzQWJzb3JiaW5nRWxlbWVudChPcGNv
ZGUsIGludDY0X3QpOworICAgIHZvaWQgY29tYmluZUNvbnN0YW50cyhPcGNvZGUsIGludDY0X3Qm
LCBpbnQ2NF90KTsKKyAgICB2b2lkIGVtaXRWYWx1ZShPcGNvZGUsIFZhbHVlKiwgdW5zaWduZWQg
bnVtU2VlbiwgSW5zZXJ0aW9uU2V0Jiwgc2l6ZV90IGluZGV4SW5CbG9jaywgVmVjdG9yPFZhbHVl
KiwgND4mIHJlc3VsdHMpOworICAgIGJvb2wgb3B0aW1pemVSb290ZWRUcmVlKFZhbHVlKiByb290
LCBJbnNlcnRpb25TZXQmLCBzaXplX3QgaW5kZXhJbkJsb2NrLCBjb25zdCBWZWN0b3I8dW5zaWdu
ZWQ+JiB1c2VDb3VudHMpOworCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgYm9vbCB2ZXJi
b3NlIHsgZmFsc2UgfTsKK307CisKK2ludDY0X3QgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Np
b25UcmVlczo6bmV1dHJhbEVsZW1lbnQoT3Bjb2RlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsK
KyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgICAg
ICByZXR1cm4gMDsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBC
aXRBbmQ6CisgICAgICAgIHJldHVybiAtMTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworYm9vbCBPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzOjppc0Fic29yYmluZ0VsZW1lbnQoT3Bjb2RlIG9wLCBpbnQ2NF90
IGNvbnN0YW50KQoreworICAgIHN3aXRjaChvcCkgeworICAgIGNhc2UgQWRkOgorICAgIGNhc2Ug
Qml0WG9yOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBC
aXRBbmQ6CisgICAgICAgIHJldHVybiBjb25zdGFudCA9PSAwOworICAgIGNhc2UgQml0T3I6Cisg
ICAgICAgIHJldHVybiBjb25zdGFudCA9PSAtMTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBPcHRpbWl6ZUFzc29j
aWF0aXZlRXhwcmVzc2lvblRyZWVzOjpjb21iaW5lQ29uc3RhbnRzKE9wY29kZSBvcCwgaW50NjRf
dCYgY29uc3QxLCBpbnQ2NF90IGNvbnN0MikKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2Fz
ZSBBZGQ6CisgICAgICAgIGNvbnN0MSArPSBjb25zdDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTXVsOgorICAgICAgICBjb25zdDEgKj0gY29uc3QyOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEJpdEFuZDoKKyAgICAgICAgY29uc3QxICY9IGNvbnN0MjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBCaXRPcjoKKyAgICAgICAgY29uc3QxIHw9IGNvbnN0MjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGNvbnN0MSBePSBjb25zdDI7CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCit2b2lkIE9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OmVt
aXRWYWx1ZShPcGNvZGUgb3AsIFZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgbnVtU2VlbiwgSW5zZXJ0
aW9uU2V0JiBpbnNlcnRpb25TZXQsIHNpemVfdCBpbmRleEluQmxvY2ssIFZlY3RvcjxWYWx1ZSos
IDQ+JiByZXN1bHRzKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEFkZDoKKyAgICAg
ICAgaWYgKG51bVNlZW4gPiAxKSB7CisgICAgICAgICAgICBWYWx1ZSogY29uc3ROdW1TZWVuOwor
ICAgICAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgPT0gSW50MzIpCisgICAgICAgICAgICAgICAg
Y29uc3ROdW1TZWVuID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDMyVmFsdWU+KGluZGV4SW5C
bG9jaywgdmFsdWUtPm9yaWdpbigpLCBudW1TZWVuKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBjb25zdE51bVNlZW4gPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0NjRWYWx1
ZT4oaW5kZXhJbkJsb2NrLCB2YWx1ZS0+b3JpZ2luKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KG51
bVNlZW4pKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGluc2VydGlvblNldC5pbnNlcnQ8
VmFsdWU+KGluZGV4SW5CbG9jaywgTXVsLCB2YWx1ZS0+b3JpZ2luKCksIHZhbHVlLCBjb25zdE51
bVNlZW4pKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICBicmVhazsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bVNlZW47ICsraSkKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgYnJlYWs7CisgICBjYXNlIEJpdEFuZDoKKyAgIGNhc2UgQml0T3I6CisgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICBicmVhazsKKyAgIGNhc2UgQml0WG9y
OgorICAgICAgICBpZiAobnVtU2VlbiAlIDIpCisgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZh
bHVlKTsKKyAgICAgICBicmVhazsKKyAgIGRlZmF1bHQ6CisgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJl
c3Npb25UcmVlczo6b3B0aW1pemVSb290ZWRUcmVlKFZhbHVlKiByb290LCBJbnNlcnRpb25TZXQm
IGluc2VydGlvblNldCwgc2l6ZV90IGluZGV4SW5CbG9jaywgY29uc3QgVmVjdG9yPHVuc2lnbmVk
PiYgdXNlQ291bnRzKQoreworICAgIE9wY29kZSBvcCA9IHJvb3QtPm9wY29kZSgpOworICAgIGlm
ICgocm9vdC0+Y2hpbGQoMCktPm9wY29kZSgpICE9IG9wIHx8IHVzZUNvdW50c1tyb290LT5jaGls
ZCgwKS0+aW5kZXgoKV0gPiAxKQorICAgICAgICAmJiAocm9vdC0+Y2hpbGQoMSktPm9wY29kZSgp
ICE9IG9wIHx8IHVzZUNvdW50c1tyb290LT5jaGlsZCgxKS0+aW5kZXgoKV0gPiAxKSkgeworICAg
ICAgICAvLyBUaGlzIGlzIGEgdHJpdmlhbCBleHByZXNzaW9uIHRyZWUgb2Ygc2l6ZSB0d28sIHdl
IGhhdmUgbm90aGluZyB0byBkbyBoZXJlIHRoYXQgQjNSZWR1Y2VTdHJlbmd0aCBjYW5ub3QgZG8g
YmV0dGVyIHRoYW4gdXMuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBX
ZSBwcm9jZWVkIGluIHRocmVlIHN0ZXBzOgorICAgIC8vIC0gZ2F0aGVyIGFsbCB0aGUgbGVhdmVz
IG9mIHRoZSBleHByZXNzaW9uIHRyZWUKKyAgICAvLyAtIHNvcnQgdGhlbSwgYW5kIGNvbWJpbmUg
YXMgbWFueSBhcyBwb3NzaWJsZQorICAgIC8vIC0gbWFrZSBhIGJhbGFuY2VkIGJpbmFyeSB0cmVl
IG9mIHRoZW0KKworICAgIFZlY3RvcjxWYWx1ZSosIDQ+IGxlYXZlczsKKyAgICBWZWN0b3I8VmFs
dWUqLCAzPiB3b3JrbGlzdCA9IHsgcm9vdC0+Y2hpbGQoMCksIHJvb3QtPmNoaWxkKDEpIH07Cisg
ICAgaW50NjRfdCBjb25zdGFudCA9IG5ldXRyYWxFbGVtZW50KG9wKTsKKyAgICB3aGlsZSAoIXdv
cmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBWYWx1ZSogdmFsID0gd29ya2xpc3QudGFrZUxh
c3QoKTsKKyAgICAgICAgaWYgKHZhbC0+b3Bjb2RlKCkgPT0gb3AgJiYgdXNlQ291bnRzW3ZhbC0+
aW5kZXgoKV0gPCAyKSB7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5jaGlsZCgw
KSk7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5jaGlsZCgxKSk7CisgICAgICAg
IH0gZWxzZSBpZiAodmFsLT5oYXNJbnQoKSkKKyAgICAgICAgICAgIGNvbWJpbmVDb25zdGFudHMo
b3AsIGNvbnN0YW50LCB2YWwtPmFzSW50KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBs
ZWF2ZXMuYXBwZW5kKHZhbCk7CisgICAgfQorICAgIGlmIChpc0Fic29yYmluZ0VsZW1lbnQob3As
IGNvbnN0YW50KSkgeworICAgICAgICBWYWx1ZSogbmV3Um9vdDsKKyAgICAgICAgaWYgKHJvb3Qt
PnR5cGUoKSA9PSBJbnQzMikKKyAgICAgICAgICAgIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJsb2NrLCByb290LT5vcmlnaW4oKSwgc3RhdGljX2Nh
c3Q8aW50MzJfdD4oY29uc3RhbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3Um9v
dCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbmRleEluQmxvY2ssIHJvb3Qt
Pm9yaWdpbigpLCBjb25zdGFudCk7CisgICAgICAgIHJvb3QtPnJlcGxhY2VXaXRoSWRlbnRpdHko
bmV3Um9vdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0ZDo6c29ydChs
ZWF2ZXMuYmVnaW4oKSwgbGVhdmVzLmVuZCgpLCBbXShWYWx1ZSogeCwgVmFsdWUqIHkpIHsgcmV0
dXJuIHgtPmluZGV4KCkgPCB5LT5pbmRleCgpOyB9KTsKKyAgICBWZWN0b3I8VmFsdWUqLCA0PiBv
cHRMZWF2ZXM7CisgICAgVmFsdWUqIGxhc3RWYWx1ZSA9IG51bGxwdHI7CisgICAgdW5zaWduZWQg
bnVtU2VlbiA9IDA7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBsZWF2ZXMpIHsKKyAgICAgICAg
aWYgKGxhc3RWYWx1ZSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIG51bVNlZW4rKzsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAobGFzdFZhbHVlKQorICAgICAgICAgICAgICAgIGVtaXRW
YWx1ZShvcCwgbGFzdFZhbHVlLCBudW1TZWVuLCBpbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywg
b3B0TGVhdmVzKTsKKyAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlOworICAgICAgICAgICAg
bnVtU2VlbiA9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxhc3RWYWx1ZSkKKyAgICAg
ICAgZW1pdFZhbHVlKG9wLCBsYXN0VmFsdWUsIG51bVNlZW4sIGluc2VydGlvblNldCwgaW5kZXhJ
bkJsb2NrLCBvcHRMZWF2ZXMpOworCisgICAgLy8gb3B0TGVhdmVzIGNhbiBiZSBlbXB0eSBmb3Ig
dHJlZXMgb2YgQml0WG9yIHdoZXJlIGFsbCBsZWF2ZXMgaGFwcGVuIGFuIGV2ZW4gbnVtYmVyIG9m
IHRpbWVzLgorICAgIC8vIEluIHRoYXQgY2FzZSwgd2UgbWFrZSB0aGUgd2hvbGUgdHJlZSBlcXVp
dmFsZW50IHRvIHRoZSBuZXV0cmFsIGVsZW1lbnQgKHdoaWNoIGlzIDAgZm9yIEJpdFhvcikuCisg
ICAgaWYgKGNvbnN0YW50ICE9IG5ldXRyYWxFbGVtZW50KG9wKSB8fCBvcHRMZWF2ZXMuaXNFbXB0
eSgpKSB7CisgICAgICAgIGlmIChyb290LT50eXBlKCkgPT0gSW50MzIpCisgICAgICAgICAgICBv
cHRMZWF2ZXMuYXBwZW5kKGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihpbmRleElu
QmxvY2ssIHJvb3QtPm9yaWdpbigpLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihjb25zdGFudCkpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3B0TGVhdmVzLmFwcGVuZChpbnNlcnRpb25TZXQu
aW5zZXJ0PENvbnN0NjRWYWx1ZT4oaW5kZXhJbkJsb2NrLCByb290LT5vcmlnaW4oKSwgY29uc3Rh
bnQpKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBkYXRhTG9nKCJFeHBy
ZXNzaW9uIHRyZWUgcm9vdGVkIGF0ICIsICpyb290LCAiIHdpdGggbGVhdmVzIik7CisgICAgICAg
IGZvciAoVmFsdWUqIGxlYWY6IGxlYXZlcykKKyAgICAgICAgICAgIGRhdGFMb2coIiAiLCAqbGVh
Zik7CisgICAgICAgIGRhdGFMb2coIiA9PiIpOworICAgICAgICBmb3IgKFZhbHVlKiBsZWFmOiBv
cHRMZWF2ZXMpCisgICAgICAgICAgICBkYXRhTG9nKCIgIiwgKmxlYWYpOworICAgICAgICBkYXRh
TG9nKCJcbiIpOworICAgIH0KKworICAgIC8vIEZpbmFsbHkgd2UgY2FuIGJ1aWxkIHRoZSBiYWxh
bmNlZCBiaW5hcnkgdHJlZQorICAgIHVuc2lnbmVkIGxlYWZJbmRleCA9IDA7CisgICAgd2hpbGUg
KGxlYWZJbmRleCArIDEgPCBvcHRMZWF2ZXMuc2l6ZSgpKSB7CisgICAgICAgIG9wdExlYXZlcy5h
cHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5kZXhJbkJsb2NrLCBvcCwgcm9vdC0+
b3JpZ2luKCksIG9wdExlYXZlc1tsZWFmSW5kZXhdLCBvcHRMZWF2ZXNbbGVhZkluZGV4ICsgMV0p
KTsKKyAgICAgICAgbGVhZkluZGV4ICs9IDI7CisgICAgfQorICAgIEFTU0VSVChsZWFmSW5kZXgg
PT0gb3B0TGVhdmVzLnNpemUoKSAtIDEpOworICAgIHJvb3QtPnJlcGxhY2VXaXRoSWRlbnRpdHko
b3B0TGVhdmVzW2xlYWZJbmRleF0pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE9wdGlt
aXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OnJ1bigpCit7CisgICAgYm9vbCBjaGFuZ2Vk
ID0gZmFsc2U7CisKKyAgICAvLyBXZSBwcm9jZWVkIGluIHR3byBwaGFzZXMuCisgICAgLy8gSW4g
dGhlIGZpcnN0IG9uZSB3ZSBjb21wdXRlIHRoZSB1c2UgY291bnRzIG9mIGVhY2ggdmFsdWUgKG9m
IGFuIGludGVyZXN0aW5nIG9wY29kZSksIGFuZCBmaW5kIHBvdGVudGlhbCByb290cyBvZiBpbnRl
cmVzdGluZyBleHByZXNzaW9uIHRyZWVzLgorICAgIC8vIEluIHRoZSBzZWNvbmQgb25lIHdlIG9w
dGltaXplIGVhY2ggc3VjaCBleHByZXNzaW9uIHRyZWUgaW4gdHVybi4KKyAgICAvLyBXZSBuZWVk
IHRoZSB1c2UgY291bnRzIHRvIGF2b2lkIGR1cGxpY2F0aW5nIGNvZGUuCisKKyAgICBWZWN0b3I8
dW5zaWduZWQ+IHVzZUNvdW50cyhtX3Byb2MudmFsdWVzKCkuc2l6ZSgpLCAwKTsgLy8gTWFwcGlu
ZyBmcm9tIFZhbHVlOjptX2luZGV4IHRvIHVzZSBjb3VudHMuCisgICAgSGFzaFNldDxWYWx1ZSo+
IGV4cHJlc3Npb25UcmVlUm9vdHM7CisgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gcm9vdE93bmVy
czsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxk
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgIGlmICghY2hpbGQtPmlzSW50
ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNoaWxkLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTXVsOgorICAg
ICAgICAgICAgICAgIGNhc2UgQWRkOgorICAgICAgICAgICAgICAgIGNhc2UgQml0QW5kOgorICAg
ICAgICAgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAgICAgICAgY2FzZSBCaXRYb3I6Cisg
ICAgICAgICAgICAgICAgICAgIHVzZUNvdW50c1tjaGlsZC0+aW5kZXgoKV0rKzsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSAhPSB2YWx1ZS0+b3Bjb2RlKCkgfHwgdXNl
Q291bnRzW2NoaWxkLT5pbmRleCgpXSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
cHJlc3Npb25UcmVlUm9vdHMuYWRkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJv
b3RPd25lcnMuYWRkKGNoaWxkLT5vd25lcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgfQorICAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0ID0gSW5zZXJ0
aW9uU2V0KG1fcHJvYyk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHJvb3RPd25lcnMp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgYmxvY2stPnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KGluZGV4
KTsKKyAgICAgICAgICAgIGlmIChleHByZXNzaW9uVHJlZVJvb3RzLmNvbnRhaW5zKHZhbHVlKSkK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG9wdGltaXplUm9vdGVkVHJlZSh2YWx1ZSwgaW5z
ZXJ0aW9uU2V0LCBpbmRleCwgdXNlQ291bnRzKTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisK
K2Jvb2wgb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyhQcm9jZWR1cmUmIHByb2Mp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJvcHRpbWl6ZUFzc29jaWF0aXZl
RXhwcmVzc2lvblRyZWVzIik7CisgICAgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVl
cyBvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzKHByb2MpOworICAgIHJldHVybiBv
cHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLnJ1bigpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3B0aW1pemVBc3NvY2lh
dGl2ZUV4cHJlc3Npb25UcmVlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBGaW5kcyBs
YXJnZSBleHByZXNzaW9uIHRyZWVzIHVzaW5nIG9uZSBvZiB0aGUgYXNzb2NpYXRpdmUgYW5kIGNv
bW11dGF0aXZlIG9wY29kZXMgKEFkZC9NdWwvQml0QW5kL0JpdE9yL0JpdFhvciksCisvLyB0aGVu
IHJlb3JkZXIgdGhlbSB0byBlbGltaW5hdGUgYXMgbWFueSBvcGVyYXRpb25zIGFzIHBvc3NpYmxl
LCB0aGVuIG1ha2UgYmFsYW5jZWQgYmluYXJ5IHRyZWVzIG91dCBvZiB0aGVtCisvLyB0byBtYXhp
bWl6ZSBJTFAgYW5kIG1pbmltaXplIHRoZSB0b3RhbCBsYXRlbmN5LgorYm9vbCBvcHRpbWl6ZUFz
c29jaWF0aXZlRXhwcmVzc2lvblRyZWVzKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAyNDM1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICAg
ICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJ
ZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KIAogICAgIEFTU0VSVChtX3R5cGUgPT0gdmFsdWUtPm1f
dHlwZSk7CisgICAgQVNTRVJUKHZhbHVlICE9IHRoaXMpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBW
b2lkKSB7CiAgICAgICAgIHJlcGxhY2VXaXRoTm9wSWdub3JpbmdUeXBlKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMjQzNTk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5OCw2ICszOTgs
MTMyIEBACiAgICAgdGVzdExvYWRXaXRoT2Zmc2V0SW1wbCgzMjc2OCwgMTYzODQpOwogfQogCit2
b2lkIHRlc3RCaXRYb3JUcmVlQXJncyhpbnQ2NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9j
ZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAg
IFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpOworICAgIFZhbHVlKiBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBhcmdCKTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBub2RlLCBhcmdCKTsKKyAgICBub2Rl
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBub2RlLCBh
cmdBKTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9y
aWdpbigpLCBub2RlLCBhcmdCKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2
NF90Pihwcm9jLCBhLCBiKSwgKCgoYSBeIGIpIF4gYikgXiBhKSBeIGIpOworfQorCit2b2lkIHRl
c3RCaXRYb3JUcmVlQXJnc0V2ZW4oaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBW
YWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICBWYWx1ZSogbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
Qml0WG9yLCBPcmlnaW4oKSwgYXJnQSwgYXJnQik7CisgICAgbm9kZSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgbm9kZSwgYXJnQik7CisgICAgbm9kZSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgbm9kZSwgYXJn
QSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBu
b2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSwgYiks
ICgoYSBeIGIpIF4gYikgXiBhKTsKK30KKwordm9pZCB0ZXN0Qml0WG9yVHJlZUFyZ0ltbShpbnQ2
NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIFZhbHVlKiBpbW1CID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGIpOworICAgIFZhbHVlKiBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBpbW1CKTsKKyAgICBub2RlID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBub2RlKTsKKyAg
ICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBh
cmdBLCBub2RlKTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRY
b3IsIE9yaWdpbigpLCBpbW1CLCBub2RlKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1
bjxpbnQ2NF90Pihwcm9jLCBhKSwgYiBeIChhIF4gKGEgXiAoYSBeIGIpKSkpOworfQorCit2b2lk
IHRlc3RBZGRUcmVlQXJnMzIoaW50MzJfdCBhKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
VHJ1bmMsIE9yaWdpbigpLCBhcmdBKTsKKyAgICBWYWx1ZSogbm9kZSA9IGFyZ0E7CisgICAgaW50
MzJfdCBleHBlY3RlZFJlc3VsdCA9IGE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDIw
OyArK2kpIHsKKyAgICAgICAgVmFsdWUqIG90aGVyTm9kZTsKKyAgICAgICAgaWYgKCEoaSAlIDMp
KSB7CisgICAgICAgICAgICBvdGhlck5vZGUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgaSk7CisgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCArPSBpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3RoZXJOb2RlID0gYXJnQTsKKyAgICAgICAg
ICAgIGV4cGVjdGVkUmVzdWx0ICs9IGE7CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbm9kZSwgb3RoZXJOb2RlKTsK
KyAgICB9CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBub2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSks
IGV4cGVjdGVkUmVzdWx0KTsKK30KKwordm9pZCB0ZXN0TXVsVHJlZUFyZzMyKGludDMyX3QgYSkK
K3sKKyAgICAvLyBGaWJvbmFjY2ktbGlrZSBleHByZXNzaW9uIHRyZWUgd2l0aCBtdWx0aXBsaWNh
dGlvbiBpbnN0ZWFkIG9mIGFkZGl0aW9uLgorICAgIC8vIFZlcmlmaWVzIHRoYXQgd2UgZG9uJ3Qg
ZXhwbG9kZSBvbiBoZWF2aWx5IGZhY3RvcmVkIGdyYXBocy4KKyAgICBQcm9jZWR1cmUgcHJvYzsK
KyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdB
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwgYXJnQSk7CisgICAgVmFsdWUqIG5vZGVBID0gYXJnQTsKKyAg
ICBWYWx1ZSogbm9kZUIgPSBhcmdBOworICAgIGludDMyX3QgZXhwZWN0ZWRBID0gYSwgZXhwZWN0
ZWRSZXN1bHQgPSBhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyMDsgKytpKSB7Cisg
ICAgICAgIFZhbHVlKiBuZXdOb2RlQiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVs
LCBPcmlnaW4oKSwgbm9kZUEsIG5vZGVCKTsKKyAgICAgICAgbm9kZUEgPSBub2RlQjsKKyAgICAg
ICAgbm9kZUIgPSBuZXdOb2RlQjsKKyAgICAgICAgaW50MzJfdCBuZXdFeHBlY3RlZFJlc3VsdCA9
IGV4cGVjdGVkQSAqIGV4cGVjdGVkUmVzdWx0OworICAgICAgICBleHBlY3RlZEEgPSBleHBlY3Rl
ZFJlc3VsdDsKKyAgICAgICAgZXhwZWN0ZWRSZXN1bHQgPSBuZXdFeHBlY3RlZFJlc3VsdDsKKyAg
ICB9CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBu
b2RlQik7CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEpLCBl
eHBlY3RlZFJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdEJpdEFuZFRyZWVBcmczMihpbnQzMl90IGEp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBhcmdBID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZ0EpOworICAg
IFZhbHVlKiBub2RlID0gYXJnQTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgODsgKytp
KSB7CisgICAgICAgIFZhbHVlKiBjb25zdEkgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgaSB8IDQyKTsKKyAgICAgICAgVmFsdWUqIG5ld0JpdEFuZCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgYXJnQSwgY29uc3RJ
KTsKKyAgICAgICAgbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBP
cmlnaW4oKSwgbm9kZSwgbmV3Qml0QW5kKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBub2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBp
bGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSksIGEgJiA0Mik7Cit9CisKK3ZvaWQgdGVzdEJpdE9y
VHJlZUFyZzMyKGludDMyX3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApOworICAgIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBP
cmlnaW4oKSwgYXJnQSk7CisgICAgVmFsdWUqIG5vZGUgPSBhcmdBOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCA4OyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNvbnN0SSA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpKTsKKyAgICAgICAgVmFsdWUq
IG5ld0JpdEFuZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigp
LCBhcmdBLCBjb25zdEkpOworICAgICAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBCaXRPciwgT3JpZ2luKCksIG5vZGUsIG5ld0JpdEFuZCk7CisgICAgfQorICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7CisKKyAgICBD
SEVDS19FUShjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEpLCBhIHwgNyk7Cit9CisKIHZv
aWQgdGVzdEFyZyhpbnQgYXJndW1lbnQpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xNjkx
Miw2ICsxNzAzOCwxNCBAQAogICAgIFJVTih0ZXN0UmV0dXJuQ29uc3Q2NCgtNDIpKTsKICAgICBS
VU4odGVzdFJldHVyblZvaWQoKSk7CiAKKyAgICBSVU5fQklOQVJZKHRlc3RCaXRYb3JUcmVlQXJn
cywgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVz
dEJpdFhvclRyZWVBcmdzRXZlbiwgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOwor
ICAgIFJVTl9CSU5BUlkodGVzdEJpdFhvclRyZWVBcmdJbW0sIGludDY0T3BlcmFuZHMoKSwgaW50
NjRPcGVyYW5kcygpKTsKKyAgICBSVU5fVU5BUlkodGVzdEFkZFRyZWVBcmczMiwgaW50MzJPcGVy
YW5kcygpKTsKKyAgICBSVU5fVU5BUlkodGVzdE11bFRyZWVBcmczMiwgaW50MzJPcGVyYW5kcygp
KTsKKyAgICBSVU5fVU5BUlkodGVzdEJpdEFuZFRyZWVBcmczMiwgaW50MzJPcGVyYW5kcygpKTsK
KyAgICBSVU5fVU5BUlkodGVzdEJpdE9yVHJlZUFyZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworCiAg
ICAgUlVOKHRlc3RBZGRBcmcoMTExKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdzKDEsIDEpKTsKICAg
ICBSVU4odGVzdEFkZEFyZ3MoMSwgMikpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366294</attachid>
            <date>2019-03-29 12:28:15 -0700</date>
            <delta_ts>2019-04-03 15:31:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch194081</filename>
            <type>text/plain</type>
            <size>28822</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQzNTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBA
CisyMDE5LTAzLTI5ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQjMgc2hvdWxkIHVzZSBhc3NvY2lhdGl2aXR5IHRvIG9wdGltaXplIGV4cHJlc3Npb24g
dHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NDA4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggYWRkcyBhIG5ldyBCMyBwYXNzLCB0aGF0IHRyaWVzIHRvIGZpbmQgYW5kIG9wdGlt
aXplIGV4cHJlc3Npb24gdHJlZXMgbWFkZSBwdXJlbHkgb2YgYW55IG9uZSBhc3NvY2lhdGl2ZSBh
bmQgY29tbXV0YXRpdmUgb3BlcmF0b3IgKEFkZC9NdWwvQml0T3IvQml0QW5kL0JpdFhvcikuCisg
ICAgICAgIFRoZSBwYXNzIG9ubHkgcnVucyBpbiBPMiwgYW5kIHJ1bnMgb25jZSwgYWZ0ZXIgbG93
ZXJNYWNyb3MgYW5kIGp1c3QgYmVmb3JlIGEgcnVuIG9mIEIzUmVkdWNlU3RyZW5ndGggKHdoaWNo
IGhlbHBzIGNsZWFuIHVwIHRoZSBkZWFkIGNvZGUgaXQgdGVuZHMgdG8gbGVhdmUgYmVoaW5kKS4K
KworICAgICAgICBUaGUgcGFzcyBpcyBjdXJyZW50bHkgZXh0cmVtZWx5IGNvbnNlcnZhdGl2ZSwg
bm90IHRyeWluZyBhbnl0aGluZyBpZiBpdCB3b3VsZCBjYXVzZSBfYW55XyBjb2RlIGR1cGxpY2F0
aW9uLgorICAgICAgICBGb3IgdGhpcyBwdXJwb3NlLCBpdCBzdGFydHMgYnkgY29tcHV0aW5nIHVz
ZSBjb3VudHMgZm9yIHRoZSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBub2RlcyAodGhvc2Ugd2l0
aCB0aGUgcmlnaHQgb3Bjb2RlcyksIGFuZCBzZWdyZWdhdGUgdGhlbSBpbnRvIGV4cHJlc3Npb24g
dHJlZXMuCisgICAgICAgIFRoZSByb290IG9mIGFuIGV4cHJlc3Npb24gdHJlZSBpcyBhIG5vZGUg
dGhhdCBpcyBlaXRoZXIgdXNlZCBpbiBtdWx0aXBsZSBwbGFjZXMsIG9yIGlzIHVzZWQgYnkgYSB2
YWx1ZSB3aXRoIGEgZGlmZmVyZW50IG9wY29kZS4KKyAgICAgICAgVGhlIGxlYXZlcyBvZiBhbiBl
eHByZXNzaW9uIHRyZWUgYXJlIG5vZGVzIHRoYXQgYXJlIGVpdGhlciB1c2VkIGluIG11bHRpcGxl
IHBsYWNlcywgb3IgaGF2ZSBhIGRpZmZlcmVudCBvcGNvZGUuCisgICAgICAgIEFsbCBjb25zdGFu
dCBsZWF2ZXMgb2YgYSB0cmVlIGFyZSBjb21iaW5lZCwgYXMgd2VsbCBhcyBhbGwgbGVhdmVzIHRo
YXQgYXJlIGlkZW50aWNhbC4gV2hhdCByZW1haW5zIGlzIHRoZW4gbGFpZCBvdXQgaW50byBhIGJh
bGFuY2VkIGJpbmFyeSB0cmVlLCBob3BlZnVsbHkgbWF4aW1pemluZyBJTFAuCisKKyAgICAgICAg
VGhpcyBvcHRpbWl6YXRpb24gd2FzIGltcGxlbWVudGVkIGFzIGEgc3RhbmQtYWxvbmUgcGFzcyBh
bmQgbm90IGFzIHBhcnQgb2YgQjNSZWR1Y2VTdHJlbmd0aCBtb3N0bHkgYmVjYXVzZSBpdCBuZWVk
cyB1c2UgY291bnRzIHRvIGF2b2lkIGNvZGUgZHVwbGljYXRpb24uCisgICAgICAgIEl0IGFsc28g
YmVuZWZpdHMgZnJvbSBmaW5kaW5nIGFsbCB0cmVlIHJvb3RzIGZpcnN0LCBhbmQgbm90IHRyeWlu
ZyB0byByZXBlYXRlZGx5IG9wdGltaXplIHN1YnRyZWVzLgorCisgICAgICAgIEkgYWRkZWQgc2V2
ZXJhbCB0ZXN0cyB0byB0ZXN0QjMgd2l0aCB2YXJ5aW5nIHBhdHRlcm5zIG9mIHRyZWVzLiBJdCBp
cyBhbHNvIHRlc3RlZCBpbiBhIGxlc3MgZm9jdXNlZCB3YXkgYnkgbG90cyBvZiBvbGRlciB0ZXN0
cy4KKworICAgICAgICBJbiB0aGUgZnV0dXJlIHRoaXMgcGFzcyBjb3VsZCBiZSBleHBhbmRlZCB0
byBhbGxvdyBzb21lIGJvdW5kZWQgYW1vdW50IG9mIGNvZGUgZHVwbGljYXRpb24sIGFuZCBtZXJn
aW5nIG1vcmUgbGVhdmVzIChlLmcuIE11bChhLCAzKSBhbmQgYSBpbiBhbiBBZGQgdHJlZSwgaW50
byBNdWwoYSwgNCkpCisgICAgICAgIFRoZSBsYXR0ZXIgd2lsbCBuZWVkIGV4cG9zaW5nIHRoZSBw
ZWVwaG9sZSBvcHRpbWl6YXRpb25zIG91dCBvZiBCM1JlZHVjZVN0cmVuZ3RoIHRvIGF2b2lkIGR1
cGxpY2F0aW5nIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGIzL0IzQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGREdW1wSVJBdEVhY2hQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDoK
KyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRl
VG9BaXIpOgorICAgICAgICAqIGIzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVl
cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJl
c3Npb25UcmVlczo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyk6CisgICAgICAg
IChKU0M6OkIzOjpPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzOjpuZXV0cmFsRWxl
bWVudCk6CisgICAgICAgIChKU0M6OkIzOjpPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRy
ZWVzOjppc0Fic29yYmluZ0VsZW1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3Nv
Y2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6Y29tYmluZUNvbnN0YW50cyk6CisgICAgICAgIChKU0M6
OkIzOjpPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzOjplbWl0VmFsdWUpOgorICAg
ICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6b3B0aW1p
emVSb290ZWRUcmVlKToKKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHBy
ZXNzaW9uVHJlZXM6OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjpvcHRpbWl6ZUFzc29jaWF0aXZl
RXhwcmVzc2lvblRyZWVzKToKKyAgICAgICAgKiBiMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHBy
ZXNzaW9uVHJlZXMuaDoKKyAgICAgICAgKiBiMy9CM1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KToKKyAgICAgICAgKiBiMy90ZXN0YjMuY3Bw
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdFhvclRyZWVBcmdzKToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RCaXRYb3JUcmVlQXJnc0V2ZW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdFhv
clRyZWVBcmdJbW0pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEFkZFRyZWVBcmczMik6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0TXVsVHJlZUFyZzMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RC
aXRBbmRUcmVlQXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdE9yVHJlZUFyZzMyKToK
KyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIwMTktMDMtMjcgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgdmFsaWRhdGVPU1JFbnRyeVZhbHVlIHdpdGggSW50
NTIgc2hvdWxkIGJveCB0aGUgdmFsdWUgYmVpbmcgY2hlY2tlZCBpbnRvIGRvdWJsZSBmb3JtYXQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNDM1OTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzMzNSw2ICszMzM1LDggQEAKIAkJMkFGNzM4MkIxOEJC
QkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3RydWN0dXJlSURUYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzMDMyMTc1REYxQUQ0N0Q4OTk4QjM0RTEgLyogSlNTb3VyY2VDb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU291cmNlQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMEE1RjQwM0YxMUM0RjU5OUNENTk2RDUgLyogV2FzbVNpZ25hdHVyZUlu
bGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2FzbVNpZ25hdHVyZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM3NDM2NDkyMjRENzlFRjAw
QzhDMjI3IC8qIEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwOyBw
YXRoID0gYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzM3NDM2NEEyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0
aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09wdGlt
aXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaDsgcGF0aCA9IGIzL0IzT3B0aW1pemVBc3Nv
Y2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkz
NzExOUE3NzIwQ0NCNURDMDAyQzZEQzkgLyogV2ViS2l0VGFyZ2V0Q29uZGl0aW9uYWxzLnhjY29u
ZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IFdlYktpdFRhcmdldENvbmRpdGlvbmFscy54Y2NvbmZpZzsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxp
YnouZHlsaWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgbmFtZSA9IGxpYnouZHlsaWI7IHBhdGggPSB1c3Iv
bGliL2xpYnouZHlsaWI7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQkzN0M3MzhEMTFFREI1
NjcyMDAzRjJCMEIgLyogUGFyc2VJbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGFyc2VJbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUzOTYsNiArNTM5
OCw4IEBACiAJCQkJMEYzMzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0
cy5oICovLAogCQkJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi8s
CiAJCQkJMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJCQkJMzM3
NDM2NDkyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25U
cmVlcy5jcHAgKi8sCisJCQkJMzM3NDM2NEEyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0aW1pemVB
c3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oICovLAogCQkJCTBGRUM4NEQ5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5jcHAgKi8sCiAJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmggKi8sCiAJCQkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2lu
RHVtcC5jcHAgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAy
NDM1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Myw2ICsxNDMsNyBAQAogYjMvQjNNb3ZlQ29uc3RhbnRzLmNwcAogYjMvQjNPcGFx
dWVCeXByb2R1Y3RzLmNwcAogYjMvQjNPcGNvZGUuY3BwCitiMy9CM09wdGltaXplQXNzb2NpYXRp
dmVFeHByZXNzaW9uVHJlZXMuY3BwCiBiMy9CM09yaWdpbi5jcHAKIGIzL0IzT3JpZ2luRHVtcC5j
cHAKIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW1vbi5jcHAJKHJldmlzaW9uIDI0MzU5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLWJvb2wgc2hvdWxkRHVtcElSKEIzQ29tcGxp
dGF0aW9uTW9kZSBtb2RlKQorYm9vbCBzaG91bGREdW1wSVIoQjNDb21waWxhdGlvbk1vZGUgbW9k
ZSkKIHsKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGRE
dW1wSVJBdEVhY2hQaGFzZShtb2RlKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICNlbmRpZgogfQogCi1i
b29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzQ29tcGxpdGF0aW9uTW9kZSBtb2RlKQorYm9v
bCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZShCM0NvbXBpbGF0aW9uTW9kZSBtb2RlKQogewogICAg
IGlmIChtb2RlID09IEIzTW9kZSkKICAgICAgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBHcmFwaEF0
RWFjaFBoYXNlKCkgfHwgT3B0aW9uczo6ZHVtcEIzR3JhcGhBdEVhY2hQaGFzZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9uIDI0MzU5NykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMyAr
MzQsMTMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLWVudW0gQjNDb21w
bGl0YXRpb25Nb2RlIHsKK2VudW0gQjNDb21waWxhdGlvbk1vZGUgewogICAgIEIzTW9kZSwKICAg
ICBBaXJNb2RlCiB9OwogCi1KU19FWFBPUlRfUFJJVkFURSBib29sIHNob3VsZER1bXBJUihCM0Nv
bXBsaXRhdGlvbk1vZGUpOwotYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZShCM0NvbXBsaXRh
dGlvbk1vZGUpOworSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBzaG91bGREdW1wSVIoQjNDb21waWxh
dGlvbk1vZGUpOworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZShCM0NvbXBpbGF0aW9uTW9k
ZSk7CiBib29sIHNob3VsZFZhbGlkYXRlSVIoKTsKIGJvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKCk7CiBib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyNDM1OTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDYgKzQzLDcgQEAKICNpbmNsdWRlICJCM0xvd2VyTWFjcm9zQWZ0ZXJPcHRpbWl6YXRpb25zLmgi
CiAjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCiAjaW5jbHVkZSAiQjNNb3ZlQ29uc3RhbnRzLmgi
CisjaW5jbHVkZSAiQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmgiCiAjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1B1cmVDU0UuaCIKICNpbmNsdWRlICJC
M1JlZHVjZURvdWJsZVRvRmxvYXQuaCIKQEAgLTkyLDcgKzkzLDYgQEAKICAgICAgICAgICAgIGR1
cGxpY2F0ZVRhaWxzKHByb2NlZHVyZSk7CiAgICAgICAgIGZpeFNTQShwcm9jZWR1cmUpOwogICAg
ICAgICBmb2xkUGF0aENvbnN0YW50cyhwcm9jZWR1cmUpOwotICAgICAgICAKICAgICAgICAgLy8g
RklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNwogICAgIH0gZWxzZSBpZiAocHJv
Y2VkdXJlLm9wdExldmVsKCkgPj0gMSkgewpAQCAtMTA0LDYgKzEwNCw3IEBACiAgICAgbG93ZXJN
YWNyb3MocHJvY2VkdXJlKTsKIAogICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAyKSB7
CisgICAgICAgIG9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMocHJvY2VkdXJlKTsK
ICAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKIAogICAgICAgICAvLyBGSVhNRTog
QWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Np
b25UcmVlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcHRpbWl6ZUFzc29jaWF0aXZl
RXhwcmVzc2lvblRyZWVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNP
cGNvZGUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgT3B0aW1pemVBc3NvY2lh
dGl2ZUV4cHJlc3Npb25UcmVlcyB7CitwdWJsaWM6CisgICAgT3B0aW1pemVBc3NvY2lhdGl2ZUV4
cHJlc3Npb25UcmVlcyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9jKHByb2MpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCk7CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBu
ZXV0cmFsRWxlbWVudChPcGNvZGUpOworICAgIGJvb2wgaXNBYnNvcmJpbmdFbGVtZW50KE9wY29k
ZSwgaW50NjRfdCk7CisgICAgdm9pZCBjb21iaW5lQ29uc3RhbnRzKE9wY29kZSwgaW50NjRfdCYs
IGludDY0X3QpOworICAgIHZvaWQgZW1pdFZhbHVlKE9wY29kZSwgVmFsdWUqLCB1bnNpZ25lZCBu
dW1TZWVuLCBJbnNlcnRpb25TZXQmLCBzaXplX3QgaW5kZXhJbkJsb2NrLCBWZWN0b3I8VmFsdWUq
LCA0PiYgcmVzdWx0cyk7CisgICAgYm9vbCBvcHRpbWl6ZVJvb3RlZFRyZWUoVmFsdWUqIHJvb3Qs
IEluc2VydGlvblNldCYsIHNpemVfdCBpbmRleEluQmxvY2ssIGNvbnN0IFZlY3Rvcjx1bnNpZ25l
ZD4mIHVzZUNvdW50cyk7CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBib29sIHZlcmJv
c2UgeyBmYWxzZSB9OworfTsKKworaW50NjRfdCBPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lv
blRyZWVzOjpuZXV0cmFsRWxlbWVudChPcGNvZGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgewor
ICAgIGNhc2UgQWRkOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAg
IHJldHVybiAwOworICAgIGNhc2UgTXVsOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIEJp
dEFuZDoKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIE9wdGltaXplQXNzb2NpYXRp
dmVFeHByZXNzaW9uVHJlZXM6OmlzQWJzb3JiaW5nRWxlbWVudChPcGNvZGUgb3AsIGludDY0X3Qg
Y29uc3RhbnQpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAgIGNhc2Ug
Qml0WG9yOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBC
aXRBbmQ6CisgICAgICAgIHJldHVybiAhY29uc3RhbnQ7CisgICAgY2FzZSBCaXRPcjoKKyAgICAg
ICAgcmV0dXJuIGNvbnN0YW50ID09IC0xOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE9wdGltaXplQXNzb2NpYXRp
dmVFeHByZXNzaW9uVHJlZXM6OmNvbWJpbmVDb25zdGFudHMoT3Bjb2RlIG9wLCBpbnQ2NF90JiBj
b25zdDEsIGludDY0X3QgY29uc3QyKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEFk
ZDoKKyAgICAgICAgY29uc3QxICs9IGNvbnN0MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
dWw6CisgICAgICAgIGNvbnN0MSAqPSBjb25zdDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Qml0QW5kOgorICAgICAgICBjb25zdDEgJj0gY29uc3QyOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEJpdE9yOgorICAgICAgICBjb25zdDEgfD0gY29uc3QyOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY29uc3QxIF49IGNvbnN0MjsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6ZW1pdFZh
bHVlKE9wY29kZSBvcCwgVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBudW1TZWVuLCBJbnNlcnRpb25T
ZXQmIGluc2VydGlvblNldCwgc2l6ZV90IGluZGV4SW5CbG9jaywgVmVjdG9yPFZhbHVlKiwgND4m
IHJlc3VsdHMpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAgICAgICBp
ZiAobnVtU2VlbiA+IDEpIHsKKyAgICAgICAgICAgIFZhbHVlKiBjb25zdE51bVNlZW47CisgICAg
ICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBJbnQzMikKKyAgICAgICAgICAgICAgICBjb25z
dE51bVNlZW4gPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJsb2Nr
LCB2YWx1ZS0+b3JpZ2luKCksIG51bVNlZW4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGNvbnN0TnVtU2VlbiA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihp
bmRleEluQmxvY2ssIHZhbHVlLT5vcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obnVtU2Vl
bikpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1
ZT4oaW5kZXhJbkJsb2NrLCBNdWwsIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIGNvbnN0TnVtU2Vl
bikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNdWw6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1TZWVuOyArK2kpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh2YWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCaXRY
b3I6CisgICAgICAgIGlmIChudW1TZWVuICUgMikKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgT3B0aW1pemVBc3NvY2lhdGl2
ZUV4cHJlc3Npb25UcmVlczo6b3B0aW1pemVSb290ZWRUcmVlKFZhbHVlKiByb290LCBJbnNlcnRp
b25TZXQmIGluc2VydGlvblNldCwgc2l6ZV90IGluZGV4SW5CbG9jaywgY29uc3QgVmVjdG9yPHVu
c2lnbmVkPiYgdXNlQ291bnRzKQoreworICAgIE9wY29kZSBvcCA9IHJvb3QtPm9wY29kZSgpOwor
ICAgIGlmICgocm9vdC0+Y2hpbGQoMCktPm9wY29kZSgpICE9IG9wIHx8IHVzZUNvdW50c1tyb290
LT5jaGlsZCgwKS0+aW5kZXgoKV0gPiAxKQorICAgICAgICAmJiAocm9vdC0+Y2hpbGQoMSktPm9w
Y29kZSgpICE9IG9wIHx8IHVzZUNvdW50c1tyb290LT5jaGlsZCgxKS0+aW5kZXgoKV0gPiAxKSkg
eworICAgICAgICAvLyBUaGlzIGlzIGEgdHJpdmlhbCBleHByZXNzaW9uIHRyZWUgb2Ygc2l6ZSB0
d28sIHdlIGhhdmUgbm90aGluZyB0byBkbyBoZXJlIHRoYXQgQjNSZWR1Y2VTdHJlbmd0aCBjYW5u
b3QgZG8gYmV0dGVyIHRoYW4gdXMuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICAvLyBXZSBwcm9jZWVkIGluIHRocmVlIHN0ZXBzOgorICAgIC8vIC0gZ2F0aGVyIGFsbCB0aGUg
bGVhdmVzIG9mIHRoZSBleHByZXNzaW9uIHRyZWUKKyAgICAvLyAtIHNvcnQgdGhlbSwgYW5kIGNv
bWJpbmUgYXMgbWFueSBhcyBwb3NzaWJsZQorICAgIC8vIC0gbWFrZSBhIGJhbGFuY2VkIGJpbmFy
eSB0cmVlIG9mIHRoZW0KKworICAgIFZlY3RvcjxWYWx1ZSosIDQ+IGxlYXZlczsKKyAgICBWZWN0
b3I8VmFsdWUqLCAzPiB3b3JrbGlzdCA9IHsgcm9vdC0+Y2hpbGQoMCksIHJvb3QtPmNoaWxkKDEp
IH07CisgICAgaW50NjRfdCBjb25zdGFudCA9IG5ldXRyYWxFbGVtZW50KG9wKTsKKyAgICB3aGls
ZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBWYWx1ZSogdmFsID0gd29ya2xpc3Qu
dGFrZUxhc3QoKTsKKyAgICAgICAgaWYgKHZhbC0+b3Bjb2RlKCkgPT0gb3AgJiYgdXNlQ291bnRz
W3ZhbC0+aW5kZXgoKV0gPCAyKSB7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5j
aGlsZCgwKSk7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5jaGlsZCgxKSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAodmFsLT5oYXNJbnQoKSkKKyAgICAgICAgICAgIGNvbWJpbmVDb25z
dGFudHMob3AsIGNvbnN0YW50LCB2YWwtPmFzSW50KCkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBsZWF2ZXMuYXBwZW5kKHZhbCk7CisgICAgfQorICAgIGlmIChpc0Fic29yYmluZ0VsZW1l
bnQob3AsIGNvbnN0YW50KSkgeworICAgICAgICBWYWx1ZSogbmV3Um9vdDsKKyAgICAgICAgaWYg
KHJvb3QtPnR5cGUoKSA9PSBJbnQzMikKKyAgICAgICAgICAgIG5ld1Jvb3QgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJsb2NrLCByb290LT5vcmlnaW4oKSwgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oY29uc3RhbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbmRleEluQmxvY2ss
IHJvb3QtPm9yaWdpbigpLCBjb25zdGFudCk7CisgICAgICAgIHJvb3QtPnJlcGxhY2VXaXRoSWRl
bnRpdHkobmV3Um9vdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHN0ZDo6
c29ydChsZWF2ZXMuYmVnaW4oKSwgbGVhdmVzLmVuZCgpLCBbXShWYWx1ZSogeCwgVmFsdWUqIHkp
IHsKKyAgICAgICAgcmV0dXJuIHgtPmluZGV4KCkgPCB5LT5pbmRleCgpOworICAgIH0pOworICAg
IFZlY3RvcjxWYWx1ZSosIDQ+IG9wdExlYXZlczsKKyAgICBWYWx1ZSogbGFzdFZhbHVlID0gbnVs
bHB0cjsKKyAgICB1bnNpZ25lZCBudW1TZWVuID0gMDsKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6
IGxlYXZlcykgeworICAgICAgICBpZiAobGFzdFZhbHVlID09IHZhbHVlKQorICAgICAgICAgICAg
bnVtU2VlbisrOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsYXN0VmFsdWUpCisg
ICAgICAgICAgICAgICAgZW1pdFZhbHVlKG9wLCBsYXN0VmFsdWUsIG51bVNlZW4sIGluc2VydGlv
blNldCwgaW5kZXhJbkJsb2NrLCBvcHRMZWF2ZXMpOworICAgICAgICAgICAgbGFzdFZhbHVlID0g
dmFsdWU7CisgICAgICAgICAgICBudW1TZWVuID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
ZiAobGFzdFZhbHVlKQorICAgICAgICBlbWl0VmFsdWUob3AsIGxhc3RWYWx1ZSwgbnVtU2Vlbiwg
aW5zZXJ0aW9uU2V0LCBpbmRleEluQmxvY2ssIG9wdExlYXZlcyk7CisKKyAgICAvLyBvcHRMZWF2
ZXMgY2FuIGJlIGVtcHR5IGZvciB0cmVlcyBvZiBCaXRYb3Igd2hlcmUgYWxsIGxlYXZlcyBoYXBw
ZW4gYW4gZXZlbiBudW1iZXIgb2YgdGltZXMuCisgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSBtYWtl
IHRoZSB3aG9sZSB0cmVlIGVxdWl2YWxlbnQgdG8gdGhlIG5ldXRyYWwgZWxlbWVudCAod2hpY2gg
aXMgMCBmb3IgQml0WG9yKS4KKyAgICBpZiAoY29uc3RhbnQgIT0gbmV1dHJhbEVsZW1lbnQob3Ap
IHx8IG9wdExlYXZlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHJvb3QtPnR5cGUoKSA9PSBJ
bnQzMikKKyAgICAgICAgICAgIG9wdExlYXZlcy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2VydDxD
b25zdDMyVmFsdWU+KGluZGV4SW5CbG9jaywgcm9vdC0+b3JpZ2luKCksIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KGNvbnN0YW50KSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvcHRMZWF2ZXMu
YXBwZW5kKGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbmRleEluQmxvY2ssIHJv
b3QtPm9yaWdpbigpLCBjb25zdGFudCkpOworICAgIH0KKworICAgIGlmICh2ZXJib3NlKSB7Cisg
ICAgICAgIGRhdGFMb2coIkV4cHJlc3Npb24gdHJlZSByb290ZWQgYXQgIiwgKnJvb3QsICIgd2l0
aCBsZWF2ZXMiKTsKKyAgICAgICAgZm9yIChWYWx1ZSogbGVhZiA6IGxlYXZlcykKKyAgICAgICAg
ICAgIGRhdGFMb2coIiAiLCAqbGVhZik7CisgICAgICAgIGRhdGFMb2coIiA9PiIpOworICAgICAg
ICBmb3IgKFZhbHVlKiBsZWFmIDogb3B0TGVhdmVzKQorICAgICAgICAgICAgZGF0YUxvZygiICIs
ICpsZWFmKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICB9CisKKyAgICAvLyBGaW5hbGx5
IHdlIGNhbiBidWlsZCB0aGUgYmFsYW5jZWQgYmluYXJ5IHRyZWUKKyAgICB1bnNpZ25lZCBsZWFm
SW5kZXggPSAwOworICAgIHdoaWxlIChsZWFmSW5kZXggKyAxIDwgb3B0TGVhdmVzLnNpemUoKSkg
eworICAgICAgICBvcHRMZWF2ZXMuYXBwZW5kKGluc2VydGlvblNldC5pbnNlcnQ8VmFsdWU+KGlu
ZGV4SW5CbG9jaywgb3AsIHJvb3QtPm9yaWdpbigpLCBvcHRMZWF2ZXNbbGVhZkluZGV4XSwgb3B0
TGVhdmVzW2xlYWZJbmRleCArIDFdKSk7CisgICAgICAgIGxlYWZJbmRleCArPSAyOworICAgIH0K
KyAgICBBU1NFUlQobGVhZkluZGV4ID09IG9wdExlYXZlcy5zaXplKCkgLSAxKTsKKyAgICByb290
LT5yZXBsYWNlV2l0aElkZW50aXR5KG9wdExlYXZlc1tsZWFmSW5kZXhdKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzOjpydW4o
KQoreworICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworCisgICAgLy8gV2UgcHJvY2VlZCBpbiB0
d28gcGhhc2VzLgorICAgIC8vIEluIHRoZSBmaXJzdCBvbmUgd2UgY29tcHV0ZSB0aGUgdXNlIGNv
dW50cyBvZiBlYWNoIHZhbHVlIChvZiBhbiBpbnRlcmVzdGluZyBvcGNvZGUpLCBhbmQgZmluZCBw
b3RlbnRpYWwgcm9vdHMgb2YgaW50ZXJlc3RpbmcgZXhwcmVzc2lvbiB0cmVlcy4KKyAgICAvLyBJ
biB0aGUgc2Vjb25kIG9uZSB3ZSBvcHRpbWl6ZSBlYWNoIHN1Y2ggZXhwcmVzc2lvbiB0cmVlIGlu
IHR1cm4uCisgICAgLy8gV2UgbmVlZCB0aGUgdXNlIGNvdW50cyB0byBhdm9pZCBkdXBsaWNhdGlu
ZyBjb2RlLgorCisgICAgVmVjdG9yPHVuc2lnbmVkPiB1c2VDb3VudHMobV9wcm9jLnZhbHVlcygp
LnNpemUoKSwgMCk7IC8vIE1hcHBpbmcgZnJvbSBWYWx1ZTo6bV9pbmRleCB0byB1c2UgY291bnRz
LgorICAgIEhhc2hTZXQ8VmFsdWUqPiBleHByZXNzaW9uVHJlZVJvb3RzOworICAgIEhhc2hTZXQ8
QmFzaWNCbG9jayo+IHJvb3RPd25lcnM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9wcm9jKSB7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAg
ICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFjaGlsZC0+aXNJbnRlZ2VyKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hpbGQtPm9wY29kZSgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBNdWw6CisgICAgICAgICAgICAgICAgY2FzZSBBZGQ6CisgICAgICAgICAg
ICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgICAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAg
ICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICAgICAgICAgdXNlQ291bnRzW2NoaWxk
LT5pbmRleCgpXSsrOworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wY29kZSgpICE9
IHZhbHVlLT5vcGNvZGUoKSB8fCB1c2VDb3VudHNbY2hpbGQtPmluZGV4KCldID4gMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvblRyZWVSb290cy5hZGQoY2hpbGQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcm9vdE93bmVycy5hZGQoY2hpbGQtPm93bmVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0ID0gSW5zZXJ0aW9uU2V0KG1fcHJvYyk7CisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IHJvb3RPd25lcnMpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgVmFsdWUqIHZh
bHVlID0gYmxvY2stPmF0KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChleHByZXNzaW9uVHJlZVJv
b3RzLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG9wdGltaXpl
Um9vdGVkVHJlZSh2YWx1ZSwgaW5zZXJ0aW9uU2V0LCBpbmRleCwgdXNlQ291bnRzKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorCisgICAg
cmV0dXJuIGNoYW5nZWQ7Cit9CisKK2Jvb2wgb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25U
cmVlcyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2Ms
ICJvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzIik7CisgICAgT3B0aW1pemVBc3Nv
Y2lhdGl2ZUV4cHJlc3Npb25UcmVlcyBvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVz
KHByb2MpOworICAgIHJldHVybiBvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLnJ1
bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNz
aW9uVHJlZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJv
Y2VkdXJlOworCisvLyBGaW5kcyBsYXJnZSBleHByZXNzaW9uIHRyZWVzIHVzaW5nIG9uZSBvZiB0
aGUgYXNzb2NpYXRpdmUgYW5kIGNvbW11dGF0aXZlIG9wY29kZXMgKEFkZC9NdWwvQml0QW5kL0Jp
dE9yL0JpdFhvciksCisvLyB0aGVuIHJlb3JkZXIgdGhlbSB0byBlbGltaW5hdGUgYXMgbWFueSBv
cGVyYXRpb25zIGFzIHBvc3NpYmxlLCB0aGVuIG1ha2UgYmFsYW5jZWQgYmluYXJ5IHRyZWVzIG91
dCBvZiB0aGVtCisvLyB0byBtYXhpbWl6ZSBJTFAgYW5kIG1pbmltaXplIHRoZSB0b3RhbCBsYXRl
bmN5LgorYm9vbCBvcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzKFByb2NlZHVyZSYp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAyNDM1OTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDYgKzYzLDcgQEAKICAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRo
ZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KIAogICAgIEFTU0VS
VChtX3R5cGUgPT0gdmFsdWUtPm1fdHlwZSk7CisgICAgQVNTRVJUKHZhbHVlICE9IHRoaXMpOwog
CiAgICAgaWYgKG1fdHlwZSA9PSBWb2lkKSB7CiAgICAgICAgIHJlcGxhY2VXaXRoTm9wSWdub3Jp
bmdUeXBlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24g
MjQzNTk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCM0NvbXBpbGUuaCIKICNpbmNsdWRl
ICJCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmgiCiAjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIK
KyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgogI2luY2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5o
IgogI2luY2x1ZGUgIkIzRWZmZWN0cy5oIgogI2luY2x1ZGUgIkIzRmVuY2VWYWx1ZS5oIgpAQCAt
Mzk4LDYgKzM5OSwxMzIgQEAKICAgICB0ZXN0TG9hZFdpdGhPZmZzZXRJbXBsKDMyNzY4LCAxNjM4
NCk7CiB9CiAKK3ZvaWQgdGVzdEJpdFhvclRyZWVBcmdzKGludDY0X3QgYSwgaW50NjRfdCBiKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGFy
Z0IgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIG5vZGUgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIGFyZ0IpOworICAgIG5vZGUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5vZGUsIGFyZ0Ip
OworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2lu
KCksIG5vZGUsIGFyZ0EpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIG5vZGUsIGFyZ0IpOworICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7CisKKyAgICBDSEVDS19FUShjb21waWxl
QW5kUnVuPGludDY0X3Q+KHByb2MsIGEsIGIpLCAoKChhIF4gYikgXiBiKSBeIGEpIF4gYik7Cit9
CisKK3ZvaWQgdGVzdEJpdFhvclRyZWVBcmdzRXZlbihpbnQ2NF90IGEsIGludDY0X3QgYikKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmdC
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBhcmdCKTsKKyAgICBub2RlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBub2RlLCBhcmdCKTsK
KyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigp
LCBub2RlLCBhcmdBKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwg
T3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90Pihw
cm9jLCBhLCBiKSwgKChhIF4gYikgXiBiKSBeIGEpOworfQorCit2b2lkIHRlc3RCaXRYb3JUcmVl
QXJnSW1tKGludDY0X3QgYSwgaW50NjRfdCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGltbUIgPSByb290LT5hcHBlbmROZXc8Q29uc3Q2
NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYik7CisgICAgVmFsdWUqIG5vZGUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIGltbUIpOworICAgIG5v
ZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0Es
IG5vZGUpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwg
T3JpZ2luKCksIGFyZ0EsIG5vZGUpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGltbUIsIG5vZGUpOworICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7CisKKyAgICBDSEVDS19FUShj
b21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEpLCBiIF4gKGEgXiAoYSBeIChhIF4gYikpKSk7
Cit9CisKK3ZvaWQgdGVzdEFkZFRyZWVBcmczMihpbnQzMl90IGEpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1
ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZ0EpOworICAgIFZhbHVlKiBub2RlID0gYXJn
QTsKKyAgICBpbnQzMl90IGV4cGVjdGVkUmVzdWx0ID0gYTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgMjA7ICsraSkgeworICAgICAgICBWYWx1ZSogb3RoZXJOb2RlOworICAgICAgICBp
ZiAoIShpICUgMykpIHsKKyAgICAgICAgICAgIG90aGVyTm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpKTsKKyAgICAgICAgICAgIGV4cGVjdGVkUmVz
dWx0ICs9IGk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdGhlck5vZGUgPSBhcmdB
OworICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQgKz0gYTsKKyAgICAgICAgfQorICAgICAgICBu
b2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBub2RlLCBv
dGhlck5vZGUpOworICAgIH0KKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQzMl90
Pihwcm9jLCBhKSwgZXhwZWN0ZWRSZXN1bHQpOworfQorCit2b2lkIHRlc3RNdWxUcmVlQXJnMzIo
aW50MzJfdCBhKQoreworICAgIC8vIEZpYm9uYWNjaS1saWtlIGV4cHJlc3Npb24gdHJlZSB3aXRo
IG11bHRpcGxpY2F0aW9uIGluc3RlYWQgb2YgYWRkaXRpb24uCisgICAgLy8gVmVyaWZpZXMgdGhh
dCB3ZSBkb24ndCBleHBsb2RlIG9uIGhlYXZpbHkgZmFjdG9yZWQgZ3JhcGhzLgorICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
VmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXJnQSA9IHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBhcmdBKTsKKyAgICBWYWx1ZSogbm9kZUEg
PSBhcmdBOworICAgIFZhbHVlKiBub2RlQiA9IGFyZ0E7CisgICAgaW50MzJfdCBleHBlY3RlZEEg
PSBhLCBleHBlY3RlZFJlc3VsdCA9IGE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDIw
OyArK2kpIHsKKyAgICAgICAgVmFsdWUqIG5ld05vZGVCID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBNdWwsIE9yaWdpbigpLCBub2RlQSwgbm9kZUIpOworICAgICAgICBub2RlQSA9IG5v
ZGVCOworICAgICAgICBub2RlQiA9IG5ld05vZGVCOworICAgICAgICBpbnQzMl90IG5ld0V4cGVj
dGVkUmVzdWx0ID0gZXhwZWN0ZWRBICogZXhwZWN0ZWRSZXN1bHQ7CisgICAgICAgIGV4cGVjdGVk
QSA9IGV4cGVjdGVkUmVzdWx0OworICAgICAgICBleHBlY3RlZFJlc3VsdCA9IG5ld0V4cGVjdGVk
UmVzdWx0OworICAgIH0KKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwg
T3JpZ2luKCksIG5vZGVCKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50MzJfdD4o
cHJvYywgYSksIGV4cGVjdGVkUmVzdWx0KTsKK30KKwordm9pZCB0ZXN0Qml0QW5kVHJlZUFyZzMy
KGludDMyX3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwg
YXJnQSk7CisgICAgVmFsdWUqIG5vZGUgPSBhcmdBOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCA4OyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNvbnN0SSA9IHJvb3QtPmFwcGVuZE5ldzxD
b25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpIHwgNDIpOworICAgICAgICBWYWx1ZSogbmV3
Qml0QW5kID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBh
cmdBLCBjb25zdEkpOworICAgICAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRBbmQsIE9yaWdpbigpLCBub2RlLCBuZXdCaXRBbmQpOworICAgIH0KKyAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hF
Q0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBhKSwgYSAmIDQyKTsKK30KKwordm9p
ZCB0ZXN0Qml0T3JUcmVlQXJnMzIoaW50MzJfdCBhKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0Eg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgVHJ1bmMsIE9yaWdpbigpLCBhcmdBKTsKKyAgICBWYWx1ZSogbm9kZSA9IGFyZ0E7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDg7ICsraSkgeworICAgICAgICBWYWx1ZSogY29uc3RJ
ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGkpOworICAg
ICAgICBWYWx1ZSogbmV3Qml0QW5kID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRP
ciwgT3JpZ2luKCksIGFyZ0EsIGNvbnN0SSk7CisgICAgICAgIG5vZGUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbm9kZSwgbmV3Qml0QW5kKTsKKyAgICB9
CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBub2Rl
KTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSksIGEgfCA3
KTsKK30KKwogdm9pZCB0ZXN0QXJnKGludCBhcmd1bWVudCkKIHsKICAgICBQcm9jZWR1cmUgcHJv
YzsKQEAgLTE2OTEyLDYgKzE3MDM5LDE0IEBACiAgICAgUlVOKHRlc3RSZXR1cm5Db25zdDY0KC00
MikpOwogICAgIFJVTih0ZXN0UmV0dXJuVm9pZCgpKTsKIAorICAgIFJVTl9CSU5BUlkodGVzdEJp
dFhvclRyZWVBcmdzLCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFuZHMoKSk7CisgICAgUlVO
X0JJTkFSWSh0ZXN0Qml0WG9yVHJlZUFyZ3NFdmVuLCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3Bl
cmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0WG9yVHJlZUFyZ0ltbSwgaW50NjRPcGVy
YW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0QWRkVHJlZUFyZzMy
LCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0TXVsVHJlZUFyZzMyLCBpbnQz
Mk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0Qml0QW5kVHJlZUFyZzMyLCBpbnQzMk9w
ZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0Qml0T3JUcmVlQXJnMzIsIGludDMyT3BlcmFu
ZHMoKSk7CisKICAgICBSVU4odGVzdEFkZEFyZygxMTEpKTsKICAgICBSVU4odGVzdEFkZEFyZ3Mo
MSwgMSkpOwogICAgIFJVTih0ZXN0QWRkQXJncygxLCAyKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366657</attachid>
            <date>2019-04-03 15:31:43 -0700</date>
            <delta_ts>2019-04-03 18:25:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch194081</filename>
            <type>text/plain</type>
            <size>46934</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDM4MjcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE5LTA0LTAzICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBh
cHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIHVzZSBhc3NvY2lhdGl2aXR5IHRvIG9wdGlt
aXplIGV4cHJlc3Npb24gdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NDA4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIHRocmVlIG1pY3JvYmVuY2htYXJrczoKKyAgICAgICAgLSBhZGQt
dHJlZSBzaG91bGQgYmUgdGhlIGlkZWFsIGNhc2UsIGJ1dCB0aGVyZSBpcyBubyBzcGVlZHVwIGJl
Y2F1c2Ugd2UgYXJlIGN1cnJlbnRseSB1bmFibGUgdG8gcHJvdmUgdGhhdCB0aGUgQ2hlY2tBZGQg
d29uJ3Qgb3ZlcmZsb3cKKyAgICAgICAgLSBiaXQteG9yLXRyZWUgbW9zdCBjbG9zZWx5IG1hdGNo
ZXMgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgb3B0aW1pemF0aW9uIHRyaWdnZXJzIG9uIHRoZSBK
ZXRTdHJlYW0yIHN1YnRlc3RzIHdoZXJlIGl0IHRyaWdnZXJzOgorICAgICAgICAgIGFuIHVuYmFs
YW5jZWQgZXhwcmVzc2lvbiB0cmVlIG9mIHNpemUgOCB0aGF0IGNhbiBiZSBiYWxhbmNlZCwgd2l0
aCBubyBvdGhlciBvcHRpbWl6YXRpb25zIGJlaW5nIHVubG9ja2VkLiAxNiUgc3BlZWR1cAorICAg
ICAgICAtIGJpdC1vci10cmVlIGlzIGFuIGlkZWFsIGNhc2UsIHdoZXJlIHRoZSByZWFzc29jaWF0
aW9uIGFsc28gZW5hYmxlcyBhIHRvbiBvZiBmdXJ0aGVyIHNpbXBsaWZpY2F0aW9ucy4gNDIlIHNw
ZWVkdXAKKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9hZGQtdHJlZS5qczogQWRkZWQuCisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL2JpdC1vci10cmVlLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBtaWNyb2JlbmNobWFya3MvYml0LXhvci10cmVlLmpzOiBBZGRlZC4KKwogMjAxOS0wMy0yOSAg
VGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRpb24g
ZmFpbGVkIGluIEpTQzo6Y3JlYXRlRXJyb3IKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2FkZC10cmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FkZC10
cmVlLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FkZC10cmVl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MjAwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBpICsgMTsKKyAgICByZXN1bHQgKz0g
aSArIDI7CisgICAgcmVzdWx0ICs9IGkgKyAzOworICAgIHJlc3VsdCArPSBpICsgNDsKKyAgICBy
ZXN1bHQgKz0gaSArIDU7CisgICAgcmVzdWx0ICs9IGkgKyA2OworICAgIHJlc3VsdCArPSBpICsg
NzsKKyAgICBpZiAocmVzdWx0ICE9IGkgKiA3ICsgMjgpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdCBhdCBpdGVyYXRpb24gIiArIGkgKyAiIDogIiArIHJlc3VsdDsKKworfQpJbmRl
eDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMJKG5vbmV4aXN0ZW50KQorKysg
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMyBAQAorZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDAwMDsgKytpKSB7CisgICAg
dmFyIHJlc3VsdCA9IGk7CisgICAgcmVzdWx0IHw9IGkgfCAxOworICAgIHJlc3VsdCB8PSBpIHwg
MjsKKyAgICByZXN1bHQgfD0gaSB8IDM7CisgICAgcmVzdWx0IHw9IGkgfCA0OworICAgIHJlc3Vs
dCB8PSBpIHwgNTsKKyAgICByZXN1bHQgfD0gaSB8IDY7CisgICAgcmVzdWx0IHw9IGkgfCA3Owor
ICAgIGlmIChyZXN1bHQgIT09IChpIHwgNykpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdCBhdCBpdGVyYXRpb24gIiArIGkgKyAiIDogIiArIHJlc3VsdDsKKworfQpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvYml0LXhvci10cmVlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2JpdC14b3ItdHJlZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9iaXQteG9yLXRyZWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMyBAQAordmFyIHJlc3VsdCA9IDA7Citmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDAw
OyArK2kpIHsKKyAgICByZXN1bHQgXj0gaTsKKyAgICByZXN1bHQgXj0gaSArIDE7CisgICAgcmVz
dWx0IF49IGkgKyAyOworICAgIHJlc3VsdCBePSBpICsgMzsKKyAgICByZXN1bHQgXj0gaSArIDQ7
CisgICAgcmVzdWx0IF49IGkgKyA1OworICAgIHJlc3VsdCBePSBpICsgNjsKKyAgICByZXN1bHQg
Xj0gaSArIDc7Cit9CitpZiAocmVzdWx0ICE9PSAwKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDY3IEBACisyMDE5LTA0LTAzICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3Nl
dEBhcHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIHVzZSBhc3NvY2lhdGl2aXR5IHRvIG9w
dGltaXplIGV4cHJlc3Npb24gdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NDA4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBCMyBwYXNzLCB0aGF0IHRyaWVz
IHRvIGZpbmQgYW5kIG9wdGltaXplIGV4cHJlc3Npb24gdHJlZXMgbWFkZSBwdXJlbHkgb2YgYW55
IG9uZSBhc3NvY2lhdGl2ZSBhbmQgY29tbXV0YXRpdmUgb3BlcmF0b3IgKEFkZC9NdWwvQml0T3Iv
Qml0QW5kL0JpdFhvcikuCisgICAgICAgIFRoZSBwYXNzIG9ubHkgcnVucyBpbiBPMiwgYW5kIHJ1
bnMgb25jZSwgYWZ0ZXIgbG93ZXJNYWNyb3MgYW5kIGp1c3QgYmVmb3JlIGEgcnVuIG9mIEIzUmVk
dWNlU3RyZW5ndGggKHdoaWNoIGhlbHBzIGNsZWFuIHVwIHRoZSBkZWFkIGNvZGUgaXQgdGVuZHMg
dG8gbGVhdmUgYmVoaW5kKS4KKyAgICAgICAgSSBoYWQgdG8gc2VwYXJhdGUga2lsbERlYWRDb2Rl
IG91dCBvZiBCM1JlZHVjZVN0cmVuZ3RoIChhcyBhIG5ldyBCM0VsaW1pbmF0ZURlYWRDb2RlIHBh
c3MpIHRvIHJ1biBpdCBiZWZvcmUgQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVz
LCBhcyBvdGhlcndpc2UgaXQgaXMgc3RvcHBlZCBieSBoaWdoIHVzZSBjb3VudHMKKyAgICAgICAg
aW5oZXJpdGVkIGZyb20gQ1NFLgorICAgICAgICBUaGlzIGV4dHJhIHJ1biBvZiBEQ0UgaXMgYnkg
aXRzZWxmIGEgd2luLCBtb3N0IG5vdGFibHkgb24gbWljcm9iZW5jaG1hcmtzL2luc3RhbmNlb2Yt
YWx3YXlzLWhpdC10d28gKDEuNXggZmFzdGVyKSwgYW5kIG9uIG1pY3JvYmVuY2htYXJrcy9saWNt
LWRyYWdvbnMoLW91dC1vZi1ib3VuZHMpIChib3RoIGdldCAxLjE2eCBzcGVlZHVwKS4KKyAgICAg
ICAgSSBzdXNwZWN0IGl0IGlzIGJlY2F1c2UgaXQgcnVucyBiZXR3ZWVuIENTRSBhbmQgdGFpbC1k
ZWR1cCwgYW5kIGFzIGEgcmVzdWx0IGFsbG93cyBhIGxvdCBtb3JlIHRhaWwtZGVkdXAgdG8gb2Nj
dXIuCisKKyAgICAgICAgVGhlIHBhc3MgaXMgY3VycmVudGx5IGV4dHJlbWVseSBjb25zZXJ2YXRp
dmUsIG5vdCB0cnlpbmcgYW55dGhpbmcgaWYgaXQgd291bGQgY2F1c2UgX2FueV8gY29kZSBkdXBs
aWNhdGlvbi4KKyAgICAgICAgRm9yIHRoaXMgcHVycG9zZSwgaXQgc3RhcnRzIGJ5IGNvbXB1dGlu
ZyB1c2UgY291bnRzIGZvciB0aGUgcG90ZW50aWFsbHkgaW50ZXJlc3Rpbmcgbm9kZXMgKHRob3Nl
IHdpdGggdGhlIHJpZ2h0IG9wY29kZXMpLCBhbmQgc2VncmVnYXRlIHRoZW0gaW50byBleHByZXNz
aW9uIHRyZWVzLgorICAgICAgICBUaGUgcm9vdCBvZiBhbiBleHByZXNzaW9uIHRyZWUgaXMgYSBu
b2RlIHRoYXQgaXMgZWl0aGVyIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBvciBpcyB1c2VkIGJ5
IGEgdmFsdWUgd2l0aCBhIGRpZmZlcmVudCBvcGNvZGUuCisgICAgICAgIFRoZSBsZWF2ZXMgb2Yg
YW4gZXhwcmVzc2lvbiB0cmVlIGFyZSBub2RlcyB0aGF0IGFyZSBlaXRoZXIgdXNlZCBpbiBtdWx0
aXBsZSBwbGFjZXMsIG9yIGhhdmUgYSBkaWZmZXJlbnQgb3Bjb2RlLgorICAgICAgICBBbGwgY29u
c3RhbnQgbGVhdmVzIG9mIGEgdHJlZSBhcmUgY29tYmluZWQsIGFzIHdlbGwgYXMgYWxsIGxlYXZl
cyB0aGF0IGFyZSBpZGVudGljYWwuIFdoYXQgcmVtYWlucyBpcyB0aGVuIGxhaWQgb3V0IGludG8g
YSBiYWxhbmNlZCBiaW5hcnkgdHJlZSwgaG9wZWZ1bGx5IG1heGltaXppbmcgSUxQLgorCisgICAg
ICAgIFRoaXMgb3B0aW1pemF0aW9uIHdhcyBpbXBsZW1lbnRlZCBhcyBhIHN0YW5kLWFsb25lIHBh
c3MgYW5kIG5vdCBhcyBwYXJ0IG9mIEIzUmVkdWNlU3RyZW5ndGggbW9zdGx5IGJlY2F1c2UgaXQg
bmVlZHMgdXNlIGNvdW50cyB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAgICBJdCBh
bHNvIGJlbmVmaXRzIGZyb20gZmluZGluZyBhbGwgdHJlZSByb290cyBmaXJzdCwgYW5kIG5vdCB0
cnlpbmcgdG8gcmVwZWF0ZWRseSBvcHRpbWl6ZSBzdWJ0cmVlcy4KKworICAgICAgICBJIGFkZGVk
IHNldmVyYWwgdGVzdHMgdG8gdGVzdEIzIHdpdGggdmFyeWluZyBwYXR0ZXJucyBvZiB0cmVlcy4g
SXQgaXMgYWxzbyB0ZXN0ZWQgaW4gYSBsZXNzIGZvY3VzZWQgd2F5IGJ5IGxvdHMgb2Ygb2xkZXIg
dGVzdHMuCisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSB0aGlzIHBhc3MgY291bGQgYmUgZXhwYW5k
ZWQgdG8gYWxsb3cgc29tZSBib3VuZGVkIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0aW9uLCBhbmQg
bWVyZ2luZyBtb3JlIGxlYXZlcyAoZS5nLiBNdWwoYSwgMykgYW5kIGEgaW4gYW4gQWRkIHRyZWUs
IGludG8gTXVsKGEsIDQpKQorICAgICAgICBUaGUgbGF0dGVyIHdpbGwgbmVlZCBleHBvc2luZyB0
aGUgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyBvdXQgb2YgQjNSZWR1Y2VTdHJlbmd0aCB0byBhdm9p
ZCBkdXBsaWNhdGluZyBjb2RlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBiMy9C
M0NvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVIpOgorICAgICAgICAo
SlNDOjpCMzo6c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UpOgorICAgICAgICAqIGIzL0IzQ29tbW9u
Lmg6CisgICAgICAgICogYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6RWxpbWluYXRlRGVhZENvZGU6OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjpl
bGltaW5hdGVEZWFkQ29kZSk6CisgICAgICAgICogYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkVsaW1pbmF0ZURlYWRDb2RlOjpFbGltaW5hdGVEZWFk
Q29kZSk6CisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpn
ZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNz
aW9uVHJlZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRp
dmVFeHByZXNzaW9uVHJlZXM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMpOgor
ICAgICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6bmV1
dHJhbEVsZW1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJl
c3Npb25UcmVlczo6aXNBYnNvcmJpbmdFbGVtZW50KToKKyAgICAgICAgKEpTQzo6QjM6Ok9wdGlt
aXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OmNvbWJpbmVDb25zdGFudHMpOgorICAgICAg
ICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6ZW1pdFZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6
Om9wdGltaXplUm9vdGVkVHJlZSk6CisgICAgICAgIChKU0M6OkIzOjpPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6b3B0aW1pemVBc3Nv
Y2lhdGl2ZUV4cHJlc3Npb25UcmVlcyk6CisgICAgICAgICogYjMvQjNPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5n
dGguY3BwOgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkpOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAg
ICAgIChKU0M6OkIzOjp0ZXN0Qml0WG9yVHJlZUFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVz
dEJpdFhvclRyZWVBcmdzRXZlbik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0WG9yVHJlZUFy
Z0ltbSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkVHJlZUFyZzMyKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RNdWxUcmVlQXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdEFuZFRy
ZWVBcmczMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0T3JUcmVlQXJnMzIpOgorICAgICAg
ICAoSlNDOjpCMzo6cnVuKToKKwogMjAxOS0wNC0wMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2Zm
QGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCBpbiBPcHRpb25zOjpzZXRPcHRpb25zKCkgdXNp
bmcgLS1jb25maWdGaWxlIG9wdGlvbiBhbmQgbGliZ21hbGxvYwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0Mzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC04NTEsNiArODUxLDcgQEAKIAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJ
dGVyYXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICov
OyB9OwogCQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFGNzM4MkIxOEJC
QkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDM0MkYzNkY3MjQ0MDk2ODA0QURCMjQgLyog
U291cmNlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0MjVCQTEzMzdFNDM0NEUxQjI2OUE2NzEgLyogU291cmNlT3JpZ2luLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzM5NUM3MDcyMjU1NUY2
RDAwQkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTVDNzA1MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0Vs
aW1pbmF0ZURlYWRDb2RlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAvKiBs
aWJ6LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CiAJCTM3Qzcz
OEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8qIFBhcnNl
SW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDEyOTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193
cmFwcGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRl
cm5hbHNfd3JhcHBlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTMzMzYsNiArMzMzNywxMCBAQAogCQkyQUY3MzgyQjE4QkJCRjky
MDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdHJ1Y3R1cmVJRFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMwMzIxNzVERjFBRDQ3RDg5OThCMzRFMSAvKiBKU1NvdXJjZUNvZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTb3VyY2VDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMwQTVGNDAzRjExQzRGNTk5Q0Q1OTZENSAvKiBXYXNtU2lnbmF0dXJlSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU2lnbmF0dXJlSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzc0MzY0OTIyNEQ3OUVGMDBDOEMy
MjcgLyogQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHA7IHBhdGgg
PSBiMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMzc0MzY0QTIyNEQ3OUVGMDBDOEMyMjcgLyogQjNPcHRpbWl6
ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3B0aW1pemVB
c3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oOyBwYXRoID0gYjMvQjNPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTVD
NzA0MjI1NTVGNkMwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRWxpbWluYXRlRGVhZENvZGUuY3BwOyBwYXRo
ID0gYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTMzOTVDNzA1MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWxpbWluYXRlRGVhZENvZGUuaDsgcGF0
aCA9IGIzL0IzRWxpbWluYXRlRGVhZENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdldENvbmRpdGlvbmFscy54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25maWc7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAv
KiBsaWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRoID0g
dXNyL2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJMzdDNzM4RDEx
RURCNTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzUyLDYg
KzUzNTcsOCBAQAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAq
LywKIAkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAgKi8sCiAJCQkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxp
bWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKKwkJCQkzMzk1QzcwNDIyNTU1RjZDMDBC
REJGQUQgLyogQjNFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCisJCQkJMzM5NUM3MDUyMjU1NUY2
RDAwQkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCAqLywKIAkJCQkwRjVCRjE2RTFGMjNB
NUExMDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8sCiAJCQkJMEY1QkYx
NkYxRjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCAqLywKIAkJCQkw
RjY5NzFFODFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmNwcCAqLywKQEAgLTUzOTks
NiArNTQwNiw4IEBACiAJCQkJMEYzMzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlw
cm9kdWN0cy5oICovLAogCQkJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5j
cHAgKi8sCiAJCQkJMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJ
CQkJMzM3NDM2NDkyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJl
c3Npb25UcmVlcy5jcHAgKi8sCisJCQkJMzM3NDM2NEEyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0
aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oICovLAogCQkJCTBGRUM4NEQ5MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8sCiAJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3JpZ2luLmggKi8sCiAJCQkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIz
T3JpZ2luRHVtcC5jcHAgKi8sCkBAIC05MDU5LDYgKzkwNjgsNyBAQAogCQkJCTBGNDg1MzJBMTg3
REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZDRUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4g
SGVhZGVycyAqLywKKwkJCQkzMzk1QzcwNzIyNTU1RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVE
ZWFkQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8q
IEZUTFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyMkU1QTcxREE2NDRB
ODAwNkU3NzA5IC8qIEZUTFNuaXBwZXRQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1
QkQ3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExTdGFja21hcEFyZ3VtZW50TGlzdC5oIGluIEhlYWRl
cnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDM3ODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEyNCw2ICsxMjQsNyBAQAogYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKIGIzL0IzRWZmZWN0cy5j
cHAKIGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCitiMy9CM0VsaW1pbmF0
ZURlYWRDb2RlLmNwcAogYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAKIGIzL0IzRmVuY2VW
YWx1ZS5jcHAKIGIzL0IzRml4U1NBLmNwcApAQCAtMTQzLDYgKzE0NCw3IEBACiBiMy9CM01vdmVD
b25zdGFudHMuY3BwCiBiMy9CM09wYXF1ZUJ5cHJvZHVjdHMuY3BwCiBiMy9CM09wY29kZS5jcHAK
K2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAKIGIzL0IzT3JpZ2lu
LmNwcAogYjMvQjNPcmlnaW5EdW1wLmNwcAogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkocmV2aXNpb24gMjQzNzgxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotYm9v
bCBzaG91bGREdW1wSVIoQjNDb21wbGl0YXRpb25Nb2RlIG1vZGUpCitib29sIHNob3VsZER1bXBJ
UihCM0NvbXBpbGF0aW9uTW9kZSBtb2RlKQogewogI2lmIEVOQUJMRShGVExfSklUKQogICAgIHJl
dHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBGVEw6OnNob3VsZER1bXBE
aXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKG1vZGUpOwpAQCAtNDQsNyAr
NDQsNyBAQAogI2VuZGlmCiB9CiAKLWJvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjNDb21w
bGl0YXRpb25Nb2RlIG1vZGUpCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzQ29tcGls
YXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQjNNb2RlKQogICAgICAgICByZXR1
cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKSB8fCBPcHRpb25zOjpkdW1wQjNHcmFw
aEF0RWFjaFBoYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2
aXNpb24gMjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKIAotZW51bSBCM0NvbXBsaXRhdGlvbk1vZGUgeworZW51bSBCM0NvbXBpbGF0aW9u
TW9kZSB7CiAgICAgQjNNb2RlLAogICAgIEFpck1vZGUKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRF
IGJvb2wgc2hvdWxkRHVtcElSKEIzQ29tcGxpdGF0aW9uTW9kZSk7Ci1ib29sIHNob3VsZER1bXBJ
UkF0RWFjaFBoYXNlKEIzQ29tcGxpdGF0aW9uTW9kZSk7CitKU19FWFBPUlRfUFJJVkFURSBib29s
IHNob3VsZER1bXBJUihCM0NvbXBpbGF0aW9uTW9kZSk7Citib29sIHNob3VsZER1bXBJUkF0RWFj
aFBoYXNlKEIzQ29tcGlsYXRpb25Nb2RlKTsKIGJvb2wgc2hvdWxkVmFsaWRhdGVJUigpOwogYm9v
bCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKIGJvb2wgc2hvdWxkU2F2ZUlSQmVmb3Jl
UGhhc2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZURlYWRD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5h
dGVEZWFkQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRWxpbWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzRWxpbWluYXRlRGVhZENvZGUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJC
M1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1
ZGUgIkIzVmFyaWFibGUuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKKyNpbmNsdWRl
IDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhTZXQuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CisvLyBGSVhNRTogdGhpcyBwYXNzIGN1cnJlbnRseSBvbmx5IGVsaW1pbmF0ZXMgdmFsdWVzIGFu
ZCB2YXJpYWJsZXMsIGl0IGRvZXMgbm90IHNlZW0gdG8gZWxpbWluYXRlIGRlYWQgYmxvY2tzLgor
Citib29sIEVsaW1pbmF0ZURlYWRDb2RlOjpydW4oKQoreworICAgIGJvb2wgY2hhbmdlZCA9IGZh
bHNlOworICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZhbHVlKiwgSW5kZXhTZXQ8VmFsdWUqPj4gd29y
a2xpc3Q7CisgICAgVmVjdG9yPFVwc2lsb25WYWx1ZSosIDY0PiB1cHNpbG9uczsKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVl
IDogKmJsb2NrKSB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgICAgICAgICAv
LyBXZSBkb24ndCBjYXJlIGFib3V0IGVmZmVjdHMgb2YgU1NBIG9wZXJhdGlvbnMsIHNpbmNlIHdl
IG1vZGVsIHRoZW0gbW9yZQorICAgICAgICAgICAgLy8gYWNjdXJhdGVseSB0aGFuIHRoZSBlZmZl
Y3RzKCkgbWV0aG9kIGRvZXMuCisgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpICE9IFBo
aSAmJiB2YWx1ZS0+b3Bjb2RlKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICBlZmZlY3Rz
ID0gdmFsdWUtPmVmZmVjdHMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGVmZmVj
dHMubXVzdEV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHZhbHVlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFVwc2lsb25WYWx1ZSogdXBzaWxvbiA9IHZh
bHVlLT5hczxVcHNpbG9uVmFsdWU+KCkpCisgICAgICAgICAgICAgICAgdXBzaWxvbnMuYXBwZW5k
KHVwc2lsb24pOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAgICAgd2hp
bGUgKFZhbHVlKiB2YWx1ZSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICBmb3IgKFZh
bHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2goY2hpbGQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGRpZFB1c2gg
PSBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgdXBzaWxvbkluZGV4ID0gMDsgdXBzaWxvbklu
ZGV4IDwgdXBzaWxvbnMuc2l6ZSgpOyArK3Vwc2lsb25JbmRleCkgeworICAgICAgICAgICAgVXBz
aWxvblZhbHVlKiB1cHNpbG9uID0gdXBzaWxvbnNbdXBzaWxvbkluZGV4XTsKKyAgICAgICAgICAg
IGlmICh3b3JrbGlzdC5zYXcodXBzaWxvbi0+cGhpKCkpKSB7CisgICAgICAgICAgICAgICAgd29y
a2xpc3QucHVzaCh1cHNpbG9uKTsKKyAgICAgICAgICAgICAgICB1cHNpbG9uc1t1cHNpbG9uSW5k
ZXgtLV0gPSB1cHNpbG9ucy5sYXN0KCk7CisgICAgICAgICAgICAgICAgdXBzaWxvbnMudGFrZUxh
c3QoKTsKKyAgICAgICAgICAgICAgICBkaWRQdXNoID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWRpZFB1c2gpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBJbmRleFNldDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJsZXM7CisgICAgCisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICBzaXplX3Qgc291cmNlSW5k
ZXggPSAwOworICAgICAgICBzaXplX3QgdGFyZ2V0SW5kZXggPSAwOworICAgICAgICB3aGlsZSAo
c291cmNlSW5kZXggPCBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICBWYWx1ZSogdmFsdWUg
PSBibG9jay0+YXQoc291cmNlSW5kZXgrKyk7CisgICAgICAgICAgICBpZiAod29ya2xpc3Quc2F3
KHZhbHVlKSkgeworICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZh
bHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkpCisgICAgICAgICAgICAgICAgICAgIGxp
dmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUtPnZhcmlhYmxlKCkpOworICAgICAgICAgICAg
ICAgIGJsb2NrLT5hdCh0YXJnZXRJbmRleCsrKSA9IHZhbHVlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBtX3Byb2MuZGVsZXRlVmFsdWUodmFsdWUpOworICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGJsb2NrLT52YWx1ZXMoKS5yZXNpemUodGFyZ2V0SW5kZXgpOworICAgIH0KKworICAgIGZvciAo
VmFyaWFibGUqIHZhcmlhYmxlIDogbV9wcm9jLnZhcmlhYmxlcygpKSB7CisgICAgICAgIGlmICgh
bGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCisgICAgICAgICAgICBtX3Byb2MuZGVs
ZXRlVmFyaWFibGUodmFyaWFibGUpOworICAgIH0KKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKwor
Ym9vbCBlbGltaW5hdGVEZWFkQ29kZShQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29w
ZSBwaGFzZVNjb3BlKHByb2MsICJlbGltaW5hdGVEZWFkQ29kZSIpOworICAgIEVsaW1pbmF0ZURl
YWRDb2RlIGVsaW1pbmF0ZURlYWRDb2RlKHByb2MpOworICAgIHJldHVybiBlbGltaW5hdGVEZWFk
Q29kZS5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRl
RGVhZENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGlt
aW5hdGVEZWFkQ29kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0VsaW1pbmF0ZURlYWRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIFRoaXMgY2xhc3MgYW5kIGl0cyBydW4gZnVuY3Rp
b24gYXJlIHB1YmxpYywgc28gdGhhdCB0aGV5IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgZnJvbSBC
M1JlZHVjZVN0cmVuZ3RoCitjbGFzcyBFbGltaW5hdGVEZWFkQ29kZSB7CitwdWJsaWM6CisgICAg
RWxpbWluYXRlRGVhZENvZGUoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9j
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIHJ1bigpOworCitwcml2YXRlOgorICAgIFByb2Nl
ZHVyZSYgbV9wcm9jOworfTsKKworSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBlbGltaW5hdGVEZWFk
Q29kZShQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJh
dGUuY3BwCShyZXZpc2lvbiAyNDM3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJC
M0NvbW1vbi5oIgogI2luY2x1ZGUgIkIzRHVwbGljYXRlVGFpbHMuaCIKICNpbmNsdWRlICJCM0Vs
aW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmgiCisjaW5jbHVkZSAiQjNFbGltaW5hdGVEZWFk
Q29kZS5oIgogI2luY2x1ZGUgIkIzRml4U1NBLmgiCiAjaW5jbHVkZSAiQjNGb2xkUGF0aENvbnN0
YW50cy5oIgogI2luY2x1ZGUgIkIzSG9pc3RMb29wSW52YXJpYW50VmFsdWVzLmgiCkBAIC00Myw2
ICs0NCw3IEBACiAjaW5jbHVkZSAiQjNMb3dlck1hY3Jvc0FmdGVyT3B0aW1pemF0aW9ucy5oIgog
I2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgogI2luY2x1ZGUgIkIzTW92ZUNvbnN0YW50cy5oIgor
I2luY2x1ZGUgIkIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oIgogI2luY2x1
ZGUgIkIzUHJvY2VkdXJlLmgiCiAjaW5jbHVkZSAiQjNQdXJlQ1NFLmgiCiAjaW5jbHVkZSAiQjNS
ZWR1Y2VEb3VibGVUb0Zsb2F0LmgiCkBAIC04NywxMiArODksMTIgQEAKICAgICAgICAgaG9pc3RM
b29wSW52YXJpYW50VmFsdWVzKHByb2NlZHVyZSk7CiAgICAgICAgIGlmIChlbGltaW5hdGVDb21t
b25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUpKQogICAgICAgICAgICAgZWxpbWluYXRlQ29tbW9u
U3ViZXhwcmVzc2lvbnMocHJvY2VkdXJlKTsKKyAgICAgICAgZWxpbWluYXRlRGVhZENvZGUocHJv
Y2VkdXJlKTsKICAgICAgICAgaW5mZXJTd2l0Y2hlcyhwcm9jZWR1cmUpOwogICAgICAgICBpZiAo
T3B0aW9uczo6dXNlQjNUYWlsRHVwKCkpCiAgICAgICAgICAgICBkdXBsaWNhdGVUYWlscyhwcm9j
ZWR1cmUpOwogICAgICAgICBmaXhTU0EocHJvY2VkdXJlKTsKICAgICAgICAgZm9sZFBhdGhDb25z
dGFudHMocHJvY2VkdXJlKTsKLSAgICAgICAgCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBv
cHRpbWl6YXRpb25zIGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA1MDcKICAgICB9IGVsc2UgaWYgKHByb2NlZHVyZS5vcHRMZXZlbCgp
ID49IDEpIHsKQEAgLTEwNCw2ICsxMDYsNyBAQAogICAgIGxvd2VyTWFjcm9zKHByb2NlZHVyZSk7
CiAKICAgICBpZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMikgeworICAgICAgICBvcHRpbWl6
ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzKHByb2NlZHVyZSk7CiAgICAgICAgIHJlZHVjZVN0
cmVuZ3RoKHByb2NlZHVyZSk7CiAKICAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXph
dGlvbnMgaGVyZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wdGltaXplQXNz
b2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wdGltaXplQXNzb2NpYXRp
dmVFeHByZXNzaW9uVHJlZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNp
bmNsdWRlICJCM0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisjaW5jbHVk
ZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIE9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJl
ZXMgeworcHVibGljOgorICAgIE9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMoUHJv
Y2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIHJ1bigpOworCitwcml2YXRlOgorICAgIGludDY0X3QgbmV1dHJhbEVsZW1lbnQoT3Bj
b2RlKTsKKyAgICBib29sIGlzQWJzb3JiaW5nRWxlbWVudChPcGNvZGUsIGludDY0X3QpOworICAg
IHZvaWQgY29tYmluZUNvbnN0YW50cyhPcGNvZGUsIGludDY0X3QmLCBpbnQ2NF90KTsKKyAgICB2
b2lkIGVtaXRWYWx1ZShPcGNvZGUsIFZhbHVlKiwgdW5zaWduZWQgbnVtU2VlbiwgSW5zZXJ0aW9u
U2V0Jiwgc2l6ZV90IGluZGV4SW5CbG9jaywgVmVjdG9yPFZhbHVlKiwgND4mIHJlc3VsdHMpOwor
ICAgIGJvb2wgb3B0aW1pemVSb290ZWRUcmVlKFZhbHVlKiByb290LCBJbnNlcnRpb25TZXQmLCBz
aXplX3QgaW5kZXhJbkJsb2NrLCBjb25zdCBWZWN0b3I8dW5zaWduZWQ+JiB1c2VDb3VudHMpOwor
CisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgYm9vbCB2ZXJib3NlIHsgdHJ1ZSB9OworfTsK
KworaW50NjRfdCBPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzOjpuZXV0cmFsRWxl
bWVudChPcGNvZGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAg
IGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIHJldHVybiAwOworICAgIGNh
c2UgTXVsOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCitib29sIE9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6
OmlzQWJzb3JiaW5nRWxlbWVudChPcGNvZGUgb3AsIGludDY0X3QgY29uc3RhbnQpCit7CisgICAg
c3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAgIGNhc2UgQml0WG9yOgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIHJl
dHVybiAhY29uc3RhbnQ7CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50
ID09IC0xOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit2b2lkIE9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6
OmNvbWJpbmVDb25zdGFudHMoT3Bjb2RlIG9wLCBpbnQ2NF90JiBjb25zdDEsIGludDY0X3QgY29u
c3QyKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgY29uc3Qx
ICs9IGNvbnN0MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNdWw6CisgICAgICAgIGNvbnN0
MSAqPSBjb25zdDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQml0QW5kOgorICAgICAgICBj
b25zdDEgJj0gY29uc3QyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJpdE9yOgorICAgICAg
ICBjb25zdDEgfD0gY29uc3QyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJpdFhvcjoKKyAg
ICAgICAgY29uc3QxIF49IGNvbnN0MjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgT3B0
aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6ZW1pdFZhbHVlKE9wY29kZSBvcCwgVmFs
dWUqIHZhbHVlLCB1bnNpZ25lZCBudW1TZWVuLCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNldCwg
c2l6ZV90IGluZGV4SW5CbG9jaywgVmVjdG9yPFZhbHVlKiwgND4mIHJlc3VsdHMpCit7CisgICAg
c3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAgICAgICBpZiAobnVtU2VlbiA+IDEpIHsK
KyAgICAgICAgICAgIFZhbHVlKiBjb25zdE51bVNlZW47CisgICAgICAgICAgICBpZiAodmFsdWUt
PnR5cGUoKSA9PSBJbnQzMikKKyAgICAgICAgICAgICAgICBjb25zdE51bVNlZW4gPSBpbnNlcnRp
b25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJsb2NrLCB2YWx1ZS0+b3JpZ2luKCks
IG51bVNlZW4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnN0TnVtU2Vl
biA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVlPihpbmRleEluQmxvY2ssIHZhbHVl
LT5vcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obnVtU2VlbikpOworICAgICAgICAgICAg
cmVzdWx0cy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2VydDxWYWx1ZT4oaW5kZXhJbkJsb2NrLCBN
dWwsIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIGNvbnN0TnVtU2VlbikpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNdWw6CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1TZWVuOyAr
K2kpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgICAgIHJlc3VsdHMuYXBwZW5k
KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIGlmIChu
dW1TZWVuICUgMikKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK2Jvb2wgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6
b3B0aW1pemVSb290ZWRUcmVlKFZhbHVlKiByb290LCBJbnNlcnRpb25TZXQmIGluc2VydGlvblNl
dCwgc2l6ZV90IGluZGV4SW5CbG9jaywgY29uc3QgVmVjdG9yPHVuc2lnbmVkPiYgdXNlQ291bnRz
KQoreworICAgIE9wY29kZSBvcCA9IHJvb3QtPm9wY29kZSgpOworICAgIGlmICgocm9vdC0+Y2hp
bGQoMCktPm9wY29kZSgpICE9IG9wIHx8IHVzZUNvdW50c1tyb290LT5jaGlsZCgwKS0+aW5kZXgo
KV0gPiAxKQorICAgICAgICAmJiAocm9vdC0+Y2hpbGQoMSktPm9wY29kZSgpICE9IG9wIHx8IHVz
ZUNvdW50c1tyb290LT5jaGlsZCgxKS0+aW5kZXgoKV0gPiAxKSkgeworICAgICAgICAvLyBUaGlz
IGlzIGEgdHJpdmlhbCBleHByZXNzaW9uIHRyZWUgb2Ygc2l6ZSB0d28sIHdlIGhhdmUgbm90aGlu
ZyB0byBkbyBoZXJlIHRoYXQgQjNSZWR1Y2VTdHJlbmd0aCBjYW5ub3QgZG8gYmV0dGVyIHRoYW4g
dXMuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBXZSBwcm9jZWVkIGlu
IHRocmVlIHN0ZXBzOgorICAgIC8vIC0gZ2F0aGVyIGFsbCB0aGUgbGVhdmVzIG9mIHRoZSBleHBy
ZXNzaW9uIHRyZWUKKyAgICAvLyAtIHNvcnQgdGhlbSwgYW5kIGNvbWJpbmUgYXMgbWFueSBhcyBw
b3NzaWJsZQorICAgIC8vIC0gbWFrZSBhIGJhbGFuY2VkIGJpbmFyeSB0cmVlIG9mIHRoZW0KKwor
ICAgIFZlY3RvcjxWYWx1ZSosIDQ+IGxlYXZlczsKKyAgICBWZWN0b3I8VmFsdWUqLCAzPiB3b3Jr
bGlzdCA9IHsgcm9vdC0+Y2hpbGQoMCksIHJvb3QtPmNoaWxkKDEpIH07CisgICAgaW50NjRfdCBj
b25zdGFudCA9IG5ldXRyYWxFbGVtZW50KG9wKTsKKyAgICB1bnNpZ25lZCBudW1WaXNpdGVkID0g
MDsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBWYWx1ZSogdmFs
ID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgaWYgKHZhbC0+b3Bjb2RlKCkgPT0gb3Ag
JiYgdXNlQ291bnRzW3ZhbC0+aW5kZXgoKV0gPCAyKSB7CisgICAgICAgICAgICB3b3JrbGlzdC5h
cHBlbmQodmFsLT5jaGlsZCgwKSk7CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5j
aGlsZCgxKSk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsLT5oYXNJbnQoKSkgeworICAgICAgICAg
ICAgY29tYmluZUNvbnN0YW50cyhvcCwgY29uc3RhbnQsIHZhbC0+YXNJbnQoKSk7CisgICAgICAg
ICAgICBudW1WaXNpdGVkKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBudW1WaXNp
dGVkKys7CisgICAgICAgICAgICBpZiAob3AgPT0gQWRkICYmICh2YWwtPm9wY29kZSgpID09IE11
bCB8fCB2YWwtPm9wY29kZSgpID09IFNobCkgJiYgdmFsLT5jaGlsZCgxKS0+aGFzSW50KCkpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJPcHBvcnR1bml0eSB0byBkaWcgaW50byBNdWwvU2hs
Iik7CisgICAgICAgICAgICBsZWF2ZXMuYXBwZW5kKHZhbCk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgaWYgKGlzQWJzb3JiaW5nRWxlbWVudChvcCwgY29uc3RhbnQpKSB7CisgICAgICAgIFZhbHVl
KiBuZXdSb290OworICAgICAgICBpZiAocm9vdC0+dHlwZSgpID09IEludDMyKQorICAgICAgICAg
ICAgbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3QzMlZhbHVlPihpbmRleEluQmxv
Y2ssIHJvb3QtPm9yaWdpbigpLCBzdGF0aWNfY2FzdDxpbnQzMl90Pihjb25zdGFudCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBuZXdSb290ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25z
dDY0VmFsdWU+KGluZGV4SW5CbG9jaywgcm9vdC0+b3JpZ2luKCksIGNvbnN0YW50KTsKKyAgICAg
ICAgcm9vdC0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdSb290KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIGlmIChudW1WaXNpdGVkIDwgNCkgeworICAgICAgICAvLyBUaGlzIGlz
IGEgbmVhcmx5LXRyaXZpYWwgZXhwcmVzc2lvbiBvZiBzaXplIDMuIEIzUmVkdWNlU3RyZW5ndGgg
aXMgc3RpbGwgYWJsZSB0byBkZWFsIHdpdGggc3VjaCBleHByZXNzaW9ucyBjb21wZXRlbnRseSwg
YW5kIHRoZXJlIGlzIG5vIHBvc3NpYmxlIHdpbiBmcm9tIGJhbGFuY2luZyB0aGVtLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RkOjpzb3J0KGxlYXZlcy5iZWdpbigpLCBs
ZWF2ZXMuZW5kKCksIFtdKFZhbHVlKiB4LCBWYWx1ZSogeSkgeworICAgICAgICByZXR1cm4geC0+
aW5kZXgoKSA8IHktPmluZGV4KCk7CisgICAgfSk7CisgICAgVmVjdG9yPFZhbHVlKiwgND4gb3B0
TGVhdmVzOworICAgIFZhbHVlKiBsYXN0VmFsdWUgPSBudWxscHRyOworICAgIHVuc2lnbmVkIG51
bVNlZW4gPSAwOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbGVhdmVzKSB7CisgICAgICAgIGlm
IChsYXN0VmFsdWUgPT0gdmFsdWUpCisgICAgICAgICAgICBudW1TZWVuKys7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgaWYgKGxhc3RWYWx1ZSkKKyAgICAgICAgICAgICAgICBlbWl0VmFs
dWUob3AsIGxhc3RWYWx1ZSwgbnVtU2VlbiwgaW5zZXJ0aW9uU2V0LCBpbmRleEluQmxvY2ssIG9w
dExlYXZlcyk7CisgICAgICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIG51
bVNlZW4gPSAxOworICAgICAgICB9CisgICAgfQorICAgIGlmIChsYXN0VmFsdWUpCisgICAgICAg
IGVtaXRWYWx1ZShvcCwgbGFzdFZhbHVlLCBudW1TZWVuLCBpbnNlcnRpb25TZXQsIGluZGV4SW5C
bG9jaywgb3B0TGVhdmVzKTsKKworICAgIC8vIG9wdExlYXZlcyBjYW4gYmUgZW1wdHkgZm9yIHRy
ZWVzIG9mIEJpdFhvciB3aGVyZSBhbGwgbGVhdmVzIGhhcHBlbiBhbiBldmVuIG51bWJlciBvZiB0
aW1lcy4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIG1ha2UgdGhlIHdob2xlIHRyZWUgZXF1aXZh
bGVudCB0byB0aGUgbmV1dHJhbCBlbGVtZW50ICh3aGljaCBpcyAwIGZvciBCaXRYb3IpLgorICAg
IGlmIChjb25zdGFudCAhPSBuZXV0cmFsRWxlbWVudChvcCkgfHwgb3B0TGVhdmVzLmlzRW1wdHko
KSkgeworICAgICAgICBpZiAocm9vdC0+dHlwZSgpID09IEludDMyKQorICAgICAgICAgICAgb3B0
TGVhdmVzLmFwcGVuZChpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJs
b2NrLCByb290LT5vcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4oY29uc3RhbnQpKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wdExlYXZlcy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmlu
c2VydDxDb25zdDY0VmFsdWU+KGluZGV4SW5CbG9jaywgcm9vdC0+b3JpZ2luKCksIGNvbnN0YW50
KSk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygiICAgICAg
RXhwcmVzc2lvbiB0cmVlIHJvb3RlZCBhdCAiLCAqcm9vdCwgIiAoIiwgcm9vdC0+b3Bjb2RlKCks
ICIpIHdpdGggbGVhdmVzIChudW1WaXNpdGVkID0gIiwgbnVtVmlzaXRlZCwgIikgIik7CisgICAg
ICAgIGZvciAoVmFsdWUqIGxlYWYgOiBsZWF2ZXMpCisgICAgICAgICAgICBkYXRhTG9nKCIgIiwg
KmxlYWYpOworICAgICAgICBkYXRhTG9nKCIgPT4iKTsKKyAgICAgICAgZm9yIChWYWx1ZSogbGVh
ZiA6IG9wdExlYXZlcykKKyAgICAgICAgICAgIGRhdGFMb2coIiAiLCAqbGVhZik7CisgICAgICAg
IGRhdGFMb2coIlxuIik7CisgICAgfQorCisgICAgLy8gRmluYWxseSB3ZSBjYW4gYnVpbGQgdGhl
IGJhbGFuY2VkIGJpbmFyeSB0cmVlCisgICAgdW5zaWduZWQgbGVhZkluZGV4ID0gMDsKKyAgICB3
aGlsZSAobGVhZkluZGV4ICsgMSA8IG9wdExlYXZlcy5zaXplKCkpIHsKKyAgICAgICAgb3B0TGVh
dmVzLmFwcGVuZChpbnNlcnRpb25TZXQuaW5zZXJ0PFZhbHVlPihpbmRleEluQmxvY2ssIG9wLCBy
b290LT5vcmlnaW4oKSwgb3B0TGVhdmVzW2xlYWZJbmRleF0sIG9wdExlYXZlc1tsZWFmSW5kZXgg
KyAxXSkpOworICAgICAgICBsZWFmSW5kZXggKz0gMjsKKyAgICB9CisgICAgQVNTRVJUKGxlYWZJ
bmRleCA9PSBvcHRMZWF2ZXMuc2l6ZSgpIC0gMSk7CisgICAgcm9vdC0+cmVwbGFjZVdpdGhJZGVu
dGl0eShvcHRMZWF2ZXNbbGVhZkluZGV4XSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6cnVuKCkKK3sKKyAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKKworICAgIC8vIFdlIHByb2NlZWQgaW4gdHdvIHBoYXNlcy4KKyAgICAv
LyBJbiB0aGUgZmlyc3Qgb25lIHdlIGNvbXB1dGUgdGhlIHVzZSBjb3VudHMgb2YgZWFjaCB2YWx1
ZSAob2YgYW4gaW50ZXJlc3Rpbmcgb3Bjb2RlKSwgYW5kIGZpbmQgcG90ZW50aWFsIHJvb3RzIG9m
IGludGVyZXN0aW5nIGV4cHJlc3Npb24gdHJlZXMuCisgICAgLy8gSW4gdGhlIHNlY29uZCBvbmUg
d2Ugb3B0aW1pemUgZWFjaCBzdWNoIGV4cHJlc3Npb24gdHJlZSBpbiB0dXJuLgorICAgIC8vIFdl
IG5lZWQgdGhlIHVzZSBjb3VudHMgdG8gYXZvaWQgZHVwbGljYXRpbmcgY29kZS4KKworICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gdXNlQ291bnRzKG1fcHJvYy52YWx1ZXMoKS5zaXplKCksIDApOyAvLyBN
YXBwaW5nIGZyb20gVmFsdWU6Om1faW5kZXggdG8gdXNlIGNvdW50cy4KKyAgICBIYXNoU2V0PFZh
bHVlKj4gZXhwcmVzc2lvblRyZWVSb290czsKKyAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiByb290
T3duZXJzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSog
Y2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgIGlmICghY2hpbGQt
PmlzSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGNoaWxkLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgTXVs
OgorICAgICAgICAgICAgICAgIGNhc2UgQWRkOgorICAgICAgICAgICAgICAgIGNhc2UgQml0QW5k
OgorICAgICAgICAgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAgICAgICAgY2FzZSBCaXRY
b3I6CisgICAgICAgICAgICAgICAgICAgIHVzZUNvdW50c1tjaGlsZC0+aW5kZXgoKV0rKzsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSAhPSB2YWx1ZS0+b3Bjb2RlKCkg
fHwgdXNlQ291bnRzW2NoaWxkLT5pbmRleCgpXSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cHJlc3Npb25UcmVlUm9vdHMuYWRkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJvb3RPd25lcnMuYWRkKGNoaWxkLT5vd25lcik7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldCA9IElu
c2VydGlvblNldChtX3Byb2MpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiByb290T3du
ZXJzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChp
bmRleCk7CisgICAgICAgICAgICBpZiAoZXhwcmVzc2lvblRyZWVSb290cy5jb250YWlucyh2YWx1
ZSkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBvcHRpbWl6ZVJvb3RlZFRyZWUodmFsdWUs
IGluc2VydGlvblNldCwgaW5kZXgsIHVzZUNvdW50cyk7CisgICAgICAgIH0KKyAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KKworICAgIHJldHVybiBjaGFuZ2VkOwor
fQorCitib29sIG9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMoUHJvY2VkdXJlJiBw
cm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAib3B0aW1pemVBc3NvY2lh
dGl2ZUV4cHJlc3Npb25UcmVlcyIpOworICAgIE9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9u
VHJlZXMgb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyhwcm9jKTsKKyAgICByZXR1
cm4gb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5ydW4oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wdGltaXplQXNz
b2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gRmlu
ZHMgbGFyZ2UgZXhwcmVzc2lvbiB0cmVlcyB1c2luZyBvbmUgb2YgdGhlIGFzc29jaWF0aXZlIGFu
ZCBjb21tdXRhdGl2ZSBvcGNvZGVzIChBZGQvTXVsL0JpdEFuZC9CaXRPci9CaXRYb3IpLAorLy8g
dGhlbiByZW9yZGVyIHRoZW0gdG8gZWxpbWluYXRlIGFzIG1hbnkgb3BlcmF0aW9ucyBhcyBwb3Nz
aWJsZSwgdGhlbiBtYWtlIGJhbGFuY2VkIGJpbmFyeSB0cmVlcyBvdXQgb2YgdGhlbQorLy8gdG8g
bWF4aW1pemUgSUxQIGFuZCBtaW5pbWl6ZSB0aGUgdG90YWwgbGF0ZW5jeS4KK2Jvb2wgb3B0aW1p
emVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMjQzNzgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQjNCbG9ja0luc2VydGlvblNl
dC5oIgogI2luY2x1ZGUgIkIzQ29tcHV0ZURpdmlzaW9uTWFnaWMuaCIKICNpbmNsdWRlICJCM0Rv
bWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0VsaW1pbmF0ZURlYWRDb2RlLmgiCiAjaW5jbHVkZSAi
QjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZUlubGluZXMu
aCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKQEAgLTQ0MCw3ICs0NDEsOCBAQAogICAgICAg
ICAgICAgLy8gImhvaXN0IiBAdGhpbmcuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBydW4gRENF
IGJlZm9yZSBDU0UsIHdlIHdpbGwga2lsbCBAZGVhZCBhbmQKICAgICAgICAgICAgIC8vIGtlZXAg
QHRoaW5nLiBUaGF0J3MgYmV0dGVyLCBzaW5jZSB3ZSB1c3VhbGx5IHdhbnQgdGhpbmdzIHRvIHN0
YXkgd2hlcmV2ZXIgdGhlIGNsaWVudAogICAgICAgICAgICAgLy8gcHV0IHRoZW0uIFdlJ3JlIG5v
dCBhY3R1YWxseSBzbWFydCBlbm91Z2ggdG8gbW92ZSB0aGluZ3MgYXJvdW5kIGF0IHJhbmRvbS4K
LSAgICAgICAgICAgIGtpbGxEZWFkQ29kZSgpOworICAgICAgICAgICAgRWxpbWluYXRlRGVhZENv
ZGUgZWxpbWluYXRlRGVhZENvZGUobV9wcm9jKTsKKyAgICAgICAgICAgIG1fY2hhbmdlZCB8PSBl
bGltaW5hdGVEZWFkQ29kZS5ydW4oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc2ltcGxp
ZnlTU0EoKTsKICAgICAgICAgICAgIApAQCAtMjczMiw3MCArMjczNCw2IEBACiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICB2b2lkIGtpbGxEZWFkQ29kZSgpCi0gICAgewotICAgICAgICBHcmFwaE5v
ZGVXb3JrbGlzdDxWYWx1ZSosIEluZGV4U2V0PFZhbHVlKj4+IHdvcmtsaXN0OwotICAgICAgICBW
ZWN0b3I8VXBzaWxvblZhbHVlKiwgNjQ+IHVwc2lsb25zOwotICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9wcm9jKSB7Ci0gICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpi
bG9jaykgewotICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0czsKLSAgICAgICAgICAgICAg
ICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IGVmZmVjdHMgb2YgU1NBIG9wZXJhdGlvbnMsIHNpbmNl
IHdlIG1vZGVsIHRoZW0gbW9yZQotICAgICAgICAgICAgICAgIC8vIGFjY3VyYXRlbHkgdGhhbiB0
aGUgZWZmZWN0cygpIG1ldGhvZCBkb2VzLgotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bj
b2RlKCkgIT0gUGhpICYmIHZhbHVlLT5vcGNvZGUoKSAhPSBVcHNpbG9uKQotICAgICAgICAgICAg
ICAgICAgICBlZmZlY3RzID0gdmFsdWUtPmVmZmVjdHMoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBpZiAoZWZmZWN0cy5tdXN0RXhlY3V0ZSgpKQotICAgICAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5wdXNoKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoVXBzaWxvblZhbHVlKiB1cHNpbG9uID0gdmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4o
KSkKLSAgICAgICAgICAgICAgICAgICAgdXBzaWxvbnMuYXBwZW5kKHVwc2lsb24pOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxl
IChWYWx1ZSogdmFsdWUgPSB3b3JrbGlzdC5wb3AoKSkgewotICAgICAgICAgICAgICAgIGZvciAo
VmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCi0gICAgICAgICAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2goY2hpbGQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBib29sIGRpZFB1c2ggPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IHVwc2ls
b25JbmRleCA9IDA7IHVwc2lsb25JbmRleCA8IHVwc2lsb25zLnNpemUoKTsgKyt1cHNpbG9uSW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBVcHNpbG9uVmFsdWUqIHVwc2lsb24gPSB1cHNpbG9uc1t1
cHNpbG9uSW5kZXhdOwotICAgICAgICAgICAgICAgIGlmICh3b3JrbGlzdC5zYXcodXBzaWxvbi0+
cGhpKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2godXBzaWxvbik7Ci0g
ICAgICAgICAgICAgICAgICAgIHVwc2lsb25zW3Vwc2lsb25JbmRleC0tXSA9IHVwc2lsb25zLmxh
c3QoKTsKLSAgICAgICAgICAgICAgICAgICAgdXBzaWxvbnMudGFrZUxhc3QoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZGlkUHVzaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKCFkaWRQdXNoKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGUqPiBsaXZlVmFyaWFibGVzOwot
ICAgICAgICAKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewotICAg
ICAgICAgICAgc2l6ZV90IHNvdXJjZUluZGV4ID0gMDsKLSAgICAgICAgICAgIHNpemVfdCB0YXJn
ZXRJbmRleCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoc291cmNlSW5kZXggPCBibG9jay0+c2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHNvdXJjZUlu
ZGV4KyspOwotICAgICAgICAgICAgICAgIGlmICh3b3JrbGlzdC5zYXcodmFsdWUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0gdmFsdWUt
PmFzPFZhcmlhYmxlVmFsdWU+KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXZlVmFyaWFi
bGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
YmxvY2stPmF0KHRhcmdldEluZGV4KyspID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBibG9jay0+dmFsdWVzKCkucmVzaXplKHRhcmdldEluZGV4
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogbV9wcm9j
LnZhcmlhYmxlcygpKSB7Ci0gICAgICAgICAgICBpZiAoIWxpdmVWYXJpYWJsZXMuY29udGFpbnMo
dmFyaWFibGUpKQotICAgICAgICAgICAgICAgIG1fcHJvYy5kZWxldGVWYXJpYWJsZSh2YXJpYWJs
ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICB2b2lkIHNpbXBsaWZ5U1NBKCkKICAgICB7CiAg
ICAgICAgIC8vIFRoaXMgcnVucyBBeWNvY2sgYW5kIEhvcnNwb29sJ3MgYWxnb3JpdGhtIG9uIG91
ciBQaGkgZnVuY3Rpb25zIFsxXS4gRm9yIG1vc3QgQ0ZHIHBhdHRlcm5zLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMjQzNzgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3
IEBACiAgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVuIHdlIGNvbnN0cnVj
dCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCiAKICAgICBBU1NFUlQobV90eXBlID09IHZh
bHVlLT5tX3R5cGUpOworICAgIEFTU0VSVCh2YWx1ZSAhPSB0aGlzKTsKIAogICAgIGlmIChtX3R5
cGUgPT0gVm9pZCkgewogICAgICAgICByZXBsYWNlV2l0aE5vcElnbm9yaW5nVHlwZSgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDI0Mzc4MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2
ICszOCw3IEBACiAjaW5jbHVkZSAiQjNDb21waWxlLmgiCiAjaW5jbHVkZSAiQjNDb21wdXRlRGl2
aXNpb25NYWdpYy5oIgogI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b25zdDY0VmFsdWUuaCIKICNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKICNpbmNsdWRlICJC
M0VmZmVjdHMuaCIKICNpbmNsdWRlICJCM0ZlbmNlVmFsdWUuaCIKQEAgLTM5OCw2ICszOTksMTMy
IEBACiAgICAgdGVzdExvYWRXaXRoT2Zmc2V0SW1wbCgzMjc2OCwgMTYzODQpOwogfQogCit2b2lk
IHRlc3RCaXRYb3JUcmVlQXJncyhpbnQ2NF90IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZh
bHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgIFZhbHVlKiBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRYb3IsIE9yaWdpbigpLCBhcmdBLCBhcmdCKTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBub2RlLCBhcmdCKTsKKyAgICBub2RlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBub2RlLCBhcmdB
KTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdp
bigpLCBub2RlLCBhcmdCKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVy
biwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQ2NF90
Pihwcm9jLCBhLCBiKSwgKCgoYSBeIGIpIF4gYikgXiBhKSBeIGIpOworfQorCit2b2lkIHRlc3RC
aXRYb3JUcmVlQXJnc0V2ZW4oaW50NjRfdCBhLCBpbnQ2NF90IGIpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1
ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnQiA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKKyAgICBWYWx1ZSogbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0
WG9yLCBPcmlnaW4oKSwgYXJnQSwgYXJnQik7CisgICAgbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgbm9kZSwgYXJnQik7CisgICAgbm9kZSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0WG9yLCBPcmlnaW4oKSwgbm9kZSwgYXJnQSk7
CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBub2Rl
KTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50NjRfdD4ocHJvYywgYSwgYiksICgo
YSBeIGIpIF4gYikgXiBhKTsKK30KKwordm9pZCB0ZXN0Qml0WG9yVHJlZUFyZ0ltbShpbnQ2NF90
IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgIFZhbHVlKiBpbW1CID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGIpOworICAgIFZhbHVlKiBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBpbW1CKTsKKyAgICBub2RlID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBub2RlKTsKKyAgICBu
b2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdB
LCBub2RlKTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3Is
IE9yaWdpbigpLCBpbW1CLCBub2RlKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFJldHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxp
bnQ2NF90Pihwcm9jLCBhKSwgYiBeIChhIF4gKGEgXiAoYSBeIGIpKSkpOworfQorCit2b2lkIHRl
c3RBZGRUcmVlQXJnMzIoaW50MzJfdCBhKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCk7CisgICAgYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1
bmMsIE9yaWdpbigpLCBhcmdBKTsKKyAgICBWYWx1ZSogbm9kZSA9IGFyZ0E7CisgICAgaW50MzJf
dCBleHBlY3RlZFJlc3VsdCA9IGE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDIwOyAr
K2kpIHsKKyAgICAgICAgVmFsdWUqIG90aGVyTm9kZTsKKyAgICAgICAgaWYgKCEoaSAlIDMpKSB7
CisgICAgICAgICAgICBvdGhlck5vZGUgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgaSk7CisgICAgICAgICAgICBleHBlY3RlZFJlc3VsdCArPSBpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgb3RoZXJOb2RlID0gYXJnQTsKKyAgICAgICAgICAg
IGV4cGVjdGVkUmVzdWx0ICs9IGE7CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgbm9kZSwgb3RoZXJOb2RlKTsKKyAg
ICB9CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBu
b2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSksIGV4
cGVjdGVkUmVzdWx0KTsKK30KKwordm9pZCB0ZXN0TXVsVHJlZUFyZzMyKGludDMyX3QgYSkKK3sK
KyAgICAvLyBGaWJvbmFjY2ktbGlrZSBleHByZXNzaW9uIHRyZWUgd2l0aCBtdWx0aXBsaWNhdGlv
biBpbnN0ZWFkIG9mIGFkZGl0aW9uLgorICAgIC8vIFZlcmlmaWVzIHRoYXQgd2UgZG9uJ3QgZXhw
bG9kZSBvbiBoZWF2aWx5IGZhY3RvcmVkIGdyYXBocy4KKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwgYXJnQSk7CisgICAgVmFsdWUqIG5vZGVBID0gYXJnQTsKKyAgICBW
YWx1ZSogbm9kZUIgPSBhcmdBOworICAgIGludDMyX3QgZXhwZWN0ZWRBID0gYSwgZXhwZWN0ZWRS
ZXN1bHQgPSBhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyMDsgKytpKSB7CisgICAg
ICAgIFZhbHVlKiBuZXdOb2RlQiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBP
cmlnaW4oKSwgbm9kZUEsIG5vZGVCKTsKKyAgICAgICAgbm9kZUEgPSBub2RlQjsKKyAgICAgICAg
bm9kZUIgPSBuZXdOb2RlQjsKKyAgICAgICAgaW50MzJfdCBuZXdFeHBlY3RlZFJlc3VsdCA9IGV4
cGVjdGVkQSAqIGV4cGVjdGVkUmVzdWx0OworICAgICAgICBleHBlY3RlZEEgPSBleHBlY3RlZFJl
c3VsdDsKKyAgICAgICAgZXhwZWN0ZWRSZXN1bHQgPSBuZXdFeHBlY3RlZFJlc3VsdDsKKyAgICB9
CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBub2Rl
Qik7CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEpLCBleHBl
Y3RlZFJlc3VsdCk7Cit9CisKK3ZvaWQgdGVzdEJpdEFuZFRyZWVBcmczMihpbnQzMl90IGEpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBhcmdBID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZ0EpOworICAgIFZh
bHVlKiBub2RlID0gYXJnQTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgODsgKytpKSB7
CisgICAgICAgIFZhbHVlKiBjb25zdEkgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgaSB8IDQyKTsKKyAgICAgICAgVmFsdWUqIG5ld0JpdEFuZCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmlnaW4oKSwgYXJnQSwgY29uc3RJKTsK
KyAgICAgICAgbm9kZSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0QW5kLCBPcmln
aW4oKSwgbm9kZSwgbmV3Qml0QW5kKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBub2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVB
bmRSdW48aW50MzJfdD4ocHJvYywgYSksIGEgJiA0Mik7Cit9CisKK3ZvaWQgdGVzdEJpdE9yVHJl
ZUFyZzMyKGludDMyX3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmln
aW4oKSwgYXJnQSk7CisgICAgVmFsdWUqIG5vZGUgPSBhcmdBOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCA4OyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNvbnN0SSA9IHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpKTsKKyAgICAgICAgVmFsdWUqIG5l
d0JpdEFuZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQml0T3IsIE9yaWdpbigpLCBh
cmdBLCBjb25zdEkpOworICAgICAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRPciwgT3JpZ2luKCksIG5vZGUsIG5ld0JpdEFuZCk7CisgICAgfQorICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7CisKKyAgICBDSEVD
S19FUShjb21waWxlQW5kUnVuPGludDMyX3Q+KHByb2MsIGEpLCBhIHwgNyk7Cit9CisKIHZvaWQg
dGVzdEFyZyhpbnQgYXJndW1lbnQpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC0xNzA0OCw2
ICsxNzE3NSwxNCBAQAogICAgIFJVTih0ZXN0UmV0dXJuQ29uc3Q2NCgtNDIpKTsKICAgICBSVU4o
dGVzdFJldHVyblZvaWQoKSk7CiAKKyAgICBSVU5fQklOQVJZKHRlc3RCaXRYb3JUcmVlQXJncywg
aW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVzdEJp
dFhvclRyZWVBcmdzRXZlbiwgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAg
IFJVTl9CSU5BUlkodGVzdEJpdFhvclRyZWVBcmdJbW0sIGludDY0T3BlcmFuZHMoKSwgaW50NjRP
cGVyYW5kcygpKTsKKyAgICBSVU5fVU5BUlkodGVzdEFkZFRyZWVBcmczMiwgaW50MzJPcGVyYW5k
cygpKTsKKyAgICBSVU5fVU5BUlkodGVzdE11bFRyZWVBcmczMiwgaW50MzJPcGVyYW5kcygpKTsK
KyAgICBSVU5fVU5BUlkodGVzdEJpdEFuZFRyZWVBcmczMiwgaW50MzJPcGVyYW5kcygpKTsKKyAg
ICBSVU5fVU5BUlkodGVzdEJpdE9yVHJlZUFyZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworCiAgICAg
UlVOKHRlc3RBZGRBcmcoMTExKSk7CiAgICAgUlVOKHRlc3RBZGRBcmdzKDEsIDEpKTsKICAgICBS
VU4odGVzdEFkZEFyZ3MoMSwgMikpOwo=
</data>
<flag name="review"
          id="383035"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366686</attachid>
            <date>2019-04-03 18:25:08 -0700</date>
            <delta_ts>2019-04-03 18:26:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch194081</filename>
            <type>text/plain</type>
            <size>46567</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDM4MjcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE5LTA0LTAzICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBh
cHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIHVzZSBhc3NvY2lhdGl2aXR5IHRvIG9wdGlt
aXplIGV4cHJlc3Npb24gdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NDA4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZGVkIHRocmVlIG1pY3JvYmVuY2htYXJrczoKKyAgICAgICAgLSBhZGQt
dHJlZSBzaG91bGQgYmUgdGhlIGlkZWFsIGNhc2UsIGJ1dCB0aGVyZSBpcyBubyBzcGVlZHVwIGJl
Y2F1c2Ugd2UgYXJlIGN1cnJlbnRseSB1bmFibGUgdG8gcHJvdmUgdGhhdCB0aGUgQ2hlY2tBZGQg
d29uJ3Qgb3ZlcmZsb3cKKyAgICAgICAgLSBiaXQteG9yLXRyZWUgbW9zdCBjbG9zZWx5IG1hdGNo
ZXMgdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgb3B0aW1pemF0aW9uIHRyaWdnZXJzIG9uIHRoZSBK
ZXRTdHJlYW0yIHN1YnRlc3RzIHdoZXJlIGl0IHRyaWdnZXJzOgorICAgICAgICAgIGFuIHVuYmFs
YW5jZWQgZXhwcmVzc2lvbiB0cmVlIG9mIHNpemUgOCB0aGF0IGNhbiBiZSBiYWxhbmNlZCwgd2l0
aCBubyBvdGhlciBvcHRpbWl6YXRpb25zIGJlaW5nIHVubG9ja2VkLiAxNiUgc3BlZWR1cAorICAg
ICAgICAtIGJpdC1vci10cmVlIGlzIGFuIGlkZWFsIGNhc2UsIHdoZXJlIHRoZSByZWFzc29jaWF0
aW9uIGFsc28gZW5hYmxlcyBhIHRvbiBvZiBmdXJ0aGVyIHNpbXBsaWZpY2F0aW9ucy4gNDIlIHNw
ZWVkdXAKKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9hZGQtdHJlZS5qczogQWRkZWQuCisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL2JpdC1vci10cmVlLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBtaWNyb2JlbmNobWFya3MvYml0LXhvci10cmVlLmpzOiBBZGRlZC4KKwogMjAxOS0wMy0yOSAg
VGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRpb24g
ZmFpbGVkIGluIEpTQzo6Y3JlYXRlRXJyb3IKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2FkZC10cmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FkZC10
cmVlLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FkZC10cmVl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MjAwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBpICsgMTsKKyAgICByZXN1bHQgKz0g
aSArIDI7CisgICAgcmVzdWx0ICs9IGkgKyAzOworICAgIHJlc3VsdCArPSBpICsgNDsKKyAgICBy
ZXN1bHQgKz0gaSArIDU7CisgICAgcmVzdWx0ICs9IGkgKyA2OworICAgIHJlc3VsdCArPSBpICsg
NzsKKyAgICBpZiAocmVzdWx0ICE9IGkgKiA3ICsgMjgpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdCBhdCBpdGVyYXRpb24gIiArIGkgKyAiIDogIiArIHJlc3VsdDsKKworfQpJbmRl
eDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMJKG5vbmV4aXN0ZW50KQorKysg
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMyBAQAorZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDAwMDsgKytpKSB7CisgICAg
dmFyIHJlc3VsdCA9IGk7CisgICAgcmVzdWx0IHw9IGkgfCAxOworICAgIHJlc3VsdCB8PSBpIHwg
MjsKKyAgICByZXN1bHQgfD0gaSB8IDM7CisgICAgcmVzdWx0IHw9IGkgfCA0OworICAgIHJlc3Vs
dCB8PSBpIHwgNTsKKyAgICByZXN1bHQgfD0gaSB8IDY7CisgICAgcmVzdWx0IHw9IGkgfCA3Owor
ICAgIGlmIChyZXN1bHQgIT09IChpIHwgNykpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdCBhdCBpdGVyYXRpb24gIiArIGkgKyAiIDogIiArIHJlc3VsdDsKKworfQpJbmRleDogSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvYml0LXhvci10cmVlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2JpdC14b3ItdHJlZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9iaXQteG9yLXRyZWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMyBAQAordmFyIHJlc3VsdCA9IDA7Citmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDAw
OyArK2kpIHsKKyAgICByZXN1bHQgXj0gaTsKKyAgICByZXN1bHQgXj0gaSArIDE7CisgICAgcmVz
dWx0IF49IGkgKyAyOworICAgIHJlc3VsdCBePSBpICsgMzsKKyAgICByZXN1bHQgXj0gaSArIDQ7
CisgICAgcmVzdWx0IF49IGkgKyA1OworICAgIHJlc3VsdCBePSBpICsgNjsKKyAgICByZXN1bHQg
Xj0gaSArIDc7Cit9CitpZiAocmVzdWx0ICE9PSAwKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJl
c3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24g
MjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDY3IEBACisyMDE5LTA0LTAzICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3Nl
dEBhcHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIHVzZSBhc3NvY2lhdGl2aXR5IHRvIG9w
dGltaXplIGV4cHJlc3Npb24gdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5NDA4MQorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxv
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBCMyBwYXNzLCB0aGF0IHRyaWVzIHRv
IGZpbmQgYW5kIG9wdGltaXplIGV4cHJlc3Npb24gdHJlZXMgbWFkZSBwdXJlbHkgb2YgYW55IG9u
ZSBhc3NvY2lhdGl2ZSBhbmQgY29tbXV0YXRpdmUgb3BlcmF0b3IgKEFkZC9NdWwvQml0T3IvQml0
QW5kL0JpdFhvcikuCisgICAgICAgIFRoZSBwYXNzIG9ubHkgcnVucyBpbiBPMiwgYW5kIHJ1bnMg
b25jZSwgYWZ0ZXIgbG93ZXJNYWNyb3MgYW5kIGp1c3QgYmVmb3JlIGEgcnVuIG9mIEIzUmVkdWNl
U3RyZW5ndGggKHdoaWNoIGhlbHBzIGNsZWFuIHVwIHRoZSBkZWFkIGNvZGUgaXQgdGVuZHMgdG8g
bGVhdmUgYmVoaW5kKS4KKyAgICAgICAgSSBoYWQgdG8gc2VwYXJhdGUga2lsbERlYWRDb2RlIG91
dCBvZiBCM1JlZHVjZVN0cmVuZ3RoIChhcyBhIG5ldyBCM0VsaW1pbmF0ZURlYWRDb2RlIHBhc3Mp
IHRvIHJ1biBpdCBiZWZvcmUgQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLCBh
cyBvdGhlcndpc2UgaXQgaXMgc3RvcHBlZCBieSBoaWdoIHVzZSBjb3VudHMKKyAgICAgICAgaW5o
ZXJpdGVkIGZyb20gQ1NFLgorICAgICAgICBUaGlzIGV4dHJhIHJ1biBvZiBEQ0UgaXMgYnkgaXRz
ZWxmIGEgd2luLCBtb3N0IG5vdGFibHkgb24gbWljcm9iZW5jaG1hcmtzL2luc3RhbmNlb2YtYWx3
YXlzLWhpdC10d28gKDEuNXggZmFzdGVyKSwgYW5kIG9uIG1pY3JvYmVuY2htYXJrcy9saWNtLWRy
YWdvbnMoLW91dC1vZi1ib3VuZHMpIChib3RoIGdldCAxLjE2eCBzcGVlZHVwKS4KKyAgICAgICAg
SSBzdXNwZWN0IGl0IGlzIGJlY2F1c2UgaXQgcnVucyBiZXR3ZWVuIENTRSBhbmQgdGFpbC1kZWR1
cCwgYW5kIGFzIGEgcmVzdWx0IGFsbG93cyBhIGxvdCBtb3JlIHRhaWwtZGVkdXAgdG8gb2NjdXIu
CisKKyAgICAgICAgVGhlIHBhc3MgaXMgY3VycmVudGx5IGV4dHJlbWVseSBjb25zZXJ2YXRpdmUs
IG5vdCB0cnlpbmcgYW55dGhpbmcgaWYgaXQgd291bGQgY2F1c2UgX2FueV8gY29kZSBkdXBsaWNh
dGlvbi4KKyAgICAgICAgRm9yIHRoaXMgcHVycG9zZSwgaXQgc3RhcnRzIGJ5IGNvbXB1dGluZyB1
c2UgY291bnRzIGZvciB0aGUgcG90ZW50aWFsbHkgaW50ZXJlc3Rpbmcgbm9kZXMgKHRob3NlIHdp
dGggdGhlIHJpZ2h0IG9wY29kZXMpLCBhbmQgc2VncmVnYXRlIHRoZW0gaW50byBleHByZXNzaW9u
IHRyZWVzLgorICAgICAgICBUaGUgcm9vdCBvZiBhbiBleHByZXNzaW9uIHRyZWUgaXMgYSBub2Rl
IHRoYXQgaXMgZWl0aGVyIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBvciBpcyB1c2VkIGJ5IGEg
dmFsdWUgd2l0aCBhIGRpZmZlcmVudCBvcGNvZGUuCisgICAgICAgIFRoZSBsZWF2ZXMgb2YgYW4g
ZXhwcmVzc2lvbiB0cmVlIGFyZSBub2RlcyB0aGF0IGFyZSBlaXRoZXIgdXNlZCBpbiBtdWx0aXBs
ZSBwbGFjZXMsIG9yIGhhdmUgYSBkaWZmZXJlbnQgb3Bjb2RlLgorICAgICAgICBBbGwgY29uc3Rh
bnQgbGVhdmVzIG9mIGEgdHJlZSBhcmUgY29tYmluZWQsIGFzIHdlbGwgYXMgYWxsIGxlYXZlcyB0
aGF0IGFyZSBpZGVudGljYWwuIFdoYXQgcmVtYWlucyBpcyB0aGVuIGxhaWQgb3V0IGludG8gYSBi
YWxhbmNlZCBiaW5hcnkgdHJlZSwgaG9wZWZ1bGx5IG1heGltaXppbmcgSUxQLgorCisgICAgICAg
IFRoaXMgb3B0aW1pemF0aW9uIHdhcyBpbXBsZW1lbnRlZCBhcyBhIHN0YW5kLWFsb25lIHBhc3Mg
YW5kIG5vdCBhcyBwYXJ0IG9mIEIzUmVkdWNlU3RyZW5ndGggbW9zdGx5IGJlY2F1c2UgaXQgbmVl
ZHMgdXNlIGNvdW50cyB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAgICBJdCBhbHNv
IGJlbmVmaXRzIGZyb20gZmluZGluZyBhbGwgdHJlZSByb290cyBmaXJzdCwgYW5kIG5vdCB0cnlp
bmcgdG8gcmVwZWF0ZWRseSBvcHRpbWl6ZSBzdWJ0cmVlcy4KKworICAgICAgICBJIGFkZGVkIHNl
dmVyYWwgdGVzdHMgdG8gdGVzdEIzIHdpdGggdmFyeWluZyBwYXR0ZXJucyBvZiB0cmVlcy4gSXQg
aXMgYWxzbyB0ZXN0ZWQgaW4gYSBsZXNzIGZvY3VzZWQgd2F5IGJ5IGxvdHMgb2Ygb2xkZXIgdGVz
dHMuCisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSB0aGlzIHBhc3MgY291bGQgYmUgZXhwYW5kZWQg
dG8gYWxsb3cgc29tZSBib3VuZGVkIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0aW9uLCBhbmQgbWVy
Z2luZyBtb3JlIGxlYXZlcyAoZS5nLiBNdWwoYSwgMykgYW5kIGEgaW4gYW4gQWRkIHRyZWUsIGlu
dG8gTXVsKGEsIDQpKQorICAgICAgICBUaGUgbGF0dGVyIHdpbGwgbmVlZCBleHBvc2luZyB0aGUg
cGVlcGhvbGUgb3B0aW1pemF0aW9ucyBvdXQgb2YgQjNSZWR1Y2VTdHJlbmd0aCB0byBhdm9pZCBk
dXBsaWNhdGluZyBjb2RlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBiMy9CM0Nv
bW1vbi5jcHA6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVIpOgorICAgICAgICAoSlND
OjpCMzo6c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UpOgorICAgICAgICAqIGIzL0IzQ29tbW9uLmg6
CisgICAgICAgICogYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6RWxpbWluYXRlRGVhZENvZGU6OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjplbGlt
aW5hdGVEZWFkQ29kZSk6CisgICAgICAgICogYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkVsaW1pbmF0ZURlYWRDb2RlOjpFbGltaW5hdGVEZWFkQ29k
ZSk6CisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5l
cmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9u
VHJlZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVF
eHByZXNzaW9uVHJlZXM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMpOgorICAg
ICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6bmV1dHJh
bEVsZW1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Np
b25UcmVlczo6aXNBYnNvcmJpbmdFbGVtZW50KToKKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXpl
QXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OmNvbWJpbmVDb25zdGFudHMpOgorICAgICAgICAo
SlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6ZW1pdFZhbHVlKToK
KyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6Om9w
dGltaXplUm9vdGVkVHJlZSk6CisgICAgICAgIChKU0M6OkIzOjpPcHRpbWl6ZUFzc29jaWF0aXZl
RXhwcmVzc2lvblRyZWVzOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6b3B0aW1pemVBc3NvY2lh
dGl2ZUV4cHJlc3Npb25UcmVlcyk6CisgICAgICAgICogYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZl
RXhwcmVzc2lvblRyZWVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGgu
Y3BwOgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OnJlcGxhY2VXaXRoSWRlbnRpdHkpOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAg
IChKU0M6OkIzOjp0ZXN0Qml0WG9yVHJlZUFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJp
dFhvclRyZWVBcmdzRXZlbik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0WG9yVHJlZUFyZ0lt
bSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkVHJlZUFyZzMyKToKKyAgICAgICAgKEpTQzo6
QjM6OnRlc3RNdWxUcmVlQXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdEFuZFRyZWVB
cmczMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0T3JUcmVlQXJnMzIpOgorICAgICAgICAo
SlNDOjpCMzo6cnVuKToKKwogMjAxOS0wNC0wMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFw
cGxlLmNvbT4KIAogICAgICAgICBDcmFzaCBpbiBPcHRpb25zOjpzZXRPcHRpb25zKCkgdXNpbmcg
LS1jb25maWdGaWxlIG9wdGlvbiBhbmQgbGliZ21hbGxvYwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDI0Mzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC04NTEsNiArODUxLDcgQEAKIAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVy
YXRpb25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovOyB9
OwogCQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFGNzM4MkIxOEJCQkY5
MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDM0MkYzNkY3MjQ0MDk2ODA0QURCMjQgLyogU291
cmNlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0MjVCQTEzMzdFNDM0NEUxQjI2OUE2NzEgLyogU291cmNlT3JpZ2luLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzM5NUM3MDcyMjU1NUY2RDAw
QkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTVDNzA1MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1p
bmF0ZURlYWRDb2RlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6
LmR5bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzcxRDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CiAJCTM3QzczOEQy
MUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEy
OTUyNzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFw
cGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5h
bHNfd3JhcHBlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTMzMzYsNiArMzMzNywxMCBAQAogCQkyQUY3MzgyQjE4QkJCRjkyMDA4
QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdHJ1Y3R1cmVJRFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMw
MzIxNzVERjFBRDQ3RDg5OThCMzRFMSAvKiBKU1NvdXJjZUNvZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTb3VyY2VDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMwQTVGNDAzRjExQzRGNTk5Q0Q1OTZENSAvKiBXYXNtU2lnbmF0dXJlSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU2lnbmF0dXJlSW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzc0MzY0OTIyNEQ3OUVGMDBDOEMyMjcg
LyogQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHA7IHBhdGggPSBi
My9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMzc0MzY0QTIyNEQ3OUVGMDBDOEMyMjcgLyogQjNPcHRpbWl6ZUFz
c29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3B0aW1pemVBc3Nv
Y2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oOyBwYXRoID0gYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZl
RXhwcmVzc2lvblRyZWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTVDNzA0
MjI1NTVGNkMwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRWxpbWluYXRlRGVhZENvZGUuY3BwOyBwYXRoID0g
YjMvQjNFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMzOTVDNzA1MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWxpbWluYXRlRGVhZENvZGUuaDsgcGF0aCA9
IGIzL0IzRWxpbWluYXRlRGVhZENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MzcxMTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdldENvbmRpdGlvbmFscy54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25maWc7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBs
aWJ6LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRoID0gdXNy
L2xpYi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJMzdDNzM4RDExRURC
NTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzUyLDYgKzUz
NTcsOCBAQAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLywK
IAkJCQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHBy
ZXNzaW9ucy5jcHAgKi8sCiAJCQkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWlu
YXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKKwkJCQkzMzk1QzcwNDIyNTU1RjZDMDBCREJG
QUQgLyogQjNFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCisJCQkJMzM5NUM3MDUyMjU1NUY2RDAw
QkRCRkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCAqLywKIAkJCQkwRjVCRjE2RTFGMjNBNUEx
MDAyOUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8sCiAJCQkJMEY1QkYxNkYx
RjIzQTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCAqLywKIAkJCQkwRjY5
NzFFODFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmNwcCAqLywKQEAgLTUzOTksNiAr
NTQwNiw4IEBACiAJCQkJMEYzMzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9k
dWN0cy5oICovLAogCQkJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAg
Ki8sCiAJCQkJMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJCQkJ
MzM3NDM2NDkyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Np
b25UcmVlcy5jcHAgKi8sCisJCQkJMzM3NDM2NEEyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0aW1p
emVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oICovLAogCQkJCTBGRUM4NEQ5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8sCiAJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzT3JpZ2luLmggKi8sCiAJCQkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3Jp
Z2luRHVtcC5jcHAgKi8sCkBAIC05MDU5LDYgKzkwNjgsNyBAQAogCQkJCTBGNDg1MzJBMTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
RUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMzk1QzcwNzIyNTU1RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVEZWFk
Q29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZU
TFNsb3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyMkU1QTcxREE2NDRBODAw
NkU3NzA5IC8qIEZUTFNuaXBwZXRQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ3
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExTdGFja21hcEFyZ3VtZW50TGlzdC5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDM3ODEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEy
NCw2ICsxMjQsNyBAQAogYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKIGIzL0IzRWZmZWN0cy5jcHAK
IGIzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCitiMy9CM0VsaW1pbmF0ZURl
YWRDb2RlLmNwcAogYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAKIGIzL0IzRmVuY2VWYWx1
ZS5jcHAKIGIzL0IzRml4U1NBLmNwcApAQCAtMTQzLDYgKzE0NCw3IEBACiBiMy9CM01vdmVDb25z
dGFudHMuY3BwCiBiMy9CM09wYXF1ZUJ5cHJvZHVjdHMuY3BwCiBiMy9CM09wY29kZS5jcHAKK2Iz
L0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAKIGIzL0IzT3JpZ2luLmNw
cAogYjMvQjNPcmlnaW5EdW1wLmNwcAogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkocmV2aXNpb24gMjQzNzgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotYm9vbCBz
aG91bGREdW1wSVIoQjNDb21wbGl0YXRpb25Nb2RlIG1vZGUpCitib29sIHNob3VsZER1bXBJUihC
M0NvbXBpbGF0aW9uTW9kZSBtb2RlKQogewogI2lmIEVOQUJMRShGVExfSklUKQogICAgIHJldHVy
biBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNh
c3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKG1vZGUpOwpAQCAtNDQsNyArNDQs
NyBAQAogI2VuZGlmCiB9CiAKLWJvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjNDb21wbGl0
YXRpb25Nb2RlIG1vZGUpCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzQ29tcGlsYXRp
b25Nb2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQjNNb2RlKQogICAgICAgICByZXR1cm4g
T3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKSB8fCBPcHRpb25zOjpkdW1wQjNHcmFwaEF0
RWFjaFBoYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNp
b24gMjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDEzICszNCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKIAotZW51bSBCM0NvbXBsaXRhdGlvbk1vZGUgeworZW51bSBCM0NvbXBpbGF0aW9uTW9k
ZSB7CiAgICAgQjNNb2RlLAogICAgIEFpck1vZGUKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIGJv
b2wgc2hvdWxkRHVtcElSKEIzQ29tcGxpdGF0aW9uTW9kZSk7Ci1ib29sIHNob3VsZER1bXBJUkF0
RWFjaFBoYXNlKEIzQ29tcGxpdGF0aW9uTW9kZSk7CitKU19FWFBPUlRfUFJJVkFURSBib29sIHNo
b3VsZER1bXBJUihCM0NvbXBpbGF0aW9uTW9kZSk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBo
YXNlKEIzQ29tcGlsYXRpb25Nb2RlKTsKIGJvb2wgc2hvdWxkVmFsaWRhdGVJUigpOwogYm9vbCBz
aG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKIGJvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhh
c2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZURlYWRDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVE
ZWFkQ29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
RWxpbWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzRWxpbWluYXRlRGVhZENvZGUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzVmFyaWFibGUuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhTZXQuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisv
LyBGSVhNRTogdGhpcyBwYXNzIGN1cnJlbnRseSBvbmx5IGVsaW1pbmF0ZXMgdmFsdWVzIGFuZCB2
YXJpYWJsZXMsIGl0IGRvZXMgbm90IHNlZW0gdG8gZWxpbWluYXRlIGRlYWQgYmxvY2tzLgorCiti
b29sIGVsaW1pbmF0ZURlYWRDb2RlSW1wbChQcm9jZWR1cmUmIHByb2MpCit7CisgICAgYm9vbCBj
aGFuZ2VkID0gZmFsc2U7CisgICAgR3JhcGhOb2RlV29ya2xpc3Q8VmFsdWUqLCBJbmRleFNldDxW
YWx1ZSo+PiB3b3JrbGlzdDsKKyAgICBWZWN0b3I8VXBzaWxvblZhbHVlKiwgNjQ+IHVwc2lsb25z
OworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CisgICAgICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAg
ICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IGVmZmVjdHMgb2YgU1NBIG9wZXJhdGlvbnMs
IHNpbmNlIHdlIG1vZGVsIHRoZW0gbW9yZQorICAgICAgICAgICAgLy8gYWNjdXJhdGVseSB0aGFu
IHRoZSBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCisgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29k
ZSgpICE9IFBoaSAmJiB2YWx1ZS0+b3Bjb2RlKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAg
ICBlZmZlY3RzID0gdmFsdWUtPmVmZmVjdHMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGVmZmVjdHMubXVzdEV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNo
KHZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFVwc2lsb25WYWx1ZSogdXBz
aWxvbiA9IHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCkpCisgICAgICAgICAgICAgICAgdXBzaWxv
bnMuYXBwZW5kKHVwc2lsb24pOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoOzspIHsKKyAg
ICAgICAgd2hpbGUgKFZhbHVlKiB2YWx1ZSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAg
ICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goY2hpbGQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29s
IGRpZFB1c2ggPSBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgdXBzaWxvbkluZGV4ID0gMDsg
dXBzaWxvbkluZGV4IDwgdXBzaWxvbnMuc2l6ZSgpOyArK3Vwc2lsb25JbmRleCkgeworICAgICAg
ICAgICAgVXBzaWxvblZhbHVlKiB1cHNpbG9uID0gdXBzaWxvbnNbdXBzaWxvbkluZGV4XTsKKyAg
ICAgICAgICAgIGlmICh3b3JrbGlzdC5zYXcodXBzaWxvbi0+cGhpKCkpKSB7CisgICAgICAgICAg
ICAgICAgd29ya2xpc3QucHVzaCh1cHNpbG9uKTsKKyAgICAgICAgICAgICAgICB1cHNpbG9uc1t1
cHNpbG9uSW5kZXgtLV0gPSB1cHNpbG9ucy5sYXN0KCk7CisgICAgICAgICAgICAgICAgdXBzaWxv
bnMudGFrZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBkaWRQdXNoID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWRpZFB1c2gpCisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBJbmRleFNldDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJsZXM7CisgICAg
CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsKKyAgICAgICAgc2l6ZV90IHNv
dXJjZUluZGV4ID0gMDsKKyAgICAgICAgc2l6ZV90IHRhcmdldEluZGV4ID0gMDsKKyAgICAgICAg
d2hpbGUgKHNvdXJjZUluZGV4IDwgYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgVmFsdWUq
IHZhbHVlID0gYmxvY2stPmF0KHNvdXJjZUluZGV4KyspOworICAgICAgICAgICAgaWYgKHdvcmts
aXN0LnNhdyh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVmFyaWFibGVWYWx1ZSogdmFy
aWFibGVWYWx1ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQorICAgICAgICAgICAgICAg
ICAgICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpKTsKKyAgICAg
ICAgICAgICAgICBibG9jay0+YXQodGFyZ2V0SW5kZXgrKykgPSB2YWx1ZTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcHJvYy5kZWxldGVWYWx1ZSh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgYmxvY2stPnZhbHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRleCk7CisgICAgfQorCisgICAg
Zm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7CisgICAgICAgIGlm
ICghbGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCisgICAgICAgICAgICBwcm9jLmRl
bGV0ZVZhcmlhYmxlKHZhcmlhYmxlKTsKKyAgICB9CisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisK
K2Jvb2wgZWxpbWluYXRlRGVhZENvZGUoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShwcm9jLCAiZWxpbWluYXRlRGVhZENvZGUiKTsKKyAgICByZXR1cm4gZWxp
bWluYXRlRGVhZENvZGVJbXBsKHByb2MpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNFbGltaW5hdGVEZWFkQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VsaW1pbmF0ZURlYWRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlRGVhZENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gVGhlICdJbXBsJyB2ZXJz
aW9uIG9mIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhIHNjb3BlIHBoYXNlLiBJdCBpcyBw
dWJsaWMgc28gdGhhdCBCM1JlZHVjZVN0cmVuZ3RoIGNhbiB1c2UgaXQgaW4gaXRzIGZpeHBvaW50
LgorYm9vbCBlbGltaW5hdGVEZWFkQ29kZUltcGwoUHJvY2VkdXJlJik7CitKU19FWFBPUlRfUFJJ
VkFURSBib29sIGVsaW1pbmF0ZURlYWRDb2RlKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDI0Mzc4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQs
NiArMzQsNyBAQAogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNEdXBsaWNhdGVU
YWlscy5oIgogI2luY2x1ZGUgIkIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCIKKyNp
bmNsdWRlICJCM0VsaW1pbmF0ZURlYWRDb2RlLmgiCiAjaW5jbHVkZSAiQjNGaXhTU0EuaCIKICNp
bmNsdWRlICJCM0ZvbGRQYXRoQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiQjNIb2lzdExvb3BJbnZh
cmlhbnRWYWx1ZXMuaCIKQEAgLTQzLDYgKzQ0LDcgQEAKICNpbmNsdWRlICJCM0xvd2VyTWFjcm9z
QWZ0ZXJPcHRpbWl6YXRpb25zLmgiCiAjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCiAjaW5jbHVk
ZSAiQjNNb3ZlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhw
cmVzc2lvblRyZWVzLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1B1
cmVDU0UuaCIKICNpbmNsdWRlICJCM1JlZHVjZURvdWJsZVRvRmxvYXQuaCIKQEAgLTg3LDEyICs4
OSwxMiBAQAogICAgICAgICBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMocHJvY2VkdXJlKTsKICAg
ICAgICAgaWYgKGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zKHByb2NlZHVyZSkpCiAgICAg
ICAgICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUpOworICAgICAg
ICBlbGltaW5hdGVEZWFkQ29kZShwcm9jZWR1cmUpOwogICAgICAgICBpbmZlclN3aXRjaGVzKHBy
b2NlZHVyZSk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VCM1RhaWxEdXAoKSkKICAgICAgICAg
ICAgIGR1cGxpY2F0ZVRhaWxzKHByb2NlZHVyZSk7CiAgICAgICAgIGZpeFNTQShwcm9jZWR1cmUp
OwogICAgICAgICBmb2xkUGF0aENvbnN0YW50cyhwcm9jZWR1cmUpOwotICAgICAgICAKICAgICAg
ICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNwogICAgIH0gZWxzZSBp
ZiAocHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMSkgewpAQCAtMTA0LDYgKzEwNiw3IEBACiAgICAg
bG93ZXJNYWNyb3MocHJvY2VkdXJlKTsKIAogICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+
PSAyKSB7CisgICAgICAgIG9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMocHJvY2Vk
dXJlKTsKICAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKIAogICAgICAgICAvLyBG
SVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4
cHJlc3Npb25UcmVlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcHRpbWl6ZUFzc29j
aWF0aXZlRXhwcmVzc2lvblRyZWVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiQjNPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1By
b2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgT3B0aW1pemVB
c3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyB7CitwdWJsaWM6CisgICAgT3B0aW1pemVBc3NvY2lh
dGl2ZUV4cHJlc3Npb25UcmVlcyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9jKHBy
b2MpCisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCk7CisKK3ByaXZhdGU6CisgICAgaW50
NjRfdCBuZXV0cmFsRWxlbWVudChPcGNvZGUpOworICAgIGJvb2wgaXNBYnNvcmJpbmdFbGVtZW50
KE9wY29kZSwgaW50NjRfdCk7CisgICAgdm9pZCBjb21iaW5lQ29uc3RhbnRzKE9wY29kZSwgaW50
NjRfdCYsIGludDY0X3QpOworICAgIHZvaWQgZW1pdFZhbHVlKE9wY29kZSwgVmFsdWUqLCB1bnNp
Z25lZCBudW1TZWVuLCBJbnNlcnRpb25TZXQmLCBzaXplX3QgaW5kZXhJbkJsb2NrLCBWZWN0b3I8
VmFsdWUqLCA0PiYgcmVzdWx0cyk7CisgICAgYm9vbCBvcHRpbWl6ZVJvb3RlZFRyZWUoVmFsdWUq
IHJvb3QsIEluc2VydGlvblNldCYsIHNpemVfdCBpbmRleEluQmxvY2ssIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZD4mIHVzZUNvdW50cyk7CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBib29s
IHZlcmJvc2UgeyBmYWxzZSB9OworfTsKKworaW50NjRfdCBPcHRpbWl6ZUFzc29jaWF0aXZlRXhw
cmVzc2lvblRyZWVzOjpuZXV0cmFsRWxlbWVudChPcGNvZGUgb3ApCit7CisgICAgc3dpdGNoIChv
cCkgeworICAgIGNhc2UgQWRkOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6Cisg
ICAgICAgIHJldHVybiAwOworICAgIGNhc2UgTXVsOgorICAgICAgICByZXR1cm4gMTsKKyAgICBj
YXNlIEJpdEFuZDoKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIE9wdGltaXplQXNz
b2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OmlzQWJzb3JiaW5nRWxlbWVudChPcGNvZGUgb3AsIGlu
dDY0X3QgY29uc3RhbnQpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAg
IGNhc2UgQml0WG9yOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNdWw6CisgICAg
Y2FzZSBCaXRBbmQ6CisgICAgICAgIHJldHVybiAhY29uc3RhbnQ7CisgICAgY2FzZSBCaXRPcjoK
KyAgICAgICAgcmV0dXJuIGNvbnN0YW50ID09IC0xOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE9wdGltaXplQXNz
b2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OmNvbWJpbmVDb25zdGFudHMoT3Bjb2RlIG9wLCBpbnQ2
NF90JiBjb25zdDEsIGludDY0X3QgY29uc3QyKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBj
YXNlIEFkZDoKKyAgICAgICAgY29uc3QxICs9IGNvbnN0MjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBNdWw6CisgICAgICAgIGNvbnN0MSAqPSBjb25zdDI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQml0QW5kOgorICAgICAgICBjb25zdDEgJj0gY29uc3QyOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEJpdE9yOgorICAgICAgICBjb25zdDEgfD0gY29uc3QyOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY29uc3QxIF49IGNvbnN0MjsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6
ZW1pdFZhbHVlKE9wY29kZSBvcCwgVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBudW1TZWVuLCBJbnNl
cnRpb25TZXQmIGluc2VydGlvblNldCwgc2l6ZV90IGluZGV4SW5CbG9jaywgVmVjdG9yPFZhbHVl
KiwgND4mIHJlc3VsdHMpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAg
ICAgICBpZiAobnVtU2VlbiA+IDEpIHsKKyAgICAgICAgICAgIFZhbHVlKiBjb25zdE51bVNlZW47
CisgICAgICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBJbnQzMikKKyAgICAgICAgICAgICAg
ICBjb25zdE51bVNlZW4gPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJ
bkJsb2NrLCB2YWx1ZS0+b3JpZ2luKCksIG51bVNlZW4pOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGNvbnN0TnVtU2VlbiA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZh
bHVlPihpbmRleEluQmxvY2ssIHZhbHVlLT5vcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4o
bnVtU2VlbikpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYWx1ZT4oaW5kZXhJbkJsb2NrLCBNdWwsIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIGNvbnN0
TnVtU2VlbikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZh
bHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNdWw6CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1TZWVuOyArK2kpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh2
YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBCaXRYb3I6CisgICAgICAgIGlmIChudW1TZWVuICUgMikKKyAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgT3B0aW1pemVBc3Nv
Y2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6b3B0aW1pemVSb290ZWRUcmVlKFZhbHVlKiByb290LCBJ
bnNlcnRpb25TZXQmIGluc2VydGlvblNldCwgc2l6ZV90IGluZGV4SW5CbG9jaywgY29uc3QgVmVj
dG9yPHVuc2lnbmVkPiYgdXNlQ291bnRzKQoreworICAgIE9wY29kZSBvcCA9IHJvb3QtPm9wY29k
ZSgpOworICAgIGlmICgocm9vdC0+Y2hpbGQoMCktPm9wY29kZSgpICE9IG9wIHx8IHVzZUNvdW50
c1tyb290LT5jaGlsZCgwKS0+aW5kZXgoKV0gPiAxKQorICAgICAgICAmJiAocm9vdC0+Y2hpbGQo
MSktPm9wY29kZSgpICE9IG9wIHx8IHVzZUNvdW50c1tyb290LT5jaGlsZCgxKS0+aW5kZXgoKV0g
PiAxKSkgeworICAgICAgICAvLyBUaGlzIGlzIGEgdHJpdmlhbCBleHByZXNzaW9uIHRyZWUgb2Yg
c2l6ZSB0d28sIHdlIGhhdmUgbm90aGluZyB0byBkbyBoZXJlIHRoYXQgQjNSZWR1Y2VTdHJlbmd0
aCBjYW5ub3QgZG8gYmV0dGVyIHRoYW4gdXMuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICAvLyBXZSBwcm9jZWVkIGluIHRocmVlIHN0ZXBzOgorICAgIC8vIC0gZ2F0aGVyIGFs
bCB0aGUgbGVhdmVzIG9mIHRoZSBleHByZXNzaW9uIHRyZWUKKyAgICAvLyAtIHNvcnQgdGhlbSwg
YW5kIGNvbWJpbmUgYXMgbWFueSBhcyBwb3NzaWJsZQorICAgIC8vIC0gbWFrZSBhIGJhbGFuY2Vk
IGJpbmFyeSB0cmVlIG9mIHRoZW0KKworICAgIFZlY3RvcjxWYWx1ZSosIDQ+IGxlYXZlczsKKyAg
ICBWZWN0b3I8VmFsdWUqLCAzPiB3b3JrbGlzdCA9IHsgcm9vdC0+Y2hpbGQoMCksIHJvb3QtPmNo
aWxkKDEpIH07CisgICAgaW50NjRfdCBjb25zdGFudCA9IG5ldXRyYWxFbGVtZW50KG9wKTsKKyAg
ICB1bnNpZ25lZCBudW1WaXNpdGVkID0gMDsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHko
KSkgeworICAgICAgICBWYWx1ZSogdmFsID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAg
aWYgKHZhbC0+b3Bjb2RlKCkgPT0gb3AgJiYgdXNlQ291bnRzW3ZhbC0+aW5kZXgoKV0gPCAyKSB7
CisgICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5jaGlsZCgwKSk7CisgICAgICAgICAg
ICB3b3JrbGlzdC5hcHBlbmQodmFsLT5jaGlsZCgxKSk7CisgICAgICAgIH0gZWxzZSBpZiAodmFs
LT5oYXNJbnQoKSkgeworICAgICAgICAgICAgY29tYmluZUNvbnN0YW50cyhvcCwgY29uc3RhbnQs
IHZhbC0+YXNJbnQoKSk7CisgICAgICAgICAgICBudW1WaXNpdGVkKys7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBudW1WaXNpdGVkKys7CisgICAgICAgICAgICBsZWF2ZXMuYXBwZW5k
KHZhbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlzQWJzb3JiaW5nRWxlbWVudChvcCwg
Y29uc3RhbnQpKSB7CisgICAgICAgIFZhbHVlKiBuZXdSb290OworICAgICAgICBpZiAocm9vdC0+
dHlwZSgpID09IEludDMyKQorICAgICAgICAgICAgbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNl
cnQ8Q29uc3QzMlZhbHVlPihpbmRleEluQmxvY2ssIHJvb3QtPm9yaWdpbigpLCBzdGF0aWNfY2Fz
dDxpbnQzMl90Pihjb25zdGFudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdSb290
ID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KGluZGV4SW5CbG9jaywgcm9vdC0+
b3JpZ2luKCksIGNvbnN0YW50KTsKKyAgICAgICAgcm9vdC0+cmVwbGFjZVdpdGhJZGVudGl0eShu
ZXdSb290KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChudW1WaXNpdGVk
IDwgNCkgeworICAgICAgICAvLyBUaGlzIGlzIGEgbmVhcmx5LXRyaXZpYWwgZXhwcmVzc2lvbiBv
ZiBzaXplIDMuIEIzUmVkdWNlU3RyZW5ndGggaXMgc3RpbGwgYWJsZSB0byBkZWFsIHdpdGggc3Vj
aCBleHByZXNzaW9ucyBjb21wZXRlbnRseSwgYW5kIHRoZXJlIGlzIG5vIHBvc3NpYmxlIHdpbiBm
cm9tIGJhbGFuY2luZyB0aGVtLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
c3RkOjpzb3J0KGxlYXZlcy5iZWdpbigpLCBsZWF2ZXMuZW5kKCksIFtdKFZhbHVlKiB4LCBWYWx1
ZSogeSkgeworICAgICAgICByZXR1cm4geC0+aW5kZXgoKSA8IHktPmluZGV4KCk7CisgICAgfSk7
CisgICAgVmVjdG9yPFZhbHVlKiwgND4gb3B0TGVhdmVzOworICAgIFZhbHVlKiBsYXN0VmFsdWUg
PSBudWxscHRyOworICAgIHVuc2lnbmVkIG51bVNlZW4gPSAwOworICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogbGVhdmVzKSB7CisgICAgICAgIGlmIChsYXN0VmFsdWUgPT0gdmFsdWUpCisgICAgICAg
ICAgICBudW1TZWVuKys7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGxhc3RWYWx1
ZSkKKyAgICAgICAgICAgICAgICBlbWl0VmFsdWUob3AsIGxhc3RWYWx1ZSwgbnVtU2VlbiwgaW5z
ZXJ0aW9uU2V0LCBpbmRleEluQmxvY2ssIG9wdExlYXZlcyk7CisgICAgICAgICAgICBsYXN0VmFs
dWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIG51bVNlZW4gPSAxOworICAgICAgICB9CisgICAgfQor
ICAgIGlmIChsYXN0VmFsdWUpCisgICAgICAgIGVtaXRWYWx1ZShvcCwgbGFzdFZhbHVlLCBudW1T
ZWVuLCBpbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywgb3B0TGVhdmVzKTsKKworICAgIC8vIG9w
dExlYXZlcyBjYW4gYmUgZW1wdHkgZm9yIHRyZWVzIG9mIEJpdFhvciB3aGVyZSBhbGwgbGVhdmVz
IGhhcHBlbiBhbiBldmVuIG51bWJlciBvZiB0aW1lcy4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHdl
IG1ha2UgdGhlIHdob2xlIHRyZWUgZXF1aXZhbGVudCB0byB0aGUgbmV1dHJhbCBlbGVtZW50ICh3
aGljaCBpcyAwIGZvciBCaXRYb3IpLgorICAgIGlmIChjb25zdGFudCAhPSBuZXV0cmFsRWxlbWVu
dChvcCkgfHwgb3B0TGVhdmVzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAocm9vdC0+dHlwZSgp
ID09IEludDMyKQorICAgICAgICAgICAgb3B0TGVhdmVzLmFwcGVuZChpbnNlcnRpb25TZXQuaW5z
ZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJsb2NrLCByb290LT5vcmlnaW4oKSwgc3RhdGljX2Nh
c3Q8aW50MzJfdD4oY29uc3RhbnQpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wdExl
YXZlcy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KGluZGV4SW5CbG9j
aywgcm9vdC0+b3JpZ2luKCksIGNvbnN0YW50KSk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2Up
IHsKKyAgICAgICAgZGF0YUxvZygiICAgICAgRXhwcmVzc2lvbiB0cmVlIHJvb3RlZCBhdCAiLCAq
cm9vdCwgIiAoIiwgcm9vdC0+b3Bjb2RlKCksICIpIHdpdGggbGVhdmVzIChudW1WaXNpdGVkID0g
IiwgbnVtVmlzaXRlZCwgIikgIik7CisgICAgICAgIGZvciAoVmFsdWUqIGxlYWYgOiBsZWF2ZXMp
CisgICAgICAgICAgICBkYXRhTG9nKCIgIiwgKmxlYWYpOworICAgICAgICBkYXRhTG9nKCIgPT4i
KTsKKyAgICAgICAgZm9yIChWYWx1ZSogbGVhZiA6IG9wdExlYXZlcykKKyAgICAgICAgICAgIGRh
dGFMb2coIiAiLCAqbGVhZik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgfQorCisgICAg
Ly8gRmluYWxseSB3ZSBjYW4gYnVpbGQgdGhlIGJhbGFuY2VkIGJpbmFyeSB0cmVlCisgICAgdW5z
aWduZWQgbGVhZkluZGV4ID0gMDsKKyAgICB3aGlsZSAobGVhZkluZGV4ICsgMSA8IG9wdExlYXZl
cy5zaXplKCkpIHsKKyAgICAgICAgb3B0TGVhdmVzLmFwcGVuZChpbnNlcnRpb25TZXQuaW5zZXJ0
PFZhbHVlPihpbmRleEluQmxvY2ssIG9wLCByb290LT5vcmlnaW4oKSwgb3B0TGVhdmVzW2xlYWZJ
bmRleF0sIG9wdExlYXZlc1tsZWFmSW5kZXggKyAxXSkpOworICAgICAgICBsZWFmSW5kZXggKz0g
MjsKKyAgICB9CisgICAgQVNTRVJUKGxlYWZJbmRleCA9PSBvcHRMZWF2ZXMuc2l6ZSgpIC0gMSk7
CisgICAgcm9vdC0+cmVwbGFjZVdpdGhJZGVudGl0eShvcHRMZWF2ZXNbbGVhZkluZGV4XSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25U
cmVlczo6cnVuKCkKK3sKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIFdlIHBy
b2NlZWQgaW4gdHdvIHBoYXNlcy4KKyAgICAvLyBJbiB0aGUgZmlyc3Qgb25lIHdlIGNvbXB1dGUg
dGhlIHVzZSBjb3VudHMgb2YgZWFjaCB2YWx1ZSAob2YgYW4gaW50ZXJlc3Rpbmcgb3Bjb2RlKSwg
YW5kIGZpbmQgcG90ZW50aWFsIHJvb3RzIG9mIGludGVyZXN0aW5nIGV4cHJlc3Npb24gdHJlZXMu
CisgICAgLy8gSW4gdGhlIHNlY29uZCBvbmUgd2Ugb3B0aW1pemUgZWFjaCBzdWNoIGV4cHJlc3Np
b24gdHJlZSBpbiB0dXJuLgorICAgIC8vIFdlIG5lZWQgdGhlIHVzZSBjb3VudHMgdG8gYXZvaWQg
ZHVwbGljYXRpbmcgY29kZS4KKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdXNlQ291bnRzKG1fcHJv
Yy52YWx1ZXMoKS5zaXplKCksIDApOyAvLyBNYXBwaW5nIGZyb20gVmFsdWU6Om1faW5kZXggdG8g
dXNlIGNvdW50cy4KKyAgICBIYXNoU2V0PFZhbHVlKj4gZXhwcmVzc2lvblRyZWVSb290czsKKyAg
ICBIYXNoU2V0PEJhc2ljQmxvY2sqPiByb290T3duZXJzOworCisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fcHJvYykgeworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykg
eworICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgewor
ICAgICAgICAgICAgICAgIGlmICghY2hpbGQtPmlzSW50ZWdlcigpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoaWxkLT5vcGNvZGUoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgTXVsOgorICAgICAgICAgICAgICAgIGNhc2UgQWRkOgor
ICAgICAgICAgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICAgICAgICAgIGNhc2UgQml0T3I6
CisgICAgICAgICAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgICAgICAgICAgICAgIHVzZUNv
dW50c1tjaGlsZC0+aW5kZXgoKV0rKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5v
cGNvZGUoKSAhPSB2YWx1ZS0+b3Bjb2RlKCkgfHwgdXNlQ291bnRzW2NoaWxkLT5pbmRleCgpXSA+
IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25UcmVlUm9vdHMuYWRkKGNo
aWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RPd25lcnMuYWRkKGNoaWxkLT5vd25l
cik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldCA9IEluc2VydGlvblNldChtX3Byb2MpOworICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiByb290T3duZXJzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAg
IFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChpbmRleCk7CisgICAgICAgICAgICBpZiAoZXhwcmVz
c2lvblRyZWVSb290cy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBvcHRpbWl6ZVJvb3RlZFRyZWUodmFsdWUsIGluc2VydGlvblNldCwgaW5kZXgsIHVzZUNvdW50
cyk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAg
IH0KKworICAgIHJldHVybiBjaGFuZ2VkOworfQorCitib29sIG9wdGltaXplQXNzb2NpYXRpdmVF
eHByZXNzaW9uVHJlZXMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VT
Y29wZShwcm9jLCAib3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyIpOworICAgIE9w
dGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMgb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJl
c3Npb25UcmVlcyhwcm9jKTsKKyAgICByZXR1cm4gb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Np
b25UcmVlcy5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3B0aW1p
emVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFByb2NlZHVyZTsKKworLy8gRmluZHMgbGFyZ2UgZXhwcmVzc2lvbiB0cmVlcyB1c2lu
ZyBvbmUgb2YgdGhlIGFzc29jaWF0aXZlIGFuZCBjb21tdXRhdGl2ZSBvcGNvZGVzIChBZGQvTXVs
L0JpdEFuZC9CaXRPci9CaXRYb3IpLAorLy8gdGhlbiByZW9yZGVyIHRoZW0gdG8gZWxpbWluYXRl
IGFzIG1hbnkgb3BlcmF0aW9ucyBhcyBwb3NzaWJsZSwgdGhlbiBtYWtlIGJhbGFuY2VkIGJpbmFy
eSB0cmVlcyBvdXQgb2YgdGhlbQorLy8gdG8gbWF4aW1pemUgSUxQIGFuZCBtaW5pbWl6ZSB0aGUg
dG90YWwgbGF0ZW5jeS4KK2Jvb2wgb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyhQ
cm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5n
dGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0
cmVuZ3RoLmNwcAkocmV2aXNpb24gMjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiQjNCbG9ja0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkIzQ29tcHV0ZURpdmlz
aW9uTWFnaWMuaCIKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0VsaW1p
bmF0ZURlYWRDb2RlLmgiCiAjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiQjNNZW1vcnlWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIK
QEAgLTQ0MCw3ICs0NDEsNyBAQAogICAgICAgICAgICAgLy8gImhvaXN0IiBAdGhpbmcuIE9uIHRo
ZSBvdGhlciBoYW5kLCBpZiB3ZSBydW4gRENFIGJlZm9yZSBDU0UsIHdlIHdpbGwga2lsbCBAZGVh
ZCBhbmQKICAgICAgICAgICAgIC8vIGtlZXAgQHRoaW5nLiBUaGF0J3MgYmV0dGVyLCBzaW5jZSB3
ZSB1c3VhbGx5IHdhbnQgdGhpbmdzIHRvIHN0YXkgd2hlcmV2ZXIgdGhlIGNsaWVudAogICAgICAg
ICAgICAgLy8gcHV0IHRoZW0uIFdlJ3JlIG5vdCBhY3R1YWxseSBzbWFydCBlbm91Z2ggdG8gbW92
ZSB0aGluZ3MgYXJvdW5kIGF0IHJhbmRvbS4KLSAgICAgICAgICAgIGtpbGxEZWFkQ29kZSgpOwor
ICAgICAgICAgICAgbV9jaGFuZ2VkIHw9IGVsaW1pbmF0ZURlYWRDb2RlSW1wbChtX3Byb2MpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBzaW1wbGlmeVNTQSgpOwogICAgICAgICAgICAgCkBA
IC0yNzMyLDcwICsyNzMzLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbERl
YWRDb2RlKCkKLSAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZhbHVlKiwgSW5kZXhT
ZXQ8VmFsdWUqPj4gd29ya2xpc3Q7Ci0gICAgICAgIFZlY3RvcjxVcHNpbG9uVmFsdWUqLCA2ND4g
dXBzaWxvbnM7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKLSAg
ICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAg
RWZmZWN0cyBlZmZlY3RzOwotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQg
ZWZmZWN0cyBvZiBTU0Egb3BlcmF0aW9ucywgc2luY2Ugd2UgbW9kZWwgdGhlbSBtb3JlCi0gICAg
ICAgICAgICAgICAgLy8gYWNjdXJhdGVseSB0aGFuIHRoZSBlZmZlY3RzKCkgbWV0aG9kIGRvZXMu
Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBQaGkgJiYgdmFsdWUtPm9w
Y29kZSgpICE9IFVwc2lsb24pCi0gICAgICAgICAgICAgICAgICAgIGVmZmVjdHMgPSB2YWx1ZS0+
ZWZmZWN0cygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChlZmZlY3Rz
Lm11c3RFeGVjdXRlKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2godmFsdWUp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUqIHVw
c2lsb24gPSB2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpKQotICAgICAgICAgICAgICAgICAgICB1
cHNpbG9ucy5hcHBlbmQodXBzaWxvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgZm9yICg7OykgewotICAgICAgICAgICAgd2hpbGUgKFZhbHVlKiB2YWx1ZSA9IHdvcmtsaXN0
LnBvcCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hp
bGRyZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChjaGlsZCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJvb2wgZGlkUHVzaCA9IGZhbHNl
OwotICAgICAgICAgICAgZm9yIChzaXplX3QgdXBzaWxvbkluZGV4ID0gMDsgdXBzaWxvbkluZGV4
IDwgdXBzaWxvbnMuc2l6ZSgpOyArK3Vwc2lsb25JbmRleCkgewotICAgICAgICAgICAgICAgIFVw
c2lsb25WYWx1ZSogdXBzaWxvbiA9IHVwc2lsb25zW3Vwc2lsb25JbmRleF07Ci0gICAgICAgICAg
ICAgICAgaWYgKHdvcmtsaXN0LnNhdyh1cHNpbG9uLT5waGkoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgd29ya2xpc3QucHVzaCh1cHNpbG9uKTsKLSAgICAgICAgICAgICAgICAgICAgdXBzaWxv
bnNbdXBzaWxvbkluZGV4LS1dID0gdXBzaWxvbnMubGFzdCgpOwotICAgICAgICAgICAgICAgICAg
ICB1cHNpbG9ucy50YWtlTGFzdCgpOwotICAgICAgICAgICAgICAgICAgICBkaWRQdXNoID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRp
ZFB1c2gpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBJbmRl
eFNldDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJsZXM7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7Ci0gICAgICAgICAgICBzaXplX3Qgc291cmNlSW5k
ZXggPSAwOwotICAgICAgICAgICAgc2l6ZV90IHRhcmdldEluZGV4ID0gMDsKLSAgICAgICAgICAg
IHdoaWxlIChzb3VyY2VJbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBW
YWx1ZSogdmFsdWUgPSBibG9jay0+YXQoc291cmNlSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAg
aWYgKHdvcmtsaXN0LnNhdyh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFZhcmlh
YmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUtPnZh
cmlhYmxlKCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQodGFyZ2V0SW5kZXgrKykg
PSB2YWx1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBt
X3Byb2MuZGVsZXRlVmFsdWUodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJs
b2NrLT52YWx1ZXMoKS5yZXNpemUodGFyZ2V0SW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Zm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBtX3Byb2MudmFyaWFibGVzKCkpIHsKLSAgICAgICAg
ICAgIGlmICghbGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCi0gICAgICAgICAgICAg
ICAgbV9wcm9jLmRlbGV0ZVZhcmlhYmxlKHZhcmlhYmxlKTsKLSAgICAgICAgfQotICAgIH0KLQog
ICAgIHZvaWQgc2ltcGxpZnlTU0EoKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBydW5zIEF5Y29j
ayBhbmQgSG9yc3Bvb2wncyBhbGdvcml0aG0gb24gb3VyIFBoaSBmdW5jdGlvbnMgWzFdLiBGb3Ig
bW9zdCBDRkcgcGF0dGVybnMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3Bw
CShyZXZpc2lvbiAyNDM3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICAgICAvLyBwcmV2aW91cyB2YWx1
ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBw
bGFjZS4KIAogICAgIEFTU0VSVChtX3R5cGUgPT0gdmFsdWUtPm1fdHlwZSk7CisgICAgQVNTRVJU
KHZhbHVlICE9IHRoaXMpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBWb2lkKSB7CiAgICAgICAgIHJl
cGxhY2VXaXRoTm9wSWdub3JpbmdUeXBlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmNwcAkocmV2aXNpb24gMjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCM0Nv
bXBpbGUuaCIKICNpbmNsdWRlICJCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmgiCiAjaW5jbHVkZSAi
QjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzQ29uc3RQdHJWYWx1ZS5oIgogI2luY2x1ZGUgIkIzRWZmZWN0cy5oIgogI2luY2x1ZGUgIkIz
RmVuY2VWYWx1ZS5oIgpAQCAtMzk4LDYgKzM5OSwxMzIgQEAKICAgICB0ZXN0TG9hZFdpdGhPZmZz
ZXRJbXBsKDMyNzY4LCAxNjM4NCk7CiB9CiAKK3ZvaWQgdGVzdEJpdFhvclRyZWVBcmdzKGludDY0
X3QgYSwgaW50NjRfdCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sq
IHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgVmFsdWUqIGFyZ0IgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIG5vZGUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIGFy
Z0IpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3Jp
Z2luKCksIG5vZGUsIGFyZ0IpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHBy
b2MsIEJpdFhvciwgT3JpZ2luKCksIG5vZGUsIGFyZ0EpOworICAgIG5vZGUgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5vZGUsIGFyZ0IpOworICAgIHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7CisKKyAg
ICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEsIGIpLCAoKChhIF4gYikg
XiBiKSBeIGEpIF4gYik7Cit9CisKK3ZvaWQgdGVzdEJpdFhvclRyZWVBcmdzRXZlbihpbnQ2NF90
IGEsIGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBub2RlID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBhcmdC
KTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdp
bigpLCBub2RlLCBhcmdCKTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9j
LCBCaXRYb3IsIE9yaWdpbigpLCBub2RlLCBhcmdBKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGls
ZUFuZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBiKSwgKChhIF4gYikgXiBiKSBeIGEpOworfQorCit2
b2lkIHRlc3RCaXRYb3JUcmVlQXJnSW1tKGludDY0X3QgYSwgaW50NjRfdCBiKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGltbUIgPSByb290
LT5hcHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYik7CisgICAgVmFsdWUq
IG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFy
Z0EsIGltbUIpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhv
ciwgT3JpZ2luKCksIGFyZ0EsIG5vZGUpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIG5vZGUpOworICAgIG5vZGUgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGltbUIsIG5vZGUpOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7
CisKKyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEpLCBiIF4gKGEg
XiAoYSBeIChhIF4gYikpKSk7Cit9CisKK3ZvaWQgdGVzdEFkZFRyZWVBcmczMihpbnQzMl90IGEp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBhcmdBID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZ0EpOworICAg
IFZhbHVlKiBub2RlID0gYXJnQTsKKyAgICBpbnQzMl90IGV4cGVjdGVkUmVzdWx0ID0gYTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjA7ICsraSkgeworICAgICAgICBWYWx1ZSogb3Ro
ZXJOb2RlOworICAgICAgICBpZiAoIShpICUgMykpIHsKKyAgICAgICAgICAgIG90aGVyTm9kZSA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpKTsKKyAgICAg
ICAgICAgIGV4cGVjdGVkUmVzdWx0ICs9IGk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBvdGhlck5vZGUgPSBhcmdBOworICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQgKz0gYTsKKyAg
ICAgICAgfQorICAgICAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQs
IE9yaWdpbigpLCBub2RlLCBvdGhlck5vZGUpOworICAgIH0KKyAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29t
cGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBhKSwgZXhwZWN0ZWRSZXN1bHQpOworfQorCit2b2lk
IHRlc3RNdWxUcmVlQXJnMzIoaW50MzJfdCBhKQoreworICAgIC8vIEZpYm9uYWNjaS1saWtlIGV4
cHJlc3Npb24gdHJlZSB3aXRoIG11bHRpcGxpY2F0aW9uIGluc3RlYWQgb2YgYWRkaXRpb24uCisg
ICAgLy8gVmVyaWZpZXMgdGhhdCB3ZSBkb24ndCBleHBsb2RlIG9uIGhlYXZpbHkgZmFjdG9yZWQg
Z3JhcGhzLgorICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRS
ZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXJn
QSA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBhcmdBKTsK
KyAgICBWYWx1ZSogbm9kZUEgPSBhcmdBOworICAgIFZhbHVlKiBub2RlQiA9IGFyZ0E7CisgICAg
aW50MzJfdCBleHBlY3RlZEEgPSBhLCBleHBlY3RlZFJlc3VsdCA9IGE7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDIwOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIG5ld05vZGVCID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBub2RlQSwgbm9kZUIpOwor
ICAgICAgICBub2RlQSA9IG5vZGVCOworICAgICAgICBub2RlQiA9IG5ld05vZGVCOworICAgICAg
ICBpbnQzMl90IG5ld0V4cGVjdGVkUmVzdWx0ID0gZXhwZWN0ZWRBICogZXhwZWN0ZWRSZXN1bHQ7
CisgICAgICAgIGV4cGVjdGVkQSA9IGV4cGVjdGVkUmVzdWx0OworICAgICAgICBleHBlY3RlZFJl
c3VsdCA9IG5ld0V4cGVjdGVkUmVzdWx0OworICAgIH0KKyAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGVCKTsKKworICAgIENIRUNLX0VRKGNvbXBp
bGVBbmRSdW48aW50MzJfdD4ocHJvYywgYSksIGV4cGVjdGVkUmVzdWx0KTsKK30KKwordm9pZCB0
ZXN0Qml0QW5kVHJlZUFyZzMyKGludDMyX3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOworICAgIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwgYXJnQSk7CisgICAgVmFsdWUqIG5vZGUgPSBhcmdBOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCA4OyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNvbnN0SSA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpIHwgNDIpOwor
ICAgICAgICBWYWx1ZSogbmV3Qml0QW5kID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRBbmQsIE9yaWdpbigpLCBhcmdBLCBjb25zdEkpOworICAgICAgICBub2RlID0gcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBub2RlLCBuZXdCaXRBbmQpOwor
ICAgIH0KKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCks
IG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBhKSwg
YSAmIDQyKTsKK30KKwordm9pZCB0ZXN0Qml0T3JUcmVlQXJnMzIoaW50MzJfdCBhKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXJnQSA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBhcmdBKTsKKyAgICBWYWx1ZSog
bm9kZSA9IGFyZ0E7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDg7ICsraSkgeworICAg
ICAgICBWYWx1ZSogY29uc3RJID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGkpOworICAgICAgICBWYWx1ZSogbmV3Qml0QW5kID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIGFyZ0EsIGNvbnN0SSk7CisgICAgICAgIG5v
ZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbm9kZSwg
bmV3Qml0QW5kKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCBub2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50MzJf
dD4ocHJvYywgYSksIGEgfCA3KTsKK30KKwogdm9pZCB0ZXN0QXJnKGludCBhcmd1bWVudCkKIHsK
ICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTE3MDQ4LDYgKzE3MTc1LDE0IEBACiAgICAgUlVOKHRl
c3RSZXR1cm5Db25zdDY0KC00MikpOwogICAgIFJVTih0ZXN0UmV0dXJuVm9pZCgpKTsKIAorICAg
IFJVTl9CSU5BUlkodGVzdEJpdFhvclRyZWVBcmdzLCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3Bl
cmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0WG9yVHJlZUFyZ3NFdmVuLCBpbnQ2NE9w
ZXJhbmRzKCksIGludDY0T3BlcmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0WG9yVHJl
ZUFyZ0ltbSwgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFS
WSh0ZXN0QWRkVHJlZUFyZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0
TXVsVHJlZUFyZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0Qml0QW5k
VHJlZUFyZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0Qml0T3JUcmVl
QXJnMzIsIGludDMyT3BlcmFuZHMoKSk7CisKICAgICBSVU4odGVzdEFkZEFyZygxMTEpKTsKICAg
ICBSVU4odGVzdEFkZEFyZ3MoMSwgMSkpOwogICAgIFJVTih0ZXN0QWRkQXJncygxLCAyKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366687</attachid>
            <date>2019-04-03 18:26:12 -0700</date>
            <delta_ts>2019-04-03 20:37:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch194081</filename>
            <type>text/plain</type>
            <size>46564</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDM4MjcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDE5LTA0LTAzICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBh
cHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIHVzZSBhc3NvY2lhdGl2aXR5IHRvIG9wdGlt
aXplIGV4cHJlc3Npb24gdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NDA4MQorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgor
CisgICAgICAgIEFkZGVkIHRocmVlIG1pY3JvYmVuY2htYXJrczoKKyAgICAgICAgLSBhZGQtdHJl
ZSBzaG91bGQgYmUgdGhlIGlkZWFsIGNhc2UsIGJ1dCB0aGVyZSBpcyBubyBzcGVlZHVwIGJlY2F1
c2Ugd2UgYXJlIGN1cnJlbnRseSB1bmFibGUgdG8gcHJvdmUgdGhhdCB0aGUgQ2hlY2tBZGQgd29u
J3Qgb3ZlcmZsb3cKKyAgICAgICAgLSBiaXQteG9yLXRyZWUgbW9zdCBjbG9zZWx5IG1hdGNoZXMg
dGhlIHNpdHVhdGlvbiB3aGVyZSB0aGUgb3B0aW1pemF0aW9uIHRyaWdnZXJzIG9uIHRoZSBKZXRT
dHJlYW0yIHN1YnRlc3RzIHdoZXJlIGl0IHRyaWdnZXJzOgorICAgICAgICAgIGFuIHVuYmFsYW5j
ZWQgZXhwcmVzc2lvbiB0cmVlIG9mIHNpemUgOCB0aGF0IGNhbiBiZSBiYWxhbmNlZCwgd2l0aCBu
byBvdGhlciBvcHRpbWl6YXRpb25zIGJlaW5nIHVubG9ja2VkLiAxNiUgc3BlZWR1cAorICAgICAg
ICAtIGJpdC1vci10cmVlIGlzIGFuIGlkZWFsIGNhc2UsIHdoZXJlIHRoZSByZWFzc29jaWF0aW9u
IGFsc28gZW5hYmxlcyBhIHRvbiBvZiBmdXJ0aGVyIHNpbXBsaWZpY2F0aW9ucy4gNDIlIHNwZWVk
dXAKKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9hZGQtdHJlZS5qczogQWRkZWQuCisgICAg
ICAgICogbWljcm9iZW5jaG1hcmtzL2JpdC1vci10cmVlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBt
aWNyb2JlbmNobWFya3MvYml0LXhvci10cmVlLmpzOiBBZGRlZC4KKwogMjAxOS0wMy0yOSAgVGFk
ZXUgWmFnYWxsbyAgPHR6YWdhbGxvQGFwcGxlLmNvbT4KIAogICAgICAgICBBc3NlcnRpb24gZmFp
bGVkIGluIEpTQzo6Y3JlYXRlRXJyb3IKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Fk
ZC10cmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FkZC10cmVl
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2FkZC10cmVlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAw
MDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBpICsgMTsKKyAgICByZXN1bHQgKz0gaSAr
IDI7CisgICAgcmVzdWx0ICs9IGkgKyAzOworICAgIHJlc3VsdCArPSBpICsgNDsKKyAgICByZXN1
bHQgKz0gaSArIDU7CisgICAgcmVzdWx0ICs9IGkgKyA2OworICAgIHJlc3VsdCArPSBpICsgNzsK
KyAgICBpZiAocmVzdWx0ICE9IGkgKiA3ICsgMjgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdCBhdCBpdGVyYXRpb24gIiArIGkgKyAiIDogIiArIHJlc3VsdDsKKworfQpJbmRleDog
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMJKG5vbmV4aXN0ZW50KQorKysgSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvYml0LW9yLXRyZWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMyBAQAorZm9yICh2YXIgaSA9IDA7IGkgPCAyMDAwMDAwMDsgKytpKSB7CisgICAgdmFy
IHJlc3VsdCA9IGk7CisgICAgcmVzdWx0IHw9IGkgfCAxOworICAgIHJlc3VsdCB8PSBpIHwgMjsK
KyAgICByZXN1bHQgfD0gaSB8IDM7CisgICAgcmVzdWx0IHw9IGkgfCA0OworICAgIHJlc3VsdCB8
PSBpIHwgNTsKKyAgICByZXN1bHQgfD0gaSB8IDY7CisgICAgcmVzdWx0IHw9IGkgfCA3OworICAg
IGlmIChyZXN1bHQgIT09IChpIHwgNykpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dCBhdCBpdGVyYXRpb24gIiArIGkgKyAiIDogIiArIHJlc3VsdDsKKworfQpJbmRleDogSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvYml0LXhvci10cmVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2JpdC14b3ItdHJlZS5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9iaXQteG9yLXRyZWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMyBAQAordmFyIHJlc3VsdCA9IDA7Citmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDAwOyAr
K2kpIHsKKyAgICByZXN1bHQgXj0gaTsKKyAgICByZXN1bHQgXj0gaSArIDE7CisgICAgcmVzdWx0
IF49IGkgKyAyOworICAgIHJlc3VsdCBePSBpICsgMzsKKyAgICByZXN1bHQgXj0gaSArIDQ7Cisg
ICAgcmVzdWx0IF49IGkgKyA1OworICAgIHJlc3VsdCBePSBpICsgNjsKKyAgICByZXN1bHQgXj0g
aSArIDc7Cit9CitpZiAocmVzdWx0ICE9PSAwKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjQz
NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDY3IEBACisyMDE5LTA0LTAzICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBh
cHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIHVzZSBhc3NvY2lhdGl2aXR5IHRvIG9wdGlt
aXplIGV4cHJlc3Npb24gdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NDA4MQorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgor
CisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBCMyBwYXNzLCB0aGF0IHRyaWVzIHRvIGZp
bmQgYW5kIG9wdGltaXplIGV4cHJlc3Npb24gdHJlZXMgbWFkZSBwdXJlbHkgb2YgYW55IG9uZSBh
c3NvY2lhdGl2ZSBhbmQgY29tbXV0YXRpdmUgb3BlcmF0b3IgKEFkZC9NdWwvQml0T3IvQml0QW5k
L0JpdFhvcikuCisgICAgICAgIFRoZSBwYXNzIG9ubHkgcnVucyBpbiBPMiwgYW5kIHJ1bnMgb25j
ZSwgYWZ0ZXIgbG93ZXJNYWNyb3MgYW5kIGp1c3QgYmVmb3JlIGEgcnVuIG9mIEIzUmVkdWNlU3Ry
ZW5ndGggKHdoaWNoIGhlbHBzIGNsZWFuIHVwIHRoZSBkZWFkIGNvZGUgaXQgdGVuZHMgdG8gbGVh
dmUgYmVoaW5kKS4KKyAgICAgICAgSSBoYWQgdG8gc2VwYXJhdGUga2lsbERlYWRDb2RlIG91dCBv
ZiBCM1JlZHVjZVN0cmVuZ3RoIChhcyBhIG5ldyBCM0VsaW1pbmF0ZURlYWRDb2RlIHBhc3MpIHRv
IHJ1biBpdCBiZWZvcmUgQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLCBhcyBv
dGhlcndpc2UgaXQgaXMgc3RvcHBlZCBieSBoaWdoIHVzZSBjb3VudHMKKyAgICAgICAgaW5oZXJp
dGVkIGZyb20gQ1NFLgorICAgICAgICBUaGlzIGV4dHJhIHJ1biBvZiBEQ0UgaXMgYnkgaXRzZWxm
IGEgd2luLCBtb3N0IG5vdGFibHkgb24gbWljcm9iZW5jaG1hcmtzL2luc3RhbmNlb2YtYWx3YXlz
LWhpdC10d28gKDEuNXggZmFzdGVyKSwgYW5kIG9uIG1pY3JvYmVuY2htYXJrcy9saWNtLWRyYWdv
bnMoLW91dC1vZi1ib3VuZHMpIChib3RoIGdldCAxLjE2eCBzcGVlZHVwKS4KKyAgICAgICAgSSBz
dXNwZWN0IGl0IGlzIGJlY2F1c2UgaXQgcnVucyBiZXR3ZWVuIENTRSBhbmQgdGFpbC1kZWR1cCwg
YW5kIGFzIGEgcmVzdWx0IGFsbG93cyBhIGxvdCBtb3JlIHRhaWwtZGVkdXAgdG8gb2NjdXIuCisK
KyAgICAgICAgVGhlIHBhc3MgaXMgY3VycmVudGx5IGV4dHJlbWVseSBjb25zZXJ2YXRpdmUsIG5v
dCB0cnlpbmcgYW55dGhpbmcgaWYgaXQgd291bGQgY2F1c2UgX2FueV8gY29kZSBkdXBsaWNhdGlv
bi4KKyAgICAgICAgRm9yIHRoaXMgcHVycG9zZSwgaXQgc3RhcnRzIGJ5IGNvbXB1dGluZyB1c2Ug
Y291bnRzIGZvciB0aGUgcG90ZW50aWFsbHkgaW50ZXJlc3Rpbmcgbm9kZXMgKHRob3NlIHdpdGgg
dGhlIHJpZ2h0IG9wY29kZXMpLCBhbmQgc2VncmVnYXRlIHRoZW0gaW50byBleHByZXNzaW9uIHRy
ZWVzLgorICAgICAgICBUaGUgcm9vdCBvZiBhbiBleHByZXNzaW9uIHRyZWUgaXMgYSBub2RlIHRo
YXQgaXMgZWl0aGVyIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzLCBvciBpcyB1c2VkIGJ5IGEgdmFs
dWUgd2l0aCBhIGRpZmZlcmVudCBvcGNvZGUuCisgICAgICAgIFRoZSBsZWF2ZXMgb2YgYW4gZXhw
cmVzc2lvbiB0cmVlIGFyZSBub2RlcyB0aGF0IGFyZSBlaXRoZXIgdXNlZCBpbiBtdWx0aXBsZSBw
bGFjZXMsIG9yIGhhdmUgYSBkaWZmZXJlbnQgb3Bjb2RlLgorICAgICAgICBBbGwgY29uc3RhbnQg
bGVhdmVzIG9mIGEgdHJlZSBhcmUgY29tYmluZWQsIGFzIHdlbGwgYXMgYWxsIGxlYXZlcyB0aGF0
IGFyZSBpZGVudGljYWwuIFdoYXQgcmVtYWlucyBpcyB0aGVuIGxhaWQgb3V0IGludG8gYSBiYWxh
bmNlZCBiaW5hcnkgdHJlZSwgaG9wZWZ1bGx5IG1heGltaXppbmcgSUxQLgorCisgICAgICAgIFRo
aXMgb3B0aW1pemF0aW9uIHdhcyBpbXBsZW1lbnRlZCBhcyBhIHN0YW5kLWFsb25lIHBhc3MgYW5k
IG5vdCBhcyBwYXJ0IG9mIEIzUmVkdWNlU3RyZW5ndGggbW9zdGx5IGJlY2F1c2UgaXQgbmVlZHMg
dXNlIGNvdW50cyB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLgorICAgICAgICBJdCBhbHNvIGJl
bmVmaXRzIGZyb20gZmluZGluZyBhbGwgdHJlZSByb290cyBmaXJzdCwgYW5kIG5vdCB0cnlpbmcg
dG8gcmVwZWF0ZWRseSBvcHRpbWl6ZSBzdWJ0cmVlcy4KKworICAgICAgICBJIGFkZGVkIHNldmVy
YWwgdGVzdHMgdG8gdGVzdEIzIHdpdGggdmFyeWluZyBwYXR0ZXJucyBvZiB0cmVlcy4gSXQgaXMg
YWxzbyB0ZXN0ZWQgaW4gYSBsZXNzIGZvY3VzZWQgd2F5IGJ5IGxvdHMgb2Ygb2xkZXIgdGVzdHMu
CisKKyAgICAgICAgSW4gdGhlIGZ1dHVyZSB0aGlzIHBhc3MgY291bGQgYmUgZXhwYW5kZWQgdG8g
YWxsb3cgc29tZSBib3VuZGVkIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0aW9uLCBhbmQgbWVyZ2lu
ZyBtb3JlIGxlYXZlcyAoZS5nLiBNdWwoYSwgMykgYW5kIGEgaW4gYW4gQWRkIHRyZWUsIGludG8g
TXVsKGEsIDQpKQorICAgICAgICBUaGUgbGF0dGVyIHdpbGwgbmVlZCBleHBvc2luZyB0aGUgcGVl
cGhvbGUgb3B0aW1pemF0aW9ucyBvdXQgb2YgQjNSZWR1Y2VTdHJlbmd0aCB0byBhdm9pZCBkdXBs
aWNhdGluZyBjb2RlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBiMy9CM0NvbW1v
bi5jcHA6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVIpOgorICAgICAgICAoSlNDOjpC
Mzo6c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UpOgorICAgICAgICAqIGIzL0IzQ29tbW9uLmg6Cisg
ICAgICAgICogYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6RWxpbWluYXRlRGVhZENvZGU6OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjplbGltaW5h
dGVEZWFkQ29kZSk6CisgICAgICAgICogYjMvQjNFbGltaW5hdGVEZWFkQ29kZS5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6OkVsaW1pbmF0ZURlYWRDb2RlOjpFbGltaW5hdGVEZWFkQ29kZSk6
CisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0
ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJl
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHBy
ZXNzaW9uVHJlZXM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMpOgorICAgICAg
ICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6bmV1dHJhbEVs
ZW1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25U
cmVlczo6aXNBYnNvcmJpbmdFbGVtZW50KToKKyAgICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNz
b2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6OmNvbWJpbmVDb25zdGFudHMpOgorICAgICAgICAoSlND
OjpCMzo6T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6ZW1pdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6Ok9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXM6Om9wdGlt
aXplUm9vdGVkVHJlZSk6CisgICAgICAgIChKU0M6OkIzOjpPcHRpbWl6ZUFzc29jaWF0aXZlRXhw
cmVzc2lvblRyZWVzOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6b3B0aW1pemVBc3NvY2lhdGl2
ZUV4cHJlc3Npb25UcmVlcyk6CisgICAgICAgICogYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhw
cmVzc2lvblRyZWVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
OgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJl
cGxhY2VXaXRoSWRlbnRpdHkpOgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0Qml0WG9yVHJlZUFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdFhv
clRyZWVBcmdzRXZlbik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0WG9yVHJlZUFyZ0ltbSk6
CisgICAgICAgIChKU0M6OkIzOjp0ZXN0QWRkVHJlZUFyZzMyKToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RNdWxUcmVlQXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEJpdEFuZFRyZWVBcmcz
Mik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0Qml0T3JUcmVlQXJnMzIpOgorICAgICAgICAoSlND
OjpCMzo6cnVuKToKKwogMjAxOS0wNC0wMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxl
LmNvbT4KIAogICAgICAgICBDcmFzaCBpbiBPcHRpb25zOjpzZXRPcHRpb25zKCkgdXNpbmcgLS1j
b25maWdGaWxlIG9wdGlvbiBhbmQgbGliZ21hbGxvYwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI0Mzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04
NTEsNiArODUxLDcgQEAKIAkJMkFEODkzMkIxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRp
b25TY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkFEODkzMjkxN0UzODY4RjAwNjY4Mjc2IC8qIEhlYXBJdGVyYXRpb25TY29wZS5oICovOyB9Owog
CQkyQUY3MzgyRDE4QkJCRjkyMDA4QTVBMzcgLyogU3RydWN0dXJlSURUYWJsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkFGNzM4MkIxOEJCQkY5MjAw
OEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkyRDM0MkYzNkY3MjQ0MDk2ODA0QURCMjQgLyogU291cmNl
T3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MjVCQTEzMzdFNDM0NEUxQjI2OUE2NzEgLyogU291cmNlT3JpZ2luLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzM5NUM3MDcyMjU1NUY2RDAwQkRC
RkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMzOTVDNzA1MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0
ZURlYWRDb2RlLmggKi87IH07CiAJCTM3MUQ4NDJEMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6LmR5
bGliIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcx
RDg0MkMxN0M5OEI2RTAwRUNGOTk0IC8qIGxpYnouZHlsaWIgKi87IH07CiAJCTM3QzczOEQyMUVE
QjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzdDNzM4RDExRURCNTY3MjAwM0YyQjBCIC8qIFBhcnNlSW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDEyOTUy
NzcxRDJDRjZCQzAwRTc4Qjg5IC8qIGJ1aWx0aW5zX2dlbmVyYXRlX2ludGVybmFsc193cmFwcGVy
X2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQxMjk1MjczMUQyQ0Y2QUMwMEU3OEI4OSAvKiBidWlsdGluc19nZW5lcmF0ZV9pbnRlcm5hbHNf
d3JhcHBlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTMzMzYsNiArMzMzNywxMCBAQAogCQkyQUY3MzgyQjE4QkJCRjkyMDA4QTVB
MzcgLyogU3RydWN0dXJlSURUYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHJ1Y3R1cmVJRFRhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMwMzIx
NzVERjFBRDQ3RDg5OThCMzRFMSAvKiBKU1NvdXJjZUNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTb3VyY2VDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMwQTVGNDAzRjExQzRGNTk5Q0Q1OTZENSAvKiBXYXNtU2lnbmF0dXJlSW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXYXNtU2lnbmF0dXJlSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMzc0MzY0OTIyNEQ3OUVGMDBDOEMyMjcgLyog
QjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVzc2lvblRyZWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHA7IHBhdGggPSBiMy9C
M09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMzc0MzY0QTIyNEQ3OUVGMDBDOEMyMjcgLyogQjNPcHRpbWl6ZUFzc29j
aWF0aXZlRXhwcmVzc2lvblRyZWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3B0aW1pemVBc3NvY2lh
dGl2ZUV4cHJlc3Npb25UcmVlcy5oOyBwYXRoID0gYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhw
cmVzc2lvblRyZWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzOTVDNzA0MjI1
NTVGNkMwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRWxpbWluYXRlRGVhZENvZGUuY3BwOyBwYXRoID0gYjMv
QjNFbGltaW5hdGVEZWFkQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMz
OTVDNzA1MjI1NTVGNkQwMEJEQkZBRCAvKiBCM0VsaW1pbmF0ZURlYWRDb2RlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRWxpbWluYXRlRGVhZENvZGUuaDsgcGF0aCA9IGIz
L0IzRWxpbWluYXRlRGVhZENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcx
MTlBNzcyMENDQjVEQzAwMkM2REM5IC8qIFdlYktpdFRhcmdldENvbmRpdGlvbmFscy54Y2NvbmZp
ZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
eGNjb25maWc7IHBhdGggPSBXZWJLaXRUYXJnZXRDb25kaXRpb25hbHMueGNjb25maWc7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUQ4NDJDMTdDOThCNkUwMEVDRjk5NCAvKiBsaWJ6
LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
ImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ6LmR5bGliOyBwYXRoID0gdXNyL2xp
Yi9saWJ6LmR5bGliOyBzb3VyY2VUcmVlID0gU0RLUk9PVDsgfTsKIAkJMzdDNzM4RDExRURCNTY3
MjAwM0YyQjBCIC8qIFBhcnNlSW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhcnNlSW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MzUyLDYgKzUzNTcs
OCBAQAogCQkJCTBGRUM4NUJFMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0VmZmVjdHMuaCAqLywKIAkJ
CQkwRjcyNUNBMzFDNTAzREVEMDBBRDk0M0EgLyogQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNz
aW9ucy5jcHAgKi8sCiAJCQkJMEY3MjVDQTQxQzUwM0RFRDAwQUQ5NDNBIC8qIEIzRWxpbWluYXRl
Q29tbW9uU3ViZXhwcmVzc2lvbnMuaCAqLywKKwkJCQkzMzk1QzcwNDIyNTU1RjZDMDBCREJGQUQg
LyogQjNFbGltaW5hdGVEZWFkQ29kZS5jcHAgKi8sCisJCQkJMzM5NUM3MDUyMjU1NUY2RDAwQkRC
RkFEIC8qIEIzRWxpbWluYXRlRGVhZENvZGUuaCAqLywKIAkJCQkwRjVCRjE2RTFGMjNBNUExMDAy
OUQ5MUQgLyogQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAgKi8sCiAJCQkJMEY1QkYxNkYxRjIz
QTVBMTAwMjlEOTFEIC8qIEIzRW5zdXJlTG9vcFByZUhlYWRlcnMuaCAqLywKIAkJCQkwRjY5NzFF
ODFEOTJGNDIxMDBCQTAyQTUgLyogQjNGZW5jZVZhbHVlLmNwcCAqLywKQEAgLTUzOTksNiArNTQw
Niw4IEBACiAJCQkJMEYzMzhFMDcxQkYwMjc2QzAwMTNDODhGIC8qIEIzT3BhcXVlQnlwcm9kdWN0
cy5oICovLAogCQkJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi8s
CiAJCQkJMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJCQkJMzM3
NDM2NDkyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25U
cmVlcy5jcHAgKi8sCisJCQkJMzM3NDM2NEEyMjRENzlFRjAwQzhDMjI3IC8qIEIzT3B0aW1pemVB
c3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oICovLAogCQkJCTBGRUM4NEQ5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5jcHAgKi8sCiAJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmggKi8sCiAJCQkJMEY0REUxRDAxQzRENzY0QjAwNEQ2QzExIC8qIEIzT3JpZ2lu
RHVtcC5jcHAgKi8sCkBAIC05MDU5LDYgKzkwNjgsNyBAQAogCQkJCTBGNDg1MzJBMTg3REZERUMw
MDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZB
QUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjI1RjFCMjE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzMzk1QzcwNzIyNTU1RjZEMDBCREJGQUQgLyogQjNFbGltaW5hdGVEZWFkQ29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNUYxQjQxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbEtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMyMkU1QTcxREE2NDRBODAwNkU3
NzA5IC8qIEZUTFNuaXBwZXRQYXJhbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkQ3MTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExTdGFja21hcEFyZ3VtZW50TGlzdC5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNDM3ODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEyNCw2
ICsxMjQsNyBAQAogYjMvQjNEdXBsaWNhdGVUYWlscy5jcHAKIGIzL0IzRWZmZWN0cy5jcHAKIGIz
L0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCitiMy9CM0VsaW1pbmF0ZURlYWRD
b2RlLmNwcAogYjMvQjNFbnN1cmVMb29wUHJlSGVhZGVycy5jcHAKIGIzL0IzRmVuY2VWYWx1ZS5j
cHAKIGIzL0IzRml4U1NBLmNwcApAQCAtMTQzLDYgKzE0NCw3IEBACiBiMy9CM01vdmVDb25zdGFu
dHMuY3BwCiBiMy9CM09wYXF1ZUJ5cHJvZHVjdHMuY3BwCiBiMy9CM09wY29kZS5jcHAKK2IzL0Iz
T3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAKIGIzL0IzT3JpZ2luLmNwcAog
YjMvQjNPcmlnaW5EdW1wLmNwcAogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkocmV2aXNpb24gMjQzNzgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAotYm9vbCBzaG91
bGREdW1wSVIoQjNDb21wbGl0YXRpb25Nb2RlIG1vZGUpCitib29sIHNob3VsZER1bXBJUihCM0Nv
bXBpbGF0aW9uTW9kZSBtb2RlKQogewogI2lmIEVOQUJMRShGVExfSklUKQogICAgIHJldHVybiBG
VEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3Nl
bWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKG1vZGUpOwpAQCAtNDQsNyArNDQsNyBA
QAogI2VuZGlmCiB9CiAKLWJvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoQjNDb21wbGl0YXRp
b25Nb2RlIG1vZGUpCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKEIzQ29tcGlsYXRpb25N
b2RlIG1vZGUpCiB7CiAgICAgaWYgKG1vZGUgPT0gQjNNb2RlKQogICAgICAgICByZXR1cm4gT3B0
aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKSB8fCBPcHRpb25zOjpkdW1wQjNHcmFwaEF0RWFj
aFBoYXNlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24g
MjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDEzICszNCwxMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKIAotZW51bSBCM0NvbXBsaXRhdGlvbk1vZGUgeworZW51bSBCM0NvbXBpbGF0aW9uTW9kZSB7
CiAgICAgQjNNb2RlLAogICAgIEFpck1vZGUKIH07CiAKLUpTX0VYUE9SVF9QUklWQVRFIGJvb2wg
c2hvdWxkRHVtcElSKEIzQ29tcGxpdGF0aW9uTW9kZSk7Ci1ib29sIHNob3VsZER1bXBJUkF0RWFj
aFBoYXNlKEIzQ29tcGxpdGF0aW9uTW9kZSk7CitKU19FWFBPUlRfUFJJVkFURSBib29sIHNob3Vs
ZER1bXBJUihCM0NvbXBpbGF0aW9uTW9kZSk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNl
KEIzQ29tcGlsYXRpb25Nb2RlKTsKIGJvb2wgc2hvdWxkVmFsaWRhdGVJUigpOwogYm9vbCBzaG91
bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKIGJvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZURlYWRDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVEZWFk
Q29kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxp
bWluYXRlRGVhZENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzRWxpbWluYXRlRGVhZENvZGUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
VmFyaWFibGUuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYv
R3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBG
SVhNRTogdGhpcyBwYXNzIGN1cnJlbnRseSBvbmx5IGVsaW1pbmF0ZXMgdmFsdWVzIGFuZCB2YXJp
YWJsZXMsIGl0IGRvZXMgbm90IHNlZW0gdG8gZWxpbWluYXRlIGRlYWQgYmxvY2tzLgorCitib29s
IGVsaW1pbmF0ZURlYWRDb2RlSW1wbChQcm9jZWR1cmUmIHByb2MpCit7CisgICAgYm9vbCBjaGFu
Z2VkID0gZmFsc2U7CisgICAgR3JhcGhOb2RlV29ya2xpc3Q8VmFsdWUqLCBJbmRleFNldDxWYWx1
ZSo+PiB3b3JrbGlzdDsKKyAgICBWZWN0b3I8VXBzaWxvblZhbHVlKiwgNjQ+IHVwc2lsb25zOwor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CisgICAgICAgIGZvciAoVmFsdWUq
IHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgICAg
ICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IGVmZmVjdHMgb2YgU1NBIG9wZXJhdGlvbnMsIHNp
bmNlIHdlIG1vZGVsIHRoZW0gbW9yZQorICAgICAgICAgICAgLy8gYWNjdXJhdGVseSB0aGFuIHRo
ZSBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCisgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgp
ICE9IFBoaSAmJiB2YWx1ZS0+b3Bjb2RlKCkgIT0gVXBzaWxvbikKKyAgICAgICAgICAgICAgICBl
ZmZlY3RzID0gdmFsdWUtPmVmZmVjdHMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KGVmZmVjdHMubXVzdEV4ZWN1dGUoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKHZh
bHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFVwc2lsb25WYWx1ZSogdXBzaWxv
biA9IHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCkpCisgICAgICAgICAgICAgICAgdXBzaWxvbnMu
YXBwZW5kKHVwc2lsb24pOworICAgICAgICB9CisgICAgfQorICAgIGZvciAoOzspIHsKKyAgICAg
ICAgd2hpbGUgKFZhbHVlKiB2YWx1ZSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAgICBm
b3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2goY2hpbGQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGRp
ZFB1c2ggPSBmYWxzZTsKKyAgICAgICAgZm9yIChzaXplX3QgdXBzaWxvbkluZGV4ID0gMDsgdXBz
aWxvbkluZGV4IDwgdXBzaWxvbnMuc2l6ZSgpOyArK3Vwc2lsb25JbmRleCkgeworICAgICAgICAg
ICAgVXBzaWxvblZhbHVlKiB1cHNpbG9uID0gdXBzaWxvbnNbdXBzaWxvbkluZGV4XTsKKyAgICAg
ICAgICAgIGlmICh3b3JrbGlzdC5zYXcodXBzaWxvbi0+cGhpKCkpKSB7CisgICAgICAgICAgICAg
ICAgd29ya2xpc3QucHVzaCh1cHNpbG9uKTsKKyAgICAgICAgICAgICAgICB1cHNpbG9uc1t1cHNp
bG9uSW5kZXgtLV0gPSB1cHNpbG9ucy5sYXN0KCk7CisgICAgICAgICAgICAgICAgdXBzaWxvbnMu
dGFrZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBkaWRQdXNoID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWRpZFB1c2gpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBJbmRleFNldDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJsZXM7CisgICAgCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsKKyAgICAgICAgc2l6ZV90IHNvdXJj
ZUluZGV4ID0gMDsKKyAgICAgICAgc2l6ZV90IHRhcmdldEluZGV4ID0gMDsKKyAgICAgICAgd2hp
bGUgKHNvdXJjZUluZGV4IDwgYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgVmFsdWUqIHZh
bHVlID0gYmxvY2stPmF0KHNvdXJjZUluZGV4KyspOworICAgICAgICAgICAgaWYgKHdvcmtsaXN0
LnNhdyh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVmFyaWFibGVWYWx1ZSogdmFyaWFi
bGVWYWx1ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQorICAgICAgICAgICAgICAgICAg
ICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpKTsKKyAgICAgICAg
ICAgICAgICBibG9jay0+YXQodGFyZ2V0SW5kZXgrKykgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgcHJvYy5kZWxldGVWYWx1ZSh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgYmxvY2stPnZhbHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRleCk7CisgICAgfQorCisgICAgZm9y
IChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7CisgICAgICAgIGlmICgh
bGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCisgICAgICAgICAgICBwcm9jLmRlbGV0
ZVZhcmlhYmxlKHZhcmlhYmxlKTsKKyAgICB9CisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2Jv
b2wgZWxpbWluYXRlRGVhZENvZGUoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUg
cGhhc2VTY29wZShwcm9jLCAiZWxpbWluYXRlRGVhZENvZGUiKTsKKyAgICByZXR1cm4gZWxpbWlu
YXRlRGVhZENvZGVJbXBsKHByb2MpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFbGltaW5hdGVEZWFkQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZURlYWRDb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlRGVhZENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gVGhlICdJbXBsJyB2ZXJzaW9u
IG9mIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhIHNjb3BlIHBoYXNlLiBJdCBpcyBwdWJs
aWMgc28gdGhhdCBCM1JlZHVjZVN0cmVuZ3RoIGNhbiB1c2UgaXQgaW4gaXRzIGZpeHBvaW50Lgor
Ym9vbCBlbGltaW5hdGVEZWFkQ29kZUltcGwoUHJvY2VkdXJlJik7CitKU19FWFBPUlRfUFJJVkFU
RSBib29sIGVsaW1pbmF0ZURlYWRDb2RlKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDI0Mzc4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkIzQ29tbW9uLmgiCiAjaW5jbHVkZSAiQjNEdXBsaWNhdGVUYWls
cy5oIgogI2luY2x1ZGUgIkIzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuaCIKKyNpbmNs
dWRlICJCM0VsaW1pbmF0ZURlYWRDb2RlLmgiCiAjaW5jbHVkZSAiQjNGaXhTU0EuaCIKICNpbmNs
dWRlICJCM0ZvbGRQYXRoQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiQjNIb2lzdExvb3BJbnZhcmlh
bnRWYWx1ZXMuaCIKQEAgLTQzLDYgKzQ0LDcgQEAKICNpbmNsdWRlICJCM0xvd2VyTWFjcm9zQWZ0
ZXJPcHRpbWl6YXRpb25zLmgiCiAjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCiAjaW5jbHVkZSAi
QjNNb3ZlQ29uc3RhbnRzLmgiCisjaW5jbHVkZSAiQjNPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVz
c2lvblRyZWVzLmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1B1cmVD
U0UuaCIKICNpbmNsdWRlICJCM1JlZHVjZURvdWJsZVRvRmxvYXQuaCIKQEAgLTg3LDEyICs4OSwx
MiBAQAogICAgICAgICBob2lzdExvb3BJbnZhcmlhbnRWYWx1ZXMocHJvY2VkdXJlKTsKICAgICAg
ICAgaWYgKGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zKHByb2NlZHVyZSkpCiAgICAgICAg
ICAgICBlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUpOworICAgICAgICBl
bGltaW5hdGVEZWFkQ29kZShwcm9jZWR1cmUpOwogICAgICAgICBpbmZlclN3aXRjaGVzKHByb2Nl
ZHVyZSk7CiAgICAgICAgIGlmIChPcHRpb25zOjp1c2VCM1RhaWxEdXAoKSkKICAgICAgICAgICAg
IGR1cGxpY2F0ZVRhaWxzKHByb2NlZHVyZSk7CiAgICAgICAgIGZpeFNTQShwcm9jZWR1cmUpOwog
ICAgICAgICBmb2xkUGF0aENvbnN0YW50cyhwcm9jZWR1cmUpOwotICAgICAgICAKICAgICAgICAg
Ly8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNwogICAgIH0gZWxzZSBpZiAo
cHJvY2VkdXJlLm9wdExldmVsKCkgPj0gMSkgewpAQCAtMTA0LDYgKzEwNiw3IEBACiAgICAgbG93
ZXJNYWNyb3MocHJvY2VkdXJlKTsKIAogICAgIGlmIChwcm9jZWR1cmUub3B0TGV2ZWwoKSA+PSAy
KSB7CisgICAgICAgIG9wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMocHJvY2VkdXJl
KTsKICAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKIAogICAgICAgICAvLyBGSVhN
RTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJl
c3Npb25UcmVlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcHRpbWl6ZUFzc29jaWF0
aXZlRXhwcmVzc2lvblRyZWVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJC
M0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
QjNPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgT3B0aW1pemVBc3Nv
Y2lhdGl2ZUV4cHJlc3Npb25UcmVlcyB7CitwdWJsaWM6CisgICAgT3B0aW1pemVBc3NvY2lhdGl2
ZUV4cHJlc3Npb25UcmVlcyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9jKHByb2Mp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCk7CisKK3ByaXZhdGU6CisgICAgaW50NjRf
dCBuZXV0cmFsRWxlbWVudChPcGNvZGUpOworICAgIGJvb2wgaXNBYnNvcmJpbmdFbGVtZW50KE9w
Y29kZSwgaW50NjRfdCk7CisgICAgdm9pZCBjb21iaW5lQ29uc3RhbnRzKE9wY29kZSwgaW50NjRf
dCYsIGludDY0X3QpOworICAgIHZvaWQgZW1pdFZhbHVlKE9wY29kZSwgVmFsdWUqLCB1bnNpZ25l
ZCBudW1TZWVuLCBJbnNlcnRpb25TZXQmLCBzaXplX3QgaW5kZXhJbkJsb2NrLCBWZWN0b3I8VmFs
dWUqLCA0PiYgcmVzdWx0cyk7CisgICAgYm9vbCBvcHRpbWl6ZVJvb3RlZFRyZWUoVmFsdWUqIHJv
b3QsIEluc2VydGlvblNldCYsIHNpemVfdCBpbmRleEluQmxvY2ssIGNvbnN0IFZlY3Rvcjx1bnNp
Z25lZD4mIHVzZUNvdW50cyk7CisKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBib29sIHZl
cmJvc2UgeyBmYWxzZSB9OworfTsKKworaW50NjRfdCBPcHRpbWl6ZUFzc29jaWF0aXZlRXhwcmVz
c2lvblRyZWVzOjpuZXV0cmFsRWxlbWVudChPcGNvZGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkg
eworICAgIGNhc2UgQWRkOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAg
ICAgIHJldHVybiAwOworICAgIGNhc2UgTXVsOgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNl
IEJpdEFuZDoKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitib29sIE9wdGltaXplQXNzb2Np
YXRpdmVFeHByZXNzaW9uVHJlZXM6OmlzQWJzb3JiaW5nRWxlbWVudChPcGNvZGUgb3AsIGludDY0
X3QgY29uc3RhbnQpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAgIGNh
c2UgQml0WG9yOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNdWw6CisgICAgY2Fz
ZSBCaXRBbmQ6CisgICAgICAgIHJldHVybiAhY29uc3RhbnQ7CisgICAgY2FzZSBCaXRPcjoKKyAg
ICAgICAgcmV0dXJuIGNvbnN0YW50ID09IC0xOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIE9wdGltaXplQXNzb2Np
YXRpdmVFeHByZXNzaW9uVHJlZXM6OmNvbWJpbmVDb25zdGFudHMoT3Bjb2RlIG9wLCBpbnQ2NF90
JiBjb25zdDEsIGludDY0X3QgY29uc3QyKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNl
IEFkZDoKKyAgICAgICAgY29uc3QxICs9IGNvbnN0MjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBNdWw6CisgICAgICAgIGNvbnN0MSAqPSBjb25zdDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQml0QW5kOgorICAgICAgICBjb25zdDEgJj0gY29uc3QyOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEJpdE9yOgorICAgICAgICBjb25zdDEgfD0gY29uc3QyOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgY29uc3QxIF49IGNvbnN0MjsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9Cit9CisKK3ZvaWQgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlczo6ZW1p
dFZhbHVlKE9wY29kZSBvcCwgVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBudW1TZWVuLCBJbnNlcnRp
b25TZXQmIGluc2VydGlvblNldCwgc2l6ZV90IGluZGV4SW5CbG9jaywgVmVjdG9yPFZhbHVlKiwg
ND4mIHJlc3VsdHMpCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQWRkOgorICAgICAg
ICBpZiAobnVtU2VlbiA+IDEpIHsKKyAgICAgICAgICAgIFZhbHVlKiBjb25zdE51bVNlZW47Cisg
ICAgICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSA9PSBJbnQzMikKKyAgICAgICAgICAgICAgICBj
b25zdE51bVNlZW4gPSBpbnNlcnRpb25TZXQuaW5zZXJ0PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJs
b2NrLCB2YWx1ZS0+b3JpZ2luKCksIG51bVNlZW4pOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGNvbnN0TnVtU2VlbiA9IGluc2VydGlvblNldC5pbnNlcnQ8Q29uc3Q2NFZhbHVl
PihpbmRleEluQmxvY2ssIHZhbHVlLT5vcmlnaW4oKSwgc3RhdGljX2Nhc3Q8aW50NjRfdD4obnVt
U2VlbikpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2VydDxW
YWx1ZT4oaW5kZXhJbkJsb2NrLCBNdWwsIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIGNvbnN0TnVt
U2VlbikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNdWw6CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1TZWVuOyArK2kpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh2YWx1
ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6Cisg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
aXRYb3I6CisgICAgICAgIGlmIChudW1TZWVuICUgMikKKyAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK2Jvb2wgT3B0aW1pemVBc3NvY2lh
dGl2ZUV4cHJlc3Npb25UcmVlczo6b3B0aW1pemVSb290ZWRUcmVlKFZhbHVlKiByb290LCBJbnNl
cnRpb25TZXQmIGluc2VydGlvblNldCwgc2l6ZV90IGluZGV4SW5CbG9jaywgY29uc3QgVmVjdG9y
PHVuc2lnbmVkPiYgdXNlQ291bnRzKQoreworICAgIE9wY29kZSBvcCA9IHJvb3QtPm9wY29kZSgp
OworICAgIGlmICgocm9vdC0+Y2hpbGQoMCktPm9wY29kZSgpICE9IG9wIHx8IHVzZUNvdW50c1ty
b290LT5jaGlsZCgwKS0+aW5kZXgoKV0gPiAxKQorICAgICAgICAmJiAocm9vdC0+Y2hpbGQoMSkt
Pm9wY29kZSgpICE9IG9wIHx8IHVzZUNvdW50c1tyb290LT5jaGlsZCgxKS0+aW5kZXgoKV0gPiAx
KSkgeworICAgICAgICAvLyBUaGlzIGlzIGEgdHJpdmlhbCBleHByZXNzaW9uIHRyZWUgb2Ygc2l6
ZSB0d28sIHdlIGhhdmUgbm90aGluZyB0byBkbyBoZXJlIHRoYXQgQjNSZWR1Y2VTdHJlbmd0aCBj
YW5ub3QgZG8gYmV0dGVyIHRoYW4gdXMuCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBXZSBwcm9jZWVkIGluIHRocmVlIHN0ZXBzOgorICAgIC8vIC0gZ2F0aGVyIGFsbCB0
aGUgbGVhdmVzIG9mIHRoZSBleHByZXNzaW9uIHRyZWUKKyAgICAvLyAtIHNvcnQgdGhlbSwgYW5k
IGNvbWJpbmUgYXMgbWFueSBhcyBwb3NzaWJsZQorICAgIC8vIC0gbWFrZSBhIGJhbGFuY2VkIGJp
bmFyeSB0cmVlIG9mIHRoZW0KKworICAgIFZlY3RvcjxWYWx1ZSosIDQ+IGxlYXZlczsKKyAgICBW
ZWN0b3I8VmFsdWUqLCAzPiB3b3JrbGlzdCA9IHsgcm9vdC0+Y2hpbGQoMCksIHJvb3QtPmNoaWxk
KDEpIH07CisgICAgaW50NjRfdCBjb25zdGFudCA9IG5ldXRyYWxFbGVtZW50KG9wKTsKKyAgICB1
bnNpZ25lZCBudW1WaXNpdGVkID0gMDsKKyAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkoKSkg
eworICAgICAgICBWYWx1ZSogdmFsID0gd29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgaWYg
KHZhbC0+b3Bjb2RlKCkgPT0gb3AgJiYgdXNlQ291bnRzW3ZhbC0+aW5kZXgoKV0gPCAyKSB7Cisg
ICAgICAgICAgICB3b3JrbGlzdC5hcHBlbmQodmFsLT5jaGlsZCgwKSk7CisgICAgICAgICAgICB3
b3JrbGlzdC5hcHBlbmQodmFsLT5jaGlsZCgxKSk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsLT5o
YXNJbnQoKSkgeworICAgICAgICAgICAgY29tYmluZUNvbnN0YW50cyhvcCwgY29uc3RhbnQsIHZh
bC0+YXNJbnQoKSk7CisgICAgICAgICAgICBudW1WaXNpdGVkKys7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBudW1WaXNpdGVkKys7CisgICAgICAgICAgICBsZWF2ZXMuYXBwZW5kKHZh
bCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGlzQWJzb3JiaW5nRWxlbWVudChvcCwgY29u
c3RhbnQpKSB7CisgICAgICAgIFZhbHVlKiBuZXdSb290OworICAgICAgICBpZiAocm9vdC0+dHlw
ZSgpID09IEludDMyKQorICAgICAgICAgICAgbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQ8
Q29uc3QzMlZhbHVlPihpbmRleEluQmxvY2ssIHJvb3QtPm9yaWdpbigpLCBzdGF0aWNfY2FzdDxp
bnQzMl90Pihjb25zdGFudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdSb290ID0g
aW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KGluZGV4SW5CbG9jaywgcm9vdC0+b3Jp
Z2luKCksIGNvbnN0YW50KTsKKyAgICAgICAgcm9vdC0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdS
b290KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChudW1WaXNpdGVkIDwg
NCkgeworICAgICAgICAvLyBUaGlzIGlzIGEgbmVhcmx5LXRyaXZpYWwgZXhwcmVzc2lvbiBvZiBz
aXplIDMuIEIzUmVkdWNlU3RyZW5ndGggaXMgc3RpbGwgYWJsZSB0byBkZWFsIHdpdGggc3VjaCBl
eHByZXNzaW9ucyBjb21wZXRlbnRseSwgYW5kIHRoZXJlIGlzIG5vIHBvc3NpYmxlIHdpbiBmcm9t
IGJhbGFuY2luZyB0aGVtLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3Rk
Ojpzb3J0KGxlYXZlcy5iZWdpbigpLCBsZWF2ZXMuZW5kKCksIFtdKFZhbHVlKiB4LCBWYWx1ZSog
eSkgeworICAgICAgICByZXR1cm4geC0+aW5kZXgoKSA8IHktPmluZGV4KCk7CisgICAgfSk7Cisg
ICAgVmVjdG9yPFZhbHVlKiwgND4gb3B0TGVhdmVzOworICAgIFZhbHVlKiBsYXN0VmFsdWUgPSBu
dWxscHRyOworICAgIHVuc2lnbmVkIG51bVNlZW4gPSAwOworICAgIGZvciAoVmFsdWUqIHZhbHVl
IDogbGVhdmVzKSB7CisgICAgICAgIGlmIChsYXN0VmFsdWUgPT0gdmFsdWUpCisgICAgICAgICAg
ICBudW1TZWVuKys7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGxhc3RWYWx1ZSkK
KyAgICAgICAgICAgICAgICBlbWl0VmFsdWUob3AsIGxhc3RWYWx1ZSwgbnVtU2VlbiwgaW5zZXJ0
aW9uU2V0LCBpbmRleEluQmxvY2ssIG9wdExlYXZlcyk7CisgICAgICAgICAgICBsYXN0VmFsdWUg
PSB2YWx1ZTsKKyAgICAgICAgICAgIG51bVNlZW4gPSAxOworICAgICAgICB9CisgICAgfQorICAg
IGlmIChsYXN0VmFsdWUpCisgICAgICAgIGVtaXRWYWx1ZShvcCwgbGFzdFZhbHVlLCBudW1TZWVu
LCBpbnNlcnRpb25TZXQsIGluZGV4SW5CbG9jaywgb3B0TGVhdmVzKTsKKworICAgIC8vIG9wdExl
YXZlcyBjYW4gYmUgZW1wdHkgZm9yIHRyZWVzIG9mIEJpdFhvciB3aGVyZSBhbGwgbGVhdmVzIGhh
cHBlbiBhbiBldmVuIG51bWJlciBvZiB0aW1lcy4KKyAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIG1h
a2UgdGhlIHdob2xlIHRyZWUgZXF1aXZhbGVudCB0byB0aGUgbmV1dHJhbCBlbGVtZW50ICh3aGlj
aCBpcyAwIGZvciBCaXRYb3IpLgorICAgIGlmIChjb25zdGFudCAhPSBuZXV0cmFsRWxlbWVudChv
cCkgfHwgb3B0TGVhdmVzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAocm9vdC0+dHlwZSgpID09
IEludDMyKQorICAgICAgICAgICAgb3B0TGVhdmVzLmFwcGVuZChpbnNlcnRpb25TZXQuaW5zZXJ0
PENvbnN0MzJWYWx1ZT4oaW5kZXhJbkJsb2NrLCByb290LT5vcmlnaW4oKSwgc3RhdGljX2Nhc3Q8
aW50MzJfdD4oY29uc3RhbnQpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG9wdExlYXZl
cy5hcHBlbmQoaW5zZXJ0aW9uU2V0Lmluc2VydDxDb25zdDY0VmFsdWU+KGluZGV4SW5CbG9jaywg
cm9vdC0+b3JpZ2luKCksIGNvbnN0YW50KSk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpIHsK
KyAgICAgICAgZGF0YUxvZygiICAgICAgRXhwcmVzc2lvbiB0cmVlIHJvb3RlZCBhdCAiLCAqcm9v
dCwgIiAoIiwgcm9vdC0+b3Bjb2RlKCksICIpIHdpdGggbGVhdmVzIChudW1WaXNpdGVkID0gIiwg
bnVtVmlzaXRlZCwgIikgIik7CisgICAgICAgIGZvciAoVmFsdWUqIGxlYWYgOiBsZWF2ZXMpCisg
ICAgICAgICAgICBkYXRhTG9nKCIgIiwgKmxlYWYpOworICAgICAgICBkYXRhTG9nKCIgPT4iKTsK
KyAgICAgICAgZm9yIChWYWx1ZSogbGVhZiA6IG9wdExlYXZlcykKKyAgICAgICAgICAgIGRhdGFM
b2coIiAiLCAqbGVhZik7CisgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgfQorCisgICAgLy8g
RmluYWxseSB3ZSBjYW4gYnVpbGQgdGhlIGJhbGFuY2VkIGJpbmFyeSB0cmVlCisgICAgdW5zaWdu
ZWQgbGVhZkluZGV4ID0gMDsKKyAgICB3aGlsZSAobGVhZkluZGV4ICsgMSA8IG9wdExlYXZlcy5z
aXplKCkpIHsKKyAgICAgICAgb3B0TGVhdmVzLmFwcGVuZChpbnNlcnRpb25TZXQuaW5zZXJ0PFZh
bHVlPihpbmRleEluQmxvY2ssIG9wLCByb290LT5vcmlnaW4oKSwgb3B0TGVhdmVzW2xlYWZJbmRl
eF0sIG9wdExlYXZlc1tsZWFmSW5kZXggKyAxXSkpOworICAgICAgICBsZWFmSW5kZXggKz0gMjsK
KyAgICB9CisgICAgQVNTRVJUKGxlYWZJbmRleCA9PSBvcHRMZWF2ZXMuc2l6ZSgpIC0gMSk7Cisg
ICAgcm9vdC0+cmVwbGFjZVdpdGhJZGVudGl0eShvcHRMZWF2ZXNbbGVhZkluZGV4XSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgT3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVl
czo6cnVuKCkKK3sKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKworICAgIC8vIFdlIHByb2Nl
ZWQgaW4gdHdvIHBoYXNlcy4KKyAgICAvLyBJbiB0aGUgZmlyc3Qgb25lIHdlIGNvbXB1dGUgdGhl
IHVzZSBjb3VudHMgb2YgZWFjaCB2YWx1ZSAob2YgYW4gaW50ZXJlc3Rpbmcgb3Bjb2RlKSwgYW5k
IGZpbmQgcG90ZW50aWFsIHJvb3RzIG9mIGludGVyZXN0aW5nIGV4cHJlc3Npb24gdHJlZXMuCisg
ICAgLy8gSW4gdGhlIHNlY29uZCBvbmUgd2Ugb3B0aW1pemUgZWFjaCBzdWNoIGV4cHJlc3Npb24g
dHJlZSBpbiB0dXJuLgorICAgIC8vIFdlIG5lZWQgdGhlIHVzZSBjb3VudHMgdG8gYXZvaWQgZHVw
bGljYXRpbmcgY29kZS4KKworICAgIFZlY3Rvcjx1bnNpZ25lZD4gdXNlQ291bnRzKG1fcHJvYy52
YWx1ZXMoKS5zaXplKCksIDApOyAvLyBNYXBwaW5nIGZyb20gVmFsdWU6Om1faW5kZXggdG8gdXNl
IGNvdW50cy4KKyAgICBIYXNoU2V0PFZhbHVlKj4gZXhwcmVzc2lvblRyZWVSb290czsKKyAgICBI
YXNoU2V0PEJhc2ljQmxvY2sqPiByb290T3duZXJzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fcHJvYykgeworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewor
ICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAg
ICAgICAgICAgICAgIGlmICghY2hpbGQtPmlzSW50ZWdlcigpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoaWxkLT5vcGNvZGUoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgTXVsOgorICAgICAgICAgICAgICAgIGNhc2UgQWRkOgorICAg
ICAgICAgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICAgICAgICAgIGNhc2UgQml0T3I6Cisg
ICAgICAgICAgICAgICAgY2FzZSBCaXRYb3I6CisgICAgICAgICAgICAgICAgICAgIHVzZUNvdW50
c1tjaGlsZC0+aW5kZXgoKV0rKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcGNv
ZGUoKSAhPSB2YWx1ZS0+b3Bjb2RlKCkgfHwgdXNlQ291bnRzW2NoaWxkLT5pbmRleCgpXSA+IDEp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25UcmVlUm9vdHMuYWRkKGNoaWxk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RPd25lcnMuYWRkKGNoaWxkLT5vd25lcik7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgSW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldCA9IEluc2VydGlvblNldChtX3Byb2MpOworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiByb290T3duZXJzKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIFZh
bHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChpbmRleCk7CisgICAgICAgICAgICBpZiAoZXhwcmVzc2lv
blRyZWVSb290cy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBv
cHRpbWl6ZVJvb3RlZFRyZWUodmFsdWUsIGluc2VydGlvblNldCwgaW5kZXgsIHVzZUNvdW50cyk7
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0K
KworICAgIHJldHVybiBjaGFuZ2VkOworfQorCitib29sIG9wdGltaXplQXNzb2NpYXRpdmVFeHBy
ZXNzaW9uVHJlZXMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29w
ZShwcm9jLCAib3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyIpOworICAgIE9wdGlt
aXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMgb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Np
b25UcmVlcyhwcm9jKTsKKyAgICByZXR1cm4gb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25U
cmVlcy5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3B0aW1pemVB
c3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wdGltaXplQXNzb2NpYXRpdmVFeHByZXNzaW9uVHJlZXMuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcHRpbWl6ZUFzc29jaWF0aXZl
RXhwcmVzc2lvblRyZWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFByb2NlZHVyZTsKKworLy8gRmluZHMgbGFyZ2UgZXhwcmVzc2lvbiB0cmVlcyB1c2luZyBv
bmUgb2YgdGhlIGFzc29jaWF0aXZlIGFuZCBjb21tdXRhdGl2ZSBvcGNvZGVzIChBZGQvTXVsL0Jp
dEFuZC9CaXRPci9CaXRYb3IpLAorLy8gdGhlbiByZW9yZGVyIHRoZW0gdG8gZWxpbWluYXRlIGFz
IG1hbnkgb3BlcmF0aW9ucyBhcyBwb3NzaWJsZSwgdGhlbiBtYWtlIGJhbGFuY2VkIGJpbmFyeSB0
cmVlcyBvdXQgb2YgdGhlbQorLy8gdG8gbWF4aW1pemUgSUxQIGFuZCBtaW5pbWl6ZSB0aGUgdG90
YWwgbGF0ZW5jeS4KK2Jvb2wgb3B0aW1pemVBc3NvY2lhdGl2ZUV4cHJlc3Npb25UcmVlcyhQcm9j
ZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVu
Z3RoLmNwcAkocmV2aXNpb24gMjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiQjNCbG9ja0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkIzQ29tcHV0ZURpdmlzaW9u
TWFnaWMuaCIKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0VsaW1pbmF0
ZURlYWRDb2RlLmgiCiAjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQjNNZW1vcnlWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKQEAg
LTQ0MCw3ICs0NDEsNyBAQAogICAgICAgICAgICAgLy8gImhvaXN0IiBAdGhpbmcuIE9uIHRoZSBv
dGhlciBoYW5kLCBpZiB3ZSBydW4gRENFIGJlZm9yZSBDU0UsIHdlIHdpbGwga2lsbCBAZGVhZCBh
bmQKICAgICAgICAgICAgIC8vIGtlZXAgQHRoaW5nLiBUaGF0J3MgYmV0dGVyLCBzaW5jZSB3ZSB1
c3VhbGx5IHdhbnQgdGhpbmdzIHRvIHN0YXkgd2hlcmV2ZXIgdGhlIGNsaWVudAogICAgICAgICAg
ICAgLy8gcHV0IHRoZW0uIFdlJ3JlIG5vdCBhY3R1YWxseSBzbWFydCBlbm91Z2ggdG8gbW92ZSB0
aGluZ3MgYXJvdW5kIGF0IHJhbmRvbS4KLSAgICAgICAgICAgIGtpbGxEZWFkQ29kZSgpOworICAg
ICAgICAgICAgbV9jaGFuZ2VkIHw9IGVsaW1pbmF0ZURlYWRDb2RlSW1wbChtX3Byb2MpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBzaW1wbGlmeVNTQSgpOwogICAgICAgICAgICAgCkBAIC0y
NzMyLDcwICsyNzMzLDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQga2lsbERlYWRD
b2RlKCkKLSAgICB7Ci0gICAgICAgIEdyYXBoTm9kZVdvcmtsaXN0PFZhbHVlKiwgSW5kZXhTZXQ8
VmFsdWUqPj4gd29ya2xpc3Q7Ci0gICAgICAgIFZlY3RvcjxVcHNpbG9uVmFsdWUqLCA2ND4gdXBz
aWxvbnM7Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKLSAgICAg
ICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgRWZm
ZWN0cyBlZmZlY3RzOwotICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgZWZm
ZWN0cyBvZiBTU0Egb3BlcmF0aW9ucywgc2luY2Ugd2UgbW9kZWwgdGhlbSBtb3JlCi0gICAgICAg
ICAgICAgICAgLy8gYWNjdXJhdGVseSB0aGFuIHRoZSBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCi0g
ICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBQaGkgJiYgdmFsdWUtPm9wY29k
ZSgpICE9IFVwc2lsb24pCi0gICAgICAgICAgICAgICAgICAgIGVmZmVjdHMgPSB2YWx1ZS0+ZWZm
ZWN0cygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChlZmZlY3RzLm11
c3RFeGVjdXRlKCkpCi0gICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2godmFsdWUpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUqIHVwc2ls
b24gPSB2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpKQotICAgICAgICAgICAgICAgICAgICB1cHNp
bG9ucy5hcHBlbmQodXBzaWxvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
Zm9yICg7OykgewotICAgICAgICAgICAgd2hpbGUgKFZhbHVlKiB2YWx1ZSA9IHdvcmtsaXN0LnBv
cCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRy
ZW4oKSkKLSAgICAgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChjaGlsZCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJvb2wgZGlkUHVzaCA9IGZhbHNlOwot
ICAgICAgICAgICAgZm9yIChzaXplX3QgdXBzaWxvbkluZGV4ID0gMDsgdXBzaWxvbkluZGV4IDwg
dXBzaWxvbnMuc2l6ZSgpOyArK3Vwc2lsb25JbmRleCkgewotICAgICAgICAgICAgICAgIFVwc2ls
b25WYWx1ZSogdXBzaWxvbiA9IHVwc2lsb25zW3Vwc2lsb25JbmRleF07Ci0gICAgICAgICAgICAg
ICAgaWYgKHdvcmtsaXN0LnNhdyh1cHNpbG9uLT5waGkoKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgd29ya2xpc3QucHVzaCh1cHNpbG9uKTsKLSAgICAgICAgICAgICAgICAgICAgdXBzaWxvbnNb
dXBzaWxvbkluZGV4LS1dID0gdXBzaWxvbnMubGFzdCgpOwotICAgICAgICAgICAgICAgICAgICB1
cHNpbG9ucy50YWtlTGFzdCgpOwotICAgICAgICAgICAgICAgICAgICBkaWRQdXNoID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWRpZFB1
c2gpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBJbmRleFNl
dDxWYXJpYWJsZSo+IGxpdmVWYXJpYWJsZXM7Ci0gICAgICAgIAotICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7Ci0gICAgICAgICAgICBzaXplX3Qgc291cmNlSW5kZXgg
PSAwOwotICAgICAgICAgICAgc2l6ZV90IHRhcmdldEluZGV4ID0gMDsKLSAgICAgICAgICAgIHdo
aWxlIChzb3VyY2VJbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBWYWx1
ZSogdmFsdWUgPSBibG9jay0+YXQoc291cmNlSW5kZXgrKyk7Ci0gICAgICAgICAgICAgICAgaWYg
KHdvcmtsaXN0LnNhdyh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFZhcmlhYmxl
VmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUtPnZhcmlh
YmxlKCkpOwotICAgICAgICAgICAgICAgICAgICBibG9jay0+YXQodGFyZ2V0SW5kZXgrKykgPSB2
YWx1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBtX3By
b2MuZGVsZXRlVmFsdWUodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJsb2Nr
LT52YWx1ZXMoKS5yZXNpemUodGFyZ2V0SW5kZXgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9y
IChWYXJpYWJsZSogdmFyaWFibGUgOiBtX3Byb2MudmFyaWFibGVzKCkpIHsKLSAgICAgICAgICAg
IGlmICghbGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAg
bV9wcm9jLmRlbGV0ZVZhcmlhYmxlKHZhcmlhYmxlKTsKLSAgICAgICAgfQotICAgIH0KLQogICAg
IHZvaWQgc2ltcGxpZnlTU0EoKQogICAgIHsKICAgICAgICAgLy8gVGhpcyBydW5zIEF5Y29jayBh
bmQgSG9yc3Bvb2wncyBhbGdvcml0aG0gb24gb3VyIFBoaSBmdW5jdGlvbnMgWzFdLiBGb3IgbW9z
dCBDRkcgcGF0dGVybnMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShy
ZXZpc2lvbiAyNDM3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICAgICAvLyBwcmV2aW91cyB2YWx1ZSBp
biBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFj
ZS4KIAogICAgIEFTU0VSVChtX3R5cGUgPT0gdmFsdWUtPm1fdHlwZSk7CisgICAgQVNTRVJUKHZh
bHVlICE9IHRoaXMpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBWb2lkKSB7CiAgICAgICAgIHJlcGxh
Y2VXaXRoTm9wSWdub3JpbmdUeXBlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
dGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAkocmV2aXNpb24gMjQzNzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJCM0NvbXBp
bGUuaCIKICNpbmNsdWRlICJCM0NvbXB1dGVEaXZpc2lvbk1hZ2ljLmgiCiAjaW5jbHVkZSAiQjND
b25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgogI2luY2x1ZGUgIkIz
Q29uc3RQdHJWYWx1ZS5oIgogI2luY2x1ZGUgIkIzRWZmZWN0cy5oIgogI2luY2x1ZGUgIkIzRmVu
Y2VWYWx1ZS5oIgpAQCAtMzk4LDYgKzM5OSwxMzIgQEAKICAgICB0ZXN0TG9hZFdpdGhPZmZzZXRJ
bXBsKDMyNzY4LCAxNjM4NCk7CiB9CiAKK3ZvaWQgdGVzdEJpdFhvclRyZWVBcmdzKGludDY0X3Qg
YSwgaW50NjRfdCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgVmFsdWUqIGFyZ0IgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIG5vZGUgPSBy
b290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIGFyZ0Ip
OworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2lu
KCksIG5vZGUsIGFyZ0IpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEJpdFhvciwgT3JpZ2luKCksIG5vZGUsIGFyZ0EpOworICAgIG5vZGUgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIG5vZGUsIGFyZ0IpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7CisKKyAgICBD
SEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEsIGIpLCAoKChhIF4gYikgXiBi
KSBeIGEpIF4gYik7Cit9CisKK3ZvaWQgdGVzdEJpdFhvclRyZWVBcmdzRXZlbihpbnQ2NF90IGEs
IGludDY0X3QgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIFZhbHVlKiBhcmdCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBub2RlID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigpLCBhcmdBLCBhcmdCKTsK
KyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRYb3IsIE9yaWdpbigp
LCBub2RlLCBhcmdCKTsKKyAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBC
aXRYb3IsIE9yaWdpbigpLCBub2RlLCBhcmdBKTsKKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFu
ZFJ1bjxpbnQ2NF90Pihwcm9jLCBhLCBiKSwgKChhIF4gYikgXiBiKSBeIGEpOworfQorCit2b2lk
IHRlc3RCaXRYb3JUcmVlQXJnSW1tKGludDY0X3QgYSwgaW50NjRfdCBiKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
VmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUqIGltbUIgPSByb290LT5h
cHBlbmROZXc8Q29uc3Q2NFZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYik7CisgICAgVmFsdWUqIG5v
ZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0Es
IGltbUIpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwg
T3JpZ2luKCksIGFyZ0EsIG5vZGUpOworICAgIG5vZGUgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGFyZ0EsIG5vZGUpOworICAgIG5vZGUgPSByb290LT5h
cHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdFhvciwgT3JpZ2luKCksIGltbUIsIG5vZGUpOworICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgbm9kZSk7CisK
KyAgICBDSEVDS19FUShjb21waWxlQW5kUnVuPGludDY0X3Q+KHByb2MsIGEpLCBiIF4gKGEgXiAo
YSBeIChhIF4gYikpKSk7Cit9CisKK3ZvaWQgdGVzdEFkZFRyZWVBcmczMihpbnQzMl90IGEpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBWYWx1ZSogYXJnQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBhcmdBID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksIGFyZ0EpOworICAgIFZh
bHVlKiBub2RlID0gYXJnQTsKKyAgICBpbnQzMl90IGV4cGVjdGVkUmVzdWx0ID0gYTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjA7ICsraSkgeworICAgICAgICBWYWx1ZSogb3RoZXJO
b2RlOworICAgICAgICBpZiAoIShpICUgMykpIHsKKyAgICAgICAgICAgIG90aGVyTm9kZSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpKTsKKyAgICAgICAg
ICAgIGV4cGVjdGVkUmVzdWx0ICs9IGk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBv
dGhlck5vZGUgPSBhcmdBOworICAgICAgICAgICAgZXhwZWN0ZWRSZXN1bHQgKz0gYTsKKyAgICAg
ICAgfQorICAgICAgICBub2RlID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9y
aWdpbigpLCBub2RlLCBvdGhlck5vZGUpOworICAgIH0KKyAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGls
ZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBhKSwgZXhwZWN0ZWRSZXN1bHQpOworfQorCit2b2lkIHRl
c3RNdWxUcmVlQXJnMzIoaW50MzJfdCBhKQoreworICAgIC8vIEZpYm9uYWNjaS1saWtlIGV4cHJl
c3Npb24gdHJlZSB3aXRoIG11bHRpcGxpY2F0aW9uIGluc3RlYWQgb2YgYWRkaXRpb24uCisgICAg
Ly8gVmVyaWZpZXMgdGhhdCB3ZSBkb24ndCBleHBsb2RlIG9uIGhlYXZpbHkgZmFjdG9yZWQgZ3Jh
cGhzLgorICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXJnQSA9
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBhcmdBKTsKKyAg
ICBWYWx1ZSogbm9kZUEgPSBhcmdBOworICAgIFZhbHVlKiBub2RlQiA9IGFyZ0E7CisgICAgaW50
MzJfdCBleHBlY3RlZEEgPSBhLCBleHBlY3RlZFJlc3VsdCA9IGE7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDIwOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIG5ld05vZGVCID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBub2RlQSwgbm9kZUIpOworICAg
ICAgICBub2RlQSA9IG5vZGVCOworICAgICAgICBub2RlQiA9IG5ld05vZGVCOworICAgICAgICBp
bnQzMl90IG5ld0V4cGVjdGVkUmVzdWx0ID0gZXhwZWN0ZWRBICogZXhwZWN0ZWRSZXN1bHQ7Cisg
ICAgICAgIGV4cGVjdGVkQSA9IGV4cGVjdGVkUmVzdWx0OworICAgICAgICBleHBlY3RlZFJlc3Vs
dCA9IG5ld0V4cGVjdGVkUmVzdWx0OworICAgIH0KKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5vZGVCKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVB
bmRSdW48aW50MzJfdD4ocHJvYywgYSksIGV4cGVjdGVkUmVzdWx0KTsKK30KKwordm9pZCB0ZXN0
Qml0QW5kVHJlZUFyZzMyKGludDMyX3QgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBhcmdBID0gcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOworICAgIGFyZ0EgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwgYXJnQSk7CisgICAgVmFsdWUqIG5vZGUgPSBhcmdBOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCA4OyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNvbnN0SSA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBpIHwgNDIpOworICAg
ICAgICBWYWx1ZSogbmV3Qml0QW5kID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBCaXRB
bmQsIE9yaWdpbigpLCBhcmdBLCBjb25zdEkpOworICAgICAgICBub2RlID0gcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBCaXRBbmQsIE9yaWdpbigpLCBub2RlLCBuZXdCaXRBbmQpOworICAg
IH0KKyAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIG5v
ZGUpOworCisgICAgQ0hFQ0tfRVEoY29tcGlsZUFuZFJ1bjxpbnQzMl90Pihwcm9jLCBhKSwgYSAm
IDQyKTsKK30KKwordm9pZCB0ZXN0Qml0T3JUcmVlQXJnMzIoaW50MzJfdCBhKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgVmFsdWUqIGFyZ0EgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXJnQSA9IHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLCBhcmdBKTsKKyAgICBWYWx1ZSogbm9k
ZSA9IGFyZ0E7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDg7ICsraSkgeworICAgICAg
ICBWYWx1ZSogY29uc3RJID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIGkpOworICAgICAgICBWYWx1ZSogbmV3Qml0QW5kID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBCaXRPciwgT3JpZ2luKCksIGFyZ0EsIGNvbnN0SSk7CisgICAgICAgIG5vZGUg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEJpdE9yLCBPcmlnaW4oKSwgbm9kZSwgbmV3
Qml0QW5kKTsKKyAgICB9CisgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCBub2RlKTsKKworICAgIENIRUNLX0VRKGNvbXBpbGVBbmRSdW48aW50MzJfdD4o
cHJvYywgYSksIGEgfCA3KTsKK30KKwogdm9pZCB0ZXN0QXJnKGludCBhcmd1bWVudCkKIHsKICAg
ICBQcm9jZWR1cmUgcHJvYzsKQEAgLTE3MDQ4LDYgKzE3MTc1LDE0IEBACiAgICAgUlVOKHRlc3RS
ZXR1cm5Db25zdDY0KC00MikpOwogICAgIFJVTih0ZXN0UmV0dXJuVm9pZCgpKTsKIAorICAgIFJV
Tl9CSU5BUlkodGVzdEJpdFhvclRyZWVBcmdzLCBpbnQ2NE9wZXJhbmRzKCksIGludDY0T3BlcmFu
ZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0WG9yVHJlZUFyZ3NFdmVuLCBpbnQ2NE9wZXJh
bmRzKCksIGludDY0T3BlcmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0Qml0WG9yVHJlZUFy
Z0ltbSwgaW50NjRPcGVyYW5kcygpLCBpbnQ2NE9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0
ZXN0QWRkVHJlZUFyZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0TXVs
VHJlZUFyZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0Qml0QW5kVHJl
ZUFyZzMyLCBpbnQzMk9wZXJhbmRzKCkpOworICAgIFJVTl9VTkFSWSh0ZXN0Qml0T3JUcmVlQXJn
MzIsIGludDMyT3BlcmFuZHMoKSk7CisKICAgICBSVU4odGVzdEFkZEFyZygxMTEpKTsKICAgICBS
VU4odGVzdEFkZEFyZ3MoMSwgMSkpOwogICAgIFJVTih0ZXN0QWRkQXJncygxLCAyKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>