<?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>67826</bug_id>
          
          <creation_ts>2011-09-08 18:48:24 -0700</creation_ts>
          <short_desc>JavaScriptCore does not have speculative-&gt;baseline OSR</short_desc>
          <delta_ts>2011-09-12 18:33:12 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>464569</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-08 18:48:24 -0700</bug_when>
    <thetext>The DFG JIT handles speculation failures by always generating a non-speculative version of the same optimized code, and then emitting jumps and recoveries between the speculative and non-speculative path.  This has a number of issues:

1) It means that when doing tiered compilation, we have three copies of the same code: old JIT, DFG speculative, and DFG non-speculative.  Since the DFG non-speculative path ends up doing more-or-less the same things as the code emitted by the old JIT, it would be nice if we could skip emitting the non-speculative path.

2) It means maintaining two paths for the DFG JIT.  A lot of logic gets duplicated, and maintenance effort is increased, by the presence of two DFG back-ends.

3) It complicates the development of speculative optimizations that rely on mutating the DFG graph.  The speculative-&gt;non-speculative jump relies on both backends using the same graph.

All of these problems can be eliminated if the speculative JIT can bail out by performing OSR to the old JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464577</commentid>
    <comment_count>1</comment_count>
      <attachid>106827</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-08 18:51:31 -0700</bug_when>
    <thetext>Created attachment 106827
work in progress

This is an early-stage work-in-progress and does not yet work, but I figured I&apos;d back it up and allow others to take a peek.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465034</commentid>
    <comment_count>2</comment_count>
      <attachid>106925</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-09 14:45:47 -0700</bug_when>
    <thetext>Created attachment 106925
work in progress - so far it appears to work, sort of

This patch still needs some love, but it&apos;s getting there!

Here&apos;s a synopsis of how this works:

1) We already had the policy of storing the bytecode index from which a DFG node originated in the node itself.  I made this policy more official by changing the name of the relevant field to CodeOrigin.  When we have inlining, the CodeOrigin class will be able to also hold the CodeBlock* from which the code originated, or more likely a pointer to an inlining stack.

2) The CodeBlock now stores a mapping between bytecode indices and machine code offsets, for each instruction, for code compiled with the old JIT.  This information is stored in using a fairly compact and fairly efficient entropy encoding, assuming that distances between adjacent indices and offsets will be small.  The DFG decodes this information when generating OSR exit code.

3) We already had the policy of emitting SetLocal nodes in the DFG flow at exactly the points where the old JIT would have mutated a virtual register.  These almost always get killed by our ref-count based DCE, but even then they remain in the IR - they&apos;re just marked dead.  This information is now used heavily by the OSR code, which performs an abstract interpretation of SetLocals in tandem with speculative compilation.  The abstract state is just a mapping between bytecode operands and the DFG nodes that hold (or held) the value that the virtual register for that bytecode operand would have held if we were executing with the old JIT.  At OSR points, we use this to figure out a strategy for recovering the value of each old JIT virtual register based on the nodes that are currently live.  In some cases, this node will be dead, which means that the old JIT would not have needed the value anyway, and so we store Undefined into the virtual register.  In other cases, there is some other node that holds an equivalent value; if this is proven by the OSR recovery calculator, then that node&apos;s value is used.  In all, four cases exist: (i) the virtual register already contains the right value because the relevant SetLocal was emitted by the DFG backend, (ii) there is some physical register that contains either the value we want or a value that can be converted into the one we want, (iii) the virtual register would have held a constant at this point and we know the constant&apos;s value, or (iv) there is some other virtual register that currently holds the value that we want, so we need to shuffle the virtual register file.

4) The old JIT register allocates the result of the last operation.  Luckily, SetLocals come to the rescue once more - so the SetLocal abstract interpreter tracks the virtual register operand of the last SetLocal executed.  The OSR exit code simply loads this virtual register into the cachedResultRegister prior to jumping.

5) When all of this is enabled, we skip emitting the non-speculative code.

Work remaining:

1) Fix at least one known bug: the OSR exit code sometimes underestimates the size of the old JIT&apos;s register file (omitting temporaries that are not yet set).  Currently it does nothing for these temporaries, but it should probably set them to undefined.

2) Test, test, test.

3) Benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465070</commentid>
    <comment_count>3</comment_count>
      <attachid>106931</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-09 15:48:03 -0700</bug_when>
    <thetext>Created attachment 106931
work in progress - passes run-javascriptcore-tests and runs both SunSpider and V8

Still running webkit-tests and then will do some performance measuring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465106</commentid>
    <comment_count>4</comment_count>
      <attachid>106941</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-09 16:48:37 -0700</bug_when>
    <thetext>Created attachment 106941
the patch

When enabled, this breaks some sites.  Still working on it.  But I think fundamentally the patch is correct; it&apos;s just a matter of ensuring that we have all of the dead-node recoveries that we ought to have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465107</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 16:51:55 -0700</bug_when>
    <thetext>Attachment 106941 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:209:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:229:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGNode.h:29:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:295:  The parameter name &quot;jit&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:455:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:475:  The parameter name &quot;valueSource&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1569:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1572:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:1582:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/jit/CompactJITCodeMap.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/jit/CompactJITCodeMap.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/jit/CompactJITCodeMap.h:220:  Missing spaces around &lt;&lt;  [whitespace/operators] [3]
Total errors found: 12 in 20 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>465113</commentid>
    <comment_count>6</comment_count>
      <attachid>106943</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-09 16:59:40 -0700</bug_when>
    <thetext>Created attachment 106943
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465162</commentid>
    <comment_count>7</comment_count>
      <attachid>106943</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 18:32:39 -0700</bug_when>
    <thetext>Comment on attachment 106943
the patch - fix style

Attachment 106943 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9626801</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465193</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-09 19:21:18 -0700</bug_when>
    <thetext>Looks like the mac-ews fail is just a matter of #ifdef&apos;ing some debug stuff, which can&apos;t (and shouldn&apos;t) compile under release build.

I&apos;ve also found the reason why OSR breaks the web.  The OSR algorithm was playing fast and loose with virtual registers.  For efficiency, it first dumps state in physical registers into the bytecode register file, and then it shuffles virtual registers that were displaced.  But this is wrong.  There may be a value stored in a virtual register by the DFG JIT, where that same virtual register is in use by the old JIT, and the value for that virtual register is currently held by the DFG JIT in a physical register.  Then the OSR code will clobber its own virtual register with a different value stored in a physical register, and then shuffle that virtual register to a different virtual register location.  And so the world breaks.  On bing it means that &apos;this&apos; gets clobbered with a double, resulting in humorous fails.

This is relatively easy to fix.  In most code, the DFG does not use its virtual registers very much, since physical register allocation does its job.  So we just have to special-case the situation where the OSR would want to dump a physical register into an old-JIT virtual register slot that still holds another live value from DFG state.  In that case, the physical register can be dumped to on-the-side scratch storage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465195</commentid>
    <comment_count>9</comment_count>
      <attachid>106943</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-09 19:30:55 -0700</bug_when>
    <thetext>Comment on attachment 106943
the patch - fix style

Attachment 106943 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9628580</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465317</commentid>
    <comment_count>10</comment_count>
      <attachid>106979</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 13:10:17 -0700</bug_when>
    <thetext>Created attachment 106979
the patch - fix build, fix web

This fixes build errors in release builds.  It also fixed websites that were broken (bing, gmail).  The fix for the latter involved dumping registers to scratch storage, if the destination in the register file for those registers overlapped virtual registers used by the DFG.  This is probably a rare case, so the cost of dumping to scratch storage in that case is unlikely to be high.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465318</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-10 13:15:19 -0700</bug_when>
    <thetext>Attachment 106979 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:149:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Total errors found: 1 in 22 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>465319</commentid>
    <comment_count>12</comment_count>
      <attachid>106980</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 13:23:10 -0700</bug_when>
    <thetext>Created attachment 106980
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465320</commentid>
    <comment_count>13</comment_count>
      <attachid>106980</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-10 13:36:55 -0700</bug_when>
    <thetext>Comment on attachment 106980
the patch - fix style

Attachment 106980 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9639108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465331</commentid>
    <comment_count>14</comment_count>
      <attachid>106980</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-10 14:32:17 -0700</bug_when>
    <thetext>Comment on attachment 106980
the patch - fix style

Attachment 106980 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9634272</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465336</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 15:04:59 -0700</bug_when>
    <thetext>OSR now works!  It passes all of our regressions.  It works with major websites.  And it runs all benchmarks, resulting in slight progressions on SunSpider and V8 and regressions in Kraken (that are slight in the average).  It&apos;s probably wise to ignore the Kraken regressions for now since we know that (a) we won&apos;t have loop entry OSR so most Kraken benchmarks are not benefiting from tiered compilation at all and (b) we don&apos;t have reoptimization (the ability to recompile a function with DFG if it fails speculation, and do so that takes into account new statistics gathered from the failing speculations).


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTreeDyn&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;OSRExit&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Used 1 benchmark iteration per VM
invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level timing. Reporting
benchmark execution times with 95% confidence intervals in milliseconds.

                                           TipOfTreeDyn              OSRExit                                     
SunSpider:
   3d-cube                               11.8832+-0.2440    ^     9.6681+-0.2282       ^ definitely 1.2291x faster
   3d-morph                               7.5369+-0.1762          7.5046+-0.1925       
   3d-raytrace                            8.2394+-0.1283          8.0395+-0.1619         might be 1.0249x faster
   access-binary-trees                    3.3760+-0.0722          3.3533+-0.0849       
   access-fannkuch                       11.5918+-0.2447    ?    11.7146+-0.2238       ? might be 1.0106x slower
   access-nbody                           4.1826+-0.0680    ?     4.2478+-0.1147       ? might be 1.0156x slower
   access-nsieve                          2.7102+-0.0361          2.6831+-0.0614         might be 1.0101x faster
   bitops-3bit-bits-in-byte               1.9729+-0.0687          1.9283+-0.0496         might be 1.0231x faster
   bitops-bits-in-byte                    4.7115+-0.3020    ?     4.9152+-0.4484       ? might be 1.0432x slower
   bitops-bitwise-and                     3.5941+-0.1131    ?     3.6054+-0.0694       ?
   bitops-nsieve-bits                     5.5131+-0.1956    ?     5.6360+-0.1615       ? might be 1.0223x slower
   controlflow-recursive                  2.1050+-0.0730          2.0301+-0.0388         might be 1.0369x faster
   crypto-aes                             7.9979+-0.2643          7.9918+-0.3528       
   crypto-md5                             2.8790+-0.1230          2.7342+-0.0698         might be 1.0530x faster
   crypto-sha1                            2.1352+-0.0247    ?     2.1696+-0.0406       ? might be 1.0161x slower
   date-format-tofte                     12.3450+-0.3264         12.3119+-0.2721       
   date-format-xparb                     11.1114+-0.2952    ?    11.3000+-0.4858       ? might be 1.0170x slower
   math-cordic                            6.1643+-0.0821    ?     6.4060+-0.1900       ? might be 1.0392x slower
   math-partial-sums                      7.5603+-0.1425          7.4775+-0.1516         might be 1.0111x faster
   math-spectral-norm                     2.6445+-0.0780          2.6129+-0.0761         might be 1.0121x faster
   regexp-dna                            10.4181+-0.2266         10.1898+-0.2301         might be 1.0224x faster
   string-base64                          8.0985+-0.2298          7.8634+-0.2040         might be 1.0299x faster
   string-fasta                           8.3157+-0.2385          8.2553+-0.2073       
   string-tagcloud                       12.8542+-0.3710    ?    12.9207+-0.3654       ?
   string-unpack-code                    20.6737+-0.5416    ?    20.7743+-0.5640       ?
   string-validate-input                  9.0153+-0.3631    ?     9.0196+-0.2562       ?

   &lt;arithmetic&gt;                           7.2934+-0.0483    ^     7.2059+-0.0333       ^ definitely 1.0122x faster
   &lt;geometric&gt;                            6.0034+-0.0370    ^     5.9398+-0.0252       ^ definitely 1.0107x faster
   &lt;harmonic&gt;                             4.8565+-0.0415          4.8061+-0.0255         might be 1.0105x faster

                                           TipOfTreeDyn              OSRExit                                     
V8:
   crypto                                86.3151+-0.3629         86.1764+-0.3105       
   deltablue                            266.6833+-1.5991    ?   269.2468+-1.1473       ?
   earley-boyer                         107.8270+-0.5498        107.7879+-0.5193       
   raytrace                              88.5111+-0.5719         86.7848+-1.5351         might be 1.0199x faster
   regexp                               118.9526+-0.5743    ^   117.8709+-0.3367       ^ definitely 1.0092x faster
   richards                             216.6778+-1.3869    ?   217.1691+-0.9882       ?
   splay                                187.5032+-0.6330    ^   174.7040+-6.9140       ^ definitely 1.0733x faster

   &lt;arithmetic&gt;                         153.2100+-0.2259    ^   151.3914+-1.0179       ^ definitely 1.0120x faster
   &lt;geometric&gt;                          140.1392+-0.2406    ^   138.3215+-0.8440       ^ definitely 1.0131x faster
   &lt;harmonic&gt;                           128.9961+-0.2924    ^   127.3734+-0.7018       ^ definitely 1.0127x faster

                                           TipOfTreeDyn              OSRExit                                     
Kraken:
   ai-astar                            1128.6180+-7.1150       1127.4359+-7.7371       
   audio-beat-detection                 472.8197+-1.2062        472.3424+-2.9160       
   audio-dft                            423.6761+-2.3933    ?   426.5928+-3.3890       ?
   audio-fft                            362.2386+-1.2123    ?   364.0392+-1.1656       ?
   audio-oscillator                     352.5599+-0.5061        349.6026+-3.8875       
   imaging-darkroom                     538.6404+-7.8410        532.3047+-1.5578         might be 1.0119x faster
   imaging-desaturate                   592.7078+-0.9541    ^   570.8482+-6.6708       ^ definitely 1.0383x faster
   imaging-gaussian-blur               2278.5075+-5.4647       2274.8347+-6.5982       
   json-parse-financial                  54.9914+-0.2639    ?    55.7274+-0.7098       ? might be 1.0134x slower
   json-stringify-tinderbox              68.9338+-0.2610         68.6296+-0.3315       
   stanford-crypto-aes                  152.0854+-1.0092        151.8612+-1.0505       
   stanford-crypto-ccm                  126.4553+-0.9482    ^   124.4325+-0.9059       ^ definitely 1.0163x faster
   stanford-crypto-pbkdf2               355.3449+-0.6106    !   412.1360+-3.4859       ! definitely 1.1598x slower
   stanford-crypto-sha256-iterative     138.7477+-1.3769    !   152.6267+-0.2970       ! definitely 1.1000x slower

   &lt;arithmetic&gt;                         503.3090+-0.9085    !   505.9581+-0.7395       ! definitely 1.0053x slower
   &lt;geometric&gt;                          309.9293+-0.5830    !   314.0504+-0.7148       ! definitely 1.0133x slower
   &lt;harmonic&gt;                           194.0622+-0.4802    !   196.7704+-0.8967       ! definitely 1.0140x slower

                                           TipOfTreeDyn              OSRExit                                     
All benchmarks:
   &lt;arithmetic&gt;                         176.7750+-0.2894    ?   177.2448+-0.3249       ?
   &lt;geometric&gt;                           31.0725+-0.1029         30.9515+-0.0943       
   &lt;harmonic&gt;                             8.5764+-0.0714          8.4901+-0.0443         might be 1.0102x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465341</commentid>
    <comment_count>16</comment_count>
      <attachid>106986</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 15:40:53 -0700</bug_when>
    <thetext>Created attachment 106986
the patch - disable tiering, which the last patch accidentally enabled

This is now passing all tests.  It&apos;s ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465342</commentid>
    <comment_count>17</comment_count>
      <attachid>106987</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 16:24:45 -0700</bug_when>
    <thetext>Created attachment 106987
the patch - fix conflict</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465345</commentid>
    <comment_count>18</comment_count>
      <attachid>106988</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 16:35:08 -0700</bug_when>
    <thetext>Created attachment 106988
the patch - once again, changed Platform.h

In the previous patch I once again left tiering enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465359</commentid>
    <comment_count>19</comment_count>
      <attachid>106992</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 17:50:38 -0700</bug_when>
    <thetext>Created attachment 106992
the patch - fix broken assert

This now passes tests with tiering turned both on and off.  It&apos;s lucky that tiering turned off still leads to the OSR exit analysis running, since it revealed breakeage in an ASSERT statement for SetLocals.  It turns out that synthetic SetLocals (like the ones that initialize variables to undefined) are sufficiently special that the ASSERT about the bytecode index of the node following the SetLocal was wrong.  The ASSERT just needed to be made a slight bit more lenient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465360</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-10 17:54:14 -0700</bug_when>
    <thetext>Attachment 106992 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:754:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 21 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>465379</commentid>
    <comment_count>21</comment_count>
      <attachid>107000</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 22:42:51 -0700</bug_when>
    <thetext>Created attachment 107000
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465405</commentid>
    <comment_count>22</comment_count>
      <attachid>107000</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-11 14:00:48 -0700</bug_when>
    <thetext>Comment on attachment 107000
the patch - fix style

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

&gt; Source/JavaScriptCore/dfg/DFGDriver.cpp:47
&gt; +    if (false) {
&gt; +        switch (codeBlock-&gt;instructions().size() * sizeof(Instruction)) {
&gt; +        case 11176:
&gt; +            return false;
&gt; +        default:
&gt; +            break;
&gt; +        }
&gt; +    }

please to be removing the debugging code? :D

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:103
&gt; +#if DFG_OSR

I&apos;d prefer we used the ENABLE() style macros, e.g. ENABLE(DFG_OSR)

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:109
&gt; +#if DFG_DEBUG_VERBOSE

ENABLE() again

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:113
&gt; +#if DFG_JIT_BREAK_ON_SPECULATION_FAILURE

and again

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:117
&gt; +#if DFG_VERBOSE_SPECULATION_FAILURE

...

&gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:1184
&gt; +#if DFG_OSR

ENABLE()

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:176
&gt; +#ifndef NDEBUG

This seems more related to the presence or absence of VERBOSE logging rather than debug build vs. not debug build -- perhaps it should be 
#if ENABLE(....) || !defined(NDEBUG) 
?

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:219
&gt; +    JSValue constant() const
&gt; +    {
&gt; +        ASSERT(m_technique == Constant);
&gt; +        return JSValue::decode(m_source.constant);
&gt; +    }

Just for reference can a constant be a JSString?  Does this end up relying on the containing code block for marking?

&gt; Source/JavaScriptCore/runtime/JSGlobalData.h:239
&gt; +        Vector&lt;int64_t*&gt; osrScratchBuffers;

Honestly I think i&apos;d prefer a Vector of vectors here -- If we really felt it would be beneficial we could come up with a more sensible &quot;Array&quot; class -&gt; the absence of range checking in debug builds and the need to manually free the arrays is just a little icky to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465412</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-11 14:33:09 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:103
&gt; &gt; +#if DFG_OSR
&gt; 
&gt; I&apos;d prefer we used the ENABLE() style macros, e.g. ENABLE(DFG_OSR)
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:109
&gt; &gt; +#if DFG_DEBUG_VERBOSE
&gt; 
&gt; ENABLE() again
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:113
&gt; &gt; +#if DFG_JIT_BREAK_ON_SPECULATION_FAILURE
&gt; 
&gt; and again
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGJITCompiler.cpp:117
&gt; &gt; +#if DFG_VERBOSE_SPECULATION_FAILURE
&gt; 
&gt; ...
&gt; 

I&apos;ve filed a bug against this: https://bugs.webkit.org/show_bug.cgi?id=67907

&gt; This seems more related to the presence or absence of VERBOSE logging rather than debug build vs. not debug build -- perhaps it should be 
&gt; #if ENABLE(....) || !defined(NDEBUG) 
&gt; ?

The goal there was to enable us to plant dump() statements wherever necessary when debugging, without having to enable DFG_DEBUG_VERBOSE, since in some (admittedly rare) situations DFG_DEBUG_VERBOSE causes too much output.

This isn&apos;t a big deal since I&apos;ve happily browsed the interwebs with DFG_DEBUG_VERBOSE and was reasonably happy.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:219
&gt; &gt; +    JSValue constant() const
&gt; &gt; +    {
&gt; &gt; +        ASSERT(m_technique == Constant);
&gt; &gt; +        return JSValue::decode(m_source.constant);
&gt; &gt; +    }
&gt; 
&gt; Just for reference can a constant be a JSString?  Does this end up relying on the containing code block for marking?

All constants come from the CodeBlock&apos;s constant pool, so yes.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSGlobalData.h:239
&gt; &gt; +        Vector&lt;int64_t*&gt; osrScratchBuffers;
&gt; 
&gt; Honestly I think i&apos;d prefer a Vector of vectors here -- If we really felt it would be beneficial we could come up with a more sensible &quot;Array&quot; class -&gt; the absence of range checking in debug builds and the need to manually free the arrays is just a little icky to me.

Vector&lt;void*&gt; it is for now, as per our discussions on IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465768</commentid>
    <comment_count>24</comment_count>
      <attachid>107077</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 13:44:18 -0700</bug_when>
    <thetext>Created attachment 107077
the patch - fix review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465772</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-12 13:47:40 -0700</bug_when>
    <thetext>Attachment 107077 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGJITCodeGenerator.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 21 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>465776</commentid>
    <comment_count>26</comment_count>
      <attachid>107079</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 13:52:37 -0700</bug_when>
    <thetext>Created attachment 107079
the patch - fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465797</commentid>
    <comment_count>27</comment_count>
      <attachid>107079</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-12 14:31:59 -0700</bug_when>
    <thetext>Comment on attachment 107079
the patch - fix style

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

&gt; Source/JavaScriptCore/dfg/DFGDriver.cpp:47
&gt; +    if (false) {
&gt; +        switch (codeBlock-&gt;instructions().size() * sizeof(Instruction)) {
&gt; +        case 11176:
&gt; +            return false;
&gt; +        default:
&gt; +            break;
&gt; +        }
&gt; +    }

DIE!!!!!!1111!!!!11!!!1!1111!!!!oneoneone!!!!onehundredandeleven!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465803</commentid>
    <comment_count>28</comment_count>
      <attachid>107085</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 14:41:58 -0700</bug_when>
    <thetext>Created attachment 107085
the patch - fix review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466013</commentid>
    <comment_count>29</comment_count>
      <attachid>107085</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 18:29:26 -0700</bug_when>
    <thetext>Comment on attachment 107085
the patch - fix review

Committing manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466015</commentid>
    <comment_count>30</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-12 18:33:12 -0700</bug_when>
    <thetext>Landed in r94996.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106827</attachid>
            <date>2011-09-08 18:51:31 -0700</date>
            <delta_ts>2011-09-09 14:45:47 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>osrwip_patch_1.diff</filename>
            <type>text/plain</type>
            <size>51096</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAqLwogCiAjaWZuZGVmIE5ERUJV
Rwotc3RhdGljIGJvb2wgc19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK3N0YXRpYyBib29s
IHNfZHVtcHNHZW5lcmF0ZWRDb2RlID0gdHJ1ZTsKICNlbmRpZgogCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0
ZToKICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJl
dHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2Rl
T3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3Jp
Z2luKG1fY3VycmVudEluZGV4KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0
ZSBhIG5vZGUgYW5kIGFkZCBpdCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBh
cmUKICAgICAvLyAnbXVzdEdlbmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkg
YmUgcmVmJ2VkIHRvIGVuc3VyZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBo
KE5vZGVUeXBlIG9wLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQy
ID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9k
ZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAg
bV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmln
aW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVN
dXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0z
ODMsNyArMzg3LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlw
ZSBvcCwgT3BJbmZvIGluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAg
ICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAg
ICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQx
LCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAg
ICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJl
c3VsdEluZGV4KTsKQEAgLTM5Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBh
ZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUlu
ZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMyA9IE5vTm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9
IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUo
b3AsIG1fY3VycmVudEluZGV4LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMp
KTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwg
aW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9w
ICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4
KTsKQEAgLTQwMiw3ICs0MDYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBo
KE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8y
KQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dy
YXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9w
LCBtX2N1cnJlbnRJbmRleCwgaW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4u
c2l6ZSgpIC0gbV9udW1QYXNzZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251
bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAg
bV9udW1QYXNzZWRWYXJBcmdzID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiA5NDgwMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMjc0LDEyICsyNzQsMTAgQEAgcHVibGljOgogICAgICAgICB1LmZwciA9IGZwcjsKICAg
ICB9CiAKLSNpZm5kZWYgTkRFQlVHCiAgICAgYm9vbCBhbGl2ZSgpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV91c2VDb3VudDsKICAgICB9Ci0jZW5kaWYKIAogcHJpdmF0ZToKICAgICAvLyBUaGUg
aW5kZXggb2YgdGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZpcnR1YWwg
cmVnaXN0ZXIuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTIsMTMgKzUyLDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgQ28KICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKICAgICB1bnNp
Z25lZCByZWZDb3VudCA9IG5vZGUucmVmQ291bnQoKTsKLSAgICBpZiAoIXJlZkNvdW50KSB7Ci0g
ICAgICAgIHByaW50ZigiJSA0ZDpcdHNraXBwZWQgJXNcbiIsIChpbnQpbm9kZUluZGV4LCBvcE5h
bWUob3ApKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBib29sIHNraXBwZWQgPSAhcmVm
Q291bnQ7CiAgICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2RlLm11c3RHZW5lcmF0ZSgpOwotICAg
IGlmIChtdXN0R2VuZXJhdGUpCisgICAgaWYgKG11c3RHZW5lcmF0ZSkgeworICAgICAgICBBU1NF
UlQocmVmQ291bnQpOwogICAgICAgICAtLXJlZkNvdW50OworICAgIH0KIAogICAgIC8vIEV4YW1w
bGUvZXhwbGFuYXRpb24gb2YgZGF0YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAtNzcsOCAr
NzYsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgLy8g
ICAgICAgICAkIyAgIC0gdGhlIGluZGV4IGluIHRoZSBDb2RlQmxvY2sgb2YgYSBjb25zdGFudCB7
IGZvciBudW1lcmljIGNvbnN0YW50cyB0aGUgdmFsdWUgaXMgZGlzcGxheWVkIHwgZm9yIGludGVn
ZXJzLCBpbiBib3RoIGRlY2ltYWwgYW5kIGhleCB9LgogICAgIC8vICAgICAgICAgaWQjICAtIHRo
ZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIgeyBpZiBjb2RlQmxvY2sg
aXMgcGFzc2VkIHRvIGR1bXAoKSwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyBkaXNwbGF5
ZWQgfS4KICAgICAvLyAgICAgICAgIHZhciMgLSB0aGUgaW5kZXggb2YgYSB2YXIgb24gdGhlIGds
b2JhbCBvYmplY3QsIHVzZWQgYnkgR2V0R2xvYmFsVmFyL1B1dEdsb2JhbFZhciBvcGVyYXRpb25z
LgotICAgIHByaW50ZigiJSA0ZDpcdDwlYyV1OiIsIChpbnQpbm9kZUluZGV4LCBtdXN0R2VuZXJh
dGUgPyAnIScgOiAnICcsIHJlZkNvdW50KTsKLSAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkKKyAg
ICBwcmludGYoIiUgNGQ6JXM8JWMldToiLCAoaW50KW5vZGVJbmRleCwgc2tpcHBlZCA/ICIgIHNr
aXBwZWQgICIgOiAiICAgICAgICAgICAiLCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJlZkNv
dW50KTsKKyAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiAhc2tpcHBlZCkKICAgICAgICAgcHJp
bnRmKCIldSIsIG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAgcHJp
bnRmKCItIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOCwx
NyArMTExOCwxNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAg
ICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lz
dGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAg
ICAgCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwot
ICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmV4Y2VwdGlvbkluZm8pOworICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIG1faml0
LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogICAgIAogICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAgc2xvd1BhdGgubGluaygm
bV9qaXQpOwogICAgIAogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+
bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgSklUQ29tcGlsZXI6OkNh
bGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93
Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZv
KTsKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFwcGVuZENhbGxXaXRo
RmFzdEV4Y2VwdGlvbkNoZWNrKHNsb3dDYWxsRnVuY3Rpb24sIG1faml0LmdyYXBoKClbbV9jb21w
aWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogICAgIG1faml0Lm1vdmUoSW1tMzIobnVtQXJncyksIEdQ
UkluZm86OnJlZ1QxKTsKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCkt
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25J
bmZvKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAK
ICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAKQEAgLTExMzYsNyArMTEzNiw3IEBAIHZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICAKICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKICAgICAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmV4Y2VwdGlvbkluZm8pOworICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0Nh
bGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0u
Y29kZU9yaWdpbik7CiB9CiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6c3BlY3VsYXRpb25DaGVj
ayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk0ODAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkwNSw3ICs5MDUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBKSVRDb21waWxl
cjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBm
dW5jdGlvbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2Vw
dGlvbkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRp
b25JbmZvKTsKKyAgICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soZnVuY3Rpb24sIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwog
ICAgIH0KIAogICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBq
dW1wLCBCbG9ja0luZGV4IGRlc3RpbmF0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MCw2ICsxMDAsMTgwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmZpbGxUb0pTKE5vZGVJbmRleCBub2QK
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3Iobm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7CiB9
CiAKKyNpZiBERkdfT1NSCit2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NS
KGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5KQorewor
ICAgIC8vIDApIFByby1mb3JtYSBzdHVmZi4KKyAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsK
KworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBm
b3IgTm9kZSBAJWQgYXQgSklUIG9mZnNldCAweCV4XG4iLCAoaW50KWV4aXQubV9ub2RlSW5kZXgs
IGRlYnVnT2Zmc2V0KCkpOworI2VuZGlmCisjaWYgREZHX0pJVF9CUkVBS19PTl9TUEVDVUxBVElP
Tl9GQUlMVVJFCisgICAgYnJlYWtwb2ludCgpOworI2VuZGlmCisgICAgCisjaWYgREZHX1ZFUkJP
U0VfU1BFQ1VMQVRJT05fRkFJTFVSRQorICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyog
ZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKKyAgICBkZWJ1Z0lu
Zm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgIGRlYnVnSW5mby0+ZGVidWdPZmZzZXQg
PSBkZWJ1Z09mZnNldCgpOworICAgIAorICAgIGRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50
U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworI2VuZGlmCisKKyAgICAvLyAxKSBQZXJm
b3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMgaW50byBwbGF5IHdoZW4g
YW4gb3BlcmF0aW9uCisgICAgLy8gICAgc3RhcnRzIG11dGF0aW5nIHN0YXRlIGJlZm9yZSB2ZXJp
ZnlpbmcgdGhlIHZlcmFjaXR5IG9mIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMKKyAgICAvLyAgICBh
bHJlYWR5IG1hZGUuCisgICAgCisgICAgR1BSUmVnIGFscmVhZHlCb3hlZCA9IEludmFsaWRHUFJS
ZWc7CisgICAgCisgICAgaWYgKHJlY292ZXJ5KSB7CisgICAgICAgIHN3aXRjaCAocmVjb3Zlcnkt
PnR5cGUoKSkgeworICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgorICAgICAgICAgICAgc3Vi
MzIocmVjb3ZlcnktPnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIG9yUHRy
KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAg
ICAgICAgICBhbHJlYWR5Qm94ZWQgPSByZWNvdmVyeS0+ZGVzdCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoK
KyAgICAgICAgICAgIHhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEZy
b20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4
aW1pemUgdGhlIGRpc3RhbmNlCisgICAgLy8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21w
dXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9yZWQuCisgICAgCisgICAgLy8gMikgUGVyZm9ybSBhbGwg
cmVib3hpbmcgb2YgaW50ZWdlcnMuCisgICAgCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAg
ICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIgJiYgcmVj
b3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVkKQorICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CisgICAgfQorICAgIAorICAg
IC8vIDMpIER1bXAgYWxsIEdQUlMgYW5kIGNvbnN0YW50cyBpbnRvIHRoZSByZWdpc3RlciBmaWxl
LgorICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBl
eGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBhZGRyZXNzRm9y
KG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0YW50Ogor
ICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUocmVjb3Zl
cnkuY29uc3RhbnQoKSkpLCBhZGRyZXNzRm9yKG9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gNCkgQm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcg
bW9yZSBHUFJzIHRoYW4gRlBScykKKyAgICAKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBGUFJSZWcgZnByID0gcmVjb3ZlcnkuZnByKCk7CisgICAgICAgIEdQUlJl
ZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgoZnByKSk7CisgICAg
ICAgIGJveERvdWJsZShmcHIsIGdwcik7CisgICAgfQorICAgIAorICAgIC8vIDUpIER1bXAgYWxs
IGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmlsZS4gIEFsc28gY291bnQgdGhlIG51bWJlciBv
ZgorICAgIC8vICAgIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycywgd2hpY2ggaXMgdXNlZCBh
cyBhbiBvcHRpbWl6YXRpb24gaW4KKyAgICAvLyAgICB0aGUgbmV4dCBzdGFnZS4KKyAgICAKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAgIAor
ICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmllcygp
OyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhp
dC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlx
dWUoKSkgeworICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LmZwcigpKSksIGFkZHJlc3NG
b3IoZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJlck9m
RGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAvLyA2KSBSZXNodWZmbGUgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXJzLiAgT3B0aW1pemUg
Zm9yIHRoZSBjYXNlIHRoYXQKKyAgICAvLyAgICB0aGUgbnVtYmVyIG9mIGRpc3BsYWNlZCB2aXJ0
dWFsIHJlZ2lzdGVycyBpcyBub3QgbW9yZSB0aGFuIHRoZSBudW1iZXIKKyAgICAvLyAgICBvZiBh
dmFpbGFibGUgcGh5c2ljYWwgcmVnaXN0ZXJzLgorICAgIAorICAgIGlmIChudW1iZXJPZkRpc3Bs
YWNlZFZpcnR1YWxSZWdpc3RlcnMgPCBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykgeworICAg
ICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJ
bmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAwOworICAgICAgICBmb3IgKGludCBpbmRl
eCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAg
ICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zl
cnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgc3RvcmVQdHIoR1BSSU5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgYWRk
cmVzc0ZvcihleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBh
bGdvcml0aG0gdGhhdCB3ZSB1c2UKKyAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3Bl
Y3VsYXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAvLyBzb21l
IGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZhbHVlcyB0aGF0IGdldCBkaXNwbGFjZWQgYW5k
CisgICAgICAgIC8vIHNwaWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3Bl
Y3VsYXRpb24uCisgICAgICAgIAorICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29kZSBpcyBlbmdp
bmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAorICAgICAgICAvLyBzdXBlci4K
KyAgICAgICAgCisgICAgICAgIGludDY0X3QqIHNjcmF0Y2hCdWZmZXIgPSBnbG9iYWxEYXRhKCkt
Pm9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVy
cyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Cisg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBzdG9yZVB0cihyZWdU
MCwgc2NyYXRjaEJ1ZmZlciArIGRpc3BsYWNlbWVudEluZGV4KyspOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBkaXNwbGFjZW1lbnRJbmRleCsrLCByZWdUMCk7
CisgICAgICAgICAgICBzdG9yZVB0cihyZWdUMCwgYWRkcmVzc0ZvcihleGl0Lm9wZXJhbmRGb3JJ
bmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyA3KSBMb2FkIHRo
ZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAg
CisgICAgLy8gOCkgRml4IGNhbGwgZnJhbWUuCisgICAgCisgICAgLy8gOSkgSnVtcCBpbnRvIHRo
ZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgorfQorCit2b2lkIEpJVENvbXBpbGVy
OjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZlKQoreworICAgIE9TUkV4
aXRWZWN0b3I6Oml0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVn
aW4oKTsKKyAgICBPU1JFeGl0VmVjdG9yOjppdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZl
Lm9zckV4aXRzKCkuZW5kKCk7CisgICAgCisgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0Vu
ZCkgeworICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKKyAgICAgICAg
ZXhpdFNwZWN1bGF0aW9uV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292
ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSk7CisgICAgICAgICsrZXhpdHNJdGVyOworICAgIH0K
K30KKyNlbHNlIC8vIERGR19PU1IKIGNsYXNzIEdlbmVyYWxpemVkUmVnaXN0ZXIgewogcHVibGlj
OgogICAgIEdlbmVyYWxpemVkUmVnaXN0ZXIoKSB7IH0KQEAgLTgwMyw2ICs5NzcsNyBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rU3BlY3VsYXRpb25DaGVja3MoCiAgICAgQVNTRVJUKCEoY2hlY2tz
SXRlciAhPSBjaGVja3NFbmQpKTsKICAgICBBU1NFUlQoIShlbnRyaWVzSXRlciAhPSBlbnRyaWVz
RW5kKSk7CiB9CisjZW5kaWYgLy8gREZHX09TUgogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxl
RW50cnkoKQogewpAQCAtODQ0LDEyICsxMDE5LDE1IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVCb2R5KCkKICAgICAvLyB0byBhbGxvdyBpdCB0byBjaGVjayB3aGljaCBub2RlcyBpbiB0aGUg
Z3JhcGggbWF5IGJhaWwgb3V0LCBhbmQgbWF5IG5lZWQgdG8gcmVlbnRlciB0aGUKICAgICAvLyBu
b24tc3BlY3VsYXRpdmUgcGF0aC4KICAgICBpZiAoY29tcGlsZWRTcGVjdWxhdGl2ZSkgeworI2lm
IERGR19PU1IKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIGNo
ZWNrSXRlcmF0b3Ioc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25DaGVja3MoKSk7CiAgICAgICAgIE5v
blNwZWN1bGF0aXZlSklUIG5vblNwZWN1bGF0aXZlKCp0aGlzKTsKICAgICAgICAgbm9uU3BlY3Vs
YXRpdmUuY29tcGlsZShjaGVja0l0ZXJhdG9yKTsKIAogICAgICAgICAvLyBMaW5rIHRoZSBiYWls
LW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCB0byB0aGUgY29ycmVzcG9uZGluZyBlbnRy
eSBwb2ludHMgaW50byB0aGUgbm9uLXNwZWN1bGF0aXZlIG9uZS4KICAgICAgICAgbGlua1NwZWN1
bGF0aW9uQ2hlY2tzKHNwZWN1bGF0aXZlLCBub25TcGVjdWxhdGl2ZSk7CisjZW5kaWYKICAgICB9
IGVsc2UgewogI2lmIERGR19ERUJVR19WRVJCT1NFCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
U3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsKQEAgLTkxMSw3ICsxMDg5LDcgQEAg
dm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYg
KG1fY2FsbHNbaV0ubV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHJldHVybkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQo
bV9jYWxsc1tpXS5tX2NhbGwpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbklu
Zm8gPSBtX2NhbGxzW2ldLm1fZXhjZXB0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBleGNlcHRpb25JbmZvID0gbV9jYWxsc1tpXS5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OwogICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5h
cHBlbmQoQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNl
dCwgZXhjZXB0aW9uSW5mbykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDgwMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtODIsMjEgKzgyLDIxIEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICB9CiAKICAg
ICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHdpdGggYW4gZXhjZXB0aW9uIGhhbmRsZXIuCi0g
ICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5j
dGlvbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkluZm8g
ZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGws
IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVj
aywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAg
ICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNlcHRpb25DaGVjayhleGNl
cHRpb25DaGVjaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAg
ICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRsZXNFeGNl
cHRpb25zKHRydWUpCiAgICAgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNh
bGwgdGhhdCBtYXkgY2F1c2UgZXhjZXB0aW9ucywgYnV0IHdoaWNoIGFyZSBoYW5kbGVkCiAgICAg
Ly8gdGhyb3VnaCBzb21lIG1lY2hhbmlzbSBvdGhlciB0aGFuIHRoZSBpbi1saW5lIGV4Y2VwdGlv
biBoYW5kbGVyLgotICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVu
Y3Rpb25QdHIgZnVuY3Rpb24sIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBDYWxs
UmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwg
bV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9u
SW5mbykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hh
bmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KQEAgLTEwNCw3ICsxMDQsNyBAQCBz
dHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOwogICAg
IEZ1bmN0aW9uUHRyIG1fZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNl
cHRpb25DaGVjazsKLSAgICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBDb2Rl
T3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFuZGxlc0V4Y2VwdGlvbnM7CiB9Owog
CkBAIC0xOTIsOSArMTkyLDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIE5vdGlmeSB0aGUg
SklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2b2lkIG5v
dGlmeUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQgbm90
aWZ5Q2FsbChDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAg
IG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgRnVuY3Rpb25QdHIoKSwgZXhjZXB0aW9u
SW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIEZ1bmN0aW9u
UHRyKCksIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9t
IEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KQEAgLTIwNSwyMCArMjA1LDIw
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2Rl
LCB3aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNpZ25lZCBleGNlcHRpb25J
bmZvKQorICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlv
blB0ciYgZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENh
bGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0g
YnJhbmNoVGVzdFB0cihOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhj
ZXB0aW9uKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxs
LCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25D
aGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0K
ICAgICAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBl
eGNlcHRpb24gY2hlY2sgdGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCi0g
ICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxs
V2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2Fs
bCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNv
cmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8p
KTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0
aW9uLCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rp
b25DYWxsOwogICAgIH0KICAgICAKQEAgLTMxMSw5ICszMTEsOSBAQCBwdWJsaWM6CiAgICAgICAg
IG1fbWV0aG9kR2V0cy5hcHBlbmQoTWV0aG9kR2V0UmVjb3JkKHNsb3dDYWxsLCBzdHJ1Y3RUb0Nv
bXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2Fs
bCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNl
cHRpb25JbmZvKQorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0Nh
bGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQogICAgIHsKLSAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQo
ZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbkluZm8p
KTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dD
YWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKIHByaXZh
dGU6CkBAIC0zMjYsOCArMzI2LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsTnVtZXJpY1Rv
RG91YmxlKE5vZGVJbmRleCwgRlBSUmVnLCBHUFJSZWcgdGVtcG9yYXJ5KTsKICAgICB2b2lkIGZp
bGxJbnQzMlRvSW50ZWdlcihOb2RlSW5kZXgsIEdQUlJlZyk7CiAgICAgdm9pZCBmaWxsVG9KUyhO
b2RlSW5kZXgsIEdQUlJlZyk7CisgICAgCisjaWYgREZHX09TUgorICAgIHZvaWQgZXhpdFNwZWN1
bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOworICAg
IHZvaWQgbGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJik7CisjZWxzZQogICAgIHZvaWQganVt
cEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29uc3QgU3BlY3VsYXRpb25DaGVjayYs
IGNvbnN0IEVudHJ5TG9jYXRpb24mLCBTcGVjdWxhdGlvblJlY292ZXJ5KiwgTm9kZVRvUmVnaXN0
ZXJNYXAmIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVyTWFwJiBlbnRyeU5v
ZGVUb1JlZ2lzdGVyTWFwKTsKICAgICB2b2lkIGxpbmtTcGVjdWxhdGlvbkNoZWNrcyhTcGVjdWxh
dGl2ZUpJVCYsIE5vblNwZWN1bGF0aXZlSklUJik7CisjZW5kaWYKIAogICAgIC8vIFRoZSBnbG9i
YWxEYXRhLCB1c2VkIHRvIGFjY2VzcyBjb25zdGFudHMgc3VjaCBhcyB0aGUgdlB0cnMuCiAgICAg
SlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CkBAIC0zODYsMTIgKzM5MiwxMiBAQCBwcml2YXRl
OgogICAgIH07CiAgICAgCiAgICAgc3RydWN0IEpTQ2FsbFJlY29yZCB7Ci0gICAgICAgIEpTQ2Fs
bFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0
VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgICAgIEpT
Q2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFy
Z2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAg
ICAgIDogbV9mYXN0Q2FsbChmYXN0Q2FsbCkKICAgICAgICAgICAgICwgbV9zbG93Q2FsbChzbG93
Q2FsbCkKICAgICAgICAgICAgICwgbV90YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCiAgICAg
ICAgICAgICAsIG1faXNDYWxsKGlzQ2FsbCkKLSAgICAgICAgICAgICwgbV9leGNlcHRpb25JbmZv
KGV4Y2VwdGlvbkluZm8pCisgICAgICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQog
ICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zOTksNyArNDA1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgQ2FsbCBtX3Nsb3dDYWxsOwogICAgICAgICBEYXRhTGFiZWxQdHIgbV90YXJn
ZXRUb0NoZWNrOwogICAgICAgICBib29sIG1faXNDYWxsOwotICAgICAgICB1bnNpZ25lZCBtX2V4
Y2VwdGlvbkluZm87CisgICAgICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIH07CiAK
ICAgICBWZWN0b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVydHlBY2Nlc3NlczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NDgwMikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw4ICsyNiw4IEBACiAjaWZuZGVmIERGR05vZGVfaAogI2RlZmluZSBERkdOb2RlX2gKIAotLy8g
RW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5n
IGR1bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBocy4KLSNkZWZpbmUgREZHX0RFQlVHX1ZFUkJPU0Ug
MAorLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5j
bHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBocy4gIFNldCB0byAxIGZvciBiYXNpYyB2
ZXJib3NpdHksIG9yIHRvIDIgZm9yIG1vcmUgdmVyYm9zaXR5LgorI2RlZmluZSBERkdfREVCVUdf
VkVSQk9TRSAyCiAvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBkeW5hbWljIGNoZWNrcyBpbnRvIHRo
ZSBpbnN0cnVjdGlvbiBzdHJlYW0uCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogI2RlZmluZSBERkdf
SklUX0FTU0VSVCAxCkBAIC01MCw2ICs1MCw4IEBACiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9E
SVNCQUxFIDAKIC8vIERpc2FibGUgdGhlIFNwZWN1bGF0aXZlSklUIHdpdGhvdXQgaGF2aW5nIHRv
IHRvdWNoIFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNV
TEFUSVZFIDAKKy8vIERpc2FibGUgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1Ig
aW5zdGVhZC4KKyNkZWZpbmUgREZHX09TUiAwCiAvLyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3Vj
Y2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2luZyB1c2Ugb2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5p
bmcgb24gdGhlIGhvdCBwYXRoLgogI2RlZmluZSBERkdfU1VDQ0VTU19TVEFUUyAwCiAKQEAgLTcy
LDkgKzc0LDMyIEBAIENPTVBJTEVfQVNTRVJUKHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIpID0KIHR5
cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3RhdGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUg
PSBVSU5UX01BWDsKIAotLy8gSW5mb3JtYXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4
Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2UgaW5mb3JtYXRpb24uCisvLyBJbmZvcm1hdGlv
biB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhjZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJj
ZSBpbmZvcm1hdGlvbiwKKy8vIGFuZCB0byBpbXBsZW1lbnQgT1NSLgogLy8gKFByZXNlbnRseSBp
bXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KLXR5cGVkZWYgdWludDMyX3QgRXhjZXB0
aW9uSW5mbzsKK2NsYXNzIENvZGVPcmlnaW4geworcHVibGljOgorICAgIENvZGVPcmlnaW4oKQor
ICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBDb2RlT3JpZ2luKHVpbnQz
Ml90IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5k
ZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsg
fQorICAgIAorICAgIHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9ieXRlY29kZUluZGV4OworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OworfTsKIAog
Ly8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBvZiBh
biBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkgbm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0aW9u
YWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2VuZXJhdGUsIGlzIGNvbnN0YW50LCBldGMpLgpA
QCAtMzU3LDkgKzM4Miw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZh
ckFyZyB9OwogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4s
IG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZv
IGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlw
ZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAg
ICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAg
ICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAg
ewpAQCAtMzcwLDkgKzM5NSw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25z
dHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVl
LgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJ
bmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUp
CiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZv
KQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxS
ZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkK
ICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1ZSkKQEAgLTM4NCw5ICs0MDksOSBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMg
Y2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3As
IEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBO
b2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9O
b2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9u
SW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0
dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50
KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtMzk5LDkgKzQyNCw5IEBA
IHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRo
IGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4K
LSAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9u
SW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNp
Z25lZCBudW1DaGlsZHJlbikKKyAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJz
dENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAg
LCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2Rl
T3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92
YWx1ZSkKQEAgLTY0Myw2ICs2NjgsMTQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQo
IShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5j
aGlsZDE7CiAgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRv
IGRvIGEgZmFzdCBjaGVjayBvbiB0aGUgZmlyc3QgY2hpbGQKKyAgICAvLyBiZWZvcmUgYWxzbyBk
b2luZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUuIFVzZSB0aGlzIHdpdGggY2FyZSBhbmQKKyAgICAv
LyBhdm9pZCBpdCBpZiBwb3NzaWJsZS4KKyAgICBOb2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CisgICAgfQogCiAg
ICAgTm9kZUluZGV4IGNoaWxkMigpCiAgICAgewpAQCAtNjcxLDcgKzcwNCw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAvLyBUaGlzIGVudW0gdmFsdWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBu
b2RlLgogICAgIE5vZGVUeXBlIG9wOwogICAgIC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24g
aGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2Rl
IGluZGV4KS4KLSAgICBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm87CisgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVyZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBm
b3Igbm8gY2hpbGQpLgogICAgIHVuaW9uIHsKICAgICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lv
biA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCisj
aWYgIURGR19PU1IKIFNwZWN1bGF0aW9uQ2hlY2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5
SW5kZXgpCiAgICAgOiBtX2NoZWNrKGNoZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2Nv
bXBpbGVJbmRleCkKQEAgLTE2OCw2ICsxNjksNTQgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3Vs
YXRpb25DaGVjayhNYWNybwogICAgICAgICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9k
ZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KIH0KKyNlbmRpZgorCit2b2lkIFZhbHVlU291cmNlOjpk
dW1wKEZJTEUqIG91dCkKK3sKKyAgICBmcHJpbnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5k
ZXgpOworfQorCit2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KQoreworICAgIHN3
aXRjaCAodGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZToKKyAg
ICAgICAgZnByaW50ZihvdXQsICItIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5HUFI6
CisgICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluRlBSOgorICAgICAgICBmcHJpbnRmKG91dCwg
IiUlJXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIqJWQi
LCB2aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RhbnQ6
CisgICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9udEtub3c6CisgICAgICAgIGZwcmludGYob3V0
LCAiISIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKG91
dCwgIj8lZCIsIHRlY2huaXF1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisjaWYg
REZHX09TUgorT1NSRXhpdDo6T1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKKyAgICA6IG1fY2hlY2so
Y2hlY2spCisgICAgLCBtX2J5dGVjb2RlSW5kZXgoaml0LT5ncmFwaCgpW2ppdC0+bV9jb21waWxl
SW5kZXhdLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKQorICAgICwgbV9yZWNvdmVyeUluZGV4
KHJlY292ZXJ5SW5kZXgpCisgICAgLCBtX2FyZ3VtZW50cyhqaXQtPm1fYXJndW1lbnRzLnNpemUo
KSkKKyAgICAsIG1fdmFyaWFibGVzKGppdC0+bV92YXJpYWJsZXMuc2l6ZSgpKQoreworICAgIGZv
ciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsg
Kythcmd1bWVudCkKKyAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CisgICAgZm9yICh1
bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3Zh
cmlhYmxlKQorICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQtPmNvbXB1dGVWYWx1
ZVJlY292ZXJ5Rm9yKGppdC0+bV92YXJpYWJsZXNbdmFyaWFibGVdKTsKK30KKyNlbmRpZgogCiBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJbmRl
eCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewpAQCAtNjY4LDYgKzcxNyw5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkp
KTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfQorICAg
ICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2
ZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgLy8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJl
Z2lzdGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgICAg
IHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3Vy
Y2UoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMzY3LDExICsxNDE5LDE4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIH0KLQorICAgIAogICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVz
dEdlbmVyYXRlKCkpCiAgICAgICAgIHVzZShtX2NvbXBpbGVJbmRleCk7CiB9CiAKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUKG5v
ZGUub3AgPT0gU2V0TG9jYWwpOworICAgIAorICAgIHNldE5vZGVJbmRleEZvck9wZXJhbmQobm9k
ZS5jaGlsZDEoKSwgbm9kZS5sb2NhbCgpKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShCYXNpY0Jsb2NrJiBibG9jaykKIHsKICAgICBBU1NFUlQobV9jb21waWxlSW5kZXggPT0g
YmxvY2suYmVnaW4pOwpAQCAtMTM3OSwyOSArMTQzOCw1NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKEJhc2ljQmxvY2smCiAjaWYgREZHX0pJVF9CUkVBS19PTl9FVkVSWV9CTE9DSwog
ICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgorICAgIAorICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXJndW1lbnRzW2ld
ID0gVmFsdWVTb3VyY2UoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVz
LnNpemUoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKCk7CiAK
ICAgICBmb3IgKDsgbV9jb21waWxlSW5kZXggPCBibG9jay5lbmQ7ICsrbV9jb21waWxlSW5kZXgp
IHsKICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdOwot
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCisgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CisjaWYgREZHX0RFQlVH
X1ZFUkJPU0UKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgc2tp
cHBpbmcgTm9kZSBAJWQgYXQgSklUIG9mZnNldCAweCV4ICAgICAiLCAoaW50KW1fY29tcGlsZUlu
ZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKG5vZGUu
b3AgPT0gU2V0TG9jYWwpCisgICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAKICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcgTm9kZSBAJWQg
YXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbV9qaXQuZGVidWdP
ZmZzZXQoKSk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIGdl
bmVyYXRpbmcgTm9kZSBAJWQgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJ
bmRleCwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKICNpZiBERkdfSklUX0JSRUFLX09O
X0VWRVJZX05PREUKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOworICAgICAgICAgICAgbV9q
aXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCi0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAg
ICAgICAgY29tcGlsZShub2RlKTsKLSAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAg
ICAgY29tcGlsZShub2RlKTsKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisKICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgICAgICBpZiAo
bm9kZS5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXNcbiIs
IGRhdGFGb3JtYXRUb1N0cmluZyhtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVy
KCldLnJlZ2lzdGVyRm9ybWF0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCisgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiAlcyAgICAiLCBkYXRhRm9ybWF0VG9TdHJp
bmcobV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXS5yZWdpc3RlckZvcm1h
dCgpKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICAgIik7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB9
CisgICAgICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFID49IDIgICAgICAgIAorICAgICAgICBm
b3IgKGludCBvcGVyYW5kID0gLW1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsgb3BlcmFuZCA8IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRl
clNpemU7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9w
ZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyAgICAgICAgCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
IDogIik7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8
IChpbnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29wZXJhbmQpCisgICAgICAgICAgICBjb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyAgICAgIAor
I2lmIERGR19ERUJVR19WRVJCT1NFICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwor
I2VuZGlmCisgICAgICAgIAorICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAg
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIH0KIApAQCAtMTQ1Miw2ICsxNTM5
LDExMiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3IoY29uc3QgVmFsdWVTb3VyY2UmIHZhbHVlU291cmNlKQoreworICAgIGlmICghdmFsdWVTb3Vy
Y2UuaXNTZXQoKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lz
dGVyRmlsZSgpOworCisgICAgaWYgKG1faml0LmlzQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUlu
ZGV4KCkpKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobV9qaXQudmFs
dWVPZkpTQ29uc3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKKyAgICAKKyAgICBOb2Rl
KiBub2RlUHRyID0gJm1faml0LmdyYXBoKClbdmFsdWVTb3VyY2Uubm9kZUluZGV4KCldOworICAg
IEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmly
dHVhbFJlZ2lzdGVyKCldOworICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5u
b2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgeworICAgICAgICAvLyBUcnkg
dG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0
aGUgdmFsdWUgd2Ugd2FudC4KKyAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGll
czoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFsdWVUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2
ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIgbm9kZQorICAgICAgICAv
LyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3
b3VsZCBoYXZlIHBlcmZvcm1lZCBhCisgICAgICAgIC8vICAgIFZhbHVlVG9OdW1iZXIgY29udmVy
c2lvbiBhbnl3YXkuICBUaHVzLCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAg
ICAgICAvLworICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSBy
ZW1haW5pbmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAvLyAgICBWYWx1
ZVRvSW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gIEJ1dCBpZiB0aGVyZSBpcyBib3RoIGEgVmFs
dWVUb0ludDMyCisgICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9OdW1iZXIsIHRoZW4gd2UgYmV0
dGVyIGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNlIGl0CisgICAgICAgIC8vICAgIG1lYW5z
IHRoYXQgc29tZSByZW1haW5pbmcgdXNlcyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBudW1iZXIg
d2hpbGUKKyAgICAgICAgLy8gICAgb3RoZXJzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIEludDMy
LgorICAgICAgICAvLworICAgICAgICAvLyBVSW50MzJUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2
ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVyCisgICAgICAgIC8vICAg
IHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhhdCB3YW50IGEgcHJvcGVy
bHkgZm9ybWVkIG51bWJlcgorICAgICAgICAvLyAgICByYXRoZXIgdGhhbiBhIFVJbnQzMiBpbnRl
cm1lZGlhdGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZXZlcnNlIG9mIHRoZSBhYm92
ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1dCBpdHMKKyAgICAgICAg
Ly8gICAgYWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuICBUaGlzIG1lYW5zIHRoYXQgdGhlIG9u
bHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBm
aW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAKKyAgICAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQz
MlRvTnVtYmVyKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+
Y2hpbGQxKCk7CisgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4
XTsKKyAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0
dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZv
UHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAg
ICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAg
Tm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgTm9kZUlu
ZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwg
bV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAg
ICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdp
c3Rlcl07CisgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09
IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV07CisgICAgICAgICAg
ICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4
KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRj
aCAobm9kZS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb051bWJlcjoKKyAgICAg
ICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50
MzI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2RlSW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBV
SW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9
IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJbmRleCAhPSBO
b05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvTnVtYmVySW5k
ZXg7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCisg
ICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRleDsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAg
ICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgeworICAgICAg
ICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhUb1VzZV07CisgICAg
ICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxS
ZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSAmJiBp
bmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7CisgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUo
KSk7CisKKyAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9u
ZSkgeworICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
RG91YmxlKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHIt
PmZwcigpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGluZm9QdHItPmdw
cigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKKyAgICB9CisgICAgaWYgKGluZm9QdHIt
PnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgIHJldHVybiBWYWx1ZVJl
Y292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0
ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwcml2YXRlOgogICAgIEdQUlJl
ZyBtX3NyYzsKIH07CiAKKyNpZiAhREZHX09TUgogLy8gPT09IFNwZWN1bGF0aW9uQ2hlY2sgPT09
CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0IGZyb20gdGhlIHNwZWN1
bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxODkgQEAgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2sg
ewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNd
OwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVj
dWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFERkdfT1NSCiAKK2NsYXNzIFZhbHVlU291
cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAgIDogbV9ub2RlSW5kZXgo
Tm9Ob2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9k
ZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBu
b2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAg
ICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2
b2lkIGR1bXAoRklMRSogb3V0KTsKKyNlbmRpZgorICAgIAorcHJpdmF0ZToKKyAgICBOb2RlSW5k
ZXggbV9ub2RlSW5kZXg7Cit9OworICAgIAorLy8gRGVzY3JpYmVzIGhvdyB0byByZWNvdmVyIGEg
Z2l2ZW4gYnl0ZWNvZGUgdmlydHVhbCByZWdpc3RlciBhdCBhIGdpdmVuCisvLyBjb2RlIHBvaW50
LgorZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHsKKyAgICAvLyBJdCdzIGFscmVhZHkgaW4g
dGhlIHJlZ2lzdGVyIGZpbGUgYXQgdGhlIHJpZ2h0IGxvY2F0aW9uLgorICAgIEFscmVhZHlJblJl
Z2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIGEgcmVnaXN0ZXIuCisgICAgSW5HUFIsCisgICAg
VW5ib3hlZEludDMySW5HUFIsCisgICAgSW5GUFIsCisgICAgLy8gSXQncyBpbiB0aGUgcmVnaXN0
ZXIgZmlsZSwgYnV0IGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLgorICAgIERpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBjb25zdGFudC4KKyAgICBDb25zdGFudCwKKyAgICAv
LyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVyIGl0LgorICAgIERvbnRLbm93Cit9OworCitjbGFz
cyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoKKyAgICBWYWx1ZVJlY292ZXJ5KCkKKyAgICAgICAg
OiBtX3RlY2huaXF1ZShEb250S25vdykKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBW
YWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZSgpCisgICAgeworICAgICAgICBWYWx1
ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFkeUlu
UmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3ByLCBEYXRhRm9ybWF0IGRhdGFGb3Jt
YXQpCisgICAgeworICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7
CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICBpZiAoZGF0YUZvcm1hdCA9
PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IFVu
Ym94ZWRJbnQzMkluR1BSOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQubV90ZWNo
bmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmdwciA9IGdwcjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3Zlcnkg
aW5GUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkZQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291
cmNlLmZwciA9IGZwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFZhbHVlUmVjb3ZlcnkgZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWcpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7CisgICAg
ICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmlydHVhbFJlZzsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgY29uc3Rh
bnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1f
c291cmNlLmNvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB0ZWNobmlx
dWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZTsgfQorICAgIAorICAgIEdQUlJlZyBncHIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluR1BSIHx8IG1f
dGVjaG5pcXVlID09IFVuYm94ZWRJbnQzMkluR1BSKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNl
LmdwcjsKKyAgICB9CisgICAgCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5GUFIpOworICAgICAgICByZXR1cm4gbV9zb3VyY2Uu
ZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOworICAgIH0K
KyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNv
ZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAg
dm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgVmFsdWVS
ZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsKKyAgICB1bmlvbiB7CisgICAgICAgIEdQUlJl
ZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0
dWFsUmVnOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25zdGFudDsKKyAgICB9IG1fc291cmNl
OworfTsKKworI2lmIERGR19PU1IKKy8vID09PSBPU1JFeGl0ID09PQorLy8KKy8vIFRoaXMgc3Ry
dWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQorLy8g
Z29pbmcgaW50byBiYXNlbGluZSBjb2RlLgorc3RydWN0IE9TUkV4aXQgeworICAgIE9TUkV4aXQo
TWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJ
bmRleCA9IDApOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fY2hlY2s7CisgICAg
dW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIAorICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJ
bmRleDsKKyAgICAKKyAgICAvLyBDb252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1
ZVJlY292ZXJpZXMgd2hpbGUgYmVpbmcKKyAgICAvLyBnZW5lcmljIG92ZXIgYXJndW1lbnQgdmVy
c3VzIHZhcmlhYmxlLgorICAgIGludCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25zdCB7IHJldHVy
biBtX2FyZ3VtZW50cy5zaXplKCkgKyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4
XTsKKyAgICB9CisgICAgYm9vbCBpc0FyZ3VtZW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4g
aW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIGludCBhcmd1bWVudEZvcklu
ZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9
CisgICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBpbnQgb3Bl
cmFuZEZvckluZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8
IChpbnQpbV9hcmd1bWVudHNfc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9h
cmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAg
ICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7CisgICAgfQorICAgIAorICAg
IFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8VmFsdWVS
ZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7Cit9OwordHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8T1NS
RXhpdCwgMTY+IE9TUkV4aXRWZWN0b3I7CisjZW5kaWYgLy8gREZHX09TUgogCiAvLyA9PT0gU3Bl
Y3VsYXRpdmVKSVQgPT09CiAvLwpAQCAtMTA1LDIxICsyODgsMjUgQEAgdHlwZWRlZiBTZWdtZW50
ZWRWZWN0b3I8U3BlY3VsYXRpb25DaGVjawogLy8gb25seSBzcGVjdWxhdGl2ZWx5IGJlZW4gYXNz
ZXJ0ZWQpIHRocm91Z2ggdGhlIGRhdGFmbG93LgogY2xhc3MgU3BlY3VsYXRpdmVKSVQgOiBwdWJs
aWMgSklUQ29kZUdlbmVyYXRvciB7CiAgICAgZnJpZW5kIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNr
OworICAgIGZyaWVuZCBzdHJ1Y3QgT1NSRW50cnk7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1
ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVj
dWxhdGl2ZUpJVChKSVRDb21waWxlciYgaml0KTsKIAogICAgIGJvb2wgY29tcGlsZSgpOwogCiAg
ICAgLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZl
IHBhdGgsCiAgICAgLy8gYW5kIGFkZGl0aW9uYWwgcmVjb3ZlcnkgaW5mb3JtYXRpb24uCisjaWYg
IURGR19PU1IKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlvbkNoZWNrcygp
CiAgICAgewogICAgICAgICByZXR1cm4gbV9zcGVjdWxhdGlvbkNoZWNrczsKICAgICB9CisjZWxz
ZQorICAgIE9TUkV4aXRWZWN0b3ImIG9zckV4aXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X29zckV4aXRzOworICAgIH0KKyNlbmRpZgogICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHNwZWN1
bGF0aW9uUmVjb3Zlcnkoc2l6ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgLy8gU3BlY3VsYXRp
b25DaGVjazo6bV9yZWNvdmVyeUluZGV4IGlzIG9mZnNldCBieSAxLApAQCAtMTM5LDYgKzMyNiw3
IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlKE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsK
ICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwogCiAgICAgdm9pZCBjaGVja0FyZ3VtZW50
VHlwZXMoKTsKQEAgLTIwMyw3ICszOTEsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKKyNpZiAhREZHX09TUgogICAg
ICAgICBtX3NwZWN1bGF0aW9uQ2hlY2tzLmFwcGVuZChTcGVjdWxhdGlvbkNoZWNrKGp1bXBUb0Zh
aWwsIHRoaXMpKTsKKyNlbHNlCisgICAgICAgIG1fb3NyRXhpdHMuYXBwZW5kKE9TUkV4aXQoanVt
cFRvRmFpbCwgdGhpcykpOworI2VuZGlmCiAgICAgfQogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9u
IGNoZWNrIHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hl
Y2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNv
dmVyeSYgcmVjb3ZlcnkpCkBAIC0yMTEsNyArNDAzLDExIEBAIHByaXZhdGU6CiAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9zcGVjdWxh
dGlvblJlY292ZXJ5TGlzdC5hcHBlbmQocmVjb3ZlcnkpOworI2lmICFERkdfT1NSCiAgICAgICAg
IG1fc3BlY3VsYXRpb25DaGVja3MuYXBwZW5kKFNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFpbCwg
dGhpcywgbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdC5zaXplKCkpKTsKKyNlbHNlCisgICAgICAg
IG1fb3NyRXhpdHMuYXBwZW5kKE9TUkV4aXQoanVtcFRvRmFpbCwgdGhpcywgbV9zcGVjdWxhdGlv
blJlY292ZXJ5TGlzdC5zaXplKCkpKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIENhbGxlZCB3
aGVuIHdlIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHRoYXQgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwu
CkBAIC0yMjIsMTggKzQxOCw2MyBAQCBwcml2YXRlOgogCiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJp
Y3Q+CiAgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlSW5kZXgsIERhdGFG
b3JtYXQmIHJldHVybkZvcm1hdCk7Ci0KKyAgICAKICAgICAvLyBJdCBpcyBwb3NzaWJsZSwgZHVy
aW5nIHNwZWN1bGF0aXZlIGdlbmVyYXRpb24sIHRvIHJlYWNoIGEgc2l0dWF0aW9uIGluIHdoaWNo
IHdlCiAgICAgLy8gY2FuIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIGEgc3BlY3VsYXRpb24gd2lsbCBm
YWlsIChmb3IgZXhhbXBsZSwgd2hlbiB0d28gbm9kZXMKICAgICAvLyB3aWxsIG1ha2UgY29uZmxp
Y3Rpbmcgc3BlY3VsYXRpb25zIGFib3V0IHRoZSBzYW1lIG9wZXJhbmQpLiBJbiBzdWNoIGNhc2Vz
IHRoaXMKICAgICAvLyBmbGFnIGlzIGNsZWFyZWQsIGluZGljYXRpbmcgbm8gZnVydGhlciBjb2Rl
IGdlbmVyYXRpb24gc2hvdWxkIHRha2UgcGxhY2UuCiAgICAgYm9vbCBtX2NvbXBpbGVPa2F5Owor
I2lmICFERkdfT1NSCiAgICAgLy8gVGhpcyB2ZWN0b3IgdHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRo
ZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBub24tc3BlY3VsYXRpdmUgb25lLgogICAgIFNwZWN1
bGF0aW9uQ2hlY2tWZWN0b3IgbV9zcGVjdWxhdGlvbkNoZWNrczsKKyNlbHNlCisgICAgLy8gVGhp
cyB2ZWN0b3IgdHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRo
ZSBvbGQgSklULgorICAgIE9TUkV4aXRWZWN0b3IgbV9vc3JFeGl0czsKKyNlbmRpZgogICAgIC8v
IFNvbWUgYmFpbC1vdXRzIG5lZWQgdG8gcmVjb3JkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVj
b3JkaW5nIHNwZWNpZmljIHJlY292ZXJ5CiAgICAgLy8gdG8gYmUgcGVyZm9ybWVkIChmb3IgZXhh
bXBsZSwgb24gZGV0ZWN0ZWQgb3ZlcmZsb3cgZnJvbSBhbiBhZGQsIHdlIG1heSBuZWVkIHRvCiAg
ICAgLy8gcmV2ZXJzZSB0aGUgYWRkaXRpb24gaWYgYW4gb3BlcmFuZCBpcyBiZWluZyBvdmVyd3Jp
dHRlbikuCiAgICAgVmVjdG9yPFNwZWN1bGF0aW9uUmVjb3ZlcnksIDE2PiBtX3NwZWN1bGF0aW9u
UmVjb3ZlcnlMaXN0OworICAgIAorICAgIC8vIFRyYWNraW5nIGZvciB3aGljaCBub2RlcyBhcmUg
Y3VycmVudGx5IGhvbGRpbmcgdGhlIHZhbHVlcyBvZiBhcmd1bWVudHMgYW5kIGJ5dGVjb2RlCisg
ICAgLy8gb3BlcmFuZC1pbmRleGVkIHZhcmlhYmxlcy4KKworICAgIFZhbHVlU291cmNlIHZhbHVl
U291cmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgb3BlcmFu
ZCkKKyAgICB7CisgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5k
KSA9IFZhbHVlU291cmNlKG5vZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIENhbGwgdGhp
cyB3aXRoIGNhcmUsIHNpbmNlIGl0IGJvdGggcmV0dXJucyBhIHJlZmVyZW5jZSBpbnRvIGFuIGFy
cmF5CisgICAgLy8gYW5kIHBvdGVudGlhbGx5IHJlc2l6ZXMgdGhlIGFycmF5LiAgU28gaXQgd291
bGQgbm90IGJlIHJpZ2h0IHRvIGNhbGwgdGhpcworICAgIC8vIHR3aWNlIGFuZCB0aGVuIHBlcmZv
cm0gb3BlcmFuZHMgb24gYm90aCByZWZlcmVuY2VzLCBzaW5jZSB0aGUgb25lIGZyb20KKyAgICAv
LyB0aGUgZmlyc3QgY2FsbCBtYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgorICAgIFZhbHVlU291cmNl
JiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgeworICAg
ICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBh
cmd1bWVudCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1l
bnRdOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQg
Pj0gbV92YXJpYWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgbV92YXJpYWJsZXMucmVzaXplKG9w
ZXJhbmQgKyAxKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5k
XTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX2FyZ3VtZW50czsK
KyAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fdmFyaWFibGVzOworICAgIAorICAgIFZhbHVl
UmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmIHZhbHVl
U291cmNlKTsKKworICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50
IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Io
dmFsdWVTb3VyY2VGb3JPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICB9CiB9OwogCiAKQEAgLTQ4NCw2
ICs3MjUsMTMgQEAgcHJpdmF0ZToKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRv
ciBtX2VuZDsKIH07CiAKK2lubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklU
Q29tcGlsZXImIGppdCkKKyAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCB0cnVlKQorICAgICwg
bV9jb21waWxlT2theSh0cnVlKQorICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5t
X251bVBhcmFtZXRlcnMpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29kZUJsb2NrKCktPm1fbnVt
VmFycykKK3sKK30KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDk0
ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKEdsb2JhbERhdGFUeXAKICAgICAsIHBhcnNlcihuZXcgUGFyc2VyKQogICAgICwgaW50ZXJw
cmV0ZXIoMCkKICAgICAsIGhlYXAodGhpcywgaGVhcFNpemUpCisjaWYgRU5BQkxFKFRJRVJFRF9D
T01QSUxBVElPTikKKyAgICAsIGxhc3RPU1JTY3JhdGNoQnVmZmVyU2l6ZSgwKQorI2VuZGlmCiAg
ICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCiAgICAgLCBjYWNoZWRVVENPZmZzZXQoc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkKICAgICAsIG1heFJlZW50cnlEZXB0
aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBlU21hbGwgPyBNYXhTbWFsbFRocmVh
ZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRyeURlcHRoKQpAQCAtMzU3LDYgKzM2
MCwxMSBAQCBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogI2lmIEVOQUJMRShSRUdFWFBf
VFJBQ0lORykKICAgICBkZWxldGUgbV9ydFRyYWNlTGlzdDsKICNlbmRpZgorCisjaWYgRU5BQkxF
KFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3NyU2Ny
YXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZhc3RGcmVlKG9zclNjcmF0Y2hCdWZm
ZXJzW2ldKTsKKyNlbmRpZgogfQogCiBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxE
YXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlIHR5cGUsIEhlYXBTaXplIGhl
YXBTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmgJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUsMjggQEAgbmFtZXNw
YWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBpbnQ2NF90IGRlYnVnRGF0YUJ1ZmZl
cls2NF07CiAjZW5kaWYKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICBW
ZWN0b3I8aW50NjRfdCo+IG9zclNjcmF0Y2hCdWZmZXJzOworICAgICAgICBzaXplX3QgbnVtYmVy
T2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXI7CisgICAgICAgIAorICAgICAgICBpbnQ2NF90
KiBvc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZSh1bnNpZ25lZCBudW1iZXJPZlNsb3RzKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mU2xvdHMpCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChudW1iZXJPZlNsb3RzID4gbnVt
YmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBQ
cm90ZWN0IGFnYWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhvbG9neSBieSBlbnN1cmluZwor
ICAgICAgICAgICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdlIGdldCBhIGdlb21ldHJpYyBzZXJp
ZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAvLyB0b3RhbCBtZW1vcnkgdXNh
Z2UgaXMgc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgICAgIC8vIG1heChzY3JhdGNoIGJ1
ZmZlciBzaXplKSAqIDQuCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNj
cmF0Y2hCdWZmZXIgPSBudW1iZXJPZlNsb3RzICogMjsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBvc3JTY3JhdGNoQnVmZmVycy5hcHBlbmQoZmFzdE1hbGxvYyhzaXplb2YoaW50
NjRfdCkgKiBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcikpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3NyU2NyYXRjaEJ1ZmZlcnMu
bGFzdCgpOworICAgICAgICB9CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hNYXA8T3Bh
cXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NEYXRh
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlz
aW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBKU09iamVjdCogSlNWYWx1ZTo6c3lu
dGhlc2l6ZVByb3RvdHlwZShFCiAjaWZuZGVmIE5ERUJVRwogY2hhciogSlNWYWx1ZTo6ZGVzY3Jp
cHRpb24oKQogewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDMyOworICAgIHN0YXRp
YyBjb25zdCBzaXplX3Qgc2l6ZSA9IDY0OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3Np
emVdOwogCiAgICAgaWYgKCEqdGhpcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106925</attachid>
            <date>2011-09-09 14:45:47 -0700</date>
            <delta_ts>2011-09-09 15:48:03 -0700</delta_ts>
            <desc>work in progress - so far it appears to work, sort of</desc>
            <filename>osrwip_patch_2.diff</filename>
            <type>text/plain</type>
            <size>78978</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4NzMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTExIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV09S
SyBJTiBQUk9HUkVTUworCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAqIGRmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmN1cnJl
bnRDb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6YWRkVG9H
cmFwaCk6CisgICAgICAgICogZGZnL0RGR0dQUkluZm8uaDoKKyAgICAgICAgKiBkZmcvREZHR2Vu
ZXJhdGlvbkluZm8uaDoKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6YWxpdmUp
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9y
OjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRp
dmVXaXRoT1NSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGlua09TUkV4aXRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUJvZHkpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVjb3JkOjpDYWxsUmVjb3JkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWZ5Q2FsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29tcGlsZXI6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVj
ayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEpTQ2FsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OkpTQ2FsbFJlY29yZDo6SlNDYWxsUmVjb3JkKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OkNv
ZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmlzU2V0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpDb2RlT3JpZ2luOjpieXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjaGlsZDFVbmNoZWNr
ZWQpOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmR1bXAp
OgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmR1bXApOgorICAgICAgICAoSlND
OjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU1vdkhpbnQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFs
dWVSZWNvdmVyeUZvcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OlZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVNvdXJjZTo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNl
Ojpub2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OlZhbHVlUmVj
b3ZlcnkpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmFscmVhZHlJblJlZ2lz
dGVyRmlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6aW5HUFIpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmluRlBSKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVl
UmVjb3Zlcnk6OnRlY2huaXF1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6
Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpmcHIpOgorICAgICAgICAo
SlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OnZpcnR1YWxSZWdpc3Rlcik6CisgICAgICAgIChKU0M6
OkRGRzo6T1NSRXhpdDo6bnVtYmVyT2ZSZWNvdmVyaWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpP
U1JFeGl0Ojp2YWx1ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojppc0Fy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojphcmd1bWVudEZvckluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojp2YXJpYWJsZUZvckluZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0OjpvcGVyYW5kRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpvc3JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjp2YWx1ZVNvdXJjZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpzZXROb2RlSW5kZXhGb3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6dmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yOjpTcGVjdWxhdGlvbkNo
ZWNrSW5kZXhJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNw
ZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBqaXQvQ29tcGFjdEpJVENvZGVNYXAuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRC
eXRlY29kZUluZGV4KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0Ojpn
ZXRNYWNoaW5lQ29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjp+
Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkNvbXBhY3RKSVRDb2RlTWFw
KToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OmF0KToKKyAgICAgICAgKEpTQzo6
Q29tcGFjdEpJVENvZGVNYXA6OmRlY29kZU51bWJlcik6CisgICAgICAgIChKU0M6OkNvbXBhY3RK
SVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNvZGVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENv
ZGVNYXA6OkVuY29kZXI6On5FbmNvZGVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVN
YXA6OkVuY29kZXI6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpF
bmNvZGVyOjpmaW5pc2gpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rl
cjo6YXBwZW5kQnl0ZSk6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVy
OjplbmNvZGVOdW1iZXIpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rl
cjo6ZW5zdXJlQ2FwYWNpdHlGb3IpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0
YSk6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6CisgICAgICAg
ICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpv
c3JTY3JhdGNoQnVmZmVyRm9yU2l6ZSk6CisgICAgICAgICogcnVudGltZS9KU1ZhbHVlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZGVzY3JpcHRpb24pOgorICAgICAgICAqIHd0Zi9QbGF0
Zm9ybS5oOgorCiAyMDExLTA5LTA5ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+
CiAKICAgICAgICAgQnVpbGQgZml4OiBHdWFyZCBhZ2FpbnN0IGRvdWJsZS0jZGVmaW5lIGZvciBz
b21ldGhpbmcgYWxyZWFkeSAjZGVmaW5lZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYx
LDcgQEAKIAkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQxMTVE
MjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYw
MEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsg
fTsKIAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcy
QzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsKKwkJMEZEODJFMzkxNDFB
QjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29t
cGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjc2MTJBNkY3
ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjkzMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9j
YXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLzsg
fTsKIAkJMTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ1MEZB
RkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi87IH07CkBAIC03ODgsNiAr
Nzg5LDcgQEAKIAkJMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvcGFnYXRvci5oOyBwYXRoID0g
ZGZnL0RGR1Byb3BhZ2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJF
MUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFG
MTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0
aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgyRTM3MTQxQUIxNDIwMDE3
OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wYWN0SklUQ29kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
NDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAv
KiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFz
ZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjYsNiArMTU2OCw3
IEBACiAJCTE0MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAv
KiBDb21wYWN0SklUQ29kZU1hcC5oICovLAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAv
KiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JE
QjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3
RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwICovLApAQCAtMjM3OSw2
ICsyMzgyLDcgQEAKIAkJCQlCQzI1N0RFODBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJN
djdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5
NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2
RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBDb2Rl
QmxvY2tfaAogI2RlZmluZSBDb2RlQmxvY2tfaAogCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVN
YXAuaCIKICNpbmNsdWRlICJFdmFsQ29kZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24u
aCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCkBAIC0yOTgsNiArMjk5LDE3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMoKTsKICNlbmRpZgogCisjaWYg
RU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgdm9pZCBzZXRKSVRDb2RlTWFwKFBh
c3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IGppdENvZGVNYXApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1faml0Q29kZU1hcCA9IGppdENvZGVNYXA7CisgICAgICAgIH0KKyAgICAgICAgQ29t
cGFjdEpJVENvZGVNYXAqIGppdENvZGVNYXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9qaXRDb2RlTWFwLmdldCgpOworICAgICAgICB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShJ
TlRFUlBSRVRFUikKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24q
IHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKQEAgLTY1MSw2ICs2NjMsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0Q29kZVdpdGhBcml0eUNo
ZWNrOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1Nl
bnRpbmVsTm9kZTxDYWxsTGlua0luZm8+ID4gbV9pbmNvbWluZ0NhbGxzOwogI2VuZGlmCisjaWYg
RU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2Rl
TWFwPiBtX2ppdENvZGVNYXA7CisjZW5kaWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAg
ICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsK
ICNlbmRpZgpAQCAtNjY2LDcgKzY4MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFN5
bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCi0gICAgICAgIE93blB0cjxDb2RlQmxvY2s+IG1f
YWx0ZXJuYXRpdmU7IC8vIEZJWE1FIG1ha2UgdGhpcyBkbyBzb21ldGhpbmcKKyAgICAgICAgT3du
UHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKIAogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEg
ewogICAgICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAqLwogCiAjaWZuZGVmIE5ERUJVRwotc3RhdGljIGJvb2wgc19k
dW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK3N0YXRpYyBib29sIHNfZHVtcHNHZW5lcmF0ZWRD
b2RlID0gdHJ1ZTsKICNlbmRpZgogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpzZXREdW1wc0dl
bmVyYXRlZENvZGUoYm9vbCBkdW1wc0dlbmVyYXRlZENvZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ4MDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1f
Y29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50
KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2Rl
T3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4
KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBp
dCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdl
bmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3Vy
ZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2Rl
SW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4
ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAg
bV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3LDcgQEAgcHJp
dmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0
SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVu
ZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM5
Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkK
ICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFw
aC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4
LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0
ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQwMiw3ICs0MDYs
NyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywg
Tm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAg
Tm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwg
aW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNz
ZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Tm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIs
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1f
bnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
ID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUklu
Zm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8u
aAkocmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUklu
Zm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gOTsKIAogICAgIC8vIFRoZXNlIHJl
Z2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4KKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGNhY2hl
ZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IEdQ
UlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjEyOwogICAgIHN0YXRp
YyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMzsKICAg
ICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVy
czo6cjE0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5m
by5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlv
bkluZm8uaAkocmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxMiArMjc0LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7CiAgICAgfQogCi0jaWZuZGVmIE5ERUJVRwogICAg
IGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQot
I2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJl
c3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1
MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgTm9k
ZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNv
dW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkgewotICAgICAgICBwcmludGYoIiUgNGQ6XHRza2lw
cGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgYm9vbCBza2lwcGVkID0gIXJlZkNvdW50OwogICAgIGJvb2wgbXVzdEdlbmVy
YXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKLSAgICBpZiAobXVzdEdlbmVyYXRlKQorICAgIGlm
IChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAgQVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1y
ZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93
IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3LDggKzc2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChO
b2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBp
biB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhl
IHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBo
ZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBv
ZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBz
dHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIj
IC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEds
b2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBwcmludGYoIiUgNGQ6XHQ8JWMl
dToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7
Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCisgICAgcHJpbnRmKCIlIDRkOiVzPCVjJXU6Iiwg
KGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwg
bXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5vZGUuaGFzUmVz
dWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdp
c3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTgsMTcgKzExMTgsMTcgQEAgdm9pZCBKSVRDb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2pp
dC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwg
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RD
YWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBt
X2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5j
b2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5h
ZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6
ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5k
Q2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgo
KVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwg
c2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2Fs
bEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAg
ICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3MpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQu
YWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgbV9qaXQu
bm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3Jh
cGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubm90aWZ5Q2Fs
bChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2Nv
bXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAg
ICAgCkBAIC0xMTM2LDcgKzExMzYsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxs
KE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUlu
ZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgCi0g
ICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXND
YWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBt
X2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGws
IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogfQogCiB2b2lkIEpJ
VENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcg
QEAgcHJvdGVjdGVkOgogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9qaXQu
Z3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgICAgIHJldHVybiBt
X2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgp
W21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEJyYW5j
aChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlv
bikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDIxNCBAQCB2b2lkIEpJVENv
bXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXggbm9kCiAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5v
ZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwogfQogCisjaWYgREZHX09TUgordm9pZCBKSVRD
b21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVj
dWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dD4mIGRlY29kZWRDb2RlTWFwKQoreworICAgIC8vIDApIFByby1mb3JtYSBzdHVmZi4KKyAgICBl
eGl0Lm1fY2hlY2subGluayh0aGlzKTsKKworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnBy
aW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0
IDB4JXggICAiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBk
ZWJ1Z09mZnNldCgpKTsKKyNlbmRpZgorI2lmIERGR19KSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05f
RkFJTFVSRQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19WRVJCT1NF
X1NQRUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRl
YnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgZGVidWdJbmZv
LT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1Z0luZm8tPmRlYnVnT2Zmc2V0ID0g
ZGVidWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNw
ZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRpZgorCisgICAgLy8gMSkgUGVyZm9y
bSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFu
IG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5
aW5nIHRoZSB2ZXJhY2l0eSBvZiB0aGUgc3BlY3VsYXRpb24gaXQgaGFzCisgICAgLy8gICAgYWxy
ZWFkeSBtYWRlLgorICAgIAorICAgIEdQUlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZhbGlkR1BSUmVn
OworICAgIAorICAgIGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIHN1YjMy
KHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBvclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAg
ICAgICAgYWxyZWFkeUJveGVkID0gcmVjb3ZlcnktPmRlc3QoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6Cisg
ICAgICAgICAgICB4b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVl
RmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBGcm9t
IGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1heGlt
aXplIHRoZSBkaXN0YW5jZQorICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcgaXMgY29tcHV0
ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgorICAgIAorICAgIC8vIDIpIFBlcmZvcm0gYWxsIHJl
Ym94aW5nIG9mIGludGVnZXJzLgorICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSICYmIHJlY292
ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKKyAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3ByKCkpOworICAgIH0KKyAgICAKKyAgICAv
LyAzKSBEdW1wIGFsbCBHUFJTIGFuZCBjb25zdGFudHMgaW50byB0aGUgcmVnaXN0ZXIgZmlsZS4K
KyAgICAKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMy
SW5HUFI6CisgICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgYWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENvbnN0YW50OgorICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpb3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyA0KSBCb3ggYWxs
IGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBGUFJzKQorICAg
IAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
ZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1
ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEZQUlJlZyBmcHIg
PSByZWNvdmVyeS5mcHIoKTsKKyAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0
ZXIoRlBSSW5mbzo6dG9JbmRleChmcHIpKTsKKyAgICAgICAgYm94RG91YmxlKGZwciwgZ3ByKTsK
KyAgICB9CisgICAgCisgICAgLy8gNSkgRHVtcCBhbGwgZG91YmxlcyBpbnRvIHRoZSByZWdpc3Rl
ciBmaWxlLiAgQWxzbyBjb3VudCB0aGUgbnVtYmVyIG9mCisgICAgLy8gICAgZGlzcGxhY2VkIHZp
cnR1YWwgcmVnaXN0ZXJzLCB3aGljaCBpcyB1c2VkIGFzIGFuIG9wdGltaXphdGlvbiBpbgorICAg
IC8vICAgIHRoZSBuZXh0IHN0YWdlLgorICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mRGlzcGxh
Y2VkVmlydHVhbFJlZ2lzdGVycyA9IDA7CisgICAgCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBp
bmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5G
UFI6CisgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRv
SW5kZXgocmVjb3ZlcnkuZnByKCkpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICBudW1iZXJPZkRpc3BsYWNl
ZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gNikg
UmVzaHVmZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4gIE9wdGltaXplIGZvciB0aGUg
Y2FzZSB0aGF0CisgICAgLy8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdp
c3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxl
IHBoeXNpY2FsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0
dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7CisgICAgICAgIC8v
IFNvIGZhciB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhl
IHRpbWUsIGJ1dAorICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1YXJhbnRlZWQuCisgICAg
ICAgIAorICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVy
KCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAwOworICAgICAgICBmb3Ig
KGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgp
ICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRl
eCsrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGlu
ZGV4KSkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29yaXRobSB0aGF0IHdlIHVzZQorICAgICAgICAv
LyBmb3Igc3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNj
b3ZlciB0aGF0CisgICAgICAgIC8vIHNvbWUgaG90IGNvZGUgd2l0aCBsb3RzIG9mIGxpdmUgdmFs
dWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBhbmQKKyAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5q
b3lzIGZyZXF1ZW50bHkgZmFpbGluZyBzcGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgIC8v
IEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBidXQgcHJvYmFi
bHkgbm90CisgICAgICAgIC8vIHN1cGVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFu
ZGxlcyBjYXNlcyB3aGVyZSBmb3IgZXhhbXBsZQorICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50
cyBhcmUgYSBwZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCisgICAg
ICAgIC8vCisgICAgICAgIC8vIDEgLT4gMgorICAgICAgICAvLyAyIC0+IDEKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxpZnRpbmcgYWxsIG9m
IHRoZSB2aXJ0dWFsIHJlZ2lzdGVycworICAgICAgICAvLyBmcm9tIHRoZWlyIG9sZCAoREZHIEpJ
VCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2NyYXRjaAorICAgICAgICAvLyBs
b2NhdGlvbiBpbiBtZW1vcnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRj
aCBsb2NhdGlvbgorICAgICAgICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4K
KyAgICAgICAgCisgICAgICAgIGludDY0X3QqIHNjcmF0Y2hCdWZmZXIgPSBnbG9iYWxEYXRhKCkt
Pm9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVy
cyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7Cisg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBzdG9yZVB0cihHUFJJ
bmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIGRpc3BsYWNlbWVudEluZGV4KyspOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBkaXNwbGFjZW1lbnRJbmRleCsr
LCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwg
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDcpIExvYWQgdGhlIHJlc3VsdCBvZiB0
aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KKyAgICAKKyAgICBpZiAoZXhp
dC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0
T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyA4
KSBGaXggY2FsbCBmcmFtZS4KKyAgICAKKyAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgc3RvcmVQ
dHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIGFkZHJlc3NGb3Io
KFZpcnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpOworICAgIAorICAgIC8v
IDkpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KKyAgICAK
KyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1h
cC5zaXplKCksIGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVC
bG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRDb2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5t
X21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5m
bzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihqdW1wVGFy
Z2V0KSwgR1BSSW5mbzo6cmVnVDEpOworICAgIGp1bXAoR1BSSW5mbzo6cmVnVDEpOworCisjaWYg
REZHX0RFQlVHX1ZFUkJPU0UKKyAgICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVwXG4iLCBqdW1wVGFy
Z2V0KTsKKyNlbmRpZgorfQorCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3Vs
YXRpdmVKSVQmIHNwZWN1bGF0aXZlKQoreworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+IGRlY29kZWRDb2RlTWFwOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRp
dmUoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0
ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgpKTsKKyAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KS0+aml0Q29kZU1hcCgpLT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIAorICAgIE9TUkV4
aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVn
aW4oKTsKKyAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZl
Lm9zckV4aXRzKCkuZW5kKCk7CisgICAgCisgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0Vu
ZCkgeworICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKKyAgICAgICAg
ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292
ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICArK2V4
aXRzSXRlcjsKKyAgICB9Cit9CisjZWxzZSAvLyBERkdfT1NSCiBjbGFzcyBHZW5lcmFsaXplZFJl
Z2lzdGVyIHsKIHB1YmxpYzoKICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyKCkgeyB9CkBAIC04MDMs
NiArMTAxMSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlvbkNoZWNrcygKICAg
ICBBU1NFUlQoIShjaGVja3NJdGVyICE9IGNoZWNrc0VuZCkpOwogICAgIEFTU0VSVCghKGVudHJp
ZXNJdGVyICE9IGVudHJpZXNFbmQpKTsKIH0KKyNlbmRpZiAvLyBERkdfT1NSCiAKIHZvaWQgSklU
Q29tcGlsZXI6OmNvbXBpbGVFbnRyeSgpCiB7CkBAIC04NDQsMTIgKzEwNTMsMTYgQEAgdm9pZCBK
SVRDb21waWxlcjo6Y29tcGlsZUJvZHkoKQogICAgIC8vIHRvIGFsbG93IGl0IHRvIGNoZWNrIHdo
aWNoIG5vZGVzIGluIHRoZSBncmFwaCBtYXkgYmFpbCBvdXQsIGFuZCBtYXkgbmVlZCB0byByZWVu
dGVyIHRoZQogICAgIC8vIG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGlmIChjb21waWxlZFNw
ZWN1bGF0aXZlKSB7CisjaWYgREZHX09TUgorICAgICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRp
dmUpOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJ
dGVyYXRvcihzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvbkNoZWNrcygpKTsKICAgICAgICAgTm9uU3Bl
Y3VsYXRpdmVKSVQgbm9uU3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2
ZS5jb21waWxlKGNoZWNrSXRlcmF0b3IpOwogCiAgICAgICAgIC8vIExpbmsgdGhlIGJhaWwtb3V0
cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHBv
aW50cyBpbnRvIHRoZSBub24tc3BlY3VsYXRpdmUgb25lLgogICAgICAgICBsaW5rU3BlY3VsYXRp
b25DaGVja3Moc3BlY3VsYXRpdmUsIG5vblNwZWN1bGF0aXZlKTsKKyNlbmRpZgogICAgIH0gZWxz
ZSB7CiAjaWYgREZHX0RFQlVHX1ZFUkJPU0UKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVj
dWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwpAQCAtODYyLDggKzEwNzUsMTIgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUJvZHkoKQogICAgICAgICBtX21ldGhvZEdldHMuY2xlYXIo
KTsKICAgICAgICAgcmV3aW5kVG9MYWJlbChzcGVjdWxhdGl2ZVBhdGhCZWdpbik7CiAKKyNpZiBE
RkdfT1NSCisgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIGNoZWNrSXRlcmF0
b3I7CisjZWxzZQogICAgICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yIG5vQ2hlY2tzOwogICAg
ICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9yKG5vQ2hlY2tz
KTsKKyNlbmRpZgogICAgICAgICBOb25TcGVjdWxhdGl2ZUpJVCBub25TcGVjdWxhdGl2ZSgqdGhp
cyk7CiAgICAgICAgIG5vblNwZWN1bGF0aXZlLmNvbXBpbGUoY2hlY2tJdGVyYXRvcik7CiAgICAg
fQpAQCAtOTExLDcgKzExMjgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBpZiAobV9jYWxsc1tpXS5tX2hhbmRsZXNFeGNlcHRpb25zKSB7
CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgcmV0dXJuQWRkcmVzc09mZnNldCA9IGxpbmtCdWZm
ZXIucmV0dXJuQWRkcmVzc09mZnNldChtX2NhbGxzW2ldLm1fY2FsbCk7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgZXhjZXB0aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9leGNlcHRpb25JbmZvOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8gPSBtX2NhbGxzW2ldLm1fY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CiAgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmNh
bGxSZXR1cm5JbmRleFZlY3RvcigpLmFwcGVuZChDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9m
ZnNldChyZXR1cm5BZGRyZXNzT2Zmc2V0LCBleGNlcHRpb25JbmZvKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIGNsYXNzIFNwZWN1
bGF0aW9uUmVjb3Zlcnk7CiAKIHN0cnVjdCBFbnRyeUxvY2F0aW9uOwogc3RydWN0IFNwZWN1bGF0
aW9uQ2hlY2s7CitzdHJ1Y3QgT1NSRXhpdDsKIAogI2lmbmRlZiBOREVCVUcKIHR5cGVkZWYgdm9p
ZCAoKlZfREZHRGVidWdPcGVyYXRpb25fRVApKEV4ZWNTdGF0ZSosIHZvaWQqKTsKQEAgLTgyLDIx
ICs4MywyMSBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0
b3IgZm9yIGEgY2FsbCB3aXRoIGFuIGV4Y2VwdGlvbiBoYW5kbGVyLgotICAgIENhbGxSZWNvcmQo
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNoZWNrLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8p
CisgICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBm
dW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBtX2Z1bmN0aW9u
KGZ1bmN0aW9uKQogICAgICAgICAsIG1fZXhjZXB0aW9uQ2hlY2soZXhjZXB0aW9uQ2hlY2spCi0g
ICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgbV9jb2Rl
T3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9ucyh0cnVlKQog
ICAgIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHRoYXQgbWF5IGNh
dXNlIGV4Y2VwdGlvbnMsIGJ1dCB3aGljaCBhcmUgaGFuZGxlZAogICAgIC8vIHRocm91Z2ggc29t
ZSBtZWNoYW5pc20gb3RoZXIgdGhhbiB0aGUgaW4tbGluZSBleGNlcHRpb24gaGFuZGxlci4KLSAg
ICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0
aW9uLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbFJlY29yZChNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAsIG1fZnVuY3Rpb24oZnVu
Y3Rpb24pCi0gICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAg
ICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV9oYW5kbGVzRXhjZXB0aW9u
cyh0cnVlKQogICAgIHsKICAgICB9CkBAIC0xMDQsNyArMTA1LDcgQEAgc3RydWN0IENhbGxSZWNv
cmQgewogICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1fY2FsbDsKICAgICBGdW5jdGlvblB0ciBt
X2Z1bmN0aW9uOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fZXhjZXB0aW9uQ2hlY2s7Ci0g
ICAgRXhjZXB0aW9uSW5mbyBtX2V4Y2VwdGlvbkluZm87CisgICAgQ29kZU9yaWdpbiBtX2NvZGVP
cmlnaW47CiAgICAgYm9vbCBtX2hhbmRsZXNFeGNlcHRpb25zOwogfTsKIApAQCAtMTkyLDkgKzE5
Myw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBOb3RpZnkgdGhlIEpJVCBvZiBhIGNhbGwg
dGhhdCBkb2VzIG5vdCByZXF1aXJlIGxpbmtpbmcuCi0gICAgdm9pZCBub3RpZnlDYWxsKENhbGwg
Y2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBj
YWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBtX2NhbGxzLmFwcGVu
ZChDYWxsUmVjb3JkKGNhbGwsIEZ1bmN0aW9uUHRyKCksIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0cigpLCBjb2RlT3Jp
Z2luKSk7CiAgICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0
aG91dCBhbiBleGNlcHRpb24gY2hlY2suCkBAIC0yMDUsMjAgKzIwNiwyMCBAQCBwdWJsaWM6CiAg
ICAgfQogCiAgICAgLy8gQWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhbiBleGNl
cHRpb24gY2hlY2suCi0gICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0
IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICBDYWxs
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9u
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewogICAgICAgICBDYWxsIGZ1bmN0aW9uQ2Fs
bCA9IGNhbGwoKTsKICAgICAgICAgSnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIo
Tm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKCZnbG9iYWxEYXRhKCktPmV4Y2VwdGlvbikpOwotICAg
ICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4
Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENh
bGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGNvZGVPcmln
aW4pKTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9CiAgICAgCiAgICAgLy8g
QWRkIGEgY2FsbCBvdXQgZnJvbSBKSVQgY29kZSwgd2l0aCBhIGZhc3QgZXhjZXB0aW9uIGNoZWNr
IHRoYXQgdGVzdHMgaWYgdGhlIHJldHVybiB2YWx1ZSBpcyB6ZXJvLgotICAgIENhbGwgYXBwZW5k
Q2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1
bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0
aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCiAgICAgewogICAgICAgICBDYWxsIGZ1bmN0aW9uQ2FsbCA9IGNhbGwoKTsKICAgICAgICAg
SnVtcCBleGNlcHRpb25DaGVjayA9IGJyYW5jaFRlc3RQdHIoWmVybywgR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBleGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1f
Y2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9u
Q2hlY2ssIGNvZGVPcmlnaW4pKTsKICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uQ2FsbDsKICAgICB9
CiAgICAgCkBAIC0zMTEsOSArMzEyLDkgQEAgcHVibGljOgogICAgICAgICBtX21ldGhvZEdldHMu
YXBwZW5kKE1ldGhvZEdldFJlY29yZChzbG93Q2FsbCwgc3RydWN0VG9Db21wYXJlLCBwcm90b09i
aiwgcHJvdG9TdHJ1Y3RUb0NvbXBhcmUsIHB1dEZ1bmN0aW9uKSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAg
ICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICB7Ci0gICAgICAgIG1fanNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93
Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBleGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1f
anNDYWxscy5hcHBlbmQoSlNDYWxsUmVjb3JkKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9D
aGVjaywgaXNDYWxsLCBjb2RlT3JpZ2luKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMzI2LDgg
KzMyNywxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlsbE51bWVyaWNUb0RvdWJsZShOb2RlSW5k
ZXgsIEZQUlJlZywgR1BSUmVnIHRlbXBvcmFyeSk7CiAgICAgdm9pZCBmaWxsSW50MzJUb0ludGVn
ZXIoTm9kZUluZGV4LCBHUFJSZWcpOwogICAgIHZvaWQgZmlsbFRvSlMoTm9kZUluZGV4LCBHUFJS
ZWcpOworICAgIAorI2lmIERGR19PU1IKKyAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1Io
Y29uc3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApOworICAgIHZvaWQgbGlua09TUkV4aXRzKFNw
ZWN1bGF0aXZlSklUJik7CisjZWxzZQogICAgIHZvaWQganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9u
U3BlY3VsYXRpdmUoY29uc3QgU3BlY3VsYXRpb25DaGVjayYsIGNvbnN0IEVudHJ5TG9jYXRpb24m
LCBTcGVjdWxhdGlvblJlY292ZXJ5KiwgTm9kZVRvUmVnaXN0ZXJNYXAmIGNoZWNrTm9kZVRvUmVn
aXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVyTWFwJiBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwKTsKICAg
ICB2b2lkIGxpbmtTcGVjdWxhdGlvbkNoZWNrcyhTcGVjdWxhdGl2ZUpJVCYsIE5vblNwZWN1bGF0
aXZlSklUJik7CisjZW5kaWYKIAogICAgIC8vIFRoZSBnbG9iYWxEYXRhLCB1c2VkIHRvIGFjY2Vz
cyBjb25zdGFudHMgc3VjaCBhcyB0aGUgdlB0cnMuCiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2Jh
bERhdGE7CkBAIC0zODYsMTIgKzM5MywxMiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAg
c3RydWN0IEpTQ2FsbFJlY29yZCB7Ci0gICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxs
LCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGws
IHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RD
YWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0Nh
bGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIDogbV9mYXN0Q2FsbChmYXN0
Q2FsbCkKICAgICAgICAgICAgICwgbV9zbG93Q2FsbChzbG93Q2FsbCkKICAgICAgICAgICAgICwg
bV90YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCiAgICAgICAgICAgICAsIG1faXNDYWxsKGlz
Q2FsbCkKLSAgICAgICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAg
ICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICB7CiAgICAgICAgIH0K
ICAgICAgICAgCkBAIC0zOTksNyArNDA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FsbCBtX3Ns
b3dDYWxsOwogICAgICAgICBEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOwogICAgICAgICBi
b29sIG1faXNDYWxsOwotICAgICAgICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkluZm87CisgICAgICAg
IENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIH07CiAKICAgICBWZWN0b3I8UHJvcGVydHlB
Y2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVydHlBY2Nlc3NlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiw4IEBACiAjaWZuZGVm
IERGR05vZGVfaAogI2RlZmluZSBERkdOb2RlX2gKIAotLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcg
aW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93
IGdyYXBocy4KLSNkZWZpbmUgREZHX0RFQlVHX1ZFUkJPU0UgMAorLy8gRW1pdCB2YXJpb3VzIGxv
Z2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRh
dGFmbG93IGdyYXBocy4gIFNldCB0byAxIGZvciBiYXNpYyB2ZXJib3NpdHksIG9yIHRvIDIgZm9y
IG1vcmUgdmVyYm9zaXR5LgorI2RlZmluZSBERkdfREVCVUdfVkVSQk9TRSAyCiAvLyBFbmFibGUg
Z2VuZXJhdGlvbiBvZiBkeW5hbWljIGNoZWNrcyBpbnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0u
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogI2RlZmluZSBERkdfSklUX0FTU0VSVCAxCkBAIC01MCw2
ICs1MCw4IEBACiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFIDAKIC8vIERpc2FibGUg
dGhlIFNwZWN1bGF0aXZlSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmghCiAj
ZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNVTEFUSVZFIDAKKy8vIERpc2FibGUg
dGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5zdGVhZC4KKyNkZWZpbmUgREZH
X09TUiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogLy8gR2VuZXJhdGUgc3RhdHMgb24gaG93
IHN1Y2Nlc3NmdWwgd2Ugd2VyZSBpbiBtYWtpbmcgdXNlIG9mIHRoZSBERkcgaml0LCBhbmQgcmVt
YWluaW5nIG9uIHRoZSBob3QgcGF0aC4KICNkZWZpbmUgREZHX1NVQ0NFU1NfU1RBVFMgMAogCkBA
IC03Miw5ICs3NCwzMiBAQCBDT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9
CiB0eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9O
b2RlID0gVUlOVF9NQVg7CiAKLS8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJvbSBh
biBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9uLgorLy8gSW5mb3Jt
YXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9z
b3VyY2UgaW5mb3JtYXRpb24sCisvLyBhbmQgdG8gaW1wbGVtZW50IE9TUi4KIC8vIChQcmVzZW50
bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCi10eXBlZGVmIHVpbnQzMl90IEV4
Y2VwdGlvbkluZm87CitjbGFzcyBDb2RlT3JpZ2luIHsKK3B1YmxpYzoKKyAgICBDb2RlT3JpZ2lu
KCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJf
dD46Om1heCgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgQ29kZU9yaWdpbih1
aW50MzJfdCBieXRlY29kZUluZGV4KQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29k
ZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCk7IH0KKyAgICAKKyAgICB1aW50MzJfdCBieXRlY29kZUluZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleDsKK307
CiAKIC8vIEVudHJpZXMgaW4gdGhlIE5vZGVUeXBlIGVudW0gKGJlbG93KSBhcmUgY29tcG9zZWQg
b2YgYW4gaWQsIGEgcmVzdWx0IHR5cGUgKHBvc3NpYmx5IG5vbmUpCiAvLyBhbmQgc29tZSBhZGRp
dGlvbmFsIGluZm9ybWF0aXZlIGZsYWdzIChtdXN0IGdlbmVyYXRlLCBpcyBjb25zdGFudCwgZXRj
KS4KQEAgLTM1Nyw5ICszODIsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBWYXJBcmdUYWcg
eyBWYXJBcmcgfTsKIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxk
cmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9u
SW5mbyBleGNlcHRpb25JbmZvLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXgg
Y2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9k
ZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkK
ICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8p
CisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQog
ICAgIHsKQEAgLTM3MCw5ICszOTUsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8g
Q29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0ZSB2
YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8s
IE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIg
PSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBv
cCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9O
b2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9u
SW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0
dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50
KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCkBAIC0zODQsOSArNDA5LDkgQEAg
c3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0
byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBl
IG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1t
MiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwg
Tm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2Vw
dGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1f
dmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZD
b3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTM5OSw5ICs0MjQs
OSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUg
d2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1
ZXMuCi0gICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2Vw
dGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgdW5zaWduZWQgZmlyc3RDaGlsZCwg
dW5zaWduZWQgbnVtQ2hpbGRyZW4pCisgICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgdW5zaWduZWQg
Zmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgICAgIDogb3Aob3ApCi0gICAg
ICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4o
Y29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0x
Lm1fdmFsdWUpCkBAIC02NDMsNiArNjY4LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNT
RVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4
ZWQuY2hpbGQxOwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2Fu
dCB0byBkbyBhIGZhc3QgY2hlY2sgb24gdGhlIGZpcnN0IGNoaWxkCisgICAgLy8gYmVmb3JlIGFs
c28gZG9pbmcgYSBjaGVjayBvbiB0aGUgb3Bjb2RlLiBVc2UgdGhpcyB3aXRoIGNhcmUgYW5kCisg
ICAgLy8gYXZvaWQgaXQgaWYgcG9zc2libGUuCisgICAgTm9kZUluZGV4IGNoaWxkMVVuY2hlY2tl
ZCgpCisgICAgeworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgIH0K
IAogICAgIE5vZGVJbmRleCBjaGlsZDIoKQogICAgIHsKQEAgLTY3MSw3ICs3MDQsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0
aGUgbm9kZS4KICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBVc2VkIHRvIGxvb2sgdXAgZXhjZXB0
aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRl
Y29kZSBpbmRleCkuCi0gICAgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvOworICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4g
KDAgZm9yIG5vIGNoaWxkKS4KICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDYgKzQzNCw5IEBAIHZvaWQg
Tm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2QKIAogdm9pZCBOb25TcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hlY2tJdGVyYXRv
ciwgTm9kZSYgbm9kZSkKIHsKKyNpZiBERkdfT1NSCisgICAgVU5VU0VEX1BBUkFNKGNoZWNrSXRl
cmF0b3IpOworI2Vsc2UKICAgICAvLyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGZyb20g
dGhlIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gaW4gdGhlCiAgICAgLy8gc3BlY3VsYXRpdmUg
cGF0aC4gRG8gbm90IGNoZWNrIGZvciBOb2RlSW5kZXggMCwgc2luY2UgdGhpcyBpcyBjaGVja2Vk
CiAgICAgLy8gaW4gdGhlIG91dGVybW9zdCBjb21waWxlIGxheWVyLCBhdCB0aGUgaGVhZCBvZiB0
aGUgbm9uLXNwZWN1bGF0aXZlIHBhdGgKQEAgLTQ0Miw2ICs0NDUsNyBAQCB2b2lkIE5vblNwZWN1
bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgLy8gYXMgc3BlY3VsYXRpb24gY2hlY2tz
IGF0IHRoaXMgaW5kZXgpLgogICAgIGlmIChtX2NvbXBpbGVJbmRleCAmJiBjaGVja0l0ZXJhdG9y
Lmhhc0NoZWNrQXRJbmRleChtX2NvbXBpbGVJbmRleCkpCiAgICAgICAgIHRyYWNrRW50cnkobV9q
aXQubGFiZWwoKSk7CisjZW5kaWYKIAogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKIApAQCAt
MTI4Myw4ICsxMjg3LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4
SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHNwZWN1bGF0aW9u
IGNoZWNrcyBhZGRlZCBhdCBmdW5jdGlvbiBlbnRyeSAoY2hlY2tpbmcgYXJndW1lbnQgdHlwZXMp
LgorI2lmICFERkdfT1NSCiAgICAgaWYgKGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1f
Y29tcGlsZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRp
ZgogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9yIChtX2Jsb2NrID0gMDsg
bV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsK
IH0KIAorI2lmICFERkdfT1NSCiBTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBy
ZWNvdmVyeUluZGV4KQogICAgIDogbV9jaGVjayhjaGVjaykKICAgICAsIG1fbm9kZUluZGV4KGpp
dC0+bV9jb21waWxlSW5kZXgpCkBAIC0xNjgsNiArMTY5LDU2IEBAIFNwZWN1bGF0aW9uQ2hlY2s6
OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm8KICAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4
KCldLm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CiB9CisjZW5kaWYKKwordm9pZCBWYWx1ZVNv
dXJjZTo6ZHVtcChGSUxFKiBvdXQpCit7CisgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1f
bm9kZUluZGV4KTsKK30KKwordm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkKK3sK
KyAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZp
bGU6CisgICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEluR1BSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUo
Z3ByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgZnByaW50
ZihvdXQsICIlJSVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZwcigpKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0
LCAiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENv
bnN0YW50OgorICAgICAgICBmcHJpbnRmKG91dCwgIlslc10iLCBjb25zdGFudCgpLmRlc2NyaXB0
aW9uKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvbnRLbm93OgorICAgICAgICBmcHJp
bnRmKG91dCwgIiEiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZnBy
aW50ZihvdXQsICI/JWQiLCB0ZWNobmlxdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
KworI2lmIERGR19PU1IKK09TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hl
Y2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCisgICAgOiBt
X2NoZWNrKGNoZWNrKQorICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKKyAg
ICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1faml0LmdyYXBoKClbaml0LT5tX2NvbXBpbGVJbmRl
eF0uY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpCisgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVj
b3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQor
ICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgLCBtX2xhc3RT
ZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCisg
ICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOworICAgIGZvciAodW5zaWduZWQgdmFyaWFi
bGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKyt2YXJpYWJsZSkKKyAgICAg
ICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihq
aXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7Cit9CisjZW5kaWYKIAogR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGVJbmRleCBub2RlSW5kZXgsIERhdGFGb3JtYXQm
IHJldHVybkZvcm1hdCkKIHsKQEAgLTY2OCw2ICs3MTksMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFsdWUu
Z3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9CisgICAgICAgIC8vIEluZGlj
YXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBv
ZgorICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90
aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KKyAgICAgICAgdmFsdWVTb3VyY2VS
ZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNvdXJjZSgpOworICAgICAg
ICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS5sb2NhbCgpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKQEAgLTEzNjcsMTEgKzE0MjIsMTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQotCisgICAgCiAgICAgaWYg
KG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUoKSkKICAgICAgICAgdXNlKG1f
Y29tcGlsZUluZGV4KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQo
Tm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZS5vcCA9PSBTZXRMb2NhbCk7CisgICAgCisg
ICAgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChub2RlLmNoaWxkMSgpLCBub2RlLmxvY2FsKCkpOwor
ICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7Cit9CisKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2spCiB7CiAgICAgQVNTRVJUKG1fY29tcGls
ZUluZGV4ID09IGJsb2NrLmJlZ2luKTsKQEAgLTEzNzksMjkgKzE0NDIsNTggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2lmIERGR19KSVRfQlJFQUtfT05fRVZF
UllfQkxPQ0sKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKKyAgICAKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICBtX2Fy
Z3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNv
dXJjZSgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwgYmxvY2suZW5kOyArK21fY29t
cGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XTsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQorICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworI2lm
IERGR19ERUJVR19WRVJCT1NFCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0
aXZlSklUIHNraXBwaW5nIE5vZGUgQCVkIGF0IEpJVCBvZmZzZXQgMHgleCAgICAgIiwgKGludClt
X2NvbXBpbGVJbmRleCwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CisjZW5kaWYKKyAgICAgICAgICAg
IGlmIChub2RlLm9wID09IFNldExvY2FsKQorICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50
KG5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgCiAjaWYgREZHX0RFQlVHX1ZF
UkJPU0UKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5n
IE5vZGUgQCVkIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG1f
aml0LmRlYnVnT2Zmc2V0KCkpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxh
dGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQp
bV9jb21waWxlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOwogI2VuZGlmCiAjaWYgREZHX0pJ
VF9CUkVBS19PTl9FVkVSWV9OT0RFCi0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKKyAgICAg
ICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgotICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7Ci0gICAgICAgIGNvbXBpbGUobm9kZSk7Ci0gICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgICAgIGNvbXBpbGUobm9kZSk7CisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAjaWYgREZHX0RFQlVHX1ZFUkJPU0UKLSAg
ICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
Ii0+ICVzXG4iLCBkYXRhRm9ybWF0VG9TdHJpbmcobV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1
YWxSZWdpc3RlcigpXS5yZWdpc3RlckZvcm1hdCgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChub2RlLmhhc1Jlc3Vs
dCgpKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXMgICAgIiwgZGF0YUZv
cm1hdFRvU3RyaW5nKG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV0ucmVn
aXN0ZXJGb3JtYXQoKSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiICAgICIpOwogI2VuZGlmCi0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgfQorICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRSA+PSAyICAgICAgICAK
KyAgICAgICAgZm9yIChpbnQgb3BlcmFuZCA9IC1tX2FyZ3VtZW50cy5zaXplKCkgLSBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IG9wZXJhbmQgPCAtUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplOyArK29wZXJhbmQpCisgICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7CisgICAgICAgIAorICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiA6ICIpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgb3BlcmFuZCA9IDA7
IG9wZXJhbmQgPCAoaW50KW1fdmFyaWFibGVzLnNpemUoKTsgKytvcGVyYW5kKQorICAgICAgICAg
ICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChzdGRlcnIpOworI2VuZGlm
CisgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRSAgCisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiXG4iKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiB9CiAKQEAgLTE0
NTIsNiArMTU0NCwxMTIgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK1ZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1
ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKK3sKKyAgICBpZiAo
IXZhbHVlU291cmNlLmlzU2V0KCkpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJl
YWR5SW5SZWdpc3RlckZpbGUoKTsKKworICAgIGlmIChtX2ppdC5pc0NvbnN0YW50KHZhbHVlU291
cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7CisgICAg
CisgICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRl
eCgpXTsKKyAgICBHZW5lcmF0aW9uSW5mbyogaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25v
ZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICBpZiAoIWluZm9QdHItPmFsaXZlKCkgfHwg
aW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpIHsKKyAgICAg
ICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxk
IGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCisgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBv
c3NpYmlsaXRpZXM6CisgICAgICAgIC8vCisgICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRo
ZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUK
KyAgICAgICAgLy8gICAgdGhlbiBpdCBtZWFucyB0aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0
aGUgdmFsdWUgd291bGQgaGF2ZSBwZXJmb3JtZWQgYQorICAgICAgICAvLyAgICBWYWx1ZVRvTnVt
YmVyIGNvbnZlcnNpb24gYW55d2F5LiAgVGh1cywgd2UgY2FuIHN1YnN0aXR1dGUgVmFsdWVUb051
bWJlci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBMaWtld2lzZSwgaWYg
dGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMKKyAgICAgICAg
Ly8gICAgVmFsdWVUb0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuICBCdXQgaWYgdGhlcmUgaXMg
Ym90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRvTnVtYmVyLCB0
aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAorICAgICAgICAv
LyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQg
dG8gbnVtYmVyIHdoaWxlCisgICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRl
ZCB0byBJbnQzMi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElmIHRo
ZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgorICAg
ICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2Fu
dCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBV
SW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgcmV2ZXJzZSBv
ZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRz
CisgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiAgVGhpcyBtZWFucyB0
aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9mCisgICAgICAgIC8vICAgIHRoZSBudW1iZXIg
d291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlUHRyLT5v
cCA9PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgp
W25vZGVJbmRleF07CisgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9k
ZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZl
KCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkg
eworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAg
ICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxS
ZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3Rlcikgewor
ICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2
aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5ub2Rl
SW5kZXgoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNl
Lm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1i
ZXI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUlu
ZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
VmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGlu
Zm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVt
YmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVy
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVU
b051bWJlckluZGV4OworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0g
Tm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5k
ZXg7CisgICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUp
IHsKKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9V
c2VdOworICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRy
LT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFs
aXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOworICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGluZm9Q
dHItPmFsaXZlKCkpOworCisgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0
YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkZQ
UihpbmZvUHRyLT5mcHIoKSk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihp
bmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7CisgICAgfQorICAgIGlm
IChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKQorICAgICAgICByZXR1
cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgIAorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkocmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgcHJpdmF0ZToK
ICAgICBHUFJSZWcgbV9zcmM7CiB9OwogCisjaWYgIURGR19PU1IKIC8vID09PSBTcGVjdWxhdGlv
bkNoZWNrID09PQogLy8KIC8vIFRoaXMgc3RydWN0dXJlIHJlY29yZHMgYSBiYWlsLW91dCBmcm9t
IHRoZSBzcGVjdWxhdGl2ZSBwYXRoLApAQCAtOTEsNyArOTIsMTkxIEBAIHN0cnVjdCBTcGVjdWxh
dGlvbkNoZWNrIHsKICAgICBSZWdpc3RlckluZm8gbV9mcHJJbmZvW0ZQUkluZm86Om51bWJlck9m
UmVnaXN0ZXJzXTsKIH07CiB0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxTcGVjdWxhdGlvbkNoZWNr
LCAxNj4gU3BlY3VsYXRpb25DaGVja1ZlY3RvcjsKKyNlbmRpZiAvLyAhREZHX09TUgogCitjbGFz
cyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAgICA6IG1f
bm9kZUluZGV4KE5vTm9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVl
U291cmNlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUlu
ZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXggIT0gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBO
b2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRF
QlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6Cisg
ICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworfTsKKyAgICAKKy8vIERlc2NyaWJlcyBob3cgdG8g
cmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0ZXIgYXQgYSBnaXZlbgorLy8g
Y29kZSBwb2ludC4KK2VudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CisgICAgLy8gSXQncyBh
bHJlYWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGF0IHRoZSByaWdodCBsb2NhdGlvbi4KKyAgICBB
bHJlYWR5SW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBpbiBhIHJlZ2lzdGVyLgorICAgIElu
R1BSLAorICAgIFVuYm94ZWRJbnQzMkluR1BSLAorICAgIEluRlBSLAorICAgIC8vIEl0J3MgaW4g
dGhlIHJlZ2lzdGVyIGZpbGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKyAgICBEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGEgY29uc3RhbnQuCisgICAgQ29uc3Rh
bnQsCisgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcmVjb3ZlciBpdC4KKyAgICBEb250S25vdwor
fTsKKworY2xhc3MgVmFsdWVSZWNvdmVyeSB7CitwdWJsaWM6CisgICAgVmFsdWVSZWNvdmVyeSgp
CisgICAgICAgIDogbV90ZWNobmlxdWUoRG9udEtub3cpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZpbGUoKQorICAgIHsKKyAg
ICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9
IEFscmVhZHlJblJlZ2lzdGVyRmlsZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5HUFIoR1BSUmVnIGdwciwgRGF0YUZvcm1h
dCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZv
cm1hdE5vbmUpOworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgaWYgKGRh
dGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAgICByZXN1bHQubV90ZWNo
bmlxdWUgPSBVbmJveGVkSW50MzJJbkdQUjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVz
dWx0Lm1fdGVjaG5pcXVlID0gSW5HUFI7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5ncHIgPSBn
cHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1
ZVJlY292ZXJ5IGluRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5GUFI7CisgICAgICAgIHJl
c3VsdC5tX3NvdXJjZS5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOworICAgICAgICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJlZyA9IHZpcnR1YWxSZWc7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292
ZXJ5IGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQ29uc3RhbnQ7CisgICAgICAg
IHJlc3VsdC5tX3NvdXJjZS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlx
dWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWU7IH0KKyAgICAKKyAgICBH
UFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJ
bkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVkSW50MzJJbkdQUik7CisgICAgICAgIHJldHVy
biBtX3NvdXJjZS5ncHI7CisgICAgfQorICAgIAorICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluRlBSKTsKKyAgICAgICAgcmV0dXJu
IG1fc291cmNlLmZwcjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxS
ZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUpOworICAgICAgICByZXR1cm4gbV9zb3VyY2UudmlydHVhbFJl
ZzsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZGVjb2RlKG1fc291cmNlLmNvbnN0YW50KTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5E
RUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpOworI2VuZGlmCisgICAgCitwcml2YXRlOgor
ICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgbV90ZWNobmlxdWU7CisgICAgdW5pb24geworICAg
ICAgICBHUFJSZWcgZ3ByOworICAgICAgICBGUFJSZWcgZnByOworICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7CisgICAg
fSBtX3NvdXJjZTsKK307CisKKyNpZiBERkdfT1NSCisvLyA9PT0gT1NSRXhpdCA9PT0KKy8vCisv
LyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0aXZlIHBh
dGggYnkKKy8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4KK3N0cnVjdCBPU1JFeGl0IHsKKyAg
ICBPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVk
IHJlY292ZXJ5SW5kZXggPSAwKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2No
ZWNrOworICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX2J5dGVjb2Rl
SW5kZXg7CisgICAgCisgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4OworICAgIAorICAgIC8v
IENvbnZlbmllbnQgd2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZhbHVlUmVjb3ZlcmllcyB3aGlsZSBi
ZWluZworICAgIC8vIGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2ZXJzdXMgdmFyaWFibGUuCisgICAg
aW50IG51bWJlck9mUmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUo
KSArIG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVl
UmVjb3ZlcnkoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgKGlu
dCltX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5k
ZXhdOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXggLSBtX2FyZ3VtZW50cy5zaXpl
KCldOworICAgIH0KKyAgICBib29sIGlzQXJndW1lbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVy
biBpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgaW50IGFyZ3VtZW50Rm9y
SW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4OworICAg
IH0KKyAgICBpbnQgdmFyaWFibGVGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7CisgICAgfQorICAgIGludCBv
cGVyYW5kRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4
IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gaW5kZXggLSBt
X2FyZ3VtZW50cy5zaXplKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Cisg
ICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxWYWx1
ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKK307
Cit0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCAxNj4gT1NSRXhpdFZlY3RvcjsKKyNl
bmRpZiAvLyBERkdfT1NSCiAKIC8vID09PSBTcGVjdWxhdGl2ZUpJVCA9PT0KIC8vCkBAIC0xMDUs
MjEgKzI5MCwyNSBAQCB0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxTcGVjdWxhdGlvbkNoZWNrCiAv
LyBvbmx5IHNwZWN1bGF0aXZlbHkgYmVlbiBhc3NlcnRlZCkgdGhyb3VnaCB0aGUgZGF0YWZsb3cu
CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVCA6IHB1YmxpYyBKSVRDb2RlR2VuZXJhdG9yIHsKICAgICBm
cmllbmQgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2s7CisgICAgZnJpZW5kIHN0cnVjdCBPU1JFeGl0
OwogcHVibGljOgotICAgIFNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCi0gICAgICAg
IDogSklUQ29kZUdlbmVyYXRvcihqaXQsIHRydWUpCi0gICAgICAgICwgbV9jb21waWxlT2theSh0
cnVlKQotICAgIHsKLSAgICB9CisgICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCk7
CiAKICAgICBib29sIGNvbXBpbGUoKTsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBsaXN0IG9mIGJh
aWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoLAogICAgIC8vIGFuZCBhZGRpdGlvbmFs
IHJlY292ZXJ5IGluZm9ybWF0aW9uLgorI2lmICFERkdfT1NSCiAgICAgU3BlY3VsYXRpb25DaGVj
a1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3MoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fc3Bl
Y3VsYXRpb25DaGVja3M7CiAgICAgfQorI2Vsc2UKKyAgICBPU1JFeGl0VmVjdG9yJiBvc3JFeGl0
cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9vc3JFeGl0czsKKyAgICB9CisjZW5kaWYKICAg
ICBTcGVjdWxhdGlvblJlY292ZXJ5KiBzcGVjdWxhdGlvblJlY292ZXJ5KHNpemVfdCBpbmRleCkK
ICAgICB7CiAgICAgICAgIC8vIFNwZWN1bGF0aW9uQ2hlY2s6Om1fcmVjb3ZlcnlJbmRleCBpcyBv
ZmZzZXQgYnkgMSwKQEAgLTEzOSw2ICszMjgsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBKSVRDb2RlR2VuZXJhdG9yOwogICAgIAogICAgIHZvaWQgY29tcGlsZShOb2RlJik7CisgICAg
dm9pZCBjb21waWxlTW92SGludChOb2RlJik7CiAgICAgdm9pZCBjb21waWxlKEJhc2ljQmxvY2sm
KTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5cGVzKCk7CkBAIC0yMDMsNyArMzkzLDExIEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAg
ICByZXR1cm47CisjaWYgIURGR19PU1IKICAgICAgICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBl
bmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlzKSk7CisjZWxzZQorICAgICAgICBt
X29zckV4aXRzLmFwcGVuZChPU1JFeGl0KGp1bXBUb0ZhaWwsIHRoaXMpKTsKKyNlbmRpZgogICAg
IH0KICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwgcmVjb3Zl
cnkuCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQpAQCAtMjExLDcgKzQw
NSwxMSBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIG1fc3BlY3VsYXRpb25SZWNvdmVyeUxpc3QuYXBwZW5kKHJlY292
ZXJ5KTsKKyNpZiAhREZHX09TUgogICAgICAgICBtX3NwZWN1bGF0aW9uQ2hlY2tzLmFwcGVuZChT
cGVjdWxhdGlvbkNoZWNrKGp1bXBUb0ZhaWwsIHRoaXMsIG1fc3BlY3VsYXRpb25SZWNvdmVyeUxp
c3Quc2l6ZSgpKSk7CisjZWxzZQorICAgICAgICBtX29zckV4aXRzLmFwcGVuZChPU1JFeGl0KGp1
bXBUb0ZhaWwsIHRoaXMsIG1fc3BlY3VsYXRpb25SZWNvdmVyeUxpc3Quc2l6ZSgpKSk7CisjZW5k
aWYKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0
aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgpAQCAtMjIyLDE4ICs0MjAsNjQgQEAgcHJpdmF0
ZToKIAogICAgIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgogICAgIEdQUlJlZyBmaWxsU3BlY3VsYXRl
SW50SW50ZXJuYWwoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwotCisgICAg
CiAgICAgLy8gSXQgaXMgcG9zc2libGUsIGR1cmluZyBzcGVjdWxhdGl2ZSBnZW5lcmF0aW9uLCB0
byByZWFjaCBhIHNpdHVhdGlvbiBpbiB3aGljaCB3ZQogICAgIC8vIGNhbiBzdGF0aWNhbGx5IGRl
dGVybWluZSBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbCAoZm9yIGV4YW1wbGUsIHdoZW4gdHdvIG5v
ZGVzCiAgICAgLy8gd2lsbCBtYWtlIGNvbmZsaWN0aW5nIHNwZWN1bGF0aW9ucyBhYm91dCB0aGUg
c2FtZSBvcGVyYW5kKS4gSW4gc3VjaCBjYXNlcyB0aGlzCiAgICAgLy8gZmxhZyBpcyBjbGVhcmVk
LCBpbmRpY2F0aW5nIG5vIGZ1cnRoZXIgY29kZSBnZW5lcmF0aW9uIHNob3VsZCB0YWtlIHBsYWNl
LgogICAgIGJvb2wgbV9jb21waWxlT2theTsKKyNpZiAhREZHX09TUgogICAgIC8vIFRoaXMgdmVj
dG9yIHRyYWNrcyBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCB0byB0aGUgbm9u
LXNwZWN1bGF0aXZlIG9uZS4KICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yIG1fc3BlY3VsYXRp
b25DaGVja3M7CisjZWxzZQorICAgIC8vIFRoaXMgdmVjdG9yIHRyYWNrcyBiYWlsLW91dHMgZnJv
bSB0aGUgc3BlY3VsYXRpdmUgcGF0aCB0byB0aGUgb2xkIEpJVC4KKyAgICBPU1JFeGl0VmVjdG9y
IG1fb3NyRXhpdHM7CisjZW5kaWYKICAgICAvLyBTb21lIGJhaWwtb3V0cyBuZWVkIHRvIHJlY29y
ZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlY29yZGluZyBzcGVjaWZpYyByZWNvdmVyeQogICAg
IC8vIHRvIGJlIHBlcmZvcm1lZCAoZm9yIGV4YW1wbGUsIG9uIGRldGVjdGVkIG92ZXJmbG93IGZy
b20gYW4gYWRkLCB3ZSBtYXkgbmVlZCB0bwogICAgIC8vIHJldmVyc2UgdGhlIGFkZGl0aW9uIGlm
IGFuIG9wZXJhbmQgaXMgYmVpbmcgb3ZlcndyaXR0ZW4pLgogICAgIFZlY3RvcjxTcGVjdWxhdGlv
blJlY292ZXJ5LCAxNj4gbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdDsKKyAgICAKKyAgICAvLyBU
cmFja2luZyBmb3Igd2hpY2ggbm9kZXMgYXJlIGN1cnJlbnRseSBob2xkaW5nIHRoZSB2YWx1ZXMg
b2YgYXJndW1lbnRzIGFuZCBieXRlY29kZQorICAgIC8vIG9wZXJhbmQtaW5kZXhlZCB2YXJpYWJs
ZXMuCisKKyAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJhbmQoaW50IG9wZXJhbmQp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9w
ZXJhbmQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldE5vZGVJbmRleEZvck9wZXJhbmQoTm9k
ZUluZGV4IG5vZGVJbmRleCwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICB2YWx1ZVNvdXJj
ZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJjZShub2RlSW5kZXgpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgd2l0aCBjYXJlLCBzaW5jZSBpdCBib3RoIHJl
dHVybnMgYSByZWZlcmVuY2UgaW50byBhbiBhcnJheQorICAgIC8vIGFuZCBwb3RlbnRpYWxseSBy
ZXNpemVzIHRoZSBhcnJheS4gIFNvIGl0IHdvdWxkIG5vdCBiZSByaWdodCB0byBjYWxsIHRoaXMK
KyAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3JtIG9wZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNl
cywgc2luY2UgdGhlIG9uZSBmcm9tCisgICAgLy8gdGhlIGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdl
ciBiZSB2YWxpZC4KKyAgICBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVy
YW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9w
ZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVu
dHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAg
ICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07CisgICAgfQorICAgIAorICAgIFZlY3RvcjxW
YWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBt
X3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICAKKyAgICBWYWx1ZVJl
Y292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNv
dXJjZSk7CisKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBv
cGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKHZh
bHVlU291cmNlRm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQogfTsKIAogCkBAIC00NTMsMTEg
KzY5NywxNyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKLQog
Ly8gPT09IFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yID09PQogLy8KIC8vIFRoaXMgY2xh
c3MgaXMgdXNlZCBieSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCB0byBjaGVjayB3aGljaAogLy8g
bm9kZXMgcmVxdWlyZSBlbnRyeSBwb2ludHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4KKyNp
ZiBERkdfT1NSCisvLyBUaGlzIGJlY29tZXMgYSBzdHViIGlmIE9TUiBpcyBlbmFibGVkLgorY2xh
c3MgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgeworcHVibGljOgorICAgIFNwZWN1bGF0
aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKCkgeyB9Cit9OworI2Vsc2UKIGNsYXNzIFNwZWN1bGF0aW9u
Q2hlY2tJbmRleEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJ
dGVyYXRvcihTcGVjdWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlvbkNoZWNrcykKQEAgLTQ4
Myw3ICs3MzMsMTYgQEAgcHJpdmF0ZToKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVy
YXRvciBtX2l0ZXI7CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9lbmQ7
CiB9OworI2VuZGlmCiAKK2lubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklU
Q29tcGlsZXImIGppdCkKKyAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCB0cnVlKQorICAgICwg
bV9jb21waWxlT2theSh0cnVlKQorICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5t
X251bVBhcmFtZXRlcnMpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29kZUJsb2NrKCktPm1fbnVt
VmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkKK3sKK30KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wYWN0SklUQ29kZU1hcF9oCisjZGVm
aW5lIENvbXBhY3RKSVRDb2RlTWFwX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKKy8vIEdpdmVzIHlvdSBhIGNvbXByZXNzZWQgbWFwIGJldHdlZW4g
YmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFuZCBtYWNoaW5lIGNvZGUKKy8vIGVudHJ5IHBvaW50
cy4gVGhlIGNvbXByZXNzaW9uIHNpbXBseSB0cmllcyB0byB1c2UgZWl0aGVyIDEsIDIsIG9yIDQg
Ynl0ZXMgZm9yCisvLyBhbnkgZ2l2ZW4gb2Zmc2V0LiBUaGUgbGFyZ2VzdCBvZmZzZXQgdGhhdCBj
YW4gYmUgc3RvcmVkIGlzIDJeMzAuCisKKy8vIEV4YW1wbGUgdXNlOgorLy8KKy8vIENvbXBhY3RK
SVRDb2RlTWFwOjpFbmNvZGVyIGVuY29kZXIobWFwKTsKKy8vIGVuY29kZXIuYXBwZW5kKGEsIGIp
OworLy8gZW5jb2Rlci5hcHBlbmQoYywgZCk7IC8vIHByZWNvbmRpdGlvbnM6IGMgPj0gYSwgZCA+
PSBiCisvLyBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1hcCA9IGVuY29kZXIuZmluaXNoKCk7
CisvLworLy8gQXQgc29tZSBsYXRlciB0aW1lOgorLy8KKy8vIFZlY3RvcjxCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQ+IGRlY29kZWQ7CisvLyBtYXAtPmRlY29kZShkZWNvZGVkKTsKKworc3RydWN0
IEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCB7CisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
KCkgeyB9CisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQorICAgICAgICA6IG1fYnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIG1fbWFjaGluZUNvZGVPZmZzZXQobWFj
aGluZUNvZGVPZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVj
b2RlSW5kZXg7CisgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNldDsKKyAgICAKKyAgICBz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldEJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0KiBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1hcHBpbmctPm1fYnl0ZWNv
ZGVJbmRleDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRNYWNo
aW5lQ29kZU9mZnNldChCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcpCisgICAgewor
ICAgICAgICByZXR1cm4gbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldDsKKyAgICB9Cit9Owor
CitjbGFzcyBDb21wYWN0SklUQ29kZU1hcCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgfkNvbXBhY3RKSVRDb2RlTWFwKCkKKyAgICB7CisgICAgICAgIGlmICht
X2J1ZmZlcikKKyAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkZWNvZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIHJlc3VsdCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IDA7
CisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQgPSAwOworICAgICAg
ICAKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShtX251bWJlck9mRW50cmllcyk7CisgICAgICAgIHVu
c2lnbmVkIGogPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1iZXJP
ZkVudHJpZXM7ICsraSkgeworICAgICAgICAgICAgcHJldmlvdXNCeXRlY29kZUluZGV4ICs9IGRl
Y29kZU51bWJlcihqKTsKKyAgICAgICAgICAgIHByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQgKz0g
ZGVjb2RlTnVtYmVyKGopOworICAgICAgICAgICAgcmVzdWx0W2ldLm1fYnl0ZWNvZGVJbmRleCA9
IHByZXZpb3VzQnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIHJlc3VsdFtpXS5tX21hY2hpbmVD
b2RlT2Zmc2V0ID0gcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKKyAgICAgICAgICAgIHByaW50
ZigiICAgIGNqaXRjbTogZGVjb2RlZCAldSwgJXVcbiIsIHByZXZpb3VzQnl0ZWNvZGVJbmRleCwg
cHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGog
PT0gbV9zaXplKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENvbXBhY3RKSVRDb2RlTWFw
KHVpbnQ4X3QqIGJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVz
KQorICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgICwgbV9zaXplKHNpemUpCisjZW5kaWYKKyAgICAgICAgLCBtX251bWJlck9mRW50cmllcyhu
dW1iZXJPZkVudHJpZXMpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAg
fQorICAgIAorICAgIHVpbnQ4X3QgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9idWZmZXJbaW5k
ZXhdOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBkZWNvZGVOdW1iZXIodW5zaWduZWQmIGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBhdChpbmRleCsr
KTsKKyAgICAgICAgaWYgKCEoaGVhZFZhbHVlICYgMTI4KSkKKyAgICAgICAgICAgIHJldHVybiBo
ZWFkVmFsdWU7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDY0KSkKKyAgICAgICAgICAgIHJl
dHVybiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1ZSAmIH4xMjgpIDw8IDgpIHwgYXQo
aW5kZXgrKyk7CisgICAgICAgIHVuc2lnbmVkIHNlY29uZCA9IGF0KGluZGV4KyspOworICAgICAg
ICB1bnNpZ25lZCB0aGlyZCAgPSBhdChpbmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgZm91cnRo
ID0gYXQoaW5kZXgrKyk7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhl
YWRWYWx1ZSAmIH4oMTI4ICsgNjQpKSA8PCAyNCkgfCAoc2Vjb25kIDw8IDE2KSB8ICh0aGlyZCA8
PCA4KSB8IGZvdXJ0aDsKKyAgICB9CisgICAgCisgICAgdWludDhfdCogbV9idWZmZXI7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyNlbmRpZgorICAgIHVuc2ln
bmVkIG1fbnVtYmVyT2ZFbnRyaWVzOworICAgIAorcHVibGljOgorICAgIGNsYXNzIEVuY29kZXIg
eworICAgIHB1YmxpYzoKKyAgICAgICAgRW5jb2RlcigpOworICAgICAgICB+RW5jb2RlcigpOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eUZvcih1bnNpZ25lZCBudW1iZXJP
ZkVudHJpZXNUb0FkZCk7CisgICAgICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAgICAgUGFzc093blB0cjxDb21w
YWN0SklUQ29kZU1hcD4gZmluaXNoKCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IHZvaWQgYXBwZW5kQnl0ZSh1aW50OF90IHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbmNvZGVOdW1i
ZXIodWludDMyX3QgdmFsdWUpOworICAgIAorICAgICAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAg
ICAgICAgdW5zaWduZWQgbV9zaXplOworICAgICAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OworICAg
ICAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cmllczsKKyAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIG1fcHJldmlvdXNCeXRlY29kZUluZGV4OworICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3Vz
TWFjaGluZUNvZGVPZmZzZXQ7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
RW5jb2RlcjsKK307CisKK2lubGluZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6RW5jb2Rl
cigpCisgICAgOiBtX2J1ZmZlcigwKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5
KDApCisgICAgLCBtX251bWJlck9mRW50cmllcygwKQorICAgICwgbV9wcmV2aW91c0J5dGVjb2Rl
SW5kZXgoMCkKKyAgICAsIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCgwKQoreworfQorCitp
bmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6On5FbmNvZGVyKCkKK3sKKyAgICBpZiAo
bV9idWZmZXIpCisgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKK30KKyAgICAgICAgCitpbmxp
bmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQoreworICAgIHByaW50ZigiICAg
IGNqaXRjbTogc3RvcmluZyAldSwgJXVcbiIsIGJ5dGVjb2RlSW5kZXgsIG1hY2hpbmVDb2RlT2Zm
c2V0KTsKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA+PSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRl
eCk7CisgICAgQVNTRVJUKG1hY2hpbmVDb2RlT2Zmc2V0ID49IG1fcHJldmlvdXNNYWNoaW5lQ29k
ZU9mZnNldCk7CisgICAgZW5zdXJlQ2FwYWNpdHlGb3IoMSk7CisgICAgZW5jb2RlTnVtYmVyKGJ5
dGVjb2RlSW5kZXggLSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCk7CisgICAgZW5jb2RlTnVtYmVy
KG1hY2hpbmVDb2RlT2Zmc2V0IC0gbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICBt
X3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAgbV9wcmV2aW91c01h
Y2hpbmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgbV9udW1iZXJPZkVudHJp
ZXMrKzsKK30KKworaW5saW5lIFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IENvbXBhY3RK
SVRDb2RlTWFwOjpFbmNvZGVyOjpmaW5pc2goKQoreworICAgIG1fY2FwYWNpdHkgPSBtX3NpemU7
CisgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2MobV9idWZm
ZXIsIG1fY2FwYWNpdHkpKTsKKyAgICBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IHJlc3VsdCA9
IGFkb3B0UHRyKG5ldyBDb21wYWN0SklUQ29kZU1hcChtX2J1ZmZlciwgbV9zaXplLCBtX251bWJl
ck9mRW50cmllcykpOworICAgIG1fYnVmZmVyID0gMDsKKyAgICBtX3NpemUgPSAwOworICAgIG1f
Y2FwYWNpdHkgPSAwOworICAgIG1fbnVtYmVyT2ZFbnRyaWVzID0gMDsKKyAgICBtX3ByZXZpb3Vz
Qnl0ZWNvZGVJbmRleCA9IDA7CisgICAgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsK
KyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKyAgICAgICAgCitpbmxpbmUgdm9pZCBD
b21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kQnl0ZSh1aW50OF90IHZhbHVlKQorewor
ICAgIEFTU0VSVChtX3NpemUgKyAxIDw9IG1fY2FwYWNpdHkpOworICAgIG1fYnVmZmVyW21fc2l6
ZSsrXSA9IHZhbHVlOworfQorICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVu
Y29kZXI6OmVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXpl
ICsgNCA8PSBtX2NhcGFjaXR5KTsKKyAgICBBU1NFUlQodmFsdWUgPCAxPDwzMCk7CisgICAgaWYg
KHZhbHVlIDw9IDEyNykgeworICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7Cisg
ICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlIDw9IDE2
MzgzKSB7CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
dmFsdWUgPj4gOCk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDEyOCkpOworICAgICAg
ICBBU1NFUlQoIShoZWFkVmFsdWUgJiA2NCkpOworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1
ZSB8IDEyOCk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbHVlID4+IDI0KTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4
KSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDY0KSk7CisgICAgICAgIGFwcGVuZEJ5
dGUoaGVhZFZhbHVlIHwgMTI4IHwgNjQpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbHVlID4+IDE2KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsdWUgPj4gOCkpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHZhbHVlKSk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1h
cDo6RW5jb2Rlcjo6ZW5zdXJlQ2FwYWNpdHlGb3IodW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzVG9B
ZGQpCit7CisgICAgdW5zaWduZWQgY2FwYWNpdHlOZWVkZWQgPSBtX3NpemUgKyBudW1iZXJPZkVu
dHJpZXNUb0FkZCAqIDIgKiA0OworICAgIGlmIChjYXBhY2l0eU5lZWRlZCA+IG1fY2FwYWNpdHkp
IHsKKyAgICAgICAgbV9jYXBhY2l0eSA9IGNhcGFjaXR5TmVlZGVkICogMjsKKyAgICAgICAgbV9i
dWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG1fY2Fw
YWNpdHkpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29t
cGFjdEpJVENvZGVNYXBfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwOSw2ICsyMDksMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogCiAgICAgICAgIG1fbGFiZWxzW21fYnl0ZWNvZGVPZmZzZXRdID0gbGFiZWwoKTsKIAor
I2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIGlmIChtX2NhbkJlT3B0aW1p
emVkKQorICAgICAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQobV9ieXRlY29kZU9m
ZnNldCwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworI2VuZGlm
CisKICAgICAgICAgc3dpdGNoIChtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5z
dHJ1Y3Rpb24tPnUub3Bjb2RlKSkgewogICAgICAgICBERUZJTkVfQklOQVJZX09QKG9wX2RlbF9i
eV92YWwpCiAgICAgICAgIERFRklORV9CSU5BUllfT1Aob3BfaW4pCkBAIC0zNzMsNyArMzc4LDYg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogI2VuZGlmCiB9CiAKLQogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogewogICAgIHVuc2lnbmVkIGptcFRhYmxl
Q291bnQgPSBtX2ptcFRhYmxlLnNpemUoKTsKQEAgLTUwMiw2ICs1MDYsOCBAQCBKSVRDb2RlIEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiB7CiAjaWYgRU5BQkxFKFRJRVJFRF9DT01Q
SUxBVElPTikKICAgICBtX2NhbkJlT3B0aW1pemVkID0gbV9jb2RlQmxvY2stPmNhbkNvbXBpbGVX
aXRoREZHKCk7CisgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgIG1fc3RhcnRPZkNv
ZGUgPSBsYWJlbCgpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gSnVzdCBhZGQgYSBsaXR0bGUgYml0
IG9mIHJhbmRvbW5lc3MgdG8gdGhlIGNvZGVnZW4KQEAgLTY0Miw2ICs2NDgsMTEgQEAgSklUQ29k
ZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgICAgICBpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhtX21ldGhvZENhbGxD
b21waWxhdGlvbkluZm9baV0ucHJvcGVydHlBY2Nlc3NJbmRleCkuY2FsbFJldHVybkxvY2F0aW9u
OwogICAgIH0KIAorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgaWYgKG1fY2Fu
QmVPcHRpbWl6ZWQpCisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29k
ZU1hcEVuY29kZXIuZmluaXNoKCkpOworI2VuZGlmCisKICAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAg
ICAgICAqZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFy
aXR5Q2hlY2spOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5
NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBl
Y3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0
IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8
aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7CiAKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKQEAgLTEwNTQsNiArMTA1NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNp
ZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6
ZWQ7CisgICAgICAgIExhYmVsIG1fc3RhcnRPZkNvZGU7CisgICAgICAgIENvbXBhY3RKSVRDb2Rl
TWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAjZW5kaWYKICAgICB9IEpJVF9DTEFT
U19BTElHTk1FTlQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTky
LDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgcGFy
c2VyKG5ldyBQYXJzZXIpCiAgICAgLCBpbnRlcnByZXRlcigwKQogICAgICwgaGVhcCh0aGlzLCBo
ZWFwU2l6ZSkKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICwgbnVtYmVyT2ZT
bG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIoMCkKKyNlbmRpZgogICAgICwgZHluYW1pY0dsb2Jh
bE9iamVjdCgwKQogICAgICwgY2FjaGVkVVRDT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCkpCiAgICAgLCBtYXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tUeXBl
ID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggOiBN
YXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkKQEAgLTM1Nyw2ICszNjAsMTEgQEAgSlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKCkKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgZGVs
ZXRlIG1fcnRUcmFjZUxpc3Q7CiAjZW5kaWYKKworI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJ
T04pCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9zclNjcmF0Y2hCdWZmZXJzLnNpemUo
KTsgKytpKQorICAgICAgICBmYXN0RnJlZShvc3JTY3JhdGNoQnVmZmVyc1tpXSk7CisjZW5kaWYK
IH0KIAogUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4
dEdyb3VwKFRocmVhZFN0YWNrVHlwZSB0eXBlLCBIZWFwU2l6ZSBoZWFwU2l6ZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5
NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgaW50NjRfdCBkZWJ1Z0RhdGFCdWZmZXJbNjRdOwogI2VuZGlmCisj
aWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgVmVjdG9yPGludDY0X3QqPiBv
c3JTY3JhdGNoQnVmZmVyczsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mU2xvdHNJbkxhc3RPU1JT
Y3JhdGNoQnVmZmVyOworICAgICAgICAKKyAgICAgICAgaW50NjRfdCogb3NyU2NyYXRjaEJ1ZmZl
ckZvclNpemUodW5zaWduZWQgbnVtYmVyT2ZTbG90cykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFudW1iZXJPZlNsb3RzKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAobnVtYmVyT2ZTbG90cyA+IG51bWJlck9mU2xvdHNJbkxhc3RP
U1JTY3JhdGNoQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGEg
Tl4yIG1lbW9yeSB1c2FnZSBwYXRob2xvZ3kgYnkgZW5zdXJpbmcKKyAgICAgICAgICAgICAgICAv
LyB0aGF0IGF0IHdvcnN0LCB3ZSBnZXQgYSBnZW9tZXRyaWMgc2VyaWVzLCBtZWFuaW5nIHRoYXQg
dGhlCisgICAgICAgICAgICAgICAgLy8gdG90YWwgbWVtb3J5IHVzYWdlIGlzIHNvbWV3aGVyZSBh
cm91bmQKKyAgICAgICAgICAgICAgICAvLyBtYXgoc2NyYXRjaCBidWZmZXIgc2l6ZSkgKiA0Lgor
ICAgICAgICAgICAgICAgIG51bWJlck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyID0gbnVt
YmVyT2ZTbG90cyAqIDI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3NyU2Ny
YXRjaEJ1ZmZlcnMuYXBwZW5kKHN0YXRpY19jYXN0PGludDY0X3QqPihmYXN0TWFsbG9jKHNpemVv
ZihpbnQ2NF90KSAqIG51bWJlck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3NyU2NyYXRjaEJ1
ZmZlcnMubGFzdCgpOworICAgICAgICB9CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hN
YXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xh
c3NEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJ
KHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBKU09iamVjdCogSlNWYWx1
ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShFCiAjaWZuZGVmIE5ERUJVRwogY2hhciogSlNWYWx1ZTo6
ZGVzY3JpcHRpb24oKQogewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDMyOworICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDY0OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0
aW9uW3NpemVdOwogCiAgICAgaWYgKCEqdGhpcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L1BsYXRmb3JtLmgJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NjEsNyArOTYxLDcgQEAKICNlbmRpZgog
CiAjaWYgIWRlZmluZWQoRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTikKLSNkZWZpbmUgRU5BQkxF
X1RJRVJFRF9DT01QSUxBVElPTiAwCisjZGVmaW5lIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04g
MQogI2VuZGlmCiAKIC8qIEN1cnJlbnRseSBvbmx5IGltcGxlbWVudGVkIGZvciBKU1ZBTFVFNjQs
IG9ubHkgdGVzdGVkIG9uIFBMQVRGT1JNKE1BQykgKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106931</attachid>
            <date>2011-09-09 15:48:03 -0700</date>
            <delta_ts>2011-09-09 16:48:37 -0700</delta_ts>
            <desc>work in progress - passes run-javascriptcore-tests and runs both SunSpider and V8</desc>
            <filename>osrwip_patch_3.diff</filename>
            <type>text/plain</type>
            <size>79438</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4NzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEwIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV09S
SyBJTiBQUk9HUkVTUworCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpjdXJyZW50Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmFkZFRvR3JhcGgpOgorICAgICAgICAqIGRmZy9ERkdHUFJJbmZvLmg6CisgICAgICAgICog
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbklu
Zm86OmFsaXZlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29k
ZUdlbmVyYXRvcjo6YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6ZXhp
dFNwZWN1bGF0aXZlV2l0aE9TUik6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlY29yZDo6Q2FsbFJl
Y29yZCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlmeUNhbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2FsbFdpdGhGYXN0RXhj
ZXB0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRKU0NhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpKU0NhbGxSZWNvcmQ6OkpTQ2FsbFJl
Y29yZCk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDb2Rl
T3JpZ2luOjpDb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpDb2RlT3JpZ2luOjppc1Nl
dCk6CisgICAgICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Ynl0ZWNvZGVJbmRleCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2hp
bGQxVW5jaGVja2VkKToKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291
cmNlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpkdW1wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVNb3ZIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpWYWx1ZVNvdXJjZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpW
YWx1ZVNvdXJjZTo6bm9kZUluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5
OjpWYWx1ZVJlY292ZXJ5KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjphbHJl
YWR5SW5SZWdpc3RlckZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6Omlu
R1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjppbkZQUik6CisgICAgICAg
IChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpOgorICAg
ICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6
REZHOjpWYWx1ZVJlY292ZXJ5Ojp0ZWNobmlxdWUpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVl
UmVjb3Zlcnk6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6ZnByKToK
KyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojp2aXJ0dWFsUmVnaXN0ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om51bWJlck9mUmVjb3Zlcmllcyk6CisgICAgICAgIChK
U0M6OkRGRzo6T1NSRXhpdDo6dmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6T1NS
RXhpdDo6aXNBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6YXJndW1lbnRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6dmFyaWFibGVGb3JJbmRleCk6
CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6b3BlcmFuZEZvckluZGV4KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6b3NyRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6dmFsdWVTb3VyY2VGb3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6c2V0Tm9kZUluZGV4Rm9yT3BlcmFuZCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvcjo6U3Bl
Y3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgICogaml0L0NvbXBhY3RKSVRDb2RlTWFw
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OkJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldDo6Z2V0TWFjaGluZUNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6fkNvbXBhY3RKSVRDb2RlTWFwKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENv
ZGVNYXA6OmRlY29kZSk6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpDb21wYWN0
SklUQ29kZU1hcCk6CisgICAgICAgIChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjphdCk6CisgICAg
ICAgIChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGVOdW1iZXIpOgorICAgICAgICAoSlND
OjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkNv
bXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjp+RW5jb2Rlcik6CisgICAgICAgIChKU0M6OkNvbXBh
Y3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6RW5jb2Rlcjo6ZmluaXNoKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVN
YXA6OkVuY29kZXI6OmFwcGVuZEJ5dGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1h
cDo6RW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVN
YXA6OkVuY29kZXI6OmVuc3VyZUNhcGFjaXR5Rm9yKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoK
KyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpK
U0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0M6OkpTR2xv
YmFsRGF0YTo6b3NyU2NyYXRjaEJ1ZmZlckZvclNpemUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNW
YWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmRlc2NyaXB0aW9uKToKKyAgICAgICAg
KiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMS0wOS0wOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5l
bmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVuemlwIGluaXRpYWxpemF0aW9uIGxpc3RzIGFu
ZCBjb25zdHJ1Y3RvcnMgaW4gSlNDZWxsIGhpZXJhcmNoeSAoNS83KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDcgQEAKIAkJMEZEM0M4MjcxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR1By
b3BhZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi87IH07CiAJCTBG
RDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBE
RkdEcml2ZXIuaCAqLzsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFi
aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCAqLzsgfTsK
KwkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUzNzE0MUFCMTQy
MDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NB
bGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjkzMTJBNkY5RTEwMDY0
RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
clBvc2l4LmNwcCAqLzsgfTsKIAkJMTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFs
dWVXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi87
IH07CkBAIC03ODgsNiArNzg5LDcgQEAKIAkJMEZEM0M4MjQxNDExNUQyMjAwRkQ4MUNCIC8qIERG
R1Byb3BhZ2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJvcGFn
YXRvci5oOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDYXBhYmlsaXRpZXMuY3Bw
OyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmg7IHBhdGggPSBk
ZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDgy
RTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0SklUQ29kZU1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxv
Y2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4
QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1NjYsNiArMTU2OCw3IEBACiAJCTE0MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRDgyRTM3MTQx
QUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICovLAogCQkJCUE3QjQ4REI2MEVF
NzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBN0I0OERC
NTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oICovLAogCQkJCTg2REI2
NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3Bw
ICovLApAQCAtMjM3OSw2ICsyMzgyLDcgQEAKIAkJCQlCQzI1N0RFODBFMUY1MUM1MDAxNkI2Qzkg
LyogQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1
RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4
MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDgyRTM5
MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5n
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogI2lmbmRlZiBDb2RlQmxvY2tfaAogI2RlZmluZSBDb2RlQmxvY2tfaAogCisjaW5jbHVkZSAi
Q29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJFdmFsQ29kZUNhY2hlLmgiCiAjaW5jbHVk
ZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCkBAIC0yOTgsNiArMjk5LDE3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHVubGlua0luY29taW5nQ2FsbHMoKTsK
ICNlbmRpZgogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgdm9pZCBz
ZXRKSVRDb2RlTWFwKFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IGppdENvZGVNYXApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1faml0Q29kZU1hcCA9IGppdENvZGVNYXA7CisgICAgICAg
IH0KKyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVNYXAoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOworICAgICAgICB9CisjZW5kaWYK
KwogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCiAgICAgICAgIHsKQEAgLTY1MSw2ICs2NjMs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1faml0
Q29kZVdpdGhBcml0eUNoZWNrOwogICAgICAgICBTZW50aW5lbExpbmtlZExpc3Q8Q2FsbExpbmtJ
bmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+ID4gbV9pbmNvbWluZ0NhbGxz
OwogI2VuZGlmCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgT3duUHRy
PENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7CisjZW5kaWYKICNpZiBFTkFCTEUoVkFM
VUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1f
dmFsdWVQcm9maWxlczsKICNlbmRpZgpAQCAtNjY2LDcgKzY4MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwogCi0gICAgICAgIE93blB0
cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7IC8vIEZJWE1FIG1ha2UgdGhpcyBkbyBzb21ldGhp
bmcKKyAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5hdGl2ZTsKIAogICAgICAgICBz
dHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsMTQgKzM2NywxOCBAQCBwcml2YXRl
OgogICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4ICsgbV9jb25zdGFudDEpLmFzSW50MzIoKSA9PSAxKTsKICAgICAgICAgcmV0
dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudDEpOwogICAgIH0KLQorICAgIAorICAgIENvZGVP
cmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENvZGVPcmln
aW4obV9jdXJyZW50SW5kZXgpOworICAgIH0KIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgY3JlYXRl
IGEgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4gSWYgbm9kZXMgb2YgdGhpcyB0eXBlIGFy
ZQogICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhlIG5vZGUgIHdpbGwgaW1wbGljaXRseSBi
ZSByZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCiAgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgo
Tm9kZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIg
PSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2Rl
SW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBt
X2dyYXBoLmFwcGVuZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgY2hpbGQxLCBjaGlsZDIsIGNo
aWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdp
bigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM4
Myw3ICszODcsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcEluZm8gaW5mbywgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNo
aWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICB7CiAgICAgICAg
IE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAg
ICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4LCBpbmZvLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKSk7CisgICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIGN1cnJl
bnRDb2RlT3JpZ2luKCksIGluZm8sIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKIAogICAgICAg
ICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVz
dWx0SW5kZXgpOwpAQCAtMzkyLDcgKzM5Niw3IEBAIHByaXZhdGU6CiAgICAgTm9kZUluZGV4IGFk
ZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yLCBOb2RlSW5k
ZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXgg
Y2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0g
KE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShv
cCwgbV9jdXJyZW50SW5kZXgsIGluZm8xLCBpbmZvMiwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKIAogICAgICAgICBpZiAob3Ag
JiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgp
OwpAQCAtNDAyLDcgKzQwNiw3IEBAIHByaXZhdGU6CiAgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8xLCBPcEluZm8gaW5mbzIp
CiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3Jh
cGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKE5vZGU6OlZhckFyZywgb3As
IG1fY3VycmVudEluZGV4LCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5z
aXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOworICAgICAg
ICBtX2dyYXBoLmFwcGVuZChOb2RlKE5vZGU6OlZhckFyZywgb3AsIGN1cnJlbnRDb2RlT3JpZ2lu
KCksIGluZm8xLCBpbmZvMiwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIG1fbnVt
UGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdzKSk7CiAgICAgICAgIAogICAgICAgICBt
X251bVBhc3NlZFZhckFyZ3MgPSAwOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR1BSSW5mby5oCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnMgPSA5Owog
CiAgICAgLy8gVGhlc2UgcmVnaXN0ZXJzIG1hdGNoIHRoZSBvbGQgSklULgorICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgY2FjaGVkUmVzdWx0UmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKICAg
ICBzdGF0aWMgY29uc3QgR1BSUmVnIHRpbWVvdXRDaGVja1JlZ2lzdGVyID0gWDg2UmVnaXN0ZXJz
OjpyMTI7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IFg4NlJl
Z2lzdGVyczo6cjEzOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgdGFnVHlwZU51bWJlclJlZ2lz
dGVyID0gWDg2UmVnaXN0ZXJzOjpyMTQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjc0
LDEyICsyNzQsMTAgQEAgcHVibGljOgogICAgICAgICB1LmZwciA9IGZwcjsKICAgICB9CiAKLSNp
Zm5kZWYgTkRFQlVHCiAgICAgYm9vbCBhbGl2ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV91
c2VDb3VudDsKICAgICB9Ci0jZW5kaWYKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgaW5kZXggb2Yg
dGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTQ4
MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsMTMgKzUyLDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJ
bmRleCwgQ28KICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKICAgICB1bnNpZ25lZCByZWZD
b3VudCA9IG5vZGUucmVmQ291bnQoKTsKLSAgICBpZiAoIXJlZkNvdW50KSB7Ci0gICAgICAgIHBy
aW50ZigiJSA0ZDpcdHNraXBwZWQgJXNcbiIsIChpbnQpbm9kZUluZGV4LCBvcE5hbWUob3ApKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBib29sIHNraXBwZWQgPSAhcmVmQ291bnQ7CiAg
ICAgYm9vbCBtdXN0R2VuZXJhdGUgPSBub2RlLm11c3RHZW5lcmF0ZSgpOwotICAgIGlmIChtdXN0
R2VuZXJhdGUpCisgICAgaWYgKG11c3RHZW5lcmF0ZSkgeworICAgICAgICBBU1NFUlQocmVmQ291
bnQpOwogICAgICAgICAtLXJlZkNvdW50OworICAgIH0KIAogICAgIC8vIEV4YW1wbGUvZXhwbGFu
YXRpb24gb2YgZGF0YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAtNzcsOCArNzYsOCBAQCB2
b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgLy8gICAgICAgICAk
IyAgIC0gdGhlIGluZGV4IGluIHRoZSBDb2RlQmxvY2sgb2YgYSBjb25zdGFudCB7IGZvciBudW1l
cmljIGNvbnN0YW50cyB0aGUgdmFsdWUgaXMgZGlzcGxheWVkIHwgZm9yIGludGVnZXJzLCBpbiBi
b3RoIGRlY2ltYWwgYW5kIGhleCB9LgogICAgIC8vICAgICAgICAgaWQjICAtIHRoZSBpbmRleCBp
biB0aGUgQ29kZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIgeyBpZiBjb2RlQmxvY2sgaXMgcGFzc2Vk
IHRvIGR1bXAoKSwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAg
ICAvLyAgICAgICAgIHZhciMgLSB0aGUgaW5kZXggb2YgYSB2YXIgb24gdGhlIGdsb2JhbCBvYmpl
Y3QsIHVzZWQgYnkgR2V0R2xvYmFsVmFyL1B1dEdsb2JhbFZhciBvcGVyYXRpb25zLgotICAgIHBy
aW50ZigiJSA0ZDpcdDwlYyV1OiIsIChpbnQpbm9kZUluZGV4LCBtdXN0R2VuZXJhdGUgPyAnIScg
OiAnICcsIHJlZkNvdW50KTsKLSAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkKKyAgICBwcmludGYo
IiUgNGQ6JXM8JWMldToiLCAoaW50KW5vZGVJbmRleCwgc2tpcHBlZCA/ICIgIHNraXBwZWQgICIg
OiAiICAgICAgICAgICAiLCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJlZkNvdW50KTsKKyAg
ICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiAhc2tpcHBlZCkKICAgICAgICAgcHJpbnRmKCIldSIs
IG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAgcHJpbnRmKCItIik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5jcHAJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOCwxNyArMTExOCwx
NyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgbV9qaXQu
YWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwotICAgIG1faml0
Lm5vdGlmeUNhbGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2Vw
dGlvbkluZm8pOworICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClb
bV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1w
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwog
ICAgIAogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0Nh
bGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0
aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBK
SVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFwcGVuZENhbGxXaXRoRmFzdEV4Y2Vw
dGlvbkNoZWNrKHNsb3dDYWxsRnVuY3Rpb24sIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhd
LmNvZGVPcmlnaW4pOwogICAgIG1faml0Lm1vdmUoSW1tMzIobnVtQXJncyksIEdQUkluZm86OnJl
Z1QxKTsKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyKTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAg
ICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBkb25l
LmxpbmsoJm1faml0KTsKICAgICAKQEAgLTExMzYsNyArMTEzNiw3IEBAIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6ZW1pdENhbGwoTm9kZSYgbm8KICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKICAgICAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0
YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2Vw
dGlvbkluZm8pOworICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdl
dFRvQ2hlY2ssIGlzQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdp
bik7CiB9CiAKIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayhNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkwNSw3ICs5MDUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBh
cHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsK
KyAgICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rp
b24sIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogICAgIH0KIAog
ICAgIHZvaWQgYWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wLCBCbG9j
a0luZGV4IGRlc3RpbmF0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAs
MjM1IEBAIHZvaWQgSklUQ29tcGlsZXI6OmZpbGxUb0pTKE5vZGVJbmRleCBub2QKICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3Iobm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7CiB9CiAKKyNpZiBE
RkdfT1NSCit2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9T
UkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5LCBWZWN0b3I8Qnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApCit7CisgICAgLy8gMCkgUHJvLWZv
cm1hIHN0dWZmLgorICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOworCisjaWYgREZHX0RFQlVH
X1ZFUkJPU0UKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoYmMj
JXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpZXhpdC5tX25vZGVJbmRleCwgZXhpdC5t
X2J5dGVjb2RlSW5kZXgsIGRlYnVnT2Zmc2V0KCkpOworI2VuZGlmCisjaWYgREZHX0pJVF9CUkVB
S19PTl9TUEVDVUxBVElPTl9GQUlMVVJFCisgICAgYnJlYWtwb2ludCgpOworI2VuZGlmCisgICAg
CisjaWYgREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRQorICAgIFNwZWN1bGF0aW9uRmFp
bHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5m
bzsKKyAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgIGRlYnVnSW5m
by0+ZGVidWdPZmZzZXQgPSBkZWJ1Z09mZnNldCgpOworICAgIAorICAgIGRlYnVnQ2FsbChkZWJ1
Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworI2VuZGlmCisK
KyAgICAvLyAxKSBQZXJmb3JtIHNwZWN1bGF0aW9uIHJlY292ZXJ5LiBUaGlzIG9ubHkgY29tZXMg
aW50byBwbGF5IHdoZW4gYW4gb3BlcmF0aW9uCisgICAgLy8gICAgc3RhcnRzIG11dGF0aW5nIHN0
YXRlIGJlZm9yZSB2ZXJpZnlpbmcgdGhlIHNwZWN1bGF0aW9uIGl0IGhhcyBhbHJlYWR5IG1hZGUu
CisgICAgCisgICAgR1BSUmVnIGFscmVhZHlCb3hlZCA9IEludmFsaWRHUFJSZWc7CisgICAgCisg
ICAgaWYgKHJlY292ZXJ5KSB7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnktPnR5cGUoKSkgewor
ICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkOgorICAgICAgICAgICAgc3ViMzIocmVjb3Zlcnkt
PnNyYygpLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBhbHJl
YWR5Qm94ZWQgPSByZWNvdmVyeS0+ZGVzdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBCb29sZWFuU3BlY3VsYXRpb25DaGVjazoKKyAgICAgICAgICAg
IHhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBy
ZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEZyb20gaGVyZSBvbiwg
dGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRp
c3RhbmNlCisgICAgLy8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hl
biBpdCBpcyBzdG9yZWQuCisgICAgCisgICAgLy8gMikgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2Yg
aW50ZWdlcnMuCisgICAgCisgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVt
YmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBpZiAocmVj
b3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIgJiYgcmVjb3ZlcnkuZ3ByKCkg
IT0gYWxyZWFkeUJveGVkKQorICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CisgICAgfQorICAgIAorICAgIC8vIDMpIER1bXAg
YWxsIEdQUlMgYW5kIG5vbi11bmRlZmluZWQgY29uc3RhbnRzIGludG8gdGhlIHJlZ2lzdGVyIGZp
bGUuCisgICAgCisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CisKKyAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkg
eworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5kRm9ySW5kZXgo
aW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAg
IGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAg
ICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9w
ZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbnN0YW50OgorICAg
ICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAg
ICAgICAgICBoYXZlVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5j
b25zdGFudCgpKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDQpIER1bXAgYWxsIFVuZGVmaW5lZCdzIGludG8g
dGhlIHJlZ2lzdGVyIGZpbGUuIFVuZGVmaW5lZCBpcyB0cmVhdGVkCisgICAgLy8gICAgc3BlY2lh
bGx5IGJlY2F1c2Ugd2UgZXhwZWN0IHRoZXJlIHRvIGJlIGVub3VnaCBjYXNlcyB3aGVyZSB3ZSBk
dW1wCisgICAgLy8gICAgVW5kZWZpbmVkIHRoYXQgd2Ugd2FudCB0byBzZXQgaXQgb25jZSBpbiBh
IHJlZ2lzdGVyIGFuZCB0aGVuCisgICAgLy8gICAgc3RvcmUgdGhlIHZhbHVlIG9mIHRoYXQgcmVn
aXN0ZXIgaW50byB3aGVyZXZlciBpdCBuZWVkcyB0byBnby4KKyAgICAKKyAgICBpZiAoaGF2ZVVu
ZGVmaW5lZCkgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRl
eCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoIXJlY292ZXJ5LmNvbnN0
YW50KCkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIp
ZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgLy8gNSkgQm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJz
IHRoYW4gRlBScykKKyAgICAKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGlmIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBGUFJSZWcgZnByID0gcmVjb3ZlcnkuZnByKCk7CisgICAgICAgIEdQUlJlZyBncHIgPSBH
UFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgoZnByKSk7CisgICAgICAgIGJveERv
dWJsZShmcHIsIGdwcik7CisgICAgfQorICAgIAorICAgIC8vIDYpIER1bXAgYWxsIGRvdWJsZXMg
aW50byB0aGUgcmVnaXN0ZXIgZmlsZS4gIEFsc28gY291bnQgdGhlIG51bWJlciBvZgorICAgIC8v
ICAgIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycywgd2hpY2ggaXMgdXNlZCBhcyBhbiBvcHRp
bWl6YXRpb24gaW4KKyAgICAvLyAgICB0aGUgbmV4dCBzdGFnZS4KKyAgICAKKyAgICB1bnNpZ25l
ZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAgIAorICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4
KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJl
Y292ZXJ5KGluZGV4KTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgewor
ICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdp
c3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LmZwcigpKSksIGFkZHJlc3NGb3IoKFZpcnR1
YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAg
bnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKys7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIC8vIDcpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMuICBP
cHRpbWl6ZSBmb3IgdGhlIGNhc2UgdGhhdAorICAgIC8vICAgIHRoZSBudW1iZXIgb2YgZGlzcGxh
Y2VkIHZpcnR1YWwgcmVnaXN0ZXJzIGlzIG5vdCBtb3JlIHRoYW4gdGhlIG51bWJlcgorICAgIC8v
ICAgIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCByZWdpc3RlcnMuCisgICAgCisgICAgaWYgKG51bWJl
ck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVy
cykgeworICAgICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQg
dHJpZ2dlcnMgYWxsIHRoZSB0aW1lLCBidXQKKyAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBn
dWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXgg
PSAwOworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJl
Y292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRl
eCsrKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRpc3BsYWNlbWVudEluZGV4ID0g
MDsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNv
dmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNv
dmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIo
ZGlzcGxhY2VtZW50SW5kZXgrKyksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9w
ZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0aG0gdGhhdCB3
ZSB1c2UKKyAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3BlY3VsYXRpdmUganVtcHMs
IGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGgg
bG90cyBvZiBsaXZlIHZhbHVlcyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgIC8vIHNw
aWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3BlY3VsYXRpb24uCisgICAg
ICAgIAorICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29kZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNv
cnJlY3QgYnV0IHByb2JhYmx5IG5vdAorICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwg
aXQgY29ycmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAgLy8g
dGhlIGRpc3BsYWNlbWVudHMgYXJlIGEgcGVybXV0YXRpb24gb2YgdGhlIGRlc3RpbmF0aW9uIHZh
bHVlcywgbGlrZQorICAgICAgICAvLworICAgICAgICAvLyAxIC0+IDIKKyAgICAgICAgLy8gMiAt
PiAxCisgICAgICAgIC8vCisgICAgICAgIC8vIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IHNpbXBs
eSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3RlcnMKKyAgICAgICAgLy8gZnJvbSB0
aGVpciBvbGQgKERGRyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0
Y2gKKyAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2ZlcnJpbmcg
ZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQg
SklUKSBsb2NhdGlvbnMuCisgICAgICAgIAorICAgICAgICBpbnQ2NF90KiBzY3JhdGNoQnVmZmVy
ID0gZ2xvYmFsRGF0YSgpLT5vc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1iZXJPZkRpc3BsYWNl
ZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZGlzcGxhY2Vt
ZW50SW5kZXggPSAwOworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9y
KHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAg
ICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBkaXNwbGFjZW1lbnRJ
bmRleCsrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGlzcGxhY2VtZW50SW5kZXgg
PSAwOworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJl
Y292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
cmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNoQnVmZmVyICsgZGlz
cGxhY2VtZW50SW5kZXgrKywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmVQdHIo
R1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyA4KSBMb2Fk
IHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisg
ICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7
CisgICAgCisgICAgLy8gOSkgRml4IGNhbGwgZnJhbWUuCisgICAgCisgICAgQVNTRVJUKGNvZGVC
bG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZl
KCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2sp
KTsKKyAgICAKKyAgICAvLyAxMCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5l
IEpJVCBjb2RlLgorICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9
IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2lu
KCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIHZv
aWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVENvZGUoKS5zdGFy
dCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIEFTU0VSVChHUFJJbmZv
OjpyZWdUMSAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAganVtcChHUFJJbmZv
OjpyZWdUMSk7CisKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgIGZwcmludGYoc3RkZXJyLCAi
LT4gJXBcbiIsIGp1bXBUYXJnZXQpOworI2VuZGlmCit9CisKK3ZvaWQgSklUQ29tcGlsZXI6Omxp
bmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCit7CisgICAgVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7CisgICAgQVNTRVJUKGNvZGVC
bG9jaygpLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0
aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJU
KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCkpOworICAgIGNvZGVCbG9j
aygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCktPmRlY29kZShkZWNvZGVkQ29kZU1hcCk7
CisgICAgCisgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3VsYXRp
dmUub3NyRXhpdHMoKS5iZWdpbigpOworICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRz
RW5kID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5lbmQoKTsKKyAgICAKKyAgICB3aGlsZSAoZXhp
dHNJdGVyICE9IGV4aXRzRW5kKSB7CisgICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAqZXhp
dHNJdGVyOworICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZl
LnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpLCBkZWNvZGVkQ29kZU1h
cCk7CisgICAgICAgICsrZXhpdHNJdGVyOworICAgIH0KK30KKyNlbHNlIC8vIERGR19PU1IKIGNs
YXNzIEdlbmVyYWxpemVkUmVnaXN0ZXIgewogcHVibGljOgogICAgIEdlbmVyYWxpemVkUmVnaXN0
ZXIoKSB7IH0KQEAgLTgwMyw2ICsxMDMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua1NwZWN1
bGF0aW9uQ2hlY2tzKAogICAgIEFTU0VSVCghKGNoZWNrc0l0ZXIgIT0gY2hlY2tzRW5kKSk7CiAg
ICAgQVNTRVJUKCEoZW50cmllc0l0ZXIgIT0gZW50cmllc0VuZCkpOwogfQorI2VuZGlmIC8vIERG
R19PU1IKIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKIHsKQEAgLTg0NCwxMiAr
MTA3NCwxNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgLy8gdG8gYWxs
b3cgaXQgdG8gY2hlY2sgd2hpY2ggbm9kZXMgaW4gdGhlIGdyYXBoIG1heSBiYWlsIG91dCwgYW5k
IG1heSBuZWVkIHRvIHJlZW50ZXIgdGhlCiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBhdGguCiAg
ICAgaWYgKGNvbXBpbGVkU3BlY3VsYXRpdmUpIHsKKyNpZiBERkdfT1NSCisgICAgICAgIGxpbmtP
U1JFeGl0cyhzcGVjdWxhdGl2ZSk7CisjZWxzZQogICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5k
ZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9yKHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uQ2hlY2tzKCkp
OwogICAgICAgICBOb25TcGVjdWxhdGl2ZUpJVCBub25TcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAg
ICAgIG5vblNwZWN1bGF0aXZlLmNvbXBpbGUoY2hlY2tJdGVyYXRvcik7CiAKICAgICAgICAgLy8g
TGluayB0aGUgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIGNvcnJl
c3BvbmRpbmcgZW50cnkgcG9pbnRzIGludG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAg
ICAgIGxpbmtTcGVjdWxhdGlvbkNoZWNrcyhzcGVjdWxhdGl2ZSwgbm9uU3BlY3VsYXRpdmUpOwor
I2VuZGlmCiAgICAgfSBlbHNlIHsKICNpZiBERkdfREVCVUdfVkVSQk9TRQogICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CkBAIC04NjIs
OCArMTA5NiwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgICAgIG1f
bWV0aG9kR2V0cy5jbGVhcigpOwogICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0
aEJlZ2luKTsKIAorI2lmIERGR19PU1IKKyAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRl
cmF0b3IgY2hlY2tJdGVyYXRvcjsKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0
b3Igbm9DaGVja3M7CiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIGNoZWNr
SXRlcmF0b3Iobm9DaGVja3MpOworI2VuZGlmCiAgICAgICAgIE5vblNwZWN1bGF0aXZlSklUIG5v
blNwZWN1bGF0aXZlKCp0aGlzKTsKICAgICAgICAgbm9uU3BlY3VsYXRpdmUuY29tcGlsZShjaGVj
a0l0ZXJhdG9yKTsKICAgICB9CkBAIC05MTEsNyArMTE0OSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChtX2NhbGxzW2ldLm1faGFu
ZGxlc0V4Y2VwdGlvbnMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXR1cm5BZGRyZXNz
T2Zmc2V0ID0gbGlua0J1ZmZlci5yZXR1cm5BZGRyZXNzT2Zmc2V0KG1fY2FsbHNbaV0ubV9jYWxs
KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25JbmZvID0gbV9jYWxsc1tpXS5t
X2V4Y2VwdGlvbkluZm87CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhjZXB0aW9uSW5mbyA9
IG1fY2FsbHNbaV0ubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAg
ICBtX2NvZGVCbG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1cm5P
ZmZzZXRUb0J5dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbkluZm8p
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUz
LDcgQEAgY2xhc3MgU3BlY3VsYXRpb25SZWNvdmVyeTsKIAogc3RydWN0IEVudHJ5TG9jYXRpb247
CiBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKK3N0cnVjdCBPU1JFeGl0OwogCiAjaWZuZGVmIE5E
RUJVRwogdHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwg
dm9pZCopOwpAQCAtODIsMjEgKzgzLDIxIEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICB9CiAK
ICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHdpdGggYW4gZXhjZXB0aW9uIGhhbmRsZXIu
Ci0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBm
dW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbklu
Zm8gZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNh
bGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25D
aGVjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAg
ICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNlcHRpb25DaGVjayhl
eGNlcHRpb25DaGVjaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykK
KyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRsZXNF
eGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBh
IGNhbGwgdGhhdCBtYXkgY2F1c2UgZXhjZXB0aW9ucywgYnV0IHdoaWNoIGFyZSBoYW5kbGVkCiAg
ICAgLy8gdGhyb3VnaCBzb21lIG1lY2hhbmlzbSBvdGhlciB0aGFuIHRoZSBpbi1saW5lIGV4Y2Vw
dGlvbiBoYW5kbGVyLgotICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwg
RnVuY3Rpb25QdHIgZnVuY3Rpb24sIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBD
YWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9u
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAg
ICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0
aW9uSW5mbykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBt
X2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KQEAgLTEwNCw3ICsxMDUsNyBA
QCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOwog
ICAgIEZ1bmN0aW9uUHRyIG1fZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9l
eGNlcHRpb25DaGVjazsKLSAgICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBD
b2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFuZGxlc0V4Y2VwdGlvbnM7CiB9
OwogCkBAIC0xOTIsOSArMTkzLDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIE5vdGlmeSB0
aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2b2lk
IG5vdGlmeUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQg
bm90aWZ5Q2FsbChDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAg
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgRnVuY3Rpb25QdHIoKSwgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIEZ1bmN0
aW9uUHRyKCksIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KQEAgLTIwNSwyMCArMjA2
LDIwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBj
b2RlLCB3aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNpZ25lZCBleGNlcHRp
b25JbmZvKQorICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5j
dGlvblB0ciYgZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAg
IENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNr
ID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+
ZXhjZXB0aW9uKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25D
YWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAg
bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRp
b25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAg
IH0KICAgICAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFz
dCBleGNlcHRpb24gY2hlY2sgdGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8u
Ci0gICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlv
blB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRD
YWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0g
Y2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJv
LCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxS
ZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbklu
Zm8pKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1
bmN0aW9uLCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVu
Y3Rpb25DYWxsOwogICAgIH0KICAgICAKQEAgLTMxMSw5ICszMTIsOSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fbWV0aG9kR2V0cy5hcHBlbmQoTWV0aG9kR2V0UmVjb3JkKHNsb3dDYWxsLCBzdHJ1Y3RU
b0NvbXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93
Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBl
eGNlcHRpb25JbmZvKQorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xv
d0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luKQogICAgIHsKLSAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNv
cmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbklu
Zm8pKTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKIHBy
aXZhdGU6CkBAIC0zMjYsOCArMzI3LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsTnVtZXJp
Y1RvRG91YmxlKE5vZGVJbmRleCwgRlBSUmVnLCBHUFJSZWcgdGVtcG9yYXJ5KTsKICAgICB2b2lk
IGZpbGxJbnQzMlRvSW50ZWdlcihOb2RlSW5kZXgsIEdQUlJlZyk7CiAgICAgdm9pZCBmaWxsVG9K
UyhOb2RlSW5kZXgsIEdQUlJlZyk7CisgICAgCisjaWYgREZHX09TUgorICAgIHZvaWQgZXhpdFNw
ZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCk7CisgICAgdm9p
ZCBsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmKTsKKyNlbHNlCiAgICAgdm9pZCBqdW1wRnJv
bVNwZWN1bGF0aXZlVG9Ob25TcGVjdWxhdGl2ZShjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiwgY29u
c3QgRW50cnlMb2NhdGlvbiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBOb2RlVG9SZWdpc3Rlck1h
cCYgY2hlY2tOb2RlVG9SZWdpc3Rlck1hcCwgTm9kZVRvUmVnaXN0ZXJNYXAmIGVudHJ5Tm9kZVRv
UmVnaXN0ZXJNYXApOwogICAgIHZvaWQgbGlua1NwZWN1bGF0aW9uQ2hlY2tzKFNwZWN1bGF0aXZl
SklUJiwgTm9uU3BlY3VsYXRpdmVKSVQmKTsKKyNlbmRpZgogCiAgICAgLy8gVGhlIGdsb2JhbERh
dGEsIHVzZWQgdG8gYWNjZXNzIGNvbnN0YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KICAgICBKU0ds
b2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKQEAgLTM4NiwxMiArMzkzLDEyIEBAIHByaXZhdGU6CiAg
ICAgfTsKICAgICAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNDYWxsUmVj
b3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0No
ZWNrLCBib29sIGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICAgICAgSlNDYWxs
UmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRU
b0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAg
OiBtX2Zhc3RDYWxsKGZhc3RDYWxsKQogICAgICAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dDYWxs
KQogICAgICAgICAgICAgLCBtX3RhcmdldFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKICAgICAgICAg
ICAgICwgbV9pc0NhbGwoaXNDYWxsKQotICAgICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhj
ZXB0aW9uSW5mbykKKyAgICAgICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAg
ICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTM5OSw3ICs0MDYsNyBAQCBwcml2YXRlOgog
ICAgICAgICBDYWxsIG1fc2xvd0NhbGw7CiAgICAgICAgIERhdGFMYWJlbFB0ciBtX3RhcmdldFRv
Q2hlY2s7CiAgICAgICAgIGJvb2wgbV9pc0NhbGw7Ci0gICAgICAgIHVuc2lnbmVkIG1fZXhjZXB0
aW9uSW5mbzsKKyAgICAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgfTsKIAogICAg
IFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0ODAyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAKICNpZm5kZWYgREZHTm9kZV9oCiAjZGVmaW5lIERGR05vZGVfaAogCi0vLyBFbWl0
IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVt
cGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgorLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3Jt
YXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBo
cy4gIFNldCB0byAxIGZvciBiYXNpYyB2ZXJib3NpdHksIG9yIHRvIDIgZm9yIG1vcmUgdmVyYm9z
aXR5LgogI2RlZmluZSBERkdfREVCVUdfVkVSQk9TRSAwCiAvLyBFbmFibGUgZ2VuZXJhdGlvbiBv
ZiBkeW5hbWljIGNoZWNrcyBpbnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRApAQCAtNTAsNiArNTAsOCBAQAogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElT
QkFMRSAwCiAvLyBEaXNhYmxlIHRoZSBTcGVjdWxhdGl2ZUpJVCB3aXRob3V0IGhhdmluZyB0byB0
b3VjaCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRV9TUEVDVUxB
VElWRSAwCisvLyBEaXNhYmxlIHRoZSBub24tc3BlY3VsYXRpdmUgSklUIGFuZCB1c2UgT1NSIGlu
c3RlYWQuCisjZGVmaW5lIERGR19PU1IgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKIC8vIEdl
bmVyYXRlIHN0YXRzIG9uIGhvdyBzdWNjZXNzZnVsIHdlIHdlcmUgaW4gbWFraW5nIHVzZSBvZiB0
aGUgREZHIGppdCwgYW5kIHJlbWFpbmluZyBvbiB0aGUgaG90IHBhdGguCiAjZGVmaW5lIERGR19T
VUNDRVNTX1NUQVRTIDAKIApAQCAtNzIsOSArNzQsMzIgQEAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KFZpcnR1YWxSZWdpc3RlcikgPQogdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5kZXg7CiBzdGF0aWMg
Y29uc3QgTm9kZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOwogCi0vLyBJbmZvcm1hdGlvbiB1c2Vk
IHRvIG1hcCBiYWNrIGZyb20gYW4gZXhjZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZv
cm1hdGlvbi4KKy8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJvbSBhbiBleGNlcHRp
b24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9uLAorLy8gYW5kIHRvIGltcGxlbWVu
dCBPU1IuCiAvLyAoUHJlc2VudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgot
dHlwZWRlZiB1aW50MzJfdCBFeGNlcHRpb25JbmZvOworY2xhc3MgQ29kZU9yaWdpbiB7CitwdWJs
aWM6CisgICAgQ29kZU9yaWdpbigpCisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4
cGxpY2l0IENvZGVPcmlnaW4odWludDMyX3QgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgOiBtX2J5
dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgCisgICAgdWludDMyX3QgYnl0ZWNvZGVJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVy
biBtX2J5dGVjb2RlSW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1aW50MzJfdCBt
X2J5dGVjb2RlSW5kZXg7Cit9OwogCiAvLyBFbnRyaWVzIGluIHRoZSBOb2RlVHlwZSBlbnVtIChi
ZWxvdykgYXJlIGNvbXBvc2VkIG9mIGFuIGlkLCBhIHJlc3VsdCB0eXBlIChwb3NzaWJseSBub25l
KQogLy8gYW5kIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGl2ZSBmbGFncyAobXVzdCBnZW5lcmF0
ZSwgaXMgY29uc3RhbnQsIGV0YykuCkBAIC0zNTcsOSArMzgyLDkgQEAgc3RydWN0IE5vZGUgewog
ICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2Rl
IHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9k
ZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgTm9kZUluZGV4IGNoaWxkMSA9
IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5v
Tm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJ
bmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwgZXhjZXB0aW9u
SW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAg
ICAsIG1fcmVmQ291bnQoMCkKICAgICB7CkBAIC0zNzAsOSArMzk1LDkgQEAgc3RydWN0IE5vZGUg
ewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVu
IGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9u
SW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQor
ICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwg
Tm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNl
cHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2lu
KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAg
ICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQpA
QCAtMzg0LDkgKzQwOSw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1
Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMu
Ci0gICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcElu
Zm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRl
eCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShO
b2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGlt
bTIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwg
ZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFs
dWUpCkBAIC0zOTksOSArNDI0LDkgQEAgc3RydWN0IE5vZGUgewogICAgIH0KICAgICAKICAgICAv
LyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgY2hpbGRyZW4gYW5k
IHR3byBpbW1lZGlhdGUgdmFsdWVzLgotICAgIE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwg
RXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIHVu
c2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQorICAgIE5vZGUoVmFyQXJn
VGFnLCBOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJ
bmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQogICAg
ICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAg
ICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0
ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAg
ICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtNjQzLDYgKzY2OCwxNCBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAg
cmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKICAgICB9CisgICAgCisgICAgLy8gVGhpcyBp
cyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZG8gYSBmYXN0IGNoZWNrIG9uIHRoZSBmaXJzdCBjaGls
ZAorICAgIC8vIGJlZm9yZSBhbHNvIGRvaW5nIGEgY2hlY2sgb24gdGhlIG9wY29kZS4gVXNlIHRo
aXMgd2l0aCBjYXJlIGFuZAorICAgIC8vIGF2b2lkIGl0IGlmIHBvc3NpYmxlLgorICAgIE5vZGVJ
bmRleCBjaGlsZDFVbmNoZWNrZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZp
eGVkLmNoaWxkMTsKKyAgICB9CiAKICAgICBOb2RlSW5kZXggY2hpbGQyKCkKICAgICB7CkBAIC02
NzEsNyArNzA0LDcgQEAgc3RydWN0IE5vZGUgewogICAgIC8vIFRoaXMgZW51bSB2YWx1ZSBkZXNj
cmliZXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUuCiAgICAgTm9kZVR5cGUgb3A7CiAgICAgLy8gVXNl
ZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5IGlt
cGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgotICAgIEV4Y2VwdGlvbkluZm8gZXhjZXB0
aW9uSW5mbzsKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgLy8gUmVmZXJlbmNlcyB0
byB1cCB0byAzIGNoaWxkcmVuICgwIGZvciBubyBjaGlsZCkuCiAgICAgdW5pb24gewogICAgICAg
ICBzdHJ1Y3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
NCw2ICs0MzQsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0FyaXRoT3AoTm9kCiAK
IHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4SXRl
cmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CisjaWYgREZHX09TUgorICAgIFVO
VVNFRF9QQVJBTShjaGVja0l0ZXJhdG9yKTsKKyNlbHNlCiAgICAgLy8gQ2hlY2sgZm9yIHNwZWN1
bGF0aW9uIGNoZWNrcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIGluIHRoZQog
ICAgIC8vIHNwZWN1bGF0aXZlIHBhdGguIERvIG5vdCBjaGVjayBmb3IgTm9kZUluZGV4IDAsIHNp
bmNlIHRoaXMgaXMgY2hlY2tlZAogICAgIC8vIGluIHRoZSBvdXRlcm1vc3QgY29tcGlsZSBsYXll
ciwgYXQgdGhlIGhlYWQgb2YgdGhlIG5vbi1zcGVjdWxhdGl2ZSBwYXRoCkBAIC00NDIsNiArNDQ1
LDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgIC8vIGFz
IHNwZWN1bGF0aW9uIGNoZWNrcyBhdCB0aGlzIGluZGV4KS4KICAgICBpZiAobV9jb21waWxlSW5k
ZXggJiYgY2hlY2tJdGVyYXRvci5oYXNDaGVja0F0SW5kZXgobV9jb21waWxlSW5kZXgpKQogICAg
ICAgICB0cmFja0VudHJ5KG1faml0LmxhYmVsKCkpOworI2VuZGlmCiAKICAgICBOb2RlVHlwZSBv
cCA9IG5vZGUub3A7CiAKQEAgLTEyODMsOCArMTI4NywxMCBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNw
ZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yKQogewogICAgIC8vIENo
ZWNrIGZvciBzcGVjdWxhdGlvbiBjaGVja3MgYWRkZWQgYXQgZnVuY3Rpb24gZW50cnkgKGNoZWNr
aW5nIGFyZ3VtZW50IHR5cGVzKS4KKyNpZiAhREZHX09TUgogICAgIGlmIChjaGVja0l0ZXJhdG9y
Lmhhc0NoZWNrQXRJbmRleChtX2NvbXBpbGVJbmRleCkpCiAgICAgICAgIHRyYWNrRW50cnkobV9q
aXQubGFiZWwoKSk7CisjZW5kaWYKIAogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwogICAg
IGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUo
KTsgKyttX2Jsb2NrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsx
NDIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgcmV0
dXJuIEludmFsaWRHUFJSZWc7CiB9CiAKKyNpZiAhREZHX09TUgogU3BlY3VsYXRpb25DaGVjazo6
U3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVK
SVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fY2hlY2soY2hlY2spCiAg
ICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQpAQCAtMTY4LDYgKzE2OSw1NiBA
QCBTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKE1hY3JvCiAgICAgICAgICAgICBt
X2ZwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXggPSBOb05vZGU7CiAgICAgfQogfQorI2Vu
ZGlmCisKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0KSBjb25zdAoreworICAgIGZw
cmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7Cit9CisKK3ZvaWQgVmFsdWVSZWNv
dmVyeTo6ZHVtcChGSUxFKiBvdXQpCit7CisgICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgeworICAg
IGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgZnByaW50ZihvdXQsICIl
JSVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSW5GUFI6CisgICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQUkluZm86OmRlYnVnTmFt
ZShmcHIoKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIiolZCIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgZnByaW50ZihvdXQsICJb
JXNdIiwgY29uc3RhbnQoKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBEb250S25vdzoKKyAgICAgICAgZnByaW50ZihvdXQsICIhIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGZwcmludGYob3V0LCAiPyVkIiwgdGVjaG5pcXVlKCkpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNpZiBERkdfT1NSCitPU1JFeGl0OjpPU1JFeGl0
KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25l
ZCByZWNvdmVyeUluZGV4KQorICAgIDogbV9jaGVjayhjaGVjaykKKyAgICAsIG1fbm9kZUluZGV4
KGppdC0+bV9jb21waWxlSW5kZXgpCisgICAgLCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2ppdC5n
cmFwaCgpW2ppdC0+bV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKQor
ICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCisgICAgLCBtX2FyZ3VtZW50cyhq
aXQtPm1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAsIG1fdmFyaWFibGVzKGppdC0+bV92YXJpYWJs
ZXMuc2l6ZSgpKQorICAgICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQp
Cit7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVu
dHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBq
aXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsK
KyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5z
aXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGppdC0+
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOworfQor
I2VuZGlmCiAKIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludChOb2RlSW5k
ZXggbm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpCiB7CkBAIC02NjgsNiArNzE5
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihu
b2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgfQorICAgICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2Fy
eSB0byByZXRyaWV2ZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgLy8gdGhpcyBieXRlY29kZSB2YXJp
YWJsZSBmcm9tIHJlZ2lzdGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4gdGhlIHJlZ2lzdGVyIGZp
bGUuCisgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkp
ID0gVmFsdWVTb3VyY2UoKTsKKyAgICAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9jYWwo
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMzY3LDExICsxNDIyLDE5IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIH0KLQorICAgIAogICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVzdEdl
bmVyYXRlKCkpCiAgICAgICAgIHVzZShtX2NvbXBpbGVJbmRleCk7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUu
b3AgPT0gU2V0TG9jYWwpOworICAgIAorICAgIHNldE5vZGVJbmRleEZvck9wZXJhbmQobm9kZS5j
aGlsZDEoKSwgbm9kZS5sb2NhbCgpKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS5sb2Nh
bCgpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smIGJsb2Nr
KQogewogICAgIEFTU0VSVChtX2NvbXBpbGVJbmRleCA9PSBibG9jay5iZWdpbik7CkBAIC0xMzc5
LDI5ICsxNDQyLDU4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYK
ICNpZiBERkdfSklUX0JSRUFLX09OX0VWRVJZX0JMT0NLCiAgICAgbV9qaXQuYnJlYWtwb2ludCgp
OwogI2VuZGlmCisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpCisgICAgICAg
IG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKIAogICAgIGZvciAoOyBtX2NvbXBpbGVJ
bmRleCA8IGJsb2NrLmVuZDsgKyttX2NvbXBpbGVJbmRleCkgewogICAgICAgICBOb2RlJiBub2Rl
ID0gbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KKyAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpIHsKICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcgTm9kZSBAJWQgYXQgSklUIG9m
ZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbV9qaXQuZGVidWdPZmZzZXQoKSk7
CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIHNraXBwaW5nIE5v
ZGUgQCVkIGF0IEpJVCBvZmZzZXQgMHgleCAgICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbV9q
aXQuZGVidWdPZmZzZXQoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IFNl
dExvY2FsKQorICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UKKyAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCBhdCBK
SVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNl
dCgpKTsKICNlbmRpZgogI2lmIERGR19KSVRfQlJFQUtfT05fRVZFUllfTk9ERQotICAgICAgICBt
X2ppdC5icmVha3BvaW50KCk7CisgICAgICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5k
aWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBjb21waWxlKG5vZGUpOwot
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBjb21waWxlKG5vZGUpOworICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwog
I2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAgICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKQotICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiAlc1xuIiwgZGF0YUZvcm1hdFRvU3RyaW5nKG1f
Z2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV0ucmVnaXN0ZXJGb3JtYXQoKSkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAg
ICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIi0+ICVzICAgICIsIGRhdGFGb3JtYXRUb1N0cmluZyhtX2dlbmVyYXRpb25JbmZvW25v
ZGUudmlydHVhbFJlZ2lzdGVyKCldLnJlZ2lzdGVyRm9ybWF0KCkpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKKyNlbmRpZgorICAg
ICAgICB9CisgICAgICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFID49IDIgICAgICAgIAorICAg
ICAgICBmb3IgKGludCBvcGVyYW5kID0gLW1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmls
ZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgb3BlcmFuZCA8IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemU7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5
Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyAgICAgICAgCisgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiIDogIik7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gMDsgb3Bl
cmFuZCA8IChpbnQpbV92YXJpYWJsZXMuc2l6ZSgpOyArK29wZXJhbmQpCisgICAgICAgICAgICBj
b21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyAg
ICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJc
biIpOwogI2VuZGlmCi0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAg
ICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgfQogfQogCkBAIC0xNDUyLDYgKzE1NDQsMTE4IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCitWYWx1ZVJlY292ZXJ5IFNw
ZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYg
dmFsdWVTb3VyY2UpCit7CisgICAgaWYgKCF2YWx1ZVNvdXJjZS5pc1NldCgpKQorICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7CisKKyAgICBpZiAo
bV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCisgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNv
dXJjZS5ub2RlSW5kZXgoKSkpOworICAgIAorICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9qaXQuZ3Jh
cGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKV07CisgICAgaWYgKCFub2RlUHRyLT5zaG91bGRH
ZW5lcmF0ZSgpKSB7CisgICAgICAgIC8vIEl0J3MgbGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBu
b2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9wZXJhbmQsCisgICAgICAgIC8vIGV2
ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9T
Ui4KKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkp
OworICAgIH0KKyAgICAKKyAgICBHZW5lcmF0aW9uSW5mbyogaW5mb1B0ciA9ICZtX2dlbmVyYXRp
b25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICBpZiAoIWluZm9QdHItPmFs
aXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkp
IHsKKyAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0
aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCisgICAgICAgIC8vIFRoZXJlIGFy
ZSBmb3VyIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vCisgICAgICAgIC8vIFZhbHVlVG9OdW1i
ZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVt
YmVyIG5vZGUKKyAgICAgICAgLy8gICAgdGhlbiBpdCBtZWFucyB0aGF0IGFsbCByZW1haW5pbmcg
dXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2ZSBwZXJmb3JtZWQgYQorICAgICAgICAvLyAgICBW
YWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiAgVGh1cywgd2UgY2FuIHN1YnN0aXR1dGUg
VmFsdWVUb051bWJlci4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFsdWVUb0ludDMyOiBMaWtl
d2lzZSwgaWYgdGhlIG9ubHkgcmVtYWluaW5nIGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMK
KyAgICAgICAgLy8gICAgVmFsdWVUb0ludDMyLCB0aGVuIHdlIGNhbiB1c2UgaXQuICBCdXQgaWYg
dGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRv
TnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAor
ICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBj
b252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCisgICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZl
IGNvbnZlcnRlZCB0byBJbnQzMi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVUludDMyVG9OdW1i
ZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051
bWJlcgorICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVz
IHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAgLy8gICAgcmF0aGVy
IHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUg
cmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVy
LCBidXQgaXRzCisgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiAgVGhp
cyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9mCisgICAgICAgIC8vICAgIHRo
ZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChu
b2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2pp
dC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlv
bkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgaWYgKGluZm9Q
dHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4KQorICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KCFmb3VuZCkgeworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5v
Tm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsK
KyAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7
IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdp
c3RlcikgeworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0
aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgICAgIGlmICghaW5mby5hbGl2
ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAo
aW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUlu
ZGV4KCldOworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMVVuY2hlY2tlZCgpICE9IHZh
bHVlU291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZh
bHVlVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJbmRleCA9IGlu
Zm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJ
bmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHVp
bnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKKyAgICAgICAgICAgIGlmICh2YWx1
ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNl
ID0gdmFsdWVUb051bWJlckluZGV4OworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMy
SW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVU
b0ludDMySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9
IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVy
SW5kZXg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2Ug
PSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAh
PSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9k
ZUluZGV4VG9Vc2VdOworICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5m
b1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICAgICAgQVNTRVJUKGlu
Zm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2Up
OworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgQVNT
RVJUKGluZm9QdHItPmFsaXZlKCkpOworCisgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7CisgICAg
fQorICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25lKQorICAg
ICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAg
IAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAg
cHJpdmF0ZToKICAgICBHUFJSZWcgbV9zcmM7CiB9OwogCisjaWYgIURGR19PU1IKIC8vID09PSBT
cGVjdWxhdGlvbkNoZWNrID09PQogLy8KIC8vIFRoaXMgc3RydWN0dXJlIHJlY29yZHMgYSBiYWls
LW91dCBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoLApAQCAtOTEsNyArOTIsMTkxIEBAIHN0cnVj
dCBTcGVjdWxhdGlvbkNoZWNrIHsKICAgICBSZWdpc3RlckluZm8gbV9mcHJJbmZvW0ZQUkluZm86
Om51bWJlck9mUmVnaXN0ZXJzXTsKIH07CiB0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxTcGVjdWxh
dGlvbkNoZWNrLCAxNj4gU3BlY3VsYXRpb25DaGVja1ZlY3RvcjsKKyNlbmRpZiAvLyAhREZHX09T
UgogCitjbGFzcyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAg
ICAgICA6IG1fbm9kZUluZGV4KE5vTm9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxp
Y2l0IFZhbHVlU291cmNlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgICAgIDogbV9ub2RlSW5k
ZXgobm9kZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXggIT0gTm9Ob2RlOworICAgIH0KKyAg
ICAKKyAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OworICAgIH0KKyAgICAKKyNp
Zm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYKKyAg
ICAKK3ByaXZhdGU6CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworfTsKKyAgICAKKy8vIERl
c2NyaWJlcyBob3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0ZXIg
YXQgYSBnaXZlbgorLy8gY29kZSBwb2ludC4KK2VudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7
CisgICAgLy8gSXQncyBhbHJlYWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGF0IHRoZSByaWdodCBs
b2NhdGlvbi4KKyAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBpbiBhIHJl
Z2lzdGVyLgorICAgIEluR1BSLAorICAgIFVuYm94ZWRJbnQzMkluR1BSLAorICAgIEluRlBSLAor
ICAgIC8vIEl0J3MgaW4gdGhlIHJlZ2lzdGVyIGZpbGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2Nh
dGlvbi4KKyAgICBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGEgY29uc3Rh
bnQuCisgICAgQ29uc3RhbnQsCisgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcmVjb3ZlciBpdC4K
KyAgICBEb250S25vdworfTsKKworY2xhc3MgVmFsdWVSZWNvdmVyeSB7CitwdWJsaWM6CisgICAg
VmFsdWVSZWNvdmVyeSgpCisgICAgICAgIDogbV90ZWNobmlxdWUoRG9udEtub3cpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZp
bGUoKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5HUFIoR1BSUmVn
IGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFG
b3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsK
KyAgICAgICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAg
ICByZXN1bHQubV90ZWNobmlxdWUgPSBVbmJveGVkSW50MzJJbkdQUjsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5HUFI7CisgICAgICAgIHJlc3VsdC5t
X3NvdXJjZS5ncHIgPSBncHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAg
ICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5G
UFI7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKQorICAgIHsKKyAgICAgICAg
VmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJlZyA9
IHZpcnR1YWxSZWc7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBWYWx1ZVJlY292ZXJ5IGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQ29u
c3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29k
ZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFZhbHVl
UmVjb3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWU7
IH0KKyAgICAKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3RlY2huaXF1ZSA9PSBJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVkSW50MzJJbkdQUik7
CisgICAgICAgIHJldHVybiBtX3NvdXJjZS5ncHI7CisgICAgfQorICAgIAorICAgIEZQUlJlZyBm
cHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluRlBSKTsK
KyAgICAgICAgcmV0dXJuIG1fc291cmNlLmZwcjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90
ZWNobmlxdWUgPT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpOworICAgICAgICByZXR1cm4gbV9z
b3VyY2UudmlydHVhbFJlZzsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBjb25zdGFudCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gQ29uc3RhbnQpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fc291cmNlLmNvbnN0YW50KTsKKyAgICB9Cisg
ICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpOworI2VuZGlmCisg
ICAgCitwcml2YXRlOgorICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgbV90ZWNobmlxdWU7Cisg
ICAgdW5pb24geworICAgICAgICBHUFJSZWcgZ3ByOworICAgICAgICBGUFJSZWcgZnByOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUg
Y29uc3RhbnQ7CisgICAgfSBtX3NvdXJjZTsKK307CisKKyNpZiBERkdfT1NSCisvLyA9PT0gT1NS
RXhpdCA9PT0KKy8vCisvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhl
IHNwZWN1bGF0aXZlIHBhdGggYnkKKy8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4KK3N0cnVj
dCBPU1JFeGl0IHsKKyAgICBPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2
ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSAwKTsKKyAgICAKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBtX2NoZWNrOworICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKKyAgICB1bnNp
Z25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgCisgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4
OworICAgIAorICAgIC8vIENvbnZlbmllbnQgd2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZhbHVlUmVj
b3ZlcmllcyB3aGlsZSBiZWluZworICAgIC8vIGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2ZXJzdXMg
dmFyaWFibGUuCisgICAgaW50IG51bWJlck9mUmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1f
YXJndW1lbnRzLnNpemUoKSArIG1fdmFyaWFibGVzLnNpemUoKTsgfQorICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4g
bV9hcmd1bWVudHNbaW5kZXhdOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXggLSBt
X2FyZ3VtZW50cy5zaXplKCldOworICAgIH0KKyAgICBib29sIGlzQXJndW1lbnQoaW50IGluZGV4
KSBjb25zdCB7IHJldHVybiBpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAg
aW50IGFyZ3VtZW50Rm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGluZGV4OworICAgIH0KKyAgICBpbnQgdmFyaWFibGVGb3JJbmRleChpbnQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7Cisg
ICAgfQorICAgIGludCBvcGVyYW5kRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemU7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsK
KyAgICB9CisgICAgCisgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJndW1lbnRzOwor
ICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0
U2V0T3BlcmFuZDsKK307Cit0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCAxNj4gT1NS
RXhpdFZlY3RvcjsKKyNlbmRpZiAvLyBERkdfT1NSCiAKIC8vID09PSBTcGVjdWxhdGl2ZUpJVCA9
PT0KIC8vCkBAIC0xMDUsMjEgKzI5MCwyNSBAQCB0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxTcGVj
dWxhdGlvbkNoZWNrCiAvLyBvbmx5IHNwZWN1bGF0aXZlbHkgYmVlbiBhc3NlcnRlZCkgdGhyb3Vn
aCB0aGUgZGF0YWZsb3cuCiBjbGFzcyBTcGVjdWxhdGl2ZUpJVCA6IHB1YmxpYyBKSVRDb2RlR2Vu
ZXJhdG9yIHsKICAgICBmcmllbmQgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2s7CisgICAgZnJpZW5k
IHN0cnVjdCBPU1JFeGl0OwogcHVibGljOgotICAgIFNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVy
JiBqaXQpCi0gICAgICAgIDogSklUQ29kZUdlbmVyYXRvcihqaXQsIHRydWUpCi0gICAgICAgICwg
bV9jb21waWxlT2theSh0cnVlKQotICAgIHsKLSAgICB9CisgICAgU3BlY3VsYXRpdmVKSVQoSklU
Q29tcGlsZXImIGppdCk7CiAKICAgICBib29sIGNvbXBpbGUoKTsKIAogICAgIC8vIFJldHJpZXZl
IHRoZSBsaXN0IG9mIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoLAogICAgIC8v
IGFuZCBhZGRpdGlvbmFsIHJlY292ZXJ5IGluZm9ybWF0aW9uLgorI2lmICFERkdfT1NSCiAgICAg
U3BlY3VsYXRpb25DaGVja1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3MoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fc3BlY3VsYXRpb25DaGVja3M7CiAgICAgfQorI2Vsc2UKKyAgICBPU1JFeGl0
VmVjdG9yJiBvc3JFeGl0cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9vc3JFeGl0czsKKyAg
ICB9CisjZW5kaWYKICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiBzcGVjdWxhdGlvblJlY292ZXJ5
KHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIC8vIFNwZWN1bGF0aW9uQ2hlY2s6Om1fcmVj
b3ZlcnlJbmRleCBpcyBvZmZzZXQgYnkgMSwKQEAgLTEzOSw2ICszMjgsNyBAQCBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBKSVRDb2RlR2VuZXJhdG9yOwogICAgIAogICAgIHZvaWQgY29tcGls
ZShOb2RlJik7CisgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7CiAgICAgdm9pZCBjb21w
aWxlKEJhc2ljQmxvY2smKTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5cGVzKCk7CkBAIC0y
MDMsNyArMzkzLDExIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgICAgICByZXR1cm47CisjaWYgIURGR19PU1IKICAgICAgICAgbV9zcGVjdWxh
dGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlzKSk7Cisj
ZWxzZQorICAgICAgICBtX29zckV4aXRzLmFwcGVuZChPU1JFeGl0KGp1bXBUb0ZhaWwsIHRoaXMp
KTsKKyNlbmRpZgogICAgIH0KICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRoIGFk
ZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5
KQpAQCAtMjExLDcgKzQwNSwxMSBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fc3BlY3VsYXRpb25SZWNvdmVyeUxp
c3QuYXBwZW5kKHJlY292ZXJ5KTsKKyNpZiAhREZHX09TUgogICAgICAgICBtX3NwZWN1bGF0aW9u
Q2hlY2tzLmFwcGVuZChTcGVjdWxhdGlvbkNoZWNrKGp1bXBUb0ZhaWwsIHRoaXMsIG1fc3BlY3Vs
YXRpb25SZWNvdmVyeUxpc3Quc2l6ZSgpKSk7CisjZWxzZQorICAgICAgICBtX29zckV4aXRzLmFw
cGVuZChPU1JFeGl0KGp1bXBUb0ZhaWwsIHRoaXMsIG1fc3BlY3VsYXRpb25SZWNvdmVyeUxpc3Qu
c2l6ZSgpKSk7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNh
bGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgpAQCAtMjIyLDE4ICs0
MjAsNjQgQEAgcHJpdmF0ZToKIAogICAgIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgogICAgIEdQUlJl
ZyBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5G
b3JtYXQpOwotCisgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUsIGR1cmluZyBzcGVjdWxhdGl2
ZSBnZW5lcmF0aW9uLCB0byByZWFjaCBhIHNpdHVhdGlvbiBpbiB3aGljaCB3ZQogICAgIC8vIGNh
biBzdGF0aWNhbGx5IGRldGVybWluZSBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbCAoZm9yIGV4YW1w
bGUsIHdoZW4gdHdvIG5vZGVzCiAgICAgLy8gd2lsbCBtYWtlIGNvbmZsaWN0aW5nIHNwZWN1bGF0
aW9ucyBhYm91dCB0aGUgc2FtZSBvcGVyYW5kKS4gSW4gc3VjaCBjYXNlcyB0aGlzCiAgICAgLy8g
ZmxhZyBpcyBjbGVhcmVkLCBpbmRpY2F0aW5nIG5vIGZ1cnRoZXIgY29kZSBnZW5lcmF0aW9uIHNo
b3VsZCB0YWtlIHBsYWNlLgogICAgIGJvb2wgbV9jb21waWxlT2theTsKKyNpZiAhREZHX09TUgog
ICAgIC8vIFRoaXMgdmVjdG9yIHRyYWNrcyBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUg
cGF0aCB0byB0aGUgbm9uLXNwZWN1bGF0aXZlIG9uZS4KICAgICBTcGVjdWxhdGlvbkNoZWNrVmVj
dG9yIG1fc3BlY3VsYXRpb25DaGVja3M7CisjZWxzZQorICAgIC8vIFRoaXMgdmVjdG9yIHRyYWNr
cyBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCB0byB0aGUgb2xkIEpJVC4KKyAg
ICBPU1JFeGl0VmVjdG9yIG1fb3NyRXhpdHM7CisjZW5kaWYKICAgICAvLyBTb21lIGJhaWwtb3V0
cyBuZWVkIHRvIHJlY29yZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlY29yZGluZyBzcGVjaWZp
YyByZWNvdmVyeQogICAgIC8vIHRvIGJlIHBlcmZvcm1lZCAoZm9yIGV4YW1wbGUsIG9uIGRldGVj
dGVkIG92ZXJmbG93IGZyb20gYW4gYWRkLCB3ZSBtYXkgbmVlZCB0bwogICAgIC8vIHJldmVyc2Ug
dGhlIGFkZGl0aW9uIGlmIGFuIG9wZXJhbmQgaXMgYmVpbmcgb3ZlcndyaXR0ZW4pLgogICAgIFZl
Y3RvcjxTcGVjdWxhdGlvblJlY292ZXJ5LCAxNj4gbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdDsK
KyAgICAKKyAgICAvLyBUcmFja2luZyBmb3Igd2hpY2ggbm9kZXMgYXJlIGN1cnJlbnRseSBob2xk
aW5nIHRoZSB2YWx1ZXMgb2YgYXJndW1lbnRzIGFuZCBieXRlY29kZQorICAgIC8vIG9wZXJhbmQt
aW5kZXhlZCB2YXJpYWJsZXMuCisKKyAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZUZvck9wZXJh
bmQoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VSZWZlcmVu
Y2VGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldE5vZGVJbmRl
eEZvck9wZXJhbmQoTm9kZUluZGV4IG5vZGVJbmRleCwgaW50IG9wZXJhbmQpCisgICAgeworICAg
ICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCkgPSBWYWx1ZVNvdXJj
ZShub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgd2l0aCBjYXJlLCBz
aW5jZSBpdCBib3RoIHJldHVybnMgYSByZWZlcmVuY2UgaW50byBhbiBhcnJheQorICAgIC8vIGFu
ZCBwb3RlbnRpYWxseSByZXNpemVzIHRoZSBhcnJheS4gIFNvIGl0IHdvdWxkIG5vdCBiZSByaWdo
dCB0byBjYWxsIHRoaXMKKyAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3JtIG9wZXJhbmRzIG9u
IGJvdGggcmVmZXJlbmNlcywgc2luY2UgdGhlIG9uZSBmcm9tCisgICAgLy8gdGhlIGZpcnN0IGNh
bGwgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2VS
ZWZlcmVuY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVy
YW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplOworICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVz
LnNpemUoKSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07CisgICAgfQorICAg
IAorICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFZh
bHVlU291cmNlLCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAg
ICAKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVl
U291cmNlJiB2YWx1ZVNvdXJjZSk7CisKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJl
Y292ZXJ5Rm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1
ZVJlY292ZXJ5Rm9yKHZhbHVlU291cmNlRm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQogfTsK
IAogCkBAIC00NTMsMTEgKzY5NywxNyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX2dwck9ySW52
YWxpZDsKIH07CiAKLQogLy8gPT09IFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yID09PQog
Ly8KIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCB0byBj
aGVjayB3aGljaAogLy8gbm9kZXMgcmVxdWlyZSBlbnRyeSBwb2ludHMgZnJvbSB0aGUgc3BlY3Vs
YXRpdmUgcGF0aC4KKyNpZiBERkdfT1NSCisvLyBUaGlzIGJlY29tZXMgYSBzdHViIGlmIE9TUiBp
cyBlbmFibGVkLgorY2xhc3MgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgeworcHVibGlj
OgorICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKCkgeyB9Cit9OworI2Vsc2UKIGNs
YXNzIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTcGVjdWxh
dGlvbkNoZWNrSW5kZXhJdGVyYXRvcihTcGVjdWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlv
bkNoZWNrcykKQEAgLTQ4Myw3ICs3MzMsMTYgQEAgcHJpdmF0ZToKICAgICBTcGVjdWxhdGlvbkNo
ZWNrVmVjdG9yOjpJdGVyYXRvciBtX2l0ZXI7CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6
SXRlcmF0b3IgbV9lbmQ7CiB9OworI2VuZGlmCiAKK2lubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3Bl
Y3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKKyAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0
LCB0cnVlKQorICAgICwgbV9jb21waWxlT2theSh0cnVlKQorICAgICwgbV9hcmd1bWVudHMoaml0
LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnMpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29k
ZUJsb2NrKCktPm1fbnVtVmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkKK3sKK30KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29k
ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wYWN0SklU
Q29kZU1hcF9oCisjZGVmaW5lIENvbXBhY3RKSVRDb2RlTWFwX2gKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
RmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEdpdmVzIHlvdSBhIGNvbXByZXNz
ZWQgbWFwIGJldHdlZW4gYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFuZCBtYWNoaW5lIGNvZGUK
Ky8vIGVudHJ5IHBvaW50cy4gVGhlIGNvbXByZXNzaW9uIHNpbXBseSB0cmllcyB0byB1c2UgZWl0
aGVyIDEsIDIsIG9yIDQgYnl0ZXMgZm9yCisvLyBhbnkgZ2l2ZW4gb2Zmc2V0LiBUaGUgbGFyZ2Vz
dCBvZmZzZXQgdGhhdCBjYW4gYmUgc3RvcmVkIGlzIDJeMzAuCisKKy8vIEV4YW1wbGUgdXNlOgor
Ly8KKy8vIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyIGVuY29kZXIobWFwKTsKKy8vIGVuY29k
ZXIuYXBwZW5kKGEsIGIpOworLy8gZW5jb2Rlci5hcHBlbmQoYywgZCk7IC8vIHByZWNvbmRpdGlv
bnM6IGMgPj0gYSwgZCA+PSBiCisvLyBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1hcCA9IGVu
Y29kZXIuZmluaXNoKCk7CisvLworLy8gQXQgc29tZSBsYXRlciB0aW1lOgorLy8KKy8vIFZlY3Rv
cjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWQ7CisvLyBtYXAtPmRlY29kZShkZWNv
ZGVkKTsKKworc3RydWN0IEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCB7CisgICAgQnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0KCkgeyB9CisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQorICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIG1fbWFjaGlu
ZUNvZGVPZmZzZXQobWFjaGluZUNvZGVPZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNl
dDsKKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldEJ5dGVjb2RlSW5kZXgoQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1h
cHBpbmctPm1fYnl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGlubGluZSB1
bnNpZ25lZCBnZXRNYWNoaW5lQ29kZU9mZnNldChCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1h
cHBpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNl
dDsKKyAgICB9Cit9OworCitjbGFzcyBDb21wYWN0SklUQ29kZU1hcCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgfkNvbXBhY3RKSVRDb2RlTWFwKCkKKyAgICB7
CisgICAgICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkZWNvZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldD4mIHJlc3VsdCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzQnl0
ZWNvZGVJbmRleCA9IDA7CisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzTWFjaGluZUNvZGVPZmZz
ZXQgPSAwOworICAgICAgICAKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShtX251bWJlck9mRW50cmll
cyk7CisgICAgICAgIHVuc2lnbmVkIGogPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9udW1iZXJPZkVudHJpZXM7ICsraSkgeworICAgICAgICAgICAgcHJldmlvdXNCeXRl
Y29kZUluZGV4ICs9IGRlY29kZU51bWJlcihqKTsKKyAgICAgICAgICAgIHByZXZpb3VzTWFjaGlu
ZUNvZGVPZmZzZXQgKz0gZGVjb2RlTnVtYmVyKGopOworICAgICAgICAgICAgcmVzdWx0W2ldLm1f
Ynl0ZWNvZGVJbmRleCA9IHByZXZpb3VzQnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIHJlc3Vs
dFtpXS5tX21hY2hpbmVDb2RlT2Zmc2V0ID0gcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoaiA9PSBtX3NpemUpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgQ29tcGFjdEpJVENvZGVNYXAodWludDhfdCogYnVmZmVyLCB1bnNpZ25lZCBzaXpl
LCB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMpCisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyNlbmRpZgorICAg
ICAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKG51bWJlck9mRW50cmllcykKKyAgICB7CisgICAgICAg
IFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICB9CisgICAgCisgICAgdWludDhfdCBhdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBtX2J1ZmZlcltpbmRleF07CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IGRlY29kZU51bWJlcih1bnNpZ25lZCYgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICB1aW50
OF90IGhlYWRWYWx1ZSA9IGF0KGluZGV4KyspOworICAgICAgICBpZiAoIShoZWFkVmFsdWUgJiAx
MjgpKQorICAgICAgICAgICAgcmV0dXJuIGhlYWRWYWx1ZTsKKyAgICAgICAgaWYgKCEoaGVhZFZh
bHVlICYgNjQpKQorICAgICAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVh
ZFZhbHVlICYgfjEyOCkgPDwgOCkgfCBhdChpbmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgc2Vj
b25kID0gYXQoaW5kZXgrKyk7CisgICAgICAgIHVuc2lnbmVkIHRoaXJkICA9IGF0KGluZGV4Kysp
OworICAgICAgICB1bnNpZ25lZCBmb3VydGggPSBhdChpbmRleCsrKTsKKyAgICAgICAgcmV0dXJu
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhZFZhbHVlICYgfigxMjggKyA2NCkpIDw8IDI0KSB8
IChzZWNvbmQgPDwgMTYpIHwgKHRoaXJkIDw8IDgpIHwgZm91cnRoOworICAgIH0KKyAgICAKKyAg
ICB1aW50OF90KiBtX2J1ZmZlcjsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQg
bV9zaXplOworI2VuZGlmCisgICAgdW5zaWduZWQgbV9udW1iZXJPZkVudHJpZXM7CisgICAgCitw
dWJsaWM6CisgICAgY2xhc3MgRW5jb2RlciB7CisgICAgcHVibGljOgorICAgICAgICBFbmNvZGVy
KCk7CisgICAgICAgIH5FbmNvZGVyKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNh
cGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJlck9mRW50cmllc1RvQWRkKTsKKyAgICAgICAgdm9pZCBh
cHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQp
OworICAgICAgICBQYXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBmaW5pc2goKTsKKyAgICAg
ICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBhcHBlbmRCeXRlKHVpbnQ4X3QgdmFsdWUp
OworICAgICAgICB2b2lkIGVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1ZSk7CisgICAgCisgICAg
ICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgICAg
IHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVz
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7Cisg
ICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKKyAgICB9OworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFbmNvZGVyOworfTsKKworaW5saW5lIENvbXBhY3RK
SVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNvZGVyKCkKKyAgICA6IG1fYnVmZmVyKDApCisgICAgLCBt
X3NpemUoMCkKKyAgICAsIG1fY2FwYWNpdHkoMCkKKyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKDAp
CisgICAgLCBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCgwKQorICAgICwgbV9wcmV2aW91c01hY2hp
bmVDb2RlT2Zmc2V0KDApCit7Cit9CisKK2lubGluZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rl
cjo6fkVuY29kZXIoKQoreworICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgZmFzdEZyZWUobV9i
dWZmZXIpOworfQorICAgICAgICAKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNv
ZGVyOjphcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVP
ZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXggPj0gbV9wcmV2aW91c0J5dGVjb2Rl
SW5kZXgpOworICAgIEFTU0VSVChtYWNoaW5lQ29kZU9mZnNldCA+PSBtX3ByZXZpb3VzTWFjaGlu
ZUNvZGVPZmZzZXQpOworICAgIGVuc3VyZUNhcGFjaXR5Rm9yKDEpOworICAgIGVuY29kZU51bWJl
cihieXRlY29kZUluZGV4IC0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgpOworICAgIGVuY29kZU51
bWJlcihtYWNoaW5lQ29kZU9mZnNldCAtIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7Cisg
ICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgIG1fcHJldmlv
dXNNYWNoaW5lQ29kZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OworICAgIG1fbnVtYmVyT2ZF
bnRyaWVzKys7Cit9CisKK2lubGluZSBQYXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBDb21w
YWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZmluaXNoKCkKK3sKKyAgICBtX2NhcGFjaXR5ID0gbV9z
aXplOworICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1f
YnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiByZXN1
bHQgPSBhZG9wdFB0cihuZXcgQ29tcGFjdEpJVENvZGVNYXAobV9idWZmZXIsIG1fc2l6ZSwgbV9u
dW1iZXJPZkVudHJpZXMpKTsKKyAgICBtX2J1ZmZlciA9IDA7CisgICAgbV9zaXplID0gMDsKKyAg
ICBtX2NhcGFjaXR5ID0gMDsKKyAgICBtX251bWJlck9mRW50cmllcyA9IDA7CisgICAgbV9wcmV2
aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9
IDA7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisgICAgICAgIAoraW5saW5lIHZv
aWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmFwcGVuZEJ5dGUodWludDhfdCB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQobV9zaXplICsgMSA8PSBtX2NhcGFjaXR5KTsKKyAgICBtX2J1ZmZlcltt
X3NpemUrK10gPSB2YWx1ZTsKK30KKyAgICAKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFw
OjpFbmNvZGVyOjplbmNvZGVOdW1iZXIodWludDMyX3QgdmFsdWUpCit7CisgICAgQVNTRVJUKG1f
c2l6ZSArIDQgPD0gbV9jYXBhY2l0eSk7CisgICAgQVNTRVJUKHZhbHVlIDwgMTw8MzApOworICAg
IGlmICh2YWx1ZSA8PSAxMjcpIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pih2YWx1ZSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDEyOCkp
OworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA8
PSAxNjM4MykgeworICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHZhbHVlID4+IDgpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAg
ICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgNjQpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFk
VmFsdWUgfCAxMjgpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZh
bHVlKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pih2YWx1ZSA+PiAyNCk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAm
IDEyOCkpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiA2NCkpOworICAgICAgICBhcHBl
bmRCeXRlKGhlYWRWYWx1ZSB8IDEyOCB8IDY0KTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNf
Y2FzdDx1aW50OF90Pih2YWx1ZSA+PiAxNikpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2Fz
dDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgQ29tcGFjdEpJVENv
ZGVNYXA6OkVuY29kZXI6OmVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJlck9mRW50cmll
c1RvQWRkKQoreworICAgIHVuc2lnbmVkIGNhcGFjaXR5TmVlZGVkID0gbV9zaXplICsgbnVtYmVy
T2ZFbnRyaWVzVG9BZGQgKiAyICogNDsKKyAgICBpZiAoY2FwYWNpdHlOZWVkZWQgPiBtX2NhcGFj
aXR5KSB7CisgICAgICAgIG1fY2FwYWNpdHkgPSBjYXBhY2l0eU5lZWRlZCAqIDI7CisgICAgICAg
IG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBt
X2NhcGFjaXR5KSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8v
IENvbXBhY3RKSVRDb2RlTWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKIAogICAgICAgICBtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0XSA9IGxhYmVsKCk7
CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICBpZiAobV9jYW5CZU9w
dGltaXplZCkKKyAgICAgICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBwZW5kKG1fYnl0ZWNv
ZGVPZmZzZXQsIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKKyNl
bmRpZgorCiAgICAgICAgIHN3aXRjaCAobV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVu
dEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKICAgICAgICAgREVGSU5FX0JJTkFSWV9PUChvcF9k
ZWxfYnlfdmFsKQogICAgICAgICBERUZJTkVfQklOQVJZX09QKG9wX2luKQpAQCAtMzczLDcgKzM3
OCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICNlbmRpZgogfQogCi0K
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkKIHsKICAgICB1bnNpZ25lZCBqbXBU
YWJsZUNvdW50ID0gbV9qbXBUYWJsZS5zaXplKCk7CkBAIC01MDIsNiArNTA2LDggQEAgSklUQ29k
ZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogewogI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCiAgICAgbV9jYW5CZU9wdGltaXplZCA9IG1fY29kZUJsb2NrLT5jYW5Db21w
aWxlV2l0aERGRygpOworICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAgICBtX3N0YXJ0
T2ZDb2RlID0gbGFiZWwoKTsKICNlbmRpZgogICAgIAogICAgIC8vIEp1c3QgYWRkIGEgbGl0dGxl
IGJpdCBvZiByYW5kb21uZXNzIHRvIHRoZSBjb2RlZ2VuCkBAIC02NDIsNiArNjQ4LDExIEBAIEpJ
VENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICAgICAgaW5mby5jYWxs
UmV0dXJuTG9jYXRpb24gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8obV9tZXRob2RD
YWxsQ29tcGlsYXRpb25JbmZvW2ldLnByb3BlcnR5QWNjZXNzSW5kZXgpLmNhbGxSZXR1cm5Mb2Nh
dGlvbjsKICAgICB9CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgIGlmICht
X2NhbkJlT3B0aW1pemVkKQorICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChtX2pp
dENvZGVNYXBFbmNvZGVyLmZpbmlzaCgpKTsKKyNlbmRpZgorCiAgICAgaWYgKG1fY29kZUJsb2Nr
LT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykK
ICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25P
Zihhcml0eUNoZWNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNp
b24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwg
ZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9m
ZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19j
YXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCiAjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAi
T3Bjb2RlLmgiCkBAIC0xMDU0LDYgKzEwNTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0
aW1pemVkOworICAgICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOworICAgICAgICBDb21wYWN0SklU
Q29kZU1hcDo6RW5jb2RlciBtX2ppdENvZGVNYXBFbmNvZGVyOwogI2VuZGlmCiAgICAgfSBKSVRf
Q0xBU1NfQUxJR05NRU5UOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDk0ODAyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDYg
KzE5Miw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAs
IHBhcnNlcihuZXcgUGFyc2VyKQogICAgICwgaW50ZXJwcmV0ZXIoMCkKICAgICAsIGhlYXAodGhp
cywgaGVhcFNpemUpCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAsIG51bWJl
ck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyKDApCisjZW5kaWYKICAgICAsIGR5bmFtaWNH
bG9iYWxPYmplY3QoMCkKICAgICAsIGNhY2hlZFVUQ09mZnNldChzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46OnF1aWV0X05hTigpKQogICAgICwgbWF4UmVlbnRyeURlcHRoKHRocmVhZFN0YWNr
VHlwZSA9PSBUaHJlYWRTdGFja1R5cGVTbWFsbCA/IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRo
IDogTWF4TGFyZ2VUaHJlYWRSZWVudHJ5RGVwdGgpCkBAIC0zNTcsNiArMzYwLDExIEBAIEpTR2xv
YmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAg
IGRlbGV0ZSBtX3J0VHJhY2VMaXN0OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJ
TEFUSU9OKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvc3JTY3JhdGNoQnVmZmVycy5z
aXplKCk7ICsraSkKKyAgICAgICAgZmFzdEZyZWUob3NyU2NyYXRjaEJ1ZmZlcnNbaV0pOworI2Vu
ZGlmCiB9CiAKIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNv
bnRleHRHcm91cChUaHJlYWRTdGFja1R5cGUgdHlwZSwgSGVhcFNpemUgaGVhcFNpemUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNp
b24gOTQ4MDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIzNSwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIGludDY0X3QgZGVidWdEYXRhQnVmZmVyWzY0XTsKICNlbmRp
ZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIFZlY3RvcjxpbnQ2NF90
Kj4gb3NyU2NyYXRjaEJ1ZmZlcnM7CisgICAgICAgIHNpemVfdCBudW1iZXJPZlNsb3RzSW5MYXN0
T1NSU2NyYXRjaEJ1ZmZlcjsKKyAgICAgICAgCisgICAgICAgIGludDY0X3QqIG9zclNjcmF0Y2hC
dWZmZXJGb3JTaXplKHVuc2lnbmVkIG51bWJlck9mU2xvdHMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICghbnVtYmVyT2ZTbG90cykKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgKG51bWJlck9mU2xvdHMgPiBudW1iZXJPZlNsb3RzSW5M
YXN0T1NSU2NyYXRjaEJ1ZmZlcikgeworICAgICAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5z
dCBhIE5eMiBtZW1vcnkgdXNhZ2UgcGF0aG9sb2d5IGJ5IGVuc3VyaW5nCisgICAgICAgICAgICAg
ICAgLy8gdGhhdCBhdCB3b3JzdCwgd2UgZ2V0IGEgZ2VvbWV0cmljIHNlcmllcywgbWVhbmluZyB0
aGF0IHRoZQorICAgICAgICAgICAgICAgIC8vIHRvdGFsIG1lbW9yeSB1c2FnZSBpcyBzb21ld2hl
cmUgYXJvdW5kCisgICAgICAgICAgICAgICAgLy8gbWF4KHNjcmF0Y2ggYnVmZmVyIHNpemUpICog
NC4KKyAgICAgICAgICAgICAgICBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlciA9
IG51bWJlck9mU2xvdHMgKiAyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG9z
clNjcmF0Y2hCdWZmZXJzLmFwcGVuZChzdGF0aWNfY2FzdDxpbnQ2NF90Kj4oZmFzdE1hbGxvYyhz
aXplb2YoaW50NjRfdCkgKiBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcikpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIG9zclNjcmF0
Y2hCdWZmZXJzLmxhc3QoKTsKKyAgICAgICAgfQorI2VuZGlmCiAjZW5kaWYKIAogICAgICAgICBI
YXNoTWFwPE9wYXF1ZUpTQ2xhc3MqLCBPcGFxdWVKU0NsYXNzQ29udGV4dERhdGEqPiBvcGFxdWVK
U0NsYXNzRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
Y3BwCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNyArMTE5LDcgQEAgSlNPYmplY3QqIEpT
VmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoRQogI2lmbmRlZiBOREVCVUcKIGNoYXIqIEpTVmFs
dWU6OmRlc2NyaXB0aW9uKCkKIHsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAzMjsK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUgPSA2NDsKICAgICBzdGF0aWMgY2hhciBkZXNj
cmlwdGlvbltzaXplXTsKIAogICAgIGlmICghKnRoaXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5NDgwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtOTYxLDcgKzk2MSw3IEBACiAjZW5k
aWYKIAogI2lmICFkZWZpbmVkKEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04pCi0jZGVmaW5lIEVO
QUJMRV9USUVSRURfQ09NUElMQVRJT04gMAorI2RlZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFU
SU9OIDEKICNlbmRpZgogCiAvKiBDdXJyZW50bHkgb25seSBpbXBsZW1lbnRlZCBmb3IgSlNWQUxV
RTY0LCBvbmx5IHRlc3RlZCBvbiBQTEFURk9STShNQUMpICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106941</attachid>
            <date>2011-09-09 16:48:37 -0700</date>
            <delta_ts>2011-09-09 16:59:40 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>osr_patch_1.diff</filename>
            <type>text/plain</type>
            <size>81027</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm90ZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMDkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnppcCBpbml0aWFsaXphdGlvbiBsaXN0cyBhbmQgY29uc3Ry
dWN0b3JzIGluIEpTQ2VsbCBoaWVyYXJjaHkgKDUvNykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw3IEBACiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgy
NDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0
MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggKi87IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
MUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgy
RTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0
IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3
NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5j
cHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4
OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAt
Nzg5LDYgKzc5MCw3IEBACiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsg
cGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9
IGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0Nh
cGFiaWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFC
MTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9z
aXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAw
Q0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY4LDYg
KzE1NzAsNyBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAx
NzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBE
Q0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENG
QzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVD
NkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAg
LTIzODIsNiArMjM4NSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFS
TUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMy
IC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTRE
MDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5k
ZWYgQ29kZUJsb2NrX2gKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RK
SVRDb2RlTWFwLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3Ry
dWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29k
ZU1hcChQYXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAg
ICAgIENvbXBhY3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBF
TkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3Ry
dWN0aW9uKiByZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRo
QXJpdHlDaGVjazsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRp
ZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0
SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJ
TEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJv
ZmlsZXM7CiAjZW5kaWYKQEAgLTY2Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJs
b2NrPiBtX2FsdGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJh
cmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIG1fY29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRK
U0NvbnN0YW50KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1
cnJlbnRDb2RlT3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3Vy
cmVudEluZGV4KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUg
YW5kIGFkZCBpdCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAv
LyAnbXVzdEdlbmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2Vk
IHRvIGVuc3VyZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJl
c3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5h
cHBlbmQoTm9kZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsK
KyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hp
bGQxLCBjaGlsZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJh
dGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3
LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJ
bmZvIGluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5k
ZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dy
YXBoLmFwcGVuZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIs
IGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9y
aWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9w
ICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4
KTsKQEAgLTM5Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBo
KE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5k
ZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3Vy
cmVudEluZGV4LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGlu
Zm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQw
Miw3ICs0MDYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZh
ckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsK
ICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUo
KTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJl
bnRJbmRleCwgaW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0g
bV9udW1QYXNzZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZv
MSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZh
ckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNz
ZWRWYXJBcmdzID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dQUkluZm8uaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gOTsKIAogICAgIC8v
IFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4KKyAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjEyOwog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6
OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IFg4
NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5l
cmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxMiArMjc0
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7CiAgICAgfQogCi0jaWZuZGVmIE5E
RUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7
CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBub2Rl
IHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk0ODc5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENv
CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAgdW5zaWduZWQgcmVmQ291bnQgPSBu
b2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkgewotICAgICAgICBwcmludGYoIiUg
NGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0gIXJlZkNvdW50OwogICAgIGJvb2wg
bXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKLSAgICBpZiAobXVzdEdlbmVyYXRl
KQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAgQVNTRVJUKHJlZkNvdW50KTsKICAg
ICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9m
IGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3LDggKzc2LDggQEAgdm9pZCBHcmFw
aDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAgICAgICAgJCMgICAtIHRo
ZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25z
dGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNp
bWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENv
ZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1w
KCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAg
ICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2Vk
IGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBwcmludGYoIiUg
NGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCBy
ZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCisgICAgcHJpbnRmKCIlIDRkOiVz
PCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAg
ICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5v
ZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTgsMTcgKzExMTgsMTcgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0LmFkZFB0cihJ
bW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAogICAgIEpJVENvbXBp
bGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAgICBtX2ppdC5ub3RpZnlD
YWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZv
KTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKICAg
ICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9q
aXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9q
aXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVj
ayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3Jp
Z2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3MpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lz
dGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0g
ICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwg
bV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgbV9qaXQu
bm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3Jh
cGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CiAgICAgCkBAIC0xMTM2LDcgKzExMzYsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1f
Y29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9D
aGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZv
KTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNr
LCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogfQog
CiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDUs
NyArOTA1LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
biwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgICAg
IHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCBtX2pp
dC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICB9CiAKICAgICB2b2lk
IGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBk
ZXN0aW5hdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDIzNSBAQCB2
b2lkIEpJVENvbXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXggbm9kCiAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwogfQogCisjaWYgREZHX09TUgor
dm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBl
eGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQoreworICAgIC8vIDApIFByby1mb3JtYSBzdHVm
Zi4KKyAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKKworI2lmIERGR19ERUJVR19WRVJCT1NF
CisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKGJjIyV1KSBhdCBK
SVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgsIGV4aXQubV9ieXRlY29k
ZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyNlbmRpZgorI2lmIERGR19KSVRfQlJFQUtfT05fU1BF
Q1VMQVRJT05fRkFJTFVSRQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERG
R19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1
Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAg
ZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1Z0luZm8tPmRlYnVn
T2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRp
b25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRpZgorCisgICAgLy8g
MSkgUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxh
eSB3aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZv
cmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgorICAgIAor
ICAgIEdQUlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIGlmIChy
ZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwg
cmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgYWxyZWFkeUJveGVk
ID0gcmVjb3ZlcnktPmRlc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CisgICAgICAgICAgICB4b3JQdHIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3Zlcnkt
PmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2Rl
IGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQor
ICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcgaXMgY29tcHV0ZWQgYW5kIHdoZW4gaXQgaXMg
c3RvcmVkLgorICAgIAorICAgIC8vIDIpIFBlcmZvcm0gYWxsIHJlYm94aW5nIG9mIGludGVnZXJz
LgorICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSICYmIHJlY292ZXJ5LmdwcigpICE9IGFscmVh
ZHlCb3hlZCkKKyAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVjb3ZlcnkuZ3ByKCkpOworICAgIH0KKyAgICAKKyAgICAvLyAzKSBEdW1wIGFsbCBHUFJT
IGFuZCBub24tdW5kZWZpbmVkIGNvbnN0YW50cyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLgorICAg
IAorICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOworCisgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5k
ZXgpOworICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsK
KyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIElu
R1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgc3RvcmVQ
dHIocmVjb3ZlcnkuZ3ByKCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAg
IGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAg
aGF2ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQo
KSkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyA0KSBEdW1wIGFsbCBVbmRlZmluZWQncyBpbnRvIHRoZSByZWdp
c3RlciBmaWxlLiBVbmRlZmluZWQgaXMgdHJlYXRlZAorICAgIC8vICAgIHNwZWNpYWxseSBiZWNh
dXNlIHdlIGV4cGVjdCB0aGVyZSB0byBiZSBlbm91Z2ggY2FzZXMgd2hlcmUgd2UgZHVtcAorICAg
IC8vICAgIFVuZGVmaW5lZCB0aGF0IHdlIHdhbnQgdG8gc2V0IGl0IG9uY2UgaW4gYSByZWdpc3Rl
ciBhbmQgdGhlbgorICAgIC8vICAgIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyIGlu
dG8gd2hlcmV2ZXIgaXQgbmVlZHMgdG8gZ28uCisgICAgCisgICAgaWYgKGhhdmVVbmRlZmluZWQp
IHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDb25zdGFudCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghcmVjb3ZlcnkuY29uc3RhbnQo
KS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
c3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAv
LyA1KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhh
biBGUFJzKQorICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgaWYgKHJlY292
ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsKKyAgICAgICAgR1BSUmVnIGdwciA9IEdQUklu
Zm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChmcHIpKTsKKyAgICAgICAgYm94RG91Ymxl
KGZwciwgZ3ByKTsKKyAgICB9CisgICAgCisgICAgLy8gNikgRHVtcCBhbGwgZG91YmxlcyBpbnRv
IHRoZSByZWdpc3RlciBmaWxlLiAgQWxzbyBjb3VudCB0aGUgbnVtYmVyIG9mCisgICAgLy8gICAg
ZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXJzLCB3aGljaCBpcyB1c2VkIGFzIGFuIG9wdGltaXph
dGlvbiBpbgorICAgIC8vICAgIHRoZSBuZXh0IHN0YWdlLgorICAgIAorICAgIHVuc2lnbmVkIG51
bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA9IDA7CisgICAgCisgICAgZm9yIChpbnQg
aW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsK
KyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zl
cnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAg
ICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVy
KEZQUkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICBudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgLy8gNykgUmVzaHVmZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4gIE9wdGlt
aXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQg
dmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAg
b2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZE
aXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzKSB7
CisgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UgdGhhdCB0cmln
Z2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1YXJh
bnRlZWQuCisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJbmRleCA9IDA7
CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zl
cmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4Kysp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAwOwor
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNw
bGFjZW1lbnRJbmRleCsrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFu
ZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5nIGFsZ29yaXRobSB0aGF0IHdlIHVz
ZQorICAgICAgICAvLyBmb3Igc3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYg
d2UgZXZlciBkaXNjb3ZlciB0aGF0CisgICAgICAgIC8vIHNvbWUgaG90IGNvZGUgd2l0aCBsb3Rz
IG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBhbmQKKyAgICAgICAgLy8gc3BpbGxl
ZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50bHkgZmFpbGluZyBzcGVjdWxhdGlvbi4KKyAgICAgICAg
CisgICAgICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVj
dCBidXQgcHJvYmFibHkgbm90CisgICAgICAgIC8vIHN1cGVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBj
b3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3aGVyZSBmb3IgZXhhbXBsZQorICAgICAgICAvLyB0aGUg
ZGlzcGxhY2VtZW50cyBhcmUgYSBwZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVz
LCBsaWtlCisgICAgICAgIC8vCisgICAgICAgIC8vIDEgLT4gMgorICAgICAgICAvLyAyIC0+IDEK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxp
ZnRpbmcgYWxsIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVycworICAgICAgICAvLyBmcm9tIHRoZWly
IG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGluIGEgc2NyYXRjaAor
ICAgICAgICAvLyBsb2NhdGlvbiBpbiBtZW1vcnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9t
IHRoYXQgc2NyYXRjaCBsb2NhdGlvbgorICAgICAgICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQp
IGxvY2F0aW9ucy4KKyAgICAgICAgCisgICAgICAgIGludDY0X3QqIHNjcmF0Y2hCdWZmZXIgPSBn
bG9iYWxEYXRhKCktPm9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bWJlck9mRGlzcGxhY2VkVmly
dHVhbFJlZ2lzdGVycyk7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBkaXNwbGFjZW1lbnRJ
bmRleCA9IDA7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBp
ZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVj
b3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBz
dG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZlciArIGRpc3BsYWNlbWVudEluZGV4
KyspOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7
CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zl
cmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBkaXNwbGFj
ZW1lbnRJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBzdG9yZVB0cihHUFJJ
bmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvcklu
ZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDgpIExvYWQgdGhl
IHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byByZWdUMC4KKyAgICAK
KyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCkpCisgICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAg
ICAKKyAgICAvLyA5KSBGaXggY2FsbCBmcmFtZS4KKyAgICAKKyAgICBBU1NFUlQoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7
CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSks
IGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpOwor
ICAgIAorICAgIC8vIDEwKSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklU
IGNvZGUuCisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmlu
YXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwg
ZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgdm9pZCog
anVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkp
ICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgQVNTRVJUKEdQUkluZm86OnJl
Z1QxICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBqdW1wKEdQUkluZm86OnJl
Z1QxKTsKKworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnByaW50ZihzdGRlcnIsICItPiAl
cFxuIiwganVtcFRhcmdldCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRDb21waWxlcjo6bGlua09T
UkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVjdWxhdGl2ZSkKK3sKKyAgICBWZWN0b3I8Qnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0PiBkZWNvZGVkQ29kZU1hcDsKKyAgICBBU1NFUlQoY29kZUJsb2Nr
KCktPmFsdGVybmF0aXZlKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoY29k
ZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmppdENvZGVNYXAoKSk7CisgICAgY29kZUJsb2NrKCkt
PmFsdGVybmF0aXZlKCktPmppdENvZGVNYXAoKS0+ZGVjb2RlKGRlY29kZWRDb2RlTWFwKTsKKyAg
ICAKKyAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0l0ZXIgPSBzcGVjdWxhdGl2ZS5v
c3JFeGl0cygpLmJlZ2luKCk7CisgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNFbmQg
PSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygpLmVuZCgpOworICAgIAorICAgIHdoaWxlIChleGl0c0l0
ZXIgIT0gZXhpdHNFbmQpIHsKKyAgICAgICAgY29uc3QgT1NSRXhpdCYgZXhpdCA9ICpleGl0c0l0
ZXI7CisgICAgICAgIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoZXhpdCwgc3BlY3VsYXRpdmUuc3Bl
Y3VsYXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCksIGRlY29kZWRDb2RlTWFwKTsK
KyAgICAgICAgKytleGl0c0l0ZXI7CisgICAgfQorfQorI2Vsc2UgLy8gREZHX09TUgogY2xhc3Mg
R2VuZXJhbGl6ZWRSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgR2VuZXJhbGl6ZWRSZWdpc3Rlcigp
IHsgfQpAQCAtODAzLDYgKzEwMzIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rU3BlY3VsYXRp
b25DaGVja3MoCiAgICAgQVNTRVJUKCEoY2hlY2tzSXRlciAhPSBjaGVja3NFbmQpKTsKICAgICBB
U1NFUlQoIShlbnRyaWVzSXRlciAhPSBlbnRyaWVzRW5kKSk7CiB9CisjZW5kaWYgLy8gREZHX09T
UgogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogewpAQCAtODQ0LDEyICsxMDc0
LDE2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAvLyB0byBhbGxvdyBp
dCB0byBjaGVjayB3aGljaCBub2RlcyBpbiB0aGUgZ3JhcGggbWF5IGJhaWwgb3V0LCBhbmQgbWF5
IG5lZWQgdG8gcmVlbnRlciB0aGUKICAgICAvLyBub24tc3BlY3VsYXRpdmUgcGF0aC4KICAgICBp
ZiAoY29tcGlsZWRTcGVjdWxhdGl2ZSkgeworI2lmIERGR19PU1IKKyAgICAgICAgbGlua09TUkV4
aXRzKHNwZWN1bGF0aXZlKTsKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0
ZXJhdG9yIGNoZWNrSXRlcmF0b3Ioc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25DaGVja3MoKSk7CiAg
ICAgICAgIE5vblNwZWN1bGF0aXZlSklUIG5vblNwZWN1bGF0aXZlKCp0aGlzKTsKICAgICAgICAg
bm9uU3BlY3VsYXRpdmUuY29tcGlsZShjaGVja0l0ZXJhdG9yKTsKIAogICAgICAgICAvLyBMaW5r
IHRoZSBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCB0byB0aGUgY29ycmVzcG9u
ZGluZyBlbnRyeSBwb2ludHMgaW50byB0aGUgbm9uLXNwZWN1bGF0aXZlIG9uZS4KICAgICAgICAg
bGlua1NwZWN1bGF0aW9uQ2hlY2tzKHNwZWN1bGF0aXZlLCBub25TcGVjdWxhdGl2ZSk7CisjZW5k
aWYKICAgICB9IGVsc2UgewogI2lmIERGR19ERUJVR19WRVJCT1NFCiAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsKQEAgLTg2Miw4ICsx
MDk2LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAgICAgbV9tZXRo
b2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRpdmVQYXRoQmVn
aW4pOwogCisjaWYgREZHX09TUgorICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRv
ciBjaGVja0l0ZXJhdG9yOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3RvciBu
b0NoZWNrczsKICAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVy
YXRvcihub0NoZWNrcyk7CisjZW5kaWYKICAgICAgICAgTm9uU3BlY3VsYXRpdmVKSVQgbm9uU3Bl
Y3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxlKGNoZWNrSXRl
cmF0b3IpOwogICAgIH0KQEAgLTkxMSw3ICsxMTQ5LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9j
YWxscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fY2FsbHNbaV0ubV9oYW5kbGVz
RXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJldHVybkFkZHJlc3NPZmZz
ZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQobV9jYWxsc1tpXS5tX2NhbGwpOwot
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8gPSBtX2NhbGxzW2ldLm1fZXhj
ZXB0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25JbmZvID0gbV9j
YWxsc1tpXS5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJldHVybk9mZnNl
dFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNldCwgZXhjZXB0aW9uSW5mbykpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBA
QCBjbGFzcyBTcGVjdWxhdGlvblJlY292ZXJ5OwogCiBzdHJ1Y3QgRW50cnlMb2NhdGlvbjsKIHN0
cnVjdCBTcGVjdWxhdGlvbkNoZWNrOworc3RydWN0IE9TUkV4aXQ7CiAKICNpZm5kZWYgTkRFQlVH
CiB0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lk
Kik7CkBAIC04MiwyMSArODMsMjEgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAgIH0KIAogICAg
IC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgd2l0aCBhbiBleGNlcHRpb24gaGFuZGxlci4KLSAg
ICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0
aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywgRXhjZXB0aW9uSW5mbyBl
eGNlcHRpb25JbmZvKQorICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwg
RnVuY3Rpb25QdHIgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkNoZWNr
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAg
ICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNoZWNrKGV4Y2Vw
dGlvbkNoZWNrKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAg
ICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1faGFuZGxlc0V4Y2Vw
dGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0b3IgZm9yIGEgY2Fs
bCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25zLCBidXQgd2hpY2ggYXJlIGhhbmRsZWQKICAgICAv
LyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdGhlIGluLWxpbmUgZXhjZXB0aW9u
IGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvKQorICAgIENhbGxS
ZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAgICAgICAgLCBt
X2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1faGFu
ZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTA0LDcgKzEwNSw3IEBAIHN0
cnVjdCBDYWxsUmVjb3JkIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2NhbGw7CiAgICAg
RnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2V4Y2Vw
dGlvbkNoZWNrOwotICAgIEV4Y2VwdGlvbkluZm8gbV9leGNlcHRpb25JbmZvOworICAgIENvZGVP
cmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYW5kbGVzRXhjZXB0aW9uczsKIH07CiAK
QEAgLTE5Miw5ICsxOTMsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gTm90aWZ5IHRoZSBK
SVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgotICAgIHZvaWQgbm90
aWZ5Q2FsbChDYWxsIGNhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgdm9pZCBub3Rp
ZnlDYWxsKENhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKLSAgICAgICAg
bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0cigpLCBleGNlcHRpb25J
bmZvKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgRnVuY3Rpb25Q
dHIoKSwgY29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20g
SklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMjA1LDIwICsyMDYsMjAg
QEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUs
IHdpdGggYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4Y2VwdGlvbklu
Zm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9u
UHRyJiBmdW5jdGlvbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgQ2Fs
bCBmdW5jdGlvbkNhbGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBi
cmFuY2hUZXN0UHRyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcygmZ2xvYmFsRGF0YSgpLT5leGNl
cHRpb24pKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGws
IGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOworICAgICAgICBtX2Nh
bGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNo
ZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQog
ICAgIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGggYSBmYXN0IGV4
Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4KLSAg
ICBDYWxsIGFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRy
JiBmdW5jdGlvbiwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsIGFwcGVuZENhbGxX
aXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxs
KCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRyKFplcm8sIEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29y
ZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykp
OworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rp
b24sIGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlv
bkNhbGw7CiAgICAgfQogICAgIApAQCAtMzExLDkgKzMxMiw5IEBAIHB1YmxpYzoKICAgICAgICAg
bV9tZXRob2RHZXRzLmFwcGVuZChNZXRob2RHZXRSZWNvcmQoc2xvd0NhbGwsIHN0cnVjdFRvQ29t
cGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlvbikpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxs
LCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2Vw
dGlvbkluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2Fs
bCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChm
YXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhjZXB0aW9uSW5mbykp
OworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0Nh
bGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgY29kZU9yaWdpbikpOwogICAgIH0KIAogcHJpdmF0
ZToKQEAgLTMyNiw4ICszMjcsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxOdW1lcmljVG9E
b3VibGUoTm9kZUluZGV4LCBGUFJSZWcsIEdQUlJlZyB0ZW1wb3JhcnkpOwogICAgIHZvaWQgZmls
bEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwgR1BSUmVnKTsKICAgICB2b2lkIGZpbGxUb0pTKE5v
ZGVJbmRleCwgR1BSUmVnKTsKKyAgICAKKyNpZiBERkdfT1NSCisgICAgdm9pZCBleGl0U3BlY3Vs
YXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5KiwgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKTsKKyAgICB2b2lkIGxp
bmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYpOworI2Vsc2UKICAgICB2b2lkIGp1bXBGcm9tU3Bl
Y3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2smLCBjb25zdCBF
bnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIE5vZGVUb1JlZ2lzdGVyTWFwJiBj
aGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYgZW50cnlOb2RlVG9SZWdp
c3Rlck1hcCk7CiAgICAgdm9pZCBsaW5rU3BlY3VsYXRpb25DaGVja3MoU3BlY3VsYXRpdmVKSVQm
LCBOb25TcGVjdWxhdGl2ZUpJVCYpOworI2VuZGlmCiAKICAgICAvLyBUaGUgZ2xvYmFsRGF0YSwg
dXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgogICAgIEpTR2xvYmFs
RGF0YSogbV9nbG9iYWxEYXRhOwpAQCAtMzg2LDEyICszOTMsMTIgQEAgcHJpdmF0ZToKICAgICB9
OwogICAgIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAgICAgICBKU0NhbGxSZWNvcmQo
Q2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ss
IGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgICAgICBKU0NhbGxSZWNv
cmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hl
Y2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgICAgICA6IG1f
ZmFzdENhbGwoZmFzdENhbGwpCiAgICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xvd0NhbGwpCiAg
ICAgICAgICAgICAsIG1fdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQogICAgICAgICAgICAg
LCBtX2lzQ2FsbChpc0NhbGwpCi0gICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRp
b25JbmZvKQorICAgICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAg
ewogICAgICAgICB9CiAgICAgICAgIApAQCAtMzk5LDcgKzQwNiw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIENhbGwgbV9zbG93Q2FsbDsKICAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFyZ2V0VG9DaGVj
azsKICAgICAgICAgYm9vbCBtX2lzQ2FsbDsKLSAgICAgICAgdW5zaWduZWQgbV9leGNlcHRpb25J
bmZvOworICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICB9OwogCiAgICAgVmVj
dG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYs
NyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKLS8vIEVtaXQgdmFy
aW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5n
IHRoZSBkYXRhZmxvdyBncmFwaHMuCisvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlv
biBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLiAg
U2V0IHRvIDEgZm9yIGJhc2ljIHZlcmJvc2l0eSwgb3IgdG8gMiBmb3IgbW9yZSB2ZXJib3NpdHku
CiAjZGVmaW5lIERGR19ERUJVR19WRVJCT1NFIDAKIC8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGR5
bmFtaWMgY2hlY2tzIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4KICNpZiAhQVNTRVJUX0RJ
U0FCTEVECkBAIC01MCw2ICs1MCw4IEBACiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxF
IDAKIC8vIERpc2FibGUgdGhlIFNwZWN1bGF0aXZlSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNo
IFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNVTEFUSVZF
IDAKKy8vIERpc2FibGUgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5zdGVh
ZC4KKyNkZWZpbmUgREZHX09TUiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogLy8gR2VuZXJh
dGUgc3RhdHMgb24gaG93IHN1Y2Nlc3NmdWwgd2Ugd2VyZSBpbiBtYWtpbmcgdXNlIG9mIHRoZSBE
Rkcgaml0LCBhbmQgcmVtYWluaW5nIG9uIHRoZSBob3QgcGF0aC4KICNkZWZpbmUgREZHX1NVQ0NF
U1NfU1RBVFMgMAogCkBAIC03Miw5ICs3NCwzMiBAQCBDT01QSUxFX0FTU0VSVChzaXplb2YoVmly
dHVhbFJlZ2lzdGVyKSA9CiB0eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRpYyBjb25z
dCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CiAKLS8vIEluZm9ybWF0aW9uIHVzZWQgdG8g
bWFwIGJhY2sgZnJvbSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0
aW9uLgorLy8gSW5mb3JtYXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0
byBhbnkgaGFuZGxlci9zb3VyY2UgaW5mb3JtYXRpb24sCisvLyBhbmQgdG8gaW1wbGVtZW50IE9T
Ui4KIC8vIChQcmVzZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCi10eXBl
ZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CitjbGFzcyBDb2RlT3JpZ2luIHsKK3B1YmxpYzoK
KyAgICBDb2RlT3JpZ2luKCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGlj
aXQgQ29kZU9yaWdpbih1aW50MzJfdCBieXRlY29kZUluZGV4KQorICAgICAgICA6IG1fYnl0ZWNv
ZGVJbmRleChieXRlY29kZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1Nl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVpbnQzMl90Pjo6bWF4KCk7IH0KKyAgICAKKyAgICB1aW50MzJfdCBieXRlY29kZUluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1f
Ynl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYnl0
ZWNvZGVJbmRleDsKK307CiAKIC8vIEVudHJpZXMgaW4gdGhlIE5vZGVUeXBlIGVudW0gKGJlbG93
KSBhcmUgY29tcG9zZWQgb2YgYW4gaWQsIGEgcmVzdWx0IHR5cGUgKHBvc3NpYmx5IG5vbmUpCiAv
LyBhbmQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aXZlIGZsYWdzIChtdXN0IGdlbmVyYXRlLCBp
cyBjb25zdGFudCwgZXRjKS4KQEAgLTM1Nyw5ICszODIsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0
aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlw
ZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBOb2RlSW5kZXggY2hpbGQxID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2Rl
KQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4
IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNo
aWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZv
KGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwg
bV9yZWZDb3VudCgwKQogICAgIHsKQEAgLTM3MCw5ICszOTUsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5k
IGFuIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZv
IGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAg
Tm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2Rl
SW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlv
bkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAg
ICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAg
ICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCkBAIC0z
ODQsOSArNDA5LDkgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBh
IG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAg
ICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBp
bW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNo
aWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVU
eXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwg
Tm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNl
cHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2lu
KQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAg
ICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkK
QEAgLTM5OSw5ICs0MjQsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogICAgIAogICAgIC8vIENv
bnN0cnVjdCBhIG5vZGUgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgdHdv
IGltbWVkaWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBFeGNl
cHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgdW5zaWdu
ZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCisgICAgTm9kZShWYXJBcmdUYWcs
IE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8g
aW1tMiwgdW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgICAg
IDogb3Aob3ApCi0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAg
ICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJ
bnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAg
LCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC02NDMsNiArNjY4LDE0IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1
cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIHVz
ZWZ1bCBpZiB5b3Ugd2FudCB0byBkbyBhIGZhc3QgY2hlY2sgb24gdGhlIGZpcnN0IGNoaWxkCisg
ICAgLy8gYmVmb3JlIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgb3Bjb2RlLiBVc2UgdGhpcyB3
aXRoIGNhcmUgYW5kCisgICAgLy8gYXZvaWQgaXQgaWYgcG9zc2libGUuCisgICAgTm9kZUluZGV4
IGNoaWxkMVVuY2hlY2tlZCgpCisgICAgeworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQu
Y2hpbGQxOworICAgIH0KIAogICAgIE5vZGVJbmRleCBjaGlsZDIoKQogICAgIHsKQEAgLTY3MSw3
ICs3MDQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRlc2NyaWJl
cyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBVc2VkIHRv
IGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVt
ZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCi0gICAgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25J
bmZvOworICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVw
IHRvIDMgY2hpbGRyZW4gKDAgZm9yIG5vIGNoaWxkKS4KICAgICB1bmlvbiB7CiAgICAgICAgIHN0
cnVjdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDYg
KzQzNCw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2QKIAogdm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRv
ciYgY2hlY2tJdGVyYXRvciwgTm9kZSYgbm9kZSkKIHsKKyNpZiBERkdfT1NSCisgICAgVU5VU0VE
X1BBUkFNKGNoZWNrSXRlcmF0b3IpOworI2Vsc2UKICAgICAvLyBDaGVjayBmb3Igc3BlY3VsYXRp
b24gY2hlY2tzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gaW4gdGhlCiAgICAg
Ly8gc3BlY3VsYXRpdmUgcGF0aC4gRG8gbm90IGNoZWNrIGZvciBOb2RlSW5kZXggMCwgc2luY2Ug
dGhpcyBpcyBjaGVja2VkCiAgICAgLy8gaW4gdGhlIG91dGVybW9zdCBjb21waWxlIGxheWVyLCBh
dCB0aGUgaGVhZCBvZiB0aGUgbm9uLXNwZWN1bGF0aXZlIHBhdGgKQEAgLTQ0Miw2ICs0NDUsNyBA
QCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgLy8gYXMgc3Bl
Y3VsYXRpb24gY2hlY2tzIGF0IHRoaXMgaW5kZXgpLgogICAgIGlmIChtX2NvbXBpbGVJbmRleCAm
JiBjaGVja0l0ZXJhdG9yLmhhc0NoZWNrQXRJbmRleChtX2NvbXBpbGVJbmRleCkpCiAgICAgICAg
IHRyYWNrRW50cnkobV9qaXQubGFiZWwoKSk7CisjZW5kaWYKIAogICAgIE5vZGVUeXBlIG9wID0g
bm9kZS5vcDsKIApAQCAtMTI4Myw4ICsxMjg3LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoU3BlY3VsYXQKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXRpb25DaGVja0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IpCiB7CiAgICAgLy8gQ2hlY2sg
Zm9yIHNwZWN1bGF0aW9uIGNoZWNrcyBhZGRlZCBhdCBmdW5jdGlvbiBlbnRyeSAoY2hlY2tpbmcg
YXJndW1lbnQgdHlwZXMpLgorI2lmICFERkdfT1NSCiAgICAgaWYgKGNoZWNrSXRlcmF0b3IuaGFz
Q2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5s
YWJlbCgpKTsKKyNlbmRpZgogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9y
IChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyAr
K21fYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3
IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICByZXR1cm4g
SW52YWxpZEdQUlJlZzsKIH0KIAorI2lmICFERkdfT1NSCiBTcGVjdWxhdGlvbkNoZWNrOjpTcGVj
dWxhdGlvbkNoZWNrKE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCog
aml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogbV9jaGVjayhjaGVjaykKICAgICAs
IG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCkBAIC0xNjgsNiArMTY5LDU2IEBAIFNw
ZWN1bGF0aW9uQ2hlY2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm8KICAgICAgICAgICAgIG1fZnBy
SW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CiB9CisjZW5kaWYK
Kwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7CisgICAgZnByaW50
ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKK30KKwordm9pZCBWYWx1ZVJlY292ZXJ5
OjpkdW1wKEZJTEUqIG91dCkKK3sKKyAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2Fz
ZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEluR1BSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMi
LCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJ
bkZQUjoKKyAgICAgICAgZnByaW50ZihvdXQsICIlJSVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZw
cigpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6
CisgICAgICAgIGZwcmludGYob3V0LCAiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBmcHJpbnRmKG91dCwgIlslc10i
LCBjb25zdGFudCgpLmRlc2NyaXB0aW9uKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERv
bnRLbm93OgorICAgICAgICBmcHJpbnRmKG91dCwgIiEiKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgZnByaW50ZihvdXQsICI/JWQiLCB0ZWNobmlxdWUoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKworI2lmIERGR19PU1IKK09TUkV4aXQ6Ok9TUkV4aXQoTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJl
Y292ZXJ5SW5kZXgpCisgICAgOiBtX2NoZWNrKGNoZWNrKQorICAgICwgbV9ub2RlSW5kZXgoaml0
LT5tX2NvbXBpbGVJbmRleCkKKyAgICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1faml0LmdyYXBo
KClbaml0LT5tX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpCisgICAg
LCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+
bV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5z
aXplKCkpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5z
aXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOworICAg
IGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUo
KTsgKyt2YXJpYWJsZSkKKyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21w
dXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7Cit9CisjZW5k
aWYKIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGVJbmRleCBu
b2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKIHsKQEAgLTY2OCw2ICs3MTksMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUu
bG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAg
ICB9CisgICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRv
IHJldHJpZXZlIHRoZSB2YWx1ZSBvZgorICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxl
IGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4K
KyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBW
YWx1ZVNvdXJjZSgpOworICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS5sb2NhbCgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEzNjcsMTEgKzE0MjIsMTkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgfQotCisgICAgCiAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJh
dGUoKSkKICAgICAgICAgdXNlKG1fY29tcGlsZUluZGV4KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZS5vcCA9
PSBTZXRMb2NhbCk7CisgICAgCisgICAgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChub2RlLmNoaWxk
MSgpLCBub2RlLmxvY2FsKCkpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7
Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2spCiB7
CiAgICAgQVNTRVJUKG1fY29tcGlsZUluZGV4ID09IGJsb2NrLmJlZ2luKTsKQEAgLTEzNzksMjkg
KzE0NDIsNTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2lm
IERGR19KSVRfQlJFQUtfT05fRVZFUllfQkxPQ0sKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAj
ZW5kaWYKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUo
KTsgKytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV92
YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4
IDwgYmxvY2suZW5kOyArK21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdl
bmVyYXRlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQorICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkgewogI2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCBhdCBKSVQgb2Zmc2V0
IDB4JXggICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKKyAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBA
JWQgYXQgSklUIG9mZnNldCAweCV4ICAgICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBtX2ppdC5k
ZWJ1Z09mZnNldCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gU2V0TG9j
YWwpCisgICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0IEpJVCBv
ZmZzZXQgMHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkp
OwogI2VuZGlmCiAjaWYgREZHX0pJVF9CUkVBS19PTl9FVkVSWV9OT0RFCi0gICAgICAgIG1faml0
LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgot
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGNvbXBpbGUobm9kZSk7Ci0gICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIGNvbXBpbGUobm9kZSk7CisgICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAjaWYg
REZHX0RFQlVHX1ZFUkJPU0UKLSAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCi0gICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVzXG4iLCBkYXRhRm9ybWF0VG9TdHJpbmcobV9nZW5l
cmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXS5yZWdpc3RlckZvcm1hdCgpKSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAg
ICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiLT4gJXMgICAgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52
aXJ0dWFsUmVnaXN0ZXIoKV0ucmVnaXN0ZXJGb3JtYXQoKSkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOworI2VuZGlmCisgICAgICAg
IH0KKyAgICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UgPj0gMiAgICAgICAgCisgICAgICAg
IGZvciAoaW50IG9wZXJhbmQgPSAtbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOyBvcGVyYW5kIDwgLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsgKytvcGVyYW5kKQorICAgICAgICAgICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Io
b3BlcmFuZCkuZHVtcChzdGRlcnIpOworICAgICAgICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgOiAiKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAwOyBvcGVyYW5k
IDwgKGludCltX3ZhcmlhYmxlcy5zaXplKCk7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1
dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyNlbmRpZgorICAgICAg
CisjaWYgREZHX0RFQlVHX1ZFUkJPU0UgIAorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7
CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAKKyAgICAgICAg
aWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICB9CiB9CiAKQEAgLTE0NTIsNiArMTU0NCwxMTggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1ZhbHVlUmVjb3ZlcnkgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1
ZVNvdXJjZSkKK3sKKyAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpCisgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKKworICAgIGlmIChtX2pp
dC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNl
Lm5vZGVJbmRleCgpKSk7CisgICAgCisgICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgp
W3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpIHsKKyAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9k
eSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKKyAgICAgICAgLy8gZXZlci4g
U2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgor
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Cisg
ICAgfQorICAgIAorICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbklu
Zm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgIGlmICghaW5mb1B0ci0+YWxpdmUo
KSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgewor
ICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQg
d291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KKyAgICAgICAgLy8gVGhlcmUgYXJlIGZv
dXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFsdWVUb051bWJlcjog
SWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIg
bm9kZQorICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1c2Vz
IG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBhCisgICAgICAgIC8vICAgIFZhbHVl
VG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuICBUaHVzLCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1
ZVRvTnVtYmVyLgorICAgICAgICAvLworICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IExpa2V3aXNl
LCBpZiB0aGUgb25seSByZW1haW5pbmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcworICAg
ICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gIEJ1dCBpZiB0aGVy
ZSBpcyBib3RoIGEgVmFsdWVUb0ludDMyCisgICAgICAgIC8vICAgIGFuZCBhIFZhbHVlVG9OdW1i
ZXIsIHRoZW4gd2UgYmV0dGVyIGdvIHdpdGggVmFsdWVUb051bWJlciBiZWNhdXNlIGl0CisgICAg
ICAgIC8vICAgIG1lYW5zIHRoYXQgc29tZSByZW1haW5pbmcgdXNlcyB3b3VsZCBoYXZlIGNvbnZl
cnRlZCB0byBudW1iZXIgd2hpbGUKKyAgICAgICAgLy8gICAgb3RoZXJzIHdvdWxkIGhhdmUgY29u
dmVydGVkIHRvIEludDMyLgorICAgICAgICAvLworICAgICAgICAvLyBVSW50MzJUb051bWJlcjog
SWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFVJbnQzMlRvTnVtYmVy
CisgICAgICAgIC8vICAgIHRoZW4gdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgYXJlIG9uZXMgdGhh
dCB3YW50IGEgcHJvcGVybHkgZm9ybWVkIG51bWJlcgorICAgICAgICAvLyAgICByYXRoZXIgdGhh
biBhIFVJbnQzMiBpbnRlcm1lZGlhdGUuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoZSByZXZl
cnNlIG9mIHRoZSBhYm92ZTogVGhpcyBub2RlIGNvdWxkIGJlIGEgVUludDMyVG9OdW1iZXIsIGJ1
dCBpdHMKKyAgICAgICAgLy8gICAgYWx0ZXJuYXRpdmUgaXMgc3RpbGwgYWxpdmUuICBUaGlzIG1l
YW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgLy8gICAgdGhlIG51
bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAK
KyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVQ
dHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICBub2RlUHRyID0gJm1faml0Lmdy
YXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5m
b1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICBpZiAoaW5mb1B0ci0+
YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZv
dW5kKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2Rl
OworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOworICAg
ICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmly
dHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVy
KSB7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChpbmZv
Lm5vZGVJbmRleCgpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgo
KV07CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVT
b3VyY2Uubm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVU
b051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5mby5u
b2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4
ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdWludDMy
VG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgaWYgKHZhbHVlVG9O
dW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2
YWx1ZVRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRl
eCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50
MzJJbmRleDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRl
eDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5v
Tm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5v
Tm9kZSkgeworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5k
ZXhUb1VzZV07CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25v
ZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0
ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7Cisg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQo
aW5mb1B0ci0+YWxpdmUoKSk7CisKKyAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAh
PSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6Omlu
R1BSKGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKKyAgICB9Cisg
ICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwcml2
YXRlOgogICAgIEdQUlJlZyBtX3NyYzsKIH07CiAKKyNpZiAhREZHX09TUgogLy8gPT09IFNwZWN1
bGF0aW9uQ2hlY2sgPT09CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0
IGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTEgQEAgc3RydWN0IFNw
ZWN1bGF0aW9uQ2hlY2sgewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9u
Q2hlY2ssIDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFERkdfT1NSCiAK
K2NsYXNzIFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAg
IDogbV9ub2RlSW5kZXgoTm9Ob2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
VmFsdWVTb3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChu
b2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAgfQorICAgIAor
ICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U2V0KCkpOworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorI2lmbmRl
ZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAor
cHJpdmF0ZToKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Cit9OworICAgIAorLy8gRGVzY3Jp
YmVzIGhvdyB0byByZWNvdmVyIGEgZ2l2ZW4gYnl0ZWNvZGUgdmlydHVhbCByZWdpc3RlciBhdCBh
IGdpdmVuCisvLyBjb2RlIHBvaW50LgorZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHsKKyAg
ICAvLyBJdCdzIGFscmVhZHkgaW4gdGhlIHJlZ2lzdGVyIGZpbGUgYXQgdGhlIHJpZ2h0IGxvY2F0
aW9uLgorICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIGEgcmVnaXN0
ZXIuCisgICAgSW5HUFIsCisgICAgVW5ib3hlZEludDMySW5HUFIsCisgICAgSW5GUFIsCisgICAg
Ly8gSXQncyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwgYnV0IGF0IGEgZGlmZmVyZW50IGxvY2F0aW9u
LgorICAgIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBjb25zdGFudC4K
KyAgICBDb25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVyIGl0LgorICAg
IERvbnRLbm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoKKyAgICBWYWx1
ZVJlY292ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAgICB7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZSgp
CisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
dGVjaG5pcXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3By
LCBEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoZGF0YUZvcm1h
dCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAg
ICAgICBpZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgIHJl
c3VsdC5tX3RlY2huaXF1ZSA9IFVuYm94ZWRJbnQzMkluR1BSOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291
cmNlLmdwciA9IGdwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5GUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIFZh
bHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkZQUjsK
KyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmZwciA9IGZwcjsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgZGlzcGxhY2VkSW5SZWdp
c3RlckZpbGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcpCisgICAgeworICAgICAgICBWYWx1
ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2Vk
SW5SZWdpc3RlckZpbGU7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmly
dHVhbFJlZzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFZhbHVlUmVjb3ZlcnkgY29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZh
bHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBDb25zdGFu
dDsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmNvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgVmFsdWVSZWNv
dmVyeVRlY2huaXF1ZSB0ZWNobmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZTsgfQor
ICAgIAorICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVj
aG5pcXVlID09IEluR1BSIHx8IG1fdGVjaG5pcXVlID09IFVuYm94ZWRJbnQzMkluR1BSKTsKKyAg
ICAgICAgcmV0dXJuIG1fc291cmNlLmdwcjsKKyAgICB9CisgICAgCisgICAgRlBSUmVnIGZwcigp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5GUFIpOworICAg
ICAgICByZXR1cm4gbV9zb3VyY2UuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2hu
aXF1ZSA9PSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJj
ZS52aXJ0dWFsUmVnOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAK
KyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5kaWYKKyAgICAK
K3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsKKyAgICB1
bmlvbiB7CisgICAgICAgIEdQUlJlZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25z
dGFudDsKKyAgICB9IG1fc291cmNlOworfTsKKworI2lmIERGR19PU1IKKy8vID09PSBPU1JFeGl0
ID09PQorLy8KKy8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3Bl
Y3VsYXRpdmUgcGF0aCBieQorLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgorc3RydWN0IE9T
UkV4aXQgeworICAgIE9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklU
KiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG1fY2hlY2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7Cisg
ICAgCisgICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFsdWVSZWNvdmVy
aWVzIHdoaWxlIGJlaW5nCisgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZlcnN1cyB2YXJp
YWJsZS4KKyAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgdmFsdWVSZWNvdmVyeShpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50c1tpbmRleF07CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleCAtIG1fYXJn
dW1lbnRzLnNpemUoKV07CisgICAgfQorICAgIGJvb2wgaXNBcmd1bWVudChpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICBpbnQg
YXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvckluZGV4KGludCBpbmRleCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKKyAgICB9
CisgICAgaW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOworICAg
IH0KKyAgICAKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1bWVudHM7CisgICAg
VmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOworICAgIGludCBtX2xhc3RTZXRP
cGVyYW5kOworfTsKK3R5cGVkZWYgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDE2PiBPU1JFeGl0
VmVjdG9yOworI2VuZGlmIC8vIERGR19PU1IKIAogLy8gPT09IFNwZWN1bGF0aXZlSklUID09PQog
Ly8KQEAgLTEwNSwyMSArMjkwLDI1IEBAIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0
aW9uQ2hlY2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFzc2VydGVkKSB0aHJvdWdoIHRo
ZSBkYXRhZmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVibGljIEpJVENvZGVHZW5lcmF0
b3IgewogICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKKyAgICBmcmllbmQgc3Ry
dWN0IE9TUkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGpp
dCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKLSAgICAgICAgLCBtX2Nv
bXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVjdWxhdGl2ZUpJVChKSVRDb21w
aWxlciYgaml0KTsKIAogICAgIGJvb2wgY29tcGlsZSgpOwogCiAgICAgLy8gUmV0cmlldmUgdGhl
IGxpc3Qgb2YgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGgsCiAgICAgLy8gYW5k
IGFkZGl0aW9uYWwgcmVjb3ZlcnkgaW5mb3JtYXRpb24uCisjaWYgIURGR19PU1IKICAgICBTcGVj
dWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlvbkNoZWNrcygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9zcGVjdWxhdGlvbkNoZWNrczsKICAgICB9CisjZWxzZQorICAgIE9TUkV4aXRWZWN0
b3ImIG9zckV4aXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29zckV4aXRzOworICAgIH0K
KyNlbmRpZgogICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHNwZWN1bGF0aW9uUmVjb3Zlcnkoc2l6
ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgLy8gU3BlY3VsYXRpb25DaGVjazo6bV9yZWNvdmVy
eUluZGV4IGlzIG9mZnNldCBieSAxLApAQCAtMTM5LDYgKzMyOCw3IEBAIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CiAgICAgCiAgICAgdm9pZCBjb21waWxlKE5v
ZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUo
QmFzaWNCbG9jayYpOwogCiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKQEAgLTIwMyw3
ICszOTMsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgICAgIHJldHVybjsKKyNpZiAhREZHX09TUgogICAgICAgICBtX3NwZWN1bGF0aW9u
Q2hlY2tzLmFwcGVuZChTcGVjdWxhdGlvbkNoZWNrKGp1bXBUb0ZhaWwsIHRoaXMpKTsKKyNlbHNl
CisgICAgICAgIG1fb3NyRXhpdHMuYXBwZW5kKE9TUkV4aXQoanVtcFRvRmFpbCwgdGhpcykpOwor
I2VuZGlmCiAgICAgfQogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGggYWRkaXRp
b25hbCByZWNvdmVyeS4KICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCkBA
IC0yMTEsNyArNDA1LDExIEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdC5h
cHBlbmQocmVjb3ZlcnkpOworI2lmICFERkdfT1NSCiAgICAgICAgIG1fc3BlY3VsYXRpb25DaGVj
a3MuYXBwZW5kKFNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFpbCwgdGhpcywgbV9zcGVjdWxhdGlv
blJlY292ZXJ5TGlzdC5zaXplKCkpKTsKKyNlbHNlCisgICAgICAgIG1fb3NyRXhpdHMuYXBwZW5k
KE9TUkV4aXQoanVtcFRvRmFpbCwgdGhpcywgbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdC5zaXpl
KCkpKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIHdlIHN0YXRpY2FsbHkg
ZGV0ZXJtaW5lIHRoYXQgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwuCkBAIC0yMjIsMTggKzQyMCw2
NCBAQCBwcml2YXRlOgogCiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiAgICAgR1BSUmVnIGZp
bGxTcGVjdWxhdGVJbnRJbnRlcm5hbChOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1h
dCk7Ci0KKyAgICAKICAgICAvLyBJdCBpcyBwb3NzaWJsZSwgZHVyaW5nIHNwZWN1bGF0aXZlIGdl
bmVyYXRpb24sIHRvIHJlYWNoIGEgc2l0dWF0aW9uIGluIHdoaWNoIHdlCiAgICAgLy8gY2FuIHN0
YXRpY2FsbHkgZGV0ZXJtaW5lIGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsIChmb3IgZXhhbXBsZSwg
d2hlbiB0d28gbm9kZXMKICAgICAvLyB3aWxsIG1ha2UgY29uZmxpY3Rpbmcgc3BlY3VsYXRpb25z
IGFib3V0IHRoZSBzYW1lIG9wZXJhbmQpLiBJbiBzdWNoIGNhc2VzIHRoaXMKICAgICAvLyBmbGFn
IGlzIGNsZWFyZWQsIGluZGljYXRpbmcgbm8gZnVydGhlciBjb2RlIGdlbmVyYXRpb24gc2hvdWxk
IHRha2UgcGxhY2UuCiAgICAgYm9vbCBtX2NvbXBpbGVPa2F5OworI2lmICFERkdfT1NSCiAgICAg
Ly8gVGhpcyB2ZWN0b3IgdHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRo
IHRvIHRoZSBub24tc3BlY3VsYXRpdmUgb25lLgogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3Ig
bV9zcGVjdWxhdGlvbkNoZWNrczsKKyNlbHNlCisgICAgLy8gVGhpcyB2ZWN0b3IgdHJhY2tzIGJh
aWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBvbGQgSklULgorICAgIE9T
UkV4aXRWZWN0b3IgbV9vc3JFeGl0czsKKyNlbmRpZgogICAgIC8vIFNvbWUgYmFpbC1vdXRzIG5l
ZWQgdG8gcmVjb3JkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVjb3JkaW5nIHNwZWNpZmljIHJl
Y292ZXJ5CiAgICAgLy8gdG8gYmUgcGVyZm9ybWVkIChmb3IgZXhhbXBsZSwgb24gZGV0ZWN0ZWQg
b3ZlcmZsb3cgZnJvbSBhbiBhZGQsIHdlIG1heSBuZWVkIHRvCiAgICAgLy8gcmV2ZXJzZSB0aGUg
YWRkaXRpb24gaWYgYW4gb3BlcmFuZCBpcyBiZWluZyBvdmVyd3JpdHRlbikuCiAgICAgVmVjdG9y
PFNwZWN1bGF0aW9uUmVjb3ZlcnksIDE2PiBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0OworICAg
IAorICAgIC8vIFRyYWNraW5nIGZvciB3aGljaCBub2RlcyBhcmUgY3VycmVudGx5IGhvbGRpbmcg
dGhlIHZhbHVlcyBvZiBhcmd1bWVudHMgYW5kIGJ5dGVjb2RlCisgICAgLy8gb3BlcmFuZC1pbmRl
eGVkIHZhcmlhYmxlcy4KKworICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlRm9yT3BlcmFuZChp
bnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZv
ck9wZXJhbmQob3BlcmFuZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZUluZGV4Rm9y
T3BlcmFuZChOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAg
IHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5v
ZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyB3aXRoIGNhcmUsIHNpbmNl
IGl0IGJvdGggcmV0dXJucyBhIHJlZmVyZW5jZSBpbnRvIGFuIGFycmF5CisgICAgLy8gYW5kIHBv
dGVudGlhbGx5IHJlc2l6ZXMgdGhlIGFycmF5LiAgU28gaXQgd291bGQgbm90IGJlIHJpZ2h0IHRv
IGNhbGwgdGhpcworICAgIC8vIHR3aWNlIGFuZCB0aGVuIHBlcmZvcm0gb3BlcmFuZHMgb24gYm90
aCByZWZlcmVuY2VzLCBzaW5jZSB0aGUgb25lIGZyb20KKyAgICAvLyB0aGUgZmlyc3QgY2FsbCBt
YXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgorICAgIFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElz
QXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQg
KyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7
CisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJpYWJsZXMuc2l6
ZSgpKQorICAgICAgICAgICAgbV92YXJpYWJsZXMucmVzaXplKG9wZXJhbmQgKyAxKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8VmFsdWVT
b3VyY2UsIDA+IG1fdmFyaWFibGVzOworICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIAor
ICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3QgVmFsdWVTb3Vy
Y2UmIHZhbHVlU291cmNlKTsKKworICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZVZhbHVlUmVj
b3ZlcnlGb3IodmFsdWVTb3VyY2VGb3JPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICB9CiB9OwogCiAK
QEAgLTQ1MywxMSArNjk3LDE3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlk
OwogfTsKIAotCiAvLyA9PT0gU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgPT09CiAvLwog
Ly8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgSklUIHRvIGNoZWNr
IHdoaWNoCiAvLyBub2RlcyByZXF1aXJlIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBzcGVjdWxhdGl2
ZSBwYXRoLgorI2lmIERGR19PU1IKKy8vIFRoaXMgYmVjb21lcyBhIHN0dWIgaWYgT1NSIGlzIGVu
YWJsZWQuCitjbGFzcyBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciB7CitwdWJsaWM6Cisg
ICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IoKSB7IH0KK307CisjZWxzZQogY2xhc3Mg
U3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgewogcHVibGljOgogICAgIFNwZWN1bGF0aW9u
Q2hlY2tJbmRleEl0ZXJhdG9yKFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3ImIHNwZWN1bGF0aW9uQ2hl
Y2tzKQpAQCAtNDgzLDcgKzczMywxNiBAQCBwcml2YXRlOgogICAgIFNwZWN1bGF0aW9uQ2hlY2tW
ZWN0b3I6Okl0ZXJhdG9yIG1faXRlcjsKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVy
YXRvciBtX2VuZDsKIH07CisjZW5kaWYKIAoraW5saW5lIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxh
dGl2ZUpJVChKSVRDb21waWxlciYgaml0KQorICAgIDogSklUQ29kZUdlbmVyYXRvcihqaXQsIHRy
dWUpCisgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCisgICAgLCBtX2FyZ3VtZW50cyhqaXQuY29k
ZUJsb2NrKCktPm1fbnVtUGFyYW1ldGVycykKKyAgICAsIG1fdmFyaWFibGVzKGppdC5jb2RlQmxv
Y2soKS0+bV9udW1WYXJzKQorICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKQoreworfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFw
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBhY3RKSVRDb2Rl
TWFwX2gKKyNkZWZpbmUgQ29tcGFjdEpJVENvZGVNYXBfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gR2l2ZXMgeW91IGEgY29tcHJlc3NlZCBt
YXAgYmV0d2VlbiBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kIG1hY2hpbmUgY29kZQorLy8g
ZW50cnkgcG9pbnRzLiBUaGUgY29tcHJlc3Npb24gc2ltcGx5IHRyaWVzIHRvIHVzZSBlaXRoZXIg
MSwgMiwgb3IgNCBieXRlcyBmb3IKKy8vIGFueSBnaXZlbiBvZmZzZXQuIFRoZSBsYXJnZXN0IG9m
ZnNldCB0aGF0IGNhbiBiZSBzdG9yZWQgaXMgMl4zMC4KKworLy8gRXhhbXBsZSB1c2U6CisvLwor
Ly8gQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgZW5jb2RlcihtYXApOworLy8gZW5jb2Rlci5h
cHBlbmQoYSwgYik7CisvLyBlbmNvZGVyLmFwcGVuZChjLCBkKTsgLy8gcHJlY29uZGl0aW9uczog
YyA+PSBhLCBkID49IGIKKy8vIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbWFwID0gZW5jb2Rl
ci5maW5pc2goKTsKKy8vCisvLyBBdCBzb21lIGxhdGVyIHRpbWU6CisvLworLy8gVmVjdG9yPEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZDsKKy8vIG1hcC0+ZGVjb2RlKGRlY29kZWQp
OworCitzdHJ1Y3QgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0IHsKKyAgICBCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQodW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCisgICAgICAg
IDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICwgbV9tYWNoaW5lQ29k
ZU9mZnNldChtYWNoaW5lQ29kZU9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0Owor
ICAgIAorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVJbmRleChCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFwcGlu
Zy0+bV9ieXRlY29kZUluZGV4OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIGdldE1hY2hpbmVDb2RlT2Zmc2V0KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGlu
ZykKKyAgICB7CisgICAgICAgIHJldHVybiBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0Owor
ICAgIH0KK307CisKK2NsYXNzIENvbXBhY3RKSVRDb2RlTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB+Q29tcGFjdEpJVENvZGVNYXAoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGRlY29kZShWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
PiYgcmVzdWx0KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNCeXRlY29k
ZUluZGV4ID0gMDsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9
IDA7CisgICAgICAgIAorICAgICAgICByZXN1bHQucmVzaXplKG1fbnVtYmVyT2ZFbnRyaWVzKTsK
KyAgICAgICAgdW5zaWduZWQgaiA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX251bWJlck9mRW50cmllczsgKytpKSB7CisgICAgICAgICAgICBwcmV2aW91c0J5dGVjb2Rl
SW5kZXggKz0gZGVjb2RlTnVtYmVyKGopOworICAgICAgICAgICAgcHJldmlvdXNNYWNoaW5lQ29k
ZU9mZnNldCArPSBkZWNvZGVOdW1iZXIoaik7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9ieXRl
Y29kZUluZGV4ID0gcHJldmlvdXNCeXRlY29kZUluZGV4OworICAgICAgICAgICAgcmVzdWx0W2ld
Lm1fbWFjaGluZUNvZGVPZmZzZXQgPSBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAgICAg
ICB9CisgICAgICAgIEFTU0VSVChqID09IG1fc2l6ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBDb21wYWN0SklUQ29kZU1hcCh1aW50OF90KiBidWZmZXIsIHVuc2lnbmVkIHNpemUsIHVu
c2lnbmVkIG51bWJlck9mRW50cmllcykKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAsIG1fc2l6ZShzaXplKQorI2VuZGlmCisgICAgICAg
ICwgbV9udW1iZXJPZkVudHJpZXMobnVtYmVyT2ZFbnRyaWVzKQorICAgIHsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHNpemUpOworICAgIH0KKyAgICAKKyAgICB1aW50OF90IGF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyW2luZGV4XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVj
b2RlTnVtYmVyKHVuc2lnbmVkJiBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3Qg
aGVhZFZhbHVlID0gYXQoaW5kZXgrKyk7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDEyOCkp
CisgICAgICAgICAgICByZXR1cm4gaGVhZFZhbHVlOworICAgICAgICBpZiAoIShoZWFkVmFsdWUg
JiA2NCkpCisgICAgICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWFkVmFs
dWUgJiB+MTI4KSA8PCA4KSB8IGF0KGluZGV4KyspOworICAgICAgICB1bnNpZ25lZCBzZWNvbmQg
PSBhdChpbmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgdGhpcmQgID0gYXQoaW5kZXgrKyk7Cisg
ICAgICAgIHVuc2lnbmVkIGZvdXJ0aCA9IGF0KGluZGV4KyspOworICAgICAgICByZXR1cm4gKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihoZWFkVmFsdWUgJiB+KDEyOCArIDY0KSkgPDwgMjQpIHwgKHNl
Y29uZCA8PCAxNikgfCAodGhpcmQgPDwgOCkgfCBmb3VydGg7CisgICAgfQorICAgIAorICAgIHVp
bnQ4X3QqIG1fYnVmZmVyOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBtX3Np
emU7CisjZW5kaWYKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cmllczsKKyAgICAKK3B1Ymxp
YzoKKyAgICBjbGFzcyBFbmNvZGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEVuY29kZXIoKTsK
KyAgICAgICAgfkVuY29kZXIoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgZW5zdXJlQ2FwYWNp
dHlGb3IodW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzVG9BZGQpOworICAgICAgICB2b2lkIGFwcGVu
ZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCk7Cisg
ICAgICAgIFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IGZpbmlzaCgpOworICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFwcGVuZEJ5dGUodWludDhfdCB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQgZW5jb2RlTnVtYmVyKHVpbnQzMl90IHZhbHVlKTsKKyAgICAKKyAgICAgICAg
dWludDhfdCogbV9idWZmZXI7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICAgICAgdW5z
aWduZWQgbV9jYXBhY2l0eTsKKyAgICAgICAgdW5zaWduZWQgbV9udW1iZXJPZkVudHJpZXM7Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleDsKKyAgICAg
ICAgdW5zaWduZWQgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAgIH07CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIEVuY29kZXI7Cit9OworCitpbmxpbmUgQ29tcGFjdEpJVENv
ZGVNYXA6OkVuY29kZXI6OkVuY29kZXIoKQorICAgIDogbV9idWZmZXIoMCkKKyAgICAsIG1fc2l6
ZSgwKQorICAgICwgbV9jYXBhY2l0eSgwKQorICAgICwgbV9udW1iZXJPZkVudHJpZXMoMCkKKyAg
ICAsIG1fcHJldmlvdXNCeXRlY29kZUluZGV4KDApCisgICAgLCBtX3ByZXZpb3VzTWFjaGluZUNv
ZGVPZmZzZXQoMCkKK3sKK30KKworaW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjp+
RW5jb2RlcigpCit7CisgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICBmYXN0RnJlZShtX2J1ZmZl
cik7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6
OmFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNl
dCkKK3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA+PSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRl
eCk7CisgICAgQVNTRVJUKG1hY2hpbmVDb2RlT2Zmc2V0ID49IG1fcHJldmlvdXNNYWNoaW5lQ29k
ZU9mZnNldCk7CisgICAgZW5zdXJlQ2FwYWNpdHlGb3IoMSk7CisgICAgZW5jb2RlTnVtYmVyKGJ5
dGVjb2RlSW5kZXggLSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCk7CisgICAgZW5jb2RlTnVtYmVy
KG1hY2hpbmVDb2RlT2Zmc2V0IC0gbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICBt
X3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAgbV9wcmV2aW91c01h
Y2hpbmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgbV9udW1iZXJPZkVudHJp
ZXMrKzsKK30KKworaW5saW5lIFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IENvbXBhY3RK
SVRDb2RlTWFwOjpFbmNvZGVyOjpmaW5pc2goKQoreworICAgIG1fY2FwYWNpdHkgPSBtX3NpemU7
CisgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2MobV9idWZm
ZXIsIG1fY2FwYWNpdHkpKTsKKyAgICBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IHJlc3VsdCA9
IGFkb3B0UHRyKG5ldyBDb21wYWN0SklUQ29kZU1hcChtX2J1ZmZlciwgbV9zaXplLCBtX251bWJl
ck9mRW50cmllcykpOworICAgIG1fYnVmZmVyID0gMDsKKyAgICBtX3NpemUgPSAwOworICAgIG1f
Y2FwYWNpdHkgPSAwOworICAgIG1fbnVtYmVyT2ZFbnRyaWVzID0gMDsKKyAgICBtX3ByZXZpb3Vz
Qnl0ZWNvZGVJbmRleCA9IDA7CisgICAgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsK
KyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKyAgICAgICAgCitpbmxpbmUgdm9pZCBD
b21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kQnl0ZSh1aW50OF90IHZhbHVlKQorewor
ICAgIEFTU0VSVChtX3NpemUgKyAxIDw9IG1fY2FwYWNpdHkpOworICAgIG1fYnVmZmVyW21fc2l6
ZSsrXSA9IHZhbHVlOworfQorICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVu
Y29kZXI6OmVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXpl
ICsgNCA8PSBtX2NhcGFjaXR5KTsKKyAgICBBU1NFUlQodmFsdWUgPCAxPDwzMCk7CisgICAgaWYg
KHZhbHVlIDw9IDEyNykgeworICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbHVlKTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7Cisg
ICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlIDw9IDE2
MzgzKSB7CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
dmFsdWUgPj4gOCk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDEyOCkpOworICAgICAg
ICBBU1NFUlQoIShoZWFkVmFsdWUgJiA2NCkpOworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1
ZSB8IDEyOCk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUp
KTsKKyAgICB9IGVsc2UgeworICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbHVlID4+IDI0KTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4
KSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDY0KSk7CisgICAgICAgIGFwcGVuZEJ5
dGUoaGVhZFZhbHVlIHwgMTI4IHwgNjQpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbHVlID4+IDE2KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8
dWludDhfdD4odmFsdWUgPj4gOCkpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHZhbHVlKSk7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1h
cDo6RW5jb2Rlcjo6ZW5zdXJlQ2FwYWNpdHlGb3IodW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzVG9B
ZGQpCit7CisgICAgdW5zaWduZWQgY2FwYWNpdHlOZWVkZWQgPSBtX3NpemUgKyBudW1iZXJPZkVu
dHJpZXNUb0FkZCAqIDIgKiA0OworICAgIGlmIChjYXBhY2l0eU5lZWRlZCA+IG1fY2FwYWNpdHkp
IHsKKyAgICAgICAgbV9jYXBhY2l0eSA9IGNhcGFjaXR5TmVlZGVkICogMjsKKyAgICAgICAgbV9i
dWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG1fY2Fw
YWNpdHkpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29t
cGFjdEpJVENvZGVNYXBfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIwOSw2ICsyMDksMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogCiAgICAgICAgIG1fbGFiZWxzW21fYnl0ZWNvZGVPZmZzZXRdID0gbGFiZWwoKTsKIAor
I2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIGlmIChtX2NhbkJlT3B0aW1p
emVkKQorICAgICAgICAgICAgbV9qaXRDb2RlTWFwRW5jb2Rlci5hcHBlbmQobV9ieXRlY29kZU9m
ZnNldCwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworI2VuZGlm
CisKICAgICAgICAgc3dpdGNoIChtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5z
dHJ1Y3Rpb24tPnUub3Bjb2RlKSkgewogICAgICAgICBERUZJTkVfQklOQVJZX09QKG9wX2RlbF9i
eV92YWwpCiAgICAgICAgIERFRklORV9CSU5BUllfT1Aob3BfaW4pCkBAIC0zNzMsNyArMzc4LDYg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogI2VuZGlmCiB9CiAKLQogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTGlua1Bhc3MoKQogewogICAgIHVuc2lnbmVkIGptcFRhYmxl
Q291bnQgPSBtX2ptcFRhYmxlLnNpemUoKTsKQEAgLTUwMiw2ICs1MDYsOCBAQCBKSVRDb2RlIEpJ
VDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiB7CiAjaWYgRU5BQkxFKFRJRVJFRF9DT01Q
SUxBVElPTikKICAgICBtX2NhbkJlT3B0aW1pemVkID0gbV9jb2RlQmxvY2stPmNhbkNvbXBpbGVX
aXRoREZHKCk7CisgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgIG1fc3RhcnRPZkNv
ZGUgPSBsYWJlbCgpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gSnVzdCBhZGQgYSBsaXR0bGUgYml0
IG9mIHJhbmRvbW5lc3MgdG8gdGhlIGNvZGVnZW4KQEAgLTY0Miw2ICs2NDgsMTEgQEAgSklUQ29k
ZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogICAgICAgICBpbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhtX21ldGhvZENhbGxD
b21waWxhdGlvbkluZm9baV0ucHJvcGVydHlBY2Nlc3NJbmRleCkuY2FsbFJldHVybkxvY2F0aW9u
OwogICAgIH0KIAorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgaWYgKG1fY2Fu
QmVPcHRpbWl6ZWQpCisgICAgICAgIG1fY29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29k
ZU1hcEVuY29kZXIuZmluaXNoKCkpOworI2VuZGlmCisKICAgICBpZiAobV9jb2RlQmxvY2stPmNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAg
ICAgICAqZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFy
aXR5Q2hlY2spOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5
NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDYgKzQwLDcgQEAKICNkZWZpbmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBl
Y3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FHRShhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0
IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5vdCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8
aW50PihleHBlY3RlZCksIHN0YXRpY19jYXN0PGludD4oYWN0dWFsKSk7CiAKICNpbmNsdWRlICJD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJPcGNv
ZGUuaCIKQEAgLTEwNTQsNiArMTA1NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNp
ZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6
ZWQ7CisgICAgICAgIExhYmVsIG1fc3RhcnRPZkNvZGU7CisgICAgICAgIENvbXBhY3RKSVRDb2Rl
TWFwOjpFbmNvZGVyIG1faml0Q29kZU1hcEVuY29kZXI7CiAjZW5kaWYKICAgICB9IEpJVF9DTEFT
U19BTElHTk1FTlQ7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTky
LDkgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgcGFy
c2VyKG5ldyBQYXJzZXIpCiAgICAgLCBpbnRlcnByZXRlcigwKQogICAgICwgaGVhcCh0aGlzLCBo
ZWFwU2l6ZSkKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICwgbnVtYmVyT2ZT
bG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIoMCkKKyNlbmRpZgogICAgICwgZHluYW1pY0dsb2Jh
bE9iamVjdCgwKQogICAgICwgY2FjaGVkVVRDT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6cXVpZXRfTmFOKCkpCiAgICAgLCBtYXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tUeXBl
ID09IFRocmVhZFN0YWNrVHlwZVNtYWxsID8gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggOiBN
YXhMYXJnZVRocmVhZFJlZW50cnlEZXB0aCkKQEAgLTM1Nyw2ICszNjAsMTEgQEAgSlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKCkKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgZGVs
ZXRlIG1fcnRUcmFjZUxpc3Q7CiAjZW5kaWYKKworI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJ
T04pCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9zclNjcmF0Y2hCdWZmZXJzLnNpemUo
KTsgKytpKQorICAgICAgICBmYXN0RnJlZShvc3JTY3JhdGNoQnVmZmVyc1tpXSk7CisjZW5kaWYK
IH0KIAogUGFzc1JlZlB0cjxKU0dsb2JhbERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4
dEdyb3VwKFRocmVhZFN0YWNrVHlwZSB0eXBlLCBIZWFwU2l6ZSBoZWFwU2l6ZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5
NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmbmRl
ZiBOREVCVUcKICAgICAgICAgaW50NjRfdCBkZWJ1Z0RhdGFCdWZmZXJbNjRdOwogI2VuZGlmCisj
aWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgVmVjdG9yPGludDY0X3QqPiBv
c3JTY3JhdGNoQnVmZmVyczsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mU2xvdHNJbkxhc3RPU1JT
Y3JhdGNoQnVmZmVyOworICAgICAgICAKKyAgICAgICAgaW50NjRfdCogb3NyU2NyYXRjaEJ1ZmZl
ckZvclNpemUodW5zaWduZWQgbnVtYmVyT2ZTbG90cykKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCFudW1iZXJPZlNsb3RzKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAobnVtYmVyT2ZTbG90cyA+IG51bWJlck9mU2xvdHNJbkxhc3RP
U1JTY3JhdGNoQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGEg
Tl4yIG1lbW9yeSB1c2FnZSBwYXRob2xvZ3kgYnkgZW5zdXJpbmcKKyAgICAgICAgICAgICAgICAv
LyB0aGF0IGF0IHdvcnN0LCB3ZSBnZXQgYSBnZW9tZXRyaWMgc2VyaWVzLCBtZWFuaW5nIHRoYXQg
dGhlCisgICAgICAgICAgICAgICAgLy8gdG90YWwgbWVtb3J5IHVzYWdlIGlzIHNvbWV3aGVyZSBh
cm91bmQKKyAgICAgICAgICAgICAgICAvLyBtYXgoc2NyYXRjaCBidWZmZXIgc2l6ZSkgKiA0Lgor
ICAgICAgICAgICAgICAgIG51bWJlck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyID0gbnVt
YmVyT2ZTbG90cyAqIDI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3NyU2Ny
YXRjaEJ1ZmZlcnMuYXBwZW5kKHN0YXRpY19jYXN0PGludDY0X3QqPihmYXN0TWFsbG9jKHNpemVv
ZihpbnQ2NF90KSAqIG51bWJlck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyKSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3NyU2NyYXRjaEJ1
ZmZlcnMubGFzdCgpOworICAgICAgICB9CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hN
YXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xh
c3NEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJ
KHJldmlzaW9uIDk0ODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBKU09iamVjdCogSlNWYWx1
ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShFCiAjaWZuZGVmIE5ERUJVRwogY2hhciogSlNWYWx1ZTo6
ZGVzY3JpcHRpb24oKQogewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDMyOworICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDY0OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0
aW9uW3NpemVdOwogCiAgICAgaWYgKCEqdGhpcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106943</attachid>
            <date>2011-09-09 16:59:40 -0700</date>
            <delta_ts>2011-09-10 13:10:17 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>osr_patch_2.diff</filename>
            <type>text/plain</type>
            <size>81008</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm90ZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMDkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnppcCBpbml0aWFsaXphdGlvbiBsaXN0cyBhbmQgY29uc3Ry
dWN0b3JzIGluIEpTQ2VsbCBoaWVyYXJjaHkgKDUvNykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw3IEBACiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgy
NDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0
MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggKi87IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
MUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgy
RTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0
IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3
NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5j
cHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4
OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAt
Nzg5LDYgKzc5MCw3IEBACiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsg
cGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9
IGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0Nh
cGFiaWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFC
MTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9z
aXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAw
Q0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY4LDYg
KzE1NzAsNyBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAx
NzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBE
Q0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENG
QzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVD
NkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAg
LTIzODIsNiArMjM4NSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFS
TUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMy
IC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTRE
MDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5k
ZWYgQ29kZUJsb2NrX2gKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RK
SVRDb2RlTWFwLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3Ry
dWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29k
ZU1hcChQYXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAg
ICAgIENvbXBhY3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBF
TkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3Ry
dWN0aW9uKiByZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRo
QXJpdHlDaGVjazsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRp
ZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0
SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJ
TEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJv
ZmlsZXM7CiAjZW5kaWYKQEAgLTY2Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJs
b2NrPiBtX2FsdGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJh
cmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIG1fY29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRK
U0NvbnN0YW50KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1
cnJlbnRDb2RlT3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3Vy
cmVudEluZGV4KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUg
YW5kIGFkZCBpdCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAv
LyAnbXVzdEdlbmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2Vk
IHRvIGVuc3VyZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJl
c3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5h
cHBlbmQoTm9kZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsK
KyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hp
bGQxLCBjaGlsZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJh
dGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3
LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJ
bmZvIGluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5k
ZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dy
YXBoLmFwcGVuZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIs
IGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9y
aWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9w
ICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4
KTsKQEAgLTM5Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBo
KE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5k
ZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3Vy
cmVudEluZGV4LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGlu
Zm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQw
Miw3ICs0MDYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZh
ckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsK
ICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUo
KTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJl
bnRJbmRleCwgaW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0g
bV9udW1QYXNzZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZv
MSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZh
ckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNz
ZWRWYXJBcmdzID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dQUkluZm8uaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gOTsKIAogICAgIC8v
IFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4KKyAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3RhdGlj
IGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjEyOwog
ICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6
OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IFg4
NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5l
cmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxMiArMjc0
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7CiAgICAgfQogCi0jaWZuZGVmIE5E
RUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7
CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBub2Rl
IHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk0ODc5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENv
CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAgdW5zaWduZWQgcmVmQ291bnQgPSBu
b2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkgewotICAgICAgICBwcmludGYoIiUg
NGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0gIXJlZkNvdW50OwogICAgIGJvb2wg
bXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKLSAgICBpZiAobXVzdEdlbmVyYXRl
KQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAgQVNTRVJUKHJlZkNvdW50KTsKICAg
ICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9m
IGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3LDggKzc2LDggQEAgdm9pZCBHcmFw
aDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAgICAgICAgJCMgICAtIHRo
ZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25z
dGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNp
bWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENv
ZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1w
KCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAg
ICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2Vk
IGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBwcmludGYoIiUg
NGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCBy
ZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCisgICAgcHJpbnRmKCIlIDRkOiVz
PCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAg
ICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5v
ZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZp
cnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTgsMTcgKzExMTgsMTcgQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0LmFkZFB0cihJ
bW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVn
aXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAogICAgIEpJVENvbXBp
bGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAgICBtX2ppdC5ub3RpZnlD
YWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZv
KTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKICAg
ICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9q
aXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9q
aXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgSklUQ29tcGls
ZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVj
ayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3Jp
Z2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3MpLCBHUFJJbmZvOjpyZWdUMSk7CiAg
ICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lz
dGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0g
ICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwg
bV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgbV9qaXQu
bm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3Jh
cGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CiAgICAgCkBAIC0xMTM2LDcgKzExMzYsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1f
Y29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9D
aGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZv
KTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNr
LCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogfQog
CiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6
Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDUs
NyArOTA1LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
biwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgICAg
IHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCBtX2pp
dC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICB9CiAKICAgICB2b2lk
IGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBk
ZXN0aW5hdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDIzNSBAQCB2
b2lkIEpJVENvbXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXggbm9kCiAgICAgbG9hZFB0cihhZGRy
ZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIpOwogfQogCisjaWYgREZHX09TUgor
dm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBl
eGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQoreworICAgIC8vIDApIFByby1mb3JtYSBzdHVm
Zi4KKyAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKKworI2lmIERGR19ERUJVR19WRVJCT1NF
CisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3IgTm9kZSBAJWQgKGJjIyV1KSBhdCBK
SVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KWV4aXQubV9ub2RlSW5kZXgsIGV4aXQubV9ieXRlY29k
ZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyNlbmRpZgorI2lmIERGR19KSVRfQlJFQUtfT05fU1BF
Q1VMQVRJT05fRkFJTFVSRQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERG
R19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1
Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAg
ZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1Z0luZm8tPmRlYnVn
T2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRp
b25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRpZgorCisgICAgLy8g
MSkgUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxh
eSB3aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZv
cmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgorICAgIAor
ICAgIEdQUlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIGlmIChy
ZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwg
cmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgYWxyZWFkeUJveGVk
ID0gcmVjb3ZlcnktPmRlc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CisgICAgICAgICAgICB4b3JQdHIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3Zlcnkt
PmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2Rl
IGFzc3VtZXMgdGhhdCBpdCBpcyBwcm9maXRhYmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQor
ICAgIC8vIGJldHdlZW4gd2hlbiBzb21ldGhpbmcgaXMgY29tcHV0ZWQgYW5kIHdoZW4gaXQgaXMg
c3RvcmVkLgorICAgIAorICAgIC8vIDIpIFBlcmZvcm0gYWxsIHJlYm94aW5nIG9mIGludGVnZXJz
LgorICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSICYmIHJlY292ZXJ5LmdwcigpICE9IGFscmVh
ZHlCb3hlZCkKKyAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVjb3ZlcnkuZ3ByKCkpOworICAgIH0KKyAgICAKKyAgICAvLyAzKSBEdW1wIGFsbCBHUFJT
IGFuZCBub24tdW5kZWZpbmVkIGNvbnN0YW50cyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLgorICAg
IAorICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOworCisgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5k
ZXgpOworICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KTsK
KyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNlIElu
R1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgc3RvcmVQ
dHIocmVjb3ZlcnkuZ3ByKCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAg
IGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAg
aGF2ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
c3RvcmVQdHIoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQo
KSkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyA0KSBEdW1wIGFsbCBVbmRlZmluZWQncyBpbnRvIHRoZSByZWdp
c3RlciBmaWxlLiBVbmRlZmluZWQgaXMgdHJlYXRlZAorICAgIC8vICAgIHNwZWNpYWxseSBiZWNh
dXNlIHdlIGV4cGVjdCB0aGVyZSB0byBiZSBlbm91Z2ggY2FzZXMgd2hlcmUgd2UgZHVtcAorICAg
IC8vICAgIFVuZGVmaW5lZCB0aGF0IHdlIHdhbnQgdG8gc2V0IGl0IG9uY2UgaW4gYSByZWdpc3Rl
ciBhbmQgdGhlbgorICAgIC8vICAgIHN0b3JlIHRoZSB2YWx1ZSBvZiB0aGF0IHJlZ2lzdGVyIGlu
dG8gd2hlcmV2ZXIgaXQgbmVlZHMgdG8gZ28uCisgICAgCisgICAgaWYgKGhhdmVVbmRlZmluZWQp
IHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDb25zdGFudCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghcmVjb3ZlcnkuY29uc3RhbnQo
KS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
c3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAv
LyA1KSBCb3ggYWxsIGRvdWJsZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhh
biBGUFJzKQorICAgIAorICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJl
ck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgaWYgKHJlY292
ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsKKyAgICAgICAgR1BSUmVnIGdwciA9IEdQUklu
Zm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChmcHIpKTsKKyAgICAgICAgYm94RG91Ymxl
KGZwciwgZ3ByKTsKKyAgICB9CisgICAgCisgICAgLy8gNikgRHVtcCBhbGwgZG91YmxlcyBpbnRv
IHRoZSByZWdpc3RlciBmaWxlLiBBbHNvIGNvdW50IHRoZSBudW1iZXIgb2YKKyAgICAvLyAgICBk
aXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMsIHdoaWNoIGlzIHVzZWQgYXMgYW4gb3B0aW1pemF0
aW9uIGluCisgICAgLy8gICAgdGhlIG5leHQgc3RhZ2UuCisgICAgCisgICAgdW5zaWduZWQgbnVt
YmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKKyAgICAKKyAgICBmb3IgKGludCBp
bmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgewor
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVy
eShpbmRleCk7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAg
ICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIo
RlBSSW5mbzo6dG9JbmRleChyZWNvdmVyeS5mcHIoKSkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJl
ck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICAvLyA3KSBSZXNodWZmbGUgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXJzLiBPcHRpbWl6
ZSBmb3IgdGhlIGNhc2UgdGhhdAorICAgIC8vICAgIHRoZSBudW1iZXIgb2YgZGlzcGxhY2VkIHZp
cnR1YWwgcmVnaXN0ZXJzIGlzIG5vdCBtb3JlIHRoYW4gdGhlIG51bWJlcgorICAgIC8vICAgIG9m
IGF2YWlsYWJsZSBwaHlzaWNhbCByZWdpc3RlcnMuCisgICAgCisgICAgaWYgKG51bWJlck9mRGlz
cGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykgewor
ICAgICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNlIHRoYXQgdHJpZ2dl
cnMgYWxsIHRoZSB0aW1lLCBidXQKKyAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50
ZWVkLgorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXggPSAwOwor
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1
YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVz
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5
ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxh
Y2VtZW50SW5kZXgrKyksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRG
b3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0aG0gdGhhdCB3ZSB1c2UK
KyAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5ub24tc3BlY3VsYXRpdmUganVtcHMsIGlmIHdl
IGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBv
ZiBsaXZlIHZhbHVlcyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgIC8vIHNwaWxsZWQg
cmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3BlY3VsYXRpb24uCisgICAgICAgIAor
ICAgICAgICAvLyBGb3Igbm93IHRoaXMgY29kZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3Qg
YnV0IHByb2JhYmx5IG5vdAorICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQgY29y
cmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAgLy8gdGhlIGRp
c3BsYWNlbWVudHMgYXJlIGEgcGVybXV0YXRpb24gb2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlcywg
bGlrZQorICAgICAgICAvLworICAgICAgICAvLyAxIC0+IDIKKyAgICAgICAgLy8gMiAtPiAxCisg
ICAgICAgIC8vCisgICAgICAgIC8vIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0
aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3RlcnMKKyAgICAgICAgLy8gZnJvbSB0aGVpciBv
bGQgKERGRyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0Y2gKKyAg
ICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0cmFuc2ZlcnJpbmcgZnJvbSB0
aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBs
b2NhdGlvbnMuCisgICAgICAgIAorICAgICAgICBpbnQ2NF90KiBzY3JhdGNoQnVmZmVyID0gZ2xv
YmFsRGF0YSgpLT5vc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1iZXJPZkRpc3BsYWNlZFZpcnR1
YWxSZWdpc3RlcnMpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5k
ZXggPSAwOworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJP
ZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBkaXNwbGFjZW1lbnRJbmRleCsr
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAwOwor
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zl
cnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNoQnVmZmVyICsgZGlzcGxhY2Vt
ZW50SW5kZXgrKywgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyA4KSBMb2FkIHRoZSBy
ZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgCisg
ICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAg
CisgICAgLy8gOSkgRml4IGNhbGwgZnJhbWUuCisgICAgCisgICAgQVNTRVJUKGNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwor
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBh
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAg
ICAKKyAgICAvLyAxMCkgSnVtcCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBj
b2RlLgorICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFy
eVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1h
Y2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRl
Y29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIHZvaWQqIGp1
bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVENvZGUoKS5zdGFydCgpKSAr
IG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIEFTU0VSVChHUFJJbmZvOjpyZWdU
MSAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAganVtcChHUFJJbmZvOjpyZWdU
MSk7CisKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXBc
biIsIGp1bXBUYXJnZXQpOworI2VuZGlmCit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JF
eGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCit7CisgICAgVmVjdG9yPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7CisgICAgQVNTRVJUKGNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkt
PmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVC
bG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCkpOworICAgIGNvZGVCbG9jaygpLT5h
bHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCktPmRlY29kZShkZWNvZGVkQ29kZU1hcCk7CisgICAg
CisgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3VsYXRpdmUub3Ny
RXhpdHMoKS5iZWdpbigpOworICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzRW5kID0g
c3BlY3VsYXRpdmUub3NyRXhpdHMoKS5lbmQoKTsKKyAgICAKKyAgICB3aGlsZSAoZXhpdHNJdGVy
ICE9IGV4aXRzRW5kKSB7CisgICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAqZXhpdHNJdGVy
OworICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1
bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpLCBkZWNvZGVkQ29kZU1hcCk7Cisg
ICAgICAgICsrZXhpdHNJdGVyOworICAgIH0KK30KKyNlbHNlIC8vIERGR19PU1IKIGNsYXNzIEdl
bmVyYWxpemVkUmVnaXN0ZXIgewogcHVibGljOgogICAgIEdlbmVyYWxpemVkUmVnaXN0ZXIoKSB7
IH0KQEAgLTgwMyw2ICsxMDMyLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua1NwZWN1bGF0aW9u
Q2hlY2tzKAogICAgIEFTU0VSVCghKGNoZWNrc0l0ZXIgIT0gY2hlY2tzRW5kKSk7CiAgICAgQVNT
RVJUKCEoZW50cmllc0l0ZXIgIT0gZW50cmllc0VuZCkpOwogfQorI2VuZGlmIC8vIERGR19PU1IK
IAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKIHsKQEAgLTg0NCwxMiArMTA3NCwx
NiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgLy8gdG8gYWxsb3cgaXQg
dG8gY2hlY2sgd2hpY2ggbm9kZXMgaW4gdGhlIGdyYXBoIG1heSBiYWlsIG91dCwgYW5kIG1heSBu
ZWVkIHRvIHJlZW50ZXIgdGhlCiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBhdGguCiAgICAgaWYg
KGNvbXBpbGVkU3BlY3VsYXRpdmUpIHsKKyNpZiBERkdfT1NSCisgICAgICAgIGxpbmtPU1JFeGl0
cyhzcGVjdWxhdGl2ZSk7CisjZWxzZQogICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVy
YXRvciBjaGVja0l0ZXJhdG9yKHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uQ2hlY2tzKCkpOwogICAg
ICAgICBOb25TcGVjdWxhdGl2ZUpJVCBub25TcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgICAgIG5v
blNwZWN1bGF0aXZlLmNvbXBpbGUoY2hlY2tJdGVyYXRvcik7CiAKICAgICAgICAgLy8gTGluayB0
aGUgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIGNvcnJlc3BvbmRp
bmcgZW50cnkgcG9pbnRzIGludG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAgICAgIGxp
bmtTcGVjdWxhdGlvbkNoZWNrcyhzcGVjdWxhdGl2ZSwgbm9uU3BlY3VsYXRpdmUpOworI2VuZGlm
CiAgICAgfSBlbHNlIHsKICNpZiBERkdfREVCVUdfVkVSQk9TRQogICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CkBAIC04NjIsOCArMTA5
NiwxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgICAgIG1fbWV0aG9k
R2V0cy5jbGVhcigpOwogICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0aEJlZ2lu
KTsKIAorI2lmIERGR19PU1IKKyAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3Ig
Y2hlY2tJdGVyYXRvcjsKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3Igbm9D
aGVja3M7CiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIGNoZWNrSXRlcmF0
b3Iobm9DaGVja3MpOworI2VuZGlmCiAgICAgICAgIE5vblNwZWN1bGF0aXZlSklUIG5vblNwZWN1
bGF0aXZlKCp0aGlzKTsKICAgICAgICAgbm9uU3BlY3VsYXRpdmUuY29tcGlsZShjaGVja0l0ZXJh
dG9yKTsKICAgICB9CkBAIC05MTEsNyArMTE0OSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxpbmso
TGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2Fs
bHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChtX2NhbGxzW2ldLm1faGFuZGxlc0V4
Y2VwdGlvbnMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXR1cm5BZGRyZXNzT2Zmc2V0
ID0gbGlua0J1ZmZlci5yZXR1cm5BZGRyZXNzT2Zmc2V0KG1fY2FsbHNbaV0ubV9jYWxsKTsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25JbmZvID0gbV9jYWxsc1tpXS5tX2V4Y2Vw
dGlvbkluZm87CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhjZXB0aW9uSW5mbyA9IG1fY2Fs
bHNbaV0ubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1cm5PZmZzZXRU
b0J5dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbkluZm8pKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAg
Y2xhc3MgU3BlY3VsYXRpb25SZWNvdmVyeTsKIAogc3RydWN0IEVudHJ5TG9jYXRpb247CiBzdHJ1
Y3QgU3BlY3VsYXRpb25DaGVjazsKK3N0cnVjdCBPU1JFeGl0OwogCiAjaWZuZGVmIE5ERUJVRwog
dHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCop
OwpAQCAtODIsMjEgKzgzLDIxIEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICB9CiAKICAgICAv
LyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHdpdGggYW4gZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAg
Q2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlv
biwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkluZm8gZXhj
ZXB0aW9uSW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1
bmN0aW9uUHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAs
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNlcHRpb25DaGVjayhleGNlcHRp
b25DaGVjaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAg
ICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRp
b25zKHRydWUpCiAgICAgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwg
dGhhdCBtYXkgY2F1c2UgZXhjZXB0aW9ucywgYnV0IHdoaWNoIGFyZSBoYW5kbGVkCiAgICAgLy8g
dGhyb3VnaCBzb21lIG1lY2hhbmlzbSBvdGhlciB0aGFuIHRoZSBpbi1saW5lIGV4Y2VwdGlvbiBo
YW5kbGVyLgotICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rp
b25QdHIgZnVuY3Rpb24sIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsUmVj
b3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9m
dW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5m
bykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRs
ZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KQEAgLTEwNCw3ICsxMDUsNyBAQCBzdHJ1
Y3QgQ2FsbFJlY29yZCB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOwogICAgIEZ1
bmN0aW9uUHRyIG1fZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNlcHRp
b25DaGVjazsKLSAgICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBDb2RlT3Jp
Z2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFuZGxlc0V4Y2VwdGlvbnM7CiB9OwogCkBA
IC0xOTIsOSArMTkzLDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIE5vdGlmeSB0aGUgSklU
IG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2b2lkIG5vdGlm
eUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQgbm90aWZ5
Q2FsbChDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIG1f
Y2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgRnVuY3Rpb25QdHIoKSwgZXhjZXB0aW9uSW5m
bykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIEZ1bmN0aW9uUHRy
KCksIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KQEAgLTIwNSwyMCArMjA2LDIwIEBA
IHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3
aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNpZ25lZCBleGNlcHRpb25JbmZv
KQorICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
ciYgZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwg
ZnVuY3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJh
bmNoVGVzdFB0cihOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhjZXB0
aW9uKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBm
dW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9jYWxs
cy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVj
aywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAg
ICAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNl
cHRpb24gY2hlY2sgdGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCi0gICAg
Q2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYg
ZnVuY3Rpb24sIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0
aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIENvZGVPcmln
aW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgp
OwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
ZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsK
KyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9u
LCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25D
YWxsOwogICAgIH0KICAgICAKQEAgLTMxMSw5ICszMTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1f
bWV0aG9kR2V0cy5hcHBlbmQoTWV0aG9kR2V0UmVjb3JkKHNsb3dDYWxsLCBzdHJ1Y3RUb0NvbXBh
cmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwg
RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRp
b25JbmZvKQorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGws
IERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQogICAgIHsKLSAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFz
dENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbkluZm8pKTsK
KyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxs
LCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKIHByaXZhdGU6
CkBAIC0zMjYsOCArMzI3LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsTnVtZXJpY1RvRG91
YmxlKE5vZGVJbmRleCwgRlBSUmVnLCBHUFJSZWcgdGVtcG9yYXJ5KTsKICAgICB2b2lkIGZpbGxJ
bnQzMlRvSW50ZWdlcihOb2RlSW5kZXgsIEdQUlJlZyk7CiAgICAgdm9pZCBmaWxsVG9KUyhOb2Rl
SW5kZXgsIEdQUlJlZyk7CisgICAgCisjaWYgREZHX09TUgorICAgIHZvaWQgZXhpdFNwZWN1bGF0
aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIFZlY3RvcjxC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCk7CisgICAgdm9pZCBsaW5r
T1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmKTsKKyNlbHNlCiAgICAgdm9pZCBqdW1wRnJvbVNwZWN1
bGF0aXZlVG9Ob25TcGVjdWxhdGl2ZShjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiwgY29uc3QgRW50
cnlMb2NhdGlvbiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBOb2RlVG9SZWdpc3Rlck1hcCYgY2hl
Y2tOb2RlVG9SZWdpc3Rlck1hcCwgTm9kZVRvUmVnaXN0ZXJNYXAmIGVudHJ5Tm9kZVRvUmVnaXN0
ZXJNYXApOwogICAgIHZvaWQgbGlua1NwZWN1bGF0aW9uQ2hlY2tzKFNwZWN1bGF0aXZlSklUJiwg
Tm9uU3BlY3VsYXRpdmVKSVQmKTsKKyNlbmRpZgogCiAgICAgLy8gVGhlIGdsb2JhbERhdGEsIHVz
ZWQgdG8gYWNjZXNzIGNvbnN0YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KICAgICBKU0dsb2JhbERh
dGEqIG1fZ2xvYmFsRGF0YTsKQEAgLTM4NiwxMiArMzkzLDEyIEBAIHByaXZhdGU6CiAgICAgfTsK
ICAgICAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNDYWxsUmVjb3JkKENh
bGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBi
b29sIGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICAgICAgSlNDYWxsUmVjb3Jk
KENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
LCBib29sIGlzQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgOiBtX2Zh
c3RDYWxsKGZhc3RDYWxsKQogICAgICAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dDYWxsKQogICAg
ICAgICAgICAgLCBtX3RhcmdldFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKICAgICAgICAgICAgICwg
bV9pc0NhbGwoaXNDYWxsKQotICAgICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9u
SW5mbykKKyAgICAgICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTM5OSw3ICs0MDYsNyBAQCBwcml2YXRlOgogICAgICAg
ICBDYWxsIG1fc2xvd0NhbGw7CiAgICAgICAgIERhdGFMYWJlbFB0ciBtX3RhcmdldFRvQ2hlY2s7
CiAgICAgICAgIGJvb2wgbV9pc0NhbGw7Ci0gICAgICAgIHVuc2lnbmVkIG1fZXhjZXB0aW9uSW5m
bzsKKyAgICAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgfTsKIAogICAgIFZlY3Rv
cjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0ODc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcg
QEAKICNpZm5kZWYgREZHTm9kZV9oCiAjZGVmaW5lIERGR05vZGVfaAogCi0vLyBFbWl0IHZhcmlv
dXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0
aGUgZGF0YWZsb3cgZ3JhcGhzLgorLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24g
Zm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBocy4gU2V0
IHRvIDEgZm9yIGJhc2ljIHZlcmJvc2l0eSwgb3IgdG8gMiBmb3IgbW9yZSB2ZXJib3NpdHkuCiAj
ZGVmaW5lIERGR19ERUJVR19WRVJCT1NFIDAKIC8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGR5bmFt
aWMgY2hlY2tzIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4KICNpZiAhQVNTRVJUX0RJU0FC
TEVECkBAIC01MCw2ICs1MCw4IEBACiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFIDAK
IC8vIERpc2FibGUgdGhlIFNwZWN1bGF0aXZlSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBs
YXRmb3JtLmghCiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNVTEFUSVZFIDAK
Ky8vIERpc2FibGUgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5zdGVhZC4K
KyNkZWZpbmUgREZHX09TUiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogLy8gR2VuZXJhdGUg
c3RhdHMgb24gaG93IHN1Y2Nlc3NmdWwgd2Ugd2VyZSBpbiBtYWtpbmcgdXNlIG9mIHRoZSBERkcg
aml0LCBhbmQgcmVtYWluaW5nIG9uIHRoZSBob3QgcGF0aC4KICNkZWZpbmUgREZHX1NVQ0NFU1Nf
U1RBVFMgMAogCkBAIC03Miw5ICs3NCwzMiBAQCBDT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVh
bFJlZ2lzdGVyKSA9CiB0eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRpYyBjb25zdCBO
b2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CiAKLS8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFw
IGJhY2sgZnJvbSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9u
LgorLy8gSW5mb3JtYXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBh
bnkgaGFuZGxlci9zb3VyY2UgaW5mb3JtYXRpb24sCisvLyBhbmQgdG8gaW1wbGVtZW50IE9TUi4K
IC8vIChQcmVzZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCi10eXBlZGVm
IHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CitjbGFzcyBDb2RlT3JpZ2luIHsKK3B1YmxpYzoKKyAg
ICBDb2RlT3JpZ2luKCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
Q29kZU9yaWdpbih1aW50MzJfdCBieXRlY29kZUluZGV4KQorICAgICAgICA6IG1fYnl0ZWNvZGVJ
bmRleChieXRlY29kZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgp
IGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCk7IH0KKyAgICAKKyAgICB1aW50MzJfdCBieXRlY29kZUluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0
ZWNvZGVJbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYnl0ZWNv
ZGVJbmRleDsKK307CiAKIC8vIEVudHJpZXMgaW4gdGhlIE5vZGVUeXBlIGVudW0gKGJlbG93KSBh
cmUgY29tcG9zZWQgb2YgYW4gaWQsIGEgcmVzdWx0IHR5cGUgKHBvc3NpYmx5IG5vbmUpCiAvLyBh
bmQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aXZlIGZsYWdzIChtdXN0IGdlbmVyYXRlLCBpcyBj
b25zdGFudCwgZXRjKS4KQEAgLTM1Nyw5ICszODIsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51
bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1
cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBv
cCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQor
ICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGNo
aWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxk
MyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4
Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAs
IG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9y
ZWZDb3VudCgwKQogICAgIHsKQEAgLTM3MCw5ICszOTUsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
fQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFu
IGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4
Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJ
bmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9k
ZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5k
ZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXgg
Y2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlvbklu
Zm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAg
ICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAg
LCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCkBAIC0zODQs
OSArNDA5LDkgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5v
ZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBO
b2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0x
LCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxk
MiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBl
IG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9k
ZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRp
b25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQog
ICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAg
ICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAg
LTM5OSw5ICs0MjQsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0
cnVjdCBhIG5vZGUgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgdHdvIGlt
bWVkaWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBFeGNlcHRp
b25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgdW5zaWduZWQg
Zmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCisgICAgTm9kZShWYXJBcmdUYWcsIE5v
ZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1t
MiwgdW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgICAgIDog
b3Aob3ApCi0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAs
IGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBt
X29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC02NDMsNiArNjY4LDE0IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4g
Y2hpbGRyZW4uZml4ZWQuY2hpbGQxOwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIHVzZWZ1
bCBpZiB5b3Ugd2FudCB0byBkbyBhIGZhc3QgY2hlY2sgb24gdGhlIGZpcnN0IGNoaWxkCisgICAg
Ly8gYmVmb3JlIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgb3Bjb2RlLiBVc2UgdGhpcyB3aXRo
IGNhcmUgYW5kCisgICAgLy8gYXZvaWQgaXQgaWYgcG9zc2libGUuCisgICAgTm9kZUluZGV4IGNo
aWxkMVVuY2hlY2tlZCgpCisgICAgeworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hp
bGQxOworICAgIH0KIAogICAgIE5vZGVJbmRleCBjaGlsZDIoKQogICAgIHsKQEAgLTY3MSw3ICs3
MDQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRlc2NyaWJlcyB0
aGUgdHlwZSBvZiB0aGUgbm9kZS4KICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBVc2VkIHRvIGxv
b2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVtZW50
ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCi0gICAgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZv
OworICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRv
IDMgY2hpbGRyZW4gKDAgZm9yIG5vIGNoaWxkKS4KICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVj
dCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDYgKzQz
NCw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2QKIAogdm9pZCBO
b25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYg
Y2hlY2tJdGVyYXRvciwgTm9kZSYgbm9kZSkKIHsKKyNpZiBERkdfT1NSCisgICAgVU5VU0VEX1BB
UkFNKGNoZWNrSXRlcmF0b3IpOworI2Vsc2UKICAgICAvLyBDaGVjayBmb3Igc3BlY3VsYXRpb24g
Y2hlY2tzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gaW4gdGhlCiAgICAgLy8g
c3BlY3VsYXRpdmUgcGF0aC4gRG8gbm90IGNoZWNrIGZvciBOb2RlSW5kZXggMCwgc2luY2UgdGhp
cyBpcyBjaGVja2VkCiAgICAgLy8gaW4gdGhlIG91dGVybW9zdCBjb21waWxlIGxheWVyLCBhdCB0
aGUgaGVhZCBvZiB0aGUgbm9uLXNwZWN1bGF0aXZlIHBhdGgKQEAgLTQ0Miw2ICs0NDUsNyBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgLy8gYXMgc3BlY3Vs
YXRpb24gY2hlY2tzIGF0IHRoaXMgaW5kZXgpLgogICAgIGlmIChtX2NvbXBpbGVJbmRleCAmJiBj
aGVja0l0ZXJhdG9yLmhhc0NoZWNrQXRJbmRleChtX2NvbXBpbGVJbmRleCkpCiAgICAgICAgIHRy
YWNrRW50cnkobV9qaXQubGFiZWwoKSk7CisjZW5kaWYKIAogICAgIE5vZGVUeXBlIG9wID0gbm9k
ZS5vcDsKIApAQCAtMTI4Myw4ICsxMjg3LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoU3BlY3VsYXQKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRp
b25DaGVja0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IpCiB7CiAgICAgLy8gQ2hlY2sgZm9y
IHNwZWN1bGF0aW9uIGNoZWNrcyBhZGRlZCBhdCBmdW5jdGlvbiBlbnRyeSAoY2hlY2tpbmcgYXJn
dW1lbnQgdHlwZXMpLgorI2lmICFERkdfT1NSCiAgICAgaWYgKGNoZWNrSXRlcmF0b3IuaGFzQ2hl
Y2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJl
bCgpKTsKKyNlbmRpZgogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9yICht
X2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21f
YmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICByZXR1cm4gSW52
YWxpZEdQUlJlZzsKIH0KIAorI2lmICFERkdfT1NSCiBTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxh
dGlvbkNoZWNrKE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0
LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogbV9jaGVjayhjaGVjaykKICAgICAsIG1f
bm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCkBAIC0xNjgsNiArMTY5LDU2IEBAIFNwZWN1
bGF0aW9uQ2hlY2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm8KICAgICAgICAgICAgIG1fZnBySW5m
b1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CiB9CisjZW5kaWYKKwor
dm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7CisgICAgZnByaW50Zihv
dXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsKK30KKwordm9pZCBWYWx1ZVJlY292ZXJ5Ojpk
dW1wKEZJTEUqIG91dCkKK3sKKyAgICBzd2l0Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBB
bHJlYWR5SW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEluR1BSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBH
UFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbkZQ
UjoKKyAgICAgICAgZnByaW50ZihvdXQsICIlJSVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZwcigp
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiKiVkIiwgdmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBmcHJpbnRmKG91dCwgIlslc10iLCBj
b25zdGFudCgpLmRlc2NyaXB0aW9uKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvbnRL
bm93OgorICAgICAgICBmcHJpbnRmKG91dCwgIiEiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZnByaW50ZihvdXQsICI/JWQiLCB0ZWNobmlxdWUoKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKworI2lmIERGR19PU1IKK09TUkV4aXQ6Ok9TUkV4aXQoTWFjcm9B
c3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292
ZXJ5SW5kZXgpCisgICAgOiBtX2NoZWNrKGNoZWNrKQorICAgICwgbV9ub2RlSW5kZXgoaml0LT5t
X2NvbXBpbGVJbmRleCkKKyAgICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1faml0LmdyYXBoKClb
aml0LT5tX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpCisgICAgLCBt
X3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9h
cmd1bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXpl
KCkpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXpl
KCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGppdC0+Y29t
cHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOworICAgIGZv
ciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNpemUoKTsg
Kyt2YXJpYWJsZSkKKyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5jb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7Cit9CisjZW5kaWYK
IAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGVJbmRleCBub2Rl
SW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKIHsKQEAgLTY2OCw2ICs3MTksMTAgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9j
YWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9
CisgICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJl
dHJpZXZlIHRoZSB2YWx1ZSBvZgorICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZy
b20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KKyAg
ICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1
ZVNvdXJjZSgpOworICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS5sb2NhbCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTEzNjcsMTEgKzE0MjIsMTkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
fQotCisgICAgCiAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2VuZXJhdGUo
KSkKICAgICAgICAgdXNlKG1fY29tcGlsZUluZGV4KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU1vdkhpbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZS5vcCA9PSBT
ZXRMb2NhbCk7CisgICAgCisgICAgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChub2RlLmNoaWxkMSgp
LCBub2RlLmxvY2FsKCkpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7Cit9
CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2spCiB7CiAg
ICAgQVNTRVJUKG1fY29tcGlsZUluZGV4ID09IGJsb2NrLmJlZ2luKTsKQEAgLTEzNzksMjkgKzE0
NDIsNTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2lmIERG
R19KSVRfQlJFQUtfT05fRVZFUllfQkxPQ0sKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5k
aWYKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsg
KytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV92YXJp
YWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUluZGV4IDwg
YmxvY2suZW5kOyArK21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2pp
dC5ncmFwaCgpW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQorICAgICAgICBpZiAoIW5vZGUuc2hvdWxk
R2VuZXJhdGUoKSkgewogI2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCBhdCBKSVQgb2Zmc2V0IDB4
JXggICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKKyAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAJWQg
YXQgSklUIG9mZnNldCAweCV4ICAgICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBtX2ppdC5kZWJ1
Z09mZnNldCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gU2V0TG9jYWwp
CisgICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0IEpJVCBvZmZz
ZXQgMHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOwog
I2VuZGlmCiAjaWYgREZHX0pJVF9CUkVBS19PTl9FVkVSWV9OT0RFCi0gICAgICAgIG1faml0LmJy
ZWFrcG9pbnQoKTsKKyAgICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgotICAg
ICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGNvbXBpbGUobm9kZSk7Ci0gICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIGNvbXBpbGUobm9kZSk7CisgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAjaWYgREZH
X0RFQlVHX1ZFUkJPU0UKLSAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCi0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVzXG4iLCBkYXRhRm9ybWF0VG9TdHJpbmcobV9nZW5lcmF0
aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXS5yZWdpc3RlckZvcm1hdCgpKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgICAg
IGlmIChub2RlLmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
LT4gJXMgICAgIiwgZGF0YUZvcm1hdFRvU3RyaW5nKG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0
dWFsUmVnaXN0ZXIoKV0ucmVnaXN0ZXJGb3JtYXQoKSkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOworI2VuZGlmCisgICAgICAgIH0K
KyAgICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UgPj0gMiAgICAgICAgCisgICAgICAgIGZv
ciAoaW50IG9wZXJhbmQgPSAtbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplOyBvcGVyYW5kIDwgLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsgKytvcGVyYW5kKQorICAgICAgICAgICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3Bl
cmFuZCkuZHVtcChzdGRlcnIpOworICAgICAgICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIg
OiAiKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAwOyBvcGVyYW5kIDwg
KGludCltX3ZhcmlhYmxlcy5zaXplKCk7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVW
YWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyNlbmRpZgorICAgICAgCisj
aWYgREZHX0RFQlVHX1ZFUkJPU0UgIAorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAj
ZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAKKyAgICAgICAgaWYg
KG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICB9CiB9CiAKQEAgLTE0NTIsNiArMTU0NCwxMTggQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1ZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRp
dmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNv
dXJjZSkKK3sKKyAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpCisgICAgICAgIHJldHVybiBW
YWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKKworICAgIGlmIChtX2ppdC5p
c0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5v
ZGVJbmRleCgpKSk7CisgICAgCisgICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3Zh
bHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRl
KCkpIHsKKyAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3
aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKKyAgICAgICAgLy8gZXZlci4gU2V0
IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgorICAg
ICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAg
fQorICAgIAorICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9b
bm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8
fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgeworICAg
ICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291
bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KKyAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIg
cG9zc2liaWxpdGllczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFsdWVUb051bWJlcjogSWYg
dGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIgbm9k
ZQorICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1c2VzIG9m
IHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBhCisgICAgICAgIC8vICAgIFZhbHVlVG9O
dW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZhbHVlVG9O
dW1iZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdpc2UsIGlm
IHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisgICAgICAg
IC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYgdGhlcmUgaXMg
Ym90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRvTnVtYmVyLCB0
aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAorICAgICAgICAv
LyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQg
dG8gbnVtYmVyIHdoaWxlCisgICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRl
ZCB0byBJbnQzMi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElmIHRo
ZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgorICAg
ICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2Fu
dCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBV
SW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgcmV2ZXJzZSBv
ZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRz
CisgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRo
YXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgLy8gICAgdGhlIG51bWJlciB3
b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAKKyAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVQdHItPm9w
ID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
bm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClb
bm9kZUluZGV4XTsKKyAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2Rl
UHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUo
KSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAg
Zm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kKSB7
CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAg
ICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOworICAgICAgICAg
ICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJl
Z2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7Cisg
ICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3Zp
cnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChpbmZvLm5vZGVJ
bmRleCgpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uu
bm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb051bWJl
cjoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBW
YWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gaW5m
by5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1i
ZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJ
bmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRv
TnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBO
b05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRl
eDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkg
eworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhUb1Vz
ZV07CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHIt
PnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxp
dmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7CisgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoaW5mb1B0
ci0+YWxpdmUoKSk7CisKKyAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0Tm9uZSkgeworICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSA9PSBE
YXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBS
KGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGlu
Zm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKKyAgICB9CisgICAgaWYg
KGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwcml2YXRlOgog
ICAgIEdQUlJlZyBtX3NyYzsKIH07CiAKKyNpZiAhREZHX09TUgogLy8gPT09IFNwZWN1bGF0aW9u
Q2hlY2sgPT09CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0IGZyb20g
dGhlIHNwZWN1bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTEgQEAgc3RydWN0IFNwZWN1bGF0
aW9uQ2hlY2sgewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ss
IDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFERkdfT1NSCiAKK2NsYXNz
IFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAgIDogbV9u
b2RlSW5kZXgoTm9Ob2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVT
b3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5k
ZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAgfQorICAgIAorICAgIE5v
ZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkp
OworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVC
VUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAorcHJpdmF0
ZToKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Cit9OworICAgIAorLy8gRGVzY3JpYmVzIGhv
dyB0byByZWNvdmVyIGEgZ2l2ZW4gYnl0ZWNvZGUgdmlydHVhbCByZWdpc3RlciBhdCBhIGdpdmVu
CisvLyBjb2RlIHBvaW50LgorZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHsKKyAgICAvLyBJ
dCdzIGFscmVhZHkgaW4gdGhlIHJlZ2lzdGVyIGZpbGUgYXQgdGhlIHJpZ2h0IGxvY2F0aW9uLgor
ICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIGEgcmVnaXN0ZXIuCisg
ICAgSW5HUFIsCisgICAgVW5ib3hlZEludDMySW5HUFIsCisgICAgSW5GUFIsCisgICAgLy8gSXQn
cyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwgYnV0IGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLgorICAg
IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBjb25zdGFudC4KKyAgICBD
b25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVyIGl0LgorICAgIERvbnRL
bm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoKKyAgICBWYWx1ZVJlY292
ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAgICB7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZSgpCisgICAg
eworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5p
cXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3ByLCBEYXRh
Rm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICBp
ZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgIHJlc3VsdC5t
X3RlY2huaXF1ZSA9IFVuYm94ZWRJbnQzMkluR1BSOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmdw
ciA9IGdwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFZhbHVlUmVjb3ZlcnkgaW5GUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIFZhbHVlUmVj
b3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkZQUjsKKyAgICAg
ICAgcmVzdWx0Lm1fc291cmNlLmZwciA9IGZwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgZGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcpCisgICAgeworICAgICAgICBWYWx1ZVJlY292
ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGU7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmlydHVhbFJl
ZzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVl
UmVjb3ZlcnkgY29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVj
b3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBDb25zdGFudDsKKyAg
ICAgICAgcmVzdWx0Lm1fc291cmNlLmNvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgVmFsdWVSZWNvdmVyeVRl
Y2huaXF1ZSB0ZWNobmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZTsgfQorICAgIAor
ICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVl
ID09IEluR1BSIHx8IG1fdGVjaG5pcXVlID09IFVuYm94ZWRJbnQzMkluR1BSKTsKKyAgICAgICAg
cmV0dXJuIG1fc291cmNlLmdwcjsKKyAgICB9CisgICAgCisgICAgRlBSUmVnIGZwcigpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5GUFIpOworICAgICAgICBy
ZXR1cm4gbV9zb3VyY2UuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9
PSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0
dWFsUmVnOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyNpZm5k
ZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5kaWYKKyAgICAKK3ByaXZh
dGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsKKyAgICB1bmlvbiB7
CisgICAgICAgIEdQUlJlZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgICAgIFZpcnR1
YWxSZWdpc3RlciB2aXJ0dWFsUmVnOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25zdGFudDsK
KyAgICB9IG1fc291cmNlOworfTsKKworI2lmIERGR19PU1IKKy8vID09PSBPU1JFeGl0ID09PQor
Ly8KKy8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRp
dmUgcGF0aCBieQorLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgorc3RydWN0IE9TUkV4aXQg
eworICAgIE9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5z
aWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG1fY2hlY2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIHVuc2lnbmVkIG1fYnl0
ZWNvZGVJbmRleDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7CisgICAgCisg
ICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFsdWVSZWNvdmVyaWVzIHdo
aWxlIGJlaW5nCisgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZlcnN1cyB2YXJpYWJsZS4K
KyAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMu
c2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYg
dmFsdWVSZWNvdmVyeShpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXgg
PCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50
c1tpbmRleF07CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleCAtIG1fYXJndW1lbnRz
LnNpemUoKV07CisgICAgfQorICAgIGJvb2wgaXNBcmd1bWVudChpbnQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICBpbnQgYXJndW1l
bnRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaW5kZXg7
CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvckluZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKKyAgICB9CisgICAg
aW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBpbmRl
eCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZTsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOworICAgIH0KKyAg
ICAKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9y
PFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOworICAgIGludCBtX2xhc3RTZXRPcGVyYW5k
OworfTsKK3R5cGVkZWYgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDE2PiBPU1JFeGl0VmVjdG9y
OworI2VuZGlmIC8vIERGR19PU1IKIAogLy8gPT09IFNwZWN1bGF0aXZlSklUID09PQogLy8KQEAg
LTEwNSwyMSArMjkwLDI1IEBAIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hl
Y2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFzc2VydGVkKSB0aHJvdWdoIHRoZSBkYXRh
Zmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVibGljIEpJVENvZGVHZW5lcmF0b3Igewog
ICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKKyAgICBmcmllbmQgc3RydWN0IE9T
UkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKLSAg
ICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVP
a2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYp
OwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBi
YWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCwKICAgICAvLyBhbmQgYWRkaXRpb25h
bCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAhREZHX09TUgogICAgIFNwZWN1bGF0aW9uQ2hl
Y2tWZWN0b3ImIHNwZWN1bGF0aW9uQ2hlY2tzKCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3Nw
ZWN1bGF0aW9uQ2hlY2tzOwogICAgIH0KKyNlbHNlCisgICAgT1NSRXhpdFZlY3RvciYgb3NyRXhp
dHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3NyRXhpdHM7CisgICAgfQorI2VuZGlmCiAg
ICAgU3BlY3VsYXRpb25SZWNvdmVyeSogc3BlY3VsYXRpb25SZWNvdmVyeShzaXplX3QgaW5kZXgp
CiAgICAgewogICAgICAgICAvLyBTcGVjdWxhdGlvbkNoZWNrOjptX3JlY292ZXJ5SW5kZXggaXMg
b2Zmc2V0IGJ5IDEsCkBAIC0xMzksNiArMzI4LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgSklUQ29kZUdlbmVyYXRvcjsKICAgICAKICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAg
IHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOwogICAgIHZvaWQgY29tcGlsZShCYXNpY0Jsb2Nr
Jik7CiAKICAgICB2b2lkIGNoZWNrQXJndW1lbnRUeXBlcygpOwpAQCAtMjAzLDcgKzM5MywxMSBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAg
ICAgcmV0dXJuOworI2lmICFERkdfT1NSCiAgICAgICAgIG1fc3BlY3VsYXRpb25DaGVja3MuYXBw
ZW5kKFNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFpbCwgdGhpcykpOworI2Vsc2UKKyAgICAgICAg
bV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzKSk7CisjZW5kaWYKICAg
ICB9CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292
ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1w
VG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKQEAgLTIxMSw3ICs0
MDUsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LmFwcGVuZChyZWNv
dmVyeSk7CisjaWYgIURGR19PU1IKICAgICAgICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQo
U3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlM
aXN0LnNpemUoKSkpOworI2Vsc2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChq
dW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vu
ZGlmCiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUg
dGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KQEAgLTIyMiwxOCArNDIwLDY0IEBAIHByaXZh
dGU6CiAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0
ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKLQorICAg
IAogICAgIC8vIEl0IGlzIHBvc3NpYmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwg
dG8gcmVhY2ggYSBzaXR1YXRpb24gaW4gd2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBk
ZXRlcm1pbmUgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBu
b2RlcwogICAgIC8vIHdpbGwgbWFrZSBjb25mbGljdGluZyBzcGVjdWxhdGlvbnMgYWJvdXQgdGhl
IHNhbWUgb3BlcmFuZCkuIEluIHN1Y2ggY2FzZXMgdGhpcwogICAgIC8vIGZsYWcgaXMgY2xlYXJl
ZCwgaW5kaWNhdGluZyBubyBmdXJ0aGVyIGNvZGUgZ2VuZXJhdGlvbiBzaG91bGQgdGFrZSBwbGFj
ZS4KICAgICBib29sIG1fY29tcGlsZU9rYXk7CisjaWYgIURGR19PU1IKICAgICAvLyBUaGlzIHZl
Y3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIG5v
bi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3RvciBtX3NwZWN1bGF0
aW9uQ2hlY2tzOworI2Vsc2UKKyAgICAvLyBUaGlzIHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZy
b20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIG9sZCBKSVQuCisgICAgT1NSRXhpdFZlY3Rv
ciBtX29zckV4aXRzOworI2VuZGlmCiAgICAgLy8gU29tZSBiYWlsLW91dHMgbmVlZCB0byByZWNv
cmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWNvcmRpbmcgc3BlY2lmaWMgcmVjb3ZlcnkKICAg
ICAvLyB0byBiZSBwZXJmb3JtZWQgKGZvciBleGFtcGxlLCBvbiBkZXRlY3RlZCBvdmVyZmxvdyBm
cm9tIGFuIGFkZCwgd2UgbWF5IG5lZWQgdG8KICAgICAvLyByZXZlcnNlIHRoZSBhZGRpdGlvbiBp
ZiBhbiBvcGVyYW5kIGlzIGJlaW5nIG92ZXJ3cml0dGVuKS4KICAgICBWZWN0b3I8U3BlY3VsYXRp
b25SZWNvdmVyeSwgMTY+IG1fc3BlY3VsYXRpb25SZWNvdmVyeUxpc3Q7CisgICAgCisgICAgLy8g
VHJhY2tpbmcgZm9yIHdoaWNoIG5vZGVzIGFyZSBjdXJyZW50bHkgaG9sZGluZyB0aGUgdmFsdWVz
IG9mIGFyZ3VtZW50cyBhbmQgYnl0ZWNvZGUKKyAgICAvLyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFi
bGVzLgorCisgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2VGb3JPcGVyYW5kKGludCBvcGVyYW5k
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChv
cGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKE5v
ZGVJbmRleCBub2RlSW5kZXgsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgdmFsdWVTb3Vy
Y2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uobm9kZUluZGV4KTsK
KyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIHdpdGggY2FyZSwgc2luY2UgaXQgYm90aCBy
ZXR1cm5zIGEgcmVmZXJlbmNlIGludG8gYW4gYXJyYXkKKyAgICAvLyBhbmQgcG90ZW50aWFsbHkg
cmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdvdWxkIG5vdCBiZSByaWdodCB0byBjYWxsIHRoaXMK
KyAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3JtIG9wZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNl
cywgc2luY2UgdGhlIG9uZSBmcm9tCisgICAgLy8gdGhlIGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdl
ciBiZSB2YWxpZC4KKyAgICBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVy
YW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9w
ZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVu
dHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAg
ICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07CisgICAgfQorICAgIAorICAgIFZlY3RvcjxW
YWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBt
X3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICAKKyAgICBWYWx1ZVJl
Y292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CisKKyAg
ICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKHZhbHVlU291cmNlRm9y
T3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQogfTsKIAogCkBAIC00NTMsMTEgKzY5NywxNyBAQCBw
cml2YXRlOgogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKLQogLy8gPT09IFNwZWN1
bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yID09PQogLy8KIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCBi
eSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCB0byBjaGVjayB3aGljaAogLy8gbm9kZXMgcmVxdWly
ZSBlbnRyeSBwb2ludHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4KKyNpZiBERkdfT1NSCisv
LyBUaGlzIGJlY29tZXMgYSBzdHViIGlmIE9TUiBpcyBlbmFibGVkLgorY2xhc3MgU3BlY3VsYXRp
b25DaGVja0luZGV4SXRlcmF0b3IgeworcHVibGljOgorICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRl
eEl0ZXJhdG9yKCkgeyB9Cit9OworI2Vsc2UKIGNsYXNzIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0
ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvcihTcGVj
dWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlvbkNoZWNrcykKQEAgLTQ4Myw3ICs3MzMsMTYg
QEAgcHJpdmF0ZToKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRvciBtX2l0ZXI7
CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9lbmQ7CiB9OworI2VuZGlm
CiAKK2lubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGpp
dCkKKyAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCB0cnVlKQorICAgICwgbV9jb21waWxlT2th
eSh0cnVlKQorICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRl
cnMpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29kZUJsb2NrKCktPm1fbnVtVmFycykKKyAgICAs
IG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKK3sKK30K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBDb21wYWN0SklUQ29kZU1hcF9oCisjZGVmaW5lIENvbXBhY3RK
SVRDb2RlTWFwX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKKy8vIEdpdmVzIHlvdSBhIGNvbXByZXNzZWQgbWFwIGJldHdlZW4gYmV0d2VlbiBieXRl
Y29kZSBpbmRpY2VzIGFuZCBtYWNoaW5lIGNvZGUKKy8vIGVudHJ5IHBvaW50cy4gVGhlIGNvbXBy
ZXNzaW9uIHNpbXBseSB0cmllcyB0byB1c2UgZWl0aGVyIDEsIDIsIG9yIDQgYnl0ZXMgZm9yCisv
LyBhbnkgZ2l2ZW4gb2Zmc2V0LiBUaGUgbGFyZ2VzdCBvZmZzZXQgdGhhdCBjYW4gYmUgc3RvcmVk
IGlzIDJeMzAuCisKKy8vIEV4YW1wbGUgdXNlOgorLy8KKy8vIENvbXBhY3RKSVRDb2RlTWFwOjpF
bmNvZGVyIGVuY29kZXIobWFwKTsKKy8vIGVuY29kZXIuYXBwZW5kKGEsIGIpOworLy8gZW5jb2Rl
ci5hcHBlbmQoYywgZCk7IC8vIHByZWNvbmRpdGlvbnM6IGMgPj0gYSwgZCA+PSBiCisvLyBPd25Q
dHI8Q29tcGFjdEpJVENvZGVNYXA+IG1hcCA9IGVuY29kZXIuZmluaXNoKCk7CisvLworLy8gQXQg
c29tZSBsYXRlciB0aW1lOgorLy8KKy8vIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+
IGRlY29kZWQ7CisvLyBtYXAtPmRlY29kZShkZWNvZGVkKTsKKworc3RydWN0IEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldCB7CisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KCkgeyB9CisgICAg
CisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVu
c2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRl
Y29kZUluZGV4KQorICAgICAgICAsIG1fbWFjaGluZUNvZGVPZmZzZXQobWFjaGluZUNvZGVPZmZz
ZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7Cisg
ICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNldDsKKyAgICAKKyAgICBzdGF0aWMgaW5saW5l
IHVuc2lnbmVkIGdldEJ5dGVjb2RlSW5kZXgoQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBw
aW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRNYWNoaW5lQ29kZU9mZnNl
dChCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcpCisgICAgeworICAgICAgICByZXR1
cm4gbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldDsKKyAgICB9Cit9OworCitjbGFzcyBDb21w
YWN0SklUQ29kZU1hcCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgfkNvbXBhY3RKSVRDb2RlTWFwKCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1ZmZlcikKKyAg
ICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZWNv
ZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIHJlc3VsdCkgY29uc3QKKyAgICB7
CisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IDA7CisgICAgICAgIHVu
c2lnbmVkIHByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQgPSAwOworICAgICAgICAKKyAgICAgICAg
cmVzdWx0LnJlc2l6ZShtX251bWJlck9mRW50cmllcyk7CisgICAgICAgIHVuc2lnbmVkIGogPSAw
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1iZXJPZkVudHJpZXM7ICsr
aSkgeworICAgICAgICAgICAgcHJldmlvdXNCeXRlY29kZUluZGV4ICs9IGRlY29kZU51bWJlcihq
KTsKKyAgICAgICAgICAgIHByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQgKz0gZGVjb2RlTnVtYmVy
KGopOworICAgICAgICAgICAgcmVzdWx0W2ldLm1fYnl0ZWNvZGVJbmRleCA9IHByZXZpb3VzQnl0
ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIHJlc3VsdFtpXS5tX21hY2hpbmVDb2RlT2Zmc2V0ID0g
cHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoaiA9
PSBtX3NpemUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgQ29tcGFjdEpJVENvZGVNYXAo
dWludDhfdCogYnVmZmVyLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMp
CisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQorI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAg
ICAgLCBtX3NpemUoc2l6ZSkKKyNlbmRpZgorICAgICAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKG51
bWJlck9mRW50cmllcykKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICB9
CisgICAgCisgICAgdWludDhfdCBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcltpbmRl
eF07CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGRlY29kZU51bWJlcih1bnNpZ25lZCYgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IGF0KGluZGV4Kysp
OworICAgICAgICBpZiAoIShoZWFkVmFsdWUgJiAxMjgpKQorICAgICAgICAgICAgcmV0dXJuIGhl
YWRWYWx1ZTsKKyAgICAgICAgaWYgKCEoaGVhZFZhbHVlICYgNjQpKQorICAgICAgICAgICAgcmV0
dXJuIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhZFZhbHVlICYgfjEyOCkgPDwgOCkgfCBhdChp
bmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgc2Vjb25kID0gYXQoaW5kZXgrKyk7CisgICAgICAg
IHVuc2lnbmVkIHRoaXJkICA9IGF0KGluZGV4KyspOworICAgICAgICB1bnNpZ25lZCBmb3VydGgg
PSBhdChpbmRleCsrKTsKKyAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVh
ZFZhbHVlICYgfigxMjggKyA2NCkpIDw8IDI0KSB8IChzZWNvbmQgPDwgMTYpIHwgKHRoaXJkIDw8
IDgpIHwgZm91cnRoOworICAgIH0KKyAgICAKKyAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQgbV9zaXplOworI2VuZGlmCisgICAgdW5zaWdu
ZWQgbV9udW1iZXJPZkVudHJpZXM7CisgICAgCitwdWJsaWM6CisgICAgY2xhc3MgRW5jb2RlciB7
CisgICAgcHVibGljOgorICAgICAgICBFbmNvZGVyKCk7CisgICAgICAgIH5FbmNvZGVyKCk7Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJlck9m
RW50cmllc1RvQWRkKTsKKyAgICAgICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpOworICAgICAgICBQYXNzT3duUHRyPENvbXBh
Y3RKSVRDb2RlTWFwPiBmaW5pc2goKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBhcHBlbmRCeXRlKHVpbnQ4X3QgdmFsdWUpOworICAgICAgICB2b2lkIGVuY29kZU51bWJl
cih1aW50MzJfdCB2YWx1ZSk7CisgICAgCisgICAgICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAg
ICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAg
ICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzOworICAgICAgICAKKyAgICAgICAgdW5zaWdu
ZWQgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNN
YWNoaW5lQ29kZU9mZnNldDsKKyAgICB9OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBF
bmNvZGVyOworfTsKKworaW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNvZGVy
KCkKKyAgICA6IG1fYnVmZmVyKDApCisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fY2FwYWNpdHko
MCkKKyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKDApCisgICAgLCBtX3ByZXZpb3VzQnl0ZWNvZGVJ
bmRleCgwKQorICAgICwgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KDApCit7Cit9CisKK2lu
bGluZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIoKQoreworICAgIGlmICht
X2J1ZmZlcikKKyAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworfQorICAgICAgICAKK2lubGlu
ZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmQodW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVj
b2RlSW5kZXggPj0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtYWNoaW5l
Q29kZU9mZnNldCA+PSBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQpOworICAgIGVuc3VyZUNh
cGFjaXR5Rm9yKDEpOworICAgIGVuY29kZU51bWJlcihieXRlY29kZUluZGV4IC0gbV9wcmV2aW91
c0J5dGVjb2RlSW5kZXgpOworICAgIGVuY29kZU51bWJlcihtYWNoaW5lQ29kZU9mZnNldCAtIG1f
cHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgg
PSBieXRlY29kZUluZGV4OworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IG1hY2hp
bmVDb2RlT2Zmc2V0OworICAgIG1fbnVtYmVyT2ZFbnRyaWVzKys7Cit9CisKK2lubGluZSBQYXNz
T3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6Zmlu
aXNoKCkKK3sKKyAgICBtX2NhcGFjaXR5ID0gbV9zaXplOworICAgIG1fYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAg
T3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgQ29tcGFjdEpJ
VENvZGVNYXAobV9idWZmZXIsIG1fc2l6ZSwgbV9udW1iZXJPZkVudHJpZXMpKTsKKyAgICBtX2J1
ZmZlciA9IDA7CisgICAgbV9zaXplID0gMDsKKyAgICBtX2NhcGFjaXR5ID0gMDsKKyAgICBtX251
bWJlck9mRW50cmllcyA9IDA7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAg
IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29k
ZXI6OmFwcGVuZEJ5dGUodWludDhfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXplICsgMSA8
PSBtX2NhcGFjaXR5KTsKKyAgICBtX2J1ZmZlclttX3NpemUrK10gPSB2YWx1ZTsKK30KKyAgICAK
K2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIodWlu
dDMyX3QgdmFsdWUpCit7CisgICAgQVNTRVJUKG1fc2l6ZSArIDQgPD0gbV9jYXBhY2l0eSk7Cisg
ICAgQVNTRVJUKHZhbHVlIDwgKDEgPDwgMzApKTsKKyAgICBpZiAodmFsdWUgPD0gMTI3KSB7Cisg
ICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOwor
ICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgYXBwZW5kQnl0ZSho
ZWFkVmFsdWUpOworICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMTYzODMpIHsKKyAgICAgICAgdWlu
dDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KTsKKyAgICAg
ICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1
ZSAmIDY0KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlIHwgMTI4KTsKKyAgICAgICAg
YXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4g
MjQpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgQVNTRVJU
KCEoaGVhZFZhbHVlICYgNjQpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjgg
fCA2NCk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4g
MTYpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4
KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAg
ICB9Cit9CisKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVD
YXBhY2l0eUZvcih1bnNpZ25lZCBudW1iZXJPZkVudHJpZXNUb0FkZCkKK3sKKyAgICB1bnNpZ25l
ZCBjYXBhY2l0eU5lZWRlZCA9IG1fc2l6ZSArIG51bWJlck9mRW50cmllc1RvQWRkICogMiAqIDQ7
CisgICAgaWYgKGNhcGFjaXR5TmVlZGVkID4gbV9jYXBhY2l0eSkgeworICAgICAgICBtX2NhcGFj
aXR5ID0gY2FwYWNpdHlOZWVkZWQgKiAyOworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOworICAgIH0KK30K
KworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb21wYWN0SklUQ29kZU1hcF9oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIw
OSwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgbV9s
YWJlbHNbbV9ieXRlY29kZU9mZnNldF0gPSBsYWJlbCgpOwogCisjaWYgRU5BQkxFKFRJRVJFRF9D
T01QSUxBVElPTikKKyAgICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgICAgICBt
X2ppdENvZGVNYXBFbmNvZGVyLmFwcGVuZChtX2J5dGVjb2RlT2Zmc2V0LCBkaWZmZXJlbmNlQmV0
d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjZW5kaWYKKwogICAgICAgICBzd2l0Y2gg
KG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUp
KSB7CiAgICAgICAgIERFRklORV9CSU5BUllfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVG
SU5FX0JJTkFSWV9PUChvcF9pbikKQEAgLTM3Myw3ICszNzgsNiBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcygpCiAjZW5kaWYKIH0KIAotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVMaW5rUGFzcygpCiB7CiAgICAgdW5zaWduZWQgam1wVGFibGVDb3VudCA9IG1fam1wVGFibGUu
c2l6ZSgpOwpAQCAtNTAyLDYgKzUwNiw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShD
b2RlUHRyKiBmdW4KIHsKICNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogICAgIG1fY2Fu
QmVPcHRpbWl6ZWQgPSBtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBpZiAo
bV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgbV9zdGFydE9mQ29kZSA9IGxhYmVsKCk7CiAjZW5k
aWYKICAgICAKICAgICAvLyBKdXN0IGFkZCBhIGxpdHRsZSBiaXQgb2YgcmFuZG9tbmVzcyB0byB0
aGUgY29kZWdlbgpAQCAtNjQyLDYgKzY0OCwxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBp
bGUoQ29kZVB0ciogZnVuCiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbV9jb2Rl
QmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mb1tpXS5w
cm9wZXJ0eUFjY2Vzc0luZGV4KS5jYWxsUmV0dXJuTG9jYXRpb247CiAgICAgfQogCisjaWYgRU5B
QkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAg
ICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2go
KSk7CisjZW5kaWYKKwogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlv
bkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5
QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0ODc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAog
I2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9N
RVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAl
ZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3Rh
dGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgpAQCAtMTA1NCw2ICsx
MDU1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShUSUVSRURfQ09N
UElMQVRJT04pCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKKyAgICAgICAgTGFiZWwg
bV9zdGFydE9mQ29kZTsKKyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgbV9qaXRD
b2RlTWFwRW5jb2RlcjsKICNlbmRpZgogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw2ICsxOTIsOSBAQCBKU0dsb2JhbERhdGE6
OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikKICAg
ICAsIGludGVycHJldGVyKDApCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBTaXplKQorI2lmIEVOQUJM
RShUSUVSRURfQ09NUElMQVRJT04pCisgICAgLCBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRj
aEJ1ZmZlcigwKQorI2VuZGlmCiAgICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCiAgICAgLCBj
YWNoZWRVVENPZmZzZXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkK
ICAgICAsIG1heFJlZW50cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBl
U21hbGwgPyBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRy
eURlcHRoKQpAQCAtMzU3LDYgKzM2MCwxMSBAQCBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEo
KQogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBkZWxldGUgbV9ydFRyYWNlTGlzdDsK
ICNlbmRpZgorCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgb3NyU2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZh
c3RGcmVlKG9zclNjcmF0Y2hCdWZmZXJzW2ldKTsKKyNlbmRpZgogfQogCiBQYXNzUmVmUHRyPEpT
R2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tU
eXBlIHR5cGUsIEhlYXBTaXplIGhlYXBTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0ODc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
NSw2ICsyMzUsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBp
bnQ2NF90IGRlYnVnRGF0YUJ1ZmZlcls2NF07CiAjZW5kaWYKKyNpZiBFTkFCTEUoVElFUkVEX0NP
TVBJTEFUSU9OKQorICAgICAgICBWZWN0b3I8aW50NjRfdCo+IG9zclNjcmF0Y2hCdWZmZXJzOwor
ICAgICAgICBzaXplX3QgbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXI7CisgICAg
ICAgIAorICAgICAgICBpbnQ2NF90KiBvc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZSh1bnNpZ25lZCBu
dW1iZXJPZlNsb3RzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mU2xvdHMp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChudW1iZXJPZlNsb3RzID4gbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBh
dGhvbG9neSBieSBlbnN1cmluZworICAgICAgICAgICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdl
IGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAg
ICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAg
ICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXplKSAqIDQuCisgICAgICAgICAgICAgICAgbnVt
YmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIgPSBudW1iZXJPZlNsb3RzICogMjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvc3JTY3JhdGNoQnVmZmVycy5hcHBlbmQo
c3RhdGljX2Nhc3Q8aW50NjRfdCo+KGZhc3RNYWxsb2Moc2l6ZW9mKGludDY0X3QpICogbnVtYmVy
T2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJldHVybiBvc3JTY3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAg
ICAgIH0KKyNlbmRpZgogI2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwg
T3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gOTQ4NzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE5LDcgKzExOSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90
eXBlKEUKICNpZm5kZWYgTkRFQlVHCiBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpCiB7Ci0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMzI7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzaXplID0gNjQ7CiAgICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CiAKICAgICBp
ZiAoISp0aGlzKQo=
</data>
<flag name="commit-queue"
          id="103512"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106979</attachid>
            <date>2011-09-10 13:10:17 -0700</date>
            <delta_ts>2011-09-10 13:23:10 -0700</delta_ts>
            <desc>the patch - fix build, fix web</desc>
            <filename>osr_patch_3.diff</filename>
            <type>text/plain</type>
            <size>87992</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMDkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFw
cGxlLmNvbT4KIAogICAgICAgICBVbnppcCBpbml0aWFsaXphdGlvbiBsaXN0cyBhbmQgY29uc3Ry
dWN0b3JzIGluIEpTQ2VsbCBoaWVyYXJjaHkgKDUvNykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw3IEBACiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgy
NDE0MTE1RDIyMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0
MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmggKi87IH07CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJF
MUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgy
RTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0
IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3
NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5j
cHAgKi87IH07CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4
OTRENTBGQUZCQTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAt
Nzg5LDYgKzc5MCw3IEBACiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsg
cGF0aCA9IGRmZy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRDgyRTFFMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9
IGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQ4MkUxRjE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0Nh
cGFiaWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFC
MTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9z
aXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAw
Q0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY4LDYg
KzE1NzAsNyBAQAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAx
NzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBE
Q0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENG
QzAwRENCREI2IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVD
NkZDMDBEN0Q5MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAg
LTIzODIsNiArMjM4NSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3Vt
ZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFS
TUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMy
IC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTRE
MDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIu
aCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5k
ZWYgQ29kZUJsb2NrX2gKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RK
SVRDb2RlTWFwLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3Ry
dWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29k
ZU1hcChQYXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAg
ICAgIENvbXBhY3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBF
TkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3Ry
dWN0aW9uKiByZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRo
QXJpdHlDaGVjazsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFz
aWNSYXdTZW50aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRp
ZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0
SklUQ29kZU1hcD4gbV9qaXRDb2RlTWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJ
TEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJv
ZmlsZXM7CiAjZW5kaWYKQEAgLTY2Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJs
b2NrPiBtX2FsdGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAg
ICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJh
cmVEYXRhIHsKICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIG1fY29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRK
U0NvbnN0YW50KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1
cnJlbnRDb2RlT3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3Vy
cmVudEluZGV4KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUg
YW5kIGFkZCBpdCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAv
LyAnbXVzdEdlbmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2Vk
IHRvIGVuc3VyZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJl
c3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5h
cHBlbmQoTm9kZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsK
KyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hp
bGQxLCBjaGlsZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJh
dGUpCiAgICAgICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3
LDcgQEAgcHJpdmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJ
bmZvIGluZm8sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5k
ZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dy
YXBoLmFwcGVuZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIs
IGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9y
aWdpbigpLCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9w
ICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4
KTsKQEAgLTM5Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBo
KE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5k
ZXgpbV9ncmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3Vy
cmVudEluZGV4LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGlu
Zm8yLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQw
Miw3ICs0MDYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZh
ckFyZ1RhZywgTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsK
ICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUo
KTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJl
bnRJbmRleCwgaW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0g
bV9udW1QYXNzZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZv
MSwgaW5mbzIsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZh
ckFyZ3MsIG1fbnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNz
ZWRWYXJBcmdzID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5j
dGlvbiwgQ29tcGlsZU90aGVyIH07CiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNv
bXBpbGVNb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENv
ZGVCbG9jayogY29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAg
c3dpdGNoIChjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVj
dGlvbikpIHsKKyAgICAgICAgY2FzZSAxMTE3NjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7
CiAgICAgR3JhcGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1f
bnVtVmFycyk7CiAgICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gOTQ4Nzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51
bWJlck9mUmVnaXN0ZXJzID0gOTsKIAogICAgIC8vIFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUg
b2xkIEpJVC4KKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0g
WDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tS
ZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2Fs
bEZyYW1lUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BS
UmVnIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24g
OTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3NCwxMiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5m
cHIgPSBmcHI7CiAgICAgfQogCi0jaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6
CiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4g
dGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHJldmlzaW9uIDk0ODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBo
OjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9w
OwogCiAgICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFy
ZWZDb3VudCkgewotICAgICAgICBwcmludGYoIiUgNGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5v
ZGVJbmRleCwgb3BOYW1lKG9wKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYm9vbCBz
a2lwcGVkID0gIXJlZkNvdW50OwogICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2Vu
ZXJhdGUoKTsKLSAgICBpZiAobXVzdEdlbmVyYXRlKQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsK
KyAgICAgICAgQVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAK
ICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAg
Ly8KQEAgLTc3LDggKzc2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4
LCBDbwogICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9m
IGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXll
ZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAg
ICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsg
aWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRp
b24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEg
dmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxW
YXIgb3BlcmF0aW9ucy4KLSAgICBwcmludGYoIiUgNGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRl
eCwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFz
UmVzdWx0KCkpCisgICAgcHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNr
aXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEn
IDogJyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQp
CiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNl
CiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExMTgsMTcgKzExMTgsMTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bChOb2RlJiBubwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQu
bmVhckNhbGwoKTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgp
W21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZh
c3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAK
ICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIHNs
b3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQu
Y29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJ
VENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0
aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0u
ZXhjZXB0aW9uSW5mbyk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5h
cHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5n
cmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMy
KG51bUFyZ3MpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0
LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5j
YWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRl
eF0uZXhjZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9y
aWdpbik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xMTM2LDcgKzEx
MzYsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxs
KGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgp
W21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFz
dENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9j
b21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNw
ZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZp
c2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNyArOTA1LDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBG
dW5jdGlvblB0ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJ
bmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5j
b2RlT3JpZ2luKTsKICAgICB9CiAKICAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDg3OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDAsNiArMTAwLDM0MSBAQCB2b2lkIEpJVENvbXBpbGVyOjpmaWxsVG9KUyhO
b2RlSW5kZXggbm9kCiAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVy
KCkpLCBncHIpOwogfQogCisjaWYgREZHX09TUgordm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1
bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiBy
ZWNvdmVyeSwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFw
KQoreworICAgIC8vIDEpIFByby1mb3JtYSBzdHVmZi4KKyAgICBleGl0Lm1fY2hlY2subGluayh0
aGlzKTsKKworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnByaW50ZihzdGRlcnIsICJPU1Ig
ZXhpdCBmb3IgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KWV4
aXQubV9ub2RlSW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyNl
bmRpZgorI2lmIERGR19KSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJTFVSRQorICAgIGJyZWFr
cG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxV
UkUKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVnSW5mbyA9IG5ldyBTcGVj
dWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgZGVidWdJbmZvLT5jb2RlQmxvY2sgPSBtX2Nv
ZGVCbG9jazsKKyAgICBkZWJ1Z0luZm8tPmRlYnVnT2Zmc2V0ID0gZGVidWdPZmZzZXQoKTsKKyAg
ICAKKyAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1bGF0aW9uRmFpbHVyZSwg
ZGVidWdJbmZvKTsKKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZvcm0gc3BlY3VsYXRpb24g
cmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBhbiBvcGVyYXRpb24KKyAg
ICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlmeWluZyB0aGUgc3BlY3Vs
YXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJSZWcgYWxyZWFkeUJveGVk
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3ZlcnkpIHsKKyAgICAgICAgc3dp
dGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGQ6Cisg
ICAgICAgICAgICBzdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5LT5kZXN0KCkpOworICAg
ICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS0+
ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292ZXJ5LT5kZXN0KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEJvb2xlYW5TcGVj
dWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgeG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgRmlndXJlIG91dCBob3cgbWFueSBzY3Jh
dGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVyeSBHUFIvRlBSCisgICAg
Ly8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5IGEgREZHIHZpcnR1YWwg
cmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBldmVyeSBkaXNwbGFjZWQg
dmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisgICAgLy8gICAgR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gIEFsc28gc2VlIGlmIHRoZXJlIGFyZSBhbnkg
Y29uc3RhbnRzLAorICAgIC8vICAgIGFueSB1bmRlZmluZWQgc2xvdHMsIGFueSBGUFIgc2xvdHMs
IGFuZCBhbnkgdW5ib3hlZCBpbnRzLgorICAgICAgICAgICAgCisgICAgVmVjdG9yPGJvb2w+IHBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVycyhleGl0Lm1fdmFyaWFibGVzLnNpemUoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycy5zaXplKCk7ICsr
aSkKKyAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2ldID0gZmFsc2U7CisKKyAgICB1
bnNpZ25lZCBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyA9IDA7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzID0gMDsKKyAgICAKKyAgICAvLyBC
b29sZWFucyBmb3IgZmFzdCBjaGVja3MuIFdlIGV4cGVjdCB0aGF0IG1vc3QgT1NSIGV4aXRzIGRv
IG5vdCBoYXZlIHRvIHJlYm94CisgICAgLy8gSW50MzJzLCBoYXZlIG5vIEZQUnMsIGFuZCBoYXZl
IG5vIGNvbnN0YW50cy4gSWYgdGhlcmUgYXJlIGNvbnN0YW50cywgd2UKKyAgICAvLyBleHBlY3Qg
bW9zdCBvZiB0aGVtIHRvIGJlIGpzVW5kZWZpbmVkKCk7IGlmIHRoYXQncyB0cnVlIHRoZW4gd2Ug
aGFuZGxlIHRoYXQKKyAgICAvLyBzcGVjaWFsbHkgdG8gbWluaW1pemUgY29kZSBzaXplIGFuZCBl
eGVjdXRpb24gdGltZS4KKyAgICBib29sIGhhdmVVbmJveGVkSW50MzJzID0gZmFsc2U7CisgICAg
Ym9vbCBoYXZlRlBScyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUNvbnN0YW50cyA9IGZhbHNlOwor
ICAgIGJvb2wgaGF2ZVVuZGVmaW5lZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAg
ICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGlu
ZGV4KTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBj
YXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICAgICAgbnVtYmVyT2ZEaXNwbGFj
ZWRWaXJ0dWFsUmVnaXN0ZXJzKys7CisgICAgICAgICAgICBBU1NFUlQoKGludClyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSA+PSAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2Vl
IGlmIHdlIG1pZ2h0IGxpa2UgdG8gc3RvcmUgdG8gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyIGJlZm9y
ZSBkb2luZworICAgICAgICAgICAgLy8gdmlydHVhbCByZWdpc3RlciBzaHVmZmxpbmcuIElmIHNv
LCB3ZSBzYXkgdGhhdCB0aGUgdmlydHVhbCByZWdpc3RlcgorICAgICAgICAgICAgLy8gaXMgcG9p
c29uZWQ6IGl0IGNhbm5vdCBiZSBzdG9yZWQgdG8gdW50aWwgYWZ0ZXIgZGlzcGxhY2VkIHZpcnR1
YWwKKyAgICAgICAgICAgIC8vIHJlZ2lzdGVycyBhcmUgaGFuZGxlZC4gV2UgdHJhY2sgcG9pc29u
ZWQgdmlydHVhbCByZWdpc3RlciBjYXJlZnVsbHkKKyAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0
aGlzIGhhcHBlbnMgZWZmaWNpZW50bHkuIE5vdGUgdGhhdCB3ZSBleHBlY3QgdGhpcyBjYXNlCisg
ICAgICAgICAgICAvLyB0byBiZSByYXJlLCBzbyB0aGUgaGFuZGxpbmcgb2YgaXQgaXMgb3B0aW1p
emVkIGZvciB0aGUgY2FzZXMgaW4KKyAgICAgICAgICAgIC8vIHdoaWNoIGl0IGRvZXMgbm90IGhh
cHBlbi4KKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSA8IChpbnQp
ZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGV4aXQu
bV92YXJpYWJsZXNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldLnRlY2huaXF1ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICAgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICAgICAg
ICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3Rl
cigpXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJz
W3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycysrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
VW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBoYXZlVW5ib3hlZEludDMycyA9IHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEluRlBSOgor
ICAgICAgICAgICAgaGF2ZUZQUnMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgICAgIGhhdmVDb25zdGFudHMg
PSB0cnVlOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQo
KSkKKyAgICAgICAgICAgICAgICBoYXZlVW5kZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpbnQ2NF90KiBzY3JhdGNoQnVmZmVyID0gZ2xv
YmFsRGF0YSgpLT5vc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1iZXJPZlBvaXNvbmVkVmlydHVh
bFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0
ZXJzKSk7CisKKyAgICAvLyBGcm9tIGhlcmUgb24sIHRoZSBjb2RlIGFzc3VtZXMgdGhhdCBpdCBp
cyBwcm9maXRhYmxlIHRvIG1heGltaXplIHRoZSBkaXN0YW5jZQorICAgIC8vIGJldHdlZW4gd2hl
biBzb21ldGhpbmcgaXMgY29tcHV0ZWQgYW5kIHdoZW4gaXQgaXMgc3RvcmVkLgorICAgIAorICAg
IC8vIDQpIFBlcmZvcm0gYWxsIHJlYm94aW5nIG9mIGludGVnZXJzLgorICAgIAorICAgIGlmICho
YXZlVW5ib3hlZEludDMycykgeworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwg
ZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAg
ICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpID09IFVuYm94ZWRJbnQzMkluR1BSICYm
IHJlY292ZXJ5LmdwcigpICE9IGFscmVhZHlCb3hlZCkKKyAgICAgICAgICAgICAgICBvclB0cihH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LmdwcigpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyA1KSBEdW1wIGFsbCBub24tcG9pc29uZWQgR1BScy4gRm9y
IHBvaXNvbmVkIEdQUnMsIHNhdmUgdGhlbSBpbnRvIHRoZSBzY3JhdGNoIHN0b3JhZ2UuCisgICAg
Ly8gICAgTm90ZSB0aGF0IEdQUnMgZG8gbm90IGhhdmUgYSBmYXN0IGNoYW5nZSAobGlrZSBoYXZl
RlBScykgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdAorICAgIC8vICAgIG1vc3QgT1NSIGZhaWx1cmUg
cG9pbnRzIHdpbGwgaGF2ZSBhdCBsZWFzdCBvbmUgR1BSIHRoYXQgbmVlZHMgdG8gYmUgZHVtcGVk
LgorICAgIAorICAgIHVuc2lnbmVkIHNjcmF0Y2hJbmRleCA9IDA7CisgICAgZm9yIChpbnQgaW5k
ZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zlcnko
aW5kZXgpOworICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4
KTsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICBjYXNl
IEluR1BSOgorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgaWYg
KGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW2V4aXQu
dmFyaWFibGVGb3JJbmRleChpbmRleCldKQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlY292
ZXJ5LmdwcigpLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKHJlY292ZXJ5LmdwcigpLCBhZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpb3BlcmFuZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAvLyBBdCB0aGlzIHBvaW50IGFsbCBHUFJzIGFyZSBhdmFpbGFibGUgZm9yIHNjcmF0Y2ggdXNl
LgorICAgIAorICAgIGlmIChoYXZlRlBScykgeworICAgICAgICAvLyA2KSBCb3ggYWxsIGRvdWJs
ZXMgKHJlbGllcyBvbiB0aGVyZSBiZWluZyBtb3JlIEdQUnMgdGhhbiBGUFJzKQorICAgICAgICAK
KyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVy
aWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIEZQUlJlZyBmcHIgPSByZWNvdmVyeS5mcHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBn
cHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgoZnByKSk7CisgICAgICAg
ICAgICBib3hEb3VibGUoZnByLCBncHIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyA3KSBEdW1wIGFsbCBkb3VibGVzIGludG8gdGhlIHJlZ2lzdGVyIGZpbGUsIG9yIHRvIHRoZSBz
Y3JhdGNoIHN0b3JhZ2UgaWYKKyAgICAgICAgLy8gICAgdGhlIGRlc3RpbmF0aW9uIHZpcnR1YWwg
cmVnaXN0ZXIgaXMgcG9pc29uZWQuCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3Zlcnko
aW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUklu
Zm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChyZWNvdmVyeS5mcHIoKSkpOworICAgICAg
ICAgICAgaWYgKGV4aXQuaXNWYXJpYWJsZShpbmRleCkgJiYgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzW2V4aXQudmFyaWFibGVGb3JJbmRleChpbmRleCldKQorICAgICAgICAgICAgICAgIHN0b3Jl
UHRyKGdwciwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihncHIsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzKTsKKyAgICAKKyAgICAvLyA4KSBSZXNodWZmbGUgZGlzcGxhY2VkIHZpcnR1YWwgcmVn
aXN0ZXJzLiBPcHRpbWl6ZSBmb3IgdGhlIGNhc2UgdGhhdAorICAgIC8vICAgIHRoZSBudW1iZXIg
b2YgZGlzcGxhY2VkIHZpcnR1YWwgcmVnaXN0ZXJzIGlzIG5vdCBtb3JlIHRoYW4gdGhlIG51bWJl
cgorICAgIC8vICAgIG9mIGF2YWlsYWJsZSBwaHlzaWNhbCByZWdpc3RlcnMuCisgICAgCisgICAg
aWYgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykgeworICAgICAgICBpZiAobnVt
YmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0
ZXJzKSB7CisgICAgICAgICAgICAvLyBTbyBmYXIgdGhpcyBhcHBlYXJzIHRvIGJlIHRoZSBjYXNl
IHRoYXQgdHJpZ2dlcnMgYWxsIHRoZSB0aW1lLCBidXQKKyAgICAgICAgICAgIC8vIHRoYXQgaXMg
ZmFyIGZyb20gZ3VhcmFudGVlZC4KKyAgICAgICAgCisgICAgICAgICAgICB1bnNpZ25lZCBkaXNw
bGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAg
IGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4
KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2Vk
SW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGxvYWRQdHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQ
UkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKykpOworICAgICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgICAgIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAg
IGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6dG9SZWdp
c3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSB0aGUgc2h1ZmZsaW5n
IGFsZ29yaXRobSB0aGF0IHdlIHVzZQorICAgICAgICAgICAgLy8gZm9yIHNwZWN1bGF0aXZlLT5u
b24tc3BlY3VsYXRpdmUganVtcHMsIGlmIHdlIGV2ZXIgZGlzY292ZXIgdGhhdAorICAgICAgICAg
ICAgLy8gc29tZSBob3QgY29kZSB3aXRoIGxvdHMgb2YgbGl2ZSB2YWx1ZXMgdGhhdCBnZXQgZGlz
cGxhY2VkIGFuZAorICAgICAgICAgICAgLy8gc3BpbGxlZCByZWFsbHkgZW5qb3lzIGZyZXF1ZW50
bHkgZmFpbGluZyBzcGVjdWxhdGlvbi4KKyAgICAgICAgCisgICAgICAgICAgICAvLyBGb3Igbm93
IHRoaXMgY29kZSBpcyBlbmdpbmVlcmVkIHRvIGJlIGNvcnJlY3QgYnV0IHByb2JhYmx5IG5vdAor
ICAgICAgICAgICAgLy8gc3VwZXIuIEluIHBhcnRpY3VsYXIsIGl0IGNvcnJlY3RseSBoYW5kbGVz
IGNhc2VzIHdoZXJlIGZvciBleGFtcGxlCisgICAgICAgICAgICAvLyB0aGUgZGlzcGxhY2VtZW50
cyBhcmUgYSBwZXJtdXRhdGlvbiBvZiB0aGUgZGVzdGluYXRpb24gdmFsdWVzLCBsaWtlCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gMSAtPiAyCisgICAgICAgICAgICAvLyAyIC0+IDEK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBz
aW1wbHkgbGlmdGluZyBhbGwgb2YgdGhlIHZpcnR1YWwgcmVnaXN0ZXJzCisgICAgICAgICAgICAv
LyBmcm9tIHRoZWlyIG9sZCAoREZHIEpJVCkgbG9jYXRpb25zIGFuZCBkcm9wcGluZyB0aGVtIGlu
IGEgc2NyYXRjaAorICAgICAgICAgICAgLy8gbG9jYXRpb24gaW4gbWVtb3J5LCBhbmQgdGhlbiB0
cmFuc2ZlcnJpbmcgZnJvbSB0aGF0IHNjcmF0Y2ggbG9jYXRpb24KKyAgICAgICAgICAgIC8vIHRv
IHRoZWlyIG5ldyAob2xkIEpJVCkgbG9jYXRpb25zLgorICAgICAgICAKKyAgICAgICAgICAgIGlu
dDY0X3QqIHNjcmF0Y2hCdWZmZXIgPSBnbG9iYWxEYXRhKCktPm9zclNjcmF0Y2hCdWZmZXJGb3JT
aXplKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgICAgIAorICAgICAg
ICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVz
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJl
Y292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3Io
cmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5k
ZXgrKyk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgc2NyYXRjaEluZGV4
ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7CisgICAgICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkg
eworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52
YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5p
cXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJ
bmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQo
c2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVy
T2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICAvLyA5KSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBz
Y3JhdGNoSW5kZXggPSAwOworICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVy
cykgeworICAgICAgICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0
ZXIgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3Rlcikgewor
ICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJlZ2lzdGVy
XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1fdmFyaWFibGVzW3ZpcnR1YWxS
ZWdpc3Rlcl07CisgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQ
UjoKKyAgICAgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICAgICAgbG9hZFB0cihzY3Jh
dGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAg
ICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KXZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51
bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAKKyAgICAvLyAxMCkgRHVtcCBh
bGwgY29uc3RhbnRzLiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBzaW5jZSB0aGF0J3MgYSBjb25z
dGFudCB3ZSBzZWUKKyAgICAvLyAgICAgb2Z0ZW4uCisKKyAgICBpZiAoaGF2ZUNvbnN0YW50cykg
eworICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJP
ZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVy
eSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYg
KHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENvbnN0YW50KQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkK
KyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4
aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IC8vIDExKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGlu
dG8gcmVnVDAuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1
bHRSZWdpc3Rlcik7CisgICAgCisgICAgLy8gMTIpIEZpeCBjYWxsIGZyYW1lLgorICAgIAorICAg
IEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENv
ZGU6OkJhc2VsaW5lSklUKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygp
LT5hbHRlcm5hdGl2ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmls
ZTo6Q29kZUJsb2NrKSk7CisgICAgCisgICAgLy8gMTMpIEp1bXAgaW50byB0aGUgY29ycmVzcG9u
ZGluZyBiYXNlbGluZSBKSVQgY29kZS4KKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNp
Z25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVk
Q29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9ieXRlY29kZUlu
ZGV4KTsKKyAgICAKKyAgICBBU1NFUlQobWFwcGluZyk7CisgICAgQVNTRVJUKG1hcHBpbmctPm1f
Ynl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgdm9pZCog
anVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkp
ICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgCisgICAgQVNTRVJUKEdQUklu
Zm86OnJlZ1QxICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBqdW1w
KEdQUkluZm86OnJlZ1QxKTsKKworI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnByaW50Zihz
dGRlcnIsICItPiAlcFxuIiwganVtcFRhcmdldCk7CisjZW5kaWYKK30KKwordm9pZCBKSVRDb21w
aWxlcjo6bGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJiBzcGVjdWxhdGl2ZSkKK3sKKyAgICBW
ZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBkZWNvZGVkQ29kZU1hcDsKKyAgICBBU1NF
UlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+
YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAg
ICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmppdENvZGVNYXAoKSk7CisgICAg
Y29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmppdENvZGVNYXAoKS0+ZGVjb2RlKGRlY29kZWRD
b2RlTWFwKTsKKyAgICAKKyAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0l0ZXIgPSBz
cGVjdWxhdGl2ZS5vc3JFeGl0cygpLmJlZ2luKCk7CisgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0
b3IgZXhpdHNFbmQgPSBzcGVjdWxhdGl2ZS5vc3JFeGl0cygpLmVuZCgpOworICAgIAorICAgIHdo
aWxlIChleGl0c0l0ZXIgIT0gZXhpdHNFbmQpIHsKKyAgICAgICAgY29uc3QgT1NSRXhpdCYgZXhp
dCA9ICpleGl0c0l0ZXI7CisgICAgICAgIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoZXhpdCwgc3Bl
Y3VsYXRpdmUuc3BlY3VsYXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCksIGRlY29k
ZWRDb2RlTWFwKTsKKyAgICAgICAgKytleGl0c0l0ZXI7CisgICAgfQorfQorI2Vsc2UgLy8gREZH
X09TUgogY2xhc3MgR2VuZXJhbGl6ZWRSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgR2VuZXJhbGl6
ZWRSZWdpc3RlcigpIHsgfQpAQCAtODAzLDYgKzExMzgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjps
aW5rU3BlY3VsYXRpb25DaGVja3MoCiAgICAgQVNTRVJUKCEoY2hlY2tzSXRlciAhPSBjaGVja3NF
bmQpKTsKICAgICBBU1NFUlQoIShlbnRyaWVzSXRlciAhPSBlbnRyaWVzRW5kKSk7CiB9CisjZW5k
aWYgLy8gREZHX09TUgogCiB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRW50cnkoKQogewpAQCAt
ODQ0LDEyICsxMTgwLDE2IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAv
LyB0byBhbGxvdyBpdCB0byBjaGVjayB3aGljaCBub2RlcyBpbiB0aGUgZ3JhcGggbWF5IGJhaWwg
b3V0LCBhbmQgbWF5IG5lZWQgdG8gcmVlbnRlciB0aGUKICAgICAvLyBub24tc3BlY3VsYXRpdmUg
cGF0aC4KICAgICBpZiAoY29tcGlsZWRTcGVjdWxhdGl2ZSkgeworI2lmIERGR19PU1IKKyAgICAg
ICAgbGlua09TUkV4aXRzKHNwZWN1bGF0aXZlKTsKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0aW9u
Q2hlY2tJbmRleEl0ZXJhdG9yIGNoZWNrSXRlcmF0b3Ioc3BlY3VsYXRpdmUuc3BlY3VsYXRpb25D
aGVja3MoKSk7CiAgICAgICAgIE5vblNwZWN1bGF0aXZlSklUIG5vblNwZWN1bGF0aXZlKCp0aGlz
KTsKICAgICAgICAgbm9uU3BlY3VsYXRpdmUuY29tcGlsZShjaGVja0l0ZXJhdG9yKTsKIAogICAg
ICAgICAvLyBMaW5rIHRoZSBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCB0byB0
aGUgY29ycmVzcG9uZGluZyBlbnRyeSBwb2ludHMgaW50byB0aGUgbm9uLXNwZWN1bGF0aXZlIG9u
ZS4KICAgICAgICAgbGlua1NwZWN1bGF0aW9uQ2hlY2tzKHNwZWN1bGF0aXZlLCBub25TcGVjdWxh
dGl2ZSk7CisjZW5kaWYKICAgICB9IGVsc2UgewogI2lmIERGR19ERUJVR19WRVJCT1NFCiAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsK
QEAgLTg2Miw4ICsxMjAyLDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAg
ICAgICAgbV9tZXRob2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3Vs
YXRpdmVQYXRoQmVnaW4pOwogCisjaWYgREZHX09TUgorICAgICAgICBTcGVjdWxhdGlvbkNoZWNr
SW5kZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9yOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRpb25D
aGVja1ZlY3RvciBub0NoZWNrczsKICAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0
b3IgY2hlY2tJdGVyYXRvcihub0NoZWNrcyk7CisjZW5kaWYKICAgICAgICAgTm9uU3BlY3VsYXRp
dmVKSVQgbm9uU3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21w
aWxlKGNoZWNrSXRlcmF0b3IpOwogICAgIH0KQEAgLTkxMSw3ICsxMjU1LDcgQEAgdm9pZCBKSVRD
b21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fY2FsbHNb
aV0ubV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJldHVy
bkFkZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQobV9jYWxsc1tp
XS5tX2NhbGwpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8gPSBtX2Nh
bGxzW2ldLm1fZXhjZXB0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRp
b25JbmZvID0gbV9jYWxsc1tpXS5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2Fs
bFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNldCwgZXhjZXB0
aW9uSW5mbykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNiArNTMsNyBAQCBjbGFzcyBTcGVjdWxhdGlvblJlY292ZXJ5OwogCiBzdHJ1Y3QgRW50cnlM
b2NhdGlvbjsKIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrOworc3RydWN0IE9TUkV4aXQ7CiAKICNp
Zm5kZWYgTkRFQlVHCiB0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQKShFeGVj
U3RhdGUqLCB2b2lkKik7CkBAIC04MiwyMSArODMsMjEgQEAgc3RydWN0IENhbGxSZWNvcmQgewog
ICAgIH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgd2l0aCBhbiBleGNlcHRpb24g
aGFuZGxlci4KLSAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywgRXhj
ZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvKQorICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4
Y2VwdGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNh
bGwpCiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlv
bkNoZWNrKGV4Y2VwdGlvbkNoZWNrKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRp
b25JbmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1f
aGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0
b3IgZm9yIGEgY2FsbCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25zLCBidXQgd2hpY2ggYXJlIGhh
bmRsZWQKICAgICAvLyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdGhlIGluLWxp
bmUgZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2Fs
bCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZv
KQorICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIg
ZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkK
ICAgICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5m
byhleGNlcHRpb25JbmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAg
ICAgICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTA0LDcg
KzEwNSw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBt
X2NhbGw7CiAgICAgRnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBtX2V4Y2VwdGlvbkNoZWNrOwotICAgIEV4Y2VwdGlvbkluZm8gbV9leGNlcHRpb25JbmZv
OworICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYW5kbGVzRXhjZXB0
aW9uczsKIH07CiAKQEAgLTE5Miw5ICsxOTMsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8g
Tm90aWZ5IHRoZSBKSVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgot
ICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisg
ICAgdm9pZCBub3RpZnlDYWxsKENhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAg
IHsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0cigp
LCBleGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2Fs
bCwgRnVuY3Rpb25QdHIoKSwgY29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNh
bGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMjA1
LDIwICsyMDYsMjAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZy
b20gSklUIGNvZGUsIHdpdGggYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVk
IGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNv
bnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsK
ICAgICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0
aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcygmZ2xvYmFs
RGF0YSgpLT5leGNlcHRpb24pKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChm
dW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOwor
ICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24s
IGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNh
bGw7CiAgICAgfQogICAgIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdp
dGggYSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUg
aXMgemVyby4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0
IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICBDYWxs
IGFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5j
dGlvbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgQ2FsbCBmdW5jdGlv
bkNhbGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0
UHRyKFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxscy5hcHBl
bmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhj
ZXB0aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9u
Q2FsbCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJl
dHVybiBmdW5jdGlvbkNhbGw7CiAgICAgfQogICAgIApAQCAtMzExLDkgKzMxMiw5IEBAIHB1Ymxp
YzoKICAgICAgICAgbV9tZXRob2RHZXRzLmFwcGVuZChNZXRob2RHZXRSZWNvcmQoc2xvd0NhbGws
IHN0cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5j
dGlvbikpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBD
YWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVu
c2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwg
Q2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpT
Q2FsbFJlY29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhj
ZXB0aW9uSW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0
Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgY29kZU9yaWdpbikpOwogICAg
IH0KIAogcHJpdmF0ZToKQEAgLTMyNiw4ICszMjcsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZp
bGxOdW1lcmljVG9Eb3VibGUoTm9kZUluZGV4LCBGUFJSZWcsIEdQUlJlZyB0ZW1wb3JhcnkpOwog
ICAgIHZvaWQgZmlsbEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwgR1BSUmVnKTsKICAgICB2b2lk
IGZpbGxUb0pTKE5vZGVJbmRleCwgR1BSUmVnKTsKKyAgICAKKyNpZiBERkdfT1NSCisgICAgdm9p
ZCBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292
ZXJ5KiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKTsK
KyAgICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYpOworI2Vsc2UKICAgICB2b2lk
IGp1bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hl
Y2smLCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIE5vZGVUb1Jl
Z2lzdGVyTWFwJiBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYgZW50
cnlOb2RlVG9SZWdpc3Rlck1hcCk7CiAgICAgdm9pZCBsaW5rU3BlY3VsYXRpb25DaGVja3MoU3Bl
Y3VsYXRpdmVKSVQmLCBOb25TcGVjdWxhdGl2ZUpJVCYpOworI2VuZGlmCiAKICAgICAvLyBUaGUg
Z2xvYmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgog
ICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwpAQCAtMzg2LDEyICszOTMsMTIgQEAgcHJp
dmF0ZToKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAgICAgICBK
U0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgICAg
ICBKU0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAg
ICAgICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCiAgICAgICAgICAgICAsIG1fc2xvd0NhbGwo
c2xvd0NhbGwpCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQog
ICAgICAgICAgICAgLCBtX2lzQ2FsbChpc0NhbGwpCi0gICAgICAgICAgICAsIG1fZXhjZXB0aW9u
SW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdp
bikKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMzk5LDcgKzQwNiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIENhbGwgbV9zbG93Q2FsbDsKICAgICAgICAgRGF0YUxhYmVsUHRyIG1f
dGFyZ2V0VG9DaGVjazsKICAgICAgICAgYm9vbCBtX2lzQ2FsbDsKLSAgICAgICAgdW5zaWduZWQg
bV9leGNlcHRpb25JbmZvOworICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICB9
OwogCiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNz
ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ4Nzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAK
LS8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1
ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCisvLyBFbWl0IHZhcmlvdXMgbG9nZ2lu
ZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZs
b3cgZ3JhcGhzLiBTZXQgdG8gMSBmb3IgYmFzaWMgdmVyYm9zaXR5LCBvciB0byAyIGZvciBtb3Jl
IHZlcmJvc2l0eS4KICNkZWZpbmUgREZHX0RFQlVHX1ZFUkJPU0UgMAogLy8gRW5hYmxlIGdlbmVy
YXRpb24gb2YgZHluYW1pYyBjaGVja3MgaW50byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLgogI2lm
ICFBU1NFUlRfRElTQUJMRUQKQEAgLTUwLDYgKzUwLDggQEAKICNkZWZpbmUgREZHX0RFQlVHX0xP
Q0FMX0RJU0JBTEUgMAogLy8gRGlzYWJsZSB0aGUgU3BlY3VsYXRpdmVKSVQgd2l0aG91dCBoYXZp
bmcgdG8gdG91Y2ggUGxhdGZvcm0uaCEKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEVf
U1BFQ1VMQVRJVkUgMAorLy8gRGlzYWJsZSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCBhbmQgdXNl
IE9TUiBpbnN0ZWFkLgorI2RlZmluZSBERkdfT1NSIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04p
CiAvLyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2luZyB1
c2Ugb2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24gdGhlIGhvdCBwYXRoLgogI2RlZmlu
ZSBERkdfU1VDQ0VTU19TVEFUUyAwCiAKQEAgLTcyLDkgKzc0LDMyIEBAIENPTVBJTEVfQVNTRVJU
KHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIpID0KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owog
c3RhdGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAotLy8gSW5mb3JtYXRp
b24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3Vy
Y2UgaW5mb3JtYXRpb24uCisvLyBJbmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4g
ZXhjZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZvcm1hdGlvbiwKKy8vIGFuZCB0byBp
bXBsZW1lbnQgT1NSLgogLy8gKFByZXNlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGlu
ZGV4KS4KLXR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKK2NsYXNzIENvZGVPcmlnaW4g
eworcHVibGljOgorICAgIENvZGVPcmlnaW4oKQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBleHBsaWNpdCBDb2RlT3JpZ2luKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCisgICAgICAg
IDogbV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAorICAgIHVpbnQzMl90IGJ5dGVj
b2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAg
ICByZXR1cm4gbV9ieXRlY29kZUluZGV4OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdWlu
dDMyX3QgbV9ieXRlY29kZUluZGV4OworfTsKIAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUg
ZW51bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2li
bHkgbm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3Qg
Z2VuZXJhdGUsIGlzIGNvbnN0YW50LCBldGMpLgpAQCAtMzU3LDkgKzM4Miw5IEBAIHN0cnVjdCBO
b2RlIHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogCiAgICAgLy8gQ29uc3RydWN0
IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBO
b2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBj
aGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
LCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4
Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmln
aW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
ICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewpAQCAtMzcwLDkgKzM5NSw5IEBAIHN0cnVj
dCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBj
aGlsZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4
Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9
IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5v
Tm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5m
byBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAg
ICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29k
ZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92
YWx1ZSkKQEAgLTM4NCw5ICs0MDksOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8g
Q29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUg
dmFsdWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5m
bywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAg
IE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9w
SW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAg
ICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1t
MS5tX3ZhbHVlKQpAQCAtMzk5LDkgKzQyNCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAg
CiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxk
cmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5
cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBp
bW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKKyAgICBOb2Rl
KFZhckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGlt
bTEsIE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJl
bikKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbklu
Zm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgw
KQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTY0Myw2ICs2NjgsMTQgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CiAg
ICAgICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CiAgICAgfQorICAgIAorICAgIC8v
IFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIGEgZmFzdCBjaGVjayBvbiB0aGUgZmly
c3QgY2hpbGQKKyAgICAvLyBiZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUu
IFVzZSB0aGlzIHdpdGggY2FyZSBhbmQKKyAgICAvLyBhdm9pZCBpdCBpZiBwb3NzaWJsZS4KKyAg
ICBOb2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGls
ZHJlbi5maXhlZC5jaGlsZDE7CisgICAgfQogCiAgICAgTm9kZUluZGV4IGNoaWxkMigpCiAgICAg
ewpAQCAtNjcxLDcgKzcwNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAvLyBUaGlzIGVudW0gdmFs
dWUgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwogICAg
IC8vIFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJl
bnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KLSAgICBFeGNlcHRpb25JbmZv
IGV4Y2VwdGlvbkluZm87CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVy
ZW5jZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Igbm8gY2hpbGQpLgogICAgIHVuaW9uIHsK
ICAgICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9u
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MzQsNiArNDM0LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9w
KE5vZAogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJ
bmRleEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBub2RlKQogeworI2lmIERGR19PU1IK
KyAgICBVTlVTRURfUEFSQU0oY2hlY2tJdGVyYXRvcik7CisjZWxzZQogICAgIC8vIENoZWNrIGZv
ciBzcGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBp
biB0aGUKICAgICAvLyBzcGVjdWxhdGl2ZSBwYXRoLiBEbyBub3QgY2hlY2sgZm9yIE5vZGVJbmRl
eCAwLCBzaW5jZSB0aGlzIGlzIGNoZWNrZWQKICAgICAvLyBpbiB0aGUgb3V0ZXJtb3N0IGNvbXBp
bGUgbGF5ZXIsIGF0IHRoZSBoZWFkIG9mIHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aApAQCAtNDQy
LDYgKzQ0NSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAg
ICAvLyBhcyBzcGVjdWxhdGlvbiBjaGVja3MgYXQgdGhpcyBpbmRleCkuCiAgICAgaWYgKG1fY29t
cGlsZUluZGV4ICYmIGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4
KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgTm9k
ZVR5cGUgb3AgPSBub2RlLm9wOwogCkBAIC0xMjgzLDggKzEyODcsMTAgQEAgdm9pZCBOb25TcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hlY2tJdGVyYXRvcikKIHsKICAg
ICAvLyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGFkZGVkIGF0IGZ1bmN0aW9uIGVudHJ5
IChjaGVja2luZyBhcmd1bWVudCB0eXBlcykuCisjaWYgIURGR19PU1IKICAgICBpZiAoY2hlY2tJ
dGVyYXRvci5oYXNDaGVja0F0SW5kZXgobV9jb21waWxlSW5kZXgpKQogICAgICAgICB0cmFja0Vu
dHJ5KG1faml0LmxhYmVsKCkpOworI2VuZGlmCiAKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4
KTsKICAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
cy5zaXplKCk7ICsrbV9ibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDIsNiArMTQyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQog
ICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCisjaWYgIURGR19PU1IKIFNwZWN1bGF0aW9u
Q2hlY2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1
bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2NoZWNrKGNo
ZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKQEAgLTE2OCw2ICsx
NjksNTggQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAg
ICAgICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0K
IH0KKyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxF
KiBvdXQpIGNvbnN0Cit7CisgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4
KTsKK30KKwordm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkKK3sKKyAgICBzd2l0
Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6CisgICAg
ICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluR1BSOgor
ICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgZnByaW50ZihvdXQsICIl
JSVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZwcigpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiKiVkIiwg
dmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0YW50Ogor
ICAgICAgICBmcHJpbnRmKG91dCwgIlslc10iLCBjb25zdGFudCgpLmRlc2NyaXB0aW9uKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIERvbnRLbm93OgorICAgICAgICBmcHJpbnRmKG91dCwg
IiEiKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZnByaW50ZihvdXQs
ICI/JWQiLCB0ZWNobmlxdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKyNlbmRpZgor
CisjaWYgREZHX09TUgorT1NSRXhpdDo6T1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVj
aywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKKyAgICA6IG1f
Y2hlY2soY2hlY2spCisgICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQorICAg
ICwgbV9ieXRlY29kZUluZGV4KGppdC0+bV9qaXQuZ3JhcGgoKVtqaXQtPm1fY29tcGlsZUluZGV4
XS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSkKKyAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNv
dmVyeUluZGV4KQorICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXplKCkpCisg
ICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAsIG1fbGFzdFNl
dE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQoreworICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1lbnRzLnNpemUoKTsgKythcmd1bWVudCkKKyAg
ICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gaml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7CisgICAgZm9yICh1bnNpZ25lZCB2YXJpYWJs
ZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQorICAgICAg
ICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGpp
dC0+bV92YXJpYWJsZXNbdmFyaWFibGVdKTsKK30KKyNlbmRpZgogCiBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCYg
cmV0dXJuRm9ybWF0KQogewpAQCAtNjY4LDYgKzcyMSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2YWx1ZS5n
cHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0KKyAgICAgICAgLy8gSW5kaWNh
dGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9m
CisgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3Ro
ZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICB2YWx1ZVNvdXJjZVJl
ZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKCk7CisgICAgICAg
IG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2FsKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApAQCAtMTM2NywxMSArMTQyNCwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9Ci0KKyAgICAKICAgICBpZiAo
bm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQogICAgICAgICB1c2UobV9j
b21waWxlSW5kZXgpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChO
b2RlJiBub2RlKQoreworICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKKyAgICAKKyAg
ICBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKG5vZGUuY2hpbGQxKCksIG5vZGUubG9jYWwoKSk7Cisg
ICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9jYWwoKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKIHsKICAgICBBU1NFUlQobV9jb21waWxl
SW5kZXggPT0gYmxvY2suYmVnaW4pOwpAQCAtMTM3OSwyOSArMTQ0NCw2NiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAjaWYgREZHX0pJVF9CUkVBS19PTl9FVkVS
WV9CTE9DSwogICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgorICAgIAorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fYXJn
dW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dmFyaWFibGVzLnNpemUoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291
cmNlKCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCk7CiAKICAgICBmb3IgKDsgbV9jb21waWxlSW5kZXggPCBibG9jay5lbmQ7ICsrbV9jb21w
aWxlSW5kZXgpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxl
SW5kZXhdOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCisgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKSB7CiAjaWYg
REZHX0RFQlVHX1ZFUkJPU0UKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJ
VCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jb21w
aWxlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOworICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICJTcGVjdWxhdGl2ZUpJVCBza2lwcGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZz
ZXQgMHgleCAgICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgoKSwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlm
IChub2RlLm9wID09IFNldExvY2FsKQorICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5v
ZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJP
U0UKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGlu
ZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jb21waWxl
SW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCksIG1faml0LmRlYnVnT2Zmc2V0
KCkpOwogI2VuZGlmCiAjaWYgREZHX0pJVF9CUkVBS19PTl9FVkVSWV9OT0RFCi0gICAgICAgIG1f
aml0LmJyZWFrcG9pbnQoKTsKKyAgICAgICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRp
ZgotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGNvbXBpbGUobm9kZSk7Ci0g
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIGNvbXBpbGUobm9kZSk7CisgICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCiAj
aWYgREZHX0RFQlVHX1ZFUkJPU0UKLSAgICAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCi0gICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVzXG4iLCBkYXRhRm9ybWF0VG9TdHJpbmcobV9n
ZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXS5yZWdpc3RlckZvcm1hdCgpKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAg
ICAgICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKSB7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOwor
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXMsIHZyIyVkIiwgZGF0YUZvcm1h
dFRvU3RyaW5nKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSksIChpbnQpbm9kZS52aXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0Tm9uZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1h
dCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiwgJXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5mcHIoKSkpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIiwgJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5ncHIoKSkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOworI2Vu
ZGlmCisgICAgICAgIH0KKyAgICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UgPj0gMiAgICAg
ICAgCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAtbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyBvcGVyYW5kIDwgLVJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgKytvcGVyYW5kKQorICAgICAgICAgICAgY29tcHV0ZVZhbHVl
UmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChzdGRlcnIpOworICAgICAgICAKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgOiAiKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQg
PSAwOyBvcGVyYW5kIDwgKGludCltX3ZhcmlhYmxlcy5zaXplKCk7ICsrb3BlcmFuZCkKKyAgICAg
ICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyNl
bmRpZgorICAgICAgCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UgIAorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIlxuIik7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAg
ICAKKyAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKICAgICB9CiB9CiAKQEAgLTE0NTIsNiArMTU1NCwxMTggQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1ZhbHVlUmVj
b3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVl
U291cmNlJiB2YWx1ZVNvdXJjZSkKK3sKKyAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpCisg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKKwor
ICAgIGlmIChtX2ppdC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50
KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7CisgICAgCisgICAgTm9kZSogbm9kZVB0ciA9ICZt
X2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICBpZiAoIW5vZGVQdHIt
PnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4g
QXMgaW4sIG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKKyAgICAg
ICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRl
ciB0aGUgT1NSLgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRl
ZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1f
Z2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgIGlmICghaW5m
b1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2Rl
SW5kZXgoKSkgeworICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0
ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KKyAgICAgICAgLy8g
VGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFs
dWVUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZh
bHVlVG9OdW1iZXIgbm9kZQorICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJl
bWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBhCisgICAgICAg
IC8vICAgIFZhbHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJz
dGl0dXRlIFZhbHVlVG9OdW1iZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIFZhbHVlVG9JbnQz
MjogTGlrZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZh
bHVlIGlzCisgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBC
dXQgaWYgdGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAvLyAgICBhbmQgYSBW
YWx1ZVRvTnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVz
ZSBpdAorICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQg
aGF2ZSBjb252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCisgICAgICAgIC8vICAgIG90aGVycyB3b3Vs
ZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVUludDMy
VG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50
MzJUb051bWJlcgorICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFy
ZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAgLy8gICAg
cmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAvLworICAgICAgICAv
LyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRv
TnVtYmVyLCBidXQgaXRzCisgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZl
LiBUaGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgLy8g
ICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgor
ICAgICAgICAKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAg
aWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICBOb2RlSW5k
ZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICBub2RlUHRyID0g
Jm1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5l
cmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICBpZiAo
aW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4
ID0gTm9Ob2RlOworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9O
b2RlOworICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVy
ID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dl
bmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICAgICAgaWYgKCFpbmZv
LmFsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5u
b2RlSW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkg
IT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgICAgIGNh
c2UgVmFsdWVUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4
ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9J
bnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAg
ICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgaWYg
KHZhbHVlVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4
VG9Vc2UgPSB2YWx1ZVRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRv
SW50MzJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2
YWx1ZVRvSW50MzJJbmRleDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5k
ZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9O
dW1iZXJJbmRleDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhU
b1VzZSA9IE5vTm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRv
VXNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgo
KVtub2RlSW5kZXhUb1VzZV07CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRp
b25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhU
b1VzZSk7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAg
ICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSk7CisKKyAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJG
b3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0
ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmluR1BSKGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsK
KyAgICB9CisgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUp
CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7
CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYs
NyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX3NyYzsKIH07CiAKKyNpZiAhREZHX09TUgogLy8g
PT09IFNwZWN1bGF0aW9uQ2hlY2sgPT09CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBh
IGJhaWwtb3V0IGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTIgQEAg
c3RydWN0IFNwZWN1bGF0aW9uQ2hlY2sgewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBS
SW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNw
ZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFE
RkdfT1NSCiAKK2NsYXNzIFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgp
CisgICAgICAgIDogbV9ub2RlSW5kZXgoTm9Ob2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25v
ZGVJbmRleChub2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAg
fQorICAgIAorICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzU2V0KCkpOworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAg
IAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRp
ZgorICAgIAorcHJpdmF0ZToKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Cit9OworICAgIAor
Ly8gRGVzY3JpYmVzIGhvdyB0byByZWNvdmVyIGEgZ2l2ZW4gYnl0ZWNvZGUgdmlydHVhbCByZWdp
c3RlciBhdCBhIGdpdmVuCisvLyBjb2RlIHBvaW50LgorZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5p
cXVlIHsKKyAgICAvLyBJdCdzIGFscmVhZHkgaW4gdGhlIHJlZ2lzdGVyIGZpbGUgYXQgdGhlIHJp
Z2h0IGxvY2F0aW9uLgorICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGlu
IGEgcmVnaXN0ZXIuCisgICAgSW5HUFIsCisgICAgVW5ib3hlZEludDMySW5HUFIsCisgICAgSW5G
UFIsCisgICAgLy8gSXQncyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwgYnV0IGF0IGEgZGlmZmVyZW50
IGxvY2F0aW9uLgorICAgIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBj
b25zdGFudC4KKyAgICBDb25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVy
IGl0LgorICAgIERvbnRLbm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoK
KyAgICBWYWx1ZVJlY292ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lz
dGVyRmlsZSgpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihH
UFJSZWcgZ3ByLCBEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQo
ZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVz
dWx0OworICAgICAgICBpZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAg
ICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IFVuYm94ZWRJbnQzMkluR1BSOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVz
dWx0Lm1fc291cmNlLmdwciA9IGdwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5GUFIoRlBSUmVnIGZwcikKKyAgICB7Cisg
ICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUg
PSBJbkZQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmZwciA9IGZwcjsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgZGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcpCisgICAgeworICAg
ICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0g
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFs
UmVnID0gdmlydHVhbFJlZzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgY29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUg
PSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmNvbnN0YW50ID0gSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
VmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB0ZWNobmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2hu
aXF1ZTsgfQorICAgIAorICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fdGVjaG5pcXVlID09IEluR1BSIHx8IG1fdGVjaG5pcXVlID09IFVuYm94ZWRJbnQzMklu
R1BSKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLmdwcjsKKyAgICB9CisgICAgCisgICAgRlBS
UmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5G
UFIpOworICAgICAgICByZXR1cm4gbV9zb3VyY2UuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX3RlY2huaXF1ZSA9PSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVy
biBtX3NvdXJjZS52aXJ0dWFsUmVnOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAg
IH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5k
aWYKKyAgICAKK3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1
ZTsKKyAgICB1bmlvbiB7CisgICAgICAgIEdQUlJlZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7
CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnOworICAgICAgICBFbmNvZGVkSlNW
YWx1ZSBjb25zdGFudDsKKyAgICB9IG1fc291cmNlOworfTsKKworI2lmIERGR19PU1IKKy8vID09
PSBPU1JFeGl0ID09PQorLy8KKy8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhp
dCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQorLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgor
c3RydWN0IE9TUkV4aXQgeworICAgIE9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1
bGF0aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIAorICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG1fY2hlY2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAg
IHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3JlY292ZXJ5
SW5kZXg7CisgICAgCisgICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFs
dWVSZWNvdmVyaWVzIHdoaWxlIGJlaW5nCisgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZl
cnN1cyB2YXJpYWJsZS4KKyAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1
cm4gbV9hcmd1bWVudHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgY29uc3Qg
VmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeShpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50c1tpbmRleF07CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tpbmRl
eCAtIG1fYXJndW1lbnRzLnNpemUoKV07CisgICAgfQorICAgIGJvb2wgaXNBcmd1bWVudChpbnQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCk7IH0K
KyAgICBib29sIGlzVmFyaWFibGUoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNBcmd1bWVu
dChpbmRleCk7IH0KKyAgICBpbnQgYXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvcklu
ZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJn
dW1lbnRzLnNpemUoKTsKKyAgICB9CisgICAgaW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUo
KSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lz
dGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9h
cmd1bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwg
MD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVz
OworICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworfTsKK3R5cGVkZWYgU2VnbWVudGVkVmVjdG9y
PE9TUkV4aXQsIDE2PiBPU1JFeGl0VmVjdG9yOworI2VuZGlmIC8vIERGR19PU1IKIAogLy8gPT09
IFNwZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTEwNSwyMSArMjkxLDI1IEBAIHR5cGVkZWYgU2Vn
bWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVu
IGFzc2VydGVkKSB0aHJvdWdoIHRoZSBkYXRhZmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDog
cHVibGljIEpJVENvZGVHZW5lcmF0b3IgewogICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25D
aGVjazsKKyAgICBmcmllbmQgc3RydWN0IE9TUkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRp
dmVKSVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwg
dHJ1ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBT
cGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAKICAg
ICAvLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUg
cGF0aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAh
REZHX09TUgogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3ImIHNwZWN1bGF0aW9uQ2hlY2tzKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3NwZWN1bGF0aW9uQ2hlY2tzOwogICAgIH0KKyNlbHNl
CisgICAgT1NSRXhpdFZlY3RvciYgb3NyRXhpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b3NyRXhpdHM7CisgICAgfQorI2VuZGlmCiAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogc3BlY3Vs
YXRpb25SZWNvdmVyeShzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICAvLyBTcGVjdWxhdGlv
bkNoZWNrOjptX3JlY292ZXJ5SW5kZXggaXMgb2Zmc2V0IGJ5IDEsCkBAIC0xMzksNiArMzI5LDcg
QEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKICAgICAKICAg
ICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOwog
ICAgIHZvaWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CiAKICAgICB2b2lkIGNoZWNrQXJndW1lbnRU
eXBlcygpOwpAQCAtMjAzLDcgKzM5NCwxMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOworI2lmICFERkdfT1NSCiAgICAg
ICAgIG1fc3BlY3VsYXRpb25DaGVja3MuYXBwZW5kKFNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFp
bCwgdGhpcykpOworI2Vsc2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1w
VG9GYWlsLCB0aGlzKSk7CisjZW5kaWYKICAgICB9CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24g
Y2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVj
ayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292
ZXJ5JiByZWNvdmVyeSkKQEAgLTIxMSw3ICs0MDYsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3NwZWN1bGF0
aW9uUmVjb3ZlcnlMaXN0LmFwcGVuZChyZWNvdmVyeSk7CisjaWYgIURGR19PU1IKICAgICAgICAg
bV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0
aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vsc2UKKyAgICAgICAg
bV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9u
UmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdo
ZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4K
QEAgLTIyMiwxOCArNDIxLDY0IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmlj
dD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZv
cm1hdCYgcmV0dXJuRm9ybWF0KTsKLQorICAgIAogICAgIC8vIEl0IGlzIHBvc3NpYmxlLCBkdXJp
bmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRpb24gaW4gd2hpY2gg
d2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVjdWxhdGlvbiB3aWxsIGZh
aWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwogICAgIC8vIHdpbGwgbWFrZSBjb25mbGlj
dGluZyBzcGVjdWxhdGlvbnMgYWJvdXQgdGhlIHNhbWUgb3BlcmFuZCkuIEluIHN1Y2ggY2FzZXMg
dGhpcwogICAgIC8vIGZsYWcgaXMgY2xlYXJlZCwgaW5kaWNhdGluZyBubyBmdXJ0aGVyIGNvZGUg
Z2VuZXJhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4KICAgICBib29sIG1fY29tcGlsZU9rYXk7Cisj
aWYgIURGR19PU1IKICAgICAvLyBUaGlzIHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhl
IHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAgU3BlY3Vs
YXRpb25DaGVja1ZlY3RvciBtX3NwZWN1bGF0aW9uQ2hlY2tzOworI2Vsc2UKKyAgICAvLyBUaGlz
IHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhl
IG9sZCBKSVQuCisgICAgT1NSRXhpdFZlY3RvciBtX29zckV4aXRzOworI2VuZGlmCiAgICAgLy8g
U29tZSBiYWlsLW91dHMgbmVlZCB0byByZWNvcmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWNv
cmRpbmcgc3BlY2lmaWMgcmVjb3ZlcnkKICAgICAvLyB0byBiZSBwZXJmb3JtZWQgKGZvciBleGFt
cGxlLCBvbiBkZXRlY3RlZCBvdmVyZmxvdyBmcm9tIGFuIGFkZCwgd2UgbWF5IG5lZWQgdG8KICAg
ICAvLyByZXZlcnNlIHRoZSBhZGRpdGlvbiBpZiBhbiBvcGVyYW5kIGlzIGJlaW5nIG92ZXJ3cml0
dGVuKS4KICAgICBWZWN0b3I8U3BlY3VsYXRpb25SZWNvdmVyeSwgMTY+IG1fc3BlY3VsYXRpb25S
ZWNvdmVyeUxpc3Q7CisgICAgCisgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNoIG5vZGVzIGFyZSBj
dXJyZW50bHkgaG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQgYnl0ZWNvZGUKKyAg
ICAvLyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFibGVzLgorCisgICAgVmFsdWVTb3VyY2UgdmFsdWVT
b3VyY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
U291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBvcGVyYW5k
KQorICAgIHsKKyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQp
ID0gVmFsdWVTb3VyY2Uobm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlz
IHdpdGggY2FyZSwgc2luY2UgaXQgYm90aCByZXR1cm5zIGEgcmVmZXJlbmNlIGludG8gYW4gYXJy
YXkKKyAgICAvLyBhbmQgcG90ZW50aWFsbHkgcmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdvdWxk
IG5vdCBiZSByaWdodCB0byBjYWxsIHRoaXMKKyAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3Jt
IG9wZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNlcywgc2luY2UgdGhlIG9uZSBmcm9tCisgICAgLy8g
dGhlIGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICBWYWx1ZVNvdXJjZSYg
dmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAg
ICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJn
dW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50
XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49
IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVy
YW5kICsgMSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07
CisgICAgfQorICAgIAorICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7Cisg
ICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0
T3BlcmFuZDsKKyAgICAKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KGNvbnN0IFZhbHVlU291cmNlJik7CisKKyAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJl
Y292ZXJ5Rm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1
ZVJlY292ZXJ5Rm9yKHZhbHVlU291cmNlRm9yT3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQogfTsK
IAogCkBAIC00NTMsMTEgKzY5OCwxNyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX2dwck9ySW52
YWxpZDsKIH07CiAKLQogLy8gPT09IFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yID09PQog
Ly8KIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCB0byBj
aGVjayB3aGljaAogLy8gbm9kZXMgcmVxdWlyZSBlbnRyeSBwb2ludHMgZnJvbSB0aGUgc3BlY3Vs
YXRpdmUgcGF0aC4KKyNpZiBERkdfT1NSCisvLyBUaGlzIGJlY29tZXMgYSBzdHViIGlmIE9TUiBp
cyBlbmFibGVkLgorY2xhc3MgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgeworcHVibGlj
OgorICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKCkgeyB9Cit9OworI2Vsc2UKIGNs
YXNzIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTcGVjdWxh
dGlvbkNoZWNrSW5kZXhJdGVyYXRvcihTcGVjdWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlv
bkNoZWNrcykKQEAgLTQ4Myw3ICs3MzQsMTYgQEAgcHJpdmF0ZToKICAgICBTcGVjdWxhdGlvbkNo
ZWNrVmVjdG9yOjpJdGVyYXRvciBtX2l0ZXI7CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6
SXRlcmF0b3IgbV9lbmQ7CiB9OworI2VuZGlmCiAKK2lubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3Bl
Y3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKKyAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0
LCB0cnVlKQorICAgICwgbV9jb21waWxlT2theSh0cnVlKQorICAgICwgbV9hcmd1bWVudHMoaml0
LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnMpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29k
ZUJsb2NrKCktPm1fbnVtVmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkKK3sKK30KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29k
ZU1hcC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wYWN0SklU
Q29kZU1hcF9oCisjZGVmaW5lIENvbXBhY3RKSVRDb2RlTWFwX2gKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEdpdmVzIHlvdSBhIGNvbXByZXNz
ZWQgbWFwIGJldHdlZW4gYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFuZCBtYWNoaW5lIGNvZGUK
Ky8vIGVudHJ5IHBvaW50cy4gVGhlIGNvbXByZXNzaW9uIHNpbXBseSB0cmllcyB0byB1c2UgZWl0
aGVyIDEsIDIsIG9yIDQgYnl0ZXMgZm9yCisvLyBhbnkgZ2l2ZW4gb2Zmc2V0LiBUaGUgbGFyZ2Vz
dCBvZmZzZXQgdGhhdCBjYW4gYmUgc3RvcmVkIGlzIDJeMzAuCisKKy8vIEV4YW1wbGUgdXNlOgor
Ly8KKy8vIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyIGVuY29kZXIobWFwKTsKKy8vIGVuY29k
ZXIuYXBwZW5kKGEsIGIpOworLy8gZW5jb2Rlci5hcHBlbmQoYywgZCk7IC8vIHByZWNvbmRpdGlv
bnM6IGMgPj0gYSwgZCA+PSBiCisvLyBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IG1hcCA9IGVu
Y29kZXIuZmluaXNoKCk7CisvLworLy8gQXQgc29tZSBsYXRlciB0aW1lOgorLy8KKy8vIFZlY3Rv
cjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWQ7CisvLyBtYXAtPmRlY29kZShkZWNv
ZGVkKTsKKworc3RydWN0IEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCB7CisgICAgQnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0KCkgeyB9CisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQorICAg
ICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgICAgICAsIG1fbWFjaGlu
ZUNvZGVPZmZzZXQobWFjaGluZUNvZGVPZmZzZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNl
dDsKKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldEJ5dGVjb2RlSW5kZXgoQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1h
cHBpbmctPm1fYnl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGlubGluZSB1
bnNpZ25lZCBnZXRNYWNoaW5lQ29kZU9mZnNldChCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1h
cHBpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNl
dDsKKyAgICB9Cit9OworCitjbGFzcyBDb21wYWN0SklUQ29kZU1hcCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgfkNvbXBhY3RKSVRDb2RlTWFwKCkKKyAgICB7
CisgICAgICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkZWNvZGUoVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldD4mIHJlc3VsdCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzQnl0
ZWNvZGVJbmRleCA9IDA7CisgICAgICAgIHVuc2lnbmVkIHByZXZpb3VzTWFjaGluZUNvZGVPZmZz
ZXQgPSAwOworICAgICAgICAKKyAgICAgICAgcmVzdWx0LnJlc2l6ZShtX251bWJlck9mRW50cmll
cyk7CisgICAgICAgIHVuc2lnbmVkIGogPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9udW1iZXJPZkVudHJpZXM7ICsraSkgeworICAgICAgICAgICAgcHJldmlvdXNCeXRl
Y29kZUluZGV4ICs9IGRlY29kZU51bWJlcihqKTsKKyAgICAgICAgICAgIHByZXZpb3VzTWFjaGlu
ZUNvZGVPZmZzZXQgKz0gZGVjb2RlTnVtYmVyKGopOworICAgICAgICAgICAgcmVzdWx0W2ldLm1f
Ynl0ZWNvZGVJbmRleCA9IHByZXZpb3VzQnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIHJlc3Vs
dFtpXS5tX21hY2hpbmVDb2RlT2Zmc2V0ID0gcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQoaiA9PSBtX3NpemUpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgQ29tcGFjdEpJVENvZGVNYXAodWludDhfdCogYnVmZmVyLCB1bnNpZ25lZCBzaXpl
LCB1bnNpZ25lZCBudW1iZXJPZkVudHJpZXMpCisgICAgICAgIDogbV9idWZmZXIoYnVmZmVyKQor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyNlbmRpZgorICAg
ICAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKG51bWJlck9mRW50cmllcykKKyAgICB7CisgICAgICAg
IFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICB9CisgICAgCisgICAgdWludDhfdCBhdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7Cisg
ICAgICAgIHJldHVybiBtX2J1ZmZlcltpbmRleF07CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IGRlY29kZU51bWJlcih1bnNpZ25lZCYgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICB1aW50
OF90IGhlYWRWYWx1ZSA9IGF0KGluZGV4KyspOworICAgICAgICBpZiAoIShoZWFkVmFsdWUgJiAx
MjgpKQorICAgICAgICAgICAgcmV0dXJuIGhlYWRWYWx1ZTsKKyAgICAgICAgaWYgKCEoaGVhZFZh
bHVlICYgNjQpKQorICAgICAgICAgICAgcmV0dXJuIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVh
ZFZhbHVlICYgfjEyOCkgPDwgOCkgfCBhdChpbmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgc2Vj
b25kID0gYXQoaW5kZXgrKyk7CisgICAgICAgIHVuc2lnbmVkIHRoaXJkICA9IGF0KGluZGV4Kysp
OworICAgICAgICB1bnNpZ25lZCBmb3VydGggPSBhdChpbmRleCsrKTsKKyAgICAgICAgcmV0dXJu
IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhZFZhbHVlICYgfigxMjggKyA2NCkpIDw8IDI0KSB8
IChzZWNvbmQgPDwgMTYpIHwgKHRoaXJkIDw8IDgpIHwgZm91cnRoOworICAgIH0KKyAgICAKKyAg
ICB1aW50OF90KiBtX2J1ZmZlcjsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgdW5zaWduZWQg
bV9zaXplOworI2VuZGlmCisgICAgdW5zaWduZWQgbV9udW1iZXJPZkVudHJpZXM7CisgICAgCitw
dWJsaWM6CisgICAgY2xhc3MgRW5jb2RlciB7CisgICAgcHVibGljOgorICAgICAgICBFbmNvZGVy
KCk7CisgICAgICAgIH5FbmNvZGVyKCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNh
cGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJlck9mRW50cmllc1RvQWRkKTsKKyAgICAgICAgdm9pZCBh
cHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQp
OworICAgICAgICBQYXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBmaW5pc2goKTsKKyAgICAg
ICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBhcHBlbmRCeXRlKHVpbnQ4X3QgdmFsdWUp
OworICAgICAgICB2b2lkIGVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1ZSk7CisgICAgCisgICAg
ICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgICAg
IHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVz
OworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7Cisg
ICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldDsKKyAgICB9OworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFbmNvZGVyOworfTsKKworaW5saW5lIENvbXBhY3RK
SVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNvZGVyKCkKKyAgICA6IG1fYnVmZmVyKDApCisgICAgLCBt
X3NpemUoMCkKKyAgICAsIG1fY2FwYWNpdHkoMCkKKyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKDAp
CisgICAgLCBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCgwKQorICAgICwgbV9wcmV2aW91c01hY2hp
bmVDb2RlT2Zmc2V0KDApCit7Cit9CisKK2lubGluZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rl
cjo6fkVuY29kZXIoKQoreworICAgIGlmIChtX2J1ZmZlcikKKyAgICAgICAgZmFzdEZyZWUobV9i
dWZmZXIpOworfQorICAgICAgICAKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNv
ZGVyOjphcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVP
ZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXggPj0gbV9wcmV2aW91c0J5dGVjb2Rl
SW5kZXgpOworICAgIEFTU0VSVChtYWNoaW5lQ29kZU9mZnNldCA+PSBtX3ByZXZpb3VzTWFjaGlu
ZUNvZGVPZmZzZXQpOworICAgIGVuc3VyZUNhcGFjaXR5Rm9yKDEpOworICAgIGVuY29kZU51bWJl
cihieXRlY29kZUluZGV4IC0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgpOworICAgIGVuY29kZU51
bWJlcihtYWNoaW5lQ29kZU9mZnNldCAtIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7Cisg
ICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSBieXRlY29kZUluZGV4OworICAgIG1fcHJldmlv
dXNNYWNoaW5lQ29kZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0OworICAgIG1fbnVtYmVyT2ZF
bnRyaWVzKys7Cit9CisKK2lubGluZSBQYXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBDb21w
YWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZmluaXNoKCkKK3sKKyAgICBtX2NhcGFjaXR5ID0gbV9z
aXplOworICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1f
YnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiByZXN1
bHQgPSBhZG9wdFB0cihuZXcgQ29tcGFjdEpJVENvZGVNYXAobV9idWZmZXIsIG1fc2l6ZSwgbV9u
dW1iZXJPZkVudHJpZXMpKTsKKyAgICBtX2J1ZmZlciA9IDA7CisgICAgbV9zaXplID0gMDsKKyAg
ICBtX2NhcGFjaXR5ID0gMDsKKyAgICBtX251bWJlck9mRW50cmllcyA9IDA7CisgICAgbV9wcmV2
aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9
IDA7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisgICAgICAgIAoraW5saW5lIHZv
aWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmFwcGVuZEJ5dGUodWludDhfdCB2YWx1ZSkK
K3sKKyAgICBBU1NFUlQobV9zaXplICsgMSA8PSBtX2NhcGFjaXR5KTsKKyAgICBtX2J1ZmZlcltt
X3NpemUrK10gPSB2YWx1ZTsKK30KKyAgICAKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFw
OjpFbmNvZGVyOjplbmNvZGVOdW1iZXIodWludDMyX3QgdmFsdWUpCit7CisgICAgQVNTRVJUKG1f
c2l6ZSArIDQgPD0gbV9jYXBhY2l0eSk7CisgICAgQVNTRVJUKHZhbHVlIDwgKDEgPDwgMzApKTsK
KyAgICBpZiAodmFsdWUgPD0gMTI3KSB7CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAx
MjgpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUpOworICAgIH0gZWxzZSBpZiAodmFs
dWUgPD0gMTYzODMpIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1
aW50OF90Pih2YWx1ZSA+PiA4KTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7
CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDY0KSk7CisgICAgICAgIGFwcGVuZEJ5dGUo
aGVhZFZhbHVlIHwgMTI4KTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90
Pih2YWx1ZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gMjQpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFs
dWUgJiAxMjgpKTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgNjQpKTsKKyAgICAgICAg
YXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjggfCA2NCk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gMTYpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0
aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGlj
X2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9Cit9CisKK2lubGluZSB2b2lkIENvbXBhY3RK
SVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcih1bnNpZ25lZCBudW1iZXJPZkVu
dHJpZXNUb0FkZCkKK3sKKyAgICB1bnNpZ25lZCBjYXBhY2l0eU5lZWRlZCA9IG1fc2l6ZSArIG51
bWJlck9mRW50cmllc1RvQWRkICogMiAqIDQ7CisgICAgaWYgKGNhcGFjaXR5TmVlZGVkID4gbV9j
YXBhY2l0eSkgeworICAgICAgICBtX2NhcGFjaXR5ID0gY2FwYWNpdHlOZWVkZWQgKiAyOworICAg
ICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhtX2J1ZmZl
ciwgbV9jYXBhY2l0eSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRp
ZiAvLyBDb21wYWN0SklUQ29kZU1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiAKICAgICAgICAgbV9sYWJlbHNbbV9ieXRlY29kZU9mZnNldF0gPSBsYWJl
bCgpOwogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAgICAgaWYgKG1fY2Fu
QmVPcHRpbWl6ZWQpCisgICAgICAgICAgICBtX2ppdENvZGVNYXBFbmNvZGVyLmFwcGVuZChtX2J5
dGVjb2RlT2Zmc2V0LCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7
CisjZW5kaWYKKwogICAgICAgICBzd2l0Y2ggKG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1
cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpKSB7CiAgICAgICAgIERFRklORV9CSU5BUllfT1Ao
b3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX0JJTkFSWV9PUChvcF9pbikKQEAgLTM3Myw3
ICszNzgsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAjZW5kaWYKIH0K
IAotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCiB7CiAgICAgdW5zaWduZWQg
am1wVGFibGVDb3VudCA9IG1fam1wVGFibGUuc2l6ZSgpOwpAQCAtNTAyLDYgKzUwNiw4IEBAIEpJ
VENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIHsKICNpZiBFTkFCTEUoVElF
UkVEX0NPTVBJTEFUSU9OKQogICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBtX2NvZGVCbG9jay0+Y2Fu
Q29tcGlsZVdpdGhERkcoKTsKKyAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgbV9z
dGFydE9mQ29kZSA9IGxhYmVsKCk7CiAjZW5kaWYKICAgICAKICAgICAvLyBKdXN0IGFkZCBhIGxp
dHRsZSBiaXQgb2YgcmFuZG9tbmVzcyB0byB0aGUgY29kZWdlbgpAQCAtNjQyLDYgKzY0OCwxMSBA
QCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAgICAgICAgIGluZm8u
Y2FsbFJldHVybkxvY2F0aW9uID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fbWV0
aG9kQ2FsbENvbXBpbGF0aW9uSW5mb1tpXS5wcm9wZXJ0eUFjY2Vzc0luZGV4KS5jYWxsUmV0dXJu
TG9jYXRpb247CiAgICAgfQogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBp
ZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAo
bV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7CisjZW5kaWYKKwogICAgIGlmIChtX2NvZGVC
bG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hl
Y2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0
aW9uT2YoYXJpdHlDaGVjayk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJl
dmlzaW9uIDk0ODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1
YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJ
VCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0
aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAogI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1
ZGUgIk9wY29kZS5oIgpAQCAtMTA1NCw2ICsxMDU1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIAogI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAgICAgICAgIGJvb2wgbV9jYW5C
ZU9wdGltaXplZDsKKyAgICAgICAgTGFiZWwgbV9zdGFydE9mQ29kZTsKKyAgICAgICAgQ29tcGFj
dEpJVENvZGVNYXA6OkVuY29kZXIgbV9qaXRDb2RlTWFwRW5jb2RlcjsKICNlbmRpZgogICAgIH0g
SklUX0NMQVNTX0FMSUdOTUVOVDsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA5NDg3OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5
Miw2ICsxOTIsOSBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAg
ICAgLCBwYXJzZXIobmV3IFBhcnNlcikKICAgICAsIGludGVycHJldGVyKDApCiAgICAgLCBoZWFw
KHRoaXMsIGhlYXBTaXplKQorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgLCBu
dW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcigwKQorI2VuZGlmCiAgICAgLCBkeW5h
bWljR2xvYmFsT2JqZWN0KDApCiAgICAgLCBjYWNoZWRVVENPZmZzZXQoc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkKICAgICAsIG1heFJlZW50cnlEZXB0aCh0aHJlYWRT
dGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBlU21hbGwgPyBNYXhTbWFsbFRocmVhZFJlZW50cnlE
ZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRyeURlcHRoKQpAQCAtMzU3LDYgKzM2MCwxMSBAQCBK
U0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykK
ICAgICBkZWxldGUgbV9ydFRyYWNlTGlzdDsKICNlbmRpZgorCisjaWYgRU5BQkxFKFRJRVJFRF9D
T01QSUxBVElPTikKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3NyU2NyYXRjaEJ1ZmZl
cnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZhc3RGcmVlKG9zclNjcmF0Y2hCdWZmZXJzW2ldKTsK
KyNlbmRpZgogfQogCiBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVh
dGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlIHR5cGUsIEhlYXBTaXplIGhlYXBTaXplKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJl
dmlzaW9uIDk0ODc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUsMjggQEAgbmFtZXNwYWNlIEpTQyB7
CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBpbnQ2NF90IGRlYnVnRGF0YUJ1ZmZlcls2NF07CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICBWZWN0b3I8aW50
NjRfdCo+IG9zclNjcmF0Y2hCdWZmZXJzOworICAgICAgICBzaXplX3QgbnVtYmVyT2ZTbG90c0lu
TGFzdE9TUlNjcmF0Y2hCdWZmZXI7CisgICAgICAgIAorICAgICAgICBpbnQ2NF90KiBvc3JTY3Jh
dGNoQnVmZmVyRm9yU2l6ZSh1bnNpZ25lZCBudW1iZXJPZlNsb3RzKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIW51bWJlck9mU2xvdHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChudW1iZXJPZlNsb3RzID4gbnVtYmVyT2ZTbG90
c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFn
YWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhvbG9neSBieSBlbnN1cmluZworICAgICAgICAg
ICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdlIGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5p
bmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29t
ZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXpl
KSAqIDQuCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZm
ZXIgPSBudW1iZXJPZlNsb3RzICogMjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBvc3JTY3JhdGNoQnVmZmVycy5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50NjRfdCo+KGZhc3RNYWxs
b2Moc2l6ZW9mKGludDY0X3QpICogbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBvc3JT
Y3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAgICAgIH0KKyNlbmRpZgogI2VuZGlmCiAKICAgICAg
ICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3Bh
cXVlSlNDbGFzc0RhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
bHVlLmNwcAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIEpTT2JqZWN0
KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEUKICNpZm5kZWYgTkRFQlVHCiBjaGFyKiBK
U1ZhbHVlOjpkZXNjcmlwdGlvbigpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0g
MzI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gNjQ7CiAgICAgc3RhdGljIGNoYXIg
ZGVzY3JpcHRpb25bc2l6ZV07CiAKICAgICBpZiAoISp0aGlzKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gOTQ4NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1Nyw3ICs5NTcsNyBAQAog
I2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OKQotI2RlZmlu
ZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDAKKyNkZWZpbmUgRU5BQkxFX1RJRVJFRF9DT01Q
SUxBVElPTiAxCiAjZW5kaWYKIAogLyogQ3VycmVudGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIEpT
VkFMVUU2NCwgb25seSB0ZXN0ZWQgb24gUExBVEZPUk0oTUFDKSAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106980</attachid>
            <date>2011-09-10 13:23:10 -0700</date>
            <delta_ts>2011-09-10 15:40:53 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>osr_patch_4.diff</filename>
            <type>text/plain</type>
            <size>87960</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5MTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMDkgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSBkb2Vzbid0IHRocm90dGxlIG9uIE1h
YwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0OTExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKIAkJMEZEM0M4MjcxNDExNUQ0
RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQx
MTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLzsgfTsKKwkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RK
SVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY3NzEyQTZG
NzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
MDAwNjkzMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjkyMTJBNkY5RTEwMDY0
RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLzsgfTsKIAkJMTQwNTY2QzQxMDdFQzI1NTAw
NURCQzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZh
bHVlV3JhcHBlci5jcHAgKi87IH07CkBAIC03ODksNiArNzkwLDcgQEAKIAkJMEZEM0M4MjQxNDEx
NUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHUHJvcGFnYXRvci5oOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdD
YXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJp
bGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0SklUQ29kZU1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxv
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjgsNiArMTU3MCw3IEBACiAJCTE0MjlEOTJDMEVEMjJENzAw
MEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICov
LAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRv
ci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yRml4ZWRWTVBvb2wuY3BwICovLApAQCAtMjM4Miw2ICsyMzg1LDcgQEAKIAkJCQlCQzI1N0RF
ODBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQz
QjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQjMxQjkxNDA1NzdENzAw
REI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDkxMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBDb2RlQmxvY2tfaAogI2RlZmluZSBDb2RlQmxv
Y2tfaAogCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJFdmFsQ29k
ZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgi
CkBAIC0yOTgsNiArMjk5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElP
TikKKyAgICAgICAgdm9pZCBzZXRKSVRDb2RlTWFwKFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVN
YXA+IGppdENvZGVNYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0Q29kZU1hcCA9IGpp
dENvZGVNYXA7CisgICAgICAgIH0KKyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVN
YXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwor
ICAgICAgICB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCiAgICAgICAg
IHsKQEAgLTY1MSw2ICs2NjMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOwogICAgICAgICBTZW50aW5lbExp
bmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+
ID4gbV9pbmNvbWluZ0NhbGxzOwogI2VuZGlmCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElP
TikKKyAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7CisjZW5k
aWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxW
YWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKICNlbmRpZgpAQCAtNjY2LDcgKzY4MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxl
OwogCi0gICAgICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7IC8vIEZJWE1FIG1h
a2UgdGhpcyBkbyBzb21ldGhpbmcKKyAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5h
dGl2ZTsKIAogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsMTQg
KzM2NywxOCBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENvbnN0
YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudDEpLmFzSW50MzIoKSA9
PSAxKTsKICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudDEpOwogICAgIH0K
LQorICAgIAorICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5kZXgpOworICAgIH0KIAogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgY3JlYXRlIGEgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4gSWYgbm9k
ZXMgb2YgdGhpcyB0eXBlIGFyZQogICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhlIG5vZGUg
IHdpbGwgaW1wbGljaXRseSBiZSByZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCiAgICAgTm9k
ZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAg
ICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGgu
c2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwg
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9w
LCBjdXJyZW50Q29kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAg
ICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJl
c3VsdEluZGV4KTsKQEAgLTM4Myw3ICszODcsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBh
ZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbywgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9n
cmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudElu
ZGV4LCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CisgICAgICAgIG1fZ3JhcGguYXBw
ZW5kKE5vZGUob3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpKTsKIAogICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAg
ICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwpAQCAtMzkyLDcgKzM5Niw3IEBAIHByaXZhdGU6
CiAgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJ
bmZvIGluZm8yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUlu
ZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9n
cmFwaC5hcHBlbmQoTm9kZShvcCwgbV9jdXJyZW50SW5kZXgsIGluZm8xLCBpbmZvMiwgY2hpbGQx
LCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsK
IAogICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFw
aC5yZWYocmVzdWx0SW5kZXgpOwpAQCAtNDAyLDcgKzQwNiw3IEBAIHByaXZhdGU6CiAgICAgTm9k
ZUluZGV4IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgT3BJbmZvIGlu
Zm8xLCBPcEluZm8gaW5mbzIpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXgg
PSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2Rl
KE5vZGU6OlZhckFyZywgb3AsIG1fY3VycmVudEluZGV4LCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2Vk
VmFyQXJncykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKE5vZGU6OlZhckFyZywgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdzKSk7CiAg
ICAgICAgIAogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MgPSAwOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDk0OTExKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNywxNSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBlbnVt
IENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsKIGlubGluZSBi
b29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhl
Y1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGpp
dENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQogewor
ICAgIGlmIChmYWxzZSkgeworICAgICAgICBzd2l0Y2ggKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSkgeworICAgICAgICBjYXNlIDExMTc2Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJzKTsKICAgICBpZiAoIXBhcnNlKGRmZywg
Z2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R1BSSW5mby5oCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnMgPSA5OwogCiAgICAgLy8g
VGhlc2UgcmVnaXN0ZXJzIG1hdGNoIHRoZSBvbGQgSklULgorICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgY2FjaGVkUmVzdWx0UmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIHRpbWVvdXRDaGVja1JlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyMTI7CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6
cjEzOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgdGFnVHlwZU51bWJlclJlZ2lzdGVyID0gWDg2
UmVnaXN0ZXJzOjpyMTQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVy
YXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
ZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDEyICsyNzQs
MTAgQEAgcHVibGljOgogICAgICAgICB1LmZwciA9IGZwcjsKICAgICB9CiAKLSNpZm5kZWYgTkRF
QlVHCiAgICAgYm9vbCBhbGl2ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV91c2VDb3VudDsK
ICAgICB9Ci0jZW5kaWYKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgaW5kZXggb2YgdGhlIG5vZGUg
d2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTQ5MTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsMTMgKzUyLDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28K
ICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKICAgICB1bnNpZ25lZCByZWZDb3VudCA9IG5v
ZGUucmVmQ291bnQoKTsKLSAgICBpZiAoIXJlZkNvdW50KSB7Ci0gICAgICAgIHByaW50ZigiJSA0
ZDpcdHNraXBwZWQgJXNcbiIsIChpbnQpbm9kZUluZGV4LCBvcE5hbWUob3ApKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBib29sIHNraXBwZWQgPSAhcmVmQ291bnQ7CiAgICAgYm9vbCBt
dXN0R2VuZXJhdGUgPSBub2RlLm11c3RHZW5lcmF0ZSgpOwotICAgIGlmIChtdXN0R2VuZXJhdGUp
CisgICAgaWYgKG11c3RHZW5lcmF0ZSkgeworICAgICAgICBBU1NFUlQocmVmQ291bnQpOwogICAg
ICAgICAtLXJlZkNvdW50OworICAgIH0KIAogICAgIC8vIEV4YW1wbGUvZXhwbGFuYXRpb24gb2Yg
ZGF0YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAtNzcsOCArNzYsOCBAQCB2b2lkIEdyYXBo
OjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgLy8gICAgICAgICAkIyAgIC0gdGhl
IGluZGV4IGluIHRoZSBDb2RlQmxvY2sgb2YgYSBjb25zdGFudCB7IGZvciBudW1lcmljIGNvbnN0
YW50cyB0aGUgdmFsdWUgaXMgZGlzcGxheWVkIHwgZm9yIGludGVnZXJzLCBpbiBib3RoIGRlY2lt
YWwgYW5kIGhleCB9LgogICAgIC8vICAgICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29k
ZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIgeyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAo
KSwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAg
ICAgIHZhciMgLSB0aGUgaW5kZXggb2YgYSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQg
YnkgR2V0R2xvYmFsVmFyL1B1dEdsb2JhbFZhciBvcGVyYXRpb25zLgotICAgIHByaW50ZigiJSA0
ZDpcdDwlYyV1OiIsIChpbnQpbm9kZUluZGV4LCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJl
ZkNvdW50KTsKLSAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkKKyAgICBwcmludGYoIiUgNGQ6JXM8
JWMldToiLCAoaW50KW5vZGVJbmRleCwgc2tpcHBlZCA/ICIgIHNraXBwZWQgICIgOiAiICAgICAg
ICAgICAiLCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJlZkNvdW50KTsKKyAgICBpZiAobm9k
ZS5oYXNSZXN1bHQoKSAmJiAhc2tpcHBlZCkKICAgICAgICAgcHJpbnRmKCIldSIsIG5vZGUudmly
dHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAgcHJpbnRmKCItIik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDk0OTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOCwxNyArMTExOCwxNyBAQCB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgbV9qaXQuYWRkUHRyKElt
bTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdp
c3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwotICAgIG1faml0Lm5vdGlmeUNh
bGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8p
OworICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxl
SW5kZXhdLmNvZGVPcmlnaW4pOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIAogICAg
IG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2pp
dC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2pp
dC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNr
KHNsb3dDYWxsRnVuY3Rpb24sIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmln
aW4pOwogICAgIG1faml0Lm1vdmUoSW1tMzIobnVtQXJncyksIEdQUkluZm86OnJlZ1QxKTsKICAg
ICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5u
b3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBtX2ppdC5ncmFw
aCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1f
aml0KTsKICAgICAKQEAgLTExMzYsNyArMTEzNiw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6
ZW1pdENhbGwoTm9kZSYgbm8KICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
ICAgICAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0No
ZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8p
OworICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ss
IGlzQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiB9CiAK
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk0OTExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw3
ICs5MDUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9u
LCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICAgICAg
cmV0dXJuIG1faml0LmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIG1faml0
LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogICAgIH0KIAogICAgIHZvaWQg
YWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wLCBCbG9ja0luZGV4IGRl
c3RpbmF0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAJKHJldmlzaW9uIDk0OTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMzQxIEBAIHZv
aWQgSklUQ29tcGlsZXI6OmZpbGxUb0pTKE5vZGVJbmRleCBub2QKICAgICBsb2FkUHRyKGFkZHJl
c3NGb3Iobm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7CiB9CiAKKyNpZiBERkdfT1NSCit2
b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4
aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZm
LgorICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOworCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJ
VCBvZmZzZXQgMHgleCAgICIsIChpbnQpZXhpdC5tX25vZGVJbmRleCwgZXhpdC5tX2J5dGVjb2Rl
SW5kZXgsIGRlYnVnT2Zmc2V0KCkpOworI2VuZGlmCisjaWYgREZHX0pJVF9CUkVBS19PTl9TUEVD
VUxBVElPTl9GQUlMVVJFCisgICAgYnJlYWtwb2ludCgpOworI2VuZGlmCisgICAgCisjaWYgREZH
X1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRQorICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVn
SW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKKyAgICBk
ZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgIGRlYnVnSW5mby0+ZGVidWdP
ZmZzZXQgPSBkZWJ1Z09mZnNldCgpOworICAgIAorICAgIGRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlv
blByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworI2VuZGlmCisgICAgCisgICAg
Ly8gMikgUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8g
cGxheSB3aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBi
ZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgorICAg
IAorICAgIEdQUlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIGlm
IChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMo
KSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgYWxyZWFkeUJv
eGVkID0gcmVjb3ZlcnktPmRlc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CisgICAgICAgICAgICB4b3JQ
dHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3Zl
cnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAz
KSBGaWd1cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xvdHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBv
bmUgZm9yIGV2ZXJ5IEdQUi9GUFIKKyAgICAvLyAgICB3aG9zZSBkZXN0aW5hdGlvbiBpcyBub3cg
b2NjdXBpZWQgYnkgYSBERkcgdmlydHVhbCByZWdpc3RlciwgYW5kIHdlIG5lZWQKKyAgICAvLyAg
ICBvbmUgZm9yIGV2ZXJ5IGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVyIGlmIHRoZXJlIGFyZSBt
b3JlIHRoYW4KKyAgICAvLyAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyBvZiB0aGVtLiBB
bHNvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50cywKKyAgICAvLyAgICBhbnkgdW5kZWZp
bmVkIHNsb3RzLCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55IHVuYm94ZWQgaW50cy4KKyAgICAgICAg
ICAgIAorICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMoZXhpdC5tX3Zh
cmlhYmxlcy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVyc1tpXSA9IGZhbHNlOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnMgPSAwOworICAgIHVuc2lnbmVkIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycyA9IDA7CisgICAgCisgICAgLy8gQm9vbGVhbnMgZm9yIGZhc3QgY2hlY2tzLiBXZSBleHBl
Y3QgdGhhdCBtb3N0IE9TUiBleGl0cyBkbyBub3QgaGF2ZSB0byByZWJveAorICAgIC8vIEludDMy
cywgaGF2ZSBubyBGUFJzLCBhbmQgaGF2ZSBubyBjb25zdGFudHMuIElmIHRoZXJlIGFyZSBjb25z
dGFudHMsIHdlCisgICAgLy8gZXhwZWN0IG1vc3Qgb2YgdGhlbSB0byBiZSBqc1VuZGVmaW5lZCgp
OyBpZiB0aGF0J3MgdHJ1ZSB0aGVuIHdlIGhhbmRsZSB0aGF0CisgICAgLy8gc3BlY2lhbGx5IHRv
IG1pbmltaXplIGNvZGUgc2l6ZSBhbmQgZXhlY3V0aW9uIHRpbWUuCisgICAgYm9vbCBoYXZlVW5i
b3hlZEludDMycyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUZQUnMgPSBmYWxzZTsKKyAgICBib29s
IGhhdmVDb25zdGFudHMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsK
KyAgICAKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIHN3aXRjaCAocmVjb3Zlcnku
dGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAg
ICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOworICAgICAgICAg
ICAgQVNTRVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPj0gMCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBsaWtlIHRvIHN0b3JlIHRvIHRo
aXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcKKyAgICAgICAgICAgIC8vIHZpcnR1YWwg
cmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0
ZXIKKyAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVu
dGlsIGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCisgICAgICAgICAgICAvLyByZWdpc3RlcnMgYXJl
IGhhbmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5Cisg
ICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3RlIHRo
YXQgd2UgZXhwZWN0IHRoaXMgY2FzZQorICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28gdGhl
IGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIGluCisgICAgICAgICAg
ICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCisgICAgICAgICAgICBpZiAocmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAg
ICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgICAgICBjYXNl
IEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVy
c1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAg
aGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVy
eS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5l
ZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaW50
NjRfdCogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEoKS0+b3NyU2NyYXRjaEJ1ZmZlckZvclNp
emUobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRW
aXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzID8gMCA6IG51bWJl
ck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpOworCisgICAgLy8gRnJvbSBoZXJlIG9uLCB0
aGUgY29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlz
dGFuY2UKKyAgICAvLyBiZXR3ZWVuIHdoZW4gc29tZXRoaW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVu
IGl0IGlzIHN0b3JlZC4KKyAgICAKKyAgICAvLyA0KSBQZXJmb3JtIGFsbCByZWJveGluZyBvZiBp
bnRlZ2Vycy4KKyAgICAKKyAgICBpZiAoaGF2ZVVuYm94ZWRJbnQzMnMpIHsKKyAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52
YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUo
KSA9PSBVbmJveGVkSW50MzJJbkdQUiAmJiByZWNvdmVyeS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQp
CisgICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBy
ZWNvdmVyeS5ncHIoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gNSkgRHVtcCBh
bGwgbm9uLXBvaXNvbmVkIEdQUnMuIEZvciBwb2lzb25lZCBHUFJzLCBzYXZlIHRoZW0gaW50byB0
aGUgc2NyYXRjaCBzdG9yYWdlLgorICAgIC8vICAgIE5vdGUgdGhhdCBHUFJzIGRvIG5vdCBoYXZl
IGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQKKyAg
ICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3aWxsIGhhdmUgYXQgbGVhc3Qgb25lIEdQ
UiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KKyAgICAKKyAgICB1bnNpZ25lZCBzY3JhdGNoSW5k
ZXggPSAwOworICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVj
b3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBl
eGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgY2FzZSBVbmJveGVkSW50
MzJJbkdQUjoKKyAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKKyAgICAg
ICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0
Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihy
ZWNvdmVyeS5ncHIoKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCBhbGwgR1BScyBhcmUg
YXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KKyAgICAKKyAgICBpZiAoaGF2ZUZQUnMpIHsKKyAg
ICAgICAgLy8gNikgQm94IGFsbCBkb3VibGVzIChyZWxpZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBH
UFJzIHRoYW4gRlBScykKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5k
ZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7
CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBGUFJSZWcgZnByID0gcmVjb3ZlcnkuZnBy
KCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZv
Ojp0b0luZGV4KGZwcikpOworICAgICAgICAgICAgYm94RG91YmxlKGZwciwgZ3ByKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgLy8gNykgRHVtcCBhbGwgZG91YmxlcyBpbnRvIHRoZSBy
ZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBzdG9yYWdlIGlmCisgICAgICAgIC8vICAg
IHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVyIGlzIHBvaXNvbmVkLgorICAgICAgICAK
KyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVy
aWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKEZQUkluZm86OnRvSW5kZXgo
cmVjb3ZlcnkuZnByKCkpKTsKKyAgICAgICAgICAgIGlmIChleGl0LmlzVmFyaWFibGUoaW5kZXgp
ICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgp
XSkKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihncHIsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNo
SW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIoZ3By
LCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgCisgICAgLy8gOCkgUmVzaHVm
ZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4gT3B0aW1pemUgZm9yIHRoZSBjYXNlIHRo
YXQKKyAgICAvLyAgICB0aGUgbnVtYmVyIG9mIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycyBp
cyBub3QgbW9yZSB0aGFuIHRoZSBudW1iZXIKKyAgICAvLyAgICBvZiBhdmFpbGFibGUgcGh5c2lj
YWwgcmVnaXN0ZXJzLgorICAgIAorICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMpIHsKKyAgICAgICAgaWYgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8
PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykgeworICAgICAgICAgICAgLy8gU28gZmFyIHRo
aXMgYXBwZWFycyB0byBiZSB0aGUgY2FzZSB0aGF0IHRyaWdnZXJzIGFsbCB0aGUgdGltZSwgYnV0
CisgICAgICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9tIGd1YXJhbnRlZWQuCisgICAgICAgIAor
ICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50SW5kZXggPSAwOworICAgICAgICAgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9
IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5
LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3Zl
cnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudElu
ZGV4KyspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBkaXNwbGFjZW1l
bnRJbmRleCA9IDA7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhp
dC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0
IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAg
ICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IHN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlzcGxhY2VtZW50SW5kZXgrKyksIGFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0aG0gdGhhdCB3ZSB1c2UKKyAgICAgICAg
ICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9uLXNwZWN1bGF0aXZlIGp1bXBzLCBpZiB3ZSBldmVy
IGRpc2NvdmVyIHRoYXQKKyAgICAgICAgICAgIC8vIHNvbWUgaG90IGNvZGUgd2l0aCBsb3RzIG9m
IGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBhbmQKKyAgICAgICAgICAgIC8vIHNwaWxs
ZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxpbmcgc3BlY3VsYXRpb24uCisgICAgICAg
IAorICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGlzIGNvZGUgaXMgZW5naW5lZXJlZCB0byBiZSBj
b3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKKyAgICAgICAgICAgIC8vIHN1cGVyLiBJbiBwYXJ0aWN1
bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3aGVyZSBmb3IgZXhhbXBsZQorICAgICAg
ICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMgYXJlIGEgcGVybXV0YXRpb24gb2YgdGhlIGRlc3Rp
bmF0aW9uIHZhbHVlcywgbGlrZQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEgLT4g
MgorICAgICAgICAgICAgLy8gMiAtPiAxCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
SXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxpZnRpbmcgYWxsIG9mIHRoZSB2aXJ0dWFs
IHJlZ2lzdGVycworICAgICAgICAgICAgLy8gZnJvbSB0aGVpciBvbGQgKERGRyBKSVQpIGxvY2F0
aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0Y2gKKyAgICAgICAgICAgIC8vIGxvY2F0
aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJhbnNmZXJyaW5nIGZyb20gdGhhdCBzY3JhdGNoIGxv
Y2F0aW9uCisgICAgICAgICAgICAvLyB0byB0aGVpciBuZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4K
KyAgICAgICAgCisgICAgICAgICAgICBpbnQ2NF90KiBzY3JhdGNoQnVmZmVyID0gZ2xvYmFsRGF0
YSgpLT5vc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdp
c3RlcnMpOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgp
OworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBz
Y3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgICAgIHNjcmF0Y2hJbmRleCA9IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVy
T2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJl
Y292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxl
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBsb2FkUHRy
KHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVycyArIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gOSkgRHVtcCBhbGwgcG9pc29uZWQgdmlydHVh
bCByZWdpc3RlcnMuCisgICAgCisgICAgc2NyYXRjaEluZGV4ID0gMDsKKyAgICBpZiAobnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgZm9yIChpbnQgdmlydHVhbFJl
Z2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUo
KTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAgICAgIGlmICghcG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0g
ZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgc3dpdGNoIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgY2FzZSBJbkdQUjoKKyAgICAgICAg
ICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBjYXNlIEluRlBSOgorICAg
ICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFsUmVnaXN0ZXIpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
QVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7
CisgICAgCisgICAgLy8gMTApIER1bXAgYWxsIGNvbnN0YW50cy4gT3B0aW1pemUgZm9yIFVuZGVm
aW5lZCwgc2luY2UgdGhhdCdzIGEgY29uc3RhbnQgd2Ugc2VlCisgICAgLy8gICAgIG9mdGVuLgor
CisgICAgaWYgKGhhdmVDb25zdGFudHMpIHsKKyAgICAgICAgaWYgKGhhdmVVbmRlZmluZWQpCisg
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBDb25zdGFu
dCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5j
b25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5m
bzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRl
eChpbmRleCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihU
cnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNvdmVyeS5jb25zdGFudCgpKSksIGFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyAxMSkgTG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBs
YXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1QwLgorICAgIAorICAgIGlmIChleGl0Lm1f
bGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVy
YW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIAorICAgIC8vIDEyKSBG
aXggY2FsbCBmcmFtZS4KKyAgICAKKyAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZl
KCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgc3RvcmVQdHIo
VHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSksIGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVCbG9jaykpOworICAgIAorICAgIC8vIDEz
KSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFzZWxpbmUgSklUIGNvZGUuCisgICAgCisg
ICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6
Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAuYmVnaW4oKSwgZGVjb2RlZENvZGVNYXAu
c2l6ZSgpLCBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgQVNTRVJUKG1hcHBpbmcp
OworICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gZXhpdC5tX2J5dGVjb2Rl
SW5kZXgpOworICAgIAorICAgIHZvaWQqIGp1bXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oY29kZUJsb2NrKCktPmFsdGVybmF0aXZl
KCktPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQp
OworICAgIAorICAgIEFTU0VSVChHUFJJbmZvOjpyZWdUMSAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1
bHRSZWdpc3Rlcik7CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBH
UFJJbmZvOjpyZWdUMSk7CisgICAganVtcChHUFJJbmZvOjpyZWdUMSk7CisKKyNpZiBERkdfREVC
VUdfVkVSQk9TRQorICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXBcbiIsIGp1bXBUYXJnZXQpOwor
I2VuZGlmCit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJ
VCYgc3BlY3VsYXRpdmUpCit7CisgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4g
ZGVjb2RlZENvZGVNYXA7CisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKTsK
KyAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBK
SVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpLT5qaXRDb2RlTWFwKCkpOworICAgIGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRD
b2RlTWFwKCktPmRlY29kZShkZWNvZGVkQ29kZU1hcCk7CisgICAgCisgICAgT1NSRXhpdFZlY3Rv
cjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5iZWdpbigpOwor
ICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzRW5kID0gc3BlY3VsYXRpdmUub3NyRXhp
dHMoKS5lbmQoKTsKKyAgICAKKyAgICB3aGlsZSAoZXhpdHNJdGVyICE9IGV4aXRzRW5kKSB7Cisg
ICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAqZXhpdHNJdGVyOworICAgICAgICBleGl0U3Bl
Y3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhp
dC5tX3JlY292ZXJ5SW5kZXgpLCBkZWNvZGVkQ29kZU1hcCk7CisgICAgICAgICsrZXhpdHNJdGVy
OworICAgIH0KK30KKyNlbHNlIC8vIERGR19PU1IKIGNsYXNzIEdlbmVyYWxpemVkUmVnaXN0ZXIg
ewogcHVibGljOgogICAgIEdlbmVyYWxpemVkUmVnaXN0ZXIoKSB7IH0KQEAgLTgwMyw2ICsxMTM4
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua1NwZWN1bGF0aW9uQ2hlY2tzKAogICAgIEFTU0VS
VCghKGNoZWNrc0l0ZXIgIT0gY2hlY2tzRW5kKSk7CiAgICAgQVNTRVJUKCEoZW50cmllc0l0ZXIg
IT0gZW50cmllc0VuZCkpOwogfQorI2VuZGlmIC8vIERGR19PU1IKIAogdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUVudHJ5KCkKIHsKQEAgLTg0NCwxMiArMTE4MCwxNiBAQCB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlQm9keSgpCiAgICAgLy8gdG8gYWxsb3cgaXQgdG8gY2hlY2sgd2hpY2ggbm9k
ZXMgaW4gdGhlIGdyYXBoIG1heSBiYWlsIG91dCwgYW5kIG1heSBuZWVkIHRvIHJlZW50ZXIgdGhl
CiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBhdGguCiAgICAgaWYgKGNvbXBpbGVkU3BlY3VsYXRp
dmUpIHsKKyNpZiBERkdfT1NSCisgICAgICAgIGxpbmtPU1JFeGl0cyhzcGVjdWxhdGl2ZSk7Cisj
ZWxzZQogICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9y
KHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uQ2hlY2tzKCkpOwogICAgICAgICBOb25TcGVjdWxhdGl2
ZUpJVCBub25TcGVjdWxhdGl2ZSgqdGhpcyk7CiAgICAgICAgIG5vblNwZWN1bGF0aXZlLmNvbXBp
bGUoY2hlY2tJdGVyYXRvcik7CiAKICAgICAgICAgLy8gTGluayB0aGUgYmFpbC1vdXRzIGZyb20g
dGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgcG9pbnRzIGlu
dG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAgICAgIGxpbmtTcGVjdWxhdGlvbkNoZWNr
cyhzcGVjdWxhdGl2ZSwgbm9uU3BlY3VsYXRpdmUpOworI2VuZGlmCiAgICAgfSBlbHNlIHsKICNp
ZiBERkdfREVCVUdfVkVSQk9TRQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZl
SklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CkBAIC04NjIsOCArMTIwMiwxMiBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgICAgIG1fbWV0aG9kR2V0cy5jbGVhcigpOwogICAg
ICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZlUGF0aEJlZ2luKTsKIAorI2lmIERGR19PU1IK
KyAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcjsKKyNl
bHNlCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3Igbm9DaGVja3M7CiAgICAgICAgIFNw
ZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIGNoZWNrSXRlcmF0b3Iobm9DaGVja3MpOworI2Vu
ZGlmCiAgICAgICAgIE5vblNwZWN1bGF0aXZlSklUIG5vblNwZWN1bGF0aXZlKCp0aGlzKTsKICAg
ICAgICAgbm9uU3BlY3VsYXRpdmUuY29tcGlsZShjaGVja0l0ZXJhdG9yKTsKICAgICB9CkBAIC05
MTEsNyArMTI1NSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIGlmIChtX2NhbGxzW2ldLm1faGFuZGxlc0V4Y2VwdGlvbnMpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCByZXR1cm5BZGRyZXNzT2Zmc2V0ID0gbGlua0J1ZmZlci5yZXR1
cm5BZGRyZXNzT2Zmc2V0KG1fY2FsbHNbaV0ubV9jYWxsKTsKLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBleGNlcHRpb25JbmZvID0gbV9jYWxsc1tpXS5tX2V4Y2VwdGlvbkluZm87CisgICAgICAg
ICAgICAgICAgdW5zaWduZWQgZXhjZXB0aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9jb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+Y2FsbFJldHVy
bkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0KHJl
dHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbkluZm8pKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAko
cmV2aXNpb24gOTQ5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgU3BlY3VsYXRpb25S
ZWNvdmVyeTsKIAogc3RydWN0IEVudHJ5TG9jYXRpb247CiBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVj
azsKK3N0cnVjdCBPU1JFeGl0OwogCiAjaWZuZGVmIE5ERUJVRwogdHlwZWRlZiB2b2lkICgqVl9E
RkdEZWJ1Z09wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwpAQCAtODIsMjEgKzgzLDIx
IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3RvciBmb3Ig
YSBjYWxsIHdpdGggYW4gZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBD
YWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9u
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rp
b24pCiAgICAgICAgICwgbV9leGNlcHRpb25DaGVjayhleGNlcHRpb25DaGVjaykKLSAgICAgICAg
LCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4o
Y29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewog
ICAgIH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgdGhhdCBtYXkgY2F1c2UgZXhj
ZXB0aW9ucywgYnV0IHdoaWNoIGFyZSBoYW5kbGVkCiAgICAgLy8gdGhyb3VnaCBzb21lIG1lY2hh
bmlzbSBvdGhlciB0aGFuIHRoZSBpbi1saW5lIGV4Y2VwdGlvbiBoYW5kbGVyLgotICAgIENhbGxS
ZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEV4
Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikK
LSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2Nv
ZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUp
CiAgICAgewogICAgIH0KQEAgLTEwNCw3ICsxMDUsNyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOwogICAgIEZ1bmN0aW9uUHRyIG1fZnVuY3Rp
b247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNlcHRpb25DaGVjazsKLSAgICBFeGNl
cHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsK
ICAgICBib29sIG1faGFuZGxlc0V4Y2VwdGlvbnM7CiB9OwogCkBAIC0xOTIsOSArMTkzLDkgQEAg
cHVibGljOgogICAgIH0KIAogICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRv
ZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBjYWxsLCB1
bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxS
ZWNvcmQoY2FsbCwgRnVuY3Rpb25QdHIoKSwgZXhjZXB0aW9uSW5mbykpOworICAgICAgICBtX2Nh
bGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIEZ1bmN0aW9uUHRyKCksIGNvZGVPcmlnaW4pKTsK
ICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFu
IGV4Y2VwdGlvbiBjaGVjay4KQEAgLTIwNSwyMCArMjA2LDIwIEBAIHB1YmxpYzoKICAgICB9CiAK
ICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGFuIGV4Y2VwdGlvbiBj
aGVjay4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rp
b25QdHImIGZ1bmN0aW9uLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIENhbGwgYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIENvZGVP
cmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2Fs
bCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihOb25aZXJv
LCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKSk7Ci0gICAgICAgIG1f
Y2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9u
Q2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29y
ZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwog
ICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKICAgICAvLyBBZGQgYSBj
YWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNlcHRpb24gY2hlY2sgdGhhdCB0
ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCi0gICAgQ2FsbCBhcHBlbmRDYWxsV2l0
aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVk
IGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVj
ayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4
Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5j
dGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9jYWxscy5h
cHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywg
Y29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAK
QEAgLTMxMSw5ICszMTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fbWV0aG9kR2V0cy5hcHBlbmQo
TWV0aG9kR2V0UmVjb3JkKHNsb3dDYWxsLCBzdHJ1Y3RUb0NvbXBhcmUsIHByb3RvT2JqLCBwcm90
b1N0cnVjdFRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBh
ZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdl
dFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQg
YWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJn
ZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKLSAg
ICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0
YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9qc0NhbGxz
LmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBp
c0NhbGwsIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zMjYsOCArMzI3LDE0
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsTnVtZXJpY1RvRG91YmxlKE5vZGVJbmRleCwgRlBS
UmVnLCBHUFJSZWcgdGVtcG9yYXJ5KTsKICAgICB2b2lkIGZpbGxJbnQzMlRvSW50ZWdlcihOb2Rl
SW5kZXgsIEdQUlJlZyk7CiAgICAgdm9pZCBmaWxsVG9KUyhOb2RlSW5kZXgsIEdQUlJlZyk7Cisg
ICAgCisjaWYgREZHX09TUgorICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBP
U1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCk7CisgICAgdm9pZCBsaW5rT1NSRXhpdHMoU3BlY3VsYXRp
dmVKSVQmKTsKKyNlbHNlCiAgICAgdm9pZCBqdW1wRnJvbVNwZWN1bGF0aXZlVG9Ob25TcGVjdWxh
dGl2ZShjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiwgY29uc3QgRW50cnlMb2NhdGlvbiYsIFNwZWN1
bGF0aW9uUmVjb3ZlcnkqLCBOb2RlVG9SZWdpc3Rlck1hcCYgY2hlY2tOb2RlVG9SZWdpc3Rlck1h
cCwgTm9kZVRvUmVnaXN0ZXJNYXAmIGVudHJ5Tm9kZVRvUmVnaXN0ZXJNYXApOwogICAgIHZvaWQg
bGlua1NwZWN1bGF0aW9uQ2hlY2tzKFNwZWN1bGF0aXZlSklUJiwgTm9uU3BlY3VsYXRpdmVKSVQm
KTsKKyNlbmRpZgogCiAgICAgLy8gVGhlIGdsb2JhbERhdGEsIHVzZWQgdG8gYWNjZXNzIGNvbnN0
YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsK
QEAgLTM4NiwxMiArMzkzLDEyIEBAIHByaXZhdGU6CiAgICAgfTsKICAgICAKICAgICBzdHJ1Y3Qg
SlNDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwg
c2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgdW5zaWdu
ZWQgZXhjZXB0aW9uSW5mbykKKyAgICAgICAgSlNDYWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENh
bGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgOiBtX2Zhc3RDYWxsKGZhc3RDYWxsKQog
ICAgICAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dDYWxsKQogICAgICAgICAgICAgLCBtX3Rhcmdl
dFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKICAgICAgICAgICAgICwgbV9pc0NhbGwoaXNDYWxsKQot
ICAgICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgICAg
ICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTM5OSw3ICs0MDYsNyBAQCBwcml2YXRlOgogICAgICAgICBDYWxsIG1fc2xvd0NhbGw7
CiAgICAgICAgIERhdGFMYWJlbFB0ciBtX3RhcmdldFRvQ2hlY2s7CiAgICAgICAgIGJvb2wgbV9p
c0NhbGw7Ci0gICAgICAgIHVuc2lnbmVkIG1fZXhjZXB0aW9uSW5mbzsKKyAgICAgICAgQ29kZU9y
aWdpbiBtX2NvZGVPcmlnaW47CiAgICAgfTsKIAogICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1Jl
Y29yZCwgND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDk0OTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgREZHTm9k
ZV9oCiAjZGVmaW5lIERGR05vZGVfaAogCi0vLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1h
dGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhz
LgorLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5j
bHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBocy4gU2V0IHRvIDEgZm9yIGJhc2ljIHZl
cmJvc2l0eSwgb3IgdG8gMiBmb3IgbW9yZSB2ZXJib3NpdHkuCiAjZGVmaW5lIERGR19ERUJVR19W
RVJCT1NFIDAKIC8vIEVuYWJsZSBnZW5lcmF0aW9uIG9mIGR5bmFtaWMgY2hlY2tzIGludG8gdGhl
IGluc3RydWN0aW9uIHN0cmVhbS4KICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC01MCw2ICs1MCw4
IEBACiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFIDAKIC8vIERpc2FibGUgdGhlIFNw
ZWN1bGF0aXZlSklUIHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmghCiAjZGVmaW5l
IERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNVTEFUSVZFIDAKKy8vIERpc2FibGUgdGhlIG5v
bi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1IgaW5zdGVhZC4KKyNkZWZpbmUgREZHX09TUiBF
TkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogLy8gR2VuZXJhdGUgc3RhdHMgb24gaG93IHN1Y2Nl
c3NmdWwgd2Ugd2VyZSBpbiBtYWtpbmcgdXNlIG9mIHRoZSBERkcgaml0LCBhbmQgcmVtYWluaW5n
IG9uIHRoZSBob3QgcGF0aC4KICNkZWZpbmUgREZHX1NVQ0NFU1NfU1RBVFMgMAogCkBAIC03Miw5
ICs3NCwzMiBAQCBDT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9CiB0eXBl
ZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0g
VUlOVF9NQVg7CiAKLS8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJvbSBhbiBleGNl
cHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9uLgorLy8gSW5mb3JtYXRpb24g
dXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2Ug
aW5mb3JtYXRpb24sCisvLyBhbmQgdG8gaW1wbGVtZW50IE9TUi4KIC8vIChQcmVzZW50bHkgaW1w
bGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCi10eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlv
bkluZm87CitjbGFzcyBDb2RlT3JpZ2luIHsKK3B1YmxpYzoKKyAgICBDb2RlT3JpZ2luKCkKKyAg
ICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1h
eCgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgQ29kZU9yaWdpbih1aW50MzJf
dCBieXRlY29kZUluZGV4KQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0K
KyAgICAKKyAgICB1aW50MzJfdCBieXRlY29kZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleDsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleDsKK307CiAKIC8v
IEVudHJpZXMgaW4gdGhlIE5vZGVUeXBlIGVudW0gKGJlbG93KSBhcmUgY29tcG9zZWQgb2YgYW4g
aWQsIGEgcmVzdWx0IHR5cGUgKHBvc3NpYmx5IG5vbmUpCiAvLyBhbmQgc29tZSBhZGRpdGlvbmFs
IGluZm9ybWF0aXZlIGZsYWdzIChtdXN0IGdlbmVyYXRlLCBpcyBjb25zdGFudCwgZXRjKS4KQEAg
LTM1Nyw5ICszODIsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJB
cmcgfTsKIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBu
byBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBl
eGNlcHRpb25JbmZvLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQy
ID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUg
b3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9k
ZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAg
ICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAg
ICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVy
KEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgIHsK
QEAgLTM3MCw5ICszOTUsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29uc3Ry
dWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4K
LSAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5m
byBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2Rl
LCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQog
ICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykK
KyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVn
aXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAg
ICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUpCkBAIC0zODQsOSArNDA5LDkgQEAgc3RydWN0
IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNo
aWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBF
eGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9k
ZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbklu
Zm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVh
bFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgw
KQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTM5OSw5ICs0MjQsOSBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgfQogICAgIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCBh
IHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCi0g
ICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbklu
Zm8sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgdW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWdu
ZWQgbnVtQ2hpbGRyZW4pCisgICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9wLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgdW5zaWduZWQgZmlyc3RD
aGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwg
ZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFs
dWUpCkBAIC02NDMsNiArNjY4LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgQVNTRVJUKCEo
b3AgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hp
bGQxOwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBk
byBhIGZhc3QgY2hlY2sgb24gdGhlIGZpcnN0IGNoaWxkCisgICAgLy8gYmVmb3JlIGFsc28gZG9p
bmcgYSBjaGVjayBvbiB0aGUgb3Bjb2RlLiBVc2UgdGhpcyB3aXRoIGNhcmUgYW5kCisgICAgLy8g
YXZvaWQgaXQgaWYgcG9zc2libGUuCisgICAgTm9kZUluZGV4IGNoaWxkMVVuY2hlY2tlZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOworICAgIH0KIAogICAg
IE5vZGVJbmRleCBjaGlsZDIoKQogICAgIHsKQEAgLTY3MSw3ICs3MDQsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRlc2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9k
ZS4KICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBVc2VkIHRvIGxvb2sgdXAgZXhjZXB0aW9uIGhh
bmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBp
bmRleCkuCi0gICAgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvOworICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2VzIHRvIHVwIHRvIDMgY2hpbGRyZW4gKDAgZm9y
IG5vIGNoaWxkKS4KICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gOTQ5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM0LDYgKzQzNCw5IEBAIHZvaWQgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2QKIAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hlY2tJdGVyYXRvciwgTm9k
ZSYgbm9kZSkKIHsKKyNpZiBERkdfT1NSCisgICAgVU5VU0VEX1BBUkFNKGNoZWNrSXRlcmF0b3Ip
OworI2Vsc2UKICAgICAvLyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGZyb20gdGhlIGNv
cnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gaW4gdGhlCiAgICAgLy8gc3BlY3VsYXRpdmUgcGF0aC4g
RG8gbm90IGNoZWNrIGZvciBOb2RlSW5kZXggMCwgc2luY2UgdGhpcyBpcyBjaGVja2VkCiAgICAg
Ly8gaW4gdGhlIG91dGVybW9zdCBjb21waWxlIGxheWVyLCBhdCB0aGUgaGVhZCBvZiB0aGUgbm9u
LXNwZWN1bGF0aXZlIHBhdGgKQEAgLTQ0Miw2ICs0NDUsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZl
SklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgLy8gYXMgc3BlY3VsYXRpb24gY2hlY2tzIGF0IHRo
aXMgaW5kZXgpLgogICAgIGlmIChtX2NvbXBpbGVJbmRleCAmJiBjaGVja0l0ZXJhdG9yLmhhc0No
ZWNrQXRJbmRleChtX2NvbXBpbGVJbmRleCkpCiAgICAgICAgIHRyYWNrRW50cnkobV9qaXQubGFi
ZWwoKSk7CisjZW5kaWYKIAogICAgIE5vZGVUeXBlIG9wID0gbm9kZS5vcDsKIApAQCAtMTI4Myw4
ICsxMjg3LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKIHZv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0
b3ImIGNoZWNrSXRlcmF0b3IpCiB7CiAgICAgLy8gQ2hlY2sgZm9yIHNwZWN1bGF0aW9uIGNoZWNr
cyBhZGRlZCBhdCBmdW5jdGlvbiBlbnRyeSAoY2hlY2tpbmcgYXJndW1lbnQgdHlwZXMpLgorI2lm
ICFERkdfT1NSCiAgICAgaWYgKGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGls
ZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAg
ICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9j
ayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gOTQ5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKIH0KIAor
I2lmICFERkdfT1NSCiBTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVy
eUluZGV4KQogICAgIDogbV9jaGVjayhjaGVjaykKICAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9j
b21waWxlSW5kZXgpCkBAIC0xNjgsNiArMTY5LDU4IEBAIFNwZWN1bGF0aW9uQ2hlY2s6OlNwZWN1
bGF0aW9uQ2hlY2soTWFjcm8KICAgICAgICAgICAgIG1fZnBySW5mb1tpdGVyLmluZGV4KCldLm5v
ZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CiB9CisjZW5kaWYKKworI2lmbmRlZiBOREVCVUcKK3Zv
aWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0KSBjb25zdAoreworICAgIGZwcmludGYob3V0
LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7Cit9CisKK3ZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVt
cChGSUxFKiBvdXQpCit7CisgICAgc3dpdGNoICh0ZWNobmlxdWUoKSkgeworICAgIGNhc2UgQWxy
ZWFkeUluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIi0iKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJbkdQUjoKKyAgICAgICAgZnByaW50ZihvdXQsICIlJSVzIiwgR1BS
SW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5GUFI6
CisgICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQUkluZm86OmRlYnVnTmFtZShmcHIoKSkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAg
ICAgICBmcHJpbnRmKG91dCwgIiolZCIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgZnByaW50ZihvdXQsICJbJXNdIiwgY29u
c3RhbnQoKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb250S25v
dzoKKyAgICAgICAgZnByaW50ZihvdXQsICIhIik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGZwcmludGYob3V0LCAiPyVkIiwgdGVjaG5pcXVlKCkpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIERGR19PU1IKK09TUkV4aXQ6Ok9TUkV4aXQo
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVk
IHJlY292ZXJ5SW5kZXgpCisgICAgOiBtX2NoZWNrKGNoZWNrKQorICAgICwgbV9ub2RlSW5kZXgo
aml0LT5tX2NvbXBpbGVJbmRleCkKKyAgICAsIG1fYnl0ZWNvZGVJbmRleChqaXQtPm1faml0Lmdy
YXBoKClbaml0LT5tX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpCisg
ICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGpp
dC0+bV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxl
cy5zaXplKCkpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IGpp
dC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX2FyZ3VtZW50c1thcmd1bWVudF0pOwor
ICAgIGZvciAodW5zaWduZWQgdmFyaWFibGUgPSAwOyB2YXJpYWJsZSA8IG1fdmFyaWFibGVzLnNp
emUoKTsgKyt2YXJpYWJsZSkKKyAgICAgICAgbV92YXJpYWJsZXNbdmFyaWFibGVdID0gaml0LT5j
b21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fdmFyaWFibGVzW3ZhcmlhYmxlXSk7Cit9Cisj
ZW5kaWYKIAogR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGVJbmRl
eCBub2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKIHsKQEAgLTY2OCw2ICs3MjEs
MTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIodmFsdWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5v
ZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICB9CisgICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5
IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBvZgorICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlh
YmxlIGZyb20gcmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmls
ZS4KKyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkg
PSBWYWx1ZVNvdXJjZSgpOworICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS5sb2NhbCgp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEzNjcsMTEgKzE0MjQsMTkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgfQotCisgICAgCiAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5tdXN0R2Vu
ZXJhdGUoKSkKICAgICAgICAgdXNlKG1fY29tcGlsZUluZGV4KTsKIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZS5v
cCA9PSBTZXRMb2NhbCk7CisgICAgCisgICAgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChub2RlLmNo
aWxkMSgpLCBub2RlLmxvY2FsKCkpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2RlLmxvY2Fs
KCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYgYmxvY2sp
CiB7CiAgICAgQVNTRVJUKG1fY29tcGlsZUluZGV4ID09IGJsb2NrLmJlZ2luKTsKQEAgLTEzNzks
MjkgKzE0NDQsNjYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgog
I2lmIERGR19KSVRfQlJFQUtfT05fRVZFUllfQkxPQ0sKICAgICBtX2ppdC5icmVha3BvaW50KCk7
CiAjZW5kaWYKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNp
emUoKTsgKytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwogCiAgICAgZm9yICg7IG1fY29tcGlsZUlu
ZGV4IDwgYmxvY2suZW5kOyArK21fY29tcGlsZUluZGV4KSB7CiAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XTsKLSAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQorICAgICAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkgewogI2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2RlIEAlZCBhdCBKSVQgb2Zm
c2V0IDB4JXggICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9k
ZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChpbnQpbV9jb21waWxlSW5k
ZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCksIG1faml0LmRlYnVnT2Zmc2V0KCkp
OworI2VuZGlmCisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRMb2NhbCkKKyAgICAgICAg
ICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0
IDB4JXggICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCgpLCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRpZgogI2lmIERGR19KSVRfQlJFQUtf
T05fRVZFUllfTk9ERQotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgICAgICAgICBt
X2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwot
ICAgICAgICBjb21waWxlKG5vZGUpOwotICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
ICAgICBjb21waWxlKG5vZGUpOworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKwogI2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAgICAgIGlm
IChub2RlLmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiAlc1xu
IiwgZGF0YUZvcm1hdFRvU3RyaW5nKG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0
ZXIoKV0ucmVnaXN0ZXJGb3JtYXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkgewor
ICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tu
b2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
Ii0+ICVzLCB2ciMlZCIsIGRhdGFGb3JtYXRUb1N0cmluZyhpbmZvLnJlZ2lzdGVyRm9ybWF0KCkp
LCAoaW50KW5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGlmIChpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgRlBSSW5mbzo6ZGVidWdO
YW1lKGluZm8uZnByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGlu
Zm8uZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICIgICAgIik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiAgICAiKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAorI2lmIERG
R19ERUJVR19WRVJCT1NFID49IDIgICAgICAgIAorICAgICAgICBmb3IgKGludCBvcGVyYW5kID0g
LW1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsg
b3BlcmFuZCA8IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsrb3BlcmFuZCkK
KyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJy
KTsKKyAgICAgICAgCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIDogIik7CisgICAgICAgIAor
ICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJpYWJsZXMu
c2l6ZSgpOyArK29wZXJhbmQpCisgICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihv
cGVyYW5kKS5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyAgICAgIAorI2lmIERGR19ERUJVR19WRVJC
T1NFICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogI2VuZGlmCi0gICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogfQogCkBAIC0x
NDUyLDYgKzE1NTQsMTE4IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIHJl
dHVybiB0cnVlOwogfQogCitWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFs
dWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCit7CisgICAgaWYg
KCF2YWx1ZVNvdXJjZS5pc1NldCgpKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxy
ZWFkeUluUmVnaXN0ZXJGaWxlKCk7CisKKyAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNv
dXJjZS5ub2RlSW5kZXgoKSkpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dChtX2ppdC52YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAg
IAorICAgIE5vZGUqIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5k
ZXgoKV07CisgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIC8v
IEl0J3MgbGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlz
IG5vZGUsIG9yIG9wZXJhbmQsCisgICAgICAgIC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQg
dG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KKyAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBHZW5l
cmF0aW9uSW5mbyogaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxS
ZWdpc3RlcigpXTsKKyAgICBpZiAoIWluZm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUlu
ZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHNl
ZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZh
bHVlIHdlIHdhbnQuCisgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6Cisg
ICAgICAgIC8vCisgICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVy
c2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUKKyAgICAgICAgLy8gICAg
dGhlbiBpdCBtZWFucyB0aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQg
aGF2ZSBwZXJmb3JtZWQgYQorICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24g
YW55d2F5LiBUaHVzLCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAgICAgICAv
LworICAgICAgICAvLyBWYWx1ZVRvSW50MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSByZW1haW5p
bmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAvLyAgICBWYWx1ZVRvSW50
MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50
MzIKKyAgICAgICAgLy8gICAgYW5kIGEgVmFsdWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28g
d2l0aCBWYWx1ZVRvTnVtYmVyIGJlY2F1c2UgaXQKKyAgICAgICAgLy8gICAgbWVhbnMgdGhhdCBz
b21lIHJlbWFpbmluZyB1c2VzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIG51bWJlciB3aGlsZQor
ICAgICAgICAvLyAgICBvdGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNp
b24gb2YgdGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKKyAgICAgICAgLy8gICAgdGhlbiB0
aGUgb25seSByZW1haW5pbmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3Jt
ZWQgbnVtYmVyCisgICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0
ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlz
IG5vZGUgY291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAvLyAgICBh
bHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFp
bmluZyB1c2VzIG9mCisgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRo
IGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgCisgICAgICAgIGJvb2wgZm91bmQgPSBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJl
cikgeworICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgp
OworICAgICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAg
ICAgICAgICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lz
dGVyKCldOworICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9k
ZUluZGV4KCkgPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRl
eCB2YWx1ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB1aW50
MzJUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJh
dGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwor
ICAgICAgICAgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldOworICAgICAgICAgICAgICAgIGlm
IChub2RlLmNoaWxkMVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUu
b3ApIHsKKyAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9O
dW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5v
ZGVJbmRleCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXhUb1VzZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQor
ICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OworICAg
ICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAg
ICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICBl
bHNlIGlmICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBu
b2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAg
ICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOworICAgICAgICAgICAg
ICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIo
KV07CisgICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+
bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOworICAgICAgICAgICAgICAgIGZvdW5kID0g
dHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFm
b3VuZCkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVm
aW5lZCgpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkpOworCisg
ICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAg
ICAgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkK
KyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7
CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5m
b1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7CisgICAgfQorICAgIGlmIChpbmZvUHRyLT5zcGlsbEZv
cm1hdCgpICE9IERhdGFGb3JtYXROb25lKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2Rl
UHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTQ5
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9zcmM7
CiB9OwogCisjaWYgIURGR19PU1IKIC8vID09PSBTcGVjdWxhdGlvbkNoZWNrID09PQogLy8KIC8v
IFRoaXMgc3RydWN0dXJlIHJlY29yZHMgYSBiYWlsLW91dCBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBw
YXRoLApAQCAtOTEsNyArOTIsMTkyIEBAIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrIHsKICAgICBS
ZWdpc3RlckluZm8gbV9mcHJJbmZvW0ZQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzXTsKIH07CiB0
eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxTcGVjdWxhdGlvbkNoZWNrLCAxNj4gU3BlY3VsYXRpb25D
aGVja1ZlY3RvcjsKKyNlbmRpZiAvLyAhREZHX09TUgogCitjbGFzcyBWYWx1ZVNvdXJjZSB7Citw
dWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAgICA6IG1fbm9kZUluZGV4KE5vTm9kZSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKE5vZGVJbmRleCBu
b2RlSW5kZXgpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4KQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9u
b2RlSW5kZXggIT0gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9kZUluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJu
IG1fbm9kZUluZGV4OworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1w
KEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgTm9kZUluZGV4
IG1fbm9kZUluZGV4OworfTsKKyAgICAKKy8vIERlc2NyaWJlcyBob3cgdG8gcmVjb3ZlciBhIGdp
dmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0ZXIgYXQgYSBnaXZlbgorLy8gY29kZSBwb2ludC4K
K2VudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CisgICAgLy8gSXQncyBhbHJlYWR5IGluIHRo
ZSByZWdpc3RlciBmaWxlIGF0IHRoZSByaWdodCBsb2NhdGlvbi4KKyAgICBBbHJlYWR5SW5SZWdp
c3RlckZpbGUsCisgICAgLy8gSXQncyBpbiBhIHJlZ2lzdGVyLgorICAgIEluR1BSLAorICAgIFVu
Ym94ZWRJbnQzMkluR1BSLAorICAgIEluRlBSLAorICAgIC8vIEl0J3MgaW4gdGhlIHJlZ2lzdGVy
IGZpbGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKyAgICBEaXNwbGFjZWRJblJlZ2lz
dGVyRmlsZSwKKyAgICAvLyBJdCdzIGEgY29uc3RhbnQuCisgICAgQ29uc3RhbnQsCisgICAgLy8g
RG9uJ3Qga25vdyBob3cgdG8gcmVjb3ZlciBpdC4KKyAgICBEb250S25vdworfTsKKworY2xhc3Mg
VmFsdWVSZWNvdmVyeSB7CitwdWJsaWM6CisgICAgVmFsdWVSZWNvdmVyeSgpCisgICAgICAgIDog
bV90ZWNobmlxdWUoRG9udEtub3cpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFs
dWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZpbGUoKQorICAgIHsKKyAgICAgICAgVmFsdWVS
ZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJl
Z2lzdGVyRmlsZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIFZhbHVlUmVjb3ZlcnkgaW5HUFIoR1BSUmVnIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwor
ICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgaWYgKGRhdGFGb3JtYXQgPT0g
RGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBVbmJv
eGVkSW50MzJJbkdQUjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5p
cXVlID0gSW5HUFI7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5ncHIgPSBncHI7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGlu
RlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5GUFI7CisgICAgICAgIHJlc3VsdC5tX3NvdXJj
ZS5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBWYWx1ZVJlY292ZXJ5IGRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKFZpcnR1YWxSZWdpc3Rl
ciB2aXJ0dWFsUmVnKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOworICAgICAg
ICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJlZyA9IHZpcnR1YWxSZWc7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGNvbnN0YW50
KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3Nv
dXJjZS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVl
KCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWU7IH0KKyAgICAKKyAgICBHUFJSZWcgZ3ByKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJbkdQUiB8fCBtX3Rl
Y2huaXF1ZSA9PSBVbmJveGVkSW50MzJJbkdQUik7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS5n
cHI7CisgICAgfQorICAgIAorICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKG1fdGVjaG5pcXVlID09IEluRlBSKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLmZw
cjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGUpOworICAgICAgICByZXR1cm4gbV9zb3VyY2UudmlydHVhbFJlZzsKKyAgICB9Cisg
ICAgCisgICAgSlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV90ZWNobmlxdWUgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2Rl
KG1fc291cmNlLmNvbnN0YW50KTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZv
aWQgZHVtcChGSUxFKiBvdXQpOworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIFZhbHVlUmVj
b3ZlcnlUZWNobmlxdWUgbV90ZWNobmlxdWU7CisgICAgdW5pb24geworICAgICAgICBHUFJSZWcg
Z3ByOworICAgICAgICBGUFJSZWcgZnByOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVh
bFJlZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7CisgICAgfSBtX3NvdXJjZTsK
K307CisKKyNpZiBERkdfT1NSCisvLyA9PT0gT1NSRXhpdCA9PT0KKy8vCisvLyBUaGlzIHN0cnVj
dHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0aXZlIHBhdGggYnkKKy8vIGdv
aW5nIGludG8gYmFzZWxpbmUgY29kZS4KK3N0cnVjdCBPU1JFeGl0IHsKKyAgICBPU1JFeGl0KE1h
Y3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5k
ZXggPSAwKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBtX2NoZWNrOworICAgIE5v
ZGVJbmRleCBtX25vZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CisgICAg
CisgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4OworICAgIAorICAgIC8vIENvbnZlbmllbnQg
d2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZhbHVlUmVjb3ZlcmllcyB3aGlsZSBiZWluZworICAgIC8v
IGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2ZXJzdXMgdmFyaWFibGUuCisgICAgaW50IG51bWJlck9m
UmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKSArIG1fdmFyaWFi
bGVzLnNpemUoKTsgfQorICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVjb3ZlcnkoaW50
IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4IDwgKGludCltX2FyZ3VtZW50
cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbaW5kZXhdOworICAgICAg
ICByZXR1cm4gbV92YXJpYWJsZXNbaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCldOworICAgIH0K
KyAgICBib29sIGlzQXJndW1lbnQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBpbmRleCA8IChp
bnQpbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgYm9vbCBpc1ZhcmlhYmxlKGludCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gIWlzQXJndW1lbnQoaW5kZXgpOyB9CisgICAgaW50IGFyZ3VtZW50Rm9y
SW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4OworICAg
IH0KKyAgICBpbnQgdmFyaWFibGVGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7CisgICAgfQorICAgIGludCBv
cGVyYW5kRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGluZGV4
IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gaW5kZXggLSBt
X2FyZ3VtZW50cy5zaXplKCkgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Cisg
ICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKKyAgICB9CisgICAgCisg
ICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxWYWx1
ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKK307
Cit0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCAxNj4gT1NSRXhpdFZlY3RvcjsKKyNl
bmRpZiAvLyBERkdfT1NSCiAKIC8vID09PSBTcGVjdWxhdGl2ZUpJVCA9PT0KIC8vCkBAIC0xMDUs
MjEgKzI5MSwyNSBAQCB0eXBlZGVmIFNlZ21lbnRlZFZlY3RvcjxTcGVjdWxhdGlvbkNoZWNrCiAv
LyBvbmx5IHNwZWN1bGF0aXZlbHkgYmVlbiBhc3NlcnRlZCkgdGhyb3VnaCB0aGUgZGF0YWZsb3cu
CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVCA6IHB1YmxpYyBKSVRDb2RlR2VuZXJhdG9yIHsKICAgICBm
cmllbmQgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2s7CisgICAgZnJpZW5kIHN0cnVjdCBPU1JFeGl0
OwogcHVibGljOgotICAgIFNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCi0gICAgICAg
IDogSklUQ29kZUdlbmVyYXRvcihqaXQsIHRydWUpCi0gICAgICAgICwgbV9jb21waWxlT2theSh0
cnVlKQotICAgIHsKLSAgICB9CisgICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImKTsKIAog
ICAgIGJvb2wgY29tcGlsZSgpOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgYmFpbC1v
dXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGgsCiAgICAgLy8gYW5kIGFkZGl0aW9uYWwgcmVj
b3ZlcnkgaW5mb3JtYXRpb24uCisjaWYgIURGR19PU1IKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVj
dG9yJiBzcGVjdWxhdGlvbkNoZWNrcygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zcGVjdWxh
dGlvbkNoZWNrczsKICAgICB9CisjZWxzZQorICAgIE9TUkV4aXRWZWN0b3ImIG9zckV4aXRzKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX29zckV4aXRzOworICAgIH0KKyNlbmRpZgogICAgIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkqIHNwZWN1bGF0aW9uUmVjb3Zlcnkoc2l6ZV90IGluZGV4KQogICAg
IHsKICAgICAgICAgLy8gU3BlY3VsYXRpb25DaGVjazo6bV9yZWNvdmVyeUluZGV4IGlzIG9mZnNl
dCBieSAxLApAQCAtMTM5LDYgKzMyOSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJ
VENvZGVHZW5lcmF0b3I7CiAgICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsKKyAgICB2b2lk
IGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwog
CiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKQEAgLTIwMyw3ICszOTQsMTEgQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJl
dHVybjsKKyNpZiAhREZHX09TUgogICAgICAgICBtX3NwZWN1bGF0aW9uQ2hlY2tzLmFwcGVuZChT
cGVjdWxhdGlvbkNoZWNrKGp1bXBUb0ZhaWwsIHRoaXMpKTsKKyNlbHNlCisgICAgICAgIG1fb3Ny
RXhpdHMuYXBwZW5kKE9TUkV4aXQoanVtcFRvRmFpbCwgdGhpcykpOworI2VuZGlmCiAgICAgfQog
ICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4K
ICAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCkBAIC0yMTEsNyArNDA2LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdC5hcHBlbmQocmVjb3Zlcnkp
OworI2lmICFERkdfT1NSCiAgICAgICAgIG1fc3BlY3VsYXRpb25DaGVja3MuYXBwZW5kKFNwZWN1
bGF0aW9uQ2hlY2soanVtcFRvRmFpbCwgdGhpcywgbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdC5z
aXplKCkpKTsKKyNlbHNlCisgICAgICAgIG1fb3NyRXhpdHMuYXBwZW5kKE9TUkV4aXQoanVtcFRv
RmFpbCwgdGhpcywgbV9zcGVjdWxhdGlvblJlY292ZXJ5TGlzdC5zaXplKCkpKTsKKyNlbmRpZgog
ICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIHdlIHN0YXRpY2FsbHkgZGV0ZXJtaW5lIHRoYXQg
YSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwuCkBAIC0yMjIsMTggKzQyMSw2NCBAQCBwcml2YXRlOgog
CiAgICAgdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CiAgICAgR1BSUmVnIGZpbGxTcGVjdWxhdGVJbnRJ
bnRlcm5hbChOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7Ci0KKyAgICAKICAg
ICAvLyBJdCBpcyBwb3NzaWJsZSwgZHVyaW5nIHNwZWN1bGF0aXZlIGdlbmVyYXRpb24sIHRvIHJl
YWNoIGEgc2l0dWF0aW9uIGluIHdoaWNoIHdlCiAgICAgLy8gY2FuIHN0YXRpY2FsbHkgZGV0ZXJt
aW5lIGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsIChmb3IgZXhhbXBsZSwgd2hlbiB0d28gbm9kZXMK
ICAgICAvLyB3aWxsIG1ha2UgY29uZmxpY3Rpbmcgc3BlY3VsYXRpb25zIGFib3V0IHRoZSBzYW1l
IG9wZXJhbmQpLiBJbiBzdWNoIGNhc2VzIHRoaXMKICAgICAvLyBmbGFnIGlzIGNsZWFyZWQsIGlu
ZGljYXRpbmcgbm8gZnVydGhlciBjb2RlIGdlbmVyYXRpb24gc2hvdWxkIHRha2UgcGxhY2UuCiAg
ICAgYm9vbCBtX2NvbXBpbGVPa2F5OworI2lmICFERkdfT1NSCiAgICAgLy8gVGhpcyB2ZWN0b3Ig
dHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBub24tc3Bl
Y3VsYXRpdmUgb25lLgogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3IgbV9zcGVjdWxhdGlvbkNo
ZWNrczsKKyNlbHNlCisgICAgLy8gVGhpcyB2ZWN0b3IgdHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRo
ZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBvbGQgSklULgorICAgIE9TUkV4aXRWZWN0b3IgbV9v
c3JFeGl0czsKKyNlbmRpZgogICAgIC8vIFNvbWUgYmFpbC1vdXRzIG5lZWQgdG8gcmVjb3JkIGFk
ZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVjb3JkaW5nIHNwZWNpZmljIHJlY292ZXJ5CiAgICAgLy8g
dG8gYmUgcGVyZm9ybWVkIChmb3IgZXhhbXBsZSwgb24gZGV0ZWN0ZWQgb3ZlcmZsb3cgZnJvbSBh
biBhZGQsIHdlIG1heSBuZWVkIHRvCiAgICAgLy8gcmV2ZXJzZSB0aGUgYWRkaXRpb24gaWYgYW4g
b3BlcmFuZCBpcyBiZWluZyBvdmVyd3JpdHRlbikuCiAgICAgVmVjdG9yPFNwZWN1bGF0aW9uUmVj
b3ZlcnksIDE2PiBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0OworICAgIAorICAgIC8vIFRyYWNr
aW5nIGZvciB3aGljaCBub2RlcyBhcmUgY3VycmVudGx5IGhvbGRpbmcgdGhlIHZhbHVlcyBvZiBh
cmd1bWVudHMgYW5kIGJ5dGVjb2RlCisgICAgLy8gb3BlcmFuZC1pbmRleGVkIHZhcmlhYmxlcy4K
KworICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFu
ZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChOb2RlSW5k
ZXggbm9kZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHZhbHVlU291cmNlUmVm
ZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGVJbmRleCk7CisgICAg
fQorICAgIAorICAgIC8vIENhbGwgdGhpcyB3aXRoIGNhcmUsIHNpbmNlIGl0IGJvdGggcmV0dXJu
cyBhIHJlZmVyZW5jZSBpbnRvIGFuIGFycmF5CisgICAgLy8gYW5kIHBvdGVudGlhbGx5IHJlc2l6
ZXMgdGhlIGFycmF5LiBTbyBpdCB3b3VsZCBub3QgYmUgcmlnaHQgdG8gY2FsbCB0aGlzCisgICAg
Ly8gdHdpY2UgYW5kIHRoZW4gcGVyZm9ybSBvcGVyYW5kcyBvbiBib3RoIHJlZmVyZW5jZXMsIHNp
bmNlIHRoZSBvbmUgZnJvbQorICAgIC8vIHRoZSBmaXJzdCBjYWxsIG1heSBubyBsb25nZXIgYmUg
dmFsaWQuCisgICAgVmFsdWVTb3VyY2UmIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChp
bnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5k
KSkgeworICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNp
emUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2FyZ3VtZW50c1thcmd1bWVudF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICgodW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgICAgICAg
ICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIG1fdmFyaWFibGVzW29wZXJhbmRdOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8VmFsdWVT
b3VyY2UsIDA+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV92YXJp
YWJsZXM7CisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CisgICAgCisgICAgVmFsdWVSZWNvdmVy
eSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOworCisgICAgVmFs
dWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1ZVNvdXJjZUZvck9wZXJh
bmQob3BlcmFuZCkpOworICAgIH0KIH07CiAKIApAQCAtNDUzLDExICs2OTgsMTcgQEAgcHJpdmF0
ZToKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCi0KIC8vID09PSBTcGVjdWxhdGlv
bkNoZWNrSW5kZXhJdGVyYXRvciA9PT0KIC8vCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhl
IG5vbi1zcGVjdWxhdGl2ZSBKSVQgdG8gY2hlY2sgd2hpY2gKIC8vIG5vZGVzIHJlcXVpcmUgZW50
cnkgcG9pbnRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGguCisjaWYgREZHX09TUgorLy8gVGhp
cyBiZWNvbWVzIGEgc3R1YiBpZiBPU1IgaXMgZW5hYmxlZC4KK2NsYXNzIFNwZWN1bGF0aW9uQ2hl
Y2tJbmRleEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVy
YXRvcigpIHsgfQorfTsKKyNlbHNlCiBjbGFzcyBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRv
ciB7CiBwdWJsaWM6CiAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IoU3BlY3VsYXRp
b25DaGVja1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3MpCkBAIC00ODMsNyArNzM0LDE2IEBAIHBy
aXZhdGU6CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9pdGVyOwogICAg
IFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3I6Okl0ZXJhdG9yIG1fZW5kOwogfTsKKyNlbmRpZgogCitp
bmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCisg
ICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKKyAgICAsIG1fY29tcGlsZU9rYXkodHJ1
ZSkKKyAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzKQor
ICAgICwgbV92YXJpYWJsZXMoaml0LmNvZGVCbG9jaygpLT5tX251bVZhcnMpCisgICAgLCBtX2xh
c3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCit7Cit9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Db21wYWN0SklUQ29kZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ29tcGFjdEpJVENvZGVNYXBfaAorI2RlZmluZSBDb21wYWN0SklUQ29k
ZU1hcF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CisvLyBHaXZlcyB5b3UgYSBjb21wcmVzc2VkIG1hcCBiZXR3ZWVuIGJldHdlZW4gYnl0ZWNvZGUg
aW5kaWNlcyBhbmQgbWFjaGluZSBjb2RlCisvLyBlbnRyeSBwb2ludHMuIFRoZSBjb21wcmVzc2lv
biBzaW1wbHkgdHJpZXMgdG8gdXNlIGVpdGhlciAxLCAyLCBvciA0IGJ5dGVzIGZvcgorLy8gYW55
IGdpdmVuIG9mZnNldC4gVGhlIGxhcmdlc3Qgb2Zmc2V0IHRoYXQgY2FuIGJlIHN0b3JlZCBpcyAy
XjMwLgorCisvLyBFeGFtcGxlIHVzZToKKy8vCisvLyBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rl
ciBlbmNvZGVyKG1hcCk7CisvLyBlbmNvZGVyLmFwcGVuZChhLCBiKTsKKy8vIGVuY29kZXIuYXBw
ZW5kKGMsIGQpOyAvLyBwcmVjb25kaXRpb25zOiBjID49IGEsIGQgPj0gYgorLy8gT3duUHRyPENv
bXBhY3RKSVRDb2RlTWFwPiBtYXAgPSBlbmNvZGVyLmZpbmlzaCgpOworLy8KKy8vIEF0IHNvbWUg
bGF0ZXIgdGltZToKKy8vCisvLyBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBkZWNv
ZGVkOworLy8gbWFwLT5kZWNvZGUoZGVjb2RlZCk7CisKK3N0cnVjdCBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQgeworICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCgpIHsgfQorICAgIAorICAg
IEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25l
ZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCkKKyAgICAgICAgLCBtX21hY2hpbmVDb2RlT2Zmc2V0KG1hY2hpbmVDb2RlT2Zmc2V0KQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVu
c2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgCisgICAgc3RhdGljIGlubGluZSB1bnNp
Z25lZCBnZXRCeXRlY29kZUluZGV4KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZykK
KyAgICB7CisgICAgICAgIHJldHVybiBtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXg7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0TWFjaGluZUNvZGVPZmZzZXQoQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1h
cHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgfQorfTsKKworY2xhc3MgQ29tcGFjdEpJ
VENvZGVNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIH5D
b21wYWN0SklUQ29kZU1hcCgpCisgICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisgICAgICAg
ICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVjb2RlKFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiByZXN1bHQpIGNvbnN0CisgICAgeworICAg
ICAgICB1bnNpZ25lZCBwcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAgICAgICB1bnNpZ25l
ZCBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAgCisgICAgICAgIHJlc3Vs
dC5yZXNpemUobV9udW1iZXJPZkVudHJpZXMpOworICAgICAgICB1bnNpZ25lZCBqID0gMDsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZFbnRyaWVzOyArK2kpIHsK
KyAgICAgICAgICAgIHByZXZpb3VzQnl0ZWNvZGVJbmRleCArPSBkZWNvZGVOdW1iZXIoaik7Cisg
ICAgICAgICAgICBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ICs9IGRlY29kZU51bWJlcihqKTsK
KyAgICAgICAgICAgIHJlc3VsdFtpXS5tX2J5dGVjb2RlSW5kZXggPSBwcmV2aW91c0J5dGVjb2Rl
SW5kZXg7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9tYWNoaW5lQ29kZU9mZnNldCA9IHByZXZp
b3VzTWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGogPT0gbV9z
aXplKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENvbXBhY3RKSVRDb2RlTWFwKHVpbnQ4
X3QqIGJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzKQorICAg
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgICwg
bV9zaXplKHNpemUpCisjZW5kaWYKKyAgICAgICAgLCBtX251bWJlck9mRW50cmllcyhudW1iZXJP
ZkVudHJpZXMpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgfQorICAg
IAorICAgIHVpbnQ4X3QgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9idWZmZXJbaW5kZXhdOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBkZWNvZGVOdW1iZXIodW5zaWduZWQmIGluZGV4KSBj
b25zdAorICAgIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBhdChpbmRleCsrKTsKKyAg
ICAgICAgaWYgKCEoaGVhZFZhbHVlICYgMTI4KSkKKyAgICAgICAgICAgIHJldHVybiBoZWFkVmFs
dWU7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDY0KSkKKyAgICAgICAgICAgIHJldHVybiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1ZSAmIH4xMjgpIDw8IDgpIHwgYXQoaW5kZXgr
Kyk7CisgICAgICAgIHVuc2lnbmVkIHNlY29uZCA9IGF0KGluZGV4KyspOworICAgICAgICB1bnNp
Z25lZCB0aGlyZCAgPSBhdChpbmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgZm91cnRoID0gYXQo
aW5kZXgrKyk7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1
ZSAmIH4oMTI4ICsgNjQpKSA8PCAyNCkgfCAoc2Vjb25kIDw8IDE2KSB8ICh0aGlyZCA8PCA4KSB8
IGZvdXJ0aDsKKyAgICB9CisgICAgCisgICAgdWludDhfdCogbV9idWZmZXI7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyNlbmRpZgorICAgIHVuc2lnbmVkIG1f
bnVtYmVyT2ZFbnRyaWVzOworICAgIAorcHVibGljOgorICAgIGNsYXNzIEVuY29kZXIgeworICAg
IHB1YmxpYzoKKyAgICAgICAgRW5jb2RlcigpOworICAgICAgICB+RW5jb2RlcigpOworICAgICAg
ICAKKyAgICAgICAgdm9pZCBlbnN1cmVDYXBhY2l0eUZvcih1bnNpZ25lZCBudW1iZXJPZkVudHJp
ZXNUb0FkZCk7CisgICAgICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIHVu
c2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAgICAgUGFzc093blB0cjxDb21wYWN0SklU
Q29kZU1hcD4gZmluaXNoKCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
YXBwZW5kQnl0ZSh1aW50OF90IHZhbHVlKTsKKyAgICAgICAgdm9pZCBlbmNvZGVOdW1iZXIodWlu
dDMyX3QgdmFsdWUpOworICAgIAorICAgICAgICB1aW50OF90KiBtX2J1ZmZlcjsKKyAgICAgICAg
dW5zaWduZWQgbV9zaXplOworICAgICAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OworICAgICAgICB1
bnNpZ25lZCBtX251bWJlck9mRW50cmllczsKKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG1f
cHJldmlvdXNCeXRlY29kZUluZGV4OworICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3VzTWFjaGlu
ZUNvZGVPZmZzZXQ7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRW5jb2Rl
cjsKK307CisKK2lubGluZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6RW5jb2RlcigpCisg
ICAgOiBtX2J1ZmZlcigwKQorICAgICwgbV9zaXplKDApCisgICAgLCBtX2NhcGFjaXR5KDApCisg
ICAgLCBtX251bWJlck9mRW50cmllcygwKQorICAgICwgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgo
MCkKKyAgICAsIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCgwKQoreworfQorCitpbmxpbmUg
Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6On5FbmNvZGVyKCkKK3sKKyAgICBpZiAobV9idWZm
ZXIpCisgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKK30KKyAgICAgICAgCitpbmxpbmUgdm9p
ZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgsIHVuc2lnbmVkIG1hY2hpbmVDb2RlT2Zmc2V0KQoreworICAgIEFTU0VSVChieXRlY29kZUlu
ZGV4ID49IG1fcHJldmlvdXNCeXRlY29kZUluZGV4KTsKKyAgICBBU1NFUlQobWFjaGluZUNvZGVP
ZmZzZXQgPj0gbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICBlbnN1cmVDYXBhY2l0
eUZvcigxKTsKKyAgICBlbmNvZGVOdW1iZXIoYnl0ZWNvZGVJbmRleCAtIG1fcHJldmlvdXNCeXRl
Y29kZUluZGV4KTsKKyAgICBlbmNvZGVOdW1iZXIobWFjaGluZUNvZGVPZmZzZXQgLSBtX3ByZXZp
b3VzTWFjaGluZUNvZGVPZmZzZXQpOworICAgIG1fcHJldmlvdXNCeXRlY29kZUluZGV4ID0gYnl0
ZWNvZGVJbmRleDsKKyAgICBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQgPSBtYWNoaW5lQ29k
ZU9mZnNldDsKKyAgICBtX251bWJlck9mRW50cmllcysrOworfQorCitpbmxpbmUgUGFzc093blB0
cjxDb21wYWN0SklUQ29kZU1hcD4gQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCgp
Cit7CisgICAgbV9jYXBhY2l0eSA9IG1fc2l6ZTsKKyAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOworICAgIE93blB0
cjxDb21wYWN0SklUQ29kZU1hcD4gcmVzdWx0ID0gYWRvcHRQdHIobmV3IENvbXBhY3RKSVRDb2Rl
TWFwKG1fYnVmZmVyLCBtX3NpemUsIG1fbnVtYmVyT2ZFbnRyaWVzKSk7CisgICAgbV9idWZmZXIg
PSAwOworICAgIG1fc2l6ZSA9IDA7CisgICAgbV9jYXBhY2l0eSA9IDA7CisgICAgbV9udW1iZXJP
ZkVudHJpZXMgPSAwOworICAgIG1fcHJldmlvdXNCeXRlY29kZUluZGV4ID0gMDsKKyAgICBtX3By
ZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQgPSAwOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgp
OworfQorICAgICAgICAKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjph
cHBlbmRCeXRlKHVpbnQ4X3QgdmFsdWUpCit7CisgICAgQVNTRVJUKG1fc2l6ZSArIDEgPD0gbV9j
YXBhY2l0eSk7CisgICAgbV9idWZmZXJbbV9zaXplKytdID0gdmFsdWU7Cit9CisgICAgCitpbmxp
bmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZW5jb2RlTnVtYmVyKHVpbnQzMl90
IHZhbHVlKQoreworICAgIEFTU0VSVChtX3NpemUgKyA0IDw9IG1fY2FwYWNpdHkpOworICAgIEFT
U0VSVCh2YWx1ZSA8ICgxIDw8IDMwKSk7CisgICAgaWYgKHZhbHVlIDw9IDEyNykgeworICAgICAg
ICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKTsKKyAgICAg
ICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZh
bHVlKTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlIDw9IDE2MzgzKSB7CisgICAgICAgIHVpbnQ4X3Qg
aGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gOCk7CisgICAgICAgIEFT
U0VSVCghKGhlYWRWYWx1ZSAmIDEyOCkpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiA2
NCkpOworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSB8IDEyOCk7CisgICAgICAgIGFwcGVu
ZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDI0KTsK
KyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7CisgICAgICAgIEFTU0VSVCghKGhl
YWRWYWx1ZSAmIDY0KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlIHwgMTI4IHwgNjQp
OworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDE2KSk7
CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gOCkpOwor
ICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKSk7CisgICAgfQor
fQorCitpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZW5zdXJlQ2FwYWNp
dHlGb3IodW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzVG9BZGQpCit7CisgICAgdW5zaWduZWQgY2Fw
YWNpdHlOZWVkZWQgPSBtX3NpemUgKyBudW1iZXJPZkVudHJpZXNUb0FkZCAqIDIgKiA0OworICAg
IGlmIChjYXBhY2l0eU5lZWRlZCA+IG1fY2FwYWNpdHkpIHsKKyAgICAgICAgbV9jYXBhY2l0eSA9
IGNhcGFjaXR5TmVlZGVkICogMjsKKyAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG1fY2FwYWNpdHkpKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29tcGFjdEpJVENvZGVNYXBfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gOTQ5MTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksMTEg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogCiAgICAgICAgIG1fbGFiZWxz
W21fYnl0ZWNvZGVPZmZzZXRdID0gbGFiZWwoKTsKIAorI2lmIEVOQUJMRShUSUVSRURfQ09NUElM
QVRJT04pCisgICAgICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAgICAgICAgbV9qaXRD
b2RlTWFwRW5jb2Rlci5hcHBlbmQobV9ieXRlY29kZU9mZnNldCwgZGlmZmVyZW5jZUJldHdlZW4o
bV9zdGFydE9mQ29kZSwgbGFiZWwoKSkpOworI2VuZGlmCisKICAgICAgICAgc3dpdGNoIChtX2lu
dGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSkgewog
ICAgICAgICBERUZJTkVfQklOQVJZX09QKG9wX2RlbF9ieV92YWwpCiAgICAgICAgIERFRklORV9C
SU5BUllfT1Aob3BfaW4pCkBAIC0zNzMsNyArMzc4LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogI2VuZGlmCiB9CiAKLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTGlu
a1Bhc3MoKQogewogICAgIHVuc2lnbmVkIGptcFRhYmxlQ291bnQgPSBtX2ptcFRhYmxlLnNpemUo
KTsKQEAgLTUwMiw2ICs1MDYsOCBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0
ciogZnVuCiB7CiAjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKICAgICBtX2NhbkJlT3B0
aW1pemVkID0gbV9jb2RlQmxvY2stPmNhbkNvbXBpbGVXaXRoREZHKCk7CisgICAgaWYgKG1fY2Fu
QmVPcHRpbWl6ZWQpCisgICAgICAgIG1fc3RhcnRPZkNvZGUgPSBsYWJlbCgpOwogI2VuZGlmCiAg
ICAgCiAgICAgLy8gSnVzdCBhZGQgYSBsaXR0bGUgYml0IG9mIHJhbmRvbW5lc3MgdG8gdGhlIGNv
ZGVnZW4KQEAgLTY0Miw2ICs2NDgsMTEgQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENv
ZGVQdHIqIGZ1bgogICAgICAgICBpbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IG1fY29kZUJsb2Nr
LT5zdHJ1Y3R1cmVTdHViSW5mbyhtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm9baV0ucHJvcGVy
dHlBY2Nlc3NJbmRleCkuY2FsbFJldHVybkxvY2F0aW9uOwogICAgIH0KIAorI2lmIEVOQUJMRShU
SUVSRURfQ09NUElMQVRJT04pCisgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgIG1f
Y29kZUJsb2NrLT5zZXRKSVRDb2RlTWFwKG1faml0Q29kZU1hcEVuY29kZXIuZmluaXNoKCkpOwor
I2VuZGlmCisKICAgICBpZiAobV9jb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2Rl
ICYmIGZ1bmN0aW9uRW50cnlBcml0eUNoZWNrKQogICAgICAgICAqZnVuY3Rpb25FbnRyeUFyaXR5
Q2hlY2sgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGFyaXR5Q2hlY2spOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNkZWZp
bmUgQVNTRVJUX0pJVF9PRkZTRVQoYWN0dWFsLCBleHBlY3RlZCkgQVNTRVJUX1dJVEhfTUVTU0FH
RShhY3R1YWwgPT0gZXhwZWN0ZWQsICJKSVQgT2Zmc2V0IFwiJXNcIiBzaG91bGQgYmUgJWQsIG5v
dCAlZC5cbiIsICNleHBlY3RlZCwgc3RhdGljX2Nhc3Q8aW50PihleHBlY3RlZCksIHN0YXRpY19j
YXN0PGludD4oYWN0dWFsKSk7CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJD
b21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
SlNJbnRlcmZhY2VKSVQuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKQEAgLTEwNTQsNiArMTA1NSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFU
SU9OKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CisgICAgICAgIExhYmVsIG1fc3Rh
cnRPZkNvZGU7CisgICAgICAgIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyIG1faml0Q29kZU1h
cEVuY29kZXI7CiAjZW5kaWYKICAgICB9IEpJVF9DTEFTU19BTElHTk1FTlQ7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNp
b24gOTQ5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNiArMTkyLDkgQEAgSlNHbG9iYWxEYXRhOjpKU0ds
b2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgcGFyc2VyKG5ldyBQYXJzZXIpCiAgICAgLCBp
bnRlcnByZXRlcigwKQogICAgICwgaGVhcCh0aGlzLCBoZWFwU2l6ZSkKKyNpZiBFTkFCTEUoVElF
UkVEX0NPTVBJTEFUSU9OKQorICAgICwgbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZm
ZXIoMCkKKyNlbmRpZgogICAgICwgZHluYW1pY0dsb2JhbE9iamVjdCgwKQogICAgICwgY2FjaGVk
VVRDT2Zmc2V0KHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCkpCiAgICAg
LCBtYXhSZWVudHJ5RGVwdGgodGhyZWFkU3RhY2tUeXBlID09IFRocmVhZFN0YWNrVHlwZVNtYWxs
ID8gTWF4U21hbGxUaHJlYWRSZWVudHJ5RGVwdGggOiBNYXhMYXJnZVRocmVhZFJlZW50cnlEZXB0
aCkKQEAgLTM1Nyw2ICszNjAsMTEgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICNp
ZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCiAgICAgZGVsZXRlIG1fcnRUcmFjZUxpc3Q7CiAjZW5k
aWYKKworI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG9zclNjcmF0Y2hCdWZmZXJzLnNpemUoKTsgKytpKQorICAgICAgICBmYXN0RnJl
ZShvc3JTY3JhdGNoQnVmZmVyc1tpXSk7CisjZW5kaWYKIH0KIAogUGFzc1JlZlB0cjxKU0dsb2Jh
bERhdGE+IEpTR2xvYmFsRGF0YTo6Y3JlYXRlQ29udGV4dEdyb3VwKFRocmVhZFN0YWNrVHlwZSB0
eXBlLCBIZWFwU2l6ZSBoZWFwU2l6ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiAr
MjM1LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgaW50NjRf
dCBkZWJ1Z0RhdGFCdWZmZXJbNjRdOwogI2VuZGlmCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxB
VElPTikKKyAgICAgICAgVmVjdG9yPGludDY0X3QqPiBvc3JTY3JhdGNoQnVmZmVyczsKKyAgICAg
ICAgc2l6ZV90IG51bWJlck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyOworICAgICAgICAK
KyAgICAgICAgaW50NjRfdCogb3NyU2NyYXRjaEJ1ZmZlckZvclNpemUodW5zaWduZWQgbnVtYmVy
T2ZTbG90cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFudW1iZXJPZlNsb3RzKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobnVt
YmVyT2ZTbG90cyA+IG51bWJlck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGEgTl4yIG1lbW9yeSB1c2FnZSBwYXRob2xv
Z3kgYnkgZW5zdXJpbmcKKyAgICAgICAgICAgICAgICAvLyB0aGF0IGF0IHdvcnN0LCB3ZSBnZXQg
YSBnZW9tZXRyaWMgc2VyaWVzLCBtZWFuaW5nIHRoYXQgdGhlCisgICAgICAgICAgICAgICAgLy8g
dG90YWwgbWVtb3J5IHVzYWdlIGlzIHNvbWV3aGVyZSBhcm91bmQKKyAgICAgICAgICAgICAgICAv
LyBtYXgoc2NyYXRjaCBidWZmZXIgc2l6ZSkgKiA0LgorICAgICAgICAgICAgICAgIG51bWJlck9m
U2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyID0gbnVtYmVyT2ZTbG90cyAqIDI7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgb3NyU2NyYXRjaEJ1ZmZlcnMuYXBwZW5kKHN0YXRp
Y19jYXN0PGludDY0X3QqPihmYXN0TWFsbG9jKHNpemVvZihpbnQ2NF90KSAqIG51bWJlck9mU2xv
dHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVyKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICByZXR1cm4gb3NyU2NyYXRjaEJ1ZmZlcnMubGFzdCgpOworICAgICAgICB9
CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hNYXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1
ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NEYXRhOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDk0OTExKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOSw3ICsxMTksNyBAQCBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShF
CiAjaWZuZGVmIE5ERUJVRwogY2hhciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKQogewotICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDMyOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6
ZSA9IDY0OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogCiAgICAgaWYgKCEq
dGhpcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDk0
OTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNv
cHkpCkBAIC05NTcsNyArOTU3LDcgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoRU5BQkxFX1RJ
RVJFRF9DT01QSUxBVElPTikKLSNkZWZpbmUgRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTiAwCisj
ZGVmaW5lIEVOQUJMRV9USUVSRURfQ09NUElMQVRJT04gMQogI2VuZGlmCiAKIC8qIEN1cnJlbnRs
eSBvbmx5IGltcGxlbWVudGVkIGZvciBKU1ZBTFVFNjQsIG9ubHkgdGVzdGVkIG9uIFBMQVRGT1JN
KE1BQykgKi8K
</data>
<flag name="commit-queue"
          id="103556"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106986</attachid>
            <date>2011-09-10 15:40:53 -0700</date>
            <delta_ts>2011-09-10 16:24:45 -0700</delta_ts>
            <desc>the patch - disable tiering, which the last patch accidentally enabled</desc>
            <filename>osr_patch_6.diff</filename>
            <type>text/plain</type>
            <size>90530</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5MTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMDkgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSBkb2Vzbid0IHRocm90dGxlIG9uIE1h
YwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0OTExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKIAkJMEZEM0M4MjcxNDExNUQ0
RjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdh
dG9yLmggKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQx
MTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKIAkJMEZEODJFMjExNDE3MkNFMzAw
MTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MkUxRTE0MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJp
bGl0aWVzLmNwcCAqLzsgfTsKKwkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RK
SVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY3NzEyQTZG
NzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0
MDAwNjkzMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjkyMTJBNkY5RTEwMDY0
RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLzsgfTsKIAkJMTQwNTY2QzQxMDdFQzI1NTAw
NURCQzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZh
bHVlV3JhcHBlci5jcHAgKi87IH07CkBAIC03ODksNiArNzkwLDcgQEAKIAkJMEZEM0M4MjQxNDEx
NUQyMjAwRkQ4MUNCIC8qIERGR1Byb3BhZ2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHUHJvcGFnYXRvci5oOyBwYXRoID0gZGZnL0RGR1Byb3BhZ2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdDYXBhYmlsaXRpZXMuY3BwOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdD
YXBhYmlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FwYWJp
bGl0aWVzLmg7IHBhdGggPSBkZmcvREZHQ2FwYWJpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wYWN0SklUQ29kZU1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxv
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE1NjgsNiArMTU3MCw3IEBACiAJCTE0MjlEOTJDMEVEMjJENzAw
MEI4OTYxOSAvKiBqaXQgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAorCQkJCTBGRDgyRTM3MTQxQUIxNDIwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oICov
LAogCQkJCUE3QjQ4REI2MEVFNzRDRkMwMERDQkRCNiAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmNw
cCAqLywKIAkJCQlBN0I0OERCNTBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFsbG9jYXRv
ci5oICovLAogCQkJCTg2REI2NDYzMEY5NUM2RkMwMEQ3RDkyMSAvKiBFeGVjdXRhYmxlQWxsb2Nh
dG9yRml4ZWRWTVBvb2wuY3BwICovLApAQCAtMjM4Miw2ICsyMzg1LDcgQEAKIAkJCQlCQzI1N0RF
ODBFMUY1MUM1MDAxNkI2QzkgLyogQXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQz
QjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAv
KiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQjMxQjkxNDA1NzdENzAw
REI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDkxMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmbmRlZiBDb2RlQmxvY2tfaAogI2RlZmluZSBDb2RlQmxv
Y2tfaAogCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJFdmFsQ29k
ZUNhY2hlLmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJKSVRDb2RlLmgi
CkBAIC0yOTgsNiArMjk5LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHVubGlu
a0luY29taW5nQ2FsbHMoKTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElP
TikKKyAgICAgICAgdm9pZCBzZXRKSVRDb2RlTWFwKFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVN
YXA+IGppdENvZGVNYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faml0Q29kZU1hcCA9IGpp
dENvZGVNYXA7CisgICAgICAgIH0KKyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXAqIGppdENvZGVN
YXAoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9qaXRDb2RlTWFwLmdldCgpOwor
ICAgICAgICB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKICAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQoSW5zdHJ1Y3Rpb24qIHJldHVybkFkZHJlc3MpCiAgICAgICAg
IHsKQEAgLTY1MSw2ICs2NjMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1faml0Q29kZVdpdGhBcml0eUNoZWNrOwogICAgICAgICBTZW50aW5lbExp
bmtlZExpc3Q8Q2FsbExpbmtJbmZvLCBCYXNpY1Jhd1NlbnRpbmVsTm9kZTxDYWxsTGlua0luZm8+
ID4gbV9pbmNvbWluZ0NhbGxzOwogI2VuZGlmCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElP
TikKKyAgICAgICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtX2ppdENvZGVNYXA7CisjZW5k
aWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxW
YWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKICNlbmRpZgpAQCAtNjY2LDcgKzY4MSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxl
OwogCi0gICAgICAgIE93blB0cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7IC8vIEZJWE1FIG1h
a2UgdGhpcyBkbyBzb21ldGhpbmcKKyAgICAgICAgT3duUHRyPENvZGVCbG9jaz4gbV9hbHRlcm5h
dGl2ZTsKIAogICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewogICAgICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsMTQg
KzM2NywxOCBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENvbnN0
YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudDEpLmFzSW50MzIoKSA9
PSAxKTsKICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudDEpOwogICAgIH0K
LQorICAgIAorICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5kZXgpOworICAgIH0KIAogICAgIC8vIFRo
ZXNlIG1ldGhvZHMgY3JlYXRlIGEgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBncmFwaC4gSWYgbm9k
ZXMgb2YgdGhpcyB0eXBlIGFyZQogICAgIC8vICdtdXN0R2VuZXJhdGUnIHRoZW4gdGhlIG5vZGUg
IHdpbGwgaW1wbGljaXRseSBiZSByZWYnZWQgdG8gZW5zdXJlIGdlbmVyYXRpb24uCiAgICAgTm9k
ZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAg
ICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGgu
c2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwg
Y2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9w
LCBjdXJyZW50Q29kZU9yaWdpbigpLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAg
ICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJl
c3VsdEluZGV4KTsKQEAgLTM4Myw3ICszODcsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBh
ZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8gaW5mbywgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9n
cmFwaC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudElu
ZGV4LCBpbmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CisgICAgICAgIG1fZ3JhcGguYXBw
ZW5kKE5vZGUob3AsIGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8sIGNoaWxkMSwgY2hpbGQyLCBj
aGlsZDMpKTsKIAogICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAg
ICAgbV9ncmFwaC5yZWYocmVzdWx0SW5kZXgpOwpAQCAtMzkyLDcgKzM5Niw3IEBAIHByaXZhdGU6
CiAgICAgTm9kZUluZGV4IGFkZFRvR3JhcGgoTm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJ
bmZvIGluZm8yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0g
Tm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUlu
ZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9n
cmFwaC5hcHBlbmQoTm9kZShvcCwgbV9jdXJyZW50SW5kZXgsIGluZm8xLCBpbmZvMiwgY2hpbGQx
LCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJy
ZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsK
IAogICAgICAgICBpZiAob3AgJiBOb2RlTXVzdEdlbmVyYXRlKQogICAgICAgICAgICAgbV9ncmFw
aC5yZWYocmVzdWx0SW5kZXgpOwpAQCAtNDAyLDcgKzQwNiw3IEBAIHByaXZhdGU6CiAgICAgTm9k
ZUluZGV4IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgT3BJbmZvIGlu
Zm8xLCBPcEluZm8gaW5mbzIpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXgg
PSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2Rl
KE5vZGU6OlZhckFyZywgb3AsIG1fY3VycmVudEluZGV4LCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2Vk
VmFyQXJncykpOworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKE5vZGU6OlZhckFyZywgb3As
IGN1cnJlbnRDb2RlT3JpZ2luKCksIGluZm8xLCBpbmZvMiwgbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuLnNpemUoKSAtIG1fbnVtUGFzc2VkVmFyQXJncywgbV9udW1QYXNzZWRWYXJBcmdzKSk7CiAg
ICAgICAgIAogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MgPSAwOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDk0OTExKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNywxNSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiBlbnVt
IENvbXBpbGVNb2RlIHsgQ29tcGlsZUZ1bmN0aW9uLCBDb21waWxlT3RoZXIgfTsKIGlubGluZSBi
b29sIGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgRXhl
Y1N0YXRlKiBjYWxsZWVBcmdzRXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpJVENvZGUmIGpp
dENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQogewor
ICAgIGlmIChmYWxzZSkgeworICAgICAgICBzd2l0Y2ggKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSkgeworICAgICAgICBjYXNlIDExMTc2Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBHcmFwaCBkZmcoY29kZUJsb2NrLT5tX251
bVBhcmFtZXRlcnMsIGNvZGVCbG9jay0+bV9udW1WYXJzKTsKICAgICBpZiAoIXBhcnNlKGRmZywg
Z2xvYmFsRGF0YSwgY29kZUJsb2NrKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R1BSSW5mby5oCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtYmVyT2ZSZWdpc3RlcnMgPSA5OwogCiAgICAgLy8g
VGhlc2UgcmVnaXN0ZXJzIG1hdGNoIHRoZSBvbGQgSklULgorICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgY2FjaGVkUmVzdWx0UmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVheDsKICAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIHRpbWVvdXRDaGVja1JlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjpyMTI7CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyBjYWxsRnJhbWVSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6
cjEzOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgdGFnVHlwZU51bWJlclJlZ2lzdGVyID0gWDg2
UmVnaXN0ZXJzOjpyMTQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVy
YXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
ZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDEyICsyNzQs
MTAgQEAgcHVibGljOgogICAgICAgICB1LmZwciA9IGZwcjsKICAgICB9CiAKLSNpZm5kZWYgTkRF
QlVHCiAgICAgYm9vbCBhbGl2ZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV91c2VDb3VudDsK
ICAgICB9Ci0jZW5kaWYKIAogcHJpdmF0ZToKICAgICAvLyBUaGUgaW5kZXggb2YgdGhlIG5vZGUg
d2hvc2UgcmVzdWx0IGlzIHN0b3JlZCBpbiB0aGlzIHZpcnR1YWwgcmVnaXN0ZXIuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTQ5MTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTIsMTMgKzUyLDEyIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28K
ICAgICBOb2RlVHlwZSBvcCA9IG5vZGUub3A7CiAKICAgICB1bnNpZ25lZCByZWZDb3VudCA9IG5v
ZGUucmVmQ291bnQoKTsKLSAgICBpZiAoIXJlZkNvdW50KSB7Ci0gICAgICAgIHByaW50ZigiJSA0
ZDpcdHNraXBwZWQgJXNcbiIsIChpbnQpbm9kZUluZGV4LCBvcE5hbWUob3ApKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBib29sIHNraXBwZWQgPSAhcmVmQ291bnQ7CiAgICAgYm9vbCBt
dXN0R2VuZXJhdGUgPSBub2RlLm11c3RHZW5lcmF0ZSgpOwotICAgIGlmIChtdXN0R2VuZXJhdGUp
CisgICAgaWYgKG11c3RHZW5lcmF0ZSkgeworICAgICAgICBBU1NFUlQocmVmQ291bnQpOwogICAg
ICAgICAtLXJlZkNvdW50OworICAgIH0KIAogICAgIC8vIEV4YW1wbGUvZXhwbGFuYXRpb24gb2Yg
ZGF0YWZsb3cgZHVtcCBvdXRwdXQKICAgICAvLwpAQCAtNzcsOCArNzYsOCBAQCB2b2lkIEdyYXBo
OjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgLy8gICAgICAgICAkIyAgIC0gdGhl
IGluZGV4IGluIHRoZSBDb2RlQmxvY2sgb2YgYSBjb25zdGFudCB7IGZvciBudW1lcmljIGNvbnN0
YW50cyB0aGUgdmFsdWUgaXMgZGlzcGxheWVkIHwgZm9yIGludGVnZXJzLCBpbiBib3RoIGRlY2lt
YWwgYW5kIGhleCB9LgogICAgIC8vICAgICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29k
ZUJsb2NrIG9mIGFuIGlkZW50aWZpZXIgeyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAo
KSwgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAg
ICAgIHZhciMgLSB0aGUgaW5kZXggb2YgYSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQg
YnkgR2V0R2xvYmFsVmFyL1B1dEdsb2JhbFZhciBvcGVyYXRpb25zLgotICAgIHByaW50ZigiJSA0
ZDpcdDwlYyV1OiIsIChpbnQpbm9kZUluZGV4LCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJl
ZkNvdW50KTsKLSAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkKKyAgICBwcmludGYoIiUgNGQ6JXM8
JWMldToiLCAoaW50KW5vZGVJbmRleCwgc2tpcHBlZCA/ICIgIHNraXBwZWQgICIgOiAiICAgICAg
ICAgICAiLCBtdXN0R2VuZXJhdGUgPyAnIScgOiAnICcsIHJlZkNvdW50KTsKKyAgICBpZiAobm9k
ZS5oYXNSZXN1bHQoKSAmJiAhc2tpcHBlZCkKICAgICAgICAgcHJpbnRmKCIldSIsIG5vZGUudmly
dHVhbFJlZ2lzdGVyKCkpOwogICAgIGVsc2UKICAgICAgICAgcHJpbnRmKCItIik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDk0OTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOCwxNyArMTExOCwxNyBAQCB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgbV9qaXQuYWRkUHRyKElt
bTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdp
c3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgCiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwotICAgIG1faml0Lm5vdGlmeUNh
bGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8p
OworICAgIG1faml0Lm5vdGlmeUNhbGwoZmFzdENhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxl
SW5kZXhdLmNvZGVPcmlnaW4pOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIAogICAg
IG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2pp
dC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2pp
dC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0LmFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNr
KHNsb3dDYWxsRnVuY3Rpb24sIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmln
aW4pOwogICAgIG1faml0Lm1vdmUoSW1tMzIobnVtQXJncyksIEdQUkluZm86OnJlZ1QxKTsKICAg
ICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAg
ICBtX2ppdC5ub3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5u
b3RpZnlDYWxsKG1faml0LmNhbGwoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpLCBtX2ppdC5ncmFw
aCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1f
aml0KTsKICAgICAKQEAgLTExMzYsNyArMTEzNiw3IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6
ZW1pdENhbGwoTm9kZSYgbm8KICAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsK
ICAgICAKLSAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0No
ZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8p
OworICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ss
IGlzQ2FsbCwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiB9CiAK
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6c3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBqdW1wVG9GYWlsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk0OTExKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw3
ICs5MDUsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbikKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGZ1bmN0aW9u
LCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICAgICAg
cmV0dXJuIG1faml0LmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIG1faml0
LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogICAgIH0KIAogICAgIHZvaWQg
YWRkQnJhbmNoKGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBqdW1wLCBCbG9ja0luZGV4IGRl
c3RpbmF0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAJKHJldmlzaW9uIDk0OTExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsMzQyIEBAIHZv
aWQgSklUQ29tcGlsZXI6OmZpbGxUb0pTKE5vZGVJbmRleCBub2QKICAgICBsb2FkUHRyKGFkZHJl
c3NGb3Iobm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSksIGdwcik7CiB9CiAKKyNpZiBERkdfT1NSCit2
b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4
aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZm
LgorICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOworCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0IGZvciBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJ
VCBvZmZzZXQgMHgleCAgICIsIChpbnQpZXhpdC5tX25vZGVJbmRleCwgZXhpdC5tX2J5dGVjb2Rl
SW5kZXgsIGRlYnVnT2Zmc2V0KCkpOworICAgIGV4aXQuZHVtcChzdGRlcnIpOworI2VuZGlmCisj
aWYgREZHX0pJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFCisgICAgYnJlYWtwb2ludCgp
OworI2VuZGlmCisgICAgCisjaWYgREZHX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRQorICAg
IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9u
RmFpbHVyZURlYnVnSW5mbzsKKyAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2Nr
OworICAgIGRlYnVnSW5mby0+ZGVidWdPZmZzZXQgPSBkZWJ1Z09mZnNldCgpOworICAgIAorICAg
IGRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0lu
Zm8pOworI2VuZGlmCisgICAgCisgICAgLy8gMikgUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVy
eS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAg
IHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBp
dCBoYXMgYWxyZWFkeSBtYWRlLgorICAgIAorICAgIEdQUlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZh
bGlkR1BSUmVnOworICAgIAorICAgIGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJl
Y292ZXJ5LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAg
ICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAg
ICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkp
OworICAgICAgICAgICAgYWxyZWFkeUJveGVkID0gcmVjb3ZlcnktPmRlc3QoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9u
Q2hlY2s6CisgICAgICAgICAgICB4b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyAzKSBGaWd1cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xv
dHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9yIGV2ZXJ5IEdQUi9GUFIKKyAgICAvLyAgICB3
aG9zZSBkZXN0aW5hdGlvbiBpcyBub3cgb2NjdXBpZWQgYnkgYSBERkcgdmlydHVhbCByZWdpc3Rl
ciwgYW5kIHdlIG5lZWQKKyAgICAvLyAgICBvbmUgZm9yIGV2ZXJ5IGRpc3BsYWNlZCB2aXJ0dWFs
IHJlZ2lzdGVyIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4KKyAgICAvLyAgICBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVycyBvZiB0aGVtLiBBbHNvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50
cywKKyAgICAvLyAgICBhbnkgdW5kZWZpbmVkIHNsb3RzLCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55
IHVuYm94ZWQgaW50cy4KKyAgICAgICAgICAgIAorICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnMoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tpXSA9IGZhbHNlOworCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAgIHVuc2lnbmVkIG51bWJl
ck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA9IDA7CisgICAgCisgICAgLy8gQm9vbGVhbnMg
Zm9yIGZhc3QgY2hlY2tzLiBXZSBleHBlY3QgdGhhdCBtb3N0IE9TUiBleGl0cyBkbyBub3QgaGF2
ZSB0byByZWJveAorICAgIC8vIEludDMycywgaGF2ZSBubyBGUFJzLCBhbmQgaGF2ZSBubyBjb25z
dGFudHMuIElmIHRoZXJlIGFyZSBjb25zdGFudHMsIHdlCisgICAgLy8gZXhwZWN0IG1vc3Qgb2Yg
dGhlbSB0byBiZSBqc1VuZGVmaW5lZCgpOyBpZiB0aGF0J3MgdHJ1ZSB0aGVuIHdlIGhhbmRsZSB0
aGF0CisgICAgLy8gc3BlY2lhbGx5IHRvIG1pbmltaXplIGNvZGUgc2l6ZSBhbmQgZXhlY3V0aW9u
IHRpbWUuCisgICAgYm9vbCBoYXZlVW5ib3hlZEludDMycyA9IGZhbHNlOworICAgIGJvb2wgaGF2
ZUZQUnMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVDb25zdGFudHMgPSBmYWxzZTsKKyAgICBib29s
IGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNw
bGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVh
bFJlZ2lzdGVycysrOworICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkgPj0gMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBt
aWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcK
KyAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5
IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBp
dCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCisgICAg
ICAgICAgICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1
YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5CisgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBw
ZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQorICAgICAgICAg
ICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3Ig
dGhlIGNhc2VzIGluCisgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92
YXJpYWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFi
bGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQ
UjoKKyAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAo
IXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAg
ICAgIGhhdmVGUFJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsK
KyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAg
ICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgaW50NjRfdCogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEo
KS0+b3NyU2NyYXRjaEJ1ZmZlckZvclNpemUobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMgKyAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzIDw9IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzID8gMCA6IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycykpOwor
CisgICAgLy8gRnJvbSBoZXJlIG9uLCB0aGUgY29kZSBhc3N1bWVzIHRoYXQgaXQgaXMgcHJvZml0
YWJsZSB0byBtYXhpbWl6ZSB0aGUgZGlzdGFuY2UKKyAgICAvLyBiZXR3ZWVuIHdoZW4gc29tZXRo
aW5nIGlzIGNvbXB1dGVkIGFuZCB3aGVuIGl0IGlzIHN0b3JlZC4KKyAgICAKKyAgICAvLyA0KSBQ
ZXJmb3JtIGFsbCByZWJveGluZyBvZiBpbnRlZ2Vycy4KKyAgICAKKyAgICBpZiAoaGF2ZVVuYm94
ZWRJbnQzMnMpIHsKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVt
YmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAg
IGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSA9PSBVbmJveGVkSW50MzJJbkdQUiAmJiByZWNvdmVy
eS5ncHIoKSAhPSBhbHJlYWR5Qm94ZWQpCisgICAgICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWNvdmVyeS5ncHIoKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gNSkgRHVtcCBhbGwgbm9uLXBvaXNvbmVkIEdQUnMuIEZvciBwb2lzb25l
ZCBHUFJzLCBzYXZlIHRoZW0gaW50byB0aGUgc2NyYXRjaCBzdG9yYWdlLgorICAgIC8vICAgIE5v
dGUgdGhhdCBHUFJzIGRvIG5vdCBoYXZlIGEgZmFzdCBjaGFuZ2UgKGxpa2UgaGF2ZUZQUnMpIGJl
Y2F1c2Ugd2UgZXhwZWN0IHRoYXQKKyAgICAvLyAgICBtb3N0IE9TUiBmYWlsdXJlIHBvaW50cyB3
aWxsIGhhdmUgYXQgbGVhc3Qgb25lIEdQUiB0aGF0IG5lZWRzIHRvIGJlIGR1bXBlZC4KKyAgICAK
KyAgICB1bnNpZ25lZCBzY3JhdGNoSW5kZXggPSAwOworICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCk7CisgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBJbkdQUjoK
KyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGlmIChleGl0Lmlz
VmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0LnZhcmlhYmxl
Rm9ySW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIo
KSwgc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBzdG9yZVB0cihyZWNvdmVyeS5ncHIoKSwgYWRkcmVzc0ZvcigoVmlydHVh
bFJlZ2lzdGVyKW9wZXJhbmQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gQXQg
dGhpcyBwb2ludCBhbGwgR1BScyBhcmUgYXZhaWxhYmxlIGZvciBzY3JhdGNoIHVzZS4KKyAgICAK
KyAgICBpZiAoaGF2ZUZQUnMpIHsKKyAgICAgICAgLy8gNikgQm94IGFsbCBkb3VibGVzIChyZWxp
ZXMgb24gdGhlcmUgYmVpbmcgbW9yZSBHUFJzIHRoYW4gRlBScykKKyAgICAgICAgCisgICAgICAg
IGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4
aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5p
cXVlKCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBG
UFJSZWcgZnByID0gcmVjb3ZlcnkuZnByKCk7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BS
SW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KGZwcikpOworICAgICAgICAgICAgYm94
RG91YmxlKGZwciwgZ3ByKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gNykgRHVt
cCBhbGwgZG91YmxlcyBpbnRvIHRoZSByZWdpc3RlciBmaWxlLCBvciB0byB0aGUgc2NyYXRjaCBz
dG9yYWdlIGlmCisgICAgICAgIC8vICAgIHRoZSBkZXN0aW5hdGlvbiB2aXJ0dWFsIHJlZ2lzdGVy
IGlzIHBvaXNvbmVkLgorICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNv
bnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsK
KyAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBJbkZQUikKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKEZQUkluZm86OnRvSW5kZXgocmVjb3ZlcnkuZnByKCkpKTsKKyAgICAgICAgICAgIGlm
IChleGl0LmlzVmFyaWFibGUoaW5kZXgpICYmIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tleGl0
LnZhcmlhYmxlRm9ySW5kZXgoaW5kZXgpXSkKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihncHIs
IHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgc3RvcmVQdHIoZ3ByLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
QVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7
CisgICAgCisgICAgLy8gOCkgUmVzaHVmZmxlIGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVycy4g
T3B0aW1pemUgZm9yIHRoZSBjYXNlIHRoYXQKKyAgICAvLyAgICB0aGUgbnVtYmVyIG9mIGRpc3Bs
YWNlZCB2aXJ0dWFsIHJlZ2lzdGVycyBpcyBub3QgbW9yZSB0aGFuIHRoZSBudW1iZXIKKyAgICAv
LyAgICBvZiBhdmFpbGFibGUgcGh5c2ljYWwgcmVnaXN0ZXJzLgorICAgIAorICAgIGlmIChudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAgICAgICAgaWYgKG51bWJlck9mRGlz
cGxhY2VkVmlydHVhbFJlZ2lzdGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycykgewor
ICAgICAgICAgICAgLy8gU28gZmFyIHRoaXMgYXBwZWFycyB0byBiZSB0aGUgY2FzZSB0aGF0IHRy
aWdnZXJzIGFsbCB0aGUgdGltZSwgYnV0CisgICAgICAgICAgICAvLyB0aGF0IGlzIGZhciBmcm9t
IGd1YXJhbnRlZWQuCisgICAgICAgIAorICAgICAgICAgICAgdW5zaWduZWQgZGlzcGxhY2VtZW50
SW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgICAgICBkaXNwbGFjZW1lbnRJbmRleCA9IDA7CisgICAgICAgICAgICBmb3IgKGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkg
eworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52
YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5p
cXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnRvUmVnaXN0ZXIoZGlz
cGxhY2VtZW50SW5kZXgrKyksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgdGhlIHNodWZmbGluZyBhbGdvcml0
aG0gdGhhdCB3ZSB1c2UKKyAgICAgICAgICAgIC8vIGZvciBzcGVjdWxhdGl2ZS0+bm9uLXNwZWN1
bGF0aXZlIGp1bXBzLCBpZiB3ZSBldmVyIGRpc2NvdmVyIHRoYXQKKyAgICAgICAgICAgIC8vIHNv
bWUgaG90IGNvZGUgd2l0aCBsb3RzIG9mIGxpdmUgdmFsdWVzIHRoYXQgZ2V0IGRpc3BsYWNlZCBh
bmQKKyAgICAgICAgICAgIC8vIHNwaWxsZWQgcmVhbGx5IGVuam95cyBmcmVxdWVudGx5IGZhaWxp
bmcgc3BlY3VsYXRpb24uCisgICAgICAgIAorICAgICAgICAgICAgLy8gRm9yIG5vdyB0aGlzIGNv
ZGUgaXMgZW5naW5lZXJlZCB0byBiZSBjb3JyZWN0IGJ1dCBwcm9iYWJseSBub3QKKyAgICAgICAg
ICAgIC8vIHN1cGVyLiBJbiBwYXJ0aWN1bGFyLCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBjYXNlcyB3
aGVyZSBmb3IgZXhhbXBsZQorICAgICAgICAgICAgLy8gdGhlIGRpc3BsYWNlbWVudHMgYXJlIGEg
cGVybXV0YXRpb24gb2YgdGhlIGRlc3RpbmF0aW9uIHZhbHVlcywgbGlrZQorICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIDEgLT4gMgorICAgICAgICAgICAgLy8gMiAtPiAxCisgICAgICAg
ICAgICAvLworICAgICAgICAgICAgLy8gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgc2ltcGx5IGxp
ZnRpbmcgYWxsIG9mIHRoZSB2aXJ0dWFsIHJlZ2lzdGVycworICAgICAgICAgICAgLy8gZnJvbSB0
aGVpciBvbGQgKERGRyBKSVQpIGxvY2F0aW9ucyBhbmQgZHJvcHBpbmcgdGhlbSBpbiBhIHNjcmF0
Y2gKKyAgICAgICAgICAgIC8vIGxvY2F0aW9uIGluIG1lbW9yeSwgYW5kIHRoZW4gdHJhbnNmZXJy
aW5nIGZyb20gdGhhdCBzY3JhdGNoIGxvY2F0aW9uCisgICAgICAgICAgICAvLyB0byB0aGVpciBu
ZXcgKG9sZCBKSVQpIGxvY2F0aW9ucy4KKyAgICAgICAgCisgICAgICAgICAgICBpbnQ2NF90KiBz
Y3JhdGNoQnVmZmVyID0gZ2xvYmFsRGF0YSgpLT5vc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZShudW1i
ZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBl
eGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIHN0
b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwor
ICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgICAgIHNjcmF0Y2hJbmRleCA9IG51bWJl
ck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXgg
PSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNv
dmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9
IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1Qw
LCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHNjcmF0Y2hJ
bmRleCA9PSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIG51bWJlck9mRGlzcGxh
Y2VkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gOSkg
RHVtcCBhbGwgcG9pc29uZWQgdmlydHVhbCByZWdpc3RlcnMuCisgICAgCisgICAgc2NyYXRjaElu
ZGV4ID0gMDsKKyAgICBpZiAobnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpIHsKKyAg
ICAgICAgZm9yIChpbnQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgKGlu
dClleGl0Lm1fdmFyaWFibGVzLnNpemUoKTsgKyt2aXJ0dWFsUmVnaXN0ZXIpIHsKKyAgICAgICAg
ICAgIGlmICghcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzW3ZpcnR1YWxSZWdpc3Rlcl0pCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbnN0IFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC5tX3ZhcmlhYmxlc1t2aXJ0dWFsUmVnaXN0ZXJd
OworICAgICAgICAgICAgc3dpdGNoIChyZWNvdmVyeS50ZWNobmlxdWUoKSkgeworICAgICAgICAg
ICAgY2FzZSBJbkdQUjoKKyAgICAgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAg
ICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgc3Rv
cmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcil2aXJ0dWFs
UmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKHNjcmF0Y2hJbmRleCA9PSBudW1iZXJPZlBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVycyk7CisgICAgCisgICAgLy8gMTApIER1bXAgYWxsIGNvbnN0
YW50cy4gT3B0aW1pemUgZm9yIFVuZGVmaW5lZCwgc2luY2UgdGhhdCdzIGEgY29uc3RhbnQgd2Ug
c2VlCisgICAgLy8gICAgIG9mdGVuLgorCisgICAgaWYgKGhhdmVDb25zdGFudHMpIHsKKyAgICAg
ICAgaWYgKGhhdmVVbmRlZmluZWQpCisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAK
KyAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVy
aWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292
ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBDb25zdGFudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdp
c3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShyZWNv
dmVyeS5jb25zdGFudCgpKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJh
bmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyAxMSkg
TG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJhdGlvbiBpbnRvIHJlZ1Qw
LgorICAgIAorICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQgIT0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSkKKyAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKChWaXJ0dWFsUmVn
aXN0ZXIpZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0
ZXIpOworICAgIAorICAgIC8vIDEyKSBGaXggY2FsbCBmcmFtZS4KKyAgICAKKyAgICBBU1NFUlQo
Y29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihjb2RlQmxvY2soKS0+YWx0ZXJu
YXRpdmUoKSksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilSZWdpc3RlckZpbGU6OkNvZGVC
bG9jaykpOworICAgIAorICAgIC8vIDEzKSBKdW1wIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYmFz
ZWxpbmUgSklUIGNvZGUuCisgICAgCisgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBw
aW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQsIEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleD4oZGVjb2RlZENvZGVNYXAu
YmVnaW4oKSwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7Cisg
ICAgCisgICAgQVNTRVJUKG1hcHBpbmcpOworICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2Rl
SW5kZXggPT0gZXhpdC5tX2J5dGVjb2RlSW5kZXgpOworICAgIAorICAgIHZvaWQqIGp1bXBUYXJn
ZXQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
Y29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCktPmdldEpJVENvZGUoKS5zdGFydCgpKSArIG1hcHBp
bmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgIAorICAgIEFTU0VSVChHUFJJbmZvOjpyZWdU
MSAhPSBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgCisgICAgbW92ZShUcnVz
dGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBHUFJJbmZvOjpyZWdUMSk7CisgICAganVtcChHUFJJbmZv
OjpyZWdUMSk7CisKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgIGZwcmludGYoc3RkZXJyLCAi
ICAgLT4gJXBcbiIsIGp1bXBUYXJnZXQpOworI2VuZGlmCit9CisKK3ZvaWQgSklUQ29tcGlsZXI6
OmxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYgc3BlY3VsYXRpdmUpCit7CisgICAgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZENvZGVNYXA7CisgICAgQVNTRVJUKGNv
ZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrKCktPmFsdGVy
bmF0aXZlKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCkpOworICAgIGNvZGVC
bG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5qaXRDb2RlTWFwKCktPmRlY29kZShkZWNvZGVkQ29kZU1h
cCk7CisgICAgCisgICAgT1NSRXhpdFZlY3Rvcjo6SXRlcmF0b3IgZXhpdHNJdGVyID0gc3BlY3Vs
YXRpdmUub3NyRXhpdHMoKS5iZWdpbigpOworICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4
aXRzRW5kID0gc3BlY3VsYXRpdmUub3NyRXhpdHMoKS5lbmQoKTsKKyAgICAKKyAgICB3aGlsZSAo
ZXhpdHNJdGVyICE9IGV4aXRzRW5kKSB7CisgICAgICAgIGNvbnN0IE9TUkV4aXQmIGV4aXQgPSAq
ZXhpdHNJdGVyOworICAgICAgICBleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGV4aXQsIHNwZWN1bGF0
aXZlLnNwZWN1bGF0aW9uUmVjb3ZlcnkoZXhpdC5tX3JlY292ZXJ5SW5kZXgpLCBkZWNvZGVkQ29k
ZU1hcCk7CisgICAgICAgICsrZXhpdHNJdGVyOworICAgIH0KK30KKyNlbHNlIC8vIERGR19PU1IK
IGNsYXNzIEdlbmVyYWxpemVkUmVnaXN0ZXIgewogcHVibGljOgogICAgIEdlbmVyYWxpemVkUmVn
aXN0ZXIoKSB7IH0KQEAgLTgwMyw2ICsxMTM5LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlua1Nw
ZWN1bGF0aW9uQ2hlY2tzKAogICAgIEFTU0VSVCghKGNoZWNrc0l0ZXIgIT0gY2hlY2tzRW5kKSk7
CiAgICAgQVNTRVJUKCEoZW50cmllc0l0ZXIgIT0gZW50cmllc0VuZCkpOwogfQorI2VuZGlmIC8v
IERGR19PU1IKIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKIHsKQEAgLTg0NCwx
MiArMTE4MSwxNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgLy8gdG8g
YWxsb3cgaXQgdG8gY2hlY2sgd2hpY2ggbm9kZXMgaW4gdGhlIGdyYXBoIG1heSBiYWlsIG91dCwg
YW5kIG1heSBuZWVkIHRvIHJlZW50ZXIgdGhlCiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBhdGgu
CiAgICAgaWYgKGNvbXBpbGVkU3BlY3VsYXRpdmUpIHsKKyNpZiBERkdfT1NSCisgICAgICAgIGxp
bmtPU1JFeGl0cyhzcGVjdWxhdGl2ZSk7CisjZWxzZQogICAgICAgICBTcGVjdWxhdGlvbkNoZWNr
SW5kZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9yKHNwZWN1bGF0aXZlLnNwZWN1bGF0aW9uQ2hlY2tz
KCkpOwogICAgICAgICBOb25TcGVjdWxhdGl2ZUpJVCBub25TcGVjdWxhdGl2ZSgqdGhpcyk7CiAg
ICAgICAgIG5vblNwZWN1bGF0aXZlLmNvbXBpbGUoY2hlY2tJdGVyYXRvcik7CiAKICAgICAgICAg
Ly8gTGluayB0aGUgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIGNv
cnJlc3BvbmRpbmcgZW50cnkgcG9pbnRzIGludG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAg
ICAgICAgIGxpbmtTcGVjdWxhdGlvbkNoZWNrcyhzcGVjdWxhdGl2ZSwgbm9uU3BlY3VsYXRpdmUp
OworI2VuZGlmCiAgICAgfSBlbHNlIHsKICNpZiBERkdfREVCVUdfVkVSQk9TRQogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CkBAIC04
NjIsOCArMTIwMywxMiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgICAg
IG1fbWV0aG9kR2V0cy5jbGVhcigpOwogICAgICAgICByZXdpbmRUb0xhYmVsKHNwZWN1bGF0aXZl
UGF0aEJlZ2luKTsKIAorI2lmIERGR19PU1IKKyAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4
SXRlcmF0b3IgY2hlY2tJdGVyYXRvcjsKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tW
ZWN0b3Igbm9DaGVja3M7CiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIGNo
ZWNrSXRlcmF0b3Iobm9DaGVja3MpOworI2VuZGlmCiAgICAgICAgIE5vblNwZWN1bGF0aXZlSklU
IG5vblNwZWN1bGF0aXZlKCp0aGlzKTsKICAgICAgICAgbm9uU3BlY3VsYXRpdmUuY29tcGlsZShj
aGVja0l0ZXJhdG9yKTsKICAgICB9CkBAIC05MTEsNyArMTI1Niw3IEBAIHZvaWQgSklUQ29tcGls
ZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChtX2NhbGxzW2ldLm1f
aGFuZGxlc0V4Y2VwdGlvbnMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXR1cm5BZGRy
ZXNzT2Zmc2V0ID0gbGlua0J1ZmZlci5yZXR1cm5BZGRyZXNzT2Zmc2V0KG1fY2FsbHNbaV0ubV9j
YWxsKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25JbmZvID0gbV9jYWxsc1tp
XS5tX2V4Y2VwdGlvbkluZm87CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhjZXB0aW9uSW5m
byA9IG1fY2FsbHNbaV0ubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1
cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbklu
Zm8pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ5MTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYg
KzUzLDcgQEAgY2xhc3MgU3BlY3VsYXRpb25SZWNvdmVyeTsKIAogc3RydWN0IEVudHJ5TG9jYXRp
b247CiBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKK3N0cnVjdCBPU1JFeGl0OwogCiAjaWZuZGVm
IE5ERUJVRwogdHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCkoRXhlY1N0YXRl
Kiwgdm9pZCopOwpAQCAtODIsMjEgKzgzLDIxIEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICB9
CiAKICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHdpdGggYW4gZXhjZXB0aW9uIGhhbmRs
ZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0
ciBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlv
bkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRp
b25DaGVjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICA6IG1fY2FsbChjYWxsKQog
ICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNlcHRpb25DaGVj
ayhleGNlcHRpb25DaGVjaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5m
bykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRs
ZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZv
ciBhIGNhbGwgdGhhdCBtYXkgY2F1c2UgZXhjZXB0aW9ucywgYnV0IHdoaWNoIGFyZSBoYW5kbGVk
CiAgICAgLy8gdGhyb3VnaCBzb21lIG1lY2hhbmlzbSBvdGhlciB0aGFuIHRoZSBpbi1saW5lIGV4
Y2VwdGlvbiBoYW5kbGVyLgotICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAg
ICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0
aW9uLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAg
ICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhj
ZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAg
LCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KQEAgLTEwNCw3ICsxMDUs
NyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxs
OwogICAgIEZ1bmN0aW9uUHRyIG1fZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bV9leGNlcHRpb25DaGVjazsKLSAgICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAg
ICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFuZGxlc0V4Y2VwdGlvbnM7
CiB9OwogCkBAIC0xOTIsOSArMTkzLDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIE5vdGlm
eSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2
b2lkIG5vdGlmeUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZv
aWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0g
ICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgRnVuY3Rpb25QdHIoKSwgZXhj
ZXB0aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIEZ1
bmN0aW9uUHRyKCksIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KQEAgLTIwNSwyMCAr
MjA2LDIwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJ
VCBjb2RlLCB3aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNpZ25lZCBleGNl
cHRpb25JbmZvKQorICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBG
dW5jdGlvblB0ciYgZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAg
ICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNo
ZWNrID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEo
KS0+ZXhjZXB0aW9uKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rp
b25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAg
ICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNl
cHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwog
ICAgIH0KICAgICAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEg
ZmFzdCBleGNlcHRpb24gY2hlY2sgdGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHpl
cm8uCi0gICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5j
dGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBl
bmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24s
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxs
ID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENh
bGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlv
bkluZm8pKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGws
IGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4g
ZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKQEAgLTMxMSw5ICszMTIsOSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fbWV0aG9kR2V0cy5hcHBlbmQoTWV0aG9kR2V0UmVjb3JkKHNsb3dDYWxsLCBzdHJ1
Y3RUb0NvbXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0RnVuY3Rpb24p
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBz
bG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25l
ZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwg
c2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogICAgIHsKLSAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxS
ZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlv
bkluZm8pKTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGws
IHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGNvZGVPcmlnaW4pKTsKICAgICB9CiAK
IHByaXZhdGU6CkBAIC0zMjYsOCArMzI3LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsTnVt
ZXJpY1RvRG91YmxlKE5vZGVJbmRleCwgRlBSUmVnLCBHUFJSZWcgdGVtcG9yYXJ5KTsKICAgICB2
b2lkIGZpbGxJbnQzMlRvSW50ZWdlcihOb2RlSW5kZXgsIEdQUlJlZyk7CiAgICAgdm9pZCBmaWxs
VG9KUyhOb2RlSW5kZXgsIEdQUlJlZyk7CisgICAgCisjaWYgREZHX09TUgorICAgIHZvaWQgZXhp
dFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSos
IFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCk7CisgICAg
dm9pZCBsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmKTsKKyNlbHNlCiAgICAgdm9pZCBqdW1w
RnJvbVNwZWN1bGF0aXZlVG9Ob25TcGVjdWxhdGl2ZShjb25zdCBTcGVjdWxhdGlvbkNoZWNrJiwg
Y29uc3QgRW50cnlMb2NhdGlvbiYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBOb2RlVG9SZWdpc3Rl
ck1hcCYgY2hlY2tOb2RlVG9SZWdpc3Rlck1hcCwgTm9kZVRvUmVnaXN0ZXJNYXAmIGVudHJ5Tm9k
ZVRvUmVnaXN0ZXJNYXApOwogICAgIHZvaWQgbGlua1NwZWN1bGF0aW9uQ2hlY2tzKFNwZWN1bGF0
aXZlSklUJiwgTm9uU3BlY3VsYXRpdmVKSVQmKTsKKyNlbmRpZgogCiAgICAgLy8gVGhlIGdsb2Jh
bERhdGEsIHVzZWQgdG8gYWNjZXNzIGNvbnN0YW50cyBzdWNoIGFzIHRoZSB2UHRycy4KICAgICBK
U0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKQEAgLTM4NiwxMiArMzkzLDEyIEBAIHByaXZhdGU6
CiAgICAgfTsKICAgICAKICAgICBzdHJ1Y3QgSlNDYWxsUmVjb3JkIHsKLSAgICAgICAgSlNDYWxs
UmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRU
b0NoZWNrLCBib29sIGlzQ2FsbCwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICAgICAgSlND
YWxsUmVjb3JkKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJn
ZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAg
ICAgOiBtX2Zhc3RDYWxsKGZhc3RDYWxsKQogICAgICAgICAgICAgLCBtX3Nsb3dDYWxsKHNsb3dD
YWxsKQogICAgICAgICAgICAgLCBtX3RhcmdldFRvQ2hlY2sodGFyZ2V0VG9DaGVjaykKICAgICAg
ICAgICAgICwgbV9pc0NhbGwoaXNDYWxsKQotICAgICAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8o
ZXhjZXB0aW9uSW5mbykKKyAgICAgICAgICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAg
ICAgICAgIHsKICAgICAgICAgfQogICAgICAgICAKQEAgLTM5OSw3ICs0MDYsNyBAQCBwcml2YXRl
OgogICAgICAgICBDYWxsIG1fc2xvd0NhbGw7CiAgICAgICAgIERhdGFMYWJlbFB0ciBtX3Rhcmdl
dFRvQ2hlY2s7CiAgICAgICAgIGJvb2wgbV9pc0NhbGw7Ci0gICAgICAgIHVuc2lnbmVkIG1fZXhj
ZXB0aW9uSW5mbzsKKyAgICAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgfTsKIAog
ICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk0OTExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKICNpZm5kZWYgREZHTm9kZV9oCiAjZGVmaW5lIERGR05vZGVfaAogCi0vLyBF
bWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcg
ZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgorLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5m
b3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93IGdy
YXBocy4gU2V0IHRvIDEgZm9yIGJhc2ljIHZlcmJvc2l0eSwgb3IgdG8gMiBmb3IgbW9yZSB2ZXJi
b3NpdHkuCiAjZGVmaW5lIERGR19ERUJVR19WRVJCT1NFIDAKIC8vIEVuYWJsZSBnZW5lcmF0aW9u
IG9mIGR5bmFtaWMgY2hlY2tzIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbS4KICNpZiAhQVNT
RVJUX0RJU0FCTEVECkBAIC01MCw2ICs1MCw4IEBACiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9E
SVNCQUxFIDAKIC8vIERpc2FibGUgdGhlIFNwZWN1bGF0aXZlSklUIHdpdGhvdXQgaGF2aW5nIHRv
IHRvdWNoIFBsYXRmb3JtLmghCiAjZGVmaW5lIERGR19ERUJVR19MT0NBTF9ESVNCQUxFX1NQRUNV
TEFUSVZFIDAKKy8vIERpc2FibGUgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgYW5kIHVzZSBPU1Ig
aW5zdGVhZC4KKyNkZWZpbmUgREZHX09TUiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogLy8g
R2VuZXJhdGUgc3RhdHMgb24gaG93IHN1Y2Nlc3NmdWwgd2Ugd2VyZSBpbiBtYWtpbmcgdXNlIG9m
IHRoZSBERkcgaml0LCBhbmQgcmVtYWluaW5nIG9uIHRoZSBob3QgcGF0aC4KICNkZWZpbmUgREZH
X1NVQ0NFU1NfU1RBVFMgMAogCkBAIC03Miw5ICs3NCwzMiBAQCBDT01QSUxFX0FTU0VSVChzaXpl
b2YoVmlydHVhbFJlZ2lzdGVyKSA9CiB0eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRp
YyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CiAKLS8vIEluZm9ybWF0aW9uIHVz
ZWQgdG8gbWFwIGJhY2sgZnJvbSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGlu
Zm9ybWF0aW9uLgorLy8gSW5mb3JtYXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2Vw
dGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2UgaW5mb3JtYXRpb24sCisvLyBhbmQgdG8gaW1wbGVt
ZW50IE9TUi4KIC8vIChQcmVzZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCku
Ci10eXBlZGVmIHVpbnQzMl90IEV4Y2VwdGlvbkluZm87CitjbGFzcyBDb2RlT3JpZ2luIHsKK3B1
YmxpYzoKKyAgICBDb2RlT3JpZ2luKCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZXhwbGljaXQgQ29kZU9yaWdpbih1aW50MzJfdCBieXRlY29kZUluZGV4KQorICAgICAgICA6IG1f
Ynl0ZWNvZGVJbmRleChieXRlY29kZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KKyAgICAKKyAgICB1aW50MzJfdCBieXRlY29kZUlu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fYnl0ZWNvZGVJbmRleDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHVpbnQzMl90
IG1fYnl0ZWNvZGVJbmRleDsKK307CiAKIC8vIEVudHJpZXMgaW4gdGhlIE5vZGVUeXBlIGVudW0g
KGJlbG93KSBhcmUgY29tcG9zZWQgb2YgYW4gaWQsIGEgcmVzdWx0IHR5cGUgKHBvc3NpYmx5IG5v
bmUpCiAvLyBhbmQgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aXZlIGZsYWdzIChtdXN0IGdlbmVy
YXRlLCBpcyBjb25zdGFudCwgZXRjKS4KQEAgLTM1Nyw5ICszODIsOSBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgZW51bSBWYXJBcmdUYWcgeyBWYXJBcmcgfTsKIAogICAgIC8vIENvbnN0cnVjdCBhIG5v
ZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuLCBubyBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShO
b2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBOb2RlSW5kZXggY2hpbGQx
ID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0g
Tm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTm9k
ZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRp
b25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQog
ICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAg
ICAgICwgbV9yZWZDb3VudCgwKQogICAgIHsKQEAgLTM3MCw5ICszOTUsOSBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRy
ZW4gYW5kIGFuIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRp
b25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUp
CisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1t
LCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBO
b2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4
Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmln
aW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikK
ICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tLm1fdmFsdWUp
CkBAIC0zODQsOSArNDA5LDkgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0
cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCB0d28gaW1tZWRpYXRlIHZhbHVl
cy4KLSAgICBOb2RlKE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9w
SW5mbyBpbW0xLCBPcEluZm8gaW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2Rl
KE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBPcEluZm8g
aW1tMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAg
LCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2Rl
T3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0
ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92
YWx1ZSkKQEAgLTM5OSw5ICs0MjQsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogICAgIAogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBjaGlsZHJlbiBh
bmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShWYXJBcmdUYWcsIE5vZGVUeXBlIG9w
LCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE9wSW5mbyBpbW0xLCBPcEluZm8gaW1tMiwg
dW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCisgICAgTm9kZShWYXJB
cmdUYWcsIE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBpbW0xLCBP
cEluZm8gaW1tMiwgdW5zaWduZWQgZmlyc3RDaGlsZCwgdW5zaWduZWQgbnVtQ2hpbGRyZW4pCiAg
ICAgICAgIDogb3Aob3ApCi0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQor
ICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdp
c3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAg
ICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC02NDMsNiArNjY4LDE0IEBAIHN0cnVj
dCBOb2RlIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAg
ICByZXR1cm4gY2hpbGRyZW4uZml4ZWQuY2hpbGQxOwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlz
IGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBkbyBhIGZhc3QgY2hlY2sgb24gdGhlIGZpcnN0IGNo
aWxkCisgICAgLy8gYmVmb3JlIGFsc28gZG9pbmcgYSBjaGVjayBvbiB0aGUgb3Bjb2RlLiBVc2Ug
dGhpcyB3aXRoIGNhcmUgYW5kCisgICAgLy8gYXZvaWQgaXQgaWYgcG9zc2libGUuCisgICAgTm9k
ZUluZGV4IGNoaWxkMVVuY2hlY2tlZCgpCisgICAgeworICAgICAgICByZXR1cm4gY2hpbGRyZW4u
Zml4ZWQuY2hpbGQxOworICAgIH0KIAogICAgIE5vZGVJbmRleCBjaGlsZDIoKQogICAgIHsKQEAg
LTY3MSw3ICs3MDQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgLy8gVGhpcyBlbnVtIHZhbHVlIGRl
c2NyaWJlcyB0aGUgdHlwZSBvZiB0aGUgbm9kZS4KICAgICBOb2RlVHlwZSBvcDsKICAgICAvLyBV
c2VkIHRvIGxvb2sgdXAgZXhjZXB0aW9uIGhhbmRsaW5nIGluZm9ybWF0aW9uIChjdXJyZW50bHkg
aW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCi0gICAgRXhjZXB0aW9uSW5mbyBleGNl
cHRpb25JbmZvOworICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbjsKICAgICAvLyBSZWZlcmVuY2Vz
IHRvIHVwIHRvIDMgY2hpbGRyZW4gKDAgZm9yIG5vIGNoaWxkKS4KICAgICB1bmlvbiB7CiAgICAg
ICAgIHN0cnVjdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vblNwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTQ5MTEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDM0LDYgKzQzNCw5IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcChOb2QK
IAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJ
dGVyYXRvciYgY2hlY2tJdGVyYXRvciwgTm9kZSYgbm9kZSkKIHsKKyNpZiBERkdfT1NSCisgICAg
VU5VU0VEX1BBUkFNKGNoZWNrSXRlcmF0b3IpOworI2Vsc2UKICAgICAvLyBDaGVjayBmb3Igc3Bl
Y3VsYXRpb24gY2hlY2tzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgaW5zdHJ1Y3Rpb24gaW4gdGhl
CiAgICAgLy8gc3BlY3VsYXRpdmUgcGF0aC4gRG8gbm90IGNoZWNrIGZvciBOb2RlSW5kZXggMCwg
c2luY2UgdGhpcyBpcyBjaGVja2VkCiAgICAgLy8gaW4gdGhlIG91dGVybW9zdCBjb21waWxlIGxh
eWVyLCBhdCB0aGUgaGVhZCBvZiB0aGUgbm9uLXNwZWN1bGF0aXZlIHBhdGgKQEAgLTQ0Miw2ICs0
NDUsNyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAgLy8g
YXMgc3BlY3VsYXRpb24gY2hlY2tzIGF0IHRoaXMgaW5kZXgpLgogICAgIGlmIChtX2NvbXBpbGVJ
bmRleCAmJiBjaGVja0l0ZXJhdG9yLmhhc0NoZWNrQXRJbmRleChtX2NvbXBpbGVJbmRleCkpCiAg
ICAgICAgIHRyYWNrRW50cnkobV9qaXQubGFiZWwoKSk7CisjZW5kaWYKIAogICAgIE5vZGVUeXBl
IG9wID0gbm9kZS5vcDsKIApAQCAtMTI4Myw4ICsxMjg3LDEwIEBAIHZvaWQgTm9uU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IpCiB7CiAgICAgLy8g
Q2hlY2sgZm9yIHNwZWN1bGF0aW9uIGNoZWNrcyBhZGRlZCBhdCBmdW5jdGlvbiBlbnRyeSAoY2hl
Y2tpbmcgYXJndW1lbnQgdHlwZXMpLgorI2lmICFERkdfT1NSCiAgICAgaWYgKGNoZWNrSXRlcmF0
b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeSht
X2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAg
ICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6
ZSgpOyArK21fYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTQ5MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYg
KzE0Miw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICBy
ZXR1cm4gSW52YWxpZEdQUlJlZzsKIH0KIAorI2lmICFERkdfT1NSCiBTcGVjdWxhdGlvbkNoZWNr
OjpTcGVjdWxhdGlvbkNoZWNrKE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2
ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogbV9jaGVjayhjaGVjaykK
ICAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCkBAIC0xNjgsNiArMTY5LDcz
IEBAIFNwZWN1bGF0aW9uQ2hlY2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm8KICAgICAgICAgICAg
IG1fZnBySW5mb1tpdGVyLmluZGV4KCldLm5vZGVJbmRleCA9IE5vTm9kZTsKICAgICB9CiB9Cisj
ZW5kaWYKKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoRklMRSogb3V0
KSBjb25zdAoreworICAgIGZwcmludGYob3V0LCAiTm9kZSglZCkiLCBtX25vZGVJbmRleCk7Cit9
CisKK3ZvaWQgVmFsdWVSZWNvdmVyeTo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7CisgICAgc3dp
dGNoICh0ZWNobmlxdWUoKSkgeworICAgIGNhc2UgQWxyZWFkeUluUmVnaXN0ZXJGaWxlOgorICAg
ICAgICBmcHJpbnRmKG91dCwgIi0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbkdQUjoK
KyAgICAgICAgZnByaW50ZihvdXQsICIlJSVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgIGZw
cmludGYob3V0LCAiaW50MzIoJSUlcykiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgZnByaW50ZihvdXQsICIlJSVz
IiwgRlBSSW5mbzo6ZGVidWdOYW1lKGZwcigpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgIGZwcmludGYob3V0LCAiKiVkIiwgdmly
dHVhbFJlZ2lzdGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbnN0YW50OgorICAg
ICAgICBmcHJpbnRmKG91dCwgIlslc10iLCBjb25zdGFudCgpLmRlc2NyaXB0aW9uKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIERvbnRLbm93OgorICAgICAgICBmcHJpbnRmKG91dCwgIiEi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZnByaW50ZihvdXQsICI/
JWQiLCB0ZWNobmlxdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKyNlbmRpZgorCisj
aWYgREZHX09TUgorT1NSRXhpdDo6T1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywg
U3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKKyAgICA6IG1fY2hl
Y2soY2hlY2spCisgICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQorICAgICwg
bV9ieXRlY29kZUluZGV4KGppdC0+bV9ieXRlY29kZUluZGV4Rm9yT1NSKQorICAgICwgbV9yZWNv
dmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCisgICAgLCBtX2FyZ3VtZW50cyhqaXQtPm1fYXJndW1l
bnRzLnNpemUoKSkKKyAgICAsIG1fdmFyaWFibGVzKGppdC0+bV92YXJpYWJsZXMuc2l6ZSgpKQor
ICAgICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCit7CisgICAgQVNT
RVJUKG1fYnl0ZWNvZGVJbmRleCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpOworICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fYXJndW1l
bnRzLnNpemUoKTsgKythcmd1bWVudCkKKyAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0g
aml0LT5jb21wdXRlVmFsdWVSZWNvdmVyeUZvcihqaXQtPm1fYXJndW1lbnRzW2FyZ3VtZW50XSk7
CisgICAgZm9yICh1bnNpZ25lZCB2YXJpYWJsZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMu
c2l6ZSgpOyArK3ZhcmlhYmxlKQorICAgICAgICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0gPSBqaXQt
PmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV92YXJpYWJsZXNbdmFyaWFibGVdKTsKK30K
KworI2lmbmRlZiBOREVCVUcKK3ZvaWQgT1NSRXhpdDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0Cit7
CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMu
c2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0uZHVtcChv
dXQpOworICAgIGZwcmludGYob3V0LCAiIDogIik7CisgICAgZm9yICh1bnNpZ25lZCB2YXJpYWJs
ZSA9IDA7IHZhcmlhYmxlIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZhcmlhYmxlKQorICAgICAg
ICBtX3ZhcmlhYmxlc1t2YXJpYWJsZV0uZHVtcChvdXQpOworfQorI2VuZGlmCisjZW5kaWYKIAog
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50KE5vZGVJbmRleCBub2RlSW5k
ZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCkKIHsKQEAgLTY0OCw2ICs3MTYsMzAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
U2V0TG9jYWw6IHsKKyAgICAgICAgLy8gU2V0TG9jYWwgZG91YmxlcyBhcyBhIGhpbnQgYXMgdG8g
d2hlcmUgYSBub2RlIHdpbGwgYmUgc3RvcmVkIGFuZAorICAgICAgICAvLyBhcyBhIHNwZWN1bGF0
aW9uIHBvaW50LiBTbyBiZWZvcmUgd2Ugc3BlY3VsYXRlIG1ha2Ugc3VyZSB0aGF0IHdlCisgICAg
ICAgIC8vIGtub3cgd2hlcmUgdGhlIGNoaWxkIG9mIHRoaXMgbm9kZSBuZWVkcyB0byBnbyBpbiB0
aGUgdmlydHVhbAorICAgICAgICAvLyByZWdpc3RlciBmaWxlLgorICAgICAgICBjb21waWxlTW92
SGludChub2RlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzIGZhciBhcyBPU1IgaXMgY29uY2Vy
bmVkLCB3ZSdyZSBvbiB0aGUgYnl0ZWNvZGUgaW5kZXggY29ycmVzcG9uZGluZworICAgICAgICAv
LyB0byB0aGUgKm5leHQqIGluc3RydWN0aW9uLCBzaW5jZSB3ZSd2ZSBhbHJlYWR5ICJleGVjdXRl
ZCIgdGhlCisgICAgICAgIC8vIFNldExvY2FsIGFuZCB3aGF0ZXZlciBvdGhlciBERkcgTm9kZXMg
YXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2FtZQorICAgICAgICAvLyBieXRlY29kZSBpbmRleCBh
cyB0aGUgU2V0TG9jYWwuCisgICAgICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPT0g
bm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIE5vZGUmIG5leHROb2Rl
ID0gbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleCsxXTsKKyAgICAgICAgCisgICAgICAgIC8v
IFRoaXMgYXNzZXJ0aW9uIHdpbGwgZmFpbCBpZiB3ZSBldmVyIGVtaXQgbXVsdGlwbGUgU2V0TG9j
YWwncyBmb3IKKyAgICAgICAgLy8gYSBzaW5nbGUgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uIFRoYXQn
cyB1bmxpa2VseSB0byBoYXBwZW4uIEJ1dCBpZgorICAgICAgICAvLyBpdCBkb2VzLCB0aGUgc29s
dXRpb24gaXMgdG8gdG8gaGF2ZSB0aGlzIHBlcmZvcm0gYSBzZWFyY2ggdW50aWwKKyAgICAgICAg
Ly8gaXQgZmluZHMgYSBOb2RlIHdpdGggYSBkaWZmZXJlbnQgYnl0ZWNvZGUgaW5kZXggZnJvbSB0
aGUgb25lIHdlJ3ZlCisgICAgICAgIC8vIGdvdCwgYW5kIHRvIGFic3RyYWN0bHkgZXhlY3V0ZSB0
aGUgU2V0TG9jYWwncyBhbG9uZyB0aGUgd2F5LiBPciwKKyAgICAgICAgLy8gYmV0dGVyIHlldCwg
aGFuZGxlIGFsbCBvZiB0aGUgU2V0TG9jYWwncyBhdCBvbmNlOiBhYnN0cmFjdCBpbnRlcnByZXQK
KyAgICAgICAgLy8gYWxsIG9mIHRoZW0sIHRoZW4gZW1pdCBjb2RlIGZvciBhbGwgb2YgdGhlbSwg
d2l0aCBPU1IgZXhpdGluZyB0bworICAgICAgICAvLyB0aGUgbmV4dCBub24tU2V0TG9jYWwgaW5z
dHJ1Y3Rpb24uCisgICAgICAgIEFTU0VSVChtX2J5dGVjb2RlSW5kZXhGb3JPU1IgIT0gbmV4dE5v
ZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCkpOworICAgICAgICBtX2J5dGVjb2RlSW5kZXhG
b3JPU1IgPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgCiAg
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0UHJl
ZGljdGlvbihub2RlLmxvY2FsKCkpOwogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJl
ZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIHZhbHVl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwpAQCAtNjY4LDYgKzc2MCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cih2
YWx1ZS5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAg
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC8vIEluZGljYXRlIHRoYXQgaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIHJldHJp
ZXZlIHRoZSB2YWx1ZSBvZgorICAgICAgICAvLyB0aGlzIGJ5dGVjb2RlIHZhcmlhYmxlIGZyb20g
cmVnaXN0ZXJzIG9yIG90aGVyIGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXIgZmlsZS4KKyAgICAg
ICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBWYWx1ZVNv
dXJjZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEzNjcsMTEgKzE0NjMsMTkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgfQotCisgICAgCiAgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgbm9kZS5t
dXN0R2VuZXJhdGUoKSkKICAgICAgICAgdXNlKG1fY29tcGlsZUluZGV4KTsKIH0KIAordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1vdkhpbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlQo
bm9kZS5vcCA9PSBTZXRMb2NhbCk7CisgICAgCisgICAgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChu
b2RlLmNoaWxkMSgpLCBub2RlLmxvY2FsKCkpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBub2Rl
LmxvY2FsKCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYg
YmxvY2spCiB7CiAgICAgQVNTRVJUKG1fY29tcGlsZUluZGV4ID09IGJsb2NrLmJlZ2luKTsKQEAg
LTEzNzksMjkgKzE0ODMsNjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Js
b2NrJgogI2lmIERGR19KSVRfQlJFQUtfT05fRVZFUllfQkxPQ0sKICAgICBtX2ppdC5icmVha3Bv
aW50KCk7CiAjZW5kaWYKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1l
bnRzLnNpemUoKTsgKytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAg
ICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIG1fbGFzdFNldE9wZXJh
bmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIG1fYnl0ZWNvZGVJbmRl
eEZvck9TUiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAogICAgIGZv
ciAoOyBtX2NvbXBpbGVJbmRleCA8IGJsb2NrLmVuZDsgKyttX2NvbXBpbGVJbmRleCkgewogICAg
ICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF07Ci0gICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KKyAg
ICAgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgoKTsKKyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKKyNpZiBERkdfREVC
VUdfVkVSQk9TRQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBz
a2lwcGluZyBOb2RlIEAlZCAoYmMjJXUpIGF0IEpJVCBvZmZzZXQgMHgleCAgICAgIiwgKGludClt
X2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVi
dWdPZmZzZXQoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IFNldExvY2Fs
KQorICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgCiAjaWYgREZHX0RFQlVHX1ZFUkJPU0UKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0IEpJVCBvZmZzZXQg
MHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOworICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUg
QCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwg
bm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CiAj
ZW5kaWYKICNpZiBERkdfSklUX0JSRUFLX09OX0VWRVJZX05PREUKLSAgICAgICAgbV9qaXQuYnJl
YWtwb2ludCgpOworICAgICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCi0gICAg
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgY29tcGlsZShub2RlKTsKLSAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgY29tcGlsZShub2RlKTsKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKICNpZiBERkdf
REVCVUdfVkVSQk9TRQotICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiLT4gJXNcbiIsIGRhdGFGb3JtYXRUb1N0cmluZyhtX2dlbmVyYXRp
b25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldLnJlZ2lzdGVyRm9ybWF0KCkpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgICAg
aWYgKG5vZGUuaGFzUmVzdWx0KCkpIHsKKyAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYg
aW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiAlcywgdnIjJWQiLCBkYXRhRm9ybWF0VG9TdHJp
bmcoaW5mby5yZWdpc3RlckZvcm1hdCgpKSwgKGludClub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsK
KyAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3JtYXRO
b25lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiLCAlcyIsIEZQUkluZm86OmRlYnVnTmFtZShpbmZvLmZwcigpKSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLCAl
cyIsIEdQUkluZm86OmRlYnVnTmFtZShpbmZvLmdwcigpKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgIik7CisjZW5kaWYKKyAg
ICAgICAgfQorICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRSA+PSAyICAgICAgICAKKyAg
ICAgICAgZm9yIChpbnQgb3BlcmFuZCA9IC1tX2FyZ3VtZW50cy5zaXplKCkgLSBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemU7IG9wZXJhbmQgPCAtUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplOyArK29wZXJhbmQpCisgICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7CisgICAgICAgIAorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiA6ICIpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgb3BlcmFuZCA9IDA7IG9w
ZXJhbmQgPCAoaW50KW1fdmFyaWFibGVzLnNpemUoKTsgKytvcGVyYW5kKQorICAgICAgICAgICAg
Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChzdGRlcnIpOworI2VuZGlmCisg
ICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRSAgCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
XG4iKTsKICNlbmRpZgotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIAorICAg
ICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgIH0KIH0KIApAQCAtMTQxMCw2ICsxNTUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1
bWVudFR5cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsKKyAgICBtX2J5dGVj
b2RlSW5kZXhGb3JPU1IgPSAwOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29kZUJs
b2NrKCktPm1fbnVtUGFyYW1ldGVyczsgKytpKSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSAoVmlydHVhbFJlZ2lzdGVyKShtX2ppdC5jb2RlQmxvY2soKS0+dGhp
c1JlZ2lzdGVyKCkgKyBpKTsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0g
bV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKHZpcnR1YWxSZWdpc3Rlcik7CkBAIC0xNDUyLDYg
KzE1OTYsMTE5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIHJldHVybiB0
cnVlOwogfQogCitWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCit7CisgICAgaWYgKCF2YWx1
ZVNvdXJjZS5pc1NldCgpKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUlu
UmVnaXN0ZXJGaWxlKCk7CisKKyAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5u
b2RlSW5kZXgoKSkpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2pp
dC52YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgIAorICAg
IE5vZGUqIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKV07
CisgICAgaWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIC8vIEl0J3Mg
bGVnaXRpbWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUs
IG9yIG9wZXJhbmQsCisgICAgICAgIC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFr
ZSB0aGUgR0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBHZW5lcmF0aW9u
SW5mbyogaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3Rl
cigpXTsKKyAgICBpZiAoIWluZm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkg
IT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0
aGVyZSBpcyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdl
IHdhbnQuCisgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6CisgICAgICAg
IC8vCisgICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBv
ZiB0aGUgdmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUKKyAgICAgICAgLy8gICAgdGhlbiBp
dCBtZWFucyB0aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2ZSBw
ZXJmb3JtZWQgYQorICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5
LiBUaHVzLCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAgICAgICAvLworICAg
ICAgICAvLyBWYWx1ZVRvSW50MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSByZW1haW5pbmcgbGl2
ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRo
ZW4gd2UgY2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50MzIKKyAg
ICAgICAgLy8gICAgYW5kIGEgVmFsdWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBW
YWx1ZVRvTnVtYmVyIGJlY2F1c2UgaXQKKyAgICAgICAgLy8gICAgbWVhbnMgdGhhdCBzb21lIHJl
bWFpbmluZyB1c2VzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIG51bWJlciB3aGlsZQorICAgICAg
ICAvLyAgICBvdGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCisgICAgICAgIC8v
CisgICAgICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2Yg
dGhlIHZhbHVlIGlzIGEgVUludDMyVG9OdW1iZXIKKyAgICAgICAgLy8gICAgdGhlbiB0aGUgb25s
eSByZW1haW5pbmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVt
YmVyCisgICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUg
Y291bGQgYmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAvLyAgICBhbHRlcm5h
dGl2ZSBpcyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1
c2VzIG9mCisgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUlu
dDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikgewor
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOworICAg
ICAgICAgICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgICAg
ICBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCld
OworICAgICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4
KCkgPT0gbm9kZUluZGV4KQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgTm9kZUluZGV4
IHZhbHVlVG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1
ZVRvSW50MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051
bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIHZpcnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbklu
Zm8uc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAg
ICAgICAgICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2ppdC5ncmFwaCgpW2luZm8ubm9kZUluZGV4KCldOworICAgICAgICAgICAgICAgIGlmIChub2Rl
LmNoaWxkMVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsK
KyAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAg
ICAgICAgICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
CisgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRl
eCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1Vz
ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAg
ICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OworICAgICAgICAg
ICAgZWxzZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAg
IG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlm
ICh1aW50MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlSW5k
ZXhUb1VzZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBub2Rl
UHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOworICAgICAgICAgICAgICAgIGlu
Zm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUlu
ZGV4KCkgPT0gbm9kZUluZGV4VG9Vc2UpOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkK
KyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgp
KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkpOworCisgICAgaWYg
KGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAg
aWYgKGluZm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7CisgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+
cmVnaXN0ZXJGb3JtYXQoKSk7CisgICAgfQorICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgp
ICE9IERhdGFGb3JtYXROb25lKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5SZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52
aXJ0dWFsUmVnaXN0ZXIoKSkpOworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5KCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwcml2
YXRlOgogICAgIEdQUlJlZyBtX3NyYzsKIH07CiAKKyNpZiAhREZHX09TUgogLy8gPT09IFNwZWN1
bGF0aW9uQ2hlY2sgPT09CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0
IGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTYgQEAgc3RydWN0IFNw
ZWN1bGF0aW9uQ2hlY2sgewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9u
Q2hlY2ssIDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFERkdfT1NSCiAK
K2NsYXNzIFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAg
IDogbV9ub2RlSW5kZXgoTm9Ob2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQg
VmFsdWVTb3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChu
b2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAgfQorICAgIAor
ICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
U2V0KCkpOworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorI2lmbmRl
ZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAor
cHJpdmF0ZToKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Cit9OworICAgIAorLy8gRGVzY3Jp
YmVzIGhvdyB0byByZWNvdmVyIGEgZ2l2ZW4gYnl0ZWNvZGUgdmlydHVhbCByZWdpc3RlciBhdCBh
IGdpdmVuCisvLyBjb2RlIHBvaW50LgorZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHsKKyAg
ICAvLyBJdCdzIGFscmVhZHkgaW4gdGhlIHJlZ2lzdGVyIGZpbGUgYXQgdGhlIHJpZ2h0IGxvY2F0
aW9uLgorICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIGEgcmVnaXN0
ZXIuCisgICAgSW5HUFIsCisgICAgVW5ib3hlZEludDMySW5HUFIsCisgICAgSW5GUFIsCisgICAg
Ly8gSXQncyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwgYnV0IGF0IGEgZGlmZmVyZW50IGxvY2F0aW9u
LgorICAgIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBjb25zdGFudC4K
KyAgICBDb25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVyIGl0LgorICAg
IERvbnRLbm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoKKyAgICBWYWx1
ZVJlY292ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAgICB7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZSgp
CisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
dGVjaG5pcXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3By
LCBEYXRhRm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoZGF0YUZvcm1h
dCAhPSBEYXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAg
ICAgICBpZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgIHJl
c3VsdC5tX3RlY2huaXF1ZSA9IFVuYm94ZWRJbnQzMkluR1BSOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291
cmNlLmdwciA9IGdwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5GUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIFZh
bHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkZQUjsK
KyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmZwciA9IGZwcjsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgZGlzcGxhY2VkSW5SZWdp
c3RlckZpbGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcpCisgICAgeworICAgICAgICBWYWx1
ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2Vk
SW5SZWdpc3RlckZpbGU7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmly
dHVhbFJlZzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFZhbHVlUmVjb3ZlcnkgY29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZh
bHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBDb25zdGFu
dDsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmNvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgVmFsdWVSZWNv
dmVyeVRlY2huaXF1ZSB0ZWNobmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZTsgfQor
ICAgIAorICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVj
aG5pcXVlID09IEluR1BSIHx8IG1fdGVjaG5pcXVlID09IFVuYm94ZWRJbnQzMkluR1BSKTsKKyAg
ICAgICAgcmV0dXJuIG1fc291cmNlLmdwcjsKKyAgICB9CisgICAgCisgICAgRlBSUmVnIGZwcigp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5GUFIpOworICAg
ICAgICByZXR1cm4gbV9zb3VyY2UuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgdmlydHVhbFJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2hu
aXF1ZSA9PSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJj
ZS52aXJ0dWFsUmVnOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAK
KyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYK
KyAgICAKK3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsK
KyAgICB1bmlvbiB7CisgICAgICAgIEdQUlJlZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7Cisg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnOworICAgICAgICBFbmNvZGVkSlNWYWx1
ZSBjb25zdGFudDsKKyAgICB9IG1fc291cmNlOworfTsKKworI2lmIERGR19PU1IKKy8vID09PSBP
U1JFeGl0ID09PQorLy8KKy8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0
aGUgc3BlY3VsYXRpdmUgcGF0aCBieQorLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgorc3Ry
dWN0IE9TUkV4aXQgeworICAgIE9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0
aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG1fY2hlY2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIHVu
c2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5k
ZXg7CisgICAgCisgICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFsdWVS
ZWNvdmVyaWVzIHdoaWxlIGJlaW5nCisgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZlcnN1
cyB2YXJpYWJsZS4KKyAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1cm4g
bV9hcmd1bWVudHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmFs
dWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeShpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBtX2FyZ3VtZW50c1tpbmRleF07CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleCAt
IG1fYXJndW1lbnRzLnNpemUoKV07CisgICAgfQorICAgIGJvb2wgaXNBcmd1bWVudChpbnQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAg
ICBib29sIGlzVmFyaWFibGUoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNBcmd1bWVudChp
bmRleCk7IH0KKyAgICBpbnQgYXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvckluZGV4
KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1l
bnRzLnNpemUoKTsKKyAgICB9CisgICAgaW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkK
KyAgICAgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1
bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1w
KEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVy
eSwgMD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFi
bGVzOworICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworfTsKK3R5cGVkZWYgU2VnbWVudGVkVmVj
dG9yPE9TUkV4aXQsIDE2PiBPU1JFeGl0VmVjdG9yOworI2VuZGlmIC8vIERGR19PU1IKIAogLy8g
PT09IFNwZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTEwNSwyMSArMjk1LDI1IEBAIHR5cGVkZWYg
U2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBi
ZWVuIGFzc2VydGVkKSB0aHJvdWdoIHRoZSBkYXRhZmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklU
IDogcHVibGljIEpJVENvZGVHZW5lcmF0b3IgewogICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRp
b25DaGVjazsKKyAgICBmcmllbmQgc3RydWN0IE9TUkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3Vs
YXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGpp
dCwgdHJ1ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAg
ICBTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAK
ICAgICAvLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRp
dmUgcGF0aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNp
ZiAhREZHX09TUgogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3ImIHNwZWN1bGF0aW9uQ2hlY2tz
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NwZWN1bGF0aW9uQ2hlY2tzOwogICAgIH0KKyNl
bHNlCisgICAgT1NSRXhpdFZlY3RvciYgb3NyRXhpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb3NyRXhpdHM7CisgICAgfQorI2VuZGlmCiAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogc3Bl
Y3VsYXRpb25SZWNvdmVyeShzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICAvLyBTcGVjdWxh
dGlvbkNoZWNrOjptX3JlY292ZXJ5SW5kZXggaXMgb2Zmc2V0IGJ5IDEsCkBAIC0xMzksNiArMzMz
LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKICAgICAK
ICAgICB2b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYp
OwogICAgIHZvaWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CiAKICAgICB2b2lkIGNoZWNrQXJndW1l
bnRUeXBlcygpOwpAQCAtMjAzLDcgKzM5OCwxMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOworI2lmICFERkdfT1NSCiAg
ICAgICAgIG1fc3BlY3VsYXRpb25DaGVja3MuYXBwZW5kKFNwZWN1bGF0aW9uQ2hlY2soanVtcFRv
RmFpbCwgdGhpcykpOworI2Vsc2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChq
dW1wVG9GYWlsLCB0aGlzKSk7CisjZW5kaWYKICAgICB9CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRp
b24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25D
aGVjayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJl
Y292ZXJ5JiByZWNvdmVyeSkKQEAgLTIxMSw3ICs0MTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3NwZWN1
bGF0aW9uUmVjb3ZlcnlMaXN0LmFwcGVuZChyZWNvdmVyeSk7CisjaWYgIURGR19PU1IKICAgICAg
ICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWls
LCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vsc2UKKyAgICAg
ICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0
aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQ2FsbGVk
IHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFp
bC4KQEAgLTIyMiwxOCArNDI1LDY1IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxib29sIHN0
cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0
YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKLQorICAgIAogICAgIC8vIEl0IGlzIHBvc3NpYmxlLCBk
dXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRpb24gaW4gd2hp
Y2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVjdWxhdGlvbiB3aWxs
IGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwogICAgIC8vIHdpbGwgbWFrZSBjb25m
bGljdGluZyBzcGVjdWxhdGlvbnMgYWJvdXQgdGhlIHNhbWUgb3BlcmFuZCkuIEluIHN1Y2ggY2Fz
ZXMgdGhpcwogICAgIC8vIGZsYWcgaXMgY2xlYXJlZCwgaW5kaWNhdGluZyBubyBmdXJ0aGVyIGNv
ZGUgZ2VuZXJhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4KICAgICBib29sIG1fY29tcGlsZU9rYXk7
CisjaWYgIURGR19PU1IKICAgICAvLyBUaGlzIHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20g
dGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAgU3Bl
Y3VsYXRpb25DaGVja1ZlY3RvciBtX3NwZWN1bGF0aW9uQ2hlY2tzOworI2Vsc2UKKyAgICAvLyBU
aGlzIHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8g
dGhlIG9sZCBKSVQuCisgICAgT1NSRXhpdFZlY3RvciBtX29zckV4aXRzOworI2VuZGlmCiAgICAg
Ly8gU29tZSBiYWlsLW91dHMgbmVlZCB0byByZWNvcmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBy
ZWNvcmRpbmcgc3BlY2lmaWMgcmVjb3ZlcnkKICAgICAvLyB0byBiZSBwZXJmb3JtZWQgKGZvciBl
eGFtcGxlLCBvbiBkZXRlY3RlZCBvdmVyZmxvdyBmcm9tIGFuIGFkZCwgd2UgbWF5IG5lZWQgdG8K
ICAgICAvLyByZXZlcnNlIHRoZSBhZGRpdGlvbiBpZiBhbiBvcGVyYW5kIGlzIGJlaW5nIG92ZXJ3
cml0dGVuKS4KICAgICBWZWN0b3I8U3BlY3VsYXRpb25SZWNvdmVyeSwgMTY+IG1fc3BlY3VsYXRp
b25SZWNvdmVyeUxpc3Q7CisgICAgCisgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNoIG5vZGVzIGFy
ZSBjdXJyZW50bHkgaG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQgYnl0ZWNvZGUK
KyAgICAvLyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFibGVzLgorCisgICAgVmFsdWVTb3VyY2UgdmFs
dWVTb3VyY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBvcGVy
YW5kKQorICAgIHsKKyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJh
bmQpID0gVmFsdWVTb3VyY2Uobm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0
aGlzIHdpdGggY2FyZSwgc2luY2UgaXQgYm90aCByZXR1cm5zIGEgcmVmZXJlbmNlIGludG8gYW4g
YXJyYXkKKyAgICAvLyBhbmQgcG90ZW50aWFsbHkgcmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdv
dWxkIG5vdCBiZSByaWdodCB0byBjYWxsIHRoaXMKKyAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJm
b3JtIG9wZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNlcywgc2luY2UgdGhlIG9uZSBmcm9tCisgICAg
Ly8gdGhlIGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICBWYWx1ZVNvdXJj
ZSYgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQg
YXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3Vt
ZW50XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5k
ID49IG1fdmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShv
cGVyYW5kICsgMSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFu
ZF07CisgICAgfQorICAgIAorICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7
CisgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0
U2V0T3BlcmFuZDsKKyAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CisgICAgCisg
ICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJj
ZSYpOworCisgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3Bl
cmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1
ZVNvdXJjZUZvck9wZXJhbmQob3BlcmFuZCkpOworICAgIH0KIH07CiAKIApAQCAtNDUzLDExICs3
MDMsMTcgQEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCi0KIC8v
ID09PSBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciA9PT0KIC8vCiAvLyBUaGlzIGNsYXNz
IGlzIHVzZWQgYnkgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgdG8gY2hlY2sgd2hpY2gKIC8vIG5v
ZGVzIHJlcXVpcmUgZW50cnkgcG9pbnRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGguCisjaWYg
REZHX09TUgorLy8gVGhpcyBiZWNvbWVzIGEgc3R1YiBpZiBPU1IgaXMgZW5hYmxlZC4KK2NsYXNz
IFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBTcGVjdWxhdGlv
bkNoZWNrSW5kZXhJdGVyYXRvcigpIHsgfQorfTsKKyNlbHNlCiBjbGFzcyBTcGVjdWxhdGlvbkNo
ZWNrSW5kZXhJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRl
cmF0b3IoU3BlY3VsYXRpb25DaGVja1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3MpCkBAIC00ODMs
NyArNzM5LDE3IEBAIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0
b3IgbV9pdGVyOwogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3I6Okl0ZXJhdG9yIG1fZW5kOwog
fTsKKyNlbmRpZgogCitpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENv
bXBpbGVyJiBqaXQpCisgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKKyAgICAsIG1f
Y29tcGlsZU9rYXkodHJ1ZSkKKyAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bV9u
dW1QYXJhbWV0ZXJzKQorICAgICwgbV92YXJpYWJsZXMoaml0LmNvZGVCbG9jaygpLT5tX251bVZh
cnMpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpCisgICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpKQoreworfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBhY3RKSVRDb2RlTWFw
X2gKKyNkZWZpbmUgQ29tcGFjdEpJVENvZGVNYXBfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gR2l2ZXMgeW91IGEgY29tcHJlc3NlZCBtYXAg
YmV0d2VlbiBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kIG1hY2hpbmUgY29kZQorLy8gZW50
cnkgcG9pbnRzLiBUaGUgY29tcHJlc3Npb24gc2ltcGx5IHRyaWVzIHRvIHVzZSBlaXRoZXIgMSwg
Miwgb3IgNCBieXRlcyBmb3IKKy8vIGFueSBnaXZlbiBvZmZzZXQuIFRoZSBsYXJnZXN0IG9mZnNl
dCB0aGF0IGNhbiBiZSBzdG9yZWQgaXMgMl4zMC4KKworLy8gRXhhbXBsZSB1c2U6CisvLworLy8g
Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgZW5jb2RlcihtYXApOworLy8gZW5jb2Rlci5hcHBl
bmQoYSwgYik7CisvLyBlbmNvZGVyLmFwcGVuZChjLCBkKTsgLy8gcHJlY29uZGl0aW9uczogYyA+
PSBhLCBkID49IGIKKy8vIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbWFwID0gZW5jb2Rlci5m
aW5pc2goKTsKKy8vCisvLyBBdCBzb21lIGxhdGVyIHRpbWU6CisvLworLy8gVmVjdG9yPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldD4gZGVjb2RlZDsKKy8vIG1hcC0+ZGVjb2RlKGRlY29kZWQpOwor
CitzdHJ1Y3QgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0IHsKKyAgICBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQoKSB7IH0KKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQodW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCisgICAgICAgIDog
bV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICwgbV9tYWNoaW5lQ29kZU9m
ZnNldChtYWNoaW5lQ29kZU9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAg
IAorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVJbmRleChCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFwcGluZy0+
bV9ieXRlY29kZUluZGV4OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVk
IGdldE1hY2hpbmVDb2RlT2Zmc2V0KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZykK
KyAgICB7CisgICAgICAgIHJldHVybiBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0OworICAg
IH0KK307CisKK2NsYXNzIENvbXBhY3RKSVRDb2RlTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB+Q29tcGFjdEpJVENvZGVNYXAoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fYnVmZmVyKQorICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGRlY29kZShWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYg
cmVzdWx0KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNCeXRlY29kZUlu
ZGV4ID0gMDsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7
CisgICAgICAgIAorICAgICAgICByZXN1bHQucmVzaXplKG1fbnVtYmVyT2ZFbnRyaWVzKTsKKyAg
ICAgICAgdW5zaWduZWQgaiA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X251bWJlck9mRW50cmllczsgKytpKSB7CisgICAgICAgICAgICBwcmV2aW91c0J5dGVjb2RlSW5k
ZXggKz0gZGVjb2RlTnVtYmVyKGopOworICAgICAgICAgICAgcHJldmlvdXNNYWNoaW5lQ29kZU9m
ZnNldCArPSBkZWNvZGVOdW1iZXIoaik7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9ieXRlY29k
ZUluZGV4ID0gcHJldmlvdXNCeXRlY29kZUluZGV4OworICAgICAgICAgICAgcmVzdWx0W2ldLm1f
bWFjaGluZUNvZGVPZmZzZXQgPSBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChqID09IG1fc2l6ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBDb21wYWN0SklUQ29kZU1hcCh1aW50OF90KiBidWZmZXIsIHVuc2lnbmVkIHNpemUsIHVuc2ln
bmVkIG51bWJlck9mRW50cmllcykKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgICAgICAsIG1fc2l6ZShzaXplKQorI2VuZGlmCisgICAgICAgICwg
bV9udW1iZXJPZkVudHJpZXMobnVtYmVyT2ZFbnRyaWVzKQorICAgIHsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKHNpemUpOworICAgIH0KKyAgICAKKyAgICB1aW50OF90IGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAg
cmV0dXJuIG1fYnVmZmVyW2luZGV4XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVjb2Rl
TnVtYmVyKHVuc2lnbmVkJiBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgaGVh
ZFZhbHVlID0gYXQoaW5kZXgrKyk7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDEyOCkpCisg
ICAgICAgICAgICByZXR1cm4gaGVhZFZhbHVlOworICAgICAgICBpZiAoIShoZWFkVmFsdWUgJiA2
NCkpCisgICAgICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWFkVmFsdWUg
JiB+MTI4KSA8PCA4KSB8IGF0KGluZGV4KyspOworICAgICAgICB1bnNpZ25lZCBzZWNvbmQgPSBh
dChpbmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgdGhpcmQgID0gYXQoaW5kZXgrKyk7CisgICAg
ICAgIHVuc2lnbmVkIGZvdXJ0aCA9IGF0KGluZGV4KyspOworICAgICAgICByZXR1cm4gKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihoZWFkVmFsdWUgJiB+KDEyOCArIDY0KSkgPDwgMjQpIHwgKHNlY29u
ZCA8PCAxNikgfCAodGhpcmQgPDwgOCkgfCBmb3VydGg7CisgICAgfQorICAgIAorICAgIHVpbnQ4
X3QqIG1fYnVmZmVyOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBtX3NpemU7
CisjZW5kaWYKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cmllczsKKyAgICAKK3B1YmxpYzoK
KyAgICBjbGFzcyBFbmNvZGVyIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW5jb2Rl
cik7CisgICAgcHVibGljOgorICAgICAgICBFbmNvZGVyKCk7CisgICAgICAgIH5FbmNvZGVyKCk7
CisgICAgICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJl
ck9mRW50cmllc1RvQWRkKTsKKyAgICAgICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpOworICAgICAgICBQYXNzT3duUHRyPENv
bXBhY3RKSVRDb2RlTWFwPiBmaW5pc2goKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdm9pZCBhcHBlbmRCeXRlKHVpbnQ4X3QgdmFsdWUpOworICAgICAgICB2b2lkIGVuY29kZU51
bWJlcih1aW50MzJfdCB2YWx1ZSk7CisgICAgCisgICAgICAgIHVpbnQ4X3QqIG1fYnVmZmVyOwor
ICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7Cisg
ICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzOworICAgICAgICAKKyAgICAgICAgdW5z
aWduZWQgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fcHJldmlv
dXNNYWNoaW5lQ29kZU9mZnNldDsKKyAgICB9OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBFbmNvZGVyOworfTsKKworaW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNv
ZGVyKCkKKyAgICA6IG1fYnVmZmVyKDApCisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fY2FwYWNp
dHkoMCkKKyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKDApCisgICAgLCBtX3ByZXZpb3VzQnl0ZWNv
ZGVJbmRleCgwKQorICAgICwgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KDApCit7Cit9CisK
K2lubGluZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIoKQoreworICAgIGlm
IChtX2J1ZmZlcikKKyAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworfQorICAgICAgICAKK2lu
bGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmQodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5
dGVjb2RlSW5kZXggPj0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtYWNo
aW5lQ29kZU9mZnNldCA+PSBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQpOworICAgIGVuc3Vy
ZUNhcGFjaXR5Rm9yKDEpOworICAgIGVuY29kZU51bWJlcihieXRlY29kZUluZGV4IC0gbV9wcmV2
aW91c0J5dGVjb2RlSW5kZXgpOworICAgIGVuY29kZU51bWJlcihtYWNoaW5lQ29kZU9mZnNldCAt
IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5k
ZXggPSBieXRlY29kZUluZGV4OworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IG1h
Y2hpbmVDb2RlT2Zmc2V0OworICAgIG1fbnVtYmVyT2ZFbnRyaWVzKys7Cit9CisKK2lubGluZSBQ
YXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6
ZmluaXNoKCkKK3sKKyAgICBtX2NhcGFjaXR5ID0gbV9zaXplOworICAgIG1fYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7Cisg
ICAgT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgQ29tcGFj
dEpJVENvZGVNYXAobV9idWZmZXIsIG1fc2l6ZSwgbV9udW1iZXJPZkVudHJpZXMpKTsKKyAgICBt
X2J1ZmZlciA9IDA7CisgICAgbV9zaXplID0gMDsKKyAgICBtX2NhcGFjaXR5ID0gMDsKKyAgICBt
X251bWJlck9mRW50cmllcyA9IDA7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOwor
ICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7CisgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVu
Y29kZXI6OmFwcGVuZEJ5dGUodWludDhfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXplICsg
MSA8PSBtX2NhcGFjaXR5KTsKKyAgICBtX2J1ZmZlclttX3NpemUrK10gPSB2YWx1ZTsKK30KKyAg
ICAKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIo
dWludDMyX3QgdmFsdWUpCit7CisgICAgQVNTRVJUKG1fc2l6ZSArIDQgPD0gbV9jYXBhY2l0eSk7
CisgICAgQVNTRVJUKHZhbHVlIDwgKDEgPDwgMzApKTsKKyAgICBpZiAodmFsdWUgPD0gMTI3KSB7
CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUp
OworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgYXBwZW5kQnl0
ZShoZWFkVmFsdWUpOworICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMTYzODMpIHsKKyAgICAgICAg
dWludDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KTsKKyAg
ICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRW
YWx1ZSAmIDY0KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlIHwgMTI4KTsKKyAgICAg
ICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUg
Pj4gMjQpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgQVNT
RVJUKCEoaGVhZFZhbHVlICYgNjQpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAx
MjggfCA2NCk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUg
Pj4gMTYpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+
PiA4KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsK
KyAgICB9Cit9CisKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1
cmVDYXBhY2l0eUZvcih1bnNpZ25lZCBudW1iZXJPZkVudHJpZXNUb0FkZCkKK3sKKyAgICB1bnNp
Z25lZCBjYXBhY2l0eU5lZWRlZCA9IG1fc2l6ZSArIG51bWJlck9mRW50cmllc1RvQWRkICogMiAq
IDQ7CisgICAgaWYgKGNhcGFjaXR5TmVlZGVkID4gbV9jYXBhY2l0eSkgeworICAgICAgICBtX2Nh
cGFjaXR5ID0gY2FwYWNpdHlOZWVkZWQgKiAyOworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOworICAgIH0K
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb21wYWN0SklUQ29kZU1hcF9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDkxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYg
KzIwOSwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAg
bV9sYWJlbHNbbV9ieXRlY29kZU9mZnNldF0gPSBsYWJlbCgpOwogCisjaWYgRU5BQkxFKFRJRVJF
RF9DT01QSUxBVElPTikKKyAgICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgICAg
ICBtX2ppdENvZGVNYXBFbmNvZGVyLmFwcGVuZChtX2J5dGVjb2RlT2Zmc2V0LCBkaWZmZXJlbmNl
QmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjZW5kaWYKKwogICAgICAgICBzd2l0
Y2ggKG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNv
ZGUpKSB7CiAgICAgICAgIERFRklORV9CSU5BUllfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAg
REVGSU5FX0JJTkFSWV9PUChvcF9pbikKQEAgLTM3Myw3ICszNzgsNiBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAjZW5kaWYKIH0KIAotCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVMaW5rUGFzcygpCiB7CiAgICAgdW5zaWduZWQgam1wVGFibGVDb3VudCA9IG1fam1wVGFi
bGUuc2l6ZSgpOwpAQCAtNTAyLDYgKzUwNiw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGls
ZShDb2RlUHRyKiBmdW4KIHsKICNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogICAgIG1f
Y2FuQmVPcHRpbWl6ZWQgPSBtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBp
ZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgbV9zdGFydE9mQ29kZSA9IGxhYmVsKCk7CiAj
ZW5kaWYKICAgICAKICAgICAvLyBKdXN0IGFkZCBhIGxpdHRsZSBiaXQgb2YgcmFuZG9tbmVzcyB0
byB0aGUgY29kZWdlbgpAQCAtNjQyLDYgKzY0OCwxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNv
bXBpbGUoQ29kZVB0ciogZnVuCiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbV9j
b2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mb1tp
XS5wcm9wZXJ0eUFjY2Vzc0luZGV4KS5jYWxsUmV0dXJuTG9jYXRpb247CiAgICAgfQogCisjaWYg
RU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAg
ICAgICAgbV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5p
c2goKSk7CisjZW5kaWYKKwogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5j
dGlvbkNvZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVu
dHJ5QXJpdHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0OTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBA
QAogI2RlZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lU
SF9NRVNTQUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBi
ZSAlZCwgbm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwg
c3RhdGljX2Nhc3Q8aW50PihhY3R1YWwpKTsKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNp
bmNsdWRlICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgpAQCAtMTA1NCw2
ICsxMDU1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKKyAgICAgICAgTGFi
ZWwgbV9zdGFydE9mQ29kZTsKKyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgbV9q
aXRDb2RlTWFwRW5jb2RlcjsKICNlbmRpZgogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CShyZXZpc2lvbiA5NDkxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw2ICsxOTIsOSBAQCBKU0dsb2JhbERh
dGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikK
ICAgICAsIGludGVycHJldGVyKDApCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBTaXplKQorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgLCBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2Ny
YXRjaEJ1ZmZlcigwKQorI2VuZGlmCiAgICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCiAgICAg
LCBjYWNoZWRVVENPZmZzZXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KSkKICAgICAsIG1heFJlZW50cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tU
eXBlU21hbGwgPyBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVl
bnRyeURlcHRoKQpAQCAtMzU3LDYgKzM2MCwxMSBAQCBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERh
dGEoKQogI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBkZWxldGUgbV9ydFRyYWNlTGlz
dDsKICNlbmRpZgorCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb3NyU2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAg
IGZhc3RGcmVlKG9zclNjcmF0Y2hCdWZmZXJzW2ldKTsKKyNlbmRpZgogfQogCiBQYXNzUmVmUHRy
PEpTR2xvYmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3Rh
Y2tUeXBlIHR5cGUsIEhlYXBTaXplIGhlYXBTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0OTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzNSw2ICsyMzUsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAg
ICBpbnQ2NF90IGRlYnVnRGF0YUJ1ZmZlcls2NF07CiAjZW5kaWYKKyNpZiBFTkFCTEUoVElFUkVE
X0NPTVBJTEFUSU9OKQorICAgICAgICBWZWN0b3I8aW50NjRfdCo+IG9zclNjcmF0Y2hCdWZmZXJz
OworICAgICAgICBzaXplX3QgbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXI7Cisg
ICAgICAgIAorICAgICAgICBpbnQ2NF90KiBvc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZSh1bnNpZ25l
ZCBudW1iZXJPZlNsb3RzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mU2xv
dHMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChudW1iZXJPZlNsb3RzID4gbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIp
IHsKKyAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgYSBOXjIgbWVtb3J5IHVzYWdl
IHBhdGhvbG9neSBieSBlbnN1cmluZworICAgICAgICAgICAgICAgIC8vIHRoYXQgYXQgd29yc3Qs
IHdlIGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICAgICAgICAg
ICAgICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAg
ICAgICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXplKSAqIDQuCisgICAgICAgICAgICAgICAg
bnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIgPSBudW1iZXJPZlNsb3RzICogMjsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvc3JTY3JhdGNoQnVmZmVycy5hcHBl
bmQoc3RhdGljX2Nhc3Q8aW50NjRfdCo+KGZhc3RNYWxsb2Moc2l6ZW9mKGludDY0X3QpICogbnVt
YmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBvc3JTY3JhdGNoQnVmZmVycy5sYXN0KCk7Cisg
ICAgICAgIH0KKyNlbmRpZgogI2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNz
KiwgT3BhcXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gOTQ5MTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJv
dG90eXBlKEUKICNpZm5kZWYgTkRFQlVHCiBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpCiB7
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMzI7CisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzaXplID0gNjQ7CiAgICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CiAKICAg
ICBpZiAoISp0aGlzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106987</attachid>
            <date>2011-09-10 16:24:45 -0700</date>
            <delta_ts>2011-09-10 16:35:08 -0700</delta_ts>
            <desc>the patch - fix conflict</desc>
            <filename>osr_patch_7.diff</filename>
            <type>text/plain</type>
            <size>91724</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBERkcgSklUIGNvbXBsZXRlbHkgdW5kb2VzIHNwZWN1bGF0aXZlIGNvbXBpbGF0
aW9uIGV2ZW4gaW4gdGhlIGNhc2Ugb2YKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3
IEBACiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIy
MDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBG
RDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07
CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgyRTM5MTQxQUIx
NEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBh
Y3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtNzg5LDYgKzc5
MCw3IEBACiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFF
MTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRjE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlD
OTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyog
SlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1NzAsNyBA
QAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyog
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5
MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTIzODIsNiAr
MjM4NSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4
MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQ29kZUJs
b2NrX2gKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFw
LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgi
CiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29kZU1hcChQYXNz
T3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAgICAgIENvbXBh
Y3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSU5U
RVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiBy
ZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1h
cD4gbV9qaXRDb2RlTWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CiAj
ZW5kaWYKQEAgLTY2Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1i
b2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2Fs
dGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAgICAgIE93blB0
cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsK
ICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5MTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1f
Y29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50
KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2Rl
T3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4
KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBp
dCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdl
bmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3Vy
ZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2Rl
SW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4
ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAg
bV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3LDcgQEAgcHJp
dmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0
SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVu
ZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM5
Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkK
ICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFw
aC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4
LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0
ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQwMiw3ICs0MDYs
NyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywg
Tm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAg
Tm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwg
aW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNz
ZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Tm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIs
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1f
bnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
ID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29t
cGlsZU90aGVyIH07CiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENv
ZGVXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgc3dpdGNoIChj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpIHsK
KyAgICAgICAgY2FzZSAxMTE3NjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAogICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgR3Jh
cGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7
CiAgICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVn
aXN0ZXJzID0gOTsKIAogICAgIC8vIFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4K
KyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0
ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9
IFg4NlJlZ2lzdGVyczo6cjEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVn
aXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ5MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NCwxMiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7
CiAgICAgfQogCi0jaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8g
VGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0
dWFsIHJlZ2lzdGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5v
ZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAg
dW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkg
ewotICAgICAgICBwcmludGYoIiUgNGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwg
b3BOYW1lKG9wKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0g
IXJlZkNvdW50OwogICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsK
LSAgICBpZiAobXVzdEdlbmVyYXRlKQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAg
QVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBF
eGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3
LDggKzc2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAg
IC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3Rh
bnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBp
bnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAg
LSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJs
b2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlz
cGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRo
ZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0
aW9ucy4KLSAgICBwcmludGYoIiUgNGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdl
bmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkp
CisgICAgcHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAi
ICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCBy
ZWZDb3VudCk7CisgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAg
IHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAg
IHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MjYsMTcgKzExMjYsMTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBu
bwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVy
OjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2so
c2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9u
SW5mbyk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxs
V2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21f
Y29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3Mp
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0
aW9uSW5mbyk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAg
ICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xMTQ0LDcgKzExNDQsNyBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmNvZGVPcmlnaW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9u
Q2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDkx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MDcsNyArOTA3LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhj
ZXB0aW9uSW5mbyk7CisgICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2lu
KTsKICAgICB9CiAKICAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNiArMTAwLDM0MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXgg
bm9kCiAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIp
OwogfQogCisjaWYgREZHX09TUgordm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQoreworICAg
IC8vIDEpIFByby1mb3JtYSBzdHVmZi4KKyAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKKwor
I2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3Ig
Tm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KWV4aXQubV9ub2Rl
SW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyAgICBleGl0LmR1
bXAoc3RkZXJyKTsKKyNlbmRpZgorI2lmIERGR19KSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJ
TFVSRQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19WRVJCT1NFX1NQ
RUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVn
SW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgZGVidWdJbmZvLT5j
b2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1Z0luZm8tPmRlYnVnT2Zmc2V0ID0gZGVi
dWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1
bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZv
cm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBh
biBvcGVyYXRpb24KKyAgICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlm
eWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJS
ZWcgYWxyZWFkeUJveGVkID0gSW52YWxpZEdQUlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3Zlcnkp
IHsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3Bl
Y3VsYXRpdmVBZGQ6CisgICAgICAgICAgICBzdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5
LT5kZXN0KCkpOworICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292
ZXJ5LT5kZXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgeG9yUHRyKFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgRmlndXJlIG91
dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVy
eSBHUFIvRlBSCisgICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5
IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBl
dmVyeSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisg
ICAgLy8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYg
dGhlcmUgYXJlIGFueSBjb25zdGFudHMsCisgICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywg
YW55IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCisgICAgICAgICAgICAKKyAgICBW
ZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBm
YWxzZTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0g
MDsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOwor
ICAgIAorICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9z
dCBPU1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKKyAgICAvLyBJbnQzMnMsIGhhdmUgbm8g
RlBScywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQor
ICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdz
IHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAorICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBj
b2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgorICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMnMg
PSBmYWxzZTsKKyAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQ29uc3Rh
bnRzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CisgICAgCisgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICBu
dW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgIEFTU0VSVCgo
aW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDApOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQgbGlrZSB0byBzdG9yZSB0byB0aGlzIHZpcnR1YWwg
cmVnaXN0ZXIgYmVmb3JlIGRvaW5nCisgICAgICAgICAgICAvLyB2aXJ0dWFsIHJlZ2lzdGVyIHNo
dWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyCisgICAgICAg
ICAgICAvLyBpcyBwb2lzb25lZDogaXQgY2Fubm90IGJlIHN0b3JlZCB0byB1bnRpbCBhZnRlciBk
aXNwbGFjZWQgdmlydHVhbAorICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIGFyZSBoYW5kbGVkLiBX
ZSB0cmFjayBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVyIGNhcmVmdWxseQorICAgICAgICAgICAg
Ly8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBlZmZpY2llbnRseS4gTm90ZSB0aGF0IHdlIGV4cGVj
dCB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRvIGJlIHJhcmUsIHNvIHRoZSBoYW5kbGluZyBv
ZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyBpbgorICAgICAgICAgICAgLy8gd2hpY2gg
aXQgZG9lcyBub3QgaGFwcGVuLgorICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0udGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAg
IGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKys7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGhhdmVVbmJveGVk
SW50MzJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgSW5GUFI6CisgICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAg
aGF2ZUNvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQo
KS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludDY0X3QqIHNjcmF0
Y2hCdWZmZXIgPSBnbG9iYWxEYXRhKCktPm9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bWJlck9m
UG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNl
ZFZpcnR1YWxSZWdpc3RlcnMpKTsKKworICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNz
dW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCisgICAg
Ly8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9y
ZWQuCisgICAgCisgICAgLy8gNCkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCisg
ICAgCisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVy
eShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hl
ZEludDMySW5HUFIgJiYgcmVjb3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVkKQorICAgICAgICAg
ICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3By
KCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDUpIER1bXAgYWxsIG5vbi1wb2lz
b25lZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywgc2F2ZSB0aGVtIGludG8gdGhlIHNjcmF0Y2gg
c3RvcmFnZS4KKyAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hh
bmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0CisgICAgLy8gICAgbW9z
dCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVk
cyB0byBiZSBkdW1wZWQuCisgICAgCisgICAgdW5zaWduZWQgc2NyYXRjaEluZGV4ID0gMDsKKyAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsg
KytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Cisg
ICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAg
c3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVjb3ZlcnkuZ3By
KCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgYWxsIEdQUnMgYXJlIGF2YWlsYWJsZSBm
b3Igc2NyYXRjaCB1c2UuCisgICAgCisgICAgaWYgKGhhdmVGUFJzKSB7CisgICAgICAgIC8vIDYp
IEJveCBhbGwgZG91YmxlcyAocmVsaWVzIG9uIHRoZXJlIGJlaW5nIG1vcmUgR1BScyB0aGFuIEZQ
UnMpCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigpOworICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChm
cHIpKTsKKyAgICAgICAgICAgIGJveERvdWJsZShmcHIsIGdwcik7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIDcpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmls
ZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBpZgorICAgICAgICAvLyAgICB0aGUgZGVzdGlu
YXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KKyAgICAgICAgCisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LmZw
cigpKSk7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAg
ICAgICAgICAgc3RvcmVQdHIoZ3ByLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKGdwciwgYWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDgpIFJlc2h1ZmZsZSBkaXNwbGFj
ZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8g
ICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUg
dGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVy
cy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Cisg
ICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMg
dG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAg
ICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgICAg
IHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUo
KSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAw
OworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAvLyBmb3Ig
c3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNjb3ZlciB0
aGF0CisgICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZhbHVl
cyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgICAgICAvLyBzcGlsbGVkIHJlYWxseSBl
bmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgorICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBidXQg
cHJvYmFibHkgbm90CisgICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQgY29y
cmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgIC8vIHRo
ZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiB2YWx1
ZXMsIGxpa2UKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAxIC0+IDIKKyAgICAgICAg
ICAgIC8vIDIgLT4gMQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEl0IGFjY29tcGxp
c2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3RlcnMK
KyAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlvbnMgYW5kIGRy
b3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCisgICAgICAgICAgICAvLyBsb2NhdGlvbiBpbiBtZW1v
cnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2NhdGlvbgorICAg
ICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCisgICAgICAgIAor
ICAgICAgICAgICAgaW50NjRfdCogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEoKS0+b3NyU2Ny
YXRjaEJ1ZmZlckZvclNpemUobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAg
ICBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKKyAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNoQnVm
ZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBz
dG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMgKyBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIDkpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJz
LgorICAgIAorICAgIHNjcmF0Y2hJbmRleCA9IDA7CisgICAgaWYgKG51bWJlck9mUG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7
IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2
aXJ0dWFsUmVnaXN0ZXJdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJp
YWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgICAg
ICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChzY3Jh
dGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAg
IC8vIDEwKSBEdW1wIGFsbCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNl
IHRoYXQncyBhIGNvbnN0YW50IHdlIHNlZQorICAgIC8vICAgICBvZnRlbi4KKworICAgIGlmICho
YXZlQ29uc3RhbnRzKSB7CisgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBh
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gMTEpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29k
ZSBvcGVyYXRpb24gaW50byByZWdUMC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVy
YW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUklu
Zm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyAxMikgRml4IGNhbGwgZnJh
bWUuCisgICAgCisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAgICAKKyAgICAvLyAxMykgSnVtcCBpbnRv
IHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgorICAgIAorICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2Rl
SW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhp
dC5tX2J5dGVjb2RlSW5kZXgpOworICAgIAorICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICBBU1NF
UlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAg
ICAKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRD
b2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAg
ICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIp
OworICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIGp1bXAoR1BSSW5mbzo6cmVnVDEpOworCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIC0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKKyNlbmRpZgor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1
bGF0aXZlKQoreworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWRD
b2RlTWFwOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0
Q29kZU1hcCgpKTsKKyAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgp
LT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIAorICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJh
dG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKKyAgICBPU1JF
eGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5k
KCk7CisgICAgCisgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgeworICAgICAgICBj
b25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZl
V2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNv
dmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICArK2V4aXRzSXRlcjsKKyAgICB9
Cit9CisjZWxzZSAvLyBERkdfT1NSCiBjbGFzcyBHZW5lcmFsaXplZFJlZ2lzdGVyIHsKIHB1Ymxp
YzoKICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyKCkgeyB9CkBAIC04MDMsNiArMTEzOSw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlvbkNoZWNrcygKICAgICBBU1NFUlQoIShjaGVj
a3NJdGVyICE9IGNoZWNrc0VuZCkpOwogICAgIEFTU0VSVCghKGVudHJpZXNJdGVyICE9IGVudHJp
ZXNFbmQpKTsKIH0KKyNlbmRpZiAvLyBERkdfT1NSCiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVFbnRyeSgpCiB7CkBAIC04NDQsMTIgKzExODEsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkoKQogICAgIC8vIHRvIGFsbG93IGl0IHRvIGNoZWNrIHdoaWNoIG5vZGVzIGluIHRo
ZSBncmFwaCBtYXkgYmFpbCBvdXQsIGFuZCBtYXkgbmVlZCB0byByZWVudGVyIHRoZQogICAgIC8v
IG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGlmIChjb21waWxlZFNwZWN1bGF0aXZlKSB7Cisj
aWYgREZHX09TUgorICAgICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOworI2Vsc2UKICAg
ICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcihzcGVjdWxh
dGl2ZS5zcGVjdWxhdGlvbkNoZWNrcygpKTsKICAgICAgICAgTm9uU3BlY3VsYXRpdmVKSVQgbm9u
U3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxlKGNoZWNr
SXRlcmF0b3IpOwogCiAgICAgICAgIC8vIExpbmsgdGhlIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVj
dWxhdGl2ZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBu
b24tc3BlY3VsYXRpdmUgb25lLgogICAgICAgICBsaW5rU3BlY3VsYXRpb25DaGVja3Moc3BlY3Vs
YXRpdmUsIG5vblNwZWN1bGF0aXZlKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IElmIGNvbXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cg
YXdheSB0aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKQEAg
LTg1OCw4ICsxMTk5LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAg
ICAgbV9tZXRob2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRp
dmVQYXRoQmVnaW4pOwogCisjaWYgREZHX09TUgorICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5k
ZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9yOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRpb25DaGVj
a1ZlY3RvciBub0NoZWNrczsKICAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3Ig
Y2hlY2tJdGVyYXRvcihub0NoZWNrcyk7CisjZW5kaWYKICAgICAgICAgTm9uU3BlY3VsYXRpdmVK
SVQgbm9uU3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxl
KGNoZWNrSXRlcmF0b3IpOwogICAgIH0KQEAgLTkwNyw3ICsxMjUyLDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fY2FsbHNbaV0u
bV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJldHVybkFk
ZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQobV9jYWxsc1tpXS5t
X2NhbGwpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8gPSBtX2NhbGxz
W2ldLm1fZXhjZXB0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25J
bmZvID0gbV9jYWxsc1tpXS5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNldCwgZXhjZXB0aW9u
SW5mbykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsNyBAQCBjbGFzcyBTcGVjdWxhdGlvblJlY292ZXJ5OwogCiBzdHJ1Y3QgRW50cnlMb2Nh
dGlvbjsKIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrOworc3RydWN0IE9TUkV4aXQ7CiAKICNpZm5k
ZWYgTkRFQlVHCiB0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQKShFeGVjU3Rh
dGUqLCB2b2lkKik7CkBAIC04MiwyMSArODMsMjEgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAg
IH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgd2l0aCBhbiBleGNlcHRpb24gaGFu
ZGxlci4KLSAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywgRXhjZXB0
aW9uSW5mbyBleGNlcHRpb25JbmZvKQorICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2Vw
dGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwp
CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNo
ZWNrKGV4Y2VwdGlvbkNoZWNrKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1faGFu
ZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0b3Ig
Zm9yIGEgY2FsbCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25zLCBidXQgd2hpY2ggYXJlIGhhbmRs
ZWQKICAgICAvLyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdGhlIGluLWxpbmUg
ZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvKQor
ICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVu
Y3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAg
ICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhl
eGNlcHRpb25JbmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTA0LDcgKzEw
NSw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2Nh
bGw7CiAgICAgRnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBtX2V4Y2VwdGlvbkNoZWNrOwotICAgIEV4Y2VwdGlvbkluZm8gbV9leGNlcHRpb25JbmZvOwor
ICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYW5kbGVzRXhjZXB0aW9u
czsKIH07CiAKQEAgLTE5Miw5ICsxOTMsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gTm90
aWZ5IHRoZSBKSVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgotICAg
IHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAg
dm9pZCBub3RpZnlDYWxsKENhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsK
LSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0cigpLCBl
eGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwg
RnVuY3Rpb25QdHIoKSwgY29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMjA1LDIw
ICsyMDYsMjAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20g
SklUIGNvZGUsIHdpdGggYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4
Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0
IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAg
ICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9u
Q2hlY2sgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcygmZ2xvYmFsRGF0
YSgpLT5leGNlcHRpb24pKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOworICAg
ICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4
Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7
CiAgICAgfQogICAgIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGgg
YSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMg
emVyby4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1
bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsIGFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlv
biwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgQ2FsbCBmdW5jdGlvbkNh
bGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRy
KFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVy
biBmdW5jdGlvbkNhbGw7CiAgICAgfQogICAgIApAQCAtMzExLDkgKzMxMiw5IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9tZXRob2RHZXRzLmFwcGVuZChNZXRob2RHZXRSZWNvcmQoc2xvd0NhbGwsIHN0
cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlv
bikpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxs
IHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2Fs
bCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2Fs
bFJlY29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2Fs
bCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgY29kZU9yaWdpbikpOwogICAgIH0K
IAogcHJpdmF0ZToKQEAgLTMyNiw4ICszMjcsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxO
dW1lcmljVG9Eb3VibGUoTm9kZUluZGV4LCBGUFJSZWcsIEdQUlJlZyB0ZW1wb3JhcnkpOwogICAg
IHZvaWQgZmlsbEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwgR1BSUmVnKTsKICAgICB2b2lkIGZp
bGxUb0pTKE5vZGVJbmRleCwgR1BSUmVnKTsKKyAgICAKKyNpZiBERkdfT1NSCisgICAgdm9pZCBl
eGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5
KiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKTsKKyAg
ICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYpOworI2Vsc2UKICAgICB2b2lkIGp1
bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2sm
LCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIE5vZGVUb1JlZ2lz
dGVyTWFwJiBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYgZW50cnlO
b2RlVG9SZWdpc3Rlck1hcCk7CiAgICAgdm9pZCBsaW5rU3BlY3VsYXRpb25DaGVja3MoU3BlY3Vs
YXRpdmVKSVQmLCBOb25TcGVjdWxhdGl2ZUpJVCYpOworI2VuZGlmCiAKICAgICAvLyBUaGUgZ2xv
YmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgogICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwpAQCAtMzg2LDEyICszOTMsMTIgQEAgcHJpdmF0
ZToKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAgICAgICBKU0Nh
bGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdl
dFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgICAgICBK
U0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAg
ICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCiAgICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xv
d0NhbGwpCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQogICAg
ICAgICAgICAgLCBtX2lzQ2FsbChpc0NhbGwpCi0gICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5m
byhleGNlcHRpb25JbmZvKQorICAgICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMzk5LDcgKzQwNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgIENhbGwgbV9zbG93Q2FsbDsKICAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFy
Z2V0VG9DaGVjazsKICAgICAgICAgYm9vbCBtX2lzQ2FsbDsKLSAgICAgICAgdW5zaWduZWQgbV9l
eGNlcHRpb25JbmZvOworICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICB9Owog
CiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ5MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKLS8v
IEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGlu
ZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCisvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBp
bmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cg
Z3JhcGhzLiBTZXQgdG8gMSBmb3IgYmFzaWMgdmVyYm9zaXR5LCBvciB0byAyIGZvciBtb3JlIHZl
cmJvc2l0eS4KICNkZWZpbmUgREZHX0RFQlVHX1ZFUkJPU0UgMAogLy8gRW5hYmxlIGdlbmVyYXRp
b24gb2YgZHluYW1pYyBjaGVja3MgaW50byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLgogI2lmICFB
U1NFUlRfRElTQUJMRUQKQEAgLTUwLDYgKzUwLDggQEAKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FM
X0RJU0JBTEUgMAogLy8gRGlzYWJsZSB0aGUgU3BlY3VsYXRpdmVKSVQgd2l0aG91dCBoYXZpbmcg
dG8gdG91Y2ggUGxhdGZvcm0uaCEKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEVfU1BF
Q1VMQVRJVkUgMAorLy8gRGlzYWJsZSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCBhbmQgdXNlIE9T
UiBpbnN0ZWFkLgorI2RlZmluZSBERkdfT1NSIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAv
LyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2luZyB1c2Ug
b2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24gdGhlIGhvdCBwYXRoLgogI2RlZmluZSBE
RkdfU1VDQ0VTU19TVEFUUyAwCiAKQEAgLTcyLDkgKzc0LDMyIEBAIENPTVBJTEVfQVNTRVJUKHNp
emVvZihWaXJ0dWFsUmVnaXN0ZXIpID0KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3Rh
dGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAotLy8gSW5mb3JtYXRpb24g
dXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2Ug
aW5mb3JtYXRpb24uCisvLyBJbmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhj
ZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZvcm1hdGlvbiwKKy8vIGFuZCB0byBpbXBs
ZW1lbnQgT1NSLgogLy8gKFByZXNlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4
KS4KLXR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKK2NsYXNzIENvZGVPcmlnaW4gewor
cHVibGljOgorICAgIENvZGVPcmlnaW4oKQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBDb2RlT3JpZ2luKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDog
bV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAorICAgIHVpbnQzMl90IGJ5dGVjb2Rl
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdWludDMy
X3QgbV9ieXRlY29kZUluZGV4OworfTsKIAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51
bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkg
bm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2Vu
ZXJhdGUsIGlzIGNvbnN0YW50LCBldGMpLgpAQCAtMzU3LDkgKzM4Miw5IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogCiAgICAgLy8gQ29uc3RydWN0IGEg
bm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2Rl
KE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBjaGls
ZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMg
PSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBO
b2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2Vw
dGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAg
ICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewpAQCAtMzcwLDkgKzM5NSw5IEBAIHN0cnVjdCBO
b2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGls
ZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2Vw
dGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBp
bW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwg
ZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1
ZSkKQEAgLTM4NCw5ICs0MDksOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29u
c3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFs
dWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywg
T3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAg
ICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5t
X3ZhbHVlKQpAQCAtMzk5LDkgKzQyNCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAg
ICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVu
IGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUg
b3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0y
LCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKKyAgICBOb2RlKFZh
ckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEs
IE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikK
ICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8p
CisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQog
ICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTY0Myw2ICs2NjgsMTQgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CiAgICAgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIGEgZmFzdCBjaGVjayBvbiB0aGUgZmlyc3Qg
Y2hpbGQKKyAgICAvLyBiZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUuIFVz
ZSB0aGlzIHdpdGggY2FyZSBhbmQKKyAgICAvLyBhdm9pZCBpdCBpZiBwb3NzaWJsZS4KKyAgICBO
b2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZHJl
bi5maXhlZC5jaGlsZDE7CisgICAgfQogCiAgICAgTm9kZUluZGV4IGNoaWxkMigpCiAgICAgewpA
QCAtNjcxLDcgKzcwNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAvLyBUaGlzIGVudW0gdmFsdWUg
ZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwogICAgIC8v
IFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRs
eSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KLSAgICBFeGNlcHRpb25JbmZvIGV4
Y2VwdGlvbkluZm87CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVyZW5j
ZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Igbm8gY2hpbGQpLgogICAgIHVuaW9uIHsKICAg
ICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzQsNiArNDM0LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5v
ZAogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRl
eEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBub2RlKQogeworI2lmIERGR19PU1IKKyAg
ICBVTlVTRURfUEFSQU0oY2hlY2tJdGVyYXRvcik7CisjZWxzZQogICAgIC8vIENoZWNrIGZvciBz
cGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0
aGUKICAgICAvLyBzcGVjdWxhdGl2ZSBwYXRoLiBEbyBub3QgY2hlY2sgZm9yIE5vZGVJbmRleCAw
LCBzaW5jZSB0aGlzIGlzIGNoZWNrZWQKICAgICAvLyBpbiB0aGUgb3V0ZXJtb3N0IGNvbXBpbGUg
bGF5ZXIsIGF0IHRoZSBoZWFkIG9mIHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aApAQCAtNDQyLDYg
KzQ0NSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAv
LyBhcyBzcGVjdWxhdGlvbiBjaGVja3MgYXQgdGhpcyBpbmRleCkuCiAgICAgaWYgKG1fY29tcGls
ZUluZGV4ICYmIGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkK
ICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgTm9kZVR5
cGUgb3AgPSBub2RlLm9wOwogCkBAIC0xMjgzLDggKzEyODcsMTAgQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hlY2tJdGVyYXRvcikKIHsKICAgICAv
LyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGFkZGVkIGF0IGZ1bmN0aW9uIGVudHJ5IChj
aGVja2luZyBhcmd1bWVudCB0eXBlcykuCisjaWYgIURGR19PU1IKICAgICBpZiAoY2hlY2tJdGVy
YXRvci5oYXNDaGVja0F0SW5kZXgobV9jb21waWxlSW5kZXgpKQogICAgICAgICB0cmFja0VudHJ5
KG1faml0LmxhYmVsKCkpOworI2VuZGlmCiAKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsK
ICAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5z
aXplKCk7ICsrbV9ibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NiArMTQ0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAg
IHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCisjaWYgIURGR19PU1IKIFNwZWN1bGF0aW9uQ2hl
Y2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2NoZWNrKGNoZWNr
KQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKQEAgLTE3MCw2ICsxNzEs
NzMgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICAg
ICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KIH0K
KyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBv
dXQpIGNvbnN0Cit7CisgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsK
K30KKwordm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluR1BS
OgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAg
ZnByaW50ZihvdXQsICJpbnQzMiglJSVzKSIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEluRlBSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUl
JXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIqJWQiLCB2
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9udEtub3c6CisgICAgICAgIGZwcmludGYob3V0LCAi
ISIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKG91dCwg
Ij8lZCIsIHRlY2huaXF1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2VuZGlmCisK
KyNpZiBERkdfT1NSCitPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNr
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorICAgIDogbV9j
aGVjayhjaGVjaykKKyAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCisgICAg
LCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAgLCBtX3Jl
Y292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1
bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkp
CisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sKKyAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1
bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0g
PSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRd
KTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGpp
dC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOwor
fQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5kdW1w
KG91dCk7CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlh
YmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAg
ICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXS5kdW1wKG91dCk7Cit9CisjZW5kaWYKKyNlbmRpZgog
CiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewpAQCAtNjUwLDYgKzcxOCwzMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBTZXRMb2NhbDogeworICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0
byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCisgICAgICAgIC8vIGFzIGEgc3BlY3Vs
YXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKKyAg
ICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGlu
IHRoZSB2aXJ0dWFsCisgICAgICAgIC8vIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIGNvbXBpbGVN
b3ZIaW50KG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgZmFyIGFzIE9TUiBpcyBjb25j
ZXJuZWQsIHdlJ3JlIG9uIHRoZSBieXRlY29kZSBpbmRleCBjb3JyZXNwb25kaW5nCisgICAgICAg
IC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkgImV4ZWN1
dGVkIiB0aGUKKyAgICAgICAgLy8gU2V0TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERGRyBOb2Rl
cyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lCisgICAgICAgIC8vIGJ5dGVjb2RlIGluZGV4
IGFzIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9
PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgTm9kZSYgbmV4dE5v
ZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4KzFdOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmIHdlIGV2ZXIgZW1pdCBtdWx0aXBsZSBTZXRM
b2NhbCdzIGZvcgorICAgICAgICAvLyBhIHNpbmdsZSBieXRlY29kZSBpbnN0cnVjdGlvbi4gVGhh
dCdzIHVubGlrZWx5IHRvIGhhcHBlbi4gQnV0IGlmCisgICAgICAgIC8vIGl0IGRvZXMsIHRoZSBz
b2x1dGlvbiBpcyB0byB0byBoYXZlIHRoaXMgcGVyZm9ybSBhIHNlYXJjaCB1bnRpbAorICAgICAg
ICAvLyBpdCBmaW5kcyBhIE5vZGUgd2l0aCBhIGRpZmZlcmVudCBieXRlY29kZSBpbmRleCBmcm9t
IHRoZSBvbmUgd2UndmUKKyAgICAgICAgLy8gZ290LCBhbmQgdG8gYWJzdHJhY3RseSBleGVjdXRl
IHRoZSBTZXRMb2NhbCdzIGFsb25nIHRoZSB3YXkuIE9yLAorICAgICAgICAvLyBiZXR0ZXIgeWV0
LCBoYW5kbGUgYWxsIG9mIHRoZSBTZXRMb2NhbCdzIGF0IG9uY2U6IGFic3RyYWN0IGludGVycHJl
dAorICAgICAgICAvLyBhbGwgb2YgdGhlbSwgdGhlbiBlbWl0IGNvZGUgZm9yIGFsbCBvZiB0aGVt
LCB3aXRoIE9TUiBleGl0aW5nIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IG5vbi1TZXRMb2NhbCBp
bnN0cnVjdGlvbi4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9TUiAhPSBuZXh0
Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRl
eEZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAK
ICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQ
cmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CkBAIC02NzAsNiArNzYyLDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAg
ICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0
cmlldmUgdGhlIHZhbHVlIG9mCisgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJv
bSByZWdpc3RlcnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLgorICAg
ICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTM2OSwxMSArMTQ2NSwxOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICB9Ci0KKyAgICAKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2Rl
Lm11c3RHZW5lcmF0ZSgpKQogICAgICAgICB1c2UobV9jb21waWxlSW5kZXgpOwogfQogCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQoreworICAgIEFTU0VS
VChub2RlLm9wID09IFNldExvY2FsKTsKKyAgICAKKyAgICBzZXROb2RlSW5kZXhGb3JPcGVyYW5k
KG5vZGUuY2hpbGQxKCksIG5vZGUubG9jYWwoKSk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5v
ZGUubG9jYWwoKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2Nr
JiBibG9jaykKIHsKICAgICBBU1NFUlQobV9jb21waWxlT2theSk7CkBAIC0xMzgyLDM1ICsxNDg2
LDc0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBERkdf
SklUX0JSRUFLX09OX0VWRVJZX0JMT0NLCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlm
CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdmFyaWFi
bGVzW2ldID0gVmFsdWVTb3VyY2UoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKICAgICBmb3IgKDsgbV9jb21waWxl
SW5kZXggPCBibG9jay5lbmQ7ICsrbV9jb21waWxlSW5kZXgpIHsKICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdOwotICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKyAgICAgICAg
bV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
KyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKICNpZiBERkdfREVCVUdfVkVS
Qk9TRQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcg
Tm9kZSBAJWQgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbV9q
aXQuZGVidWdPZmZzZXQoKSk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0
aXZlSklUIHNraXBwaW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgICAi
LCAoaW50KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBt
X2ppdC5kZWJ1Z09mZnNldCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0g
U2V0TG9jYWwpCisgICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChi
YyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYK
ICNpZiBERkdfSklUX0JSRUFLX09OX0VWRVJZX05PREUKLSAgICAgICAgbV9qaXQuYnJlYWtwb2lu
dCgpOworICAgICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCi0gICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgY29tcGlsZShub2RlKTsKLSAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KSB7CisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
ICAgICBjb21waWxlKG5vZGUpOworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KSB7CiAj
aWYgRU5BQkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OKQotICAgICAgICAgICAgbV9j
b21waWxlT2theSA9IHRydWU7Ci0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVu
ZDsKLSAgICAgICAgICAgIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKKyAgICAgICAgICAgICAgICBt
X2NvbXBpbGVPa2F5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJs
b2NrLmVuZDsKKyAgICAgICAgICAgICAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7CiAjZW5kaWYK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogI2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAg
ICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIt
PiAlc1xuIiwgZGF0YUZvcm1hdFRvU3RyaW5nKG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFs
UmVnaXN0ZXIoKV0ucmVnaXN0ZXJGb3JtYXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQo
KSkgeworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIi0+ICVzLCB2ciMlZCIsIGRhdGFGb3JtYXRUb1N0cmluZyhpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpLCAoaW50KW5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGlm
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgRlBSSW5mbzo6
ZGVidWdOYW1lKGluZm8uZnByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgR1BSSW5mbzo6ZGVidWdO
YW1lKGluZm8uZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgICAgIik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAor
I2lmIERGR19ERUJVR19WRVJCT1NFID49IDIgICAgICAgIAorICAgICAgICBmb3IgKGludCBvcGVy
YW5kID0gLW1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsgb3BlcmFuZCA8IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsrb3Bl
cmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAo
c3RkZXJyKTsKKyAgICAgICAgCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIDogIik7CisgICAg
ICAgIAorICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJp
YWJsZXMuc2l6ZSgpOyArK29wZXJhbmQpCisgICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyAgICAgIAorI2lmIERGR19ERUJV
R19WRVJCT1NFICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogI2VuZGlmCi0gICAg
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogfQog
CkBAIC0xNDE5LDYgKzE1NjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2lj
QmxvY2smCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogewogICAg
IEFTU0VSVCghbV9jb21waWxlSW5kZXgpOworICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IDA7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0
ZXJzOyArK2kpIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IChW
aXJ0dWFsUmVnaXN0ZXIpKG1faml0LmNvZGVCbG9jaygpLT50aGlzUmVnaXN0ZXIoKSArIGkpOwog
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpLmdldFBy
ZWRpY3Rpb24odmlydHVhbFJlZ2lzdGVyKTsKQEAgLTE0NTQsNyArMTU5OCw3IEBAIGJvb2wgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwogICAg
IGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUo
KTsgKyttX2Jsb2NrKSB7CiAgICAgICAgIGNvbXBpbGUoKm1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10pOwotI2lmICFFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisjaWYgIUVOQUJM
RShEWU5BTUlDX1RFUk1JTkFURV9TUEVDVUxBVElPTikKICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC0xNDYzLDYgKzE2MDcs
MTE5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIHJldHVybiB0cnVlOwog
fQogCitWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCit7CisgICAgaWYgKCF2YWx1ZVNvdXJj
ZS5pc1NldCgpKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0
ZXJGaWxlKCk7CisKKyAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5k
ZXgoKSkpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1
ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgIAorICAgIE5vZGUq
IG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKV07CisgICAg
aWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIC8vIEl0J3MgbGVnaXRp
bWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9w
ZXJhbmQsCisgICAgICAgIC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFrZSB0aGUg
R0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNv
bnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBHZW5lcmF0aW9uSW5mbyog
aW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsK
KyAgICBpZiAoIWluZm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFs
dWVTb3VyY2Uubm9kZUluZGV4KCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBp
cyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQu
CisgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vCisg
ICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUg
dmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUKKyAgICAgICAgLy8gICAgdGhlbiBpdCBtZWFu
cyB0aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2ZSBwZXJmb3Jt
ZWQgYQorICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiBUaHVz
LCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAgICAgICAvLworICAgICAgICAv
LyBWYWx1ZVRvSW50MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSByZW1haW5pbmcgbGl2ZSB2ZXJz
aW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2Ug
Y2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50MzIKKyAgICAgICAg
Ly8gICAgYW5kIGEgVmFsdWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBWYWx1ZVRv
TnVtYmVyIGJlY2F1c2UgaXQKKyAgICAgICAgLy8gICAgbWVhbnMgdGhhdCBzb21lIHJlbWFpbmlu
ZyB1c2VzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIG51bWJlciB3aGlsZQorICAgICAgICAvLyAg
ICBvdGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZh
bHVlIGlzIGEgVUludDMyVG9OdW1iZXIKKyAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1h
aW5pbmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisg
ICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUgY291bGQg
YmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBp
cyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9m
CisgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGlu
dGVybWVkaWF0ZS4KKyAgICAgICAgCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikgeworICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAg
ICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgICAgICBpbmZv
UHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAg
ICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0g
bm9kZUluZGV4KQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
VG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50
MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlcklu
ZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZp
cnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6
ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAg
ICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5n
cmFwaCgpW2luZm8ubm9kZUluZGV4KCldOworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
VG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OworICAgICAgICAgICAgZWxz
ZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJ
bmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh1aW50
MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1Vz
ZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlUHRyID0g
Jm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOworICAgICAgICAgICAgICAgIGluZm9QdHIg
PSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkg
PT0gbm9kZUluZGV4VG9Vc2UpOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAg
ICB9CisgICAgCisgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkpOworCisgICAgaWYgKGluZm9Q
dHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgaWYgKGlu
Zm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7CisgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0
ZXJGb3JtYXQoKSk7CisgICAgfQorICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERh
dGFGb3JtYXROb25lKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5S
ZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFs
UmVnaXN0ZXIoKSkpOworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5KCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwcml2YXRlOgog
ICAgIEdQUlJlZyBtX3NyYzsKIH07CiAKKyNpZiAhREZHX09TUgogLy8gPT09IFNwZWN1bGF0aW9u
Q2hlY2sgPT09CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0IGZyb20g
dGhlIHNwZWN1bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTYgQEAgc3RydWN0IFNwZWN1bGF0
aW9uQ2hlY2sgewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ss
IDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFERkdfT1NSCiAKK2NsYXNz
IFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAgIDogbV9u
b2RlSW5kZXgoTm9Ob2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVT
b3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5k
ZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAgfQorICAgIAorICAgIE5v
ZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkp
OworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVC
VUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAorcHJpdmF0
ZToKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Cit9OworICAgIAorLy8gRGVzY3JpYmVzIGhv
dyB0byByZWNvdmVyIGEgZ2l2ZW4gYnl0ZWNvZGUgdmlydHVhbCByZWdpc3RlciBhdCBhIGdpdmVu
CisvLyBjb2RlIHBvaW50LgorZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHsKKyAgICAvLyBJ
dCdzIGFscmVhZHkgaW4gdGhlIHJlZ2lzdGVyIGZpbGUgYXQgdGhlIHJpZ2h0IGxvY2F0aW9uLgor
ICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIGEgcmVnaXN0ZXIuCisg
ICAgSW5HUFIsCisgICAgVW5ib3hlZEludDMySW5HUFIsCisgICAgSW5GUFIsCisgICAgLy8gSXQn
cyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwgYnV0IGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLgorICAg
IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBjb25zdGFudC4KKyAgICBD
b25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVyIGl0LgorICAgIERvbnRL
bm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoKKyAgICBWYWx1ZVJlY292
ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAgICB7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZSgpCisgICAg
eworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5p
cXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3ByLCBEYXRh
Rm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICBp
ZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgIHJlc3VsdC5t
X3RlY2huaXF1ZSA9IFVuYm94ZWRJbnQzMkluR1BSOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmdw
ciA9IGdwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFZhbHVlUmVjb3ZlcnkgaW5GUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIFZhbHVlUmVj
b3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkZQUjsKKyAgICAg
ICAgcmVzdWx0Lm1fc291cmNlLmZwciA9IGZwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgZGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcpCisgICAgeworICAgICAgICBWYWx1ZVJlY292
ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGU7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmlydHVhbFJl
ZzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVl
UmVjb3ZlcnkgY29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVj
b3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBDb25zdGFudDsKKyAg
ICAgICAgcmVzdWx0Lm1fc291cmNlLmNvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgVmFsdWVSZWNvdmVyeVRl
Y2huaXF1ZSB0ZWNobmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZTsgfQorICAgIAor
ICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVl
ID09IEluR1BSIHx8IG1fdGVjaG5pcXVlID09IFVuYm94ZWRJbnQzMkluR1BSKTsKKyAgICAgICAg
cmV0dXJuIG1fc291cmNlLmdwcjsKKyAgICB9CisgICAgCisgICAgRlBSUmVnIGZwcigpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5GUFIpOworICAgICAgICBy
ZXR1cm4gbV9zb3VyY2UuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9
PSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0
dWFsUmVnOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyNpZm5k
ZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAK
K3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsKKyAgICB1
bmlvbiB7CisgICAgICAgIEdQUlJlZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25z
dGFudDsKKyAgICB9IG1fc291cmNlOworfTsKKworI2lmIERGR19PU1IKKy8vID09PSBPU1JFeGl0
ID09PQorLy8KKy8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3Bl
Y3VsYXRpdmUgcGF0aCBieQorLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgorc3RydWN0IE9T
UkV4aXQgeworICAgIE9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklU
KiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG1fY2hlY2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7Cisg
ICAgCisgICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFsdWVSZWNvdmVy
aWVzIHdoaWxlIGJlaW5nCisgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZlcnN1cyB2YXJp
YWJsZS4KKyAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgdmFsdWVSZWNvdmVyeShpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50c1tpbmRleF07CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleCAtIG1fYXJn
dW1lbnRzLnNpemUoKV07CisgICAgfQorICAgIGJvb2wgaXNBcmd1bWVudChpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICBib29s
IGlzVmFyaWFibGUoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7
IH0KKyAgICBpbnQgYXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvckluZGV4KGludCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNp
emUoKTsKKyAgICB9CisgICAgaW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMu
c2l6ZSgpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUq
IG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4g
bV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOwor
ICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworfTsKK3R5cGVkZWYgU2VnbWVudGVkVmVjdG9yPE9T
UkV4aXQsIDE2PiBPU1JFeGl0VmVjdG9yOworI2VuZGlmIC8vIERGR19PU1IKIAogLy8gPT09IFNw
ZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTEwNSwyMSArMjk1LDI1IEBAIHR5cGVkZWYgU2VnbWVu
dGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFz
c2VydGVkKSB0aHJvdWdoIHRoZSBkYXRhZmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVi
bGljIEpJVENvZGVHZW5lcmF0b3IgewogICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVj
azsKKyAgICBmcmllbmQgc3RydWN0IE9TUkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1
ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVj
dWxhdGl2ZUpJVChKSVRDb21waWxlciYpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAKICAgICAv
LyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0
aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAhREZH
X09TUgogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3ImIHNwZWN1bGF0aW9uQ2hlY2tzKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3NwZWN1bGF0aW9uQ2hlY2tzOwogICAgIH0KKyNlbHNlCisg
ICAgT1NSRXhpdFZlY3RvciYgb3NyRXhpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3Ny
RXhpdHM7CisgICAgfQorI2VuZGlmCiAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogc3BlY3VsYXRp
b25SZWNvdmVyeShzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICAvLyBTcGVjdWxhdGlvbkNo
ZWNrOjptX3JlY292ZXJ5SW5kZXggaXMgb2Zmc2V0IGJ5IDEsCkBAIC0xMzksNiArMzMzLDcgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKICAgICAKICAgICB2
b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOwogICAg
IHZvaWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CiAKICAgICB2b2lkIGNoZWNrQXJndW1lbnRUeXBl
cygpOwpAQCAtMjAzLDcgKzM5OCwxMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOworI2lmICFERkdfT1NSCiAgICAgICAg
IG1fc3BlY3VsYXRpb25DaGVja3MuYXBwZW5kKFNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFpbCwg
dGhpcykpOworI2Vsc2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9G
YWlsLCB0aGlzKSk7CisjZW5kaWYKICAgICB9CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hl
Y2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5
JiByZWNvdmVyeSkKQEAgLTIxMSw3ICs0MTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3NwZWN1bGF0aW9u
UmVjb3ZlcnlMaXN0LmFwcGVuZChyZWNvdmVyeSk7CisjaWYgIURGR19PU1IKICAgICAgICAgbV9z
cGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlz
LCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vsc2UKKyAgICAgICAgbV9v
c3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVj
b3ZlcnlMaXN0LnNpemUoKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4g
d2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KQEAg
LTIzNCwxOCArNDM3LDY1IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4K
ICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1h
dCYgcmV0dXJuRm9ybWF0KTsKLQorICAgIAogICAgIC8vIEl0IGlzIHBvc3NpYmxlLCBkdXJpbmcg
c3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRpb24gaW4gd2hpY2ggd2UK
ICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwg
KGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwogICAgIC8vIHdpbGwgbWFrZSBjb25mbGljdGlu
ZyBzcGVjdWxhdGlvbnMgYWJvdXQgdGhlIHNhbWUgb3BlcmFuZCkuIEluIHN1Y2ggY2FzZXMgdGhp
cwogICAgIC8vIGZsYWcgaXMgY2xlYXJlZCwgaW5kaWNhdGluZyBubyBmdXJ0aGVyIGNvZGUgZ2Vu
ZXJhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4KICAgICBib29sIG1fY29tcGlsZU9rYXk7CisjaWYg
IURGR19PU1IKICAgICAvLyBUaGlzIHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNw
ZWN1bGF0aXZlIHBhdGggdG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAgU3BlY3VsYXRp
b25DaGVja1ZlY3RvciBtX3NwZWN1bGF0aW9uQ2hlY2tzOworI2Vsc2UKKyAgICAvLyBUaGlzIHZl
Y3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIG9s
ZCBKSVQuCisgICAgT1NSRXhpdFZlY3RvciBtX29zckV4aXRzOworI2VuZGlmCiAgICAgLy8gU29t
ZSBiYWlsLW91dHMgbmVlZCB0byByZWNvcmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWNvcmRp
bmcgc3BlY2lmaWMgcmVjb3ZlcnkKICAgICAvLyB0byBiZSBwZXJmb3JtZWQgKGZvciBleGFtcGxl
LCBvbiBkZXRlY3RlZCBvdmVyZmxvdyBmcm9tIGFuIGFkZCwgd2UgbWF5IG5lZWQgdG8KICAgICAv
LyByZXZlcnNlIHRoZSBhZGRpdGlvbiBpZiBhbiBvcGVyYW5kIGlzIGJlaW5nIG92ZXJ3cml0dGVu
KS4KICAgICBWZWN0b3I8U3BlY3VsYXRpb25SZWNvdmVyeSwgMTY+IG1fc3BlY3VsYXRpb25SZWNv
dmVyeUxpc3Q7CisgICAgCisgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNoIG5vZGVzIGFyZSBjdXJy
ZW50bHkgaG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQgYnl0ZWNvZGUKKyAgICAv
LyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFibGVzLgorCisgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3Vy
Y2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
ZXROb2RlSW5kZXhGb3JPcGVyYW5kKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBvcGVyYW5kKQor
ICAgIHsKKyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0g
VmFsdWVTb3VyY2Uobm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIHdp
dGggY2FyZSwgc2luY2UgaXQgYm90aCByZXR1cm5zIGEgcmVmZXJlbmNlIGludG8gYW4gYXJyYXkK
KyAgICAvLyBhbmQgcG90ZW50aWFsbHkgcmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdvdWxkIG5v
dCBiZSByaWdodCB0byBjYWxsIHRoaXMKKyAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3JtIG9w
ZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNlcywgc2luY2UgdGhlIG9uZSBmcm9tCisgICAgLy8gdGhl
IGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICBWYWx1ZVNvdXJjZSYgdmFs
dWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1l
bnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1f
dmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5k
ICsgMSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07Cisg
ICAgfQorICAgIAorICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7CisgICAg
VmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0T3Bl
cmFuZDsKKyAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CisgICAgCisgICAgVmFs
dWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwor
CisgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1ZVNvdXJj
ZUZvck9wZXJhbmQob3BlcmFuZCkpOworICAgIH0KIH07CiAKIApAQCAtNDY1LDExICs3MTUsMTcg
QEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCi0KIC8vID09PSBT
cGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciA9PT0KIC8vCiAvLyBUaGlzIGNsYXNzIGlzIHVz
ZWQgYnkgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgdG8gY2hlY2sgd2hpY2gKIC8vIG5vZGVzIHJl
cXVpcmUgZW50cnkgcG9pbnRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGguCisjaWYgREZHX09T
UgorLy8gVGhpcyBiZWNvbWVzIGEgc3R1YiBpZiBPU1IgaXMgZW5hYmxlZC4KK2NsYXNzIFNwZWN1
bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBTcGVjdWxhdGlvbkNoZWNr
SW5kZXhJdGVyYXRvcigpIHsgfQorfTsKKyNlbHNlCiBjbGFzcyBTcGVjdWxhdGlvbkNoZWNrSW5k
ZXhJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3Io
U3BlY3VsYXRpb25DaGVja1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3MpCkBAIC00OTUsNyArNzUx
LDE3IEBAIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9p
dGVyOwogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3I6Okl0ZXJhdG9yIG1fZW5kOwogfTsKKyNl
bmRpZgogCitpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVy
JiBqaXQpCisgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKKyAgICAsIG1fY29tcGls
ZU9rYXkodHJ1ZSkKKyAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJh
bWV0ZXJzKQorICAgICwgbV92YXJpYWJsZXMoaml0LmNvZGVCbG9jaygpLT5tX251bVZhcnMpCisg
ICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisg
ICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpKQoreworfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBhY3RKSVRDb2RlTWFwX2gKKyNk
ZWZpbmUgQ29tcGFjdEpJVENvZGVNYXBfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gR2l2ZXMgeW91IGEgY29tcHJlc3NlZCBtYXAgYmV0d2Vl
biBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kIG1hY2hpbmUgY29kZQorLy8gZW50cnkgcG9p
bnRzLiBUaGUgY29tcHJlc3Npb24gc2ltcGx5IHRyaWVzIHRvIHVzZSBlaXRoZXIgMSwgMiwgb3Ig
NCBieXRlcyBmb3IKKy8vIGFueSBnaXZlbiBvZmZzZXQuIFRoZSBsYXJnZXN0IG9mZnNldCB0aGF0
IGNhbiBiZSBzdG9yZWQgaXMgMl4zMC4KKworLy8gRXhhbXBsZSB1c2U6CisvLworLy8gQ29tcGFj
dEpJVENvZGVNYXA6OkVuY29kZXIgZW5jb2RlcihtYXApOworLy8gZW5jb2Rlci5hcHBlbmQoYSwg
Yik7CisvLyBlbmNvZGVyLmFwcGVuZChjLCBkKTsgLy8gcHJlY29uZGl0aW9uczogYyA+PSBhLCBk
ID49IGIKKy8vIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbWFwID0gZW5jb2Rlci5maW5pc2go
KTsKKy8vCisvLyBBdCBzb21lIGxhdGVyIHRpbWU6CisvLworLy8gVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4gZGVjb2RlZDsKKy8vIG1hcC0+ZGVjb2RlKGRlY29kZWQpOworCitzdHJ1
Y3QgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0IHsKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQoKSB7IH0KKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICwgbV9tYWNoaW5lQ29kZU9mZnNldCht
YWNoaW5lQ29kZU9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1fYnl0
ZWNvZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIAorICAg
IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVJbmRleChCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQqIG1hcHBpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFwcGluZy0+bV9ieXRl
Y29kZUluZGV4OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldE1h
Y2hpbmVDb2RlT2Zmc2V0KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZykKKyAgICB7
CisgICAgICAgIHJldHVybiBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIH0KK307
CisKK2NsYXNzIENvbXBhY3RKSVRDb2RlTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICB+Q29tcGFjdEpJVENvZGVNYXAoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fYnVmZmVyKQorICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGRlY29kZShWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgcmVzdWx0
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNCeXRlY29kZUluZGV4ID0g
MDsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7CisgICAg
ICAgIAorICAgICAgICByZXN1bHQucmVzaXplKG1fbnVtYmVyT2ZFbnRyaWVzKTsKKyAgICAgICAg
dW5zaWduZWQgaiA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bWJl
ck9mRW50cmllczsgKytpKSB7CisgICAgICAgICAgICBwcmV2aW91c0J5dGVjb2RlSW5kZXggKz0g
ZGVjb2RlTnVtYmVyKGopOworICAgICAgICAgICAgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCAr
PSBkZWNvZGVOdW1iZXIoaik7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9ieXRlY29kZUluZGV4
ID0gcHJldmlvdXNCeXRlY29kZUluZGV4OworICAgICAgICAgICAgcmVzdWx0W2ldLm1fbWFjaGlu
ZUNvZGVPZmZzZXQgPSBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVChqID09IG1fc2l6ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBDb21w
YWN0SklUQ29kZU1hcCh1aW50OF90KiBidWZmZXIsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG51
bWJlck9mRW50cmllcykKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgICAgICAsIG1fc2l6ZShzaXplKQorI2VuZGlmCisgICAgICAgICwgbV9udW1i
ZXJPZkVudHJpZXMobnVtYmVyT2ZFbnRyaWVzKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHNpemUpOworICAgIH0KKyAgICAKKyAgICB1aW50OF90IGF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJu
IG1fYnVmZmVyW2luZGV4XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVjb2RlTnVtYmVy
KHVuc2lnbmVkJiBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVl
ID0gYXQoaW5kZXgrKyk7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDEyOCkpCisgICAgICAg
ICAgICByZXR1cm4gaGVhZFZhbHVlOworICAgICAgICBpZiAoIShoZWFkVmFsdWUgJiA2NCkpCisg
ICAgICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWFkVmFsdWUgJiB+MTI4
KSA8PCA4KSB8IGF0KGluZGV4KyspOworICAgICAgICB1bnNpZ25lZCBzZWNvbmQgPSBhdChpbmRl
eCsrKTsKKyAgICAgICAgdW5zaWduZWQgdGhpcmQgID0gYXQoaW5kZXgrKyk7CisgICAgICAgIHVu
c2lnbmVkIGZvdXJ0aCA9IGF0KGluZGV4KyspOworICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihoZWFkVmFsdWUgJiB+KDEyOCArIDY0KSkgPDwgMjQpIHwgKHNlY29uZCA8PCAx
NikgfCAodGhpcmQgPDwgOCkgfCBmb3VydGg7CisgICAgfQorICAgIAorICAgIHVpbnQ4X3QqIG1f
YnVmZmVyOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBtX3NpemU7CisjZW5k
aWYKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cmllczsKKyAgICAKK3B1YmxpYzoKKyAgICBj
bGFzcyBFbmNvZGVyIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW5jb2Rlcik7Cisg
ICAgcHVibGljOgorICAgICAgICBFbmNvZGVyKCk7CisgICAgICAgIH5FbmNvZGVyKCk7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJlck9mRW50
cmllc1RvQWRkKTsKKyAgICAgICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
dW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpOworICAgICAgICBQYXNzT3duUHRyPENvbXBhY3RK
SVRDb2RlTWFwPiBmaW5pc2goKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9p
ZCBhcHBlbmRCeXRlKHVpbnQ4X3QgdmFsdWUpOworICAgICAgICB2b2lkIGVuY29kZU51bWJlcih1
aW50MzJfdCB2YWx1ZSk7CisgICAgCisgICAgICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgICAg
ICB1bnNpZ25lZCBtX3NpemU7CisgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgICAg
IHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
bV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNNYWNo
aW5lQ29kZU9mZnNldDsKKyAgICB9OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFbmNv
ZGVyOworfTsKKworaW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNvZGVyKCkK
KyAgICA6IG1fYnVmZmVyKDApCisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fY2FwYWNpdHkoMCkK
KyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKDApCisgICAgLCBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRl
eCgwKQorICAgICwgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KDApCit7Cit9CisKK2lubGlu
ZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIoKQoreworICAgIGlmIChtX2J1
ZmZlcikKKyAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworfQorICAgICAgICAKK2lubGluZSB2
b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2Rl
SW5kZXggPj0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtYWNoaW5lQ29k
ZU9mZnNldCA+PSBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQpOworICAgIGVuc3VyZUNhcGFj
aXR5Rm9yKDEpOworICAgIGVuY29kZU51bWJlcihieXRlY29kZUluZGV4IC0gbV9wcmV2aW91c0J5
dGVjb2RlSW5kZXgpOworICAgIGVuY29kZU51bWJlcihtYWNoaW5lQ29kZU9mZnNldCAtIG1fcHJl
dmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSBi
eXRlY29kZUluZGV4OworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IG1hY2hpbmVD
b2RlT2Zmc2V0OworICAgIG1fbnVtYmVyT2ZFbnRyaWVzKys7Cit9CisKK2lubGluZSBQYXNzT3du
UHRyPENvbXBhY3RKSVRDb2RlTWFwPiBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZmluaXNo
KCkKK3sKKyAgICBtX2NhcGFjaXR5ID0gbV9zaXplOworICAgIG1fYnVmZmVyID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgT3du
UHRyPENvbXBhY3RKSVRDb2RlTWFwPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgQ29tcGFjdEpJVENv
ZGVNYXAobV9idWZmZXIsIG1fc2l6ZSwgbV9udW1iZXJPZkVudHJpZXMpKTsKKyAgICBtX2J1ZmZl
ciA9IDA7CisgICAgbV9zaXplID0gMDsKKyAgICBtX2NhcGFjaXR5ID0gMDsKKyAgICBtX251bWJl
ck9mRW50cmllcyA9IDA7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAgIG1f
cHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6
OmFwcGVuZEJ5dGUodWludDhfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXplICsgMSA8PSBt
X2NhcGFjaXR5KTsKKyAgICBtX2J1ZmZlclttX3NpemUrK10gPSB2YWx1ZTsKK30KKyAgICAKK2lu
bGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIodWludDMy
X3QgdmFsdWUpCit7CisgICAgQVNTRVJUKG1fc2l6ZSArIDQgPD0gbV9jYXBhY2l0eSk7CisgICAg
QVNTRVJUKHZhbHVlIDwgKDEgPDwgMzApKTsKKyAgICBpZiAodmFsdWUgPD0gMTI3KSB7CisgICAg
ICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAg
ICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFk
VmFsdWUpOworICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMTYzODMpIHsKKyAgICAgICAgdWludDhf
dCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KTsKKyAgICAgICAg
QVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAm
IDY0KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlIHwgMTI4KTsKKyAgICAgICAgYXBw
ZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gMjQp
OworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgQVNTRVJUKCEo
aGVhZFZhbHVlICYgNjQpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjggfCA2
NCk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gMTYp
KTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KSk7
CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9
Cit9CisKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBh
Y2l0eUZvcih1bnNpZ25lZCBudW1iZXJPZkVudHJpZXNUb0FkZCkKK3sKKyAgICB1bnNpZ25lZCBj
YXBhY2l0eU5lZWRlZCA9IG1fc2l6ZSArIG51bWJlck9mRW50cmllc1RvQWRkICogMiAqIDQ7Cisg
ICAgaWYgKGNhcGFjaXR5TmVlZGVkID4gbV9jYXBhY2l0eSkgeworICAgICAgICBtX2NhcGFjaXR5
ID0gY2FwYWNpdHlOZWVkZWQgKiAyOworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb21wYWN0SklUQ29kZU1hcF9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSwx
MSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgbV9sYWJl
bHNbbV9ieXRlY29kZU9mZnNldF0gPSBsYWJlbCgpOwogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01Q
SUxBVElPTikKKyAgICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgICAgICBtX2pp
dENvZGVNYXBFbmNvZGVyLmFwcGVuZChtX2J5dGVjb2RlT2Zmc2V0LCBkaWZmZXJlbmNlQmV0d2Vl
bihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjZW5kaWYKKwogICAgICAgICBzd2l0Y2ggKG1f
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpKSB7
CiAgICAgICAgIERFRklORV9CSU5BUllfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5F
X0JJTkFSWV9PUChvcF9pbikKQEAgLTM3Myw3ICszNzgsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAjZW5kaWYKIH0KIAotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpCiB7CiAgICAgdW5zaWduZWQgam1wVGFibGVDb3VudCA9IG1fam1wVGFibGUuc2l6
ZSgpOwpAQCAtNTAyLDYgKzUwNiw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
UHRyKiBmdW4KIHsKICNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogICAgIG1fY2FuQmVP
cHRpbWl6ZWQgPSBtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBpZiAobV9j
YW5CZU9wdGltaXplZCkKKyAgICAgICAgbV9zdGFydE9mQ29kZSA9IGxhYmVsKCk7CiAjZW5kaWYK
ICAgICAKICAgICAvLyBKdXN0IGFkZCBhIGxpdHRsZSBiaXQgb2YgcmFuZG9tbmVzcyB0byB0aGUg
Y29kZWdlbgpAQCAtNjQyLDYgKzY0OCwxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuCiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbV9jb2RlQmxv
Y2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mb1tpXS5wcm9w
ZXJ0eUFjY2Vzc0luZGV4KS5jYWxsUmV0dXJuTG9jYXRpb247CiAgICAgfQogCisjaWYgRU5BQkxF
KFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7
CisjZW5kaWYKKwogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJp
dHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2Rl
ZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNT
QUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwg
bm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGlj
X2Nhc3Q8aW50PihhY3R1YWwpKTsKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgpAQCAtMTA1NCw2ICsxMDU1
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShUSUVSRURfQ09NUElM
QVRJT04pCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKKyAgICAgICAgTGFiZWwgbV9z
dGFydE9mQ29kZTsKKyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgbV9qaXRDb2Rl
TWFwRW5jb2RlcjsKICNlbmRpZgogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZp
c2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw2ICsxOTIsOSBAQCBKU0dsb2JhbERhdGE6OkpT
R2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikKICAgICAs
IGludGVycHJldGVyKDApCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBTaXplKQorI2lmIEVOQUJMRShU
SUVSRURfQ09NUElMQVRJT04pCisgICAgLCBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1
ZmZlcigwKQorI2VuZGlmCiAgICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCiAgICAgLCBjYWNo
ZWRVVENPZmZzZXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkKICAg
ICAsIG1heFJlZW50cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBlU21h
bGwgPyBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRyeURl
cHRoKQpAQCAtMzU3LDYgKzM2MCwxMSBAQCBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQog
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBkZWxldGUgbV9ydFRyYWNlTGlzdDsKICNl
bmRpZgorCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgb3NyU2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZhc3RG
cmVlKG9zclNjcmF0Y2hCdWZmZXJzW2ldKTsKKyNlbmRpZgogfQogCiBQYXNzUmVmUHRyPEpTR2xv
YmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBl
IHR5cGUsIEhlYXBTaXplIGhlYXBTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2
ICsyMzUsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBpbnQ2
NF90IGRlYnVnRGF0YUJ1ZmZlcls2NF07CiAjZW5kaWYKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJ
TEFUSU9OKQorICAgICAgICBWZWN0b3I8aW50NjRfdCo+IG9zclNjcmF0Y2hCdWZmZXJzOworICAg
ICAgICBzaXplX3QgbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXI7CisgICAgICAg
IAorICAgICAgICBpbnQ2NF90KiBvc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZSh1bnNpZ25lZCBudW1i
ZXJPZlNsb3RzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mU2xvdHMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChu
dW1iZXJPZlNsb3RzID4gbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsKKyAg
ICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhv
bG9neSBieSBlbnN1cmluZworICAgICAgICAgICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdlIGdl
dCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAv
LyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgICAg
IC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXplKSAqIDQuCisgICAgICAgICAgICAgICAgbnVtYmVy
T2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIgPSBudW1iZXJPZlNsb3RzICogMjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvc3JTY3JhdGNoQnVmZmVycy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8aW50NjRfdCo+KGZhc3RNYWxsb2Moc2l6ZW9mKGludDY0X3QpICogbnVtYmVyT2ZT
bG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBvc3JTY3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAgICAg
IH0KKyNlbmRpZgogI2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwgT3Bh
cXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gOTQ5MTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDcgKzExOSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBl
KEUKICNpZm5kZWYgTkRFQlVHCiBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpCiB7Ci0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMzI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
aXplID0gNjQ7CiAgICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CiAKICAgICBpZiAo
ISp0aGlzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24g
OTQ5MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk1Nyw3ICs5NTcsNyBAQAogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChFTkFCTEVf
VElFUkVEX0NPTVBJTEFUSU9OKQotI2RlZmluZSBFTkFCTEVfVElFUkVEX0NPTVBJTEFUSU9OIDAK
KyNkZWZpbmUgRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTiAxCiAjZW5kaWYKIAogLyogQ3VycmVu
dGx5IG9ubHkgaW1wbGVtZW50ZWQgZm9yIEpTVkFMVUU2NCwgb25seSB0ZXN0ZWQgb24gUExBVEZP
Uk0oTUFDKSAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106988</attachid>
            <date>2011-09-10 16:35:08 -0700</date>
            <delta_ts>2011-09-10 17:50:38 -0700</delta_ts>
            <desc>the patch - once again, changed Platform.h</desc>
            <filename>osr_patch_8.diff</filename>
            <type>text/plain</type>
            <size>91265</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBERkcgSklUIGNvbXBsZXRlbHkgdW5kb2VzIHNwZWN1bGF0aXZlIGNvbXBpbGF0
aW9uIGV2ZW4gaW4gdGhlIGNhc2Ugb2YKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3
IEBACiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIy
MDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBG
RDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07
CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgyRTM5MTQxQUIx
NEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBh
Y3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtNzg5LDYgKzc5
MCw3IEBACiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFF
MTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRjE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlD
OTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyog
SlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1NzAsNyBA
QAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyog
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5
MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTIzODIsNiAr
MjM4NSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4
MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQ29kZUJs
b2NrX2gKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFw
LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgi
CiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29kZU1hcChQYXNz
T3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAgICAgIENvbXBh
Y3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSU5U
RVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiBy
ZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1h
cD4gbV9qaXRDb2RlTWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CiAj
ZW5kaWYKQEAgLTY2Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1i
b2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2Fs
dGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAgICAgIE93blB0
cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsK
ICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5MTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1f
Y29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50
KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2Rl
T3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4
KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBp
dCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdl
bmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3Vy
ZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2Rl
SW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4
ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAg
bV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3LDcgQEAgcHJp
dmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0
SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVu
ZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM5
Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkK
ICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFw
aC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4
LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0
ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQwMiw3ICs0MDYs
NyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywg
Tm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAg
Tm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwg
aW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNz
ZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Tm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIs
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1f
bnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
ID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29t
cGlsZU90aGVyIH07CiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENv
ZGVXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgc3dpdGNoIChj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpIHsK
KyAgICAgICAgY2FzZSAxMTE3NjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAogICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgR3Jh
cGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7
CiAgICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVn
aXN0ZXJzID0gOTsKIAogICAgIC8vIFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4K
KyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0
ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9
IFg4NlJlZ2lzdGVyczo6cjEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVn
aXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ5MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NCwxMiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7
CiAgICAgfQogCi0jaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8g
VGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0
dWFsIHJlZ2lzdGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5v
ZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAg
dW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkg
ewotICAgICAgICBwcmludGYoIiUgNGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwg
b3BOYW1lKG9wKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0g
IXJlZkNvdW50OwogICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsK
LSAgICBpZiAobXVzdEdlbmVyYXRlKQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAg
QVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBF
eGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3
LDggKzc2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAg
IC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3Rh
bnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBp
bnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAg
LSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJs
b2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlz
cGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRo
ZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0
aW9ucy4KLSAgICBwcmludGYoIiUgNGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdl
bmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkp
CisgICAgcHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAi
ICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCBy
ZWZDb3VudCk7CisgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAg
IHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAg
IHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MjYsMTcgKzExMjYsMTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBu
bwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVy
OjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2so
c2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9u
SW5mbyk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxs
V2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21f
Y29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3Mp
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0
aW9uSW5mbyk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAg
ICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xMTQ0LDcgKzExNDQsNyBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmNvZGVPcmlnaW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9u
Q2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDkx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MDcsNyArOTA3LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhj
ZXB0aW9uSW5mbyk7CisgICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2lu
KTsKICAgICB9CiAKICAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNiArMTAwLDM0MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXgg
bm9kCiAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIp
OwogfQogCisjaWYgREZHX09TUgordm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQoreworICAg
IC8vIDEpIFByby1mb3JtYSBzdHVmZi4KKyAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKKwor
I2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3Ig
Tm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KWV4aXQubV9ub2Rl
SW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyAgICBleGl0LmR1
bXAoc3RkZXJyKTsKKyNlbmRpZgorI2lmIERGR19KSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJ
TFVSRQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19WRVJCT1NFX1NQ
RUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVn
SW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgZGVidWdJbmZvLT5j
b2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1Z0luZm8tPmRlYnVnT2Zmc2V0ID0gZGVi
dWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1
bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZv
cm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBh
biBvcGVyYXRpb24KKyAgICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlm
eWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJS
ZWcgYWxyZWFkeUJveGVkID0gSW52YWxpZEdQUlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3Zlcnkp
IHsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3Bl
Y3VsYXRpdmVBZGQ6CisgICAgICAgICAgICBzdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5
LT5kZXN0KCkpOworICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292
ZXJ5LT5kZXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgeG9yUHRyKFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgRmlndXJlIG91
dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVy
eSBHUFIvRlBSCisgICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5
IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBl
dmVyeSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisg
ICAgLy8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYg
dGhlcmUgYXJlIGFueSBjb25zdGFudHMsCisgICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywg
YW55IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCisgICAgICAgICAgICAKKyAgICBW
ZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBm
YWxzZTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0g
MDsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOwor
ICAgIAorICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9z
dCBPU1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKKyAgICAvLyBJbnQzMnMsIGhhdmUgbm8g
RlBScywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQor
ICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdz
IHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAorICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBj
b2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgorICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMnMg
PSBmYWxzZTsKKyAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQ29uc3Rh
bnRzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CisgICAgCisgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICBu
dW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgIEFTU0VSVCgo
aW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDApOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQgbGlrZSB0byBzdG9yZSB0byB0aGlzIHZpcnR1YWwg
cmVnaXN0ZXIgYmVmb3JlIGRvaW5nCisgICAgICAgICAgICAvLyB2aXJ0dWFsIHJlZ2lzdGVyIHNo
dWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyCisgICAgICAg
ICAgICAvLyBpcyBwb2lzb25lZDogaXQgY2Fubm90IGJlIHN0b3JlZCB0byB1bnRpbCBhZnRlciBk
aXNwbGFjZWQgdmlydHVhbAorICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIGFyZSBoYW5kbGVkLiBX
ZSB0cmFjayBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVyIGNhcmVmdWxseQorICAgICAgICAgICAg
Ly8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBlZmZpY2llbnRseS4gTm90ZSB0aGF0IHdlIGV4cGVj
dCB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRvIGJlIHJhcmUsIHNvIHRoZSBoYW5kbGluZyBv
ZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyBpbgorICAgICAgICAgICAgLy8gd2hpY2gg
aXQgZG9lcyBub3QgaGFwcGVuLgorICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0udGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAg
IGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKys7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGhhdmVVbmJveGVk
SW50MzJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgSW5GUFI6CisgICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAg
aGF2ZUNvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQo
KS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludDY0X3QqIHNjcmF0
Y2hCdWZmZXIgPSBnbG9iYWxEYXRhKCktPm9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bWJlck9m
UG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNl
ZFZpcnR1YWxSZWdpc3RlcnMpKTsKKworICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNz
dW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCisgICAg
Ly8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9y
ZWQuCisgICAgCisgICAgLy8gNCkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCisg
ICAgCisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVy
eShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hl
ZEludDMySW5HUFIgJiYgcmVjb3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVkKQorICAgICAgICAg
ICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3By
KCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDUpIER1bXAgYWxsIG5vbi1wb2lz
b25lZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywgc2F2ZSB0aGVtIGludG8gdGhlIHNjcmF0Y2gg
c3RvcmFnZS4KKyAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hh
bmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0CisgICAgLy8gICAgbW9z
dCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVk
cyB0byBiZSBkdW1wZWQuCisgICAgCisgICAgdW5zaWduZWQgc2NyYXRjaEluZGV4ID0gMDsKKyAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsg
KytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Cisg
ICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAg
c3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVjb3ZlcnkuZ3By
KCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgYWxsIEdQUnMgYXJlIGF2YWlsYWJsZSBm
b3Igc2NyYXRjaCB1c2UuCisgICAgCisgICAgaWYgKGhhdmVGUFJzKSB7CisgICAgICAgIC8vIDYp
IEJveCBhbGwgZG91YmxlcyAocmVsaWVzIG9uIHRoZXJlIGJlaW5nIG1vcmUgR1BScyB0aGFuIEZQ
UnMpCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigpOworICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChm
cHIpKTsKKyAgICAgICAgICAgIGJveERvdWJsZShmcHIsIGdwcik7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIDcpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmls
ZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBpZgorICAgICAgICAvLyAgICB0aGUgZGVzdGlu
YXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KKyAgICAgICAgCisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LmZw
cigpKSk7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAg
ICAgICAgICAgc3RvcmVQdHIoZ3ByLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKGdwciwgYWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDgpIFJlc2h1ZmZsZSBkaXNwbGFj
ZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8g
ICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUg
dGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVy
cy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Cisg
ICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMg
dG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAg
ICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgICAg
IHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUo
KSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAw
OworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAvLyBmb3Ig
c3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNjb3ZlciB0
aGF0CisgICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZhbHVl
cyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgICAgICAvLyBzcGlsbGVkIHJlYWxseSBl
bmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgorICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBidXQg
cHJvYmFibHkgbm90CisgICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQgY29y
cmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgIC8vIHRo
ZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiB2YWx1
ZXMsIGxpa2UKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAxIC0+IDIKKyAgICAgICAg
ICAgIC8vIDIgLT4gMQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEl0IGFjY29tcGxp
c2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3RlcnMK
KyAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlvbnMgYW5kIGRy
b3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCisgICAgICAgICAgICAvLyBsb2NhdGlvbiBpbiBtZW1v
cnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2NhdGlvbgorICAg
ICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCisgICAgICAgIAor
ICAgICAgICAgICAgaW50NjRfdCogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEoKS0+b3NyU2Ny
YXRjaEJ1ZmZlckZvclNpemUobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAg
ICBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKKyAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNoQnVm
ZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBz
dG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMgKyBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIDkpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJz
LgorICAgIAorICAgIHNjcmF0Y2hJbmRleCA9IDA7CisgICAgaWYgKG51bWJlck9mUG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7
IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2
aXJ0dWFsUmVnaXN0ZXJdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJp
YWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgICAg
ICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChzY3Jh
dGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAg
IC8vIDEwKSBEdW1wIGFsbCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNl
IHRoYXQncyBhIGNvbnN0YW50IHdlIHNlZQorICAgIC8vICAgICBvZnRlbi4KKworICAgIGlmICho
YXZlQ29uc3RhbnRzKSB7CisgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBh
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gMTEpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29k
ZSBvcGVyYXRpb24gaW50byByZWdUMC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVy
YW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUklu
Zm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyAxMikgRml4IGNhbGwgZnJh
bWUuCisgICAgCisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAgICAKKyAgICAvLyAxMykgSnVtcCBpbnRv
IHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgorICAgIAorICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2Rl
SW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhp
dC5tX2J5dGVjb2RlSW5kZXgpOworICAgIAorICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICBBU1NF
UlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAg
ICAKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRD
b2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAg
ICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIp
OworICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIGp1bXAoR1BSSW5mbzo6cmVnVDEpOworCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIC0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKKyNlbmRpZgor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1
bGF0aXZlKQoreworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWRD
b2RlTWFwOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0
Q29kZU1hcCgpKTsKKyAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgp
LT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIAorICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJh
dG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKKyAgICBPU1JF
eGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5k
KCk7CisgICAgCisgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgeworICAgICAgICBj
b25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZl
V2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNv
dmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICArK2V4aXRzSXRlcjsKKyAgICB9
Cit9CisjZWxzZSAvLyBERkdfT1NSCiBjbGFzcyBHZW5lcmFsaXplZFJlZ2lzdGVyIHsKIHB1Ymxp
YzoKICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyKCkgeyB9CkBAIC04MDMsNiArMTEzOSw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlvbkNoZWNrcygKICAgICBBU1NFUlQoIShjaGVj
a3NJdGVyICE9IGNoZWNrc0VuZCkpOwogICAgIEFTU0VSVCghKGVudHJpZXNJdGVyICE9IGVudHJp
ZXNFbmQpKTsKIH0KKyNlbmRpZiAvLyBERkdfT1NSCiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVFbnRyeSgpCiB7CkBAIC04NDQsMTIgKzExODEsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkoKQogICAgIC8vIHRvIGFsbG93IGl0IHRvIGNoZWNrIHdoaWNoIG5vZGVzIGluIHRo
ZSBncmFwaCBtYXkgYmFpbCBvdXQsIGFuZCBtYXkgbmVlZCB0byByZWVudGVyIHRoZQogICAgIC8v
IG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGlmIChjb21waWxlZFNwZWN1bGF0aXZlKSB7Cisj
aWYgREZHX09TUgorICAgICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOworI2Vsc2UKICAg
ICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcihzcGVjdWxh
dGl2ZS5zcGVjdWxhdGlvbkNoZWNrcygpKTsKICAgICAgICAgTm9uU3BlY3VsYXRpdmVKSVQgbm9u
U3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxlKGNoZWNr
SXRlcmF0b3IpOwogCiAgICAgICAgIC8vIExpbmsgdGhlIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVj
dWxhdGl2ZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBu
b24tc3BlY3VsYXRpdmUgb25lLgogICAgICAgICBsaW5rU3BlY3VsYXRpb25DaGVja3Moc3BlY3Vs
YXRpdmUsIG5vblNwZWN1bGF0aXZlKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IElmIGNvbXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cg
YXdheSB0aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKQEAg
LTg1OCw4ICsxMTk5LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAg
ICAgbV9tZXRob2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRp
dmVQYXRoQmVnaW4pOwogCisjaWYgREZHX09TUgorICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5k
ZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9yOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRpb25DaGVj
a1ZlY3RvciBub0NoZWNrczsKICAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3Ig
Y2hlY2tJdGVyYXRvcihub0NoZWNrcyk7CisjZW5kaWYKICAgICAgICAgTm9uU3BlY3VsYXRpdmVK
SVQgbm9uU3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxl
KGNoZWNrSXRlcmF0b3IpOwogICAgIH0KQEAgLTkwNyw3ICsxMjUyLDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fY2FsbHNbaV0u
bV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJldHVybkFk
ZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQobV9jYWxsc1tpXS5t
X2NhbGwpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8gPSBtX2NhbGxz
W2ldLm1fZXhjZXB0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25J
bmZvID0gbV9jYWxsc1tpXS5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNldCwgZXhjZXB0aW9u
SW5mbykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsNyBAQCBjbGFzcyBTcGVjdWxhdGlvblJlY292ZXJ5OwogCiBzdHJ1Y3QgRW50cnlMb2Nh
dGlvbjsKIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrOworc3RydWN0IE9TUkV4aXQ7CiAKICNpZm5k
ZWYgTkRFQlVHCiB0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQKShFeGVjU3Rh
dGUqLCB2b2lkKik7CkBAIC04MiwyMSArODMsMjEgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAg
IH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgd2l0aCBhbiBleGNlcHRpb24gaGFu
ZGxlci4KLSAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywgRXhjZXB0
aW9uSW5mbyBleGNlcHRpb25JbmZvKQorICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2Vw
dGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwp
CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNo
ZWNrKGV4Y2VwdGlvbkNoZWNrKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1faGFu
ZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0b3Ig
Zm9yIGEgY2FsbCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25zLCBidXQgd2hpY2ggYXJlIGhhbmRs
ZWQKICAgICAvLyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdGhlIGluLWxpbmUg
ZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvKQor
ICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVu
Y3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAg
ICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhl
eGNlcHRpb25JbmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTA0LDcgKzEw
NSw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2Nh
bGw7CiAgICAgRnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBtX2V4Y2VwdGlvbkNoZWNrOwotICAgIEV4Y2VwdGlvbkluZm8gbV9leGNlcHRpb25JbmZvOwor
ICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYW5kbGVzRXhjZXB0aW9u
czsKIH07CiAKQEAgLTE5Miw5ICsxOTMsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gTm90
aWZ5IHRoZSBKSVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgotICAg
IHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAg
dm9pZCBub3RpZnlDYWxsKENhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsK
LSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0cigpLCBl
eGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwg
RnVuY3Rpb25QdHIoKSwgY29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMjA1LDIw
ICsyMDYsMjAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20g
SklUIGNvZGUsIHdpdGggYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4
Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0
IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAg
ICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9u
Q2hlY2sgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcygmZ2xvYmFsRGF0
YSgpLT5leGNlcHRpb24pKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOworICAg
ICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4
Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7
CiAgICAgfQogICAgIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGgg
YSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMg
emVyby4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1
bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsIGFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlv
biwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgQ2FsbCBmdW5jdGlvbkNh
bGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRy
KFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVy
biBmdW5jdGlvbkNhbGw7CiAgICAgfQogICAgIApAQCAtMzExLDkgKzMxMiw5IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9tZXRob2RHZXRzLmFwcGVuZChNZXRob2RHZXRSZWNvcmQoc2xvd0NhbGwsIHN0
cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlv
bikpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxs
IHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2Fs
bCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2Fs
bFJlY29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2Fs
bCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgY29kZU9yaWdpbikpOwogICAgIH0K
IAogcHJpdmF0ZToKQEAgLTMyNiw4ICszMjcsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxO
dW1lcmljVG9Eb3VibGUoTm9kZUluZGV4LCBGUFJSZWcsIEdQUlJlZyB0ZW1wb3JhcnkpOwogICAg
IHZvaWQgZmlsbEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwgR1BSUmVnKTsKICAgICB2b2lkIGZp
bGxUb0pTKE5vZGVJbmRleCwgR1BSUmVnKTsKKyAgICAKKyNpZiBERkdfT1NSCisgICAgdm9pZCBl
eGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5
KiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKTsKKyAg
ICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYpOworI2Vsc2UKICAgICB2b2lkIGp1
bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2sm
LCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIE5vZGVUb1JlZ2lz
dGVyTWFwJiBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYgZW50cnlO
b2RlVG9SZWdpc3Rlck1hcCk7CiAgICAgdm9pZCBsaW5rU3BlY3VsYXRpb25DaGVja3MoU3BlY3Vs
YXRpdmVKSVQmLCBOb25TcGVjdWxhdGl2ZUpJVCYpOworI2VuZGlmCiAKICAgICAvLyBUaGUgZ2xv
YmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgogICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwpAQCAtMzg2LDEyICszOTMsMTIgQEAgcHJpdmF0
ZToKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAgICAgICBKU0Nh
bGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdl
dFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgICAgICBK
U0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAg
ICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCiAgICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xv
d0NhbGwpCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQogICAg
ICAgICAgICAgLCBtX2lzQ2FsbChpc0NhbGwpCi0gICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5m
byhleGNlcHRpb25JbmZvKQorICAgICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMzk5LDcgKzQwNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgIENhbGwgbV9zbG93Q2FsbDsKICAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFy
Z2V0VG9DaGVjazsKICAgICAgICAgYm9vbCBtX2lzQ2FsbDsKLSAgICAgICAgdW5zaWduZWQgbV9l
eGNlcHRpb25JbmZvOworICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICB9Owog
CiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ5MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKLS8v
IEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGlu
ZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCisvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBp
bmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cg
Z3JhcGhzLiBTZXQgdG8gMSBmb3IgYmFzaWMgdmVyYm9zaXR5LCBvciB0byAyIGZvciBtb3JlIHZl
cmJvc2l0eS4KICNkZWZpbmUgREZHX0RFQlVHX1ZFUkJPU0UgMAogLy8gRW5hYmxlIGdlbmVyYXRp
b24gb2YgZHluYW1pYyBjaGVja3MgaW50byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLgogI2lmICFB
U1NFUlRfRElTQUJMRUQKQEAgLTUwLDYgKzUwLDggQEAKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FM
X0RJU0JBTEUgMAogLy8gRGlzYWJsZSB0aGUgU3BlY3VsYXRpdmVKSVQgd2l0aG91dCBoYXZpbmcg
dG8gdG91Y2ggUGxhdGZvcm0uaCEKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEVfU1BF
Q1VMQVRJVkUgMAorLy8gRGlzYWJsZSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCBhbmQgdXNlIE9T
UiBpbnN0ZWFkLgorI2RlZmluZSBERkdfT1NSIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAv
LyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2luZyB1c2Ug
b2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24gdGhlIGhvdCBwYXRoLgogI2RlZmluZSBE
RkdfU1VDQ0VTU19TVEFUUyAwCiAKQEAgLTcyLDkgKzc0LDMyIEBAIENPTVBJTEVfQVNTRVJUKHNp
emVvZihWaXJ0dWFsUmVnaXN0ZXIpID0KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3Rh
dGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAotLy8gSW5mb3JtYXRpb24g
dXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2Ug
aW5mb3JtYXRpb24uCisvLyBJbmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhj
ZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZvcm1hdGlvbiwKKy8vIGFuZCB0byBpbXBs
ZW1lbnQgT1NSLgogLy8gKFByZXNlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4
KS4KLXR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKK2NsYXNzIENvZGVPcmlnaW4gewor
cHVibGljOgorICAgIENvZGVPcmlnaW4oKQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBDb2RlT3JpZ2luKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDog
bV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAorICAgIHVpbnQzMl90IGJ5dGVjb2Rl
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdWludDMy
X3QgbV9ieXRlY29kZUluZGV4OworfTsKIAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51
bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkg
bm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2Vu
ZXJhdGUsIGlzIGNvbnN0YW50LCBldGMpLgpAQCAtMzU3LDkgKzM4Miw5IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogCiAgICAgLy8gQ29uc3RydWN0IGEg
bm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2Rl
KE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBjaGls
ZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMg
PSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBO
b2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2Vw
dGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAg
ICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewpAQCAtMzcwLDkgKzM5NSw5IEBAIHN0cnVjdCBO
b2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGls
ZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2Vw
dGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBp
bW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwg
ZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1
ZSkKQEAgLTM4NCw5ICs0MDksOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29u
c3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFs
dWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywg
T3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAg
ICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5t
X3ZhbHVlKQpAQCAtMzk5LDkgKzQyNCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAg
ICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVu
IGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUg
b3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0y
LCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKKyAgICBOb2RlKFZh
ckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEs
IE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikK
ICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8p
CisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQog
ICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTY0Myw2ICs2NjgsMTQgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CiAgICAgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIGEgZmFzdCBjaGVjayBvbiB0aGUgZmlyc3Qg
Y2hpbGQKKyAgICAvLyBiZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUuIFVz
ZSB0aGlzIHdpdGggY2FyZSBhbmQKKyAgICAvLyBhdm9pZCBpdCBpZiBwb3NzaWJsZS4KKyAgICBO
b2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZHJl
bi5maXhlZC5jaGlsZDE7CisgICAgfQogCiAgICAgTm9kZUluZGV4IGNoaWxkMigpCiAgICAgewpA
QCAtNjcxLDcgKzcwNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAvLyBUaGlzIGVudW0gdmFsdWUg
ZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwogICAgIC8v
IFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRs
eSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KLSAgICBFeGNlcHRpb25JbmZvIGV4
Y2VwdGlvbkluZm87CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVyZW5j
ZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Igbm8gY2hpbGQpLgogICAgIHVuaW9uIHsKICAg
ICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzQsNiArNDM0LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5v
ZAogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRl
eEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBub2RlKQogeworI2lmIERGR19PU1IKKyAg
ICBVTlVTRURfUEFSQU0oY2hlY2tJdGVyYXRvcik7CisjZWxzZQogICAgIC8vIENoZWNrIGZvciBz
cGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0
aGUKICAgICAvLyBzcGVjdWxhdGl2ZSBwYXRoLiBEbyBub3QgY2hlY2sgZm9yIE5vZGVJbmRleCAw
LCBzaW5jZSB0aGlzIGlzIGNoZWNrZWQKICAgICAvLyBpbiB0aGUgb3V0ZXJtb3N0IGNvbXBpbGUg
bGF5ZXIsIGF0IHRoZSBoZWFkIG9mIHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aApAQCAtNDQyLDYg
KzQ0NSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAv
LyBhcyBzcGVjdWxhdGlvbiBjaGVja3MgYXQgdGhpcyBpbmRleCkuCiAgICAgaWYgKG1fY29tcGls
ZUluZGV4ICYmIGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkK
ICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgTm9kZVR5
cGUgb3AgPSBub2RlLm9wOwogCkBAIC0xMjgzLDggKzEyODcsMTAgQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hlY2tJdGVyYXRvcikKIHsKICAgICAv
LyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGFkZGVkIGF0IGZ1bmN0aW9uIGVudHJ5IChj
aGVja2luZyBhcmd1bWVudCB0eXBlcykuCisjaWYgIURGR19PU1IKICAgICBpZiAoY2hlY2tJdGVy
YXRvci5oYXNDaGVja0F0SW5kZXgobV9jb21waWxlSW5kZXgpKQogICAgICAgICB0cmFja0VudHJ5
KG1faml0LmxhYmVsKCkpOworI2VuZGlmCiAKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsK
ICAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5z
aXplKCk7ICsrbV9ibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NiArMTQ0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAg
IHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCisjaWYgIURGR19PU1IKIFNwZWN1bGF0aW9uQ2hl
Y2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2NoZWNrKGNoZWNr
KQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKQEAgLTE3MCw2ICsxNzEs
NzMgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICAg
ICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KIH0K
KyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBv
dXQpIGNvbnN0Cit7CisgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsK
K30KKwordm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluR1BS
OgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAg
ZnByaW50ZihvdXQsICJpbnQzMiglJSVzKSIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEluRlBSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUl
JXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIqJWQiLCB2
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9udEtub3c6CisgICAgICAgIGZwcmludGYob3V0LCAi
ISIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKG91dCwg
Ij8lZCIsIHRlY2huaXF1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2VuZGlmCisK
KyNpZiBERkdfT1NSCitPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNr
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorICAgIDogbV9j
aGVjayhjaGVjaykKKyAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCisgICAg
LCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAgLCBtX3Jl
Y292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1
bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkp
CisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sKKyAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1
bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0g
PSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRd
KTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGpp
dC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOwor
fQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5kdW1w
KG91dCk7CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlh
YmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAg
ICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXS5kdW1wKG91dCk7Cit9CisjZW5kaWYKKyNlbmRpZgog
CiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewpAQCAtNjUwLDYgKzcxOCwzMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBTZXRMb2NhbDogeworICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0
byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCisgICAgICAgIC8vIGFzIGEgc3BlY3Vs
YXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKKyAg
ICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGlu
IHRoZSB2aXJ0dWFsCisgICAgICAgIC8vIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIGNvbXBpbGVN
b3ZIaW50KG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgZmFyIGFzIE9TUiBpcyBjb25j
ZXJuZWQsIHdlJ3JlIG9uIHRoZSBieXRlY29kZSBpbmRleCBjb3JyZXNwb25kaW5nCisgICAgICAg
IC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkgImV4ZWN1
dGVkIiB0aGUKKyAgICAgICAgLy8gU2V0TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERGRyBOb2Rl
cyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lCisgICAgICAgIC8vIGJ5dGVjb2RlIGluZGV4
IGFzIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9
PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgTm9kZSYgbmV4dE5v
ZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4KzFdOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmIHdlIGV2ZXIgZW1pdCBtdWx0aXBsZSBTZXRM
b2NhbCdzIGZvcgorICAgICAgICAvLyBhIHNpbmdsZSBieXRlY29kZSBpbnN0cnVjdGlvbi4gVGhh
dCdzIHVubGlrZWx5IHRvIGhhcHBlbi4gQnV0IGlmCisgICAgICAgIC8vIGl0IGRvZXMsIHRoZSBz
b2x1dGlvbiBpcyB0byB0byBoYXZlIHRoaXMgcGVyZm9ybSBhIHNlYXJjaCB1bnRpbAorICAgICAg
ICAvLyBpdCBmaW5kcyBhIE5vZGUgd2l0aCBhIGRpZmZlcmVudCBieXRlY29kZSBpbmRleCBmcm9t
IHRoZSBvbmUgd2UndmUKKyAgICAgICAgLy8gZ290LCBhbmQgdG8gYWJzdHJhY3RseSBleGVjdXRl
IHRoZSBTZXRMb2NhbCdzIGFsb25nIHRoZSB3YXkuIE9yLAorICAgICAgICAvLyBiZXR0ZXIgeWV0
LCBoYW5kbGUgYWxsIG9mIHRoZSBTZXRMb2NhbCdzIGF0IG9uY2U6IGFic3RyYWN0IGludGVycHJl
dAorICAgICAgICAvLyBhbGwgb2YgdGhlbSwgdGhlbiBlbWl0IGNvZGUgZm9yIGFsbCBvZiB0aGVt
LCB3aXRoIE9TUiBleGl0aW5nIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IG5vbi1TZXRMb2NhbCBp
bnN0cnVjdGlvbi4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9TUiAhPSBuZXh0
Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSk7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRl
eEZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAK
ICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQ
cmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CkBAIC02NzAsNiArNzYyLDEwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRy
KHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAg
ICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0
cmlldmUgdGhlIHZhbHVlIG9mCisgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJv
bSByZWdpc3RlcnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLgorICAg
ICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVl
U291cmNlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTM2OSwxMSArMTQ2NSwxOSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICB9Ci0KKyAgICAKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2Rl
Lm11c3RHZW5lcmF0ZSgpKQogICAgICAgICB1c2UobV9jb21waWxlSW5kZXgpOwogfQogCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQoreworICAgIEFTU0VS
VChub2RlLm9wID09IFNldExvY2FsKTsKKyAgICAKKyAgICBzZXROb2RlSW5kZXhGb3JPcGVyYW5k
KG5vZGUuY2hpbGQxKCksIG5vZGUubG9jYWwoKSk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5v
ZGUubG9jYWwoKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2Nr
JiBibG9jaykKIHsKICAgICBBU1NFUlQobV9jb21waWxlT2theSk7CkBAIC0xMzgyLDM1ICsxNDg2
LDc0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBERkdf
SklUX0JSRUFLX09OX0VWRVJZX0JMT0NLCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlm
CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdmFyaWFi
bGVzW2ldID0gVmFsdWVTb3VyY2UoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKICAgICBmb3IgKDsgbV9jb21waWxl
SW5kZXggPCBibG9jay5lbmQ7ICsrbV9jb21waWxlSW5kZXgpIHsKICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdOwotICAgICAgICBpZiAoIW5vZGUuc2hv
dWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKyAgICAgICAg
bV9ieXRlY29kZUluZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsK
KyAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKICNpZiBERkdfREVCVUdfVkVS
Qk9TRQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcg
Tm9kZSBAJWQgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbV9q
aXQuZGVidWdPZmZzZXQoKSk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0
aXZlSklUIHNraXBwaW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgICAi
LCAoaW50KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBt
X2ppdC5kZWJ1Z09mZnNldCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0g
U2V0TG9jYWwpCisgICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChi
YyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYK
ICNpZiBERkdfSklUX0JSRUFLX09OX0VWRVJZX05PREUKLSAgICAgICAgbV9qaXQuYnJlYWtwb2lu
dCgpOworICAgICAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCi0gICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgY29tcGlsZShub2RlKTsKLSAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KSB7CisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
ICAgICBjb21waWxlKG5vZGUpOworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KSB7CiAj
aWYgRU5BQkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OKQotICAgICAgICAgICAgbV9j
b21waWxlT2theSA9IHRydWU7Ci0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVu
ZDsKLSAgICAgICAgICAgIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKKyAgICAgICAgICAgICAgICBt
X2NvbXBpbGVPa2F5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJs
b2NrLmVuZDsKKyAgICAgICAgICAgICAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7CiAjZW5kaWYK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogI2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAg
ICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIt
PiAlc1xuIiwgZGF0YUZvcm1hdFRvU3RyaW5nKG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFs
UmVnaXN0ZXIoKV0ucmVnaXN0ZXJGb3JtYXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQo
KSkgeworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9u
SW5mb1tub2RlLnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIi0+ICVzLCB2ciMlZCIsIGRhdGFGb3JtYXRUb1N0cmluZyhpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpLCAoaW50KW5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGlm
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgRlBSSW5mbzo6
ZGVidWdOYW1lKGluZm8uZnByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgR1BSSW5mbzo6ZGVidWdO
YW1lKGluZm8uZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgICAgIik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAor
I2lmIERGR19ERUJVR19WRVJCT1NFID49IDIgICAgICAgIAorICAgICAgICBmb3IgKGludCBvcGVy
YW5kID0gLW1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsgb3BlcmFuZCA8IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsrb3Bl
cmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAo
c3RkZXJyKTsKKyAgICAgICAgCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIDogIik7CisgICAg
ICAgIAorICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJp
YWJsZXMuc2l6ZSgpOyArK29wZXJhbmQpCisgICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVy
eUZvcihvcGVyYW5kKS5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyAgICAgIAorI2lmIERGR19ERUJV
R19WRVJCT1NFICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogI2VuZGlmCi0gICAg
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogfQog
CkBAIC0xNDE5LDYgKzE1NjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2lj
QmxvY2smCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogewogICAg
IEFTU0VSVCghbV9jb21waWxlSW5kZXgpOworICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IDA7
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0
ZXJzOyArK2kpIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IChW
aXJ0dWFsUmVnaXN0ZXIpKG1faml0LmNvZGVCbG9jaygpLT50aGlzUmVnaXN0ZXIoKSArIGkpOwog
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpLmdldFBy
ZWRpY3Rpb24odmlydHVhbFJlZ2lzdGVyKTsKQEAgLTE0NTQsNyArMTU5OCw3IEBAIGJvb2wgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwogICAg
IGZvciAobV9ibG9jayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUo
KTsgKyttX2Jsb2NrKSB7CiAgICAgICAgIGNvbXBpbGUoKm1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10pOwotI2lmICFFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisjaWYgIUVOQUJM
RShEWU5BTUlDX1RFUk1JTkFURV9TUEVDVUxBVElPTikKICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC0xNDYzLDYgKzE2MDcs
MTE5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIHJldHVybiB0cnVlOwog
fQogCitWYWx1ZVJlY292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihjb25zdCBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCit7CisgICAgaWYgKCF2YWx1ZVNvdXJj
ZS5pc1NldCgpKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0
ZXJGaWxlKCk7CisKKyAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5k
ZXgoKSkpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1
ZU9mSlNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgIAorICAgIE5vZGUq
IG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKV07CisgICAg
aWYgKCFub2RlUHRyLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIC8vIEl0J3MgbGVnaXRp
bWF0ZWx5IGRlYWQuIEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9w
ZXJhbmQsCisgICAgICAgIC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFrZSB0aGUg
R0MgaGFwcHkgYWZ0ZXIgdGhlIE9TUi4KKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNv
bnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBHZW5lcmF0aW9uSW5mbyog
aW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsK
KyAgICBpZiAoIWluZm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFs
dWVTb3VyY2Uubm9kZUluZGV4KCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBp
cyBhbiBhbHRlcm5hdGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQu
CisgICAgICAgIC8vIFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vCisg
ICAgICAgIC8vIFZhbHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUg
dmFsdWUgaXMgYSBWYWx1ZVRvTnVtYmVyIG5vZGUKKyAgICAgICAgLy8gICAgdGhlbiBpdCBtZWFu
cyB0aGF0IGFsbCByZW1haW5pbmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2ZSBwZXJmb3Jt
ZWQgYQorICAgICAgICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiBUaHVz
LCB3ZSBjYW4gc3Vic3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAgICAgICAvLworICAgICAgICAv
LyBWYWx1ZVRvSW50MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSByZW1haW5pbmcgbGl2ZSB2ZXJz
aW9uIG9mIHRoZSB2YWx1ZSBpcworICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2Ug
Y2FuIHVzZSBpdC4gQnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50MzIKKyAgICAgICAg
Ly8gICAgYW5kIGEgVmFsdWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBWYWx1ZVRv
TnVtYmVyIGJlY2F1c2UgaXQKKyAgICAgICAgLy8gICAgbWVhbnMgdGhhdCBzb21lIHJlbWFpbmlu
ZyB1c2VzIHdvdWxkIGhhdmUgY29udmVydGVkIHRvIG51bWJlciB3aGlsZQorICAgICAgICAvLyAg
ICBvdGhlcnMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFVJbnQzMlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZh
bHVlIGlzIGEgVUludDMyVG9OdW1iZXIKKyAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1h
aW5pbmcgdXNlcyBhcmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisg
ICAgICAgIC8vICAgIHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUgY291bGQg
YmUgYSBVSW50MzJUb051bWJlciwgYnV0IGl0cworICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBp
cyBzdGlsbCBhbGl2ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9m
CisgICAgICAgIC8vICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGlu
dGVybWVkaWF0ZS4KKyAgICAgICAgCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikgeworICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAg
ICAgbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgICAgICBpbmZv
UHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAg
ICAgICAgICAgaWYgKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0g
bm9kZUluZGV4KQorICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
VG9OdW1iZXJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50
MzJJbmRleCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlcklu
ZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZp
cnR1YWxSZWdpc3RlciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6
ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZv
JiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAg
ICAgIGlmICghaW5mby5hbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5n
cmFwaCgpW2luZm8ubm9kZUluZGV4KCldOworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxk
MVVuY2hlY2tlZCgpICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVl
VG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAg
ICAgICB2YWx1ZVRvSW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKKyAg
ICAgICAgICAgIGlmICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAg
ICAgIG5vZGVJbmRleFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OworICAgICAgICAgICAgZWxz
ZSBpZiAodmFsdWVUb0ludDMySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJ
bmRleFRvVXNlID0gdmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh1aW50
MzJUb051bWJlckluZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1Vz
ZSA9IHVpbnQzMlRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbm9kZUluZGV4VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChub2RlSW5kZXhUb1VzZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlUHRyID0g
Jm1faml0LmdyYXBoKClbbm9kZUluZGV4VG9Vc2VdOworICAgICAgICAgICAgICAgIGluZm9QdHIg
PSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkg
PT0gbm9kZUluZGV4VG9Vc2UpOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAg
ICB9CisgICAgCisgICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkpOworCisgICAgaWYgKGluZm9Q
dHItPnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgaWYgKGlu
Zm9QdHItPnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7CisgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0
ZXJGb3JtYXQoKSk7CisgICAgfQorICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERh
dGFGb3JtYXROb25lKQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5S
ZWdpc3RlckZpbGUoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFs
UmVnaXN0ZXIoKSkpOworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5KCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwcml2YXRlOgog
ICAgIEdQUlJlZyBtX3NyYzsKIH07CiAKKyNpZiAhREZHX09TUgogLy8gPT09IFNwZWN1bGF0aW9u
Q2hlY2sgPT09CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0IGZyb20g
dGhlIHNwZWN1bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTYgQEAgc3RydWN0IFNwZWN1bGF0
aW9uQ2hlY2sgewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ss
IDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFERkdfT1NSCiAKK2NsYXNz
IFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAgIDogbV9u
b2RlSW5kZXgoTm9Ob2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVT
b3VyY2UoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5k
ZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAgfQorICAgIAorICAgIE5v
ZGVJbmRleCBub2RlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkp
OworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVC
VUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAorcHJpdmF0
ZToKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7Cit9OworICAgIAorLy8gRGVzY3JpYmVzIGhv
dyB0byByZWNvdmVyIGEgZ2l2ZW4gYnl0ZWNvZGUgdmlydHVhbCByZWdpc3RlciBhdCBhIGdpdmVu
CisvLyBjb2RlIHBvaW50LgorZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHsKKyAgICAvLyBJ
dCdzIGFscmVhZHkgaW4gdGhlIHJlZ2lzdGVyIGZpbGUgYXQgdGhlIHJpZ2h0IGxvY2F0aW9uLgor
ICAgIEFscmVhZHlJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIGEgcmVnaXN0ZXIuCisg
ICAgSW5HUFIsCisgICAgVW5ib3hlZEludDMySW5HUFIsCisgICAgSW5GUFIsCisgICAgLy8gSXQn
cyBpbiB0aGUgcmVnaXN0ZXIgZmlsZSwgYnV0IGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLgorICAg
IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBjb25zdGFudC4KKyAgICBD
b25zdGFudCwKKyAgICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVyIGl0LgorICAgIERvbnRL
bm93Cit9OworCitjbGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoKKyAgICBWYWx1ZVJlY292
ZXJ5KCkKKyAgICAgICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAgICB7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZSgpCisgICAg
eworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5p
cXVlID0gQWxyZWFkeUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3ByLCBEYXRh
Rm9ybWF0IGRhdGFGb3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSk7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICBp
ZiAoZGF0YUZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgIHJlc3VsdC5t
X3RlY2huaXF1ZSA9IFVuYm94ZWRJbnQzMkluR1BSOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmdw
ciA9IGdwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFZhbHVlUmVjb3ZlcnkgaW5GUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIFZhbHVlUmVj
b3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkZQUjsKKyAgICAg
ICAgcmVzdWx0Lm1fc291cmNlLmZwciA9IGZwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgZGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUoVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWcpCisgICAgeworICAgICAgICBWYWx1ZVJlY292
ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdp
c3RlckZpbGU7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmlydHVhbFJl
ZzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVl
UmVjb3ZlcnkgY29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVj
b3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBDb25zdGFudDsKKyAg
ICAgICAgcmVzdWx0Lm1fc291cmNlLmNvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgVmFsdWVSZWNvdmVyeVRl
Y2huaXF1ZSB0ZWNobmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZTsgfQorICAgIAor
ICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVl
ID09IEluR1BSIHx8IG1fdGVjaG5pcXVlID09IFVuYm94ZWRJbnQzMkluR1BSKTsKKyAgICAgICAg
cmV0dXJuIG1fc291cmNlLmdwcjsKKyAgICB9CisgICAgCisgICAgRlBSUmVnIGZwcigpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5GUFIpOworICAgICAgICBy
ZXR1cm4gbV9zb3VyY2UuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9
PSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0
dWFsUmVnOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyNpZm5k
ZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAK
K3ByaXZhdGU6CisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsKKyAgICB1
bmlvbiB7CisgICAgICAgIEdQUlJlZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgICAg
IFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25z
dGFudDsKKyAgICB9IG1fc291cmNlOworfTsKKworI2lmIERGR19PU1IKKy8vID09PSBPU1JFeGl0
ID09PQorLy8KKy8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3Bl
Y3VsYXRpdmUgcGF0aCBieQorLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgorc3RydWN0IE9T
UkV4aXQgeworICAgIE9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklU
KiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG1fY2hlY2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIHVuc2lnbmVk
IG1fYnl0ZWNvZGVJbmRleDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7Cisg
ICAgCisgICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFsdWVSZWNvdmVy
aWVzIHdoaWxlIGJlaW5nCisgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZlcnN1cyB2YXJp
YWJsZS4KKyAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmFsdWVSZWNv
dmVyeSYgdmFsdWVSZWNvdmVyeShpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50c1tpbmRleF07CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleCAtIG1fYXJn
dW1lbnRzLnNpemUoKV07CisgICAgfQorICAgIGJvb2wgaXNBcmd1bWVudChpbnQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICBib29s
IGlzVmFyaWFibGUoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7
IH0KKyAgICBpbnQgYXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaW5kZXg7CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvckluZGV4KGludCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNp
emUoKTsKKyAgICB9CisgICAgaW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMu
c2l6ZSgpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUq
IG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4g
bV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOwor
ICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworfTsKK3R5cGVkZWYgU2VnbWVudGVkVmVjdG9yPE9T
UkV4aXQsIDE2PiBPU1JFeGl0VmVjdG9yOworI2VuZGlmIC8vIERGR19PU1IKIAogLy8gPT09IFNw
ZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTEwNSwyMSArMjk1LDI1IEBAIHR5cGVkZWYgU2VnbWVu
dGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFz
c2VydGVkKSB0aHJvdWdoIHRoZSBkYXRhZmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVi
bGljIEpJVENvZGVHZW5lcmF0b3IgewogICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVj
azsKKyAgICBmcmllbmQgc3RydWN0IE9TUkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1
ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVj
dWxhdGl2ZUpJVChKSVRDb21waWxlciYpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAKICAgICAv
LyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0
aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAhREZH
X09TUgogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3ImIHNwZWN1bGF0aW9uQ2hlY2tzKCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX3NwZWN1bGF0aW9uQ2hlY2tzOwogICAgIH0KKyNlbHNlCisg
ICAgT1NSRXhpdFZlY3RvciYgb3NyRXhpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3Ny
RXhpdHM7CisgICAgfQorI2VuZGlmCiAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogc3BlY3VsYXRp
b25SZWNvdmVyeShzaXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICAvLyBTcGVjdWxhdGlvbkNo
ZWNrOjptX3JlY292ZXJ5SW5kZXggaXMgb2Zmc2V0IGJ5IDEsCkBAIC0xMzksNiArMzMzLDcgQEAg
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKICAgICAKICAgICB2
b2lkIGNvbXBpbGUoTm9kZSYpOworICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOwogICAg
IHZvaWQgY29tcGlsZShCYXNpY0Jsb2NrJik7CiAKICAgICB2b2lkIGNoZWNrQXJndW1lbnRUeXBl
cygpOwpAQCAtMjAzLDcgKzM5OCwxMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOworI2lmICFERkdfT1NSCiAgICAgICAg
IG1fc3BlY3VsYXRpb25DaGVja3MuYXBwZW5kKFNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFpbCwg
dGhpcykpOworI2Vsc2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9G
YWlsLCB0aGlzKSk7CisjZW5kaWYKICAgICB9CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hl
Y2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5
JiByZWNvdmVyeSkKQEAgLTIxMSw3ICs0MTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3NwZWN1bGF0aW9u
UmVjb3ZlcnlMaXN0LmFwcGVuZChyZWNvdmVyeSk7CisjaWYgIURGR19PU1IKICAgICAgICAgbV9z
cGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlz
LCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vsc2UKKyAgICAgICAgbV9v
c3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVj
b3ZlcnlMaXN0LnNpemUoKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4g
d2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KQEAg
LTIzNCwxOCArNDM3LDY1IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4K
ICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1h
dCYgcmV0dXJuRm9ybWF0KTsKLQorICAgIAogICAgIC8vIEl0IGlzIHBvc3NpYmxlLCBkdXJpbmcg
c3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRpb24gaW4gd2hpY2ggd2UK
ICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwg
KGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwogICAgIC8vIHdpbGwgbWFrZSBjb25mbGljdGlu
ZyBzcGVjdWxhdGlvbnMgYWJvdXQgdGhlIHNhbWUgb3BlcmFuZCkuIEluIHN1Y2ggY2FzZXMgdGhp
cwogICAgIC8vIGZsYWcgaXMgY2xlYXJlZCwgaW5kaWNhdGluZyBubyBmdXJ0aGVyIGNvZGUgZ2Vu
ZXJhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4KICAgICBib29sIG1fY29tcGlsZU9rYXk7CisjaWYg
IURGR19PU1IKICAgICAvLyBUaGlzIHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNw
ZWN1bGF0aXZlIHBhdGggdG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAgU3BlY3VsYXRp
b25DaGVja1ZlY3RvciBtX3NwZWN1bGF0aW9uQ2hlY2tzOworI2Vsc2UKKyAgICAvLyBUaGlzIHZl
Y3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIG9s
ZCBKSVQuCisgICAgT1NSRXhpdFZlY3RvciBtX29zckV4aXRzOworI2VuZGlmCiAgICAgLy8gU29t
ZSBiYWlsLW91dHMgbmVlZCB0byByZWNvcmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWNvcmRp
bmcgc3BlY2lmaWMgcmVjb3ZlcnkKICAgICAvLyB0byBiZSBwZXJmb3JtZWQgKGZvciBleGFtcGxl
LCBvbiBkZXRlY3RlZCBvdmVyZmxvdyBmcm9tIGFuIGFkZCwgd2UgbWF5IG5lZWQgdG8KICAgICAv
LyByZXZlcnNlIHRoZSBhZGRpdGlvbiBpZiBhbiBvcGVyYW5kIGlzIGJlaW5nIG92ZXJ3cml0dGVu
KS4KICAgICBWZWN0b3I8U3BlY3VsYXRpb25SZWNvdmVyeSwgMTY+IG1fc3BlY3VsYXRpb25SZWNv
dmVyeUxpc3Q7CisgICAgCisgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNoIG5vZGVzIGFyZSBjdXJy
ZW50bHkgaG9sZGluZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQgYnl0ZWNvZGUKKyAgICAv
LyBvcGVyYW5kLWluZGV4ZWQgdmFyaWFibGVzLgorCisgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3Vy
Y2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
ZXROb2RlSW5kZXhGb3JPcGVyYW5kKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBvcGVyYW5kKQor
ICAgIHsKKyAgICAgICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0g
VmFsdWVTb3VyY2Uobm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIHdp
dGggY2FyZSwgc2luY2UgaXQgYm90aCByZXR1cm5zIGEgcmVmZXJlbmNlIGludG8gYW4gYXJyYXkK
KyAgICAvLyBhbmQgcG90ZW50aWFsbHkgcmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdvdWxkIG5v
dCBiZSByaWdodCB0byBjYWxsIHRoaXMKKyAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3JtIG9w
ZXJhbmRzIG9uIGJvdGggcmVmZXJlbmNlcywgc2luY2UgdGhlIG9uZSBmcm9tCisgICAgLy8gdGhl
IGZpcnN0IGNhbGwgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICBWYWx1ZVNvdXJjZSYgdmFs
dWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1l
bnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1f
dmFyaWFibGVzLnNpemUoKSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5k
ICsgMSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07Cisg
ICAgfQorICAgIAorICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7CisgICAg
VmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0T3Bl
cmFuZDsKKyAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CisgICAgCisgICAgVmFs
dWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwor
CisgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1ZVNvdXJj
ZUZvck9wZXJhbmQob3BlcmFuZCkpOworICAgIH0KIH07CiAKIApAQCAtNDY1LDExICs3MTUsMTcg
QEAgcHJpdmF0ZToKICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCi0KIC8vID09PSBT
cGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciA9PT0KIC8vCiAvLyBUaGlzIGNsYXNzIGlzIHVz
ZWQgYnkgdGhlIG5vbi1zcGVjdWxhdGl2ZSBKSVQgdG8gY2hlY2sgd2hpY2gKIC8vIG5vZGVzIHJl
cXVpcmUgZW50cnkgcG9pbnRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGguCisjaWYgREZHX09T
UgorLy8gVGhpcyBiZWNvbWVzIGEgc3R1YiBpZiBPU1IgaXMgZW5hYmxlZC4KK2NsYXNzIFNwZWN1
bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBTcGVjdWxhdGlvbkNoZWNr
SW5kZXhJdGVyYXRvcigpIHsgfQorfTsKKyNlbHNlCiBjbGFzcyBTcGVjdWxhdGlvbkNoZWNrSW5k
ZXhJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3Io
U3BlY3VsYXRpb25DaGVja1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3MpCkBAIC00OTUsNyArNzUx
LDE3IEBAIHByaXZhdGU6CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9p
dGVyOwogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3I6Okl0ZXJhdG9yIG1fZW5kOwogfTsKKyNl
bmRpZgogCitpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVy
JiBqaXQpCisgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKKyAgICAsIG1fY29tcGls
ZU9rYXkodHJ1ZSkKKyAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJh
bWV0ZXJzKQorICAgICwgbV92YXJpYWJsZXMoaml0LmNvZGVCbG9jaygpLT5tX251bVZhcnMpCisg
ICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisg
ICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpKQoreworfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBhY3RKSVRDb2RlTWFwX2gKKyNk
ZWZpbmUgQ29tcGFjdEpJVENvZGVNYXBfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworLy8gR2l2ZXMgeW91IGEgY29tcHJlc3NlZCBtYXAgYmV0d2Vl
biBiZXR3ZWVuIGJ5dGVjb2RlIGluZGljZXMgYW5kIG1hY2hpbmUgY29kZQorLy8gZW50cnkgcG9p
bnRzLiBUaGUgY29tcHJlc3Npb24gc2ltcGx5IHRyaWVzIHRvIHVzZSBlaXRoZXIgMSwgMiwgb3Ig
NCBieXRlcyBmb3IKKy8vIGFueSBnaXZlbiBvZmZzZXQuIFRoZSBsYXJnZXN0IG9mZnNldCB0aGF0
IGNhbiBiZSBzdG9yZWQgaXMgMl4zMC4KKworLy8gRXhhbXBsZSB1c2U6CisvLworLy8gQ29tcGFj
dEpJVENvZGVNYXA6OkVuY29kZXIgZW5jb2RlcihtYXApOworLy8gZW5jb2Rlci5hcHBlbmQoYSwg
Yik7CisvLyBlbmNvZGVyLmFwcGVuZChjLCBkKTsgLy8gcHJlY29uZGl0aW9uczogYyA+PSBhLCBk
ID49IGIKKy8vIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbWFwID0gZW5jb2Rlci5maW5pc2go
KTsKKy8vCisvLyBBdCBzb21lIGxhdGVyIHRpbWU6CisvLworLy8gVmVjdG9yPEJ5dGVjb2RlQW5k
TWFjaGluZU9mZnNldD4gZGVjb2RlZDsKKy8vIG1hcC0+ZGVjb2RlKGRlY29kZWQpOworCitzdHJ1
Y3QgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0IHsKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQoKSB7IH0KKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRl
Y29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgICAgICwgbV9tYWNoaW5lQ29kZU9mZnNldCht
YWNoaW5lQ29kZU9mZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1fYnl0
ZWNvZGVJbmRleDsKKyAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIAorICAg
IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVJbmRleChCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQqIG1hcHBpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFwcGluZy0+bV9ieXRl
Y29kZUluZGV4OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldE1h
Y2hpbmVDb2RlT2Zmc2V0KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZykKKyAgICB7
CisgICAgICAgIHJldHVybiBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIH0KK307
CisKK2NsYXNzIENvbXBhY3RKSVRDb2RlTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICB+Q29tcGFjdEpJVENvZGVNYXAoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fYnVmZmVyKQorICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGRlY29kZShWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgcmVzdWx0
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNCeXRlY29kZUluZGV4ID0g
MDsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7CisgICAg
ICAgIAorICAgICAgICByZXN1bHQucmVzaXplKG1fbnVtYmVyT2ZFbnRyaWVzKTsKKyAgICAgICAg
dW5zaWduZWQgaiA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bWJl
ck9mRW50cmllczsgKytpKSB7CisgICAgICAgICAgICBwcmV2aW91c0J5dGVjb2RlSW5kZXggKz0g
ZGVjb2RlTnVtYmVyKGopOworICAgICAgICAgICAgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCAr
PSBkZWNvZGVOdW1iZXIoaik7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9ieXRlY29kZUluZGV4
ID0gcHJldmlvdXNCeXRlY29kZUluZGV4OworICAgICAgICAgICAgcmVzdWx0W2ldLm1fbWFjaGlu
ZUNvZGVPZmZzZXQgPSBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVChqID09IG1fc2l6ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBDb21w
YWN0SklUQ29kZU1hcCh1aW50OF90KiBidWZmZXIsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG51
bWJlck9mRW50cmllcykKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgICAgICAsIG1fc2l6ZShzaXplKQorI2VuZGlmCisgICAgICAgICwgbV9udW1i
ZXJPZkVudHJpZXMobnVtYmVyT2ZFbnRyaWVzKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHNpemUpOworICAgIH0KKyAgICAKKyAgICB1aW50OF90IGF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJu
IG1fYnVmZmVyW2luZGV4XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVjb2RlTnVtYmVy
KHVuc2lnbmVkJiBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVl
ID0gYXQoaW5kZXgrKyk7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDEyOCkpCisgICAgICAg
ICAgICByZXR1cm4gaGVhZFZhbHVlOworICAgICAgICBpZiAoIShoZWFkVmFsdWUgJiA2NCkpCisg
ICAgICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWFkVmFsdWUgJiB+MTI4
KSA8PCA4KSB8IGF0KGluZGV4KyspOworICAgICAgICB1bnNpZ25lZCBzZWNvbmQgPSBhdChpbmRl
eCsrKTsKKyAgICAgICAgdW5zaWduZWQgdGhpcmQgID0gYXQoaW5kZXgrKyk7CisgICAgICAgIHVu
c2lnbmVkIGZvdXJ0aCA9IGF0KGluZGV4KyspOworICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihoZWFkVmFsdWUgJiB+KDEyOCArIDY0KSkgPDwgMjQpIHwgKHNlY29uZCA8PCAx
NikgfCAodGhpcmQgPDwgOCkgfCBmb3VydGg7CisgICAgfQorICAgIAorICAgIHVpbnQ4X3QqIG1f
YnVmZmVyOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBtX3NpemU7CisjZW5k
aWYKKyAgICB1bnNpZ25lZCBtX251bWJlck9mRW50cmllczsKKyAgICAKK3B1YmxpYzoKKyAgICBj
bGFzcyBFbmNvZGVyIHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW5jb2Rlcik7Cisg
ICAgcHVibGljOgorICAgICAgICBFbmNvZGVyKCk7CisgICAgICAgIH5FbmNvZGVyKCk7CisgICAg
ICAgIAorICAgICAgICB2b2lkIGVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJlck9mRW50
cmllc1RvQWRkKTsKKyAgICAgICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
dW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpOworICAgICAgICBQYXNzT3duUHRyPENvbXBhY3RK
SVRDb2RlTWFwPiBmaW5pc2goKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9p
ZCBhcHBlbmRCeXRlKHVpbnQ4X3QgdmFsdWUpOworICAgICAgICB2b2lkIGVuY29kZU51bWJlcih1
aW50MzJfdCB2YWx1ZSk7CisgICAgCisgICAgICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgICAg
ICB1bnNpZ25lZCBtX3NpemU7CisgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgICAg
IHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
bV9wcmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNNYWNo
aW5lQ29kZU9mZnNldDsKKyAgICB9OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFbmNv
ZGVyOworfTsKKworaW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNvZGVyKCkK
KyAgICA6IG1fYnVmZmVyKDApCisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fY2FwYWNpdHkoMCkK
KyAgICAsIG1fbnVtYmVyT2ZFbnRyaWVzKDApCisgICAgLCBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRl
eCgwKQorICAgICwgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KDApCit7Cit9CisKK2lubGlu
ZSBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIoKQoreworICAgIGlmIChtX2J1
ZmZlcikKKyAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworfQorICAgICAgICAKK2lubGluZSB2
b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgdW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2Rl
SW5kZXggPj0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtYWNoaW5lQ29k
ZU9mZnNldCA+PSBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQpOworICAgIGVuc3VyZUNhcGFj
aXR5Rm9yKDEpOworICAgIGVuY29kZU51bWJlcihieXRlY29kZUluZGV4IC0gbV9wcmV2aW91c0J5
dGVjb2RlSW5kZXgpOworICAgIGVuY29kZU51bWJlcihtYWNoaW5lQ29kZU9mZnNldCAtIG1fcHJl
dmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSBi
eXRlY29kZUluZGV4OworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IG1hY2hpbmVD
b2RlT2Zmc2V0OworICAgIG1fbnVtYmVyT2ZFbnRyaWVzKys7Cit9CisKK2lubGluZSBQYXNzT3du
UHRyPENvbXBhY3RKSVRDb2RlTWFwPiBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZmluaXNo
KCkKK3sKKyAgICBtX2NhcGFjaXR5ID0gbV9zaXplOworICAgIG1fYnVmZmVyID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgT3du
UHRyPENvbXBhY3RKSVRDb2RlTWFwPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgQ29tcGFjdEpJVENv
ZGVNYXAobV9idWZmZXIsIG1fc2l6ZSwgbV9udW1iZXJPZkVudHJpZXMpKTsKKyAgICBtX2J1ZmZl
ciA9IDA7CisgICAgbV9zaXplID0gMDsKKyAgICBtX2NhcGFjaXR5ID0gMDsKKyAgICBtX251bWJl
ck9mRW50cmllcyA9IDA7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAgIG1f
cHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6
OmFwcGVuZEJ5dGUodWludDhfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXplICsgMSA8PSBt
X2NhcGFjaXR5KTsKKyAgICBtX2J1ZmZlclttX3NpemUrK10gPSB2YWx1ZTsKK30KKyAgICAKK2lu
bGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIodWludDMy
X3QgdmFsdWUpCit7CisgICAgQVNTRVJUKG1fc2l6ZSArIDQgPD0gbV9jYXBhY2l0eSk7CisgICAg
QVNTRVJUKHZhbHVlIDwgKDEgPDwgMzApKTsKKyAgICBpZiAodmFsdWUgPD0gMTI3KSB7CisgICAg
ICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAg
ICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFk
VmFsdWUpOworICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMTYzODMpIHsKKyAgICAgICAgdWludDhf
dCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KTsKKyAgICAgICAg
QVNTRVJUKCEoaGVhZFZhbHVlICYgMTI4KSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAm
IDY0KSk7CisgICAgICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlIHwgMTI4KTsKKyAgICAgICAgYXBw
ZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gMjQp
OworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgQVNTRVJUKCEo
aGVhZFZhbHVlICYgNjQpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjggfCA2
NCk7CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gMTYp
KTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KSk7
CisgICAgICAgIGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9
Cit9CisKK2lubGluZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBh
Y2l0eUZvcih1bnNpZ25lZCBudW1iZXJPZkVudHJpZXNUb0FkZCkKK3sKKyAgICB1bnNpZ25lZCBj
YXBhY2l0eU5lZWRlZCA9IG1fc2l6ZSArIG51bWJlck9mRW50cmllc1RvQWRkICogMiAqIDQ7Cisg
ICAgaWYgKGNhcGFjaXR5TmVlZGVkID4gbV9jYXBhY2l0eSkgeworICAgICAgICBtX2NhcGFjaXR5
ID0gY2FwYWNpdHlOZWVkZWQgKiAyOworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHVp
bnQ4X3QqPihmYXN0UmVhbGxvYyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb21wYWN0SklUQ29kZU1hcF9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSwx
MSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgbV9sYWJl
bHNbbV9ieXRlY29kZU9mZnNldF0gPSBsYWJlbCgpOwogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01Q
SUxBVElPTikKKyAgICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgICAgICBtX2pp
dENvZGVNYXBFbmNvZGVyLmFwcGVuZChtX2J5dGVjb2RlT2Zmc2V0LCBkaWZmZXJlbmNlQmV0d2Vl
bihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CisjZW5kaWYKKwogICAgICAgICBzd2l0Y2ggKG1f
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpKSB7
CiAgICAgICAgIERFRklORV9CSU5BUllfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5F
X0JJTkFSWV9PUChvcF9pbikKQEAgLTM3Myw3ICszNzgsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAjZW5kaWYKIH0KIAotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVM
aW5rUGFzcygpCiB7CiAgICAgdW5zaWduZWQgam1wVGFibGVDb3VudCA9IG1fam1wVGFibGUuc2l6
ZSgpOwpAQCAtNTAyLDYgKzUwNiw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
UHRyKiBmdW4KIHsKICNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogICAgIG1fY2FuQmVP
cHRpbWl6ZWQgPSBtX2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBpZiAobV9j
YW5CZU9wdGltaXplZCkKKyAgICAgICAgbV9zdGFydE9mQ29kZSA9IGxhYmVsKCk7CiAjZW5kaWYK
ICAgICAKICAgICAvLyBKdXN0IGFkZCBhIGxpdHRsZSBiaXQgb2YgcmFuZG9tbmVzcyB0byB0aGUg
Y29kZWdlbgpAQCAtNjQyLDYgKzY0OCwxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
Q29kZVB0ciogZnVuCiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbV9jb2RlQmxv
Y2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mb1tpXS5wcm9w
ZXJ0eUFjY2Vzc0luZGV4KS5jYWxsUmV0dXJuTG9jYXRpb247CiAgICAgfQogCisjaWYgRU5BQkxF
KFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAg
bV9jb2RlQmxvY2stPnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7
CisjZW5kaWYKKwogICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNv
ZGUgJiYgZnVuY3Rpb25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJp
dHlDaGVjayA9IHBhdGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2Rl
ZmluZSBBU1NFUlRfSklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNT
QUdFKGFjdHVhbCA9PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwg
bm90ICVkLlxuIiwgI2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGlj
X2Nhc3Q8aW50PihhY3R1YWwpKTsKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJKU0ludGVyZmFjZUpJVC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgpAQCAtMTA1NCw2ICsxMDU1
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShUSUVSRURfQ09NUElM
QVRJT04pCiAgICAgICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKKyAgICAgICAgTGFiZWwgbV9z
dGFydE9mQ29kZTsKKyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgbV9qaXRDb2Rl
TWFwRW5jb2RlcjsKICNlbmRpZgogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZp
c2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw2ICsxOTIsOSBAQCBKU0dsb2JhbERhdGE6OkpT
R2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikKICAgICAs
IGludGVycHJldGVyKDApCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBTaXplKQorI2lmIEVOQUJMRShU
SUVSRURfQ09NUElMQVRJT04pCisgICAgLCBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1
ZmZlcigwKQorI2VuZGlmCiAgICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCiAgICAgLCBjYWNo
ZWRVVENPZmZzZXQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkKICAg
ICAsIG1heFJlZW50cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBlU21h
bGwgPyBNYXhTbWFsbFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRyeURl
cHRoKQpAQCAtMzU3LDYgKzM2MCwxMSBAQCBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQog
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKICAgICBkZWxldGUgbV9ydFRyYWNlTGlzdDsKICNl
bmRpZgorCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgb3NyU2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZhc3RG
cmVlKG9zclNjcmF0Y2hCdWZmZXJzW2ldKTsKKyNlbmRpZgogfQogCiBQYXNzUmVmUHRyPEpTR2xv
YmFsRGF0YT4gSlNHbG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBl
IHR5cGUsIEhlYXBTaXplIGhlYXBTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2
ICsyMzUsMjggQEAgbmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBpbnQ2
NF90IGRlYnVnRGF0YUJ1ZmZlcls2NF07CiAjZW5kaWYKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJ
TEFUSU9OKQorICAgICAgICBWZWN0b3I8aW50NjRfdCo+IG9zclNjcmF0Y2hCdWZmZXJzOworICAg
ICAgICBzaXplX3QgbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXI7CisgICAgICAg
IAorICAgICAgICBpbnQ2NF90KiBvc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZSh1bnNpZ25lZCBudW1i
ZXJPZlNsb3RzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mU2xvdHMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChu
dW1iZXJPZlNsb3RzID4gbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsKKyAg
ICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhv
bG9neSBieSBlbnN1cmluZworICAgICAgICAgICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdlIGdl
dCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAv
LyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgICAg
IC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXplKSAqIDQuCisgICAgICAgICAgICAgICAgbnVtYmVy
T2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIgPSBudW1iZXJPZlNsb3RzICogMjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvc3JTY3JhdGNoQnVmZmVycy5hcHBlbmQoc3Rh
dGljX2Nhc3Q8aW50NjRfdCo+KGZhc3RNYWxsb2Moc2l6ZW9mKGludDY0X3QpICogbnVtYmVyT2ZT
bG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBvc3JTY3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAgICAg
IH0KKyNlbmRpZgogI2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwgT3Bh
cXVlSlNDbGFzc0NvbnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gOTQ5MTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDcgKzExOSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBl
KEUKICNpZm5kZWYgTkRFQlVHCiBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpCiB7Ci0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMzI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
aXplID0gNjQ7CiAgICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CiAKICAgICBpZiAo
ISp0aGlzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106992</attachid>
            <date>2011-09-10 17:50:38 -0700</date>
            <delta_ts>2011-09-10 22:42:51 -0700</delta_ts>
            <desc>the patch - fix broken assert</desc>
            <filename>osr_patch_9.diff</filename>
            <type>text/plain</type>
            <size>92230</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBERkcgSklUIGNvbXBsZXRlbHkgdW5kb2VzIHNwZWN1bGF0aXZlIGNvbXBpbGF0
aW9uIGV2ZW4gaW4gdGhlIGNhc2Ugb2YKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3
IEBACiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIy
MDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBG
RDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07
CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgyRTM5MTQxQUIx
NEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBh
Y3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtNzg5LDYgKzc5
MCw3IEBACiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFF
MTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRjE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlD
OTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyog
SlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1NzAsNyBA
QAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyog
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5
MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTIzODIsNiAr
MjM4NSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4
MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQ29kZUJs
b2NrX2gKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFw
LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgi
CiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29kZU1hcChQYXNz
T3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAgICAgIENvbXBh
Y3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSU5U
RVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiBy
ZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1h
cD4gbV9qaXRDb2RlTWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CiAj
ZW5kaWYKQEAgLTY2Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1i
b2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2Fs
dGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAgICAgIE93blB0
cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsK
ICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5MTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1f
Y29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50
KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2Rl
T3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4
KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBp
dCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdl
bmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3Vy
ZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2Rl
SW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4
ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAg
bV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3LDcgQEAgcHJp
dmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0
SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVu
ZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM5
Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkK
ICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFw
aC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4
LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0
ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQwMiw3ICs0MDYs
NyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywg
Tm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAg
Tm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwg
aW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNz
ZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Tm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIs
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1f
bnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
ID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29t
cGlsZU90aGVyIH07CiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENv
ZGVXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgc3dpdGNoIChj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpIHsK
KyAgICAgICAgY2FzZSAxMTE3NjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAogICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgR3Jh
cGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7
CiAgICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVn
aXN0ZXJzID0gOTsKIAogICAgIC8vIFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4K
KyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0
ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9
IFg4NlJlZ2lzdGVyczo6cjEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVn
aXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ5MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NCwxMiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7
CiAgICAgfQogCi0jaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8g
VGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0
dWFsIHJlZ2lzdGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5v
ZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAg
dW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkg
ewotICAgICAgICBwcmludGYoIiUgNGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwg
b3BOYW1lKG9wKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0g
IXJlZkNvdW50OwogICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsK
LSAgICBpZiAobXVzdEdlbmVyYXRlKQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAg
QVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBF
eGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3
LDggKzc2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAg
IC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3Rh
bnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBp
bnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAg
LSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJs
b2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlz
cGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRo
ZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0
aW9ucy4KLSAgICBwcmludGYoIiUgNGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdl
bmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkp
CisgICAgcHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAi
ICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCBy
ZWZDb3VudCk7CisgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAg
IHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAg
IHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MjYsMTcgKzExMjYsMTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBu
bwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVy
OjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2so
c2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9u
SW5mbyk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxs
V2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21f
Y29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3Mp
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0
aW9uSW5mbyk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAg
ICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xMTQ0LDcgKzExNDQsNyBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmNvZGVPcmlnaW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9u
Q2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDkx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MDcsNyArOTA3LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhj
ZXB0aW9uSW5mbyk7CisgICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2lu
KTsKICAgICB9CiAKICAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNiArMTAwLDM0MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXgg
bm9kCiAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIp
OwogfQogCisjaWYgREZHX09TUgordm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQoreworICAg
IC8vIDEpIFByby1mb3JtYSBzdHVmZi4KKyAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKKwor
I2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3Ig
Tm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KWV4aXQubV9ub2Rl
SW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyAgICBleGl0LmR1
bXAoc3RkZXJyKTsKKyNlbmRpZgorI2lmIERGR19KSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJ
TFVSRQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19WRVJCT1NFX1NQ
RUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVn
SW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgZGVidWdJbmZvLT5j
b2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1Z0luZm8tPmRlYnVnT2Zmc2V0ID0gZGVi
dWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1
bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZv
cm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBh
biBvcGVyYXRpb24KKyAgICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlm
eWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJS
ZWcgYWxyZWFkeUJveGVkID0gSW52YWxpZEdQUlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3Zlcnkp
IHsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3Bl
Y3VsYXRpdmVBZGQ6CisgICAgICAgICAgICBzdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5
LT5kZXN0KCkpOworICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292
ZXJ5LT5kZXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgeG9yUHRyKFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgRmlndXJlIG91
dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVy
eSBHUFIvRlBSCisgICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5
IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBl
dmVyeSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisg
ICAgLy8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYg
dGhlcmUgYXJlIGFueSBjb25zdGFudHMsCisgICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywg
YW55IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCisgICAgICAgICAgICAKKyAgICBW
ZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBm
YWxzZTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0g
MDsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOwor
ICAgIAorICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9z
dCBPU1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKKyAgICAvLyBJbnQzMnMsIGhhdmUgbm8g
RlBScywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQor
ICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdz
IHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAorICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBj
b2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgorICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMnMg
PSBmYWxzZTsKKyAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQ29uc3Rh
bnRzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CisgICAgCisgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICBu
dW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgIEFTU0VSVCgo
aW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDApOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQgbGlrZSB0byBzdG9yZSB0byB0aGlzIHZpcnR1YWwg
cmVnaXN0ZXIgYmVmb3JlIGRvaW5nCisgICAgICAgICAgICAvLyB2aXJ0dWFsIHJlZ2lzdGVyIHNo
dWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyCisgICAgICAg
ICAgICAvLyBpcyBwb2lzb25lZDogaXQgY2Fubm90IGJlIHN0b3JlZCB0byB1bnRpbCBhZnRlciBk
aXNwbGFjZWQgdmlydHVhbAorICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIGFyZSBoYW5kbGVkLiBX
ZSB0cmFjayBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVyIGNhcmVmdWxseQorICAgICAgICAgICAg
Ly8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBlZmZpY2llbnRseS4gTm90ZSB0aGF0IHdlIGV4cGVj
dCB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRvIGJlIHJhcmUsIHNvIHRoZSBoYW5kbGluZyBv
ZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyBpbgorICAgICAgICAgICAgLy8gd2hpY2gg
aXQgZG9lcyBub3QgaGFwcGVuLgorICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0udGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAg
IGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKys7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGhhdmVVbmJveGVk
SW50MzJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgSW5GUFI6CisgICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAg
aGF2ZUNvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQo
KS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludDY0X3QqIHNjcmF0
Y2hCdWZmZXIgPSBnbG9iYWxEYXRhKCktPm9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bWJlck9m
UG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNl
ZFZpcnR1YWxSZWdpc3RlcnMpKTsKKworICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNz
dW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCisgICAg
Ly8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9y
ZWQuCisgICAgCisgICAgLy8gNCkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCisg
ICAgCisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVy
eShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hl
ZEludDMySW5HUFIgJiYgcmVjb3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVkKQorICAgICAgICAg
ICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3By
KCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDUpIER1bXAgYWxsIG5vbi1wb2lz
b25lZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywgc2F2ZSB0aGVtIGludG8gdGhlIHNjcmF0Y2gg
c3RvcmFnZS4KKyAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hh
bmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0CisgICAgLy8gICAgbW9z
dCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVk
cyB0byBiZSBkdW1wZWQuCisgICAgCisgICAgdW5zaWduZWQgc2NyYXRjaEluZGV4ID0gMDsKKyAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsg
KytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Cisg
ICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAg
c3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVjb3ZlcnkuZ3By
KCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgYWxsIEdQUnMgYXJlIGF2YWlsYWJsZSBm
b3Igc2NyYXRjaCB1c2UuCisgICAgCisgICAgaWYgKGhhdmVGUFJzKSB7CisgICAgICAgIC8vIDYp
IEJveCBhbGwgZG91YmxlcyAocmVsaWVzIG9uIHRoZXJlIGJlaW5nIG1vcmUgR1BScyB0aGFuIEZQ
UnMpCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigpOworICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChm
cHIpKTsKKyAgICAgICAgICAgIGJveERvdWJsZShmcHIsIGdwcik7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIDcpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmls
ZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBpZgorICAgICAgICAvLyAgICB0aGUgZGVzdGlu
YXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KKyAgICAgICAgCisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LmZw
cigpKSk7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAg
ICAgICAgICAgc3RvcmVQdHIoZ3ByLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKGdwciwgYWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDgpIFJlc2h1ZmZsZSBkaXNwbGFj
ZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8g
ICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUg
dGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVy
cy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Cisg
ICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMg
dG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAg
ICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgICAg
IHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUo
KSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAw
OworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAvLyBmb3Ig
c3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNjb3ZlciB0
aGF0CisgICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZhbHVl
cyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgICAgICAvLyBzcGlsbGVkIHJlYWxseSBl
bmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgorICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBidXQg
cHJvYmFibHkgbm90CisgICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQgY29y
cmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgIC8vIHRo
ZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiB2YWx1
ZXMsIGxpa2UKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAxIC0+IDIKKyAgICAgICAg
ICAgIC8vIDIgLT4gMQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEl0IGFjY29tcGxp
c2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3RlcnMK
KyAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlvbnMgYW5kIGRy
b3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCisgICAgICAgICAgICAvLyBsb2NhdGlvbiBpbiBtZW1v
cnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2NhdGlvbgorICAg
ICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCisgICAgICAgIAor
ICAgICAgICAgICAgaW50NjRfdCogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEoKS0+b3NyU2Ny
YXRjaEJ1ZmZlckZvclNpemUobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAg
ICBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKKyAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNoQnVm
ZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBz
dG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMgKyBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIDkpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJz
LgorICAgIAorICAgIHNjcmF0Y2hJbmRleCA9IDA7CisgICAgaWYgKG51bWJlck9mUG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7
IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2
aXJ0dWFsUmVnaXN0ZXJdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJp
YWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgICAg
ICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChzY3Jh
dGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAg
IC8vIDEwKSBEdW1wIGFsbCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNl
IHRoYXQncyBhIGNvbnN0YW50IHdlIHNlZQorICAgIC8vICAgICBvZnRlbi4KKworICAgIGlmICho
YXZlQ29uc3RhbnRzKSB7CisgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBh
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gMTEpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29k
ZSBvcGVyYXRpb24gaW50byByZWdUMC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVy
YW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUklu
Zm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyAxMikgRml4IGNhbGwgZnJh
bWUuCisgICAgCisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAgICAKKyAgICAvLyAxMykgSnVtcCBpbnRv
IHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgorICAgIAorICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2Rl
SW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhp
dC5tX2J5dGVjb2RlSW5kZXgpOworICAgIAorICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICBBU1NF
UlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAg
ICAKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRD
b2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAg
ICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIp
OworICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIGp1bXAoR1BSSW5mbzo6cmVnVDEpOworCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIC0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKKyNlbmRpZgor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1
bGF0aXZlKQoreworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWRD
b2RlTWFwOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0
Q29kZU1hcCgpKTsKKyAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgp
LT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIAorICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJh
dG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKKyAgICBPU1JF
eGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5k
KCk7CisgICAgCisgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgeworICAgICAgICBj
b25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZl
V2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNv
dmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICArK2V4aXRzSXRlcjsKKyAgICB9
Cit9CisjZWxzZSAvLyBERkdfT1NSCiBjbGFzcyBHZW5lcmFsaXplZFJlZ2lzdGVyIHsKIHB1Ymxp
YzoKICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyKCkgeyB9CkBAIC04MDMsNiArMTEzOSw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlvbkNoZWNrcygKICAgICBBU1NFUlQoIShjaGVj
a3NJdGVyICE9IGNoZWNrc0VuZCkpOwogICAgIEFTU0VSVCghKGVudHJpZXNJdGVyICE9IGVudHJp
ZXNFbmQpKTsKIH0KKyNlbmRpZiAvLyBERkdfT1NSCiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVFbnRyeSgpCiB7CkBAIC04NDQsMTIgKzExODEsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkoKQogICAgIC8vIHRvIGFsbG93IGl0IHRvIGNoZWNrIHdoaWNoIG5vZGVzIGluIHRo
ZSBncmFwaCBtYXkgYmFpbCBvdXQsIGFuZCBtYXkgbmVlZCB0byByZWVudGVyIHRoZQogICAgIC8v
IG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGlmIChjb21waWxlZFNwZWN1bGF0aXZlKSB7Cisj
aWYgREZHX09TUgorICAgICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOworI2Vsc2UKICAg
ICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcihzcGVjdWxh
dGl2ZS5zcGVjdWxhdGlvbkNoZWNrcygpKTsKICAgICAgICAgTm9uU3BlY3VsYXRpdmVKSVQgbm9u
U3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxlKGNoZWNr
SXRlcmF0b3IpOwogCiAgICAgICAgIC8vIExpbmsgdGhlIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVj
dWxhdGl2ZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBu
b24tc3BlY3VsYXRpdmUgb25lLgogICAgICAgICBsaW5rU3BlY3VsYXRpb25DaGVja3Moc3BlY3Vs
YXRpdmUsIG5vblNwZWN1bGF0aXZlKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IElmIGNvbXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cg
YXdheSB0aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKQEAg
LTg1OCw4ICsxMTk5LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAg
ICAgbV9tZXRob2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRp
dmVQYXRoQmVnaW4pOwogCisjaWYgREZHX09TUgorICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5k
ZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9yOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRpb25DaGVj
a1ZlY3RvciBub0NoZWNrczsKICAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3Ig
Y2hlY2tJdGVyYXRvcihub0NoZWNrcyk7CisjZW5kaWYKICAgICAgICAgTm9uU3BlY3VsYXRpdmVK
SVQgbm9uU3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxl
KGNoZWNrSXRlcmF0b3IpOwogICAgIH0KQEAgLTkwNyw3ICsxMjUyLDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fY2FsbHNbaV0u
bV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJldHVybkFk
ZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQobV9jYWxsc1tpXS5t
X2NhbGwpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8gPSBtX2NhbGxz
W2ldLm1fZXhjZXB0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25J
bmZvID0gbV9jYWxsc1tpXS5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNldCwgZXhjZXB0aW9u
SW5mbykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsNyBAQCBjbGFzcyBTcGVjdWxhdGlvblJlY292ZXJ5OwogCiBzdHJ1Y3QgRW50cnlMb2Nh
dGlvbjsKIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrOworc3RydWN0IE9TUkV4aXQ7CiAKICNpZm5k
ZWYgTkRFQlVHCiB0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQKShFeGVjU3Rh
dGUqLCB2b2lkKik7CkBAIC04MiwyMSArODMsMjEgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAg
IH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgd2l0aCBhbiBleGNlcHRpb24gaGFu
ZGxlci4KLSAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywgRXhjZXB0
aW9uSW5mbyBleGNlcHRpb25JbmZvKQorICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2Vw
dGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwp
CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNo
ZWNrKGV4Y2VwdGlvbkNoZWNrKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1faGFu
ZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0b3Ig
Zm9yIGEgY2FsbCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25zLCBidXQgd2hpY2ggYXJlIGhhbmRs
ZWQKICAgICAvLyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdGhlIGluLWxpbmUg
ZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvKQor
ICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVu
Y3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAg
ICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhl
eGNlcHRpb25JbmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTA0LDcgKzEw
NSw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2Nh
bGw7CiAgICAgRnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBtX2V4Y2VwdGlvbkNoZWNrOwotICAgIEV4Y2VwdGlvbkluZm8gbV9leGNlcHRpb25JbmZvOwor
ICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYW5kbGVzRXhjZXB0aW9u
czsKIH07CiAKQEAgLTE5Miw5ICsxOTMsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gTm90
aWZ5IHRoZSBKSVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgotICAg
IHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAg
dm9pZCBub3RpZnlDYWxsKENhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsK
LSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0cigpLCBl
eGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwg
RnVuY3Rpb25QdHIoKSwgY29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMjA1LDIw
ICsyMDYsMjAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20g
SklUIGNvZGUsIHdpdGggYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4
Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0
IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAg
ICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9u
Q2hlY2sgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcygmZ2xvYmFsRGF0
YSgpLT5leGNlcHRpb24pKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOworICAg
ICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4
Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7
CiAgICAgfQogICAgIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGgg
YSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMg
emVyby4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1
bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsIGFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlv
biwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgQ2FsbCBmdW5jdGlvbkNh
bGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRy
KFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVy
biBmdW5jdGlvbkNhbGw7CiAgICAgfQogICAgIApAQCAtMzExLDkgKzMxMiw5IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9tZXRob2RHZXRzLmFwcGVuZChNZXRob2RHZXRSZWNvcmQoc2xvd0NhbGwsIHN0
cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlv
bikpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxs
IHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2Fs
bCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2Fs
bFJlY29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2Fs
bCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgY29kZU9yaWdpbikpOwogICAgIH0K
IAogcHJpdmF0ZToKQEAgLTMyNiw4ICszMjcsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxO
dW1lcmljVG9Eb3VibGUoTm9kZUluZGV4LCBGUFJSZWcsIEdQUlJlZyB0ZW1wb3JhcnkpOwogICAg
IHZvaWQgZmlsbEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwgR1BSUmVnKTsKICAgICB2b2lkIGZp
bGxUb0pTKE5vZGVJbmRleCwgR1BSUmVnKTsKKyAgICAKKyNpZiBERkdfT1NSCisgICAgdm9pZCBl
eGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5
KiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKTsKKyAg
ICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYpOworI2Vsc2UKICAgICB2b2lkIGp1
bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2sm
LCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIE5vZGVUb1JlZ2lz
dGVyTWFwJiBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYgZW50cnlO
b2RlVG9SZWdpc3Rlck1hcCk7CiAgICAgdm9pZCBsaW5rU3BlY3VsYXRpb25DaGVja3MoU3BlY3Vs
YXRpdmVKSVQmLCBOb25TcGVjdWxhdGl2ZUpJVCYpOworI2VuZGlmCiAKICAgICAvLyBUaGUgZ2xv
YmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgogICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwpAQCAtMzg2LDEyICszOTMsMTIgQEAgcHJpdmF0
ZToKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAgICAgICBKU0Nh
bGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdl
dFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgICAgICBK
U0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAg
ICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCiAgICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xv
d0NhbGwpCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQogICAg
ICAgICAgICAgLCBtX2lzQ2FsbChpc0NhbGwpCi0gICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5m
byhleGNlcHRpb25JbmZvKQorICAgICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMzk5LDcgKzQwNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgIENhbGwgbV9zbG93Q2FsbDsKICAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFy
Z2V0VG9DaGVjazsKICAgICAgICAgYm9vbCBtX2lzQ2FsbDsKLSAgICAgICAgdW5zaWduZWQgbV9l
eGNlcHRpb25JbmZvOworICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICB9Owog
CiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ5MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKLS8v
IEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGlu
ZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCisvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBp
bmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cg
Z3JhcGhzLiBTZXQgdG8gMSBmb3IgYmFzaWMgdmVyYm9zaXR5LCBvciB0byAyIGZvciBtb3JlIHZl
cmJvc2l0eS4KICNkZWZpbmUgREZHX0RFQlVHX1ZFUkJPU0UgMAogLy8gRW5hYmxlIGdlbmVyYXRp
b24gb2YgZHluYW1pYyBjaGVja3MgaW50byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLgogI2lmICFB
U1NFUlRfRElTQUJMRUQKQEAgLTUwLDYgKzUwLDggQEAKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FM
X0RJU0JBTEUgMAogLy8gRGlzYWJsZSB0aGUgU3BlY3VsYXRpdmVKSVQgd2l0aG91dCBoYXZpbmcg
dG8gdG91Y2ggUGxhdGZvcm0uaCEKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEVfU1BF
Q1VMQVRJVkUgMAorLy8gRGlzYWJsZSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCBhbmQgdXNlIE9T
UiBpbnN0ZWFkLgorI2RlZmluZSBERkdfT1NSIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAv
LyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2luZyB1c2Ug
b2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24gdGhlIGhvdCBwYXRoLgogI2RlZmluZSBE
RkdfU1VDQ0VTU19TVEFUUyAwCiAKQEAgLTcyLDkgKzc0LDMyIEBAIENPTVBJTEVfQVNTRVJUKHNp
emVvZihWaXJ0dWFsUmVnaXN0ZXIpID0KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3Rh
dGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAotLy8gSW5mb3JtYXRpb24g
dXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2Ug
aW5mb3JtYXRpb24uCisvLyBJbmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhj
ZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZvcm1hdGlvbiwKKy8vIGFuZCB0byBpbXBs
ZW1lbnQgT1NSLgogLy8gKFByZXNlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4
KS4KLXR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKK2NsYXNzIENvZGVPcmlnaW4gewor
cHVibGljOgorICAgIENvZGVPcmlnaW4oKQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBDb2RlT3JpZ2luKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDog
bV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAorICAgIHVpbnQzMl90IGJ5dGVjb2Rl
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdWludDMy
X3QgbV9ieXRlY29kZUluZGV4OworfTsKIAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51
bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkg
bm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2Vu
ZXJhdGUsIGlzIGNvbnN0YW50LCBldGMpLgpAQCAtMzU3LDkgKzM4Miw5IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogCiAgICAgLy8gQ29uc3RydWN0IGEg
bm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2Rl
KE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBjaGls
ZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMg
PSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBO
b2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2Vw
dGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAg
ICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewpAQCAtMzcwLDkgKzM5NSw5IEBAIHN0cnVjdCBO
b2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGls
ZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2Vw
dGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBp
bW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwg
ZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1
ZSkKQEAgLTM4NCw5ICs0MDksOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29u
c3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFs
dWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywg
T3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAg
ICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5t
X3ZhbHVlKQpAQCAtMzk5LDkgKzQyNCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAg
ICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVu
IGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUg
b3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0y
LCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKKyAgICBOb2RlKFZh
ckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEs
IE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikK
ICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8p
CisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQog
ICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTY0Myw2ICs2NjgsMTQgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CiAgICAgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIGEgZmFzdCBjaGVjayBvbiB0aGUgZmlyc3Qg
Y2hpbGQKKyAgICAvLyBiZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUuIFVz
ZSB0aGlzIHdpdGggY2FyZSBhbmQKKyAgICAvLyBhdm9pZCBpdCBpZiBwb3NzaWJsZS4KKyAgICBO
b2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZHJl
bi5maXhlZC5jaGlsZDE7CisgICAgfQogCiAgICAgTm9kZUluZGV4IGNoaWxkMigpCiAgICAgewpA
QCAtNjcxLDcgKzcwNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAvLyBUaGlzIGVudW0gdmFsdWUg
ZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwogICAgIC8v
IFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRs
eSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KLSAgICBFeGNlcHRpb25JbmZvIGV4
Y2VwdGlvbkluZm87CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVyZW5j
ZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Igbm8gY2hpbGQpLgogICAgIHVuaW9uIHsKICAg
ICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzQsNiArNDM0LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5v
ZAogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRl
eEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBub2RlKQogeworI2lmIERGR19PU1IKKyAg
ICBVTlVTRURfUEFSQU0oY2hlY2tJdGVyYXRvcik7CisjZWxzZQogICAgIC8vIENoZWNrIGZvciBz
cGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0
aGUKICAgICAvLyBzcGVjdWxhdGl2ZSBwYXRoLiBEbyBub3QgY2hlY2sgZm9yIE5vZGVJbmRleCAw
LCBzaW5jZSB0aGlzIGlzIGNoZWNrZWQKICAgICAvLyBpbiB0aGUgb3V0ZXJtb3N0IGNvbXBpbGUg
bGF5ZXIsIGF0IHRoZSBoZWFkIG9mIHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aApAQCAtNDQyLDYg
KzQ0NSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAv
LyBhcyBzcGVjdWxhdGlvbiBjaGVja3MgYXQgdGhpcyBpbmRleCkuCiAgICAgaWYgKG1fY29tcGls
ZUluZGV4ICYmIGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkK
ICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgTm9kZVR5
cGUgb3AgPSBub2RlLm9wOwogCkBAIC0xMjgzLDggKzEyODcsMTAgQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hlY2tJdGVyYXRvcikKIHsKICAgICAv
LyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGFkZGVkIGF0IGZ1bmN0aW9uIGVudHJ5IChj
aGVja2luZyBhcmd1bWVudCB0eXBlcykuCisjaWYgIURGR19PU1IKICAgICBpZiAoY2hlY2tJdGVy
YXRvci5oYXNDaGVja0F0SW5kZXgobV9jb21waWxlSW5kZXgpKQogICAgICAgICB0cmFja0VudHJ5
KG1faml0LmxhYmVsKCkpOworI2VuZGlmCiAKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsK
ICAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5z
aXplKCk7ICsrbV9ibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NiArMTQ0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAg
IHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCisjaWYgIURGR19PU1IKIFNwZWN1bGF0aW9uQ2hl
Y2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2NoZWNrKGNoZWNr
KQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKQEAgLTE3MCw2ICsxNzEs
NzMgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICAg
ICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KIH0K
KyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBv
dXQpIGNvbnN0Cit7CisgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsK
K30KKwordm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluR1BS
OgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAg
ZnByaW50ZihvdXQsICJpbnQzMiglJSVzKSIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEluRlBSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUl
JXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIqJWQiLCB2
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9udEtub3c6CisgICAgICAgIGZwcmludGYob3V0LCAi
ISIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKG91dCwg
Ij8lZCIsIHRlY2huaXF1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2VuZGlmCisK
KyNpZiBERkdfT1NSCitPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNr
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorICAgIDogbV9j
aGVjayhjaGVjaykKKyAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCisgICAg
LCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAgLCBtX3Jl
Y292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1
bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkp
CisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sKKyAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1
bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0g
PSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRd
KTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGpp
dC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOwor
fQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5kdW1w
KG91dCk7CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlh
YmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAg
ICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXS5kdW1wKG91dCk7Cit9CisjZW5kaWYKKyNlbmRpZgog
CiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewpAQCAtNjUwLDYgKzcxOCw0MiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBTZXRMb2NhbDogeworICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0
byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCisgICAgICAgIC8vIGFzIGEgc3BlY3Vs
YXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKKyAg
ICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGlu
IHRoZSB2aXJ0dWFsCisgICAgICAgIC8vIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIGNvbXBpbGVN
b3ZIaW50KG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgZmFyIGFzIE9TUiBpcyBjb25j
ZXJuZWQsIHdlJ3JlIG9uIHRoZSBieXRlY29kZSBpbmRleCBjb3JyZXNwb25kaW5nCisgICAgICAg
IC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkgImV4ZWN1
dGVkIiB0aGUKKyAgICAgICAgLy8gU2V0TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERGRyBOb2Rl
cyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lCisgICAgICAgIC8vIGJ5dGVjb2RlIGluZGV4
IGFzIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9
PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgTm9kZSYgbmV4dE5v
ZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4KzFdOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmIHdlIGV2ZXIgZW1pdCBtdWx0aXBsZSBTZXRM
b2NhbCdzIGZvcgorICAgICAgICAvLyBhIHNpbmdsZSBieXRlY29kZSBpbnN0cnVjdGlvbi4gVGhh
dCdzIHVubGlrZWx5IHRvIGhhcHBlbi4gQnV0IGlmCisgICAgICAgIC8vIGl0IGRvZXMsIHRoZSBz
b2x1dGlvbiBpcyB0byB0byBoYXZlIHRoaXMgcGVyZm9ybSBhIHNlYXJjaCB1bnRpbAorICAgICAg
ICAvLyBpdCBmaW5kcyBhIE5vZGUgd2l0aCBhIGRpZmZlcmVudCBieXRlY29kZSBpbmRleCBmcm9t
IHRoZSBvbmUgd2UndmUKKyAgICAgICAgLy8gZ290LCBhbmQgdG8gYWJzdHJhY3RseSBleGVjdXRl
IHRoZSBTZXRMb2NhbCdzIGFsb25nIHRoZSB3YXkuIE9yLAorICAgICAgICAvLyBiZXR0ZXIgeWV0
LCBoYW5kbGUgYWxsIG9mIHRoZSBTZXRMb2NhbCdzIGF0IG9uY2U6IGFic3RyYWN0IGludGVycHJl
dAorICAgICAgICAvLyBhbGwgb2YgdGhlbSwgdGhlbiBlbWl0IGNvZGUgZm9yIGFsbCBvZiB0aGVt
LCB3aXRoIE9TUiBleGl0aW5nIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IG5vbi1TZXRMb2NhbCBp
bnN0cnVjdGlvbi4gTm90ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciB3aGVuCisgICAgICAgIC8vIGJv
dGggdGhpcyBTZXRMb2NhbCBhbmQgdGhlIG5leHQgb3AgaGF2ZSBhIGJ5dGVjb2RlIGluZGV4IG9m
IDA7IHRoaXMKKyAgICAgICAgLy8gb2NjdXJzIGZvciBTZXRMb2NhbCdzIGdlbmVyYXRlZCBhdCB0
aGUgdG9wIG9mIHRoZSBjb2RlIGJsb2NrIHRvCisgICAgICAgIC8vIGluaXRpYWxpemUgbG9jYWxz
IHRvIHVuZGVmaW5lZC4gSWRlYWxseSwgd2UnZCBoYXZlIGEgd2F5IG9mIG1hcmtpbmcKKyAgICAg
ICAgLy8gaW4gdGhlIENvZGVPcmlnaW4gdGhhdCBhIFNldExvY2FsIGlzIHN5bnRoZXRpYy4gVGhp
cyB3aWxsIG1ha2UgdGhlCisgICAgICAgIC8vIGFzc2VydGlvbiBtb3JlIHNlbnNpYmxlLWxvb2tp
bmcuIFdlIHNob3VsZCB0aGVuIGFsc28gYXNzZXJ0IHRoYXQKKyAgICAgICAgLy8gc3ludGhldGlj
IFNldExvY2FsJ3MgZG9uJ3QgaGF2ZSBzcGVjdWxhdGlvbiBjaGVja3MsIHNpbmNlIHRoZXkKKyAg
ICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgZHJvcHBpbmcgdmFsdWVzIHRoYXQgd2Ugc3RhdGljYWxs
eSBrbm93IHdlIGFyZQorICAgICAgICAvLyBhbGxvd2VkIHRvIGRyb3AgaW50byB0aGUgdmFyaWFi
bGVzLiBERkdQcm9wYWdhdG9yIHdpbGwgZ3VhcmFudGVlCisgICAgICAgIC8vIHRoaXMsIHNpbmNl
IGl0IHNob3VsZCBoYXZlIGF0IGxlYXN0IGFuIGFwcHJveGltYXRpb24gKGlmIG5vdAorICAgICAg
ICAvLyBleGFjdCBrbm93bGVkZ2UpIG9mIHRoZSB0eXBlIG9mIHRoZSBTZXRMb2NhbCdzIGNoaWxk
IG5vZGUsIGFuZAorICAgICAgICAvLyBzaG91bGQgbWVyZ2UgdGhhdCBpbmZvcm1hdGlvbiBpbnRv
IHRoZSBsb2NhbCB0aGF0IGlzIGJlaW5nIHNldC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJ
bmRleEZvck9TUiAhPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKQorICAgICAg
ICAgICAgICAgfHwgKG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9PSAwICYmIG5leHROb2RlLmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpID09IDApKTsKKyAgICAgICAgbV9ieXRlY29kZUluZGV4Rm9y
T1NSID0gbmV4dE5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCk7CisgICAgICAgIAogICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpLmdldFByZWRp
Y3Rpb24obm9kZS5sb2NhbCgpKTsKICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRp
Y3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKQEAgLTY3MCw2ICs3NzQsMTAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIodmFs
dWUuZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBJbmRpY2F0ZSB0aGF0IGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byByZXRyaWV2
ZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgLy8gdGhpcyBieXRlY29kZSB2YXJpYWJsZSBmcm9tIHJl
Z2lzdGVycyBvciBvdGhlciBsb2NhdGlvbnMgaW4gdGhlIHJlZ2lzdGVyIGZpbGUuCisgICAgICAg
IHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChub2RlLmxvY2FsKCkpID0gVmFsdWVTb3Vy
Y2UoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xMzY5LDExICsxNDc3LDE5IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIH0KLQorICAgIAogICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpICYmIG5vZGUubXVz
dEdlbmVyYXRlKCkpCiAgICAgICAgIHVzZShtX2NvbXBpbGVJbmRleCk7CiB9CiAKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNb3ZIaW50KE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUKG5v
ZGUub3AgPT0gU2V0TG9jYWwpOworICAgIAorICAgIHNldE5vZGVJbmRleEZvck9wZXJhbmQobm9k
ZS5jaGlsZDEoKSwgbm9kZS5sb2NhbCgpKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gbm9kZS5s
b2NhbCgpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smIGJs
b2NrKQogewogICAgIEFTU0VSVChtX2NvbXBpbGVPa2F5KTsKQEAgLTEzODIsMzUgKzE0OTgsNzQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogI2lmIERGR19KSVRf
QlJFQUtfT05fRVZFUllfQkxPQ0sKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQor
ICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXNb
aV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOworICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAogICAgIGZvciAoOyBtX2NvbXBpbGVJbmRl
eCA8IGJsb2NrLmVuZDsgKyttX2NvbXBpbGVJbmRleCkgewogICAgICAgICBOb2RlJiBub2RlID0g
bV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAorICAgICAgICBtX2J5
dGVjb2RlSW5kZXhGb3JPU1IgPSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAg
ICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgewogI2lmIERGR19ERUJVR19WRVJCT1NF
Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgZ2VuZXJhdGluZyBOb2Rl
IEAlZCBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBtX2ppdC5k
ZWJ1Z09mZnNldCgpKTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVK
SVQgc2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChp
bnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCksIG1faml0
LmRlYnVnT2Zmc2V0KCkpOworI2VuZGlmCisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcgTm9kZSBAJWQgKGJjIyV1
KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KW1fY29tcGlsZUluZGV4LCBub2RlLmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRpZgogI2lm
IERGR19KSVRfQlJFQUtfT05fRVZFUllfTk9ERQotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7
CisgICAgICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgICAgICBjb21waWxlKG5vZGUpOwotICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpIHsKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAg
IGNvbXBpbGUobm9kZSk7CisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpIHsKICNpZiBF
TkFCTEUoRFlOQU1JQ19URVJNSU5BVEVfU1BFQ1VMQVRJT04pCi0gICAgICAgICAgICBtX2NvbXBp
bGVPa2F5ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2suZW5kOwot
ICAgICAgICAgICAgY2xlYXJHZW5lcmF0aW9uSW5mbygpOworICAgICAgICAgICAgICAgIG1fY29t
cGlsZU9rYXkgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2su
ZW5kOworICAgICAgICAgICAgICAgIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKICNlbmRpZgotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAjaWYgREZHX0RFQlVHX1ZFUkJPU0UKLSAgICAgICAg
aWYgKG5vZGUuaGFzUmVzdWx0KCkpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVz
XG4iLCBkYXRhRm9ybWF0VG9TdHJpbmcobV9nZW5lcmF0aW9uSW5mb1tub2RlLnZpcnR1YWxSZWdp
c3RlcigpXS5yZWdpc3RlckZvcm1hdCgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKSB7
CisgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W25vZGUudmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiLT4gJXMsIHZyIyVkIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGluZm8ucmVnaXN0ZXJGb3JtYXQo
KSksIChpbnQpbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiwgJXMiLCBGUFJJbmZvOjpkZWJ1
Z05hbWUoaW5mby5mcHIoKSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiwgJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUo
aW5mby5ncHIoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiAgICAiKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiICAgICIpOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgCisjaWYg
REZHX0RFQlVHX1ZFUkJPU0UgPj0gMiAgICAgICAgCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQg
PSAtbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OyBvcGVyYW5kIDwgLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgKytvcGVyYW5k
KQorICAgICAgICAgICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChzdGRl
cnIpOworICAgICAgICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgOiAiKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAwOyBvcGVyYW5kIDwgKGludCltX3ZhcmlhYmxl
cy5zaXplKCk7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyNlbmRpZgorICAgICAgCisjaWYgREZHX0RFQlVHX1ZF
UkJPU0UgIAorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAjZW5kaWYKLSAgICAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiB9CiAKQEAg
LTE0MTksNiArMTU3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9j
ayYKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNT
RVJUKCFtX2NvbXBpbGVJbmRleCk7CisgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnM7
ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gKFZpcnR1
YWxSZWdpc3RlcikobV9qaXQuY29kZUJsb2NrKCktPnRoaXNSZWdpc3RlcigpICsgaSk7CiAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0UHJlZGlj
dGlvbih2aXJ0dWFsUmVnaXN0ZXIpOwpAQCAtMTQ1NCw3ICsxNjEwLDcgQEAgYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9y
IChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyAr
K21fYmxvY2spIHsKICAgICAgICAgY29tcGlsZSgqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Js
b2NrXSk7Ci0jaWYgIUVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKyNpZiAhRU5BQkxFKERZ
TkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OKQogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTE0NjMsNiArMTYxOSwxMTkg
QEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K1ZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNv
bnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKK3sKKyAgICBpZiAoIXZhbHVlU291cmNlLmlz
U2V0KCkpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZp
bGUoKTsKKworICAgIGlmIChtX2ppdC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgp
KSkKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZK
U0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7CisgICAgCisgICAgTm9kZSogbm9k
ZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICBpZiAo
IW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgLy8gSXQncyBsZWdpdGltYXRl
bHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFu
ZCwKKyAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBo
YXBweSBhZnRlciB0aGUgT1NSLgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3Rh
bnQoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIEdlbmVyYXRpb25JbmZvKiBpbmZv
UHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAg
IGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNv
dXJjZS5ub2RlSW5kZXgoKSkgeworICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFu
IGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KKyAg
ICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gVmFsdWVUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1
ZSBpcyBhIFZhbHVlVG9OdW1iZXIgbm9kZQorICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRo
YXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBh
CisgICAgICAgIC8vICAgIFZhbHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdl
IGNhbiBzdWJzdGl0dXRlIFZhbHVlVG9OdW1iZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIFZh
bHVlVG9JbnQzMjogTGlrZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24g
b2YgdGhlIHZhbHVlIGlzCisgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4g
dXNlIGl0LiBCdXQgaWYgdGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAvLyAg
ICBhbmQgYSBWYWx1ZVRvTnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1i
ZXIgYmVjYXVzZSBpdAorICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVz
ZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCisgICAgICAgIC8vICAgIG90
aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gVUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUg
aXMgYSBVSW50MzJUb051bWJlcgorICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmlu
ZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAg
ICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAvLwor
ICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBh
IFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCisgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0
aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAg
ICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJt
ZWRpYXRlLgorICAgICAgICAKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAK
KyAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICBu
b2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGluZm9QdHIg
PSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAg
ICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2Rl
SW5kZXgpCisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051
bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMklu
ZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXgg
PSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVh
bFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7
ICsrdmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGlu
Zm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICAgICAg
aWYgKCFpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBo
KClbaW5mby5ub2RlSW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5j
aGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAg
ICAgICAgIGNhc2UgVmFsdWVUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051
bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAg
ICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAg
ICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAg
bm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4
VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRleDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRv
TnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0g
dWludDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBu
b2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5v
ZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9q
aXQuZ3JhcGgoKVtub2RlSW5kZXhUb1VzZV07CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZt
X2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBu
b2RlSW5kZXhUb1VzZSk7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAg
ICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0K
KyAgICAKKyAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSk7CisKKyAgICBpZiAoaW5mb1B0ci0+
cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICBpZiAoaW5mb1B0
ci0+cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgcmV0
dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZv
cm1hdCgpKTsKKyAgICB9CisgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZv
cm1hdE5vbmUpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lz
dGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdp
c3RlcigpKSk7CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFZh
bHVlUmVjb3ZlcnkoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHByaXZhdGU6CiAgICAg
R1BSUmVnIG1fc3JjOwogfTsKIAorI2lmICFERkdfT1NSCiAvLyA9PT0gU3BlY3VsYXRpb25DaGVj
ayA9PT0KIC8vCiAvLyBUaGlzIHN0cnVjdHVyZSByZWNvcmRzIGEgYmFpbC1vdXQgZnJvbSB0aGUg
c3BlY3VsYXRpdmUgcGF0aCwKQEAgLTkxLDcgKzkyLDE5NiBAQCBzdHJ1Y3QgU3BlY3VsYXRpb25D
aGVjayB7CiAgICAgUmVnaXN0ZXJJbmZvIG1fZnBySW5mb1tGUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyc107CiB9OwogdHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8U3BlY3VsYXRpb25DaGVjaywgMTY+
IFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3I7CisjZW5kaWYgLy8gIURGR19PU1IKIAorY2xhc3MgVmFs
dWVTb3VyY2UgeworcHVibGljOgorICAgIFZhbHVlU291cmNlKCkKKyAgICAgICAgOiBtX25vZGVJ
bmRleChOb05vZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJj
ZShOb2RlSW5kZXggbm9kZUluZGV4KQorICAgICAgICA6IG1fbm9kZUluZGV4KG5vZGVJbmRleCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbm9kZUluZGV4ICE9IE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Cisg
ICAgICAgIHJldHVybiBtX25vZGVJbmRleDsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRwor
ICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpIGNvbnN0OworI2VuZGlmCisgICAgCitwcml2YXRlOgor
ICAgIE5vZGVJbmRleCBtX25vZGVJbmRleDsKK307CisgICAgCisvLyBEZXNjcmliZXMgaG93IHRv
IHJlY292ZXIgYSBnaXZlbiBieXRlY29kZSB2aXJ0dWFsIHJlZ2lzdGVyIGF0IGEgZ2l2ZW4KKy8v
IGNvZGUgcG9pbnQuCitlbnVtIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgeworICAgIC8vIEl0J3Mg
YWxyZWFkeSBpbiB0aGUgcmVnaXN0ZXIgZmlsZSBhdCB0aGUgcmlnaHQgbG9jYXRpb24uCisgICAg
QWxyZWFkeUluUmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgaW4gYSByZWdpc3Rlci4KKyAgICBJ
bkdQUiwKKyAgICBVbmJveGVkSW50MzJJbkdQUiwKKyAgICBJbkZQUiwKKyAgICAvLyBJdCdzIGlu
IHRoZSByZWdpc3RlciBmaWxlLCBidXQgYXQgYSBkaWZmZXJlbnQgbG9jYXRpb24uCisgICAgRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBhIGNvbnN0YW50LgorICAgIENvbnN0
YW50LAorICAgIC8vIERvbid0IGtub3cgaG93IHRvIHJlY292ZXIgaXQuCisgICAgRG9udEtub3cK
K307CisKK2NsYXNzIFZhbHVlUmVjb3ZlcnkgeworcHVibGljOgorICAgIFZhbHVlUmVjb3Zlcnko
KQorICAgICAgICA6IG1fdGVjaG5pcXVlKERvbnRLbm93KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgYWxyZWFkeUluUmVnaXN0ZXJGaWxlKCkKKyAgICB7Cisg
ICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUg
PSBBbHJlYWR5SW5SZWdpc3RlckZpbGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluR1BSKEdQUlJlZyBncHIsIERhdGFGb3Jt
YXQgZGF0YUZvcm1hdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhRm9ybWF0ICE9IERhdGFG
b3JtYXROb25lKTsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIGlmIChk
YXRhRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQorICAgICAgICAgICAgcmVzdWx0Lm1fdGVj
aG5pcXVlID0gVW5ib3hlZEludDMySW5HUFI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
c3VsdC5tX3RlY2huaXF1ZSA9IEluR1BSOworICAgICAgICByZXN1bHQubV9zb3VyY2UuZ3ByID0g
Z3ByOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFs
dWVSZWNvdmVyeSBpbkZQUihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVy
eSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEluRlBSOworICAgICAgICBy
ZXN1bHQubV9zb3VyY2UuZnByID0gZnByOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZykKKyAgICB7CisgICAgICAgIFZhbHVlUmVjb3Zlcnkg
cmVzdWx0OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBEaXNwbGFjZWRJblJlZ2lzdGVy
RmlsZTsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLnZpcnR1YWxSZWcgPSB2aXJ0dWFsUmVnOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNv
dmVyeSBjb25zdGFudChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVy
eSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IENvbnN0YW50OworICAgICAg
ICByZXN1bHQubV9zb3VyY2UuY29uc3RhbnQgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBWYWx1ZVJlY292ZXJ5VGVjaG5p
cXVlIHRlY2huaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlOyB9CisgICAgCisgICAg
R1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0g
SW5HUFIgfHwgbV90ZWNobmlxdWUgPT0gVW5ib3hlZEludDMySW5HUFIpOworICAgICAgICByZXR1
cm4gbV9zb3VyY2UuZ3ByOworICAgIH0KKyAgICAKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJbkZQUik7CisgICAgICAgIHJldHVy
biBtX3NvdXJjZS5mcHI7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnaXN0ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IERp
c3BsYWNlZEluUmVnaXN0ZXJGaWxlKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLnZpcnR1YWxS
ZWc7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgY29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmRlY29kZShtX3NvdXJjZS5jb25zdGFudCk7CisgICAgfQorICAgIAorI2lmbmRlZiBO
REVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAorcHJp
dmF0ZToKKyAgICBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIG1fdGVjaG5pcXVlOworICAgIHVuaW9u
IHsKKyAgICAgICAgR1BSUmVnIGdwcjsKKyAgICAgICAgRlBSUmVnIGZwcjsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWc7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlIGNvbnN0YW50
OworICAgIH0gbV9zb3VyY2U7Cit9OworCisjaWYgREZHX09TUgorLy8gPT09IE9TUkV4aXQgPT09
CisvLworLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBzcGVjdWxh
dGl2ZSBwYXRoIGJ5CisvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCitzdHJ1Y3QgT1NSRXhp
dCB7CisgICAgT1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1
bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gMCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbV9jaGVjazsKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CisgICAgdW5zaWduZWQgbV9i
eXRlY29kZUluZGV4OworICAgIAorICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKKyAgICAK
KyAgICAvLyBDb252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1ZVJlY292ZXJpZXMg
d2hpbGUgYmVpbmcKKyAgICAvLyBnZW5lcmljIG92ZXIgYXJndW1lbnQgdmVyc3VzIHZhcmlhYmxl
LgorICAgIGludCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50
cy5zaXplKCkgKyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICBjb25zdCBWYWx1ZVJlY292ZXJ5
JiB2YWx1ZVJlY292ZXJ5KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRl
eCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1l
bnRzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4IC0gbV9hcmd1bWVu
dHMuc2l6ZSgpXTsKKyAgICB9CisgICAgYm9vbCBpc0FyZ3VtZW50KGludCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIGJvb2wgaXNW
YXJpYWJsZShpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQor
ICAgIGludCBhcmd1bWVudEZvckluZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoaW50IGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgp
OworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZvckluZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXpl
KCk7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0
KSBjb25zdDsKKyNlbmRpZgorICAgIAorICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX2Fy
Z3VtZW50czsKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7CisgICAg
aW50IG1fbGFzdFNldE9wZXJhbmQ7Cit9OwordHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8T1NSRXhp
dCwgMTY+IE9TUkV4aXRWZWN0b3I7CisjZW5kaWYgLy8gREZHX09TUgogCiAvLyA9PT0gU3BlY3Vs
YXRpdmVKSVQgPT09CiAvLwpAQCAtMTA1LDIxICsyOTUsMjUgQEAgdHlwZWRlZiBTZWdtZW50ZWRW
ZWN0b3I8U3BlY3VsYXRpb25DaGVjawogLy8gb25seSBzcGVjdWxhdGl2ZWx5IGJlZW4gYXNzZXJ0
ZWQpIHRocm91Z2ggdGhlIGRhdGFmbG93LgogY2xhc3MgU3BlY3VsYXRpdmVKSVQgOiBwdWJsaWMg
SklUQ29kZUdlbmVyYXRvciB7CiAgICAgZnJpZW5kIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrOwor
ICAgIGZyaWVuZCBzdHJ1Y3QgT1NSRXhpdDsKIHB1YmxpYzoKLSAgICBTcGVjdWxhdGl2ZUpJVChK
SVRDb21waWxlciYgaml0KQotICAgICAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCB0cnVlKQot
ICAgICAgICAsIG1fY29tcGlsZU9rYXkodHJ1ZSkKLSAgICB7Ci0gICAgfQorICAgIFNwZWN1bGF0
aXZlSklUKEpJVENvbXBpbGVyJik7CiAKICAgICBib29sIGNvbXBpbGUoKTsKIAogICAgIC8vIFJl
dHJpZXZlIHRoZSBsaXN0IG9mIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoLAog
ICAgIC8vIGFuZCBhZGRpdGlvbmFsIHJlY292ZXJ5IGluZm9ybWF0aW9uLgorI2lmICFERkdfT1NS
CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3MoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG1fc3BlY3VsYXRpb25DaGVja3M7CiAgICAgfQorI2Vsc2UKKyAgICBP
U1JFeGl0VmVjdG9yJiBvc3JFeGl0cygpCisgICAgeworICAgICAgICByZXR1cm4gbV9vc3JFeGl0
czsKKyAgICB9CisjZW5kaWYKICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KiBzcGVjdWxhdGlvblJl
Y292ZXJ5KHNpemVfdCBpbmRleCkKICAgICB7CiAgICAgICAgIC8vIFNwZWN1bGF0aW9uQ2hlY2s6
Om1fcmVjb3ZlcnlJbmRleCBpcyBvZmZzZXQgYnkgMSwKQEAgLTEzOSw2ICszMzMsNyBAQCBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb2RlR2VuZXJhdG9yOwogICAgIAogICAgIHZvaWQg
Y29tcGlsZShOb2RlJik7CisgICAgdm9pZCBjb21waWxlTW92SGludChOb2RlJik7CiAgICAgdm9p
ZCBjb21waWxlKEJhc2ljQmxvY2smKTsKIAogICAgIHZvaWQgY2hlY2tBcmd1bWVudFR5cGVzKCk7
CkBAIC0yMDMsNyArMzk4LDExIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CisjaWYgIURGR19PU1IKICAgICAgICAgbV9z
cGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlz
KSk7CisjZWxzZQorICAgICAgICBtX29zckV4aXRzLmFwcGVuZChPU1JFeGl0KGp1bXBUb0ZhaWws
IHRoaXMpKTsKKyNlbmRpZgogICAgIH0KICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3
aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJl
Y292ZXJ5KQpAQCAtMjExLDcgKzQxMCwxMSBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fc3BlY3VsYXRpb25SZWNv
dmVyeUxpc3QuYXBwZW5kKHJlY292ZXJ5KTsKKyNpZiAhREZHX09TUgogICAgICAgICBtX3NwZWN1
bGF0aW9uQ2hlY2tzLmFwcGVuZChTcGVjdWxhdGlvbkNoZWNrKGp1bXBUb0ZhaWwsIHRoaXMsIG1f
c3BlY3VsYXRpb25SZWNvdmVyeUxpc3Quc2l6ZSgpKSk7CisjZWxzZQorICAgICAgICBtX29zckV4
aXRzLmFwcGVuZChPU1JFeGl0KGp1bXBUb0ZhaWwsIHRoaXMsIG1fc3BlY3VsYXRpb25SZWNvdmVy
eUxpc3Quc2l6ZSgpKSk7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBz
dGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgpAQCAtMjM0
LDE4ICs0MzcsNjUgQEAgcHJpdmF0ZToKIAogICAgIHRlbXBsYXRlPGJvb2wgc3RyaWN0PgogICAg
IEdQUlJlZyBmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiBy
ZXR1cm5Gb3JtYXQpOwotCisgICAgCiAgICAgLy8gSXQgaXMgcG9zc2libGUsIGR1cmluZyBzcGVj
dWxhdGl2ZSBnZW5lcmF0aW9uLCB0byByZWFjaCBhIHNpdHVhdGlvbiBpbiB3aGljaCB3ZQogICAg
IC8vIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbCAoZm9y
IGV4YW1wbGUsIHdoZW4gdHdvIG5vZGVzCiAgICAgLy8gd2lsbCBtYWtlIGNvbmZsaWN0aW5nIHNw
ZWN1bGF0aW9ucyBhYm91dCB0aGUgc2FtZSBvcGVyYW5kKS4gSW4gc3VjaCBjYXNlcyB0aGlzCiAg
ICAgLy8gZmxhZyBpcyBjbGVhcmVkLCBpbmRpY2F0aW5nIG5vIGZ1cnRoZXIgY29kZSBnZW5lcmF0
aW9uIHNob3VsZCB0YWtlIHBsYWNlLgogICAgIGJvb2wgbV9jb21waWxlT2theTsKKyNpZiAhREZH
X09TUgogICAgIC8vIFRoaXMgdmVjdG9yIHRyYWNrcyBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3Vs
YXRpdmUgcGF0aCB0byB0aGUgbm9uLXNwZWN1bGF0aXZlIG9uZS4KICAgICBTcGVjdWxhdGlvbkNo
ZWNrVmVjdG9yIG1fc3BlY3VsYXRpb25DaGVja3M7CisjZWxzZQorICAgIC8vIFRoaXMgdmVjdG9y
IHRyYWNrcyBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCB0byB0aGUgb2xkIEpJ
VC4KKyAgICBPU1JFeGl0VmVjdG9yIG1fb3NyRXhpdHM7CisjZW5kaWYKICAgICAvLyBTb21lIGJh
aWwtb3V0cyBuZWVkIHRvIHJlY29yZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlY29yZGluZyBz
cGVjaWZpYyByZWNvdmVyeQogICAgIC8vIHRvIGJlIHBlcmZvcm1lZCAoZm9yIGV4YW1wbGUsIG9u
IGRldGVjdGVkIG92ZXJmbG93IGZyb20gYW4gYWRkLCB3ZSBtYXkgbmVlZCB0bwogICAgIC8vIHJl
dmVyc2UgdGhlIGFkZGl0aW9uIGlmIGFuIG9wZXJhbmQgaXMgYmVpbmcgb3ZlcndyaXR0ZW4pLgog
ICAgIFZlY3RvcjxTcGVjdWxhdGlvblJlY292ZXJ5LCAxNj4gbV9zcGVjdWxhdGlvblJlY292ZXJ5
TGlzdDsKKyAgICAKKyAgICAvLyBUcmFja2luZyBmb3Igd2hpY2ggbm9kZXMgYXJlIGN1cnJlbnRs
eSBob2xkaW5nIHRoZSB2YWx1ZXMgb2YgYXJndW1lbnRzIGFuZCBieXRlY29kZQorICAgIC8vIG9w
ZXJhbmQtaW5kZXhlZCB2YXJpYWJsZXMuCisKKyAgICBWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZUZv
ck9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWVTb3VyY2VS
ZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldE5v
ZGVJbmRleEZvck9wZXJhbmQoTm9kZUluZGV4IG5vZGVJbmRleCwgaW50IG9wZXJhbmQpCisgICAg
eworICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCkgPSBWYWx1
ZVNvdXJjZShub2RlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgd2l0aCBj
YXJlLCBzaW5jZSBpdCBib3RoIHJldHVybnMgYSByZWZlcmVuY2UgaW50byBhbiBhcnJheQorICAg
IC8vIGFuZCBwb3RlbnRpYWxseSByZXNpemVzIHRoZSBhcnJheS4gU28gaXQgd291bGQgbm90IGJl
IHJpZ2h0IHRvIGNhbGwgdGhpcworICAgIC8vIHR3aWNlIGFuZCB0aGVuIHBlcmZvcm0gb3BlcmFu
ZHMgb24gYm90aCByZWZlcmVuY2VzLCBzaW5jZSB0aGUgb25lIGZyb20KKyAgICAvLyB0aGUgZmly
c3QgY2FsbCBtYXkgbm8gbG9uZ2VyIGJlIHZhbGlkLgorICAgIFZhbHVlU291cmNlJiB2YWx1ZVNv
dXJjZVJlZmVyZW5jZUZvck9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBpZiAo
b3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9
IG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7CisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKHVuc2lnbmVkKW9wZXJhbmQgPj0gbV92YXJp
YWJsZXMuc2l6ZSgpKQorICAgICAgICAgICAgbV92YXJpYWJsZXMucmVzaXplKG9wZXJhbmQgKyAx
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tvcGVyYW5kXTsKKyAgICB9
CisgICAgCisgICAgVmVjdG9yPFZhbHVlU291cmNlLCAwPiBtX2FyZ3VtZW50czsKKyAgICBWZWN0
b3I8VmFsdWVTb3VyY2UsIDA+IG1fdmFyaWFibGVzOworICAgIGludCBtX2xhc3RTZXRPcGVyYW5k
OworICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleEZvck9TUjsKKyAgICAKKyAgICBWYWx1ZVJl
Y292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CisKKyAg
ICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKHZhbHVlU291cmNlRm9y
T3BlcmFuZChvcGVyYW5kKSk7CisgICAgfQogfTsKIAogCkBAIC00NjUsMTEgKzcxNSwxNyBAQCBw
cml2YXRlOgogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKLQogLy8gPT09IFNwZWN1
bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yID09PQogLy8KIC8vIFRoaXMgY2xhc3MgaXMgdXNlZCBi
eSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCB0byBjaGVjayB3aGljaAogLy8gbm9kZXMgcmVxdWly
ZSBlbnRyeSBwb2ludHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aC4KKyNpZiBERkdfT1NSCisv
LyBUaGlzIGJlY29tZXMgYSBzdHViIGlmIE9TUiBpcyBlbmFibGVkLgorY2xhc3MgU3BlY3VsYXRp
b25DaGVja0luZGV4SXRlcmF0b3IgeworcHVibGljOgorICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRl
eEl0ZXJhdG9yKCkgeyB9Cit9OworI2Vsc2UKIGNsYXNzIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0
ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvcihTcGVj
dWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlvbkNoZWNrcykKQEAgLTQ5NSw3ICs3NTEsMTcg
QEAgcHJpdmF0ZToKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRvciBtX2l0ZXI7
CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9lbmQ7CiB9OworI2VuZGlm
CiAKK2lubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGpp
dCkKKyAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCB0cnVlKQorICAgICwgbV9jb21waWxlT2th
eSh0cnVlKQorICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRl
cnMpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29kZUJsb2NrKCktPm1fbnVtVmFycykKKyAgICAs
IG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAs
IG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpCit7Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcGFjdEpJVENvZGVNYXBfaAorI2RlZmlu
ZSBDb21wYWN0SklUQ29kZU1hcF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeworCisvLyBHaXZlcyB5b3UgYSBjb21wcmVzc2VkIG1hcCBiZXR3ZWVuIGJl
dHdlZW4gYnl0ZWNvZGUgaW5kaWNlcyBhbmQgbWFjaGluZSBjb2RlCisvLyBlbnRyeSBwb2ludHMu
IFRoZSBjb21wcmVzc2lvbiBzaW1wbHkgdHJpZXMgdG8gdXNlIGVpdGhlciAxLCAyLCBvciA0IGJ5
dGVzIGZvcgorLy8gYW55IGdpdmVuIG9mZnNldC4gVGhlIGxhcmdlc3Qgb2Zmc2V0IHRoYXQgY2Fu
IGJlIHN0b3JlZCBpcyAyXjMwLgorCisvLyBFeGFtcGxlIHVzZToKKy8vCisvLyBDb21wYWN0SklU
Q29kZU1hcDo6RW5jb2RlciBlbmNvZGVyKG1hcCk7CisvLyBlbmNvZGVyLmFwcGVuZChhLCBiKTsK
Ky8vIGVuY29kZXIuYXBwZW5kKGMsIGQpOyAvLyBwcmVjb25kaXRpb25zOiBjID49IGEsIGQgPj0g
YgorLy8gT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtYXAgPSBlbmNvZGVyLmZpbmlzaCgpOwor
Ly8KKy8vIEF0IHNvbWUgbGF0ZXIgdGltZToKKy8vCisvLyBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiBkZWNvZGVkOworLy8gbWFwLT5kZWNvZGUoZGVjb2RlZCk7CisKK3N0cnVjdCBC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQgeworICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCgp
IHsgfQorICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVjb2Rl
SW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgLCBtX21hY2hpbmVDb2RlT2Zmc2V0KG1hY2hp
bmVDb2RlT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlY29k
ZUluZGV4OworICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgCisgICAgc3Rh
dGljIGlubGluZSB1bnNpZ25lZCBnZXRCeXRlY29kZUluZGV4KEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldCogbWFwcGluZykKKyAgICB7CisgICAgICAgIHJldHVybiBtYXBwaW5nLT5tX2J5dGVjb2Rl
SW5kZXg7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0TWFjaGlu
ZUNvZGVPZmZzZXQoQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgfQorfTsKKwor
Y2xhc3MgQ29tcGFjdEpJVENvZGVNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIH5Db21wYWN0SklUQ29kZU1hcCgpCisgICAgeworICAgICAgICBpZiAobV9i
dWZmZXIpCisgICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgfQorICAgIAorICAg
IHZvaWQgZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiByZXN1bHQpIGNv
bnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOwor
ICAgICAgICB1bnNpZ25lZCBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAg
CisgICAgICAgIHJlc3VsdC5yZXNpemUobV9udW1iZXJPZkVudHJpZXMpOworICAgICAgICB1bnNp
Z25lZCBqID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZF
bnRyaWVzOyArK2kpIHsKKyAgICAgICAgICAgIHByZXZpb3VzQnl0ZWNvZGVJbmRleCArPSBkZWNv
ZGVOdW1iZXIoaik7CisgICAgICAgICAgICBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ICs9IGRl
Y29kZU51bWJlcihqKTsKKyAgICAgICAgICAgIHJlc3VsdFtpXS5tX2J5dGVjb2RlSW5kZXggPSBw
cmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9tYWNoaW5lQ29k
ZU9mZnNldCA9IHByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAg
QVNTRVJUKGogPT0gbV9zaXplKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENvbXBhY3RK
SVRDb2RlTWFwKHVpbnQ4X3QqIGJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgbnVtYmVy
T2ZFbnRyaWVzKQorICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgICAgICwgbV9zaXplKHNpemUpCisjZW5kaWYKKyAgICAgICAgLCBtX251bWJlck9m
RW50cmllcyhudW1iZXJPZkVudHJpZXMpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6
ZSk7CisgICAgfQorICAgIAorICAgIHVpbnQ4X3QgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9i
dWZmZXJbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBkZWNvZGVOdW1iZXIodW5z
aWduZWQmIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBh
dChpbmRleCsrKTsKKyAgICAgICAgaWYgKCEoaGVhZFZhbHVlICYgMTI4KSkKKyAgICAgICAgICAg
IHJldHVybiBoZWFkVmFsdWU7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDY0KSkKKyAgICAg
ICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1ZSAmIH4xMjgpIDw8
IDgpIHwgYXQoaW5kZXgrKyk7CisgICAgICAgIHVuc2lnbmVkIHNlY29uZCA9IGF0KGluZGV4Kysp
OworICAgICAgICB1bnNpZ25lZCB0aGlyZCAgPSBhdChpbmRleCsrKTsKKyAgICAgICAgdW5zaWdu
ZWQgZm91cnRoID0gYXQoaW5kZXgrKyk7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGhlYWRWYWx1ZSAmIH4oMTI4ICsgNjQpKSA8PCAyNCkgfCAoc2Vjb25kIDw8IDE2KSB8
ICh0aGlyZCA8PCA4KSB8IGZvdXJ0aDsKKyAgICB9CisgICAgCisgICAgdWludDhfdCogbV9idWZm
ZXI7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyNlbmRpZgor
ICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzOworICAgIAorcHVibGljOgorICAgIGNsYXNz
IEVuY29kZXIgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbmNvZGVyKTsKKyAgICBw
dWJsaWM6CisgICAgICAgIEVuY29kZXIoKTsKKyAgICAgICAgfkVuY29kZXIoKTsKKyAgICAgICAg
CisgICAgICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHlGb3IodW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVz
VG9BZGQpOworICAgICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNp
Z25lZCBtYWNoaW5lQ29kZU9mZnNldCk7CisgICAgICAgIFBhc3NPd25QdHI8Q29tcGFjdEpJVENv
ZGVNYXA+IGZpbmlzaCgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFw
cGVuZEJ5dGUodWludDhfdCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW5jb2RlTnVtYmVyKHVpbnQz
Ml90IHZhbHVlKTsKKyAgICAKKyAgICAgICAgdWludDhfdCogbV9idWZmZXI7CisgICAgICAgIHVu
c2lnbmVkIG1fc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICAgICAgdW5z
aWduZWQgbV9udW1iZXJPZkVudHJpZXM7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBtX3By
ZXZpb3VzQnl0ZWNvZGVJbmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9wcmV2aW91c01hY2hpbmVD
b2RlT2Zmc2V0OworICAgIH07CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEVuY29kZXI7
Cit9OworCitpbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIoKQorICAg
IDogbV9idWZmZXIoMCkKKyAgICAsIG1fc2l6ZSgwKQorICAgICwgbV9jYXBhY2l0eSgwKQorICAg
ICwgbV9udW1iZXJPZkVudHJpZXMoMCkKKyAgICAsIG1fcHJldmlvdXNCeXRlY29kZUluZGV4KDAp
CisgICAgLCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQoMCkKK3sKK30KKworaW5saW5lIENv
bXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjp+RW5jb2RlcigpCit7CisgICAgaWYgKG1fYnVmZmVy
KQorICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQg
Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4
LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKK3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRl
eCA+PSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1hY2hpbmVDb2RlT2Zm
c2V0ID49IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7CisgICAgZW5zdXJlQ2FwYWNpdHlG
b3IoMSk7CisgICAgZW5jb2RlTnVtYmVyKGJ5dGVjb2RlSW5kZXggLSBtX3ByZXZpb3VzQnl0ZWNv
ZGVJbmRleCk7CisgICAgZW5jb2RlTnVtYmVyKG1hY2hpbmVDb2RlT2Zmc2V0IC0gbV9wcmV2aW91
c01hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IGJ5dGVj
b2RlSW5kZXg7CisgICAgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVP
ZmZzZXQ7CisgICAgbV9udW1iZXJPZkVudHJpZXMrKzsKK30KKworaW5saW5lIFBhc3NPd25QdHI8
Q29tcGFjdEpJVENvZGVNYXA+IENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpmaW5pc2goKQor
eworICAgIG1fY2FwYWNpdHkgPSBtX3NpemU7CisgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG1fY2FwYWNpdHkpKTsKKyAgICBPd25QdHI8
Q29tcGFjdEpJVENvZGVNYXA+IHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBDb21wYWN0SklUQ29kZU1h
cChtX2J1ZmZlciwgbV9zaXplLCBtX251bWJlck9mRW50cmllcykpOworICAgIG1fYnVmZmVyID0g
MDsKKyAgICBtX3NpemUgPSAwOworICAgIG1fY2FwYWNpdHkgPSAwOworICAgIG1fbnVtYmVyT2ZF
bnRyaWVzID0gMDsKKyAgICBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IDA7CisgICAgbV9wcmV2
aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
K30KKyAgICAgICAgCitpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBw
ZW5kQnl0ZSh1aW50OF90IHZhbHVlKQoreworICAgIEFTU0VSVChtX3NpemUgKyAxIDw9IG1fY2Fw
YWNpdHkpOworICAgIG1fYnVmZmVyW21fc2l6ZSsrXSA9IHZhbHVlOworfQorICAgIAoraW5saW5l
IHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcih1aW50MzJfdCB2
YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXplICsgNCA8PSBtX2NhcGFjaXR5KTsKKyAgICBBU1NF
UlQodmFsdWUgPCAoMSA8PCAzMCkpOworICAgIGlmICh2YWx1ZSA8PSAxMjcpIHsKKyAgICAgICAg
dWludDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7CisgICAgICAg
IEFTU0VSVCghKGhlYWRWYWx1ZSAmIDEyOCkpOworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1
ZSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAxNjM4MykgeworICAgICAgICB1aW50OF90IGhl
YWRWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpOworICAgICAgICBBU1NF
UlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgNjQp
KTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjgpOworICAgICAgICBhcHBlbmRC
eXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
dWludDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiAyNCk7Cisg
ICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDEyOCkpOworICAgICAgICBBU1NFUlQoIShoZWFk
VmFsdWUgJiA2NCkpOworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSB8IDEyOCB8IDY0KTsK
KyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiAxNikpOwor
ICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpKTsKKyAg
ICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KK30K
KworaW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuc3VyZUNhcGFjaXR5
Rm9yKHVuc2lnbmVkIG51bWJlck9mRW50cmllc1RvQWRkKQoreworICAgIHVuc2lnbmVkIGNhcGFj
aXR5TmVlZGVkID0gbV9zaXplICsgbnVtYmVyT2ZFbnRyaWVzVG9BZGQgKiAyICogNDsKKyAgICBp
ZiAoY2FwYWNpdHlOZWVkZWQgPiBtX2NhcGFjaXR5KSB7CisgICAgICAgIG1fY2FwYWNpdHkgPSBj
YXBhY2l0eU5lZWRlZCAqIDI7CisgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENvbXBhY3RKSVRDb2RlTWFwX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDExIEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICBtX2xhYmVsc1tt
X2J5dGVjb2RlT2Zmc2V0XSA9IGxhYmVsKCk7CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFU
SU9OKQorICAgICAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgICAgIG1faml0Q29k
ZU1hcEVuY29kZXIuYXBwZW5kKG1fYnl0ZWNvZGVPZmZzZXQsIGRpZmZlcmVuY2VCZXR3ZWVuKG1f
c3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKKyNlbmRpZgorCiAgICAgICAgIHN3aXRjaCAobV9pbnRl
cnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKICAg
ICAgICAgREVGSU5FX0JJTkFSWV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAgICBERUZJTkVfQklO
QVJZX09QKG9wX2luKQpAQCAtMzczLDcgKzM3OCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICNlbmRpZgogfQogCi0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQ
YXNzKCkKIHsKICAgICB1bnNpZ25lZCBqbXBUYWJsZUNvdW50ID0gbV9qbXBUYWJsZS5zaXplKCk7
CkBAIC01MDIsNiArNTA2LDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIq
IGZ1bgogewogI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAgICAgbV9jYW5CZU9wdGlt
aXplZCA9IG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpOworICAgIGlmIChtX2NhbkJl
T3B0aW1pemVkKQorICAgICAgICBtX3N0YXJ0T2ZDb2RlID0gbGFiZWwoKTsKICNlbmRpZgogICAg
IAogICAgIC8vIEp1c3QgYWRkIGEgbGl0dGxlIGJpdCBvZiByYW5kb21uZXNzIHRvIHRoZSBjb2Rl
Z2VuCkBAIC02NDIsNiArNjQ4LDExIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2Rl
UHRyKiBmdW4KICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBtX2NvZGVCbG9jay0+
c3RydWN0dXJlU3R1YkluZm8obV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvW2ldLnByb3BlcnR5
QWNjZXNzSW5kZXgpLmNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICB9CiAKKyNpZiBFTkFCTEUoVElF
UkVEX0NPTVBJTEFUSU9OKQorICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAgICBtX2Nv
ZGVCbG9jay0+c2V0SklUQ29kZU1hcChtX2ppdENvZGVNYXBFbmNvZGVyLmZpbmlzaCgpKTsKKyNl
bmRpZgorCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAm
JiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0eUNo
ZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5l
IEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0Uo
YWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3Qg
JWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGFjdHVhbCkpOwogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29t
cGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpT
SW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCkBAIC0xMDU0LDYgKzEwNTUsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElP
TikKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOworICAgICAgICBMYWJlbCBtX3N0YXJ0
T2ZDb2RlOworICAgICAgICBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2RlciBtX2ppdENvZGVNYXBF
bmNvZGVyOwogI2VuZGlmCiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9u
IDk0OTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDYgKzE5Miw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9i
YWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIHBhcnNlcihuZXcgUGFyc2VyKQogICAgICwgaW50
ZXJwcmV0ZXIoMCkKICAgICAsIGhlYXAodGhpcywgaGVhcFNpemUpCisjaWYgRU5BQkxFKFRJRVJF
RF9DT01QSUxBVElPTikKKyAgICAsIG51bWJlck9mU2xvdHNJbkxhc3RPU1JTY3JhdGNoQnVmZmVy
KDApCisjZW5kaWYKICAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkKICAgICAsIGNhY2hlZFVU
Q09mZnNldChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQogICAgICwg
bWF4UmVlbnRyeURlcHRoKHRocmVhZFN0YWNrVHlwZSA9PSBUaHJlYWRTdGFja1R5cGVTbWFsbCA/
IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoIDogTWF4TGFyZ2VUaHJlYWRSZWVudHJ5RGVwdGgp
CkBAIC0zNTcsNiArMzYwLDExIEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjaWYg
RU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGRlbGV0ZSBtX3J0VHJhY2VMaXN0OwogI2VuZGlm
CisKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBvc3JTY3JhdGNoQnVmZmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgZmFzdEZyZWUo
b3NyU2NyYXRjaEJ1ZmZlcnNbaV0pOworI2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8SlNHbG9iYWxE
YXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cChUaHJlYWRTdGFja1R5cGUgdHlw
ZSwgSGVhcFNpemUgaGVhcFNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDYgKzIz
NSwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGludDY0X3Qg
ZGVidWdEYXRhQnVmZmVyWzY0XTsKICNlbmRpZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJ
T04pCisgICAgICAgIFZlY3RvcjxpbnQ2NF90Kj4gb3NyU2NyYXRjaEJ1ZmZlcnM7CisgICAgICAg
IHNpemVfdCBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcjsKKyAgICAgICAgCisg
ICAgICAgIGludDY0X3QqIG9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKHVuc2lnbmVkIG51bWJlck9m
U2xvdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbnVtYmVyT2ZTbG90cykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG51bWJl
ck9mU2xvdHMgPiBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcikgeworICAgICAg
ICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBhIE5eMiBtZW1vcnkgdXNhZ2UgcGF0aG9sb2d5
IGJ5IGVuc3VyaW5nCisgICAgICAgICAgICAgICAgLy8gdGhhdCBhdCB3b3JzdCwgd2UgZ2V0IGEg
Z2VvbWV0cmljIHNlcmllcywgbWVhbmluZyB0aGF0IHRoZQorICAgICAgICAgICAgICAgIC8vIHRv
dGFsIG1lbW9yeSB1c2FnZSBpcyBzb21ld2hlcmUgYXJvdW5kCisgICAgICAgICAgICAgICAgLy8g
bWF4KHNjcmF0Y2ggYnVmZmVyIHNpemUpICogNC4KKyAgICAgICAgICAgICAgICBudW1iZXJPZlNs
b3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlciA9IG51bWJlck9mU2xvdHMgKiAyOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG9zclNjcmF0Y2hCdWZmZXJzLmFwcGVuZChzdGF0aWNf
Y2FzdDxpbnQ2NF90Kj4oZmFzdE1hbGxvYyhzaXplb2YoaW50NjRfdCkgKiBudW1iZXJPZlNsb3Rz
SW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuIG9zclNjcmF0Y2hCdWZmZXJzLmxhc3QoKTsKKyAgICAgICAgfQor
I2VuZGlmCiAjZW5kaWYKIAogICAgICAgICBIYXNoTWFwPE9wYXF1ZUpTQ2xhc3MqLCBPcGFxdWVK
U0NsYXNzQ29udGV4dERhdGEqPiBvcGFxdWVKU0NsYXNzRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTksNyArMTE5LDcgQEAgSlNPYmplY3QqIEpTVmFsdWU6OnN5bnRoZXNpemVQcm90b3R5cGUoRQog
I2lmbmRlZiBOREVCVUcKIGNoYXIqIEpTVmFsdWU6OmRlc2NyaXB0aW9uKCkKIHsKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHNpemUgPSAzMjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemUg
PSA2NDsKICAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlvbltzaXplXTsKIAogICAgIGlmICghKnRo
aXMpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107000</attachid>
            <date>2011-09-10 22:42:51 -0700</date>
            <delta_ts>2011-09-12 13:44:18 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>osr_patch_10.diff</filename>
            <type>text/plain</type>
            <size>92222</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
IAogICAgICAgICBERkcgSklUIGNvbXBsZXRlbHkgdW5kb2VzIHNwZWN1bGF0aXZlIGNvbXBpbGF0
aW9uIGV2ZW4gaW4gdGhlIGNhc2Ugb2YKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw3
IEBACiAJCTBGRDNDODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIy
MDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBG
RDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07
CiAJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMy
RjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgyRTM5MTQxQUIx
NEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBh
Y3RKSVRDb2RlTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQwMDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0
b3JQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07
CiAJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZC
QTJEMDAwMDE4NjUgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtNzg5LDYgKzc5
MCw3IEBACiAJCTBGRDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRm
Zy9ERkdQcm9wYWdhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFF
MTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRmZy9ERkdD
YXBhYmlsaXRpZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRjE0
MTcyQzJGMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGll
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlD
OTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tcGFjdEpJVENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQw
MDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyog
SlNCYXNlUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQ
cml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY4LDYgKzE1NzAsNyBA
QAogCQkxNDI5RDkyQzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyog
RXhlY3V0YWJsZUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2
IC8qIEV4ZWN1dGFibGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5
MjEgLyogRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTIzODIsNiAr
MjM4NSw3IEBACiAJCQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQg
LyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4
MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQ29kZUJs
b2NrX2gKICNkZWZpbmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFw
LmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgi
CiAjaW5jbHVkZSAiSklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgdm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29kZU1hcChQYXNz
T3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2ppdENvZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAgICAgIENvbXBh
Y3RKSVRDb2RlTWFwKiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1faml0Q29kZU1hcC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSU5U
RVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiBy
ZXR1cm5BZGRyZXNzKQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVj
azsKICAgICAgICAgU2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50
aW5lbE5vZGU8Q2FsbExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgorI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1h
cD4gbV9qaXRDb2RlTWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CiAj
ZW5kaWYKQEAgLTY2Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1i
b2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2Fs
dGVybmF0aXZlOyAvLyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAgICAgIE93blB0
cjxDb2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsK
ICAgICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5MTQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJU
KG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1f
Y29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50
KG1fY29uc3RhbnQxKTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2Rl
T3JpZ2luKCkKKyAgICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4
KTsKKyAgICB9CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBp
dCB0byB0aGUgZ3JhcGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdl
bmVyYXRlJyB0aGVuIHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3Vy
ZSBnZW5lcmF0aW9uLgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2Rl
SW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5k
ZXggY2hpbGQzID0gTm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4
ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgbV9jdXJyZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAg
bV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGls
ZDIsIGNoaWxkMykpOwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3LDcgQEAgcHJp
dmF0ZToKICAgICBOb2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8s
IE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5v
ZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0
SW5kZXggPSAoTm9kZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVu
ZChOb2RlKG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OworICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBp
bmZvLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11
c3RHZW5lcmF0ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM5
Miw3ICszOTYsNyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBl
IG9wLCBPcEluZm8gaW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9k
ZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkK
ICAgICB7CiAgICAgICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFw
aC5zaXplKCk7Ci0gICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4
LCBpbmZvMSwgaW5mbzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFw
aC5hcHBlbmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGls
ZDEsIGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0
ZSkKICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQwMiw3ICs0MDYs
NyBAQCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywg
Tm9kZVR5cGUgb3AsIE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAg
Tm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAg
ICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwg
aW5mbzEsIGluZm8yLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNz
ZWRWYXJBcmdzLCBtX251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQo
Tm9kZShOb2RlOjpWYXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIs
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1f
bnVtUGFzc2VkVmFyQXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdz
ID0gMDsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIu
Y3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29t
cGlsZU90aGVyIH07CiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBKSVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENv
ZGVXaXRoQXJpdHlDaGVjaykKIHsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgc3dpdGNoIChj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpIHsK
KyAgICAgICAgY2FzZSAxMTE3NjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAogICAg
IEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgR3Jh
cGggZGZnKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7
CiAgICAgaWYgKCFwYXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVn
aXN0ZXJzID0gOTsKIAogICAgIC8vIFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4K
KyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0
ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9
IFg4NlJlZ2lzdGVyczo6cjEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVn
aXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ5MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NCwxMiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7
CiAgICAgfQogCi0jaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8g
VGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0
dWFsIHJlZ2lzdGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5v
ZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAg
dW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkg
ewotICAgICAgICBwcmludGYoIiUgNGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwg
b3BOYW1lKG9wKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0g
IXJlZkNvdW50OwogICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsK
LSAgICBpZiAobXVzdEdlbmVyYXRlKQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAg
QVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBF
eGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3
LDggKzc2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAg
IC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3Rh
bnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBp
bnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAg
LSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJs
b2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlz
cGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRo
ZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0
aW9ucy4KLSAgICBwcmludGYoIiUgNGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdl
bmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkp
CisgICAgcHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAi
ICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCBy
ZWZDb3VudCk7CisgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAg
IHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAg
IHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
MjYsMTcgKzExMjYsMTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBu
bwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2Nr
KCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVy
OjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2so
c2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9u
SW5mbyk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxs
V2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21f
Y29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3Mp
LCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9j
aygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0
aW9uSW5mbyk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAg
ICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xMTQ0LDcgKzExNDQsNyBAQCB2
b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxs
LCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGls
ZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNs
b3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5k
ZXhdLmNvZGVPcmlnaW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9u
Q2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDkx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC05MDcsNyArOTA3LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0
ciYgZnVuY3Rpb24pCiAgICAgewotICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhj
ZXB0aW9uSW5mbyk7CisgICAgICAgIHJldHVybiBtX2ppdC5hcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKGZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2lu
KTsKICAgICB9CiAKICAgICB2b2lkIGFkZEJyYW5jaChjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCYganVtcCwgQmxvY2tJbmRleCBkZXN0aW5hdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAsNiArMTAwLDM0MiBAQCB2b2lkIEpJVENvbXBpbGVyOjpmaWxsVG9KUyhOb2RlSW5kZXgg
bm9kCiAgICAgbG9hZFB0cihhZGRyZXNzRm9yKG5vZGUudmlydHVhbFJlZ2lzdGVyKCkpLCBncHIp
OwogfQogCisjaWYgREZHX09TUgordm9pZCBKSVRDb21waWxlcjo6ZXhpdFNwZWN1bGF0aXZlV2l0
aE9TUihjb25zdCBPU1JFeGl0JiBleGl0LCBTcGVjdWxhdGlvblJlY292ZXJ5KiByZWNvdmVyeSwg
VmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKQoreworICAg
IC8vIDEpIFByby1mb3JtYSBzdHVmZi4KKyAgICBleGl0Lm1fY2hlY2subGluayh0aGlzKTsKKwor
I2lmIERGR19ERUJVR19WRVJCT1NFCisgICAgZnByaW50ZihzdGRlcnIsICJPU1IgZXhpdCBmb3Ig
Tm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAiLCAoaW50KWV4aXQubV9ub2Rl
SW5kZXgsIGV4aXQubV9ieXRlY29kZUluZGV4LCBkZWJ1Z09mZnNldCgpKTsKKyAgICBleGl0LmR1
bXAoc3RkZXJyKTsKKyNlbmRpZgorI2lmIERGR19KSVRfQlJFQUtfT05fU1BFQ1VMQVRJT05fRkFJ
TFVSRQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIERGR19WRVJCT1NFX1NQ
RUNVTEFUSU9OX0ZBSUxVUkUKKyAgICBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8qIGRlYnVn
SW5mbyA9IG5ldyBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm87CisgICAgZGVidWdJbmZvLT5j
b2RlQmxvY2sgPSBtX2NvZGVCbG9jazsKKyAgICBkZWJ1Z0luZm8tPmRlYnVnT2Zmc2V0ID0gZGVi
dWdPZmZzZXQoKTsKKyAgICAKKyAgICBkZWJ1Z0NhbGwoZGVidWdPcGVyYXRpb25QcmludFNwZWN1
bGF0aW9uRmFpbHVyZSwgZGVidWdJbmZvKTsKKyNlbmRpZgorICAgIAorICAgIC8vIDIpIFBlcmZv
cm0gc3BlY3VsYXRpb24gcmVjb3ZlcnkuIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgd2hlbiBh
biBvcGVyYXRpb24KKyAgICAvLyAgICBzdGFydHMgbXV0YXRpbmcgc3RhdGUgYmVmb3JlIHZlcmlm
eWluZyB0aGUgc3BlY3VsYXRpb24gaXQgaGFzIGFscmVhZHkgbWFkZS4KKyAgICAKKyAgICBHUFJS
ZWcgYWxyZWFkeUJveGVkID0gSW52YWxpZEdQUlJlZzsKKyAgICAKKyAgICBpZiAocmVjb3Zlcnkp
IHsKKyAgICAgICAgc3dpdGNoIChyZWNvdmVyeS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgU3Bl
Y3VsYXRpdmVBZGQ6CisgICAgICAgICAgICBzdWIzMihyZWNvdmVyeS0+c3JjKCksIHJlY292ZXJ5
LT5kZXN0KCkpOworICAgICAgICAgICAgb3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCByZWNvdmVyeS0+ZGVzdCgpKTsKKyAgICAgICAgICAgIGFscmVhZHlCb3hlZCA9IHJlY292
ZXJ5LT5kZXN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrOgorICAgICAgICAgICAgeG9yUHRyKFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlY292ZXJ5LT5kZXN0KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gMykgRmlndXJlIG91
dCBob3cgbWFueSBzY3JhdGNoIHNsb3RzIHdlJ2xsIG5lZWQuIFdlIG5lZWQgb25lIGZvciBldmVy
eSBHUFIvRlBSCisgICAgLy8gICAgd2hvc2UgZGVzdGluYXRpb24gaXMgbm93IG9jY3VwaWVkIGJ5
IGEgREZHIHZpcnR1YWwgcmVnaXN0ZXIsIGFuZCB3ZSBuZWVkCisgICAgLy8gICAgb25lIGZvciBl
dmVyeSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlciBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuCisg
ICAgLy8gICAgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgb2YgdGhlbS4gQWxzbyBzZWUgaWYg
dGhlcmUgYXJlIGFueSBjb25zdGFudHMsCisgICAgLy8gICAgYW55IHVuZGVmaW5lZCBzbG90cywg
YW55IEZQUiBzbG90cywgYW5kIGFueSB1bmJveGVkIGludHMuCisgICAgICAgICAgICAKKyAgICBW
ZWN0b3I8Ym9vbD4gcG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKGV4aXQubV92YXJpYWJsZXMuc2l6
ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcG9pc29uZWRWaXJ0dWFsUmVnaXN0
ZXJzLnNpemUoKTsgKytpKQorICAgICAgICBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbaV0gPSBm
YWxzZTsKKworICAgIHVuc2lnbmVkIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzID0g
MDsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPSAwOwor
ICAgIAorICAgIC8vIEJvb2xlYW5zIGZvciBmYXN0IGNoZWNrcy4gV2UgZXhwZWN0IHRoYXQgbW9z
dCBPU1IgZXhpdHMgZG8gbm90IGhhdmUgdG8gcmVib3gKKyAgICAvLyBJbnQzMnMsIGhhdmUgbm8g
RlBScywgYW5kIGhhdmUgbm8gY29uc3RhbnRzLiBJZiB0aGVyZSBhcmUgY29uc3RhbnRzLCB3ZQor
ICAgIC8vIGV4cGVjdCBtb3N0IG9mIHRoZW0gdG8gYmUganNVbmRlZmluZWQoKTsgaWYgdGhhdCdz
IHRydWUgdGhlbiB3ZSBoYW5kbGUgdGhhdAorICAgIC8vIHNwZWNpYWxseSB0byBtaW5pbWl6ZSBj
b2RlIHNpemUgYW5kIGV4ZWN1dGlvbiB0aW1lLgorICAgIGJvb2wgaGF2ZVVuYm94ZWRJbnQzMnMg
PSBmYWxzZTsKKyAgICBib29sIGhhdmVGUFJzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlQ29uc3Rh
bnRzID0gZmFsc2U7CisgICAgYm9vbCBoYXZlVW5kZWZpbmVkID0gZmFsc2U7CisgICAgCisgICAg
Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsr
aW5kZXgpIHsKKyAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZh
bHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgp
KSB7CisgICAgICAgIGNhc2UgRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU6CisgICAgICAgICAgICBu
dW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgIEFTU0VSVCgo
aW50KXJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpID49IDApOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBTZWUgaWYgd2UgbWlnaHQgbGlrZSB0byBzdG9yZSB0byB0aGlzIHZpcnR1YWwg
cmVnaXN0ZXIgYmVmb3JlIGRvaW5nCisgICAgICAgICAgICAvLyB2aXJ0dWFsIHJlZ2lzdGVyIHNo
dWZmbGluZy4gSWYgc28sIHdlIHNheSB0aGF0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyCisgICAgICAg
ICAgICAvLyBpcyBwb2lzb25lZDogaXQgY2Fubm90IGJlIHN0b3JlZCB0byB1bnRpbCBhZnRlciBk
aXNwbGFjZWQgdmlydHVhbAorICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIGFyZSBoYW5kbGVkLiBX
ZSB0cmFjayBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVyIGNhcmVmdWxseQorICAgICAgICAgICAg
Ly8gdG8gZW5zdXJlIHRoaXMgaGFwcGVucyBlZmZpY2llbnRseS4gTm90ZSB0aGF0IHdlIGV4cGVj
dCB0aGlzIGNhc2UKKyAgICAgICAgICAgIC8vIHRvIGJlIHJhcmUsIHNvIHRoZSBoYW5kbGluZyBv
ZiBpdCBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlcyBpbgorICAgICAgICAgICAgLy8gd2hpY2gg
aXQgZG9lcyBub3QgaGFwcGVuLgorICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnZpcnR1YWxSZWdp
c3RlcigpIDwgKGludClleGl0Lm1fdmFyaWFibGVzLnNpemUoKSkgeworICAgICAgICAgICAgICAg
IHN3aXRjaCAoZXhpdC5tX3ZhcmlhYmxlc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0udGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgICAg
IGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbcmVjb3Zlcnku
dmlydHVhbFJlZ2lzdGVyKCldKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwb2lzb25lZFZp
cnR1YWxSZWdpc3RlcnNbcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCldID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKys7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGhhdmVVbmJveGVk
SW50MzJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgSW5GUFI6CisgICAgICAgICAgICBoYXZlRlBScyA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENvbnN0YW50OgorICAgICAgICAgICAg
aGF2ZUNvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQo
KS5pc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGhhdmVVbmRlZmluZWQgPSB0cnVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludDY0X3QqIHNjcmF0
Y2hCdWZmZXIgPSBnbG9iYWxEYXRhKCktPm9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKG51bWJlck9m
UG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgKG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lz
dGVycyA8PSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyA/IDAgOiBudW1iZXJPZkRpc3BsYWNl
ZFZpcnR1YWxSZWdpc3RlcnMpKTsKKworICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNz
dW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCisgICAg
Ly8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9y
ZWQuCisgICAgCisgICAgLy8gNCkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCisg
ICAgCisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4
ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVy
eShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hl
ZEludDMySW5HUFIgJiYgcmVjb3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVkKQorICAgICAgICAg
ICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3By
KCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDUpIER1bXAgYWxsIG5vbi1wb2lz
b25lZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywgc2F2ZSB0aGVtIGludG8gdGhlIHNjcmF0Y2gg
c3RvcmFnZS4KKyAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hh
bmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0CisgICAgLy8gICAgbW9z
dCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVk
cyB0byBiZSBkdW1wZWQuCisgICAgCisgICAgdW5zaWduZWQgc2NyYXRjaEluZGV4ID0gMDsKKyAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsg
KytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5k
Rm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7
CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6Cisg
ICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAg
c3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVjb3ZlcnkuZ3By
KCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgYWxsIEdQUnMgYXJlIGF2YWlsYWJsZSBm
b3Igc2NyYXRjaCB1c2UuCisgICAgCisgICAgaWYgKGhhdmVGUFJzKSB7CisgICAgICAgIC8vIDYp
IEJveCBhbGwgZG91YmxlcyAocmVsaWVzIG9uIHRoZXJlIGJlaW5nIG1vcmUgR1BScyB0aGFuIEZQ
UnMpCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5u
dW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigpOworICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChm
cHIpKTsKKyAgICAgICAgICAgIGJveERvdWJsZShmcHIsIGdwcik7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIDcpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmls
ZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBpZgorICAgICAgICAvLyAgICB0aGUgZGVzdGlu
YXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KKyAgICAgICAgCisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBHUFJS
ZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LmZw
cigpKSk7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAg
ICAgICAgICAgc3RvcmVQdHIoZ3ByLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKGdwciwgYWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDgpIFJlc2h1ZmZsZSBkaXNwbGFj
ZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8g
ICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUg
dGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVy
cy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7Cisg
ICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6
bnVtYmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMg
dG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAg
ICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgICAg
IHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVl
UmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUo
KSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxS
ZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAw
OworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZS
ZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292
ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAg
ICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihH
UFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAvLyBmb3Ig
c3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNjb3ZlciB0
aGF0CisgICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZhbHVl
cyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgICAgICAvLyBzcGlsbGVkIHJlYWxseSBl
bmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgorICAgICAgICAKKyAgICAgICAg
ICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBidXQg
cHJvYmFibHkgbm90CisgICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQgY29y
cmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgIC8vIHRo
ZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiB2YWx1
ZXMsIGxpa2UKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAxIC0+IDIKKyAgICAgICAg
ICAgIC8vIDIgLT4gMQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEl0IGFjY29tcGxp
c2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3RlcnMK
KyAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlvbnMgYW5kIGRy
b3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCisgICAgICAgICAgICAvLyBsb2NhdGlvbiBpbiBtZW1v
cnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2NhdGlvbgorICAg
ICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCisgICAgICAgIAor
ICAgICAgICAgICAgaW50NjRfdCogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEoKS0+b3NyU2Ny
YXRjaEJ1ZmZlckZvclNpemUobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1i
ZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZp
bGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGxvYWRQ
dHIoYWRkcmVzc0ZvcihyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgc2NyYXRjaEJ1ZmZl
ciArIHNjcmF0Y2hJbmRleCsrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAg
ICBzY3JhdGNoSW5kZXggPSBudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyczsKKyAgICAg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVj
b3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChy
ZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNoQnVm
ZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBz
dG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQu
b3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMgKyBudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIDkpIER1bXAgYWxsIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXJz
LgorICAgIAorICAgIHNjcmF0Y2hJbmRleCA9IDA7CisgICAgaWYgKG51bWJlck9mUG9pc29uZWRW
aXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGZvciAoaW50IHZpcnR1YWxSZWdpc3RlciA9IDA7
IHZpcnR1YWxSZWdpc3RlciA8IChpbnQpZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmlydHVh
bFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1t2
aXJ0dWFsUmVnaXN0ZXJdKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQubV92YXJp
YWJsZXNbdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVj
aG5pcXVlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICBjYXNlIFVu
Ym94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgICAg
ICBsb2FkUHRyKHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKywgR1BSSW5mbzo6cmVnVDAp
OworICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpdmlydHVhbFJlZ2lzdGVyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChzY3Jh
dGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAg
IC8vIDEwKSBEdW1wIGFsbCBjb25zdGFudHMuIE9wdGltaXplIGZvciBVbmRlZmluZWQsIHNpbmNl
IHRoYXQncyBhIGNvbnN0YW50IHdlIHNlZQorICAgIC8vICAgICBvZnRlbi4KKworICAgIGlmICho
YXZlQ29uc3RhbnRzKSB7CisgICAgICAgIGlmIChoYXZlVW5kZWZpbmVkKQorICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIEdQUklu
Zm86OnJlZ1QwKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXgg
PCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gQ29uc3RhbnQpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkuY29uc3RhbnQoKS5p
c1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKEdQUkluZm86OnJlZ1QwLCBh
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0
cihKU1ZhbHVlOjplbmNvZGUocmVjb3ZlcnkuY29uc3RhbnQoKSkpLCBhZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgLy8gMTEpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29k
ZSBvcGVyYXRpb24gaW50byByZWdUMC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVy
YW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAgIGxvYWRQdHIo
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0T3BlcmFuZCksIEdQUklu
Zm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyAxMikgRml4IGNhbGwgZnJh
bWUuCisgICAgCisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRU
eXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoY29kZUJsb2NrKCktPmFsdGVybmF0aXZlKCkpLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spKTsKKyAgICAKKyAgICAvLyAxMykgSnVtcCBpbnRv
IHRoZSBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIEpJVCBjb2RlLgorICAgIAorICAgIEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJpbmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQsIHVuc2lnbmVkLCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2Rl
SW5kZXg+KGRlY29kZWRDb2RlTWFwLmJlZ2luKCksIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhp
dC5tX2J5dGVjb2RlSW5kZXgpOworICAgIAorICAgIEFTU0VSVChtYXBwaW5nKTsKKyAgICBBU1NF
UlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4ID09IGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAg
ICAKKyAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRD
b2RlKCkuc3RhcnQoKSkgKyBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICAKKyAg
ICBBU1NFUlQoR1BSSW5mbzo6cmVnVDEgIT0gR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIp
OworICAgIAorICAgIG1vdmUoVHJ1c3RlZEltbVB0cihqdW1wVGFyZ2V0KSwgR1BSSW5mbzo6cmVn
VDEpOworICAgIGp1bXAoR1BSSW5mbzo6cmVnVDEpOworCisjaWYgREZHX0RFQlVHX1ZFUkJPU0UK
KyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIC0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKKyNlbmRpZgor
fQorCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1
bGF0aXZlKQoreworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWRD
b2RlTWFwOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNT
RVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0
Q29kZU1hcCgpKTsKKyAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgp
LT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIAorICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJh
dG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKKyAgICBPU1JF
eGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5k
KCk7CisgICAgCisgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgeworICAgICAgICBj
b25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZl
V2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNv
dmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICArK2V4aXRzSXRlcjsKKyAgICB9
Cit9CisjZWxzZSAvLyBERkdfT1NSCiBjbGFzcyBHZW5lcmFsaXplZFJlZ2lzdGVyIHsKIHB1Ymxp
YzoKICAgICBHZW5lcmFsaXplZFJlZ2lzdGVyKCkgeyB9CkBAIC04MDMsNiArMTEzOSw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmxpbmtTcGVjdWxhdGlvbkNoZWNrcygKICAgICBBU1NFUlQoIShjaGVj
a3NJdGVyICE9IGNoZWNrc0VuZCkpOwogICAgIEFTU0VSVCghKGVudHJpZXNJdGVyICE9IGVudHJp
ZXNFbmQpKTsKIH0KKyNlbmRpZiAvLyBERkdfT1NSCiAKIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBp
bGVFbnRyeSgpCiB7CkBAIC04NDQsMTIgKzExODEsMTYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29t
cGlsZUJvZHkoKQogICAgIC8vIHRvIGFsbG93IGl0IHRvIGNoZWNrIHdoaWNoIG5vZGVzIGluIHRo
ZSBncmFwaCBtYXkgYmFpbCBvdXQsIGFuZCBtYXkgbmVlZCB0byByZWVudGVyIHRoZQogICAgIC8v
IG5vbi1zcGVjdWxhdGl2ZSBwYXRoLgogICAgIGlmIChjb21waWxlZFNwZWN1bGF0aXZlKSB7Cisj
aWYgREZHX09TUgorICAgICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOworI2Vsc2UKICAg
ICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcihzcGVjdWxh
dGl2ZS5zcGVjdWxhdGlvbkNoZWNrcygpKTsKICAgICAgICAgTm9uU3BlY3VsYXRpdmVKSVQgbm9u
U3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxlKGNoZWNr
SXRlcmF0b3IpOwogCiAgICAgICAgIC8vIExpbmsgdGhlIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVj
dWxhdGl2ZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBu
b24tc3BlY3VsYXRpdmUgb25lLgogICAgICAgICBsaW5rU3BlY3VsYXRpb25DaGVja3Moc3BlY3Vs
YXRpdmUsIG5vblNwZWN1bGF0aXZlKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IElmIGNvbXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cg
YXdheSB0aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKQEAg
LTg1OCw4ICsxMTk5LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAg
ICAgbV9tZXRob2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRp
dmVQYXRoQmVnaW4pOwogCisjaWYgREZHX09TUgorICAgICAgICBTcGVjdWxhdGlvbkNoZWNrSW5k
ZXhJdGVyYXRvciBjaGVja0l0ZXJhdG9yOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRpb25DaGVj
a1ZlY3RvciBub0NoZWNrczsKICAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3Ig
Y2hlY2tJdGVyYXRvcihub0NoZWNrcyk7CisjZW5kaWYKICAgICAgICAgTm9uU3BlY3VsYXRpdmVK
SVQgbm9uU3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxl
KGNoZWNrSXRlcmF0b3IpOwogICAgIH0KQEAgLTkwNyw3ICsxMjUyLDcgQEAgdm9pZCBKSVRDb21w
aWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fY2FsbHNbaV0u
bV9oYW5kbGVzRXhjZXB0aW9ucykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJldHVybkFk
ZHJlc3NPZmZzZXQgPSBsaW5rQnVmZmVyLnJldHVybkFkZHJlc3NPZmZzZXQobV9jYWxsc1tpXS5t
X2NhbGwpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8gPSBtX2NhbGxz
W2ldLm1fZXhjZXB0aW9uSW5mbzsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25J
bmZvID0gbV9jYWxsc1tpXS5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwogICAgICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQocmV0dXJuQWRkcmVzc09mZnNldCwgZXhjZXB0aW9u
SW5mbykpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTMs
NiArNTMsNyBAQCBjbGFzcyBTcGVjdWxhdGlvblJlY292ZXJ5OwogCiBzdHJ1Y3QgRW50cnlMb2Nh
dGlvbjsKIHN0cnVjdCBTcGVjdWxhdGlvbkNoZWNrOworc3RydWN0IE9TUkV4aXQ7CiAKICNpZm5k
ZWYgTkRFQlVHCiB0eXBlZGVmIHZvaWQgKCpWX0RGR0RlYnVnT3BlcmF0aW9uX0VQKShFeGVjU3Rh
dGUqLCB2b2lkKik7CkBAIC04MiwyMSArODMsMjEgQEAgc3RydWN0IENhbGxSZWNvcmQgewogICAg
IH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgd2l0aCBhbiBleGNlcHRpb24gaGFu
ZGxlci4KLSAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywgRXhjZXB0
aW9uSW5mbyBleGNlcHRpb25JbmZvKQorICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2Vw
dGlvbkNoZWNrLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwp
CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKICAgICAgICAgLCBtX2V4Y2VwdGlvbkNo
ZWNrKGV4Y2VwdGlvbkNoZWNrKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1faGFu
ZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQogCiAgICAgLy8gQ29uc3RydWN0b3Ig
Zm9yIGEgY2FsbCB0aGF0IG1heSBjYXVzZSBleGNlcHRpb25zLCBidXQgd2hpY2ggYXJlIGhhbmRs
ZWQKICAgICAvLyB0aHJvdWdoIHNvbWUgbWVjaGFuaXNtIG90aGVyIHRoYW4gdGhlIGluLWxpbmUg
ZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBj
YWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvKQor
ICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVu
Y3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgOiBtX2NhbGwoY2FsbCkKICAg
ICAgICAgLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIG1fZXhjZXB0aW9uSW5mbyhl
eGNlcHRpb25JbmZvKQorICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAg
ICAsIG1faGFuZGxlc0V4Y2VwdGlvbnModHJ1ZSkKICAgICB7CiAgICAgfQpAQCAtMTA0LDcgKzEw
NSw3IEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtX2Nh
bGw7CiAgICAgRnVuY3Rpb25QdHIgbV9mdW5jdGlvbjsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBtX2V4Y2VwdGlvbkNoZWNrOwotICAgIEV4Y2VwdGlvbkluZm8gbV9leGNlcHRpb25JbmZvOwor
ICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIGJvb2wgbV9oYW5kbGVzRXhjZXB0aW9u
czsKIH07CiAKQEAgLTE5Miw5ICsxOTMsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gTm90
aWZ5IHRoZSBKSVQgb2YgYSBjYWxsIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBsaW5raW5nLgotICAg
IHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAg
dm9pZCBub3RpZnlDYWxsKENhbGwgY2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsK
LSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBGdW5jdGlvblB0cigpLCBl
eGNlcHRpb25JbmZvKSk7CisgICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwg
RnVuY3Rpb25QdHIoKSwgY29kZU9yaWdpbikpOwogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwg
b3V0IGZyb20gSklUIGNvZGUsIHdpdGhvdXQgYW4gZXhjZXB0aW9uIGNoZWNrLgpAQCAtMjA1LDIw
ICsyMDYsMjAgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20g
SklUIGNvZGUsIHdpdGggYW4gZXhjZXB0aW9uIGNoZWNrLgotICAgIENhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4
Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGNvbnN0
IEZ1bmN0aW9uUHRyJiBmdW5jdGlvbiwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAg
ICAgICAgQ2FsbCBmdW5jdGlvbkNhbGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9u
Q2hlY2sgPSBicmFuY2hUZXN0UHRyKE5vblplcm8sIEFic29sdXRlQWRkcmVzcygmZ2xvYmFsRGF0
YSgpLT5leGNlcHRpb24pKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0aW9uSW5mbykpOworICAg
ICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2FsbCwgZnVuY3Rpb24sIGV4
Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVybiBmdW5jdGlvbkNhbGw7
CiAgICAgfQogICAgIAogICAgIC8vIEFkZCBhIGNhbGwgb3V0IGZyb20gSklUIGNvZGUsIHdpdGgg
YSBmYXN0IGV4Y2VwdGlvbiBjaGVjayB0aGF0IHRlc3RzIGlmIHRoZSByZXR1cm4gdmFsdWUgaXMg
emVyby4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1
bmN0aW9uUHRyJiBmdW5jdGlvbiwgdW5zaWduZWQgZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsIGFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKGNvbnN0IEZ1bmN0aW9uUHRyJiBmdW5jdGlv
biwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgQ2FsbCBmdW5jdGlvbkNh
bGwgPSBjYWxsKCk7CiAgICAgICAgIEp1bXAgZXhjZXB0aW9uQ2hlY2sgPSBicmFuY2hUZXN0UHRy
KFplcm8sIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxscy5hcHBlbmQo
Q2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGZ1bmN0aW9uQ2Fs
bCwgZnVuY3Rpb24sIGV4Y2VwdGlvbkNoZWNrLCBjb2RlT3JpZ2luKSk7CiAgICAgICAgIHJldHVy
biBmdW5jdGlvbkNhbGw7CiAgICAgfQogICAgIApAQCAtMzExLDkgKzMxMiw5IEBAIHB1YmxpYzoK
ICAgICAgICAgbV9tZXRob2RHZXRzLmFwcGVuZChNZXRob2RHZXRSZWNvcmQoc2xvd0NhbGwsIHN0
cnVjdFRvQ29tcGFyZSwgcHJvdG9PYmosIHByb3RvU3RydWN0VG9Db21wYXJlLCBwdXRGdW5jdGlv
bikpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxs
IHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2ln
bmVkIGV4Y2VwdGlvbkluZm8pCisgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2Fs
bCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewotICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2Fs
bFJlY29yZChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgZXhjZXB0
aW9uSW5mbykpOworICAgICAgICBtX2pzQ2FsbHMuYXBwZW5kKEpTQ2FsbFJlY29yZChmYXN0Q2Fs
bCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGlzQ2FsbCwgY29kZU9yaWdpbikpOwogICAgIH0K
IAogcHJpdmF0ZToKQEAgLTMyNiw4ICszMjcsMTQgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbGxO
dW1lcmljVG9Eb3VibGUoTm9kZUluZGV4LCBGUFJSZWcsIEdQUlJlZyB0ZW1wb3JhcnkpOwogICAg
IHZvaWQgZmlsbEludDMyVG9JbnRlZ2VyKE5vZGVJbmRleCwgR1BSUmVnKTsKICAgICB2b2lkIGZp
bGxUb0pTKE5vZGVJbmRleCwgR1BSUmVnKTsKKyAgICAKKyNpZiBERkdfT1NSCisgICAgdm9pZCBl
eGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmLCBTcGVjdWxhdGlvblJlY292ZXJ5
KiwgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwKTsKKyAg
ICB2b2lkIGxpbmtPU1JFeGl0cyhTcGVjdWxhdGl2ZUpJVCYpOworI2Vsc2UKICAgICB2b2lkIGp1
bXBGcm9tU3BlY3VsYXRpdmVUb05vblNwZWN1bGF0aXZlKGNvbnN0IFNwZWN1bGF0aW9uQ2hlY2sm
LCBjb25zdCBFbnRyeUxvY2F0aW9uJiwgU3BlY3VsYXRpb25SZWNvdmVyeSosIE5vZGVUb1JlZ2lz
dGVyTWFwJiBjaGVja05vZGVUb1JlZ2lzdGVyTWFwLCBOb2RlVG9SZWdpc3Rlck1hcCYgZW50cnlO
b2RlVG9SZWdpc3Rlck1hcCk7CiAgICAgdm9pZCBsaW5rU3BlY3VsYXRpb25DaGVja3MoU3BlY3Vs
YXRpdmVKSVQmLCBOb25TcGVjdWxhdGl2ZUpJVCYpOworI2VuZGlmCiAKICAgICAvLyBUaGUgZ2xv
YmFsRGF0YSwgdXNlZCB0byBhY2Nlc3MgY29uc3RhbnRzIHN1Y2ggYXMgdGhlIHZQdHJzLgogICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwpAQCAtMzg2LDEyICszOTMsMTIgQEAgcHJpdmF0
ZToKICAgICB9OwogICAgIAogICAgIHN0cnVjdCBKU0NhbGxSZWNvcmQgewotICAgICAgICBKU0Nh
bGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdl
dFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgICAgICBK
U0NhbGxSZWNvcmQoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAg
ICAgICA6IG1fZmFzdENhbGwoZmFzdENhbGwpCiAgICAgICAgICAgICAsIG1fc2xvd0NhbGwoc2xv
d0NhbGwpCiAgICAgICAgICAgICAsIG1fdGFyZ2V0VG9DaGVjayh0YXJnZXRUb0NoZWNrKQogICAg
ICAgICAgICAgLCBtX2lzQ2FsbChpc0NhbGwpCi0gICAgICAgICAgICAsIG1fZXhjZXB0aW9uSW5m
byhleGNlcHRpb25JbmZvKQorICAgICAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIApAQCAtMzk5LDcgKzQwNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgIENhbGwgbV9zbG93Q2FsbDsKICAgICAgICAgRGF0YUxhYmVsUHRyIG1fdGFy
Z2V0VG9DaGVjazsKICAgICAgICAgYm9vbCBtX2lzQ2FsbDsKLSAgICAgICAgdW5zaWduZWQgbV9l
eGNlcHRpb25JbmZvOworICAgICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICB9Owog
CiAgICAgVmVjdG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTQ5MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKLS8v
IEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGlu
ZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCisvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBp
bmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cg
Z3JhcGhzLiBTZXQgdG8gMSBmb3IgYmFzaWMgdmVyYm9zaXR5LCBvciB0byAyIGZvciBtb3JlIHZl
cmJvc2l0eS4KICNkZWZpbmUgREZHX0RFQlVHX1ZFUkJPU0UgMAogLy8gRW5hYmxlIGdlbmVyYXRp
b24gb2YgZHluYW1pYyBjaGVja3MgaW50byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLgogI2lmICFB
U1NFUlRfRElTQUJMRUQKQEAgLTUwLDYgKzUwLDggQEAKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FM
X0RJU0JBTEUgMAogLy8gRGlzYWJsZSB0aGUgU3BlY3VsYXRpdmVKSVQgd2l0aG91dCBoYXZpbmcg
dG8gdG91Y2ggUGxhdGZvcm0uaCEKICNkZWZpbmUgREZHX0RFQlVHX0xPQ0FMX0RJU0JBTEVfU1BF
Q1VMQVRJVkUgMAorLy8gRGlzYWJsZSB0aGUgbm9uLXNwZWN1bGF0aXZlIEpJVCBhbmQgdXNlIE9T
UiBpbnN0ZWFkLgorI2RlZmluZSBERkdfT1NSIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAv
LyBHZW5lcmF0ZSBzdGF0cyBvbiBob3cgc3VjY2Vzc2Z1bCB3ZSB3ZXJlIGluIG1ha2luZyB1c2Ug
b2YgdGhlIERGRyBqaXQsIGFuZCByZW1haW5pbmcgb24gdGhlIGhvdCBwYXRoLgogI2RlZmluZSBE
RkdfU1VDQ0VTU19TVEFUUyAwCiAKQEAgLTcyLDkgKzc0LDMyIEBAIENPTVBJTEVfQVNTRVJUKHNp
emVvZihWaXJ0dWFsUmVnaXN0ZXIpID0KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3Rh
dGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAotLy8gSW5mb3JtYXRpb24g
dXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2Ug
aW5mb3JtYXRpb24uCisvLyBJbmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhj
ZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZvcm1hdGlvbiwKKy8vIGFuZCB0byBpbXBs
ZW1lbnQgT1NSLgogLy8gKFByZXNlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4
KS4KLXR5cGVkZWYgdWludDMyX3QgRXhjZXB0aW9uSW5mbzsKK2NsYXNzIENvZGVPcmlnaW4gewor
cHVibGljOgorICAgIENvZGVPcmlnaW4oKQorICAgICAgICA6IG1fYnl0ZWNvZGVJbmRleChzdGQ6
Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBDb2RlT3JpZ2luKHVpbnQzMl90IGJ5dGVjb2RlSW5kZXgpCisgICAgICAgIDog
bV9ieXRlY29kZUluZGV4KGJ5dGVjb2RlSW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQorICAgIAorICAgIHVpbnQzMl90IGJ5dGVjb2Rl
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZUluZGV4OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdWludDMy
X3QgbV9ieXRlY29kZUluZGV4OworfTsKIAogLy8gRW50cmllcyBpbiB0aGUgTm9kZVR5cGUgZW51
bSAoYmVsb3cpIGFyZSBjb21wb3NlZCBvZiBhbiBpZCwgYSByZXN1bHQgdHlwZSAocG9zc2libHkg
bm9uZSkKIC8vIGFuZCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpdmUgZmxhZ3MgKG11c3QgZ2Vu
ZXJhdGUsIGlzIGNvbnN0YW50LCBldGMpLgpAQCAtMzU3LDkgKzM4Miw5IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBlbnVtIFZhckFyZ1RhZyB7IFZhckFyZyB9OwogCiAgICAgLy8gQ29uc3RydWN0IGEg
bm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4sIG5vIGltbWVkaWF0ZSB2YWx1ZS4KLSAgICBOb2Rl
KE5vZGVUeXBlIG9wLCBFeGNlcHRpb25JbmZvIGV4Y2VwdGlvbkluZm8sIE5vZGVJbmRleCBjaGls
ZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMg
PSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBO
b2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2Vw
dGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4p
CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAg
ICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgewpAQCAtMzcwLDkgKzM5NSw5IEBAIHN0cnVjdCBO
b2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGls
ZHJlbiBhbmQgYW4gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2Vw
dGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5v
Tm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9k
ZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE9wSW5mbyBp
bW0sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUs
IE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwg
ZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9y
aWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVy
KQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0ubV92YWx1
ZSkKQEAgLTM4NCw5ICs0MDksOSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgfQogCiAgICAgLy8gQ29u
c3RydWN0IGEgbm9kZSB3aXRoIHVwIHRvIDMgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFs
dWVzLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywg
T3BJbmZvIGltbTEsIE9wSW5mbyBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2Rl
SW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5v
ZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEsIE9wSW5m
byBpbW0yLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9O
b2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQogICAgICAgICA6IG9wKG9wKQotICAgICAg
ICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNv
ZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdp
c3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5t
X3ZhbHVlKQpAQCAtMzk5LDkgKzQyNCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAgICAgCiAg
ICAgLy8gQ29uc3RydWN0IGEgbm9kZSB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNoaWxkcmVu
IGFuZCB0d28gaW1tZWRpYXRlIHZhbHVlcy4KLSAgICBOb2RlKFZhckFyZ1RhZywgTm9kZVR5cGUg
b3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgT3BJbmZvIGltbTEsIE9wSW5mbyBpbW0y
LCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikKKyAgICBOb2RlKFZh
ckFyZ1RhZywgTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbTEs
IE9wSW5mbyBpbW0yLCB1bnNpZ25lZCBmaXJzdENoaWxkLCB1bnNpZ25lZCBudW1DaGlsZHJlbikK
ICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8p
CisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQog
ICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKQEAgLTY0Myw2ICs2NjgsMTQgQEAgc3Ry
dWN0IE5vZGUgewogICAgICAgICBBU1NFUlQoIShvcCAmIE5vZGVIYXNWYXJBcmdzKSk7CiAgICAg
ICAgIHJldHVybiBjaGlsZHJlbi5maXhlZC5jaGlsZDE7CiAgICAgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIGRvIGEgZmFzdCBjaGVjayBvbiB0aGUgZmlyc3Qg
Y2hpbGQKKyAgICAvLyBiZWZvcmUgYWxzbyBkb2luZyBhIGNoZWNrIG9uIHRoZSBvcGNvZGUuIFVz
ZSB0aGlzIHdpdGggY2FyZSBhbmQKKyAgICAvLyBhdm9pZCBpdCBpZiBwb3NzaWJsZS4KKyAgICBO
b2RlSW5kZXggY2hpbGQxVW5jaGVja2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjaGlsZHJl
bi5maXhlZC5jaGlsZDE7CisgICAgfQogCiAgICAgTm9kZUluZGV4IGNoaWxkMigpCiAgICAgewpA
QCAtNjcxLDcgKzcwNCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAvLyBUaGlzIGVudW0gdmFsdWUg
ZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBub2RlLgogICAgIE5vZGVUeXBlIG9wOwogICAgIC8v
IFVzZWQgdG8gbG9vayB1cCBleGNlcHRpb24gaGFuZGxpbmcgaW5mb3JtYXRpb24gKGN1cnJlbnRs
eSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KLSAgICBFeGNlcHRpb25JbmZvIGV4
Y2VwdGlvbkluZm87CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwogICAgIC8vIFJlZmVyZW5j
ZXMgdG8gdXAgdG8gMyBjaGlsZHJlbiAoMCBmb3Igbm8gY2hpbGQpLgogICAgIHVuaW9uIHsKICAg
ICAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzQsNiArNDM0LDkgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5v
ZAogCiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRl
eEl0ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBub2RlKQogeworI2lmIERGR19PU1IKKyAg
ICBVTlVTRURfUEFSQU0oY2hlY2tJdGVyYXRvcik7CisjZWxzZQogICAgIC8vIENoZWNrIGZvciBz
cGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0
aGUKICAgICAvLyBzcGVjdWxhdGl2ZSBwYXRoLiBEbyBub3QgY2hlY2sgZm9yIE5vZGVJbmRleCAw
LCBzaW5jZSB0aGlzIGlzIGNoZWNrZWQKICAgICAvLyBpbiB0aGUgb3V0ZXJtb3N0IGNvbXBpbGUg
bGF5ZXIsIGF0IHRoZSBoZWFkIG9mIHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aApAQCAtNDQyLDYg
KzQ0NSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAv
LyBhcyBzcGVjdWxhdGlvbiBjaGVja3MgYXQgdGhpcyBpbmRleCkuCiAgICAgaWYgKG1fY29tcGls
ZUluZGV4ICYmIGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkK
ICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgTm9kZVR5
cGUgb3AgPSBub2RlLm9wOwogCkBAIC0xMjgzLDggKzEyODcsMTAgQEAgdm9pZCBOb25TcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hlY2tJdGVyYXRvcikKIHsKICAgICAv
LyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGFkZGVkIGF0IGZ1bmN0aW9uIGVudHJ5IChj
aGVja2luZyBhcmd1bWVudCB0eXBlcykuCisjaWYgIURGR19PU1IKICAgICBpZiAoY2hlY2tJdGVy
YXRvci5oYXNDaGVja0F0SW5kZXgobV9jb21waWxlSW5kZXgpKQogICAgICAgICB0cmFja0VudHJ5
KG1faml0LmxhYmVsKCkpOworI2VuZGlmCiAKICAgICBBU1NFUlQoIW1fY29tcGlsZUluZGV4KTsK
ICAgICBmb3IgKG1fYmxvY2sgPSAwOyBtX2Jsb2NrIDwgbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrcy5z
aXplKCk7ICsrbV9ibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQs
NiArMTQ0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAg
IHJldHVybiBJbnZhbGlkR1BSUmVnOwogfQogCisjaWYgIURGR19PU1IKIFNwZWN1bGF0aW9uQ2hl
Y2s6OlNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2NoZWNrKGNoZWNr
KQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKQEAgLTE3MCw2ICsxNzEs
NzMgQEAgU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNybwogICAgICAgICAg
ICAgbV9mcHJJbmZvW2l0ZXIuaW5kZXgoKV0ubm9kZUluZGV4ID0gTm9Ob2RlOwogICAgIH0KIH0K
KyNlbmRpZgorCisjaWZuZGVmIE5ERUJVRwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChGSUxFKiBv
dXQpIGNvbnN0Cit7CisgICAgZnByaW50ZihvdXQsICJOb2RlKCVkKSIsIG1fbm9kZUluZGV4KTsK
K30KKwordm9pZCBWYWx1ZVJlY292ZXJ5OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHRlY2huaXF1ZSgpKSB7CisgICAgY2FzZSBBbHJlYWR5SW5SZWdpc3RlckZpbGU6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiLSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluR1BS
OgorICAgICAgICBmcHJpbnRmKG91dCwgIiUlJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoZ3ByKCkp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAg
ZnByaW50ZihvdXQsICJpbnQzMiglJSVzKSIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEluRlBSOgorICAgICAgICBmcHJpbnRmKG91dCwgIiUl
JXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoZnByKCkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICIqJWQiLCB2
aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29uc3RhbnQ6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiWyVzXSIsIGNvbnN0YW50KCkuZGVzY3JpcHRpb24oKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRG9udEtub3c6CisgICAgICAgIGZwcmludGYob3V0LCAi
ISIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBmcHJpbnRmKG91dCwg
Ij8lZCIsIHRlY2huaXF1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2VuZGlmCisK
KyNpZiBERkdfT1NSCitPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNr
LCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorICAgIDogbV9j
aGVjayhjaGVjaykKKyAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCisgICAg
LCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAgLCBtX3Jl
Y292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1
bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkp
CisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sKKyAgICBB
U1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1
bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0g
PSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRd
KTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGpp
dC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOwor
fQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5kdW1w
KG91dCk7CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlh
YmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAg
ICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXS5kdW1wKG91dCk7Cit9CisjZW5kaWYKKyNlbmRpZgog
CiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJ
bmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewpAQCAtNjUwLDYgKzcxOCw0MiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBTZXRMb2NhbDogeworICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0
byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCisgICAgICAgIC8vIGFzIGEgc3BlY3Vs
YXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKKyAg
ICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGlu
IHRoZSB2aXJ0dWFsCisgICAgICAgIC8vIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIGNvbXBpbGVN
b3ZIaW50KG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgZmFyIGFzIE9TUiBpcyBjb25j
ZXJuZWQsIHdlJ3JlIG9uIHRoZSBieXRlY29kZSBpbmRleCBjb3JyZXNwb25kaW5nCisgICAgICAg
IC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkgImV4ZWN1
dGVkIiB0aGUKKyAgICAgICAgLy8gU2V0TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERGRyBOb2Rl
cyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lCisgICAgICAgIC8vIGJ5dGVjb2RlIGluZGV4
IGFzIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9
PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgTm9kZSYgbmV4dE5v
ZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4KzFdOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmIHdlIGV2ZXIgZW1pdCBtdWx0aXBsZSBTZXRM
b2NhbCdzIGZvcgorICAgICAgICAvLyBhIHNpbmdsZSBieXRlY29kZSBpbnN0cnVjdGlvbi4gVGhh
dCdzIHVubGlrZWx5IHRvIGhhcHBlbi4gQnV0IGlmCisgICAgICAgIC8vIGl0IGRvZXMsIHRoZSBz
b2x1dGlvbiBpcyB0byB0byBoYXZlIHRoaXMgcGVyZm9ybSBhIHNlYXJjaCB1bnRpbAorICAgICAg
ICAvLyBpdCBmaW5kcyBhIE5vZGUgd2l0aCBhIGRpZmZlcmVudCBieXRlY29kZSBpbmRleCBmcm9t
IHRoZSBvbmUgd2UndmUKKyAgICAgICAgLy8gZ290LCBhbmQgdG8gYWJzdHJhY3RseSBleGVjdXRl
IHRoZSBTZXRMb2NhbCdzIGFsb25nIHRoZSB3YXkuIE9yLAorICAgICAgICAvLyBiZXR0ZXIgeWV0
LCBoYW5kbGUgYWxsIG9mIHRoZSBTZXRMb2NhbCdzIGF0IG9uY2U6IGFic3RyYWN0IGludGVycHJl
dAorICAgICAgICAvLyBhbGwgb2YgdGhlbSwgdGhlbiBlbWl0IGNvZGUgZm9yIGFsbCBvZiB0aGVt
LCB3aXRoIE9TUiBleGl0aW5nIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IG5vbi1TZXRMb2NhbCBp
bnN0cnVjdGlvbi4gTm90ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciB3aGVuCisgICAgICAgIC8vIGJv
dGggdGhpcyBTZXRMb2NhbCBhbmQgdGhlIG5leHQgb3AgaGF2ZSBhIGJ5dGVjb2RlIGluZGV4IG9m
IDA7IHRoaXMKKyAgICAgICAgLy8gb2NjdXJzIGZvciBTZXRMb2NhbCdzIGdlbmVyYXRlZCBhdCB0
aGUgdG9wIG9mIHRoZSBjb2RlIGJsb2NrIHRvCisgICAgICAgIC8vIGluaXRpYWxpemUgbG9jYWxz
IHRvIHVuZGVmaW5lZC4gSWRlYWxseSwgd2UnZCBoYXZlIGEgd2F5IG9mIG1hcmtpbmcKKyAgICAg
ICAgLy8gaW4gdGhlIENvZGVPcmlnaW4gdGhhdCBhIFNldExvY2FsIGlzIHN5bnRoZXRpYy4gVGhp
cyB3aWxsIG1ha2UgdGhlCisgICAgICAgIC8vIGFzc2VydGlvbiBtb3JlIHNlbnNpYmxlLWxvb2tp
bmcuIFdlIHNob3VsZCB0aGVuIGFsc28gYXNzZXJ0IHRoYXQKKyAgICAgICAgLy8gc3ludGhldGlj
IFNldExvY2FsJ3MgZG9uJ3QgaGF2ZSBzcGVjdWxhdGlvbiBjaGVja3MsIHNpbmNlIHRoZXkKKyAg
ICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgZHJvcHBpbmcgdmFsdWVzIHRoYXQgd2Ugc3RhdGljYWxs
eSBrbm93IHdlIGFyZQorICAgICAgICAvLyBhbGxvd2VkIHRvIGRyb3AgaW50byB0aGUgdmFyaWFi
bGVzLiBERkdQcm9wYWdhdG9yIHdpbGwgZ3VhcmFudGVlCisgICAgICAgIC8vIHRoaXMsIHNpbmNl
IGl0IHNob3VsZCBoYXZlIGF0IGxlYXN0IGFuIGFwcHJveGltYXRpb24gKGlmIG5vdAorICAgICAg
ICAvLyBleGFjdCBrbm93bGVkZ2UpIG9mIHRoZSB0eXBlIG9mIHRoZSBTZXRMb2NhbCdzIGNoaWxk
IG5vZGUsIGFuZAorICAgICAgICAvLyBzaG91bGQgbWVyZ2UgdGhhdCBpbmZvcm1hdGlvbiBpbnRv
IHRoZSBsb2NhbCB0aGF0IGlzIGJlaW5nIHNldC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJ
bmRleEZvck9TUiAhPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKQorICAgICAg
ICAgICAgICAgfHwgKCFtX2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgIW5leHROb2RlLmNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCgpKSk7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5l
eHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAKICAgICAgICAgUHJl
ZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG5v
ZGUubG9jYWwoKSk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CkBAIC02NzAsNiArNzc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigp
LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
SW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZh
bHVlIG9mCisgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMg
b3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICB2YWx1ZVNv
dXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTM2OSwxMSArMTQ3NywxOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICB9Ci0KKyAgICAKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0
ZSgpKQogICAgICAgICB1c2UobV9jb21waWxlSW5kZXgpOwogfQogCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQoreworICAgIEFTU0VSVChub2RlLm9wID09
IFNldExvY2FsKTsKKyAgICAKKyAgICBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKG5vZGUuY2hpbGQx
KCksIG5vZGUubG9jYWwoKSk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9jYWwoKTsK
K30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKIHsK
ICAgICBBU1NFUlQobV9jb21waWxlT2theSk7CkBAIC0xMzgyLDM1ICsxNDk4LDc0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBERkdfSklUX0JSRUFLX09O
X0VWRVJZX0JMT0NLCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCisgICAgCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAg
bV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFs
dWVTb3VyY2UoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKTsKKyAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVpbnQzMl90Pjo6bWF4KCk7CiAKICAgICBmb3IgKDsgbV9jb21waWxlSW5kZXggPCBibG9j
ay5lbmQ7ICsrbV9jb21waWxlSW5kZXgpIHsKICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0Lmdy
YXBoKClbbV9jb21waWxlSW5kZXhdOwotICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKKyAgICAgICAgbV9ieXRlY29kZUlu
ZGV4Rm9yT1NSID0gbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKKyAgICAgICAgaWYg
KCFub2RlLnNob3VsZEdlbmVyYXRlKCkpIHsKICNpZiBERkdfREVCVUdfVkVSQk9TRQotICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIGdlbmVyYXRpbmcgTm9kZSBAJWQgYXQg
SklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbV9qaXQuZGVidWdPZmZz
ZXQoKSk7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIHNraXBw
aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgICAiLCAoaW50KW1fY29t
cGlsZUluZGV4LCBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpLCBtX2ppdC5kZWJ1Z09m
ZnNldCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gU2V0TG9jYWwpCisg
ICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAKKyNpZiBERkdfREVCVUdfVkVSQk9TRQorICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklU
IG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKICNpZiBERkdfSklU
X0JSRUFLX09OX0VWRVJZX05PREUKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOworICAgICAg
ICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCi0gICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICAgICAgY29tcGlsZShub2RlKTsKLSAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KSB7CisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBjb21waWxl
KG5vZGUpOworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KSB7CiAjaWYgRU5BQkxFKERZ
TkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OKQotICAgICAgICAgICAgbV9jb21waWxlT2theSA9
IHRydWU7Ci0gICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKLSAgICAgICAg
ICAgIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKKyAgICAgICAgICAgICAgICBtX2NvbXBpbGVPa2F5
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2NvbXBpbGVJbmRleCA9IGJsb2NrLmVuZDsKKyAg
ICAgICAgICAgICAgICBjbGVhckdlbmVyYXRpb25JbmZvKCk7CiAjZW5kaWYKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAogI2lmIERGR19ERUJVR19WRVJCT1NFCi0gICAgICAgIGlmIChub2Rl
Lmhhc1Jlc3VsdCgpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICItPiAlc1xuIiwgZGF0
YUZvcm1hdFRvU3RyaW5nKG1fZ2VuZXJhdGlvbkluZm9bbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKV0u
cmVnaXN0ZXJGb3JtYXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIlxuIik7CisgICAgICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkgeworICAgICAg
ICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLnZp
cnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi0+ICVz
LCB2ciMlZCIsIGRhdGFGb3JtYXRUb1N0cmluZyhpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpLCAoaW50
KW5vZGUudmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgICAgIGlmIChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgRlBSSW5mbzo6ZGVidWdOYW1lKGlu
Zm8uZnByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIsICVzIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGluZm8uZ3By
KCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICIgICAgIik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAgICAiKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIAorI2lmIERGR19ERUJV
R19WRVJCT1NFID49IDIgICAgICAgIAorICAgICAgICBmb3IgKGludCBvcGVyYW5kID0gLW1fYXJn
dW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgb3BlcmFu
ZCA8IC1SZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsrb3BlcmFuZCkKKyAgICAg
ICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyAg
ICAgICAgCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiIDogIik7CisgICAgICAgIAorICAgICAg
ICBmb3IgKGludCBvcGVyYW5kID0gMDsgb3BlcmFuZCA8IChpbnQpbV92YXJpYWJsZXMuc2l6ZSgp
OyArK29wZXJhbmQpCisgICAgICAgICAgICBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihvcGVyYW5k
KS5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyAgICAgIAorI2lmIERGR19ERUJVR19WRVJCT1NFICAK
KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogI2VuZGlmCi0gICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgCisgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkp
CisgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogfQogCkBAIC0xNDE5LDYg
KzE1NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogewogICAgIEFTU0VSVCghbV9j
b21waWxlSW5kZXgpOworICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IDA7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzOyArK2kpIHsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IChWaXJ0dWFsUmVnaXN0
ZXIpKG1faml0LmNvZGVCbG9jaygpLT50aGlzUmVnaXN0ZXIoKSArIGkpOwogICAgICAgICBQcmVk
aWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBtX2ppdC5ncmFwaCgpLmdldFByZWRpY3Rpb24odmly
dHVhbFJlZ2lzdGVyKTsKQEAgLTE0NTQsNyArMTYxMCw3IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoKQogICAgIEFTU0VSVCghbV9jb21waWxlSW5kZXgpOwogICAgIGZvciAobV9ibG9j
ayA9IDA7IG1fYmxvY2sgPCBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzLnNpemUoKTsgKyttX2Jsb2Nr
KSB7CiAgICAgICAgIGNvbXBpbGUoKm1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10pOwot
I2lmICFFTkFCTEUoRFlOQU1JQ19PUFRJTUlaQVRJT04pCisjaWYgIUVOQUJMRShEWU5BTUlDX1RF
Uk1JTkFURV9TUEVDVUxBVElPTikKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogI2VuZGlmCkBAIC0xNDYzLDYgKzE2MTksMTE5IEBAIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCitWYWx1ZVJl
Y292ZXJ5IFNwZWN1bGF0aXZlSklUOjpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1
ZVNvdXJjZSYgdmFsdWVTb3VyY2UpCit7CisgICAgaWYgKCF2YWx1ZVNvdXJjZS5pc1NldCgpKQor
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKCk7CisK
KyAgICBpZiAobV9qaXQuaXNDb25zdGFudCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpCisgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChtX2ppdC52YWx1ZU9mSlNDb25zdGFu
dCh2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkpOworICAgIAorICAgIE5vZGUqIG5vZGVQdHIgPSAm
bV9qaXQuZ3JhcGgoKVt2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKV07CisgICAgaWYgKCFub2RlUHRy
LT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgIC8vIEl0J3MgbGVnaXRpbWF0ZWx5IGRlYWQu
IEFzIGluLCBub2JvZHkgd2lsbCBldmVyIHVzZSB0aGlzIG5vZGUsIG9yIG9wZXJhbmQsCisgICAg
ICAgIC8vIGV2ZXIuIFNldCBpdCB0byBVbmRlZmluZWQgdG8gbWFrZSB0aGUgR0MgaGFwcHkgYWZ0
ZXIgdGhlIE9TUi4KKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5k
ZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBHZW5lcmF0aW9uSW5mbyogaW5mb1B0ciA9ICZt
X2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICBpZiAoIWlu
Zm9QdHItPmFsaXZlKCkgfHwgaW5mb1B0ci0+bm9kZUluZGV4KCkgIT0gdmFsdWVTb3VyY2Uubm9k
ZUluZGV4KCkpIHsKKyAgICAgICAgLy8gVHJ5IHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBhbHRlcm5h
dGUgbm9kZSB0aGF0IHdvdWxkIGNvbnRhaW4gdGhlIHZhbHVlIHdlIHdhbnQuCisgICAgICAgIC8v
IFRoZXJlIGFyZSBmb3VyIHBvc3NpYmlsaXRpZXM6CisgICAgICAgIC8vCisgICAgICAgIC8vIFZh
bHVlVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBW
YWx1ZVRvTnVtYmVyIG5vZGUKKyAgICAgICAgLy8gICAgdGhlbiBpdCBtZWFucyB0aGF0IGFsbCBy
ZW1haW5pbmcgdXNlcyBvZiB0aGUgdmFsdWUgd291bGQgaGF2ZSBwZXJmb3JtZWQgYQorICAgICAg
ICAvLyAgICBWYWx1ZVRvTnVtYmVyIGNvbnZlcnNpb24gYW55d2F5LiBUaHVzLCB3ZSBjYW4gc3Vi
c3RpdHV0ZSBWYWx1ZVRvTnVtYmVyLgorICAgICAgICAvLworICAgICAgICAvLyBWYWx1ZVRvSW50
MzI6IExpa2V3aXNlLCBpZiB0aGUgb25seSByZW1haW5pbmcgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2
YWx1ZSBpcworICAgICAgICAvLyAgICBWYWx1ZVRvSW50MzIsIHRoZW4gd2UgY2FuIHVzZSBpdC4g
QnV0IGlmIHRoZXJlIGlzIGJvdGggYSBWYWx1ZVRvSW50MzIKKyAgICAgICAgLy8gICAgYW5kIGEg
VmFsdWVUb051bWJlciwgdGhlbiB3ZSBiZXR0ZXIgZ28gd2l0aCBWYWx1ZVRvTnVtYmVyIGJlY2F1
c2UgaXQKKyAgICAgICAgLy8gICAgbWVhbnMgdGhhdCBzb21lIHJlbWFpbmluZyB1c2VzIHdvdWxk
IGhhdmUgY29udmVydGVkIHRvIG51bWJlciB3aGlsZQorICAgICAgICAvLyAgICBvdGhlcnMgd291
bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gSW50MzIuCisgICAgICAgIC8vCisgICAgICAgIC8vIFVJbnQz
MlRvTnVtYmVyOiBJZiB0aGUgb25seSBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzIGEgVUlu
dDMyVG9OdW1iZXIKKyAgICAgICAgLy8gICAgdGhlbiB0aGUgb25seSByZW1haW5pbmcgdXNlcyBh
cmUgb25lcyB0aGF0IHdhbnQgYSBwcm9wZXJseSBmb3JtZWQgbnVtYmVyCisgICAgICAgIC8vICAg
IHJhdGhlciB0aGFuIGEgVUludDMyIGludGVybWVkaWF0ZS4KKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gVGhlIHJldmVyc2Ugb2YgdGhlIGFib3ZlOiBUaGlzIG5vZGUgY291bGQgYmUgYSBVSW50MzJU
b051bWJlciwgYnV0IGl0cworICAgICAgICAvLyAgICBhbHRlcm5hdGl2ZSBpcyBzdGlsbCBhbGl2
ZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIG9mCisgICAgICAgIC8v
ICAgIHRoZSBudW1iZXIgd291bGQgYmUgZmluZSB3aXRoIGEgVUludDMyIGludGVybWVkaWF0ZS4K
KyAgICAgICAgCisgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IGlmIChub2RlUHRyLT5vcCA9PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IG5vZGVQdHItPmNoaWxkMSgpOworICAgICAgICAgICAgbm9kZVB0ciA9
ICZtX2ppdC5ncmFwaCgpW25vZGVJbmRleF07CisgICAgICAgICAgICBpbmZvUHRyID0gJm1fZ2Vu
ZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgaWYg
KGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4KQor
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9OdW1iZXJJbmRl
eCA9IE5vTm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZVRvSW50MzJJbmRleCA9IE5v
Tm9kZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB1aW50MzJUb051bWJlckluZGV4ID0gTm9Ob2Rl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZpcnR1YWxSZWdpc3Rl
ciA9IDA7IHZpcnR1YWxSZWdpc3RlciA8IG1fZ2VuZXJhdGlvbkluZm8uc2l6ZSgpOyArK3ZpcnR1
YWxSZWdpc3RlcikgeworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9n
ZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICAgICAgICAgIGlmICghaW5m
by5hbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5mby5ub2RlSW5kZXgoKSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW2luZm8u
bm9kZUluZGV4KCldOworICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMVVuY2hlY2tlZCgp
ICE9IHZhbHVlU291cmNlLm5vZGVJbmRleCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICAgICAgICAgICAgICBj
YXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9OdW1iZXJJbmRl
eCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZVRv
SW50MzJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMlRvTnVtYmVySW5kZXggPSBpbmZvLm5vZGVJbmRleCgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXhUb1VzZTsKKyAgICAgICAgICAgIGlm
ICh2YWx1ZVRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRl
eFRvVXNlID0gdmFsdWVUb051bWJlckluZGV4OworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVU
b0ludDMySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0g
dmFsdWVUb0ludDMySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh1aW50MzJUb051bWJlcklu
ZGV4ICE9IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IHVpbnQzMlRv
TnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbm9kZUluZGV4
VG9Vc2UgPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlSW5kZXhU
b1VzZSAhPSBOb05vZGUpIHsKKyAgICAgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBo
KClbbm9kZUluZGV4VG9Vc2VdOworICAgICAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0
aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICAgICAgQVNT
RVJUKGluZm9QdHItPmFsaXZlKCkgJiYgaW5mb1B0ci0+bm9kZUluZGV4KCkgPT0gbm9kZUluZGV4
VG9Vc2UpOworICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKGluZm9QdHItPmFsaXZlKCkpOworCisgICAgaWYgKGluZm9QdHItPnJlZ2lzdGVy
Rm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpIHsKKyAgICAgICAgaWYgKGluZm9QdHItPnJlZ2lz
dGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1
ZVJlY292ZXJ5OjppbkZQUihpbmZvUHRyLT5mcHIoKSk7CisgICAgICAgIHJldHVybiBWYWx1ZVJl
Y292ZXJ5OjppbkdQUihpbmZvUHRyLT5ncHIoKSwgaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSk7
CisgICAgfQorICAgIGlmIChpbmZvUHRyLT5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXROb25l
KQorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUo
c3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKSkp
OworICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBWYWx1ZVJlY292
ZXJ5KCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBt
X3NyYzsKIH07CiAKKyNpZiAhREZHX09TUgogLy8gPT09IFNwZWN1bGF0aW9uQ2hlY2sgPT09CiAv
LwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0IGZyb20gdGhlIHNwZWN1bGF0
aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTYgQEAgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2sgewog
ICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwog
fTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxh
dGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFERkdfT1NSCiAKK2NsYXNzIFZhbHVlU291cmNl
IHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAgIDogbV9ub2RlSW5kZXgoTm9O
b2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKKyAgICAgICAgOiBtX25vZGVJbmRleChub2RlSW5kZXgpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzU2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX25vZGVJbmRleCAhPSBOb05vZGU7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRleCBub2Rl
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzU2V0KCkpOworICAgICAgICBy
ZXR1cm4gbV9ub2RlSW5kZXg7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lk
IGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAorcHJpdmF0ZToKKyAgICBOb2Rl
SW5kZXggbV9ub2RlSW5kZXg7Cit9OworICAgIAorLy8gRGVzY3JpYmVzIGhvdyB0byByZWNvdmVy
IGEgZ2l2ZW4gYnl0ZWNvZGUgdmlydHVhbCByZWdpc3RlciBhdCBhIGdpdmVuCisvLyBjb2RlIHBv
aW50LgorZW51bSBWYWx1ZVJlY292ZXJ5VGVjaG5pcXVlIHsKKyAgICAvLyBJdCdzIGFscmVhZHkg
aW4gdGhlIHJlZ2lzdGVyIGZpbGUgYXQgdGhlIHJpZ2h0IGxvY2F0aW9uLgorICAgIEFscmVhZHlJ
blJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGluIGEgcmVnaXN0ZXIuCisgICAgSW5HUFIsCisg
ICAgVW5ib3hlZEludDMySW5HUFIsCisgICAgSW5GUFIsCisgICAgLy8gSXQncyBpbiB0aGUgcmVn
aXN0ZXIgZmlsZSwgYnV0IGF0IGEgZGlmZmVyZW50IGxvY2F0aW9uLgorICAgIERpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlLAorICAgIC8vIEl0J3MgYSBjb25zdGFudC4KKyAgICBDb25zdGFudCwKKyAg
ICAvLyBEb24ndCBrbm93IGhvdyB0byByZWNvdmVyIGl0LgorICAgIERvbnRLbm93Cit9OworCitj
bGFzcyBWYWx1ZVJlY292ZXJ5IHsKK3B1YmxpYzoKKyAgICBWYWx1ZVJlY292ZXJ5KCkKKyAgICAg
ICAgOiBtX3RlY2huaXF1ZShEb250S25vdykKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBWYWx1ZVJlY292ZXJ5IGFscmVhZHlJblJlZ2lzdGVyRmlsZSgpCisgICAgeworICAgICAgICBW
YWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQWxyZWFk
eUluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBpbkdQUihHUFJSZWcgZ3ByLCBEYXRhRm9ybWF0IGRhdGFG
b3JtYXQpCisgICAgeworICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9u
ZSk7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0OworICAgICAgICBpZiAoZGF0YUZvcm1h
dCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9
IFVuYm94ZWRJbnQzMkluR1BSOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQubV90
ZWNobmlxdWUgPSBJbkdQUjsKKyAgICAgICAgcmVzdWx0Lm1fc291cmNlLmdwciA9IGdwcjsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3Zl
cnkgaW5GUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0
OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBJbkZQUjsKKyAgICAgICAgcmVzdWx0Lm1f
c291cmNlLmZwciA9IGZwcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgZGlzcGxhY2VkSW5SZWdpc3RlckZpbGUoVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWcpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGU7Cisg
ICAgICAgIHJlc3VsdC5tX3NvdXJjZS52aXJ0dWFsUmVnID0gdmlydHVhbFJlZzsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgY29u
c3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVjb3ZlcnkgcmVzdWx0
OworICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0
Lm1fc291cmNlLmNvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB0ZWNo
bmlxdWUoKSBjb25zdCB7IHJldHVybiBtX3RlY2huaXF1ZTsgfQorICAgIAorICAgIEdQUlJlZyBn
cHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluR1BSIHx8
IG1fdGVjaG5pcXVlID09IFVuYm94ZWRJbnQzMkluR1BSKTsKKyAgICAgICAgcmV0dXJuIG1fc291
cmNlLmdwcjsKKyAgICB9CisgICAgCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gSW5GUFIpOworICAgICAgICByZXR1cm4gbV9zb3Vy
Y2UuZnByOworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBEaXNwbGFjZWRJ
blJlZ2lzdGVyRmlsZSk7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS52aXJ0dWFsUmVnOworICAg
IH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3RlY2huaXF1ZSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUobV9zb3VyY2UuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisg
ICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6Cisg
ICAgVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSBtX3RlY2huaXF1ZTsKKyAgICB1bmlvbiB7CisgICAg
ICAgIEdQUlJlZyBncHI7CisgICAgICAgIEZQUlJlZyBmcHI7CisgICAgICAgIFZpcnR1YWxSZWdp
c3RlciB2aXJ0dWFsUmVnOworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25zdGFudDsKKyAgICB9
IG1fc291cmNlOworfTsKKworI2lmIERGR19PU1IKKy8vID09PSBPU1JFeGl0ID09PQorLy8KKy8v
IFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0
aCBieQorLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgorc3RydWN0IE9TUkV4aXQgeworICAg
IE9TUkV4aXQoTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQg
cmVjb3ZlcnlJbmRleCA9IDApOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG1fY2hl
Y2s7CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJ
bmRleDsKKyAgICAKKyAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7CisgICAgCisgICAgLy8g
Q29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFsdWVSZWNvdmVyaWVzIHdoaWxlIGJl
aW5nCisgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZlcnN1cyB2YXJpYWJsZS4KKyAgICBp
bnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgp
ICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVS
ZWNvdmVyeShpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaW5kZXggPCAoaW50
KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1tpbmRl
eF07CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlc1tpbmRleCAtIG1fYXJndW1lbnRzLnNpemUo
KV07CisgICAgfQorICAgIGJvb2wgaXNBcmd1bWVudChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGluZGV4IDwgKGludCltX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICBib29sIGlzVmFyaWFibGUo
aW50IGluZGV4KSBjb25zdCB7IHJldHVybiAhaXNBcmd1bWVudChpbmRleCk7IH0KKyAgICBpbnQg
YXJndW1lbnRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgfQorICAgIGludCB2YXJpYWJsZUZvckluZGV4KGludCBpbmRleCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKKyAgICB9
CisgICAgaW50IG9wZXJhbmRGb3JJbmRleChpbnQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKSAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOworICAg
IH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7
CisjZW5kaWYKKyAgICAKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1bWVudHM7
CisgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOworICAgIGludCBtX2xh
c3RTZXRPcGVyYW5kOworfTsKK3R5cGVkZWYgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDE2PiBP
U1JFeGl0VmVjdG9yOworI2VuZGlmIC8vIERGR19PU1IKIAogLy8gPT09IFNwZWN1bGF0aXZlSklU
ID09PQogLy8KQEAgLTEwNSwyMSArMjk1LDI1IEBAIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNw
ZWN1bGF0aW9uQ2hlY2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFzc2VydGVkKSB0aHJv
dWdoIHRoZSBkYXRhZmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVibGljIEpJVENvZGVH
ZW5lcmF0b3IgewogICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKKyAgICBmcmll
bmQgc3RydWN0IE9TUkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGls
ZXImIGppdCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKLSAgICAgICAg
LCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVjdWxhdGl2ZUpJVChK
SVRDb21waWxlciYpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0
aGUgbGlzdCBvZiBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCwKICAgICAvLyBh
bmQgYWRkaXRpb25hbCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAhREZHX09TUgogICAgIFNw
ZWN1bGF0aW9uQ2hlY2tWZWN0b3ImIHNwZWN1bGF0aW9uQ2hlY2tzKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX3NwZWN1bGF0aW9uQ2hlY2tzOwogICAgIH0KKyNlbHNlCisgICAgT1NSRXhpdFZl
Y3RvciYgb3NyRXhpdHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3NyRXhpdHM7CisgICAg
fQorI2VuZGlmCiAgICAgU3BlY3VsYXRpb25SZWNvdmVyeSogc3BlY3VsYXRpb25SZWNvdmVyeShz
aXplX3QgaW5kZXgpCiAgICAgewogICAgICAgICAvLyBTcGVjdWxhdGlvbkNoZWNrOjptX3JlY292
ZXJ5SW5kZXggaXMgb2Zmc2V0IGJ5IDEsCkBAIC0xMzksNiArMzMzLDcgQEAgcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgSklUQ29kZUdlbmVyYXRvcjsKICAgICAKICAgICB2b2lkIGNvbXBpbGUo
Tm9kZSYpOworICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoTm9kZSYpOwogICAgIHZvaWQgY29tcGls
ZShCYXNpY0Jsb2NrJik7CiAKICAgICB2b2lkIGNoZWNrQXJndW1lbnRUeXBlcygpOwpAQCAtMjAz
LDcgKzM5OCwxMSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICAgICAgcmV0dXJuOworI2lmICFERkdfT1NSCiAgICAgICAgIG1fc3BlY3VsYXRp
b25DaGVja3MuYXBwZW5kKFNwZWN1bGF0aW9uQ2hlY2soanVtcFRvRmFpbCwgdGhpcykpOworI2Vs
c2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzKSk7
CisjZW5kaWYKICAgICB9CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRp
dGlvbmFsIHJlY292ZXJ5LgogICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkK
QEAgLTIxMSw3ICs0MTAsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0
LmFwcGVuZChyZWNvdmVyeSk7CisjaWYgIURGR19PU1IKICAgICAgICAgbV9zcGVjdWxhdGlvbkNo
ZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0
aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vsc2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBl
bmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNp
emUoKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxs
eSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KQEAgLTIzNCwxOCArNDM3
LDY1IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcg
ZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9y
bWF0KTsKLQorICAgIAogICAgIC8vIEl0IGlzIHBvc3NpYmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUg
Z2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRpb24gaW4gd2hpY2ggd2UKICAgICAvLyBjYW4g
c3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwgKGZvciBleGFtcGxl
LCB3aGVuIHR3byBub2RlcwogICAgIC8vIHdpbGwgbWFrZSBjb25mbGljdGluZyBzcGVjdWxhdGlv
bnMgYWJvdXQgdGhlIHNhbWUgb3BlcmFuZCkuIEluIHN1Y2ggY2FzZXMgdGhpcwogICAgIC8vIGZs
YWcgaXMgY2xlYXJlZCwgaW5kaWNhdGluZyBubyBmdXJ0aGVyIGNvZGUgZ2VuZXJhdGlvbiBzaG91
bGQgdGFrZSBwbGFjZS4KICAgICBib29sIG1fY29tcGlsZU9rYXk7CisjaWYgIURGR19PU1IKICAg
ICAvLyBUaGlzIHZlY3RvciB0cmFja3MgYmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBh
dGggdG8gdGhlIG5vbi1zcGVjdWxhdGl2ZSBvbmUuCiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rv
ciBtX3NwZWN1bGF0aW9uQ2hlY2tzOworI2Vsc2UKKyAgICAvLyBUaGlzIHZlY3RvciB0cmFja3Mg
YmFpbC1vdXRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGggdG8gdGhlIG9sZCBKSVQuCisgICAg
T1NSRXhpdFZlY3RvciBtX29zckV4aXRzOworI2VuZGlmCiAgICAgLy8gU29tZSBiYWlsLW91dHMg
bmVlZCB0byByZWNvcmQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWNvcmRpbmcgc3BlY2lmaWMg
cmVjb3ZlcnkKICAgICAvLyB0byBiZSBwZXJmb3JtZWQgKGZvciBleGFtcGxlLCBvbiBkZXRlY3Rl
ZCBvdmVyZmxvdyBmcm9tIGFuIGFkZCwgd2UgbWF5IG5lZWQgdG8KICAgICAvLyByZXZlcnNlIHRo
ZSBhZGRpdGlvbiBpZiBhbiBvcGVyYW5kIGlzIGJlaW5nIG92ZXJ3cml0dGVuKS4KICAgICBWZWN0
b3I8U3BlY3VsYXRpb25SZWNvdmVyeSwgMTY+IG1fc3BlY3VsYXRpb25SZWNvdmVyeUxpc3Q7Cisg
ICAgCisgICAgLy8gVHJhY2tpbmcgZm9yIHdoaWNoIG5vZGVzIGFyZSBjdXJyZW50bHkgaG9sZGlu
ZyB0aGUgdmFsdWVzIG9mIGFyZ3VtZW50cyBhbmQgYnl0ZWNvZGUKKyAgICAvLyBvcGVyYW5kLWlu
ZGV4ZWQgdmFyaWFibGVzLgorCisgICAgVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2VGb3JPcGVyYW5k
KGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlU291cmNlUmVmZXJlbmNl
Rm9yT3BlcmFuZChvcGVyYW5kKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXROb2RlSW5kZXhG
b3JPcGVyYW5kKE5vZGVJbmRleCBub2RlSW5kZXgsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAg
ICAgdmFsdWVTb3VyY2VSZWZlcmVuY2VGb3JPcGVyYW5kKG9wZXJhbmQpID0gVmFsdWVTb3VyY2Uo
bm9kZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIHdpdGggY2FyZSwgc2lu
Y2UgaXQgYm90aCByZXR1cm5zIGEgcmVmZXJlbmNlIGludG8gYW4gYXJyYXkKKyAgICAvLyBhbmQg
cG90ZW50aWFsbHkgcmVzaXplcyB0aGUgYXJyYXkuIFNvIGl0IHdvdWxkIG5vdCBiZSByaWdodCB0
byBjYWxsIHRoaXMKKyAgICAvLyB0d2ljZSBhbmQgdGhlbiBwZXJmb3JtIG9wZXJhbmRzIG9uIGJv
dGggcmVmZXJlbmNlcywgc2luY2UgdGhlIG9uZSBmcm9tCisgICAgLy8gdGhlIGZpcnN0IGNhbGwg
bWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KKyAgICBWYWx1ZVNvdXJjZSYgdmFsdWVTb3VyY2VSZWZl
cmVuY2VGb3JPcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJ
c0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5k
ICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OworICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50XTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKCh1bnNpZ25lZClvcGVyYW5kID49IG1fdmFyaWFibGVzLnNp
emUoKSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVzLnJlc2l6ZShvcGVyYW5kICsgMSk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gbV92YXJpYWJsZXNbb3BlcmFuZF07CisgICAgfQorICAgIAor
ICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFZhbHVl
U291cmNlLCAwPiBtX3ZhcmlhYmxlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICB1
aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CisgICAgCisgICAgVmFsdWVSZWNvdmVyeSBj
b21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOworCisgICAgVmFsdWVS
ZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcih2YWx1ZVNvdXJjZUZvck9wZXJhbmQo
b3BlcmFuZCkpOworICAgIH0KIH07CiAKIApAQCAtNDY1LDExICs3MTUsMTcgQEAgcHJpdmF0ZToK
ICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCi0KIC8vID09PSBTcGVjdWxhdGlvbkNo
ZWNrSW5kZXhJdGVyYXRvciA9PT0KIC8vCiAvLyBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIG5v
bi1zcGVjdWxhdGl2ZSBKSVQgdG8gY2hlY2sgd2hpY2gKIC8vIG5vZGVzIHJlcXVpcmUgZW50cnkg
cG9pbnRzIGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGguCisjaWYgREZHX09TUgorLy8gVGhpcyBi
ZWNvbWVzIGEgc3R1YiBpZiBPU1IgaXMgZW5hYmxlZC4KK2NsYXNzIFNwZWN1bGF0aW9uQ2hlY2tJ
bmRleEl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRv
cigpIHsgfQorfTsKKyNlbHNlCiBjbGFzcyBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciB7
CiBwdWJsaWM6CiAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IoU3BlY3VsYXRpb25D
aGVja1ZlY3RvciYgc3BlY3VsYXRpb25DaGVja3MpCkBAIC00OTUsNyArNzUxLDE3IEBAIHByaXZh
dGU6CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9pdGVyOwogICAgIFNw
ZWN1bGF0aW9uQ2hlY2tWZWN0b3I6Okl0ZXJhdG9yIG1fZW5kOwogfTsKKyNlbmRpZgogCitpbmxp
bmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbGVyJiBqaXQpCisgICAg
OiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKKyAgICAsIG1fY29tcGlsZU9rYXkodHJ1ZSkK
KyAgICAsIG1fYXJndW1lbnRzKGppdC5jb2RlQmxvY2soKS0+bV9udW1QYXJhbWV0ZXJzKQorICAg
ICwgbV92YXJpYWJsZXMoaml0LmNvZGVCbG9jaygpLT5tX251bVZhcnMpCisgICAgLCBtX2xhc3RT
ZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgLCBtX2J5dGVj
b2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQorewor
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NvbXBhY3RKSVRDb2RlTWFwLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvbXBhY3RKSVRDb2RlTWFwX2gKKyNkZWZpbmUgQ29tcGFj
dEpJVENvZGVNYXBfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1VudXNlZFBhcmFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsKKworLy8gR2l2ZXMgeW91IGEgY29tcHJlc3NlZCBtYXAgYmV0d2VlbiBiZXR3ZWVuIGJ5
dGVjb2RlIGluZGljZXMgYW5kIG1hY2hpbmUgY29kZQorLy8gZW50cnkgcG9pbnRzLiBUaGUgY29t
cHJlc3Npb24gc2ltcGx5IHRyaWVzIHRvIHVzZSBlaXRoZXIgMSwgMiwgb3IgNCBieXRlcyBmb3IK
Ky8vIGFueSBnaXZlbiBvZmZzZXQuIFRoZSBsYXJnZXN0IG9mZnNldCB0aGF0IGNhbiBiZSBzdG9y
ZWQgaXMgMl4zMC4KKworLy8gRXhhbXBsZSB1c2U6CisvLworLy8gQ29tcGFjdEpJVENvZGVNYXA6
OkVuY29kZXIgZW5jb2RlcihtYXApOworLy8gZW5jb2Rlci5hcHBlbmQoYSwgYik7CisvLyBlbmNv
ZGVyLmFwcGVuZChjLCBkKTsgLy8gcHJlY29uZGl0aW9uczogYyA+PSBhLCBkID49IGIKKy8vIE93
blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbWFwID0gZW5jb2Rlci5maW5pc2goKTsKKy8vCisvLyBB
dCBzb21lIGxhdGVyIHRpbWU6CisvLworLy8gVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dD4gZGVjb2RlZDsKKy8vIG1hcC0+ZGVjb2RlKGRlY29kZWQpOworCitzdHJ1Y3QgQnl0ZWNvZGVB
bmRNYWNoaW5lT2Zmc2V0IHsKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQoKSB7IH0KKyAg
ICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwg
dW5zaWduZWQgbWFjaGluZUNvZGVPZmZzZXQpCisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KGJ5
dGVjb2RlSW5kZXgpCisgICAgICAgICwgbV9tYWNoaW5lQ29kZU9mZnNldChtYWNoaW5lQ29kZU9m
ZnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsK
KyAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIAorICAgIHN0YXRpYyBpbmxp
bmUgdW5zaWduZWQgZ2V0Qnl0ZWNvZGVJbmRleChCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1h
cHBpbmcpCisgICAgeworICAgICAgICByZXR1cm4gbWFwcGluZy0+bV9ieXRlY29kZUluZGV4Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldE1hY2hpbmVDb2RlT2Zm
c2V0KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZykKKyAgICB7CisgICAgICAgIHJl
dHVybiBtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0OworICAgIH0KK307CisKK2NsYXNzIENv
bXBhY3RKSVRDb2RlTWFwIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICB+Q29tcGFjdEpJVENvZGVNYXAoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYnVmZmVyKQor
ICAgICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRl
Y29kZShWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgcmVzdWx0KSBjb25zdAorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNCeXRlY29kZUluZGV4ID0gMDsKKyAgICAgICAg
dW5zaWduZWQgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IDA7CisgICAgICAgIAorICAgICAg
ICByZXN1bHQucmVzaXplKG1fbnVtYmVyT2ZFbnRyaWVzKTsKKyAgICAgICAgdW5zaWduZWQgaiA9
IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX251bWJlck9mRW50cmllczsg
KytpKSB7CisgICAgICAgICAgICBwcmV2aW91c0J5dGVjb2RlSW5kZXggKz0gZGVjb2RlTnVtYmVy
KGopOworICAgICAgICAgICAgcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCArPSBkZWNvZGVOdW1i
ZXIoaik7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9ieXRlY29kZUluZGV4ID0gcHJldmlvdXNC
eXRlY29kZUluZGV4OworICAgICAgICAgICAgcmVzdWx0W2ldLm1fbWFjaGluZUNvZGVPZmZzZXQg
PSBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAgICAgICB9CisgICAgICAgIEFTU0VSVChq
ID09IG1fc2l6ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBDb21wYWN0SklUQ29kZU1h
cCh1aW50OF90KiBidWZmZXIsIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG51bWJlck9mRW50cmll
cykKKyAgICAgICAgOiBtX2J1ZmZlcihidWZmZXIpCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
ICAgICAsIG1fc2l6ZShzaXplKQorI2VuZGlmCisgICAgICAgICwgbV9udW1iZXJPZkVudHJpZXMo
bnVtYmVyT2ZFbnRyaWVzKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAg
IH0KKyAgICAKKyAgICB1aW50OF90IGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyW2lu
ZGV4XTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgZGVjb2RlTnVtYmVyKHVuc2lnbmVkJiBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgaGVhZFZhbHVlID0gYXQoaW5kZXgr
Kyk7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDEyOCkpCisgICAgICAgICAgICByZXR1cm4g
aGVhZFZhbHVlOworICAgICAgICBpZiAoIShoZWFkVmFsdWUgJiA2NCkpCisgICAgICAgICAgICBy
ZXR1cm4gKHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWFkVmFsdWUgJiB+MTI4KSA8PCA4KSB8IGF0
KGluZGV4KyspOworICAgICAgICB1bnNpZ25lZCBzZWNvbmQgPSBhdChpbmRleCsrKTsKKyAgICAg
ICAgdW5zaWduZWQgdGhpcmQgID0gYXQoaW5kZXgrKyk7CisgICAgICAgIHVuc2lnbmVkIGZvdXJ0
aCA9IGF0KGluZGV4KyspOworICAgICAgICByZXR1cm4gKHN0YXRpY19jYXN0PHVuc2lnbmVkPiho
ZWFkVmFsdWUgJiB+KDEyOCArIDY0KSkgPDwgMjQpIHwgKHNlY29uZCA8PCAxNikgfCAodGhpcmQg
PDwgOCkgfCBmb3VydGg7CisgICAgfQorICAgIAorICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICB1bnNpZ25lZCBtX3NpemU7CisjZW5kaWYKKyAgICB1bnNp
Z25lZCBtX251bWJlck9mRW50cmllczsKKyAgICAKK3B1YmxpYzoKKyAgICBjbGFzcyBFbmNvZGVy
IHsKKyAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRW5jb2Rlcik7CisgICAgcHVibGljOgor
ICAgICAgICBFbmNvZGVyKCk7CisgICAgICAgIH5FbmNvZGVyKCk7CisgICAgICAgIAorICAgICAg
ICB2b2lkIGVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJlck9mRW50cmllc1RvQWRkKTsK
KyAgICAgICAgdm9pZCBhcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWduZWQgbWFj
aGluZUNvZGVPZmZzZXQpOworICAgICAgICBQYXNzT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBm
aW5pc2goKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBhcHBlbmRCeXRl
KHVpbnQ4X3QgdmFsdWUpOworICAgICAgICB2b2lkIGVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1
ZSk7CisgICAgCisgICAgICAgIHVpbnQ4X3QqIG1fYnVmZmVyOworICAgICAgICB1bnNpZ25lZCBt
X3NpemU7CisgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgICAgIHVuc2lnbmVkIG1f
bnVtYmVyT2ZFbnRyaWVzOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbV9wcmV2aW91c0J5
dGVjb2RlSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNl
dDsKKyAgICB9OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFbmNvZGVyOworfTsKKwor
aW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpFbmNvZGVyKCkKKyAgICA6IG1fYnVm
ZmVyKDApCisgICAgLCBtX3NpemUoMCkKKyAgICAsIG1fY2FwYWNpdHkoMCkKKyAgICAsIG1fbnVt
YmVyT2ZFbnRyaWVzKDApCisgICAgLCBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCgwKQorICAgICwg
bV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KDApCit7Cit9CisKK2lubGluZSBDb21wYWN0SklU
Q29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIoKQoreworICAgIGlmIChtX2J1ZmZlcikKKyAgICAg
ICAgZmFzdEZyZWUobV9idWZmZXIpOworfQorICAgICAgICAKK2lubGluZSB2b2lkIENvbXBhY3RK
SVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgdW5zaWdu
ZWQgbWFjaGluZUNvZGVPZmZzZXQpCit7CisgICAgQVNTRVJUKGJ5dGVjb2RlSW5kZXggPj0gbV9w
cmV2aW91c0J5dGVjb2RlSW5kZXgpOworICAgIEFTU0VSVChtYWNoaW5lQ29kZU9mZnNldCA+PSBt
X3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQpOworICAgIGVuc3VyZUNhcGFjaXR5Rm9yKDEpOwor
ICAgIGVuY29kZU51bWJlcihieXRlY29kZUluZGV4IC0gbV9wcmV2aW91c0J5dGVjb2RlSW5kZXgp
OworICAgIGVuY29kZU51bWJlcihtYWNoaW5lQ29kZU9mZnNldCAtIG1fcHJldmlvdXNNYWNoaW5l
Q29kZU9mZnNldCk7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSBieXRlY29kZUluZGV4
OworICAgIG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCA9IG1hY2hpbmVDb2RlT2Zmc2V0Owor
ICAgIG1fbnVtYmVyT2ZFbnRyaWVzKys7Cit9CisKK2lubGluZSBQYXNzT3duUHRyPENvbXBhY3RK
SVRDb2RlTWFwPiBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6ZmluaXNoKCkKK3sKKyAgICBt
X2NhcGFjaXR5ID0gbV9zaXplOworICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+
KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgT3duUHRyPENvbXBhY3RK
SVRDb2RlTWFwPiByZXN1bHQgPSBhZG9wdFB0cihuZXcgQ29tcGFjdEpJVENvZGVNYXAobV9idWZm
ZXIsIG1fc2l6ZSwgbV9udW1iZXJPZkVudHJpZXMpKTsKKyAgICBtX2J1ZmZlciA9IDA7CisgICAg
bV9zaXplID0gMDsKKyAgICBtX2NhcGFjaXR5ID0gMDsKKyAgICBtX251bWJlck9mRW50cmllcyA9
IDA7CisgICAgbV9wcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAgIG1fcHJldmlvdXNNYWNo
aW5lQ29kZU9mZnNldCA9IDA7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisgICAg
ICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmFwcGVuZEJ5dGUo
dWludDhfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXplICsgMSA8PSBtX2NhcGFjaXR5KTsK
KyAgICBtX2J1ZmZlclttX3NpemUrK10gPSB2YWx1ZTsKK30KKyAgICAKK2lubGluZSB2b2lkIENv
bXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbmNvZGVOdW1iZXIodWludDMyX3QgdmFsdWUpCit7
CisgICAgQVNTRVJUKG1fc2l6ZSArIDQgPD0gbV9jYXBhY2l0eSk7CisgICAgQVNTRVJUKHZhbHVl
IDwgKDEgPDwgMzApKTsKKyAgICBpZiAodmFsdWUgPD0gMTI3KSB7CisgICAgICAgIHVpbnQ4X3Qg
aGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpOworICAgICAgICBBU1NFUlQo
IShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUpOworICAg
IH0gZWxzZSBpZiAodmFsdWUgPD0gMTYzODMpIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUg
PSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KTsKKyAgICAgICAgQVNTRVJUKCEoaGVh
ZFZhbHVlICYgMTI4KSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDY0KSk7CisgICAg
ICAgIGFwcGVuZEJ5dGUoaGVhZFZhbHVlIHwgMTI4KTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0
aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVpbnQ4X3Qg
aGVhZFZhbHVlID0gc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gMjQpOworICAgICAgICBB
U1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYg
NjQpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjggfCA2NCk7CisgICAgICAg
IGFwcGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUgPj4gMTYpKTsKKyAgICAgICAg
YXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiA4KSk7CisgICAgICAgIGFw
cGVuZEJ5dGUoc3RhdGljX2Nhc3Q8dWludDhfdD4odmFsdWUpKTsKKyAgICB9Cit9CisKK2lubGlu
ZSB2b2lkIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcih1bnNp
Z25lZCBudW1iZXJPZkVudHJpZXNUb0FkZCkKK3sKKyAgICB1bnNpZ25lZCBjYXBhY2l0eU5lZWRl
ZCA9IG1fc2l6ZSArIG51bWJlck9mRW50cmllc1RvQWRkICogMiAqIDQ7CisgICAgaWYgKGNhcGFj
aXR5TmVlZGVkID4gbV9jYXBhY2l0eSkgeworICAgICAgICBtX2NhcGFjaXR5ID0gY2FwYWNpdHlO
ZWVkZWQgKiAyOworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihmYXN0
UmVhbGxvYyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBDb21wYWN0SklUQ29kZU1hcF9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDkxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSwxMSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAKICAgICAgICAgbV9sYWJlbHNbbV9ieXRlY29k
ZU9mZnNldF0gPSBsYWJlbCgpOwogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAg
ICAgICAgaWYgKG1fY2FuQmVPcHRpbWl6ZWQpCisgICAgICAgICAgICBtX2ppdENvZGVNYXBFbmNv
ZGVyLmFwcGVuZChtX2J5dGVjb2RlT2Zmc2V0LCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZD
b2RlLCBsYWJlbCgpKSk7CisjZW5kaWYKKwogICAgICAgICBzd2l0Y2ggKG1faW50ZXJwcmV0ZXIt
PmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpKSB7CiAgICAgICAgIERF
RklORV9CSU5BUllfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX0JJTkFSWV9PUChv
cF9pbikKQEAgLTM3Myw3ICszNzgsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAjZW5kaWYKIH0KIAotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVMaW5rUGFzcygpCiB7
CiAgICAgdW5zaWduZWQgam1wVGFibGVDb3VudCA9IG1fam1wVGFibGUuc2l6ZSgpOwpAQCAtNTAy
LDYgKzUwNiw4IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIHsK
ICNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogICAgIG1fY2FuQmVPcHRpbWl6ZWQgPSBt
X2NvZGVCbG9jay0+Y2FuQ29tcGlsZVdpdGhERkcoKTsKKyAgICBpZiAobV9jYW5CZU9wdGltaXpl
ZCkKKyAgICAgICAgbV9zdGFydE9mQ29kZSA9IGxhYmVsKCk7CiAjZW5kaWYKICAgICAKICAgICAv
LyBKdXN0IGFkZCBhIGxpdHRsZSBiaXQgb2YgcmFuZG9tbmVzcyB0byB0aGUgY29kZWdlbgpAQCAt
NjQyLDYgKzY0OCwxMSBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVu
CiAgICAgICAgIGluZm8uY2FsbFJldHVybkxvY2F0aW9uID0gbV9jb2RlQmxvY2stPnN0cnVjdHVy
ZVN0dWJJbmZvKG1fbWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mb1tpXS5wcm9wZXJ0eUFjY2Vzc0lu
ZGV4KS5jYWxsUmV0dXJuTG9jYXRpb247CiAgICAgfQogCisjaWYgRU5BQkxFKFRJRVJFRF9DT01Q
SUxBVElPTikKKyAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgbV9jb2RlQmxvY2st
PnNldEpJVENvZGVNYXAobV9qaXRDb2RlTWFwRW5jb2Rlci5maW5pc2goKSk7CisjZW5kaWYKKwog
ICAgIGlmIChtX2NvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgZnVuY3Rp
b25FbnRyeUFyaXR5Q2hlY2spCiAgICAgICAgICpmdW5jdGlvbkVudHJ5QXJpdHlDaGVjayA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2YoYXJpdHlDaGVjayk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBBU1NFUlRf
SklUX09GRlNFVChhY3R1YWwsIGV4cGVjdGVkKSBBU1NFUlRfV0lUSF9NRVNTQUdFKGFjdHVhbCA9
PSBleHBlY3RlZCwgIkpJVCBPZmZzZXQgXCIlc1wiIHNob3VsZCBiZSAlZCwgbm90ICVkLlxuIiwg
I2V4cGVjdGVkLCBzdGF0aWNfY2FzdDxpbnQ+KGV4cGVjdGVkKSwgc3RhdGljX2Nhc3Q8aW50Pihh
Y3R1YWwpKTsKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbXBhY3RKSVRD
b2RlTWFwLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKU0ludGVyZmFj
ZUpJVC5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgpAQCAtMTA1NCw2ICsxMDU1LDggQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAgICAg
ICAgIGJvb2wgbV9jYW5CZU9wdGltaXplZDsKKyAgICAgICAgTGFiZWwgbV9zdGFydE9mQ29kZTsK
KyAgICAgICAgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXIgbV9qaXRDb2RlTWFwRW5jb2RlcjsK
ICNlbmRpZgogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA5NDkxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5Miw2ICsxOTIsOSBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShH
bG9iYWxEYXRhVHlwCiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikKICAgICAsIGludGVycHJldGVy
KDApCiAgICAgLCBoZWFwKHRoaXMsIGhlYXBTaXplKQorI2lmIEVOQUJMRShUSUVSRURfQ09NUElM
QVRJT04pCisgICAgLCBudW1iZXJPZlNsb3RzSW5MYXN0T1NSU2NyYXRjaEJ1ZmZlcigwKQorI2Vu
ZGlmCiAgICAgLCBkeW5hbWljR2xvYmFsT2JqZWN0KDApCiAgICAgLCBjYWNoZWRVVENPZmZzZXQo
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkKICAgICAsIG1heFJlZW50
cnlEZXB0aCh0aHJlYWRTdGFja1R5cGUgPT0gVGhyZWFkU3RhY2tUeXBlU21hbGwgPyBNYXhTbWFs
bFRocmVhZFJlZW50cnlEZXB0aCA6IE1heExhcmdlVGhyZWFkUmVlbnRyeURlcHRoKQpAQCAtMzU3
LDYgKzM2MCwxMSBAQCBKU0dsb2JhbERhdGE6On5KU0dsb2JhbERhdGEoKQogI2lmIEVOQUJMRShS
RUdFWFBfVFJBQ0lORykKICAgICBkZWxldGUgbV9ydFRyYWNlTGlzdDsKICNlbmRpZgorCisjaWYg
RU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
b3NyU2NyYXRjaEJ1ZmZlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGZhc3RGcmVlKG9zclNjcmF0
Y2hCdWZmZXJzW2ldKTsKKyNlbmRpZgogfQogCiBQYXNzUmVmUHRyPEpTR2xvYmFsRGF0YT4gSlNH
bG9iYWxEYXRhOjpjcmVhdGVDb250ZXh0R3JvdXAoVGhyZWFkU3RhY2tUeXBlIHR5cGUsIEhlYXBT
aXplIGhlYXBTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0OTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsyMzUsMjggQEAg
bmFtZXNwYWNlIEpTQyB7CiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBpbnQ2NF90IGRlYnVnRGF0
YUJ1ZmZlcls2NF07CiAjZW5kaWYKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAg
ICAgICBWZWN0b3I8aW50NjRfdCo+IG9zclNjcmF0Y2hCdWZmZXJzOworICAgICAgICBzaXplX3Qg
bnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXI7CisgICAgICAgIAorICAgICAgICBp
bnQ2NF90KiBvc3JTY3JhdGNoQnVmZmVyRm9yU2l6ZSh1bnNpZ25lZCBudW1iZXJPZlNsb3RzKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW51bWJlck9mU2xvdHMpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChudW1iZXJPZlNsb3Rz
ID4gbnVtYmVyT2ZTbG90c0luTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsKKyAgICAgICAgICAgICAg
ICAvLyBQcm90ZWN0IGFnYWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhvbG9neSBieSBlbnN1
cmluZworICAgICAgICAgICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdlIGdldCBhIGdlb21ldHJp
YyBzZXJpZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAvLyB0b3RhbCBtZW1v
cnkgdXNhZ2UgaXMgc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgICAgIC8vIG1heChzY3Jh
dGNoIGJ1ZmZlciBzaXplKSAqIDQuCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZTbG90c0luTGFz
dE9TUlNjcmF0Y2hCdWZmZXIgPSBudW1iZXJPZlNsb3RzICogMjsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBvc3JTY3JhdGNoQnVmZmVycy5hcHBlbmQoc3RhdGljX2Nhc3Q8aW50
NjRfdCo+KGZhc3RNYWxsb2Moc2l6ZW9mKGludDY0X3QpICogbnVtYmVyT2ZTbG90c0luTGFzdE9T
UlNjcmF0Y2hCdWZmZXIpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBvc3JTY3JhdGNoQnVmZmVycy5sYXN0KCk7CisgICAgICAgIH0KKyNlbmRpZgog
I2VuZGlmCiAKICAgICAgICAgSGFzaE1hcDxPcGFxdWVKU0NsYXNzKiwgT3BhcXVlSlNDbGFzc0Nv
bnRleHREYXRhKj4gb3BhcXVlSlNDbGFzc0RhdGE7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1ZhbHVlLmNwcAkocmV2aXNpb24gOTQ5MTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzEx
OSw3IEBAIEpTT2JqZWN0KiBKU1ZhbHVlOjpzeW50aGVzaXplUHJvdG90eXBlKEUKICNpZm5kZWYg
TkRFQlVHCiBjaGFyKiBKU1ZhbHVlOjpkZXNjcmlwdGlvbigpCiB7Ci0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBzaXplID0gMzI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gNjQ7CiAg
ICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CiAKICAgICBpZiAoISp0aGlzKQo=
</data>
<flag name="review"
          id="103577"
          type_id="1"
          status="-"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="103578"
          type_id="3"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107077</attachid>
            <date>2011-09-12 13:44:18 -0700</date>
            <delta_ts>2011-09-12 13:52:37 -0700</delta_ts>
            <desc>the patch - fix review</desc>
            <filename>osr_patch_11.diff</filename>
            <type>text/plain</type>
            <size>92652</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMTIgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tp
YS5jb20+CiAKICAgICAgICAgW1F0XSBCdWlsZCBmYWlscyBhZnRlciByOTQ5MjAgd2l0aCBzdHJp
Y3QgY29tcGlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5
NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAJCTBGRDND
ODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZH
RHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07CiAJCTBGRDgyRTIx
MTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8q
IERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAv
KiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtNzk3LDYgKzc5OCw3IEBACiAJCTBG
RDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFFMTQxNzJDMkYwMDE3
OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRjE0MTcyQzJGMDAxNzlD
OTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFj
dEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdEpJ
VENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4
MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjky
MTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTc2LDYgKzE1NzgsNyBAQAogCQkxNDI5RDky
QzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENv
ZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0
YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTIzOTQsNiArMjM5Nyw3IEBACiAJ
CQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJ
VENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2RTBFMTZGNUNE
MDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjNCMkYxM0ZD
NjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
OTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQ29kZUJsb2NrX2gKICNkZWZp
bmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAjaW5jbHVk
ZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAi
SklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29kZU1hcChQYXNzT3duUHRyPENvbXBh
Y3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ppdENv
ZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAgICAgIENvbXBhY3RKSVRDb2RlTWFw
KiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0Q29kZU1h
cC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCiAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNz
KQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAg
U2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgorI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2Rl
TWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CiAjZW5kaWYKQEAgLTY2
Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1ib2xUYWJsZSogbV9z
eW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOyAv
LyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAgICAgIE93blB0cjxDb2RlQmxvY2s+
IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnQxKS5h
c0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnQx
KTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4KTsKKyAgICB9CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBpdCB0byB0aGUgZ3Jh
cGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdlbmVyYXRlJyB0aGVu
IHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3VyZSBnZW5lcmF0aW9u
LgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2RlSW5kZXggY2hpbGQx
ID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0g
Tm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRl
eCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgbV9jdXJy
ZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBl
bmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dy
YXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3LDcgQEAgcHJpdmF0ZToKICAgICBO
b2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8sIE5vZGVJbmRleCBj
aGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9k
ZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBt
X2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBt
X2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkK
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM5Miw3ICszOTYsNyBA
QCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8g
aW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICB7CiAgICAg
ICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0g
ICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4LCBpbmZvMSwgaW5m
bzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwg
Y2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQwMiw3ICs0MDYsNyBAQCBwcml2YXRl
OgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3As
IE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJl
c3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5h
cHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbzEsIGluZm8y
LCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNzZWRWYXJBcmdzLCBt
X251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpW
YXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFy
QXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzID0gMDsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biA5NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90aGVyIH07
CiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBFeGVjU3RhdGUq
IGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlD
aGVjaykKIHsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgc3dpdGNoIChjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpIHsKKyAgICAgICAgY2Fz
ZSAxMTE3NjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgR3JhcGggZGZnKGNvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CiAgICAgaWYgKCFw
YXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gOTsK
IAogICAgIC8vIFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4KKyAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IFg4NlJlZ2lzdGVy
czo6cjEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBYODZS
ZWdpc3RlcnM6OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5cGVOdW1iZXJSZWdp
c3RlciA9IFg4NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
NCwxMiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7CiAgICAgfQogCi0j
aWZuZGVmIE5ERUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
dXNlQ291bnQ7CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIGluZGV4IG9m
IHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVy
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk0
OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAgdW5zaWduZWQgcmVm
Q291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkgewotICAgICAgICBw
cmludGYoIiUgNGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0gIXJlZkNvdW50Owog
ICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKLSAgICBpZiAobXVz
dEdlbmVyYXRlKQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAgQVNTRVJUKHJlZkNv
dW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBFeGFtcGxlL2V4cGxh
bmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3LDggKzc2LDggQEAg
dm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAgICAgICAg
JCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVt
ZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4g
Ym90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXgg
aW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3Nl
ZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAg
ICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2Jq
ZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBw
cmludGYoIiUgNGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdlbmVyYXRlID8gJyEn
IDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCisgICAgcHJpbnRm
KCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAi
IDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Cisg
ICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAgIHByaW50ZigiJXUi
LCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiA5NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjYsMTcgKzExMjYs
MTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0
LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAgICBtX2pp
dC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNl
cHRpb25JbmZvKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgp
W21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
ICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dD
YWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5j
dGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAg
SklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNl
cHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4
XS5jb2RlT3JpZ2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3MpLCBHUFJJbmZvOjpy
ZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNh
bGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7Cisg
ICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwg
bV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAgICAgCiAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xMTQ0LDcgKzExNDQsNyBAQCB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwg
dGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNl
cHRpb25JbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJn
ZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmln
aW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9uQ2hlY2soTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDk3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CiAjaW5jbHVkZSA8
ZGZnL0RGR0pJVENvbXBpbGVyLmg+CiAjaW5jbHVkZSA8ZGZnL0RGR09wZXJhdGlvbnMuaD4KKyNp
bmNsdWRlIDxkZmcvREZHTm9kZS5oPgogI2luY2x1ZGUgPGRmZy9ERkdSZWdpc3RlckJhbmsuaD4K
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtOTA3LDcgKzkwOCw3IEBAIHBy
b3RlY3RlZDoKIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faml0LmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIG1faml0LmdyYXBo
KClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAgICAgICByZXR1cm4gbV9qaXQu
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2Nv
bXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAgICAgfQogCiAgICAgdm9pZCBhZGRCcmFuY2goY29u
c3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2
aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwzNDAgQEAgdm9pZCBKSVRDb21waWxl
cjo6ZmlsbFRvSlMoTm9kZUluZGV4IG5vZAogICAgIGxvYWRQdHIoYWRkcmVzc0Zvcihub2RlLnZp
cnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKIH0KIAorI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCit2
b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4
aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZm
LgorICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOworCisjaWYgRU5BQkxFKERGR19ERUJVR19W
RVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkIChiYyMl
dSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBleGl0Lm1f
Ynl0ZWNvZGVJbmRleCwgZGVidWdPZmZzZXQoKSk7CisgICAgZXhpdC5kdW1wKHN0ZGVycik7Cisj
ZW5kaWYKKyNpZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFKQor
ICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIEVOQUJMRShERkdfVkVSQk9TRV9T
UEVDVUxBVElPTl9GQUlMVVJFKQorICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVi
dWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKKyAgICBkZWJ1Z0luZm8t
PmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgIGRlYnVnSW5mby0+ZGVidWdPZmZzZXQgPSBk
ZWJ1Z09mZnNldCgpOworICAgIAorICAgIGRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50U3Bl
Y3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworI2VuZGlmCisgICAgCisgICAgLy8gMikgUGVy
Zm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVu
IGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVy
aWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgorICAgIAorICAgIEdQ
UlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIGlmIChyZWNvdmVy
eSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBT
cGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3Zl
cnktPmRlc3QoKSk7CisgICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgYWxyZWFkeUJveGVkID0gcmVj
b3ZlcnktPmRlc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CisgICAgICAgICAgICB4b3JQdHIoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3Qo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAzKSBGaWd1cmUg
b3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xvdHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9yIGV2
ZXJ5IEdQUi9GUFIKKyAgICAvLyAgICB3aG9zZSBkZXN0aW5hdGlvbiBpcyBub3cgb2NjdXBpZWQg
YnkgYSBERkcgdmlydHVhbCByZWdpc3RlciwgYW5kIHdlIG5lZWQKKyAgICAvLyAgICBvbmUgZm9y
IGV2ZXJ5IGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVyIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4K
KyAgICAvLyAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyBvZiB0aGVtLiBBbHNvIHNlZSBp
ZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50cywKKyAgICAvLyAgICBhbnkgdW5kZWZpbmVkIHNsb3Rz
LCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55IHVuYm94ZWQgaW50cy4KKyAgICAgICAgICAgIAorICAg
IFZlY3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMoZXhpdC5tX3ZhcmlhYmxlcy5z
aXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2lzb25lZFZpcnR1YWxSZWdp
c3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tpXSA9
IGZhbHNlOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMg
PSAwOworICAgIHVuc2lnbmVkIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA9IDA7
CisgICAgCisgICAgLy8gQm9vbGVhbnMgZm9yIGZhc3QgY2hlY2tzLiBXZSBleHBlY3QgdGhhdCBt
b3N0IE9TUiBleGl0cyBkbyBub3QgaGF2ZSB0byByZWJveAorICAgIC8vIEludDMycywgaGF2ZSBu
byBGUFJzLCBhbmQgaGF2ZSBubyBjb25zdGFudHMuIElmIHRoZXJlIGFyZSBjb25zdGFudHMsIHdl
CisgICAgLy8gZXhwZWN0IG1vc3Qgb2YgdGhlbSB0byBiZSBqc1VuZGVmaW5lZCgpOyBpZiB0aGF0
J3MgdHJ1ZSB0aGVuIHdlIGhhbmRsZSB0aGF0CisgICAgLy8gc3BlY2lhbGx5IHRvIG1pbmltaXpl
IGNvZGUgc2l6ZSBhbmQgZXhlY3V0aW9uIHRpbWUuCisgICAgYm9vbCBoYXZlVW5ib3hlZEludDMy
cyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUZQUnMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVDb25z
dGFudHMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKKyAgICAKKyAg
ICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsg
KytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVl
KCkpIHsKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAg
IG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOworICAgICAgICAgICAgQVNTRVJU
KChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPj0gMCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVh
bCByZWdpc3RlciBiZWZvcmUgZG9pbmcKKyAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIg
c2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKKyAgICAg
ICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVy
IGRpc3BsYWNlZCB2aXJ0dWFsCisgICAgICAgICAgICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQu
IFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5CisgICAgICAgICAg
ICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhw
ZWN0IHRoaXMgY2FzZQorICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5n
IG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIGluCisgICAgICAgICAgICAvLyB3aGlj
aCBpdCBkb2VzIG5vdCBoYXBwZW4uCisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJl
Z2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAg
ICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50
ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAg
ICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVy
eS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgaGF2ZVVuYm94
ZWRJbnQzMnMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAg
ICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFu
dCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgRW5jb2RlZEpTVmFs
dWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERh
dGEoKS0+b3NyU2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChu
dW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1
YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZE
aXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpKTsKKworICAgIC8vIEZyb20gaGVyZSBvbiwgdGhl
IGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3Rh
bmNlCisgICAgLy8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBp
dCBpcyBzdG9yZWQuCisgICAgCisgICAgLy8gNCkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50
ZWdlcnMuCisgICAgCisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKSB7CisgICAgICAgIGZvciAo
aW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4
KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFs
dWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkg
PT0gVW5ib3hlZEludDMySW5HUFIgJiYgcmVjb3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVkKQor
ICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVj
b3ZlcnkuZ3ByKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDUpIER1bXAgYWxs
IG5vbi1wb2lzb25lZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywgc2F2ZSB0aGVtIGludG8gdGhl
IHNjcmF0Y2ggc3RvcmFnZS4KKyAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBh
IGZhc3QgY2hhbmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0CisgICAg
Ly8gICAgbW9zdCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIg
dGhhdCBuZWVkcyB0byBiZSBkdW1wZWQuCisgICAgCisgICAgdW5zaWduZWQgc2NyYXRjaEluZGV4
ID0gMDsKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhp
dC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMy
SW5HUFI6CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25l
ZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAg
ICAgICAgICAgc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNo
SW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVj
b3ZlcnkuZ3ByKCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgYWxsIEdQUnMgYXJlIGF2
YWlsYWJsZSBmb3Igc2NyYXRjaCB1c2UuCisgICAgCisgICAgaWYgKGhhdmVGUFJzKSB7CisgICAg
ICAgIC8vIDYpIEJveCBhbGwgZG91YmxlcyAocmVsaWVzIG9uIHRoZXJlIGJlaW5nIG1vcmUgR1BS
cyB0aGFuIEZQUnMpCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigp
OworICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6
dG9JbmRleChmcHIpKTsKKyAgICAgICAgICAgIGJveERvdWJsZShmcHIsIGdwcik7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIDcpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgcmVn
aXN0ZXIgZmlsZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBpZgorICAgICAgICAvLyAgICB0
aGUgZGVzdGluYXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KKyAgICAgICAgCisg
ICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zlcmll
cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVy
eSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3Zlcnku
dGVjaG5pcXVlKCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJl
Y292ZXJ5LmZwcigpKSk7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAm
JiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0p
CisgICAgICAgICAgICAgICAgc3RvcmVQdHIoZ3ByLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaElu
ZGV4KyspOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKGdwciwg
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkp
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDgpIFJlc2h1ZmZs
ZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0
CisgICAgLy8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMg
bm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2Fs
IHJlZ2lzdGVycy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0
ZXJzKSB7CisgICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0g
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlz
IGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAor
ICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBl
eGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50
ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRl
eCsrKSk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2VtZW50
SW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBz
dG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNz
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgdXNlIHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCisgICAgICAgICAg
ICAvLyBmb3Igc3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBk
aXNjb3ZlciB0aGF0CisgICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBs
aXZlIHZhbHVlcyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgICAgICAvLyBzcGlsbGVk
IHJlYWxseSBlbmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgorICAgICAgICAK
KyAgICAgICAgICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29y
cmVjdCBidXQgcHJvYmFibHkgbm90CisgICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxh
ciwgaXQgY29ycmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAg
ICAgIC8vIHRoZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5h
dGlvbiB2YWx1ZXMsIGxpa2UKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAxIC0+IDIK
KyAgICAgICAgICAgIC8vIDIgLT4gMQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEl0
IGFjY29tcGxpc2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCBy
ZWdpc3RlcnMKKyAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlv
bnMgYW5kIGRyb3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCisgICAgICAgICAgICAvLyBsb2NhdGlv
biBpbiBtZW1vcnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2Nh
dGlvbgorICAgICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCisg
ICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVt
YmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAg
ICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZm
ZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAg
ICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7CisgICAg
ICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJp
ZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAo
cmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1
ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAg
c3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0
Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVn
aXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICAvLyA5KSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVy
cy4KKyAgICAKKyAgICBzY3JhdGNoSW5kZXggPSAwOworICAgIGlmIChudW1iZXJPZlBvaXNvbmVk
VmlydHVhbFJlZ2lzdGVycykgeworICAgICAgICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAw
OyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1
YWxSZWdpc3RlcikgeworICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
dmlydHVhbFJlZ2lzdGVyXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1fdmFy
aWFibGVzW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgY2FzZSBV
bmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICAg
ICAgbG9hZFB0cihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoc2Ny
YXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAKKyAg
ICAvLyAxMCkgRHVtcCBhbGwgY29uc3RhbnRzLiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBzaW5j
ZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBzZWUKKyAgICAvLyAgICAgb2Z0ZW4uCisKKyAgICBpZiAo
aGF2ZUNvbnN0YW50cykgeworICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAgICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENvbnN0YW50KQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCku
aXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwg
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1Q
dHIoSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgYWRkcmVzc0ZvcigoVmly
dHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIDExKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNv
ZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3Bl
cmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICAgICBsb2FkUHRy
KGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJ
bmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgCisgICAgLy8gMTIpIEZpeCBjYWxsIGZy
YW1lLgorICAgIAorICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklU
VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1t
UHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lz
dGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSk7CisgICAgCisgICAgLy8gMTMpIEp1bXAgaW50
byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KKyAgICAKKyAgICBCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNo
aW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29k
ZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4
aXQubV9ieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICBBU1NFUlQobWFwcGluZyk7CisgICAgQVNT
RVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7Cisg
ICAgCisgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklU
Q29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgCisg
ICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVy
KTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJl
Z1QxKTsKKyAgICBqdW1wKEdQUkluZm86OnJlZ1QxKTsKKworI2lmIEVOQUJMRShERkdfREVCVUdf
VkVSQk9TRSkKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIC0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsK
KyNlbmRpZgorfQorCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVK
SVQmIHNwZWN1bGF0aXZlKQoreworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+
IGRlY29kZWRDb2RlTWFwOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7
CisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRp
dmUoKS0+aml0Q29kZU1hcCgpKTsKKyAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0
Q29kZU1hcCgpLT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIAorICAgIE9TUkV4aXRWZWN0
b3I6Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsK
KyAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4
aXRzKCkuZW5kKCk7CisgICAgCisgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgewor
ICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKKyAgICAgICAgZXhpdFNw
ZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4
aXQubV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICArK2V4aXRzSXRl
cjsKKyAgICB9Cit9CisjZWxzZSAvLyBFTkFCTEUoREZHX09TUl9FWElUKQogY2xhc3MgR2VuZXJh
bGl6ZWRSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgR2VuZXJhbGl6ZWRSZWdpc3RlcigpIHsgfQpA
QCAtODAzLDYgKzExMzcsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rU3BlY3VsYXRpb25DaGVj
a3MoCiAgICAgQVNTRVJUKCEoY2hlY2tzSXRlciAhPSBjaGVja3NFbmQpKTsKICAgICBBU1NFUlQo
IShlbnRyaWVzSXRlciAhPSBlbnRyaWVzRW5kKSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19P
U1JfRVhJVCkKIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKIHsKQEAgLTg0NCwx
MiArMTE3OSwxNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgLy8gdG8g
YWxsb3cgaXQgdG8gY2hlY2sgd2hpY2ggbm9kZXMgaW4gdGhlIGdyYXBoIG1heSBiYWlsIG91dCwg
YW5kIG1heSBuZWVkIHRvIHJlZW50ZXIgdGhlCiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBhdGgu
CiAgICAgaWYgKGNvbXBpbGVkU3BlY3VsYXRpdmUpIHsKKyNpZiBFTkFCTEUoREZHX09TUl9FWElU
KQorICAgICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOworI2Vsc2UKICAgICAgICAgU3Bl
Y3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcihzcGVjdWxhdGl2ZS5zcGVj
dWxhdGlvbkNoZWNrcygpKTsKICAgICAgICAgTm9uU3BlY3VsYXRpdmVKSVQgbm9uU3BlY3VsYXRp
dmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxlKGNoZWNrSXRlcmF0b3Ip
OwogCiAgICAgICAgIC8vIExpbmsgdGhlIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBw
YXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBub24tc3BlY3Vs
YXRpdmUgb25lLgogICAgICAgICBsaW5rU3BlY3VsYXRpb25DaGVja3Moc3BlY3VsYXRpdmUsIG5v
blNwZWN1bGF0aXZlKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIGNvbXBp
bGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cgYXdheSB0aGUg
Y29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKQEAgLTg1OCw4ICsx
MTk3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAgICAgbV9tZXRo
b2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRpdmVQYXRoQmVn
aW4pOwogCisjaWYgRU5BQkxFKERGR19PU1JfRVhJVCkKKyAgICAgICAgU3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcjsKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0aW9u
Q2hlY2tWZWN0b3Igbm9DaGVja3M7CiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJh
dG9yIGNoZWNrSXRlcmF0b3Iobm9DaGVja3MpOworI2VuZGlmCiAgICAgICAgIE5vblNwZWN1bGF0
aXZlSklUIG5vblNwZWN1bGF0aXZlKCp0aGlzKTsKICAgICAgICAgbm9uU3BlY3VsYXRpdmUuY29t
cGlsZShjaGVja0l0ZXJhdG9yKTsKICAgICB9CkBAIC05MDcsNyArMTI1MCw3IEBAIHZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChtX2NhbGxz
W2ldLm1faGFuZGxlc0V4Y2VwdGlvbnMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXR1
cm5BZGRyZXNzT2Zmc2V0ID0gbGlua0J1ZmZlci5yZXR1cm5BZGRyZXNzT2Zmc2V0KG1fY2FsbHNb
aV0ubV9jYWxsKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25JbmZvID0gbV9j
YWxsc1tpXS5tX2V4Y2VwdGlvbkluZm87CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhjZXB0
aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAg
ICAgICAgICAgICBtX2NvZGVCbG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENh
bGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2Vw
dGlvbkluZm8pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDYgKzUzLDcgQEAgY2xhc3MgU3BlY3VsYXRpb25SZWNvdmVyeTsKIAogc3RydWN0IEVudHJ5
TG9jYXRpb247CiBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKK3N0cnVjdCBPU1JFeGl0OwogCiAj
aWZuZGVmIE5ERUJVRwogdHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCkoRXhl
Y1N0YXRlKiwgdm9pZCopOwpAQCAtODIsMjEgKzgzLDIxIEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsK
ICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHdpdGggYW4gZXhjZXB0aW9u
IGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIEV4
Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBl
eGNlcHRpb25DaGVjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICA6IG1fY2FsbChj
YWxsKQogICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNlcHRp
b25DaGVjayhleGNlcHRpb25DaGVjaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0
aW9uSW5mbykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBt
X2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVj
dG9yIGZvciBhIGNhbGwgdGhhdCBtYXkgY2F1c2UgZXhjZXB0aW9ucywgYnV0IHdoaWNoIGFyZSBo
YW5kbGVkCiAgICAgLy8gdGhyb3VnaCBzb21lIG1lY2hhbmlzbSBvdGhlciB0aGFuIHRoZSBpbi1s
aW5lIGV4Y2VwdGlvbiBoYW5kbGVyLgotICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5m
bykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRy
IGZ1bmN0aW9uLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwp
CiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX2V4Y2VwdGlvbklu
Zm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAg
ICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KQEAgLTEwNCw3
ICsxMDUsNyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
bV9jYWxsOwogICAgIEZ1bmN0aW9uUHRyIG1fZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgbV9leGNlcHRpb25DaGVjazsKLSAgICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5m
bzsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFuZGxlc0V4Y2Vw
dGlvbnM7CiB9OwogCkBAIC0xOTIsOSArMTkzLDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8v
IE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4K
LSAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQor
ICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICB7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgRnVuY3Rpb25QdHIo
KSwgZXhjZXB0aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNh
bGwsIEZ1bmN0aW9uUHRyKCksIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBj
YWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KQEAgLTIw
NSwyMCArMjA2LDIwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBm
cm9tIEpJVCBjb2RlLCB3aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICBDYWxsIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNpZ25l
ZCBleGNlcHRpb25JbmZvKQorICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhj
b25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7
CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2Vw
dGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2Jh
bERhdGEoKS0+ZXhjZXB0aW9uKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQo
ZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsK
KyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9u
LCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25D
YWxsOwogICAgIH0KICAgICAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3
aXRoIGEgZmFzdCBleGNlcHRpb24gY2hlY2sgdGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVl
IGlzIHplcm8uCi0gICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25z
dCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgQ2Fs
bCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVu
Y3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rp
b25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVz
dFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbHMuYXBw
ZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4
Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlv
bkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICBy
ZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKQEAgLTMxMSw5ICszMTIsOSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fbWV0aG9kR2V0cy5hcHBlbmQoTWV0aG9kR2V0UmVjb3JkKHNsb3dDYWxs
LCBzdHJ1Y3RUb0NvbXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0RnVu
Y3Rpb24pKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwg
Q2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1
bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGws
IENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKLSAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChK
U0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4
Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFz
dENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGNvZGVPcmlnaW4pKTsKICAg
ICB9CiAKIHByaXZhdGU6CkBAIC0zMjYsOCArMzI3LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBm
aWxsTnVtZXJpY1RvRG91YmxlKE5vZGVJbmRleCwgRlBSUmVnLCBHUFJSZWcgdGVtcG9yYXJ5KTsK
ICAgICB2b2lkIGZpbGxJbnQzMlRvSW50ZWdlcihOb2RlSW5kZXgsIEdQUlJlZyk7CiAgICAgdm9p
ZCBmaWxsVG9KUyhOb2RlSW5kZXgsIEdQUlJlZyk7CisgICAgCisjaWYgRU5BQkxFKERGR19PU1Jf
RVhJVCkKKyAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYsIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVj
b2RlZENvZGVNYXApOworICAgIHZvaWQgbGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJik7Cisj
ZWxzZQogICAgIHZvaWQganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29uc3Qg
U3BlY3VsYXRpb25DaGVjayYsIGNvbnN0IEVudHJ5TG9jYXRpb24mLCBTcGVjdWxhdGlvblJlY292
ZXJ5KiwgTm9kZVRvUmVnaXN0ZXJNYXAmIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIE5vZGVUb1Jl
Z2lzdGVyTWFwJiBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwKTsKICAgICB2b2lkIGxpbmtTcGVjdWxh
dGlvbkNoZWNrcyhTcGVjdWxhdGl2ZUpJVCYsIE5vblNwZWN1bGF0aXZlSklUJik7CisjZW5kaWYK
IAogICAgIC8vIFRoZSBnbG9iYWxEYXRhLCB1c2VkIHRvIGFjY2VzcyBjb25zdGFudHMgc3VjaCBh
cyB0aGUgdlB0cnMuCiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CkBAIC0zODYsMTIg
KzM5MywxMiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAgc3RydWN0IEpTQ2FsbFJlY29y
ZCB7Ci0gICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBE
YXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2VwdGlv
bkluZm8pCisgICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxs
LCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKICAgICAgICAgICAgIDogbV9mYXN0Q2FsbChmYXN0Q2FsbCkKICAgICAgICAgICAg
ICwgbV9zbG93Q2FsbChzbG93Q2FsbCkKICAgICAgICAgICAgICwgbV90YXJnZXRUb0NoZWNrKHRh
cmdldFRvQ2hlY2spCiAgICAgICAgICAgICAsIG1faXNDYWxsKGlzQ2FsbCkKLSAgICAgICAgICAg
ICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICAgICAsIG1fY29kZU9y
aWdpbihjb2RlT3JpZ2luKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zOTks
NyArNDA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FsbCBtX3Nsb3dDYWxsOwogICAgICAgICBE
YXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOwogICAgICAgICBib29sIG1faXNDYWxsOwotICAg
ICAgICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkluZm87CisgICAgICAgIENvZGVPcmlnaW4gbV9jb2Rl
T3JpZ2luOwogICAgIH07CiAKICAgICBWZWN0b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1f
cHJvcGVydHlBY2Nlc3NlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiA5NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZp
bmUgREZHTm9kZV9oCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwogLy8gRW1pdCB2YXJp
b3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcg
dGhlIGRhdGFmbG93IGdyYXBocy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAK
Ky8vIEVtaXQgbG9nZ2luZyBmb3IgT1NSIGV4aXQgdmFsdWUgcmVjb3ZlcmllcyBhdCBldmVyeSBu
b2RlLCBub3QganVzdCBub2RlcyB0aGF0CisvLyBhY3R1YWxseSBoYXMgc3BlY3VsYXRpb24gY2hl
Y2tzLgorI2RlZmluZSBFTkFCTEVfREZHX1ZFUkJPU0VfVkFMVUVfUkVDT1ZFUklFUyAwCiAvLyBF
bmFibGUgZ2VuZXJhdGlvbiBvZiBkeW5hbWljIGNoZWNrcyBpbnRvIHRoZSBpbnN0cnVjdGlvbiBz
dHJlYW0uCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogI2RlZmluZSBFTkFCTEVfREZHX0pJVF9BU1NF
UlQgMQpAQCAtNTAsNiArNTUsOCBAQAogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRSAw
CiAvLyBEaXNhYmxlIHRoZSBTcGVjdWxhdGl2ZUpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQ
bGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRV9TUEVDVUxBVElWRSAw
CisvLyBEaXNhYmxlIHRoZSBub24tc3BlY3VsYXRpdmUgSklUIGFuZCB1c2UgT1NSIGluc3RlYWQu
CisjZGVmaW5lIEVOQUJMRV9ERkdfT1NSX0VYSVQgRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTgog
Ly8gR2VuZXJhdGUgc3RhdHMgb24gaG93IHN1Y2Nlc3NmdWwgd2Ugd2VyZSBpbiBtYWtpbmcgdXNl
IG9mIHRoZSBERkcgaml0LCBhbmQgcmVtYWluaW5nIG9uIHRoZSBob3QgcGF0aC4KICNkZWZpbmUg
RU5BQkxFX0RGR19TVUNDRVNTX1NUQVRTIDAKIApAQCAtNzIsOSArNzksMzIgQEAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPQogdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5k
ZXg7CiBzdGF0aWMgY29uc3QgTm9kZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOwogCi0vLyBJbmZv
cm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhjZXB0aW9uIHRvIGFueSBoYW5kbGVy
L3NvdXJjZSBpbmZvcm1hdGlvbi4KKy8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJv
bSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9uLAorLy8gYW5k
IHRvIGltcGxlbWVudCBPU1IuCiAvLyAoUHJlc2VudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNv
ZGUgaW5kZXgpLgotdHlwZWRlZiB1aW50MzJfdCBFeGNlcHRpb25JbmZvOworY2xhc3MgQ29kZU9y
aWdpbiB7CitwdWJsaWM6CisgICAgQ29kZU9yaWdpbigpCisgICAgICAgIDogbV9ieXRlY29kZUlu
ZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGV4cGxpY2l0IENvZGVPcmlnaW4odWludDMyX3QgYnl0ZWNvZGVJbmRleCkKKyAg
ICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggIT0gc3Rk
OjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgCisgICAgdWludDMyX3Qg
Ynl0ZWNvZGVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7Cisg
ICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXg7Cit9OwogCiAvLyBFbnRyaWVzIGluIHRoZSBOb2Rl
VHlwZSBlbnVtIChiZWxvdykgYXJlIGNvbXBvc2VkIG9mIGFuIGlkLCBhIHJlc3VsdCB0eXBlIChw
b3NzaWJseSBub25lKQogLy8gYW5kIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGl2ZSBmbGFncyAo
bXVzdCBnZW5lcmF0ZSwgaXMgY29uc3RhbnQsIGV0YykuCkBAIC0zNTcsOSArMzg3LDkgQEAgc3Ry
dWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CiAKICAgICAvLyBDb25z
dHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgot
ICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgTm9kZUlu
ZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAg
ICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29k
ZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICB7CkBAIC0zNzAsOSArNDAwLDkgQEAg
c3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0
byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBv
cCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hp
bGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQz
ID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwg
T3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9
IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAg
ICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdp
bihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFs
UmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGlt
bS5tX3ZhbHVlKQpAQCAtMzg0LDkgKzQxNCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAg
ICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGltbWVk
aWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRp
b25JbmZvLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUp
CisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1t
MSwgT3BJbmZvIGltbTIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3Ap
Ci0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVP
cmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5m
byhpbW0xLm1fdmFsdWUpCkBAIC0zOTksOSArNDI5LDkgQEAgc3RydWN0IE5vZGUgewogICAgIH0K
ICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2Yg
Y2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgotICAgIE5vZGUoVmFyQXJnVGFnLCBO
b2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tMSwgT3BJ
bmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQorICAg
IE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcElu
Zm8gaW1tMSwgT3BJbmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNo
aWxkcmVuKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0
aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92
aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNv
dW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtNjQzLDYgKzY3Mywx
NCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3Mp
KTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKICAgICB9CisgICAgCisg
ICAgLy8gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZG8gYSBmYXN0IGNoZWNrIG9uIHRo
ZSBmaXJzdCBjaGlsZAorICAgIC8vIGJlZm9yZSBhbHNvIGRvaW5nIGEgY2hlY2sgb24gdGhlIG9w
Y29kZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFuZAorICAgIC8vIGF2b2lkIGl0IGlmIHBvc3NpYmxl
LgorICAgIE5vZGVJbmRleCBjaGlsZDFVbmNoZWNrZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICB9CiAKICAgICBOb2RlSW5kZXggY2hpbGQyKCkK
ICAgICB7CkBAIC02NzEsNyArNzA5LDcgQEAgc3RydWN0IE5vZGUgewogICAgIC8vIFRoaXMgZW51
bSB2YWx1ZSBkZXNjcmliZXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUuCiAgICAgTm9kZVR5cGUgb3A7
CiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAo
Y3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgotICAgIEV4Y2VwdGlv
bkluZm8gZXhjZXB0aW9uSW5mbzsKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgLy8g
UmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVuICgwIGZvciBubyBjaGlsZCkuCiAgICAgdW5p
b24gewogICAgICAgICBzdHJ1Y3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQzNCw2ICs0MzQsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0Fy
aXRoT3AoTm9kCiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25D
aGVja0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CisjaWYgRU5B
QkxFKERGR19PU1JfRVhJVCkKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tJdGVyYXRvcik7CisjZWxz
ZQogICAgIC8vIENoZWNrIGZvciBzcGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVzcG9u
ZGluZyBpbnN0cnVjdGlvbiBpbiB0aGUKICAgICAvLyBzcGVjdWxhdGl2ZSBwYXRoLiBEbyBub3Qg
Y2hlY2sgZm9yIE5vZGVJbmRleCAwLCBzaW5jZSB0aGlzIGlzIGNoZWNrZWQKICAgICAvLyBpbiB0
aGUgb3V0ZXJtb3N0IGNvbXBpbGUgbGF5ZXIsIGF0IHRoZSBoZWFkIG9mIHRoZSBub24tc3BlY3Vs
YXRpdmUgcGF0aApAQCAtNDQyLDYgKzQ0NSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoU3BlY3VsYXQKICAgICAvLyBhcyBzcGVjdWxhdGlvbiBjaGVja3MgYXQgdGhpcyBpbmRl
eCkuCiAgICAgaWYgKG1fY29tcGlsZUluZGV4ICYmIGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdElu
ZGV4KG1fY29tcGlsZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsK
KyNlbmRpZgogCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCkBAIC0xMjgzLDggKzEyODcs
MTAgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogdm9pZCBOb25T
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hl
Y2tJdGVyYXRvcikKIHsKICAgICAvLyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGFkZGVk
IGF0IGZ1bmN0aW9uIGVudHJ5IChjaGVja2luZyBhcmd1bWVudCB0eXBlcykuCisjaWYgIUVOQUJM
RShERkdfT1NSX0VYSVQpCiAgICAgaWYgKGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1f
Y29tcGlsZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRp
ZgogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9yIChtX2Jsb2NrID0gMDsg
bV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsK
IH0KIAorI2lmICFFTkFCTEUoREZHX09TUl9FWElUKQogU3BlY3VsYXRpb25DaGVjazo6U3BlY3Vs
YXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGpp
dCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fY2hlY2soY2hlY2spCiAgICAgLCBt
X25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQpAQCAtMTcwLDYgKzE3MSw3MyBAQCBTcGVj
dWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKE1hY3JvCiAgICAgICAgICAgICBtX2Zwcklu
Zm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXggPSBOb05vZGU7CiAgICAgfQogfQorI2VuZGlmCisK
KyNpZm5kZWYgTkRFQlVHCit2b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QK
K3sKKyAgICBmcHJpbnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworfQorCit2b2lk
IFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAodGVj
aG5pcXVlKCkpIHsKKyAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnBy
aW50ZihvdXQsICItIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5HUFI6CisgICAgICAg
IGZwcmludGYob3V0LCAiJSUlcyIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBmcHJpbnRmKG91
dCwgImludDMyKCUlJXMpIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSW5GUFI6CisgICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQUklu
Zm86OmRlYnVnTmFtZShmcHIoKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpc3BsYWNl
ZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIiolZCIsIHZpcnR1YWxSZWdp
c3RlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgZnBy
aW50ZihvdXQsICJbJXNdIiwgY29uc3RhbnQoKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBEb250S25vdzoKKyAgICAgICAgZnByaW50ZihvdXQsICIhIik7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGZwcmludGYob3V0LCAiPyVkIiwgdGVj
aG5pcXVlKCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJM
RShERkdfT1NSX0VYSVQpCitPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNo
ZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorICAgIDog
bV9jaGVjayhjaGVjaykKKyAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCisg
ICAgLCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAgLCBt
X3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9h
cmd1bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXpl
KCkpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sKKyAg
ICBBU1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+
OjptYXgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9h
cmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVu
dF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1l
bnRdKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3Zhcmlh
Ymxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9
IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0p
OworfQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29u
c3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3Vt
ZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5k
dW1wKG91dCk7CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZh
cmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisg
ICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXS5kdW1wKG91dCk7Cit9CisjZW5kaWYKKyNlbmRp
ZgogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5v
ZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewpAQCAtNjUwLDYgKzcxOCw0MiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBTZXRMb2NhbDogeworICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBh
cyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCisgICAgICAgIC8vIGFzIGEgc3Bl
Y3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UK
KyAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdv
IGluIHRoZSB2aXJ0dWFsCisgICAgICAgIC8vIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIGNvbXBp
bGVNb3ZIaW50KG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgZmFyIGFzIE9TUiBpcyBj
b25jZXJuZWQsIHdlJ3JlIG9uIHRoZSBieXRlY29kZSBpbmRleCBjb3JyZXNwb25kaW5nCisgICAg
ICAgIC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkgImV4
ZWN1dGVkIiB0aGUKKyAgICAgICAgLy8gU2V0TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERGRyBO
b2RlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lCisgICAgICAgIC8vIGJ5dGVjb2RlIGlu
ZGV4IGFzIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9T
UiA9PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgTm9kZSYgbmV4
dE5vZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4KzFdOworICAgICAgICAKKyAgICAg
ICAgLy8gVGhpcyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmIHdlIGV2ZXIgZW1pdCBtdWx0aXBsZSBT
ZXRMb2NhbCdzIGZvcgorICAgICAgICAvLyBhIHNpbmdsZSBieXRlY29kZSBpbnN0cnVjdGlvbi4g
VGhhdCdzIHVubGlrZWx5IHRvIGhhcHBlbi4gQnV0IGlmCisgICAgICAgIC8vIGl0IGRvZXMsIHRo
ZSBzb2x1dGlvbiBpcyB0byB0byBoYXZlIHRoaXMgcGVyZm9ybSBhIHNlYXJjaCB1bnRpbAorICAg
ICAgICAvLyBpdCBmaW5kcyBhIE5vZGUgd2l0aCBhIGRpZmZlcmVudCBieXRlY29kZSBpbmRleCBm
cm9tIHRoZSBvbmUgd2UndmUKKyAgICAgICAgLy8gZ290LCBhbmQgdG8gYWJzdHJhY3RseSBleGVj
dXRlIHRoZSBTZXRMb2NhbCdzIGFsb25nIHRoZSB3YXkuIE9yLAorICAgICAgICAvLyBiZXR0ZXIg
eWV0LCBoYW5kbGUgYWxsIG9mIHRoZSBTZXRMb2NhbCdzIGF0IG9uY2U6IGFic3RyYWN0IGludGVy
cHJldAorICAgICAgICAvLyBhbGwgb2YgdGhlbSwgdGhlbiBlbWl0IGNvZGUgZm9yIGFsbCBvZiB0
aGVtLCB3aXRoIE9TUiBleGl0aW5nIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IG5vbi1TZXRMb2Nh
bCBpbnN0cnVjdGlvbi4gTm90ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciB3aGVuCisgICAgICAgIC8v
IGJvdGggdGhpcyBTZXRMb2NhbCBhbmQgdGhlIG5leHQgb3AgaGF2ZSBhIGJ5dGVjb2RlIGluZGV4
IG9mIDA7IHRoaXMKKyAgICAgICAgLy8gb2NjdXJzIGZvciBTZXRMb2NhbCdzIGdlbmVyYXRlZCBh
dCB0aGUgdG9wIG9mIHRoZSBjb2RlIGJsb2NrIHRvCisgICAgICAgIC8vIGluaXRpYWxpemUgbG9j
YWxzIHRvIHVuZGVmaW5lZC4gSWRlYWxseSwgd2UnZCBoYXZlIGEgd2F5IG9mIG1hcmtpbmcKKyAg
ICAgICAgLy8gaW4gdGhlIENvZGVPcmlnaW4gdGhhdCBhIFNldExvY2FsIGlzIHN5bnRoZXRpYy4g
VGhpcyB3aWxsIG1ha2UgdGhlCisgICAgICAgIC8vIGFzc2VydGlvbiBtb3JlIHNlbnNpYmxlLWxv
b2tpbmcuIFdlIHNob3VsZCB0aGVuIGFsc28gYXNzZXJ0IHRoYXQKKyAgICAgICAgLy8gc3ludGhl
dGljIFNldExvY2FsJ3MgZG9uJ3QgaGF2ZSBzcGVjdWxhdGlvbiBjaGVja3MsIHNpbmNlIHRoZXkK
KyAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgZHJvcHBpbmcgdmFsdWVzIHRoYXQgd2Ugc3RhdGlj
YWxseSBrbm93IHdlIGFyZQorICAgICAgICAvLyBhbGxvd2VkIHRvIGRyb3AgaW50byB0aGUgdmFy
aWFibGVzLiBERkdQcm9wYWdhdG9yIHdpbGwgZ3VhcmFudGVlCisgICAgICAgIC8vIHRoaXMsIHNp
bmNlIGl0IHNob3VsZCBoYXZlIGF0IGxlYXN0IGFuIGFwcHJveGltYXRpb24gKGlmIG5vdAorICAg
ICAgICAvLyBleGFjdCBrbm93bGVkZ2UpIG9mIHRoZSB0eXBlIG9mIHRoZSBTZXRMb2NhbCdzIGNo
aWxkIG5vZGUsIGFuZAorICAgICAgICAvLyBzaG91bGQgbWVyZ2UgdGhhdCBpbmZvcm1hdGlvbiBp
bnRvIHRoZSBsb2NhbCB0aGF0IGlzIGJlaW5nIHNldC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNv
ZGVJbmRleEZvck9TUiAhPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKQorICAg
ICAgICAgICAgICAgfHwgKCFtX2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgIW5leHROb2RlLmNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9
IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAKICAgICAgICAg
UHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9u
KG5vZGUubG9jYWwoKSk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRU
eXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7CkBAIC02NzAsNiArNzc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdw
cigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhl
IHZhbHVlIG9mCisgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3Rl
cnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICB2YWx1
ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTM2OSwxMSArMTQ3NywxOSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICB9Ci0KKyAgICAKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5l
cmF0ZSgpKQogICAgICAgICB1c2UobV9jb21waWxlSW5kZXgpOwogfQogCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQoreworICAgIEFTU0VSVChub2RlLm9w
ID09IFNldExvY2FsKTsKKyAgICAKKyAgICBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKG5vZGUuY2hp
bGQxKCksIG5vZGUubG9jYWwoKSk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9jYWwo
KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykK
IHsKICAgICBBU1NFUlQobV9jb21waWxlT2theSk7CkBAIC0xMzgyLDM1ICsxNDk4LDc0IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBFTkFCTEUoREZHX0pJ
VF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYK
KyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytp
KQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJs
ZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpOworICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAogICAgIGZvciAoOyBtX2NvbXBpbGVJ
bmRleCA8IGJsb2NrLmVuZDsgKyttX2NvbXBpbGVJbmRleCkgewogICAgICAgICBOb2RlJiBub2Rl
ID0gbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91
bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAorICAgICAgICBt
X2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOwor
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworI2lmIEVOQUJMRShERkdfREVC
VUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQg
c2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChpbnQp
bV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCksIG1faml0LmRl
YnVnT2Zmc2V0KCkpOworI2VuZGlmCisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRMb2Nh
bCkKKyAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0IEpJ
VCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0
KCkpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0
aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBp
bGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVidWdPZmZz
ZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9OT0RFKQot
ICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgICAgICAgICBtX2ppdC5icmVha3BvaW50
KCk7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBjb21waWxl
KG5vZGUpOwotICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpIHsKKyAgICAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIGNvbXBpbGUobm9kZSk7CisgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpIHsKICNpZiBFTkFCTEUoRFlOQU1JQ19URVJNSU5BVEVfU1BFQ1VM
QVRJT04pCi0gICAgICAgICAgICBtX2NvbXBpbGVPa2F5ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1f
Y29tcGlsZUluZGV4ID0gYmxvY2suZW5kOwotICAgICAgICAgICAgY2xlYXJHZW5lcmF0aW9uSW5m
bygpOworICAgICAgICAgICAgICAgIG1fY29tcGlsZU9rYXkgPSB0cnVlOworICAgICAgICAgICAg
ICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2suZW5kOworICAgICAgICAgICAgICAgIGNsZWFyR2Vu
ZXJhdGlvbkluZm8oKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAg
ICAgICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKSB7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOwor
ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXMsIHZyIyVkIiwgZGF0YUZvcm1h
dFRvU3RyaW5nKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSksIChpbnQpbm9kZS52aXJ0dWFsUmVnaXN0
ZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRh
Rm9ybWF0Tm9uZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1h
dCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiwgJXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5mcHIoKSkpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIiwgJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5ncHIoKSkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwogI2Vu
ZGlmCi0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxF
KERGR19WRVJCT1NFX1ZBTFVFX1JFQ09WRVJJRVMpCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQg
PSAtbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OyBvcGVyYW5kIDwgLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgKytvcGVyYW5k
KQorICAgICAgICAgICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChzdGRl
cnIpOworICAgICAgICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgOiAiKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAwOyBvcGVyYW5kIDwgKGludCltX3ZhcmlhYmxl
cy5zaXplKCk7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9y
KG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyNlbmRpZgorICAgICAgCiAjaWYgRU5BQkxFKERGR19E
RUJVR19WRVJCT1NFKQotICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiLT4gJXNcbiIsIGRhdGFGb3JtYXRUb1N0cmluZyhtX2dlbmVyYXRp
b25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldLnJlZ2lzdGVyRm9ybWF0KCkpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIlxuIik7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiB9CiAKQEAgLTE0MTksNiArMTU3NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7
CisgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IG1faml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnM7ICsraSkgewogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gKFZpcnR1YWxSZWdpc3RlcikobV9qaXQuY29k
ZUJsb2NrKCktPnRoaXNSZWdpc3RlcigpICsgaSk7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbih2aXJ0dWFsUmVnaXN0ZXIp
OwpAQCAtMTQ1NCw3ICsxNjEwLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAg
ICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9j
ayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spIHsKICAgICAgICAg
Y29tcGlsZSgqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXSk7Ci0jaWYgIUVOQUJMRShE
WU5BTUlDX09QVElNSVpBVElPTikKKyNpZiAhRU5BQkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQRUNV
TEFUSU9OKQogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAjZW5kaWYKQEAgLTE0NjMsNiArMTYxOSwxMTkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1ZhbHVlUmVjb3ZlcnkgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1
ZVNvdXJjZSkKK3sKKyAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpCisgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKKworICAgIGlmIChtX2pp
dC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJuIFZh
bHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNl
Lm5vZGVJbmRleCgpKSk7CisgICAgCisgICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgp
W3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVy
YXRlKCkpIHsKKyAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9k
eSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKKyAgICAgICAgLy8gZXZlci4g
U2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgor
ICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7Cisg
ICAgfQorICAgIAorICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbklu
Zm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgIGlmICghaW5mb1B0ci0+YWxpdmUo
KSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgewor
ICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQg
d291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KKyAgICAgICAgLy8gVGhlcmUgYXJlIGZv
dXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFsdWVUb051bWJlcjog
SWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIg
bm9kZQorICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1c2Vz
IG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBhCisgICAgICAgIC8vICAgIFZhbHVl
VG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZhbHVl
VG9OdW1iZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdpc2Us
IGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisgICAg
ICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYgdGhlcmUg
aXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRvTnVtYmVy
LCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAorICAgICAg
ICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0
ZWQgdG8gbnVtYmVyIHdoaWxlCisgICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZlIGNvbnZl
cnRlZCB0byBJbnQzMi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElm
IHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgor
ICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQg
d2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4g
YSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgcmV2ZXJz
ZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQg
aXRzCisgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5z
IHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgLy8gICAgdGhlIG51bWJl
ciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAKKyAg
ICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVQdHIt
Pm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBo
KClbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tu
b2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxp
dmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAg
ICAgZm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5k
KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2RlOwor
ICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOworICAgICAg
ICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVh
bFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7
CisgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChpbmZvLm5v
ZGVJbmRleCgpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV07
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3Vy
Y2Uubm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb051
bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5mby5ub2Rl
SW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0g
aW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdWludDMyVG9O
dW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgaWYgKHZhbHVlVG9OdW1i
ZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1
ZVRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAh
PSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJ
bmRleDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2Rl
KQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9k
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9k
ZSkgeworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhU
b1VzZV07CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQ
dHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+
YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7CisgICAg
ICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoaW5m
b1B0ci0+YWxpdmUoKSk7CisKKyAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBE
YXRhRm9ybWF0Tm9uZSkgeworICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6Omlu
RlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BS
KGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKKyAgICB9CisgICAg
aWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk0OTc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw2ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fc3JjOwogfTsKIAor
I2lmICFFTkFCTEUoREZHX09TUl9FWElUKQogLy8gPT09IFNwZWN1bGF0aW9uQ2hlY2sgPT09CiAv
LwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0IGZyb20gdGhlIHNwZWN1bGF0
aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTYgQEAgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2sgewog
ICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwog
fTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxh
dGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFFTkFCTEUoREZHX09TUl9FWElUKQogCitjbGFz
cyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAgICA6IG1f
bm9kZUluZGV4KE5vTm9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVl
U291cmNlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUlu
ZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXggIT0gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBO
b2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRF
QlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAKK3ByaXZh
dGU6CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworfTsKKyAgICAKKy8vIERlc2NyaWJlcyBo
b3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0ZXIgYXQgYSBnaXZl
bgorLy8gY29kZSBwb2ludC4KK2VudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CisgICAgLy8g
SXQncyBhbHJlYWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGF0IHRoZSByaWdodCBsb2NhdGlvbi4K
KyAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBpbiBhIHJlZ2lzdGVyLgor
ICAgIEluR1BSLAorICAgIFVuYm94ZWRJbnQzMkluR1BSLAorICAgIEluRlBSLAorICAgIC8vIEl0
J3MgaW4gdGhlIHJlZ2lzdGVyIGZpbGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKyAg
ICBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGEgY29uc3RhbnQuCisgICAg
Q29uc3RhbnQsCisgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcmVjb3ZlciBpdC4KKyAgICBEb250
S25vdworfTsKKworY2xhc3MgVmFsdWVSZWNvdmVyeSB7CitwdWJsaWM6CisgICAgVmFsdWVSZWNv
dmVyeSgpCisgICAgICAgIDogbV90ZWNobmlxdWUoRG9udEtub3cpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZpbGUoKQorICAg
IHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2hu
aXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5HUFIoR1BSUmVnIGdwciwgRGF0
YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0g
RGF0YUZvcm1hdE5vbmUpOworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAg
aWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAgICByZXN1bHQu
bV90ZWNobmlxdWUgPSBVbmJveGVkSW50MzJJbkdQUjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5HUFI7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5n
cHIgPSBncHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBWYWx1ZVJlY292ZXJ5IGluRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBWYWx1ZVJl
Y292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5GUFI7CisgICAg
ICAgIHJlc3VsdC5tX3NvdXJjZS5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGRpc3BsYWNlZEluUmVnaXN0ZXJG
aWxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNv
dmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlOworICAgICAgICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJlZyA9IHZpcnR1YWxS
ZWc7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1
ZVJlY292ZXJ5IGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJl
Y292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQ29uc3RhbnQ7Cisg
ICAgICAgIHJlc3VsdC5tX3NvdXJjZS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnlU
ZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWU7IH0KKyAgICAK
KyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1
ZSA9PSBJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVkSW50MzJJbkdQUik7CisgICAgICAg
IHJldHVybiBtX3NvdXJjZS5ncHI7CisgICAgfQorICAgIAorICAgIEZQUlJlZyBmcHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluRlBSKTsKKyAgICAgICAg
cmV0dXJuIG1fc291cmNlLmZwcjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUg
PT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpOworICAgICAgICByZXR1cm4gbV9zb3VyY2Uudmly
dHVhbFJlZzsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fc291cmNlLmNvbnN0YW50KTsKKyAgICB9CisgICAgCisjaWZu
ZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpIGNvbnN0OworI2VuZGlmCisgICAg
Citwcml2YXRlOgorICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgbV90ZWNobmlxdWU7CisgICAg
dW5pb24geworICAgICAgICBHUFJSZWcgZ3ByOworICAgICAgICBGUFJSZWcgZnByOworICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29u
c3RhbnQ7CisgICAgfSBtX3NvdXJjZTsKK307CisKKyNpZiBFTkFCTEUoREZHX09TUl9FWElUKQor
Ly8gPT09IE9TUkV4aXQgPT09CisvLworLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0
byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIGJ5CisvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNv
ZGUuCitzdHJ1Y3QgT1NSRXhpdCB7CisgICAgT1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCwg
U3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gMCk7CisgICAgCisgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9jaGVjazsKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7
CisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIAorICAgIHVuc2lnbmVkIG1fcmVj
b3ZlcnlJbmRleDsKKyAgICAKKyAgICAvLyBDb252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcgb3Zl
ciBWYWx1ZVJlY292ZXJpZXMgd2hpbGUgYmVpbmcKKyAgICAvLyBnZW5lcmljIG92ZXIgYXJndW1l
bnQgdmVyc3VzIHZhcmlhYmxlLgorICAgIGludCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25zdCB7
IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCkgKyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICBj
b25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KGludCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVz
W2luZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpXTsKKyAgICB9CisgICAgYm9vbCBpc0FyZ3VtZW50
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUo
KTsgfQorICAgIGJvb2wgaXNWYXJpYWJsZShpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0Fy
Z3VtZW50KGluZGV4KTsgfQorICAgIGludCBhcmd1bWVudEZvckluZGV4KGludCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50IHZhcmlhYmxl
Rm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0g
bV9hcmd1bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZvckluZGV4KGludCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMu
c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpIC0g
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICByZXR1cm4gaW5kZXgg
LSBtX2FyZ3VtZW50cy5zaXplKCk7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2
b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAorICAgIFZlY3RvcjxWYWx1
ZVJlY292ZXJ5LCAwPiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4g
bV92YXJpYWJsZXM7CisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7Cit9OwordHlwZWRlZiBTZWdt
ZW50ZWRWZWN0b3I8T1NSRXhpdCwgMTY+IE9TUkV4aXRWZWN0b3I7CisjZW5kaWYgLy8gRU5BQkxF
KERGR19PU1JfRVhJVCkKIAogLy8gPT09IFNwZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTEwNSwy
MSArMjk1LDI1IEBAIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2sKIC8v
IG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFzc2VydGVkKSB0aHJvdWdoIHRoZSBkYXRhZmxvdy4K
IGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVibGljIEpJVENvZGVHZW5lcmF0b3IgewogICAgIGZy
aWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKKyAgICBmcmllbmQgc3RydWN0IE9TUkV4aXQ7
CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAgICAg
OiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5KHRy
dWUpCi0gICAgewotICAgIH0KKyAgICBTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYpOwogCiAg
ICAgYm9vbCBjb21waWxlKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWlsLW91
dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCByZWNv
dmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKICAgICBTcGVjdWxh
dGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlvbkNoZWNrcygpCiAgICAgewogICAgICAgICByZXR1
cm4gbV9zcGVjdWxhdGlvbkNoZWNrczsKICAgICB9CisjZWxzZQorICAgIE9TUkV4aXRWZWN0b3Im
IG9zckV4aXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29zckV4aXRzOworICAgIH0KKyNl
bmRpZgogICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHNwZWN1bGF0aW9uUmVjb3Zlcnkoc2l6ZV90
IGluZGV4KQogICAgIHsKICAgICAgICAgLy8gU3BlY3VsYXRpb25DaGVjazo6bV9yZWNvdmVyeUlu
ZGV4IGlzIG9mZnNldCBieSAxLApAQCAtMTM5LDYgKzMzMyw3IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CiAgICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUm
KTsKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoQmFz
aWNCbG9jayYpOwogCiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKQEAgLTIwMyw3ICsz
OTgsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgICAgIHJldHVybjsKKyNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKICAgICAgICAgbV9z
cGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlz
KSk7CisjZWxzZQorICAgICAgICBtX29zckV4aXRzLmFwcGVuZChPU1JFeGl0KGp1bXBUb0ZhaWws
IHRoaXMpKTsKKyNlbmRpZgogICAgIH0KICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3
aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJl
Y292ZXJ5KQpAQCAtMjExLDcgKzQxMCwxMSBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fc3BlY3VsYXRpb25SZWNv
dmVyeUxpc3QuYXBwZW5kKHJlY292ZXJ5KTsKKyNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKICAg
ICAgICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9G
YWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vsc2UKKyAg
ICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1
bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQ2Fs
bGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwg
ZmFpbC4KQEAgLTIzNCwxOCArNDM3LDY1IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxib29s
IHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwg
RGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKLQorICAgIAogICAgIC8vIEl0IGlzIHBvc3NpYmxl
LCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRpb24gaW4g
d2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVjdWxhdGlvbiB3
aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwogICAgIC8vIHdpbGwgbWFrZSBj
b25mbGljdGluZyBzcGVjdWxhdGlvbnMgYWJvdXQgdGhlIHNhbWUgb3BlcmFuZCkuIEluIHN1Y2gg
Y2FzZXMgdGhpcwogICAgIC8vIGZsYWcgaXMgY2xlYXJlZCwgaW5kaWNhdGluZyBubyBmdXJ0aGVy
IGNvZGUgZ2VuZXJhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4KICAgICBib29sIG1fY29tcGlsZU9r
YXk7CisjaWYgIUVOQUJMRShERkdfT1NSX0VYSVQpCiAgICAgLy8gVGhpcyB2ZWN0b3IgdHJhY2tz
IGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBub24tc3BlY3VsYXRp
dmUgb25lLgogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3IgbV9zcGVjdWxhdGlvbkNoZWNrczsK
KyNlbHNlCisgICAgLy8gVGhpcyB2ZWN0b3IgdHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVj
dWxhdGl2ZSBwYXRoIHRvIHRoZSBvbGQgSklULgorICAgIE9TUkV4aXRWZWN0b3IgbV9vc3JFeGl0
czsKKyNlbmRpZgogICAgIC8vIFNvbWUgYmFpbC1vdXRzIG5lZWQgdG8gcmVjb3JkIGFkZGl0aW9u
YWwgaW5mb3JtYXRpb24gcmVjb3JkaW5nIHNwZWNpZmljIHJlY292ZXJ5CiAgICAgLy8gdG8gYmUg
cGVyZm9ybWVkIChmb3IgZXhhbXBsZSwgb24gZGV0ZWN0ZWQgb3ZlcmZsb3cgZnJvbSBhbiBhZGQs
IHdlIG1heSBuZWVkIHRvCiAgICAgLy8gcmV2ZXJzZSB0aGUgYWRkaXRpb24gaWYgYW4gb3BlcmFu
ZCBpcyBiZWluZyBvdmVyd3JpdHRlbikuCiAgICAgVmVjdG9yPFNwZWN1bGF0aW9uUmVjb3Zlcnks
IDE2PiBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0OworICAgIAorICAgIC8vIFRyYWNraW5nIGZv
ciB3aGljaCBub2RlcyBhcmUgY3VycmVudGx5IGhvbGRpbmcgdGhlIHZhbHVlcyBvZiBhcmd1bWVu
dHMgYW5kIGJ5dGVjb2RlCisgICAgLy8gb3BlcmFuZC1pbmRleGVkIHZhcmlhYmxlcy4KKworICAg
IFZhbHVlU291cmNlIHZhbHVlU291cmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChOb2RlSW5kZXggbm9k
ZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNl
Rm9yT3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGVJbmRleCk7CisgICAgfQorICAg
IAorICAgIC8vIENhbGwgdGhpcyB3aXRoIGNhcmUsIHNpbmNlIGl0IGJvdGggcmV0dXJucyBhIHJl
ZmVyZW5jZSBpbnRvIGFuIGFycmF5CisgICAgLy8gYW5kIHBvdGVudGlhbGx5IHJlc2l6ZXMgdGhl
IGFycmF5LiBTbyBpdCB3b3VsZCBub3QgYmUgcmlnaHQgdG8gY2FsbCB0aGlzCisgICAgLy8gdHdp
Y2UgYW5kIHRoZW4gcGVyZm9ybSBvcGVyYW5kcyBvbiBib3RoIHJlZmVyZW5jZXMsIHNpbmNlIHRo
ZSBvbmUgZnJvbQorICAgIC8vIHRoZSBmaXJzdCBjYWxsIG1heSBubyBsb25nZXIgYmUgdmFsaWQu
CisgICAgVmFsdWVTb3VyY2UmIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChpbnQgb3Bl
cmFuZCkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewor
ICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSAr
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBt
X2FyZ3VtZW50c1thcmd1bWVudF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgo
dW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgICAgICAgICBtX3Zh
cmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1f
dmFyaWFibGVzW29wZXJhbmRdOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8VmFsdWVTb3VyY2Us
IDA+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV92YXJpYWJsZXM7
CisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CisgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4
Rm9yT1NSOworICAgIAorICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Io
Y29uc3QgVmFsdWVTb3VyY2UmKTsKKworICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVj
b3ZlcnlGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZVZhbHVl
UmVjb3ZlcnlGb3IodmFsdWVTb3VyY2VGb3JPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICB9CiB9Owog
CiAKQEAgLTQ2NSwxMSArNzE1LDE3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZh
bGlkOwogfTsKIAotCiAvLyA9PT0gU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgPT09CiAv
LwogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgSklUIHRvIGNo
ZWNrIHdoaWNoCiAvLyBub2RlcyByZXF1aXJlIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBzcGVjdWxh
dGl2ZSBwYXRoLgorI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCisvLyBUaGlzIGJlY29tZXMgYSBz
dHViIGlmIE9TUiBpcyBlbmFibGVkLgorY2xhc3MgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0
b3IgeworcHVibGljOgorICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKCkgeyB9Cit9
OworI2Vsc2UKIGNsYXNzIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIHsKIHB1YmxpYzoK
ICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvcihTcGVjdWxhdGlvbkNoZWNrVmVjdG9y
JiBzcGVjdWxhdGlvbkNoZWNrcykKQEAgLTQ5NSw3ICs3NTEsMTcgQEAgcHJpdmF0ZToKICAgICBT
cGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRvciBtX2l0ZXI7CiAgICAgU3BlY3VsYXRpb25D
aGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9lbmQ7CiB9OworI2VuZGlmCiAKK2lubGluZSBTcGVjdWxh
dGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKKyAgICA6IEpJVENvZGVH
ZW5lcmF0b3Ioaml0LCB0cnVlKQorICAgICwgbV9jb21waWxlT2theSh0cnVlKQorICAgICwgbV9h
cmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnMpCisgICAgLCBtX3Zhcmlh
YmxlcyhqaXQuY29kZUJsb2NrKCktPm1fbnVtVmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQo
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAsIG1fYnl0ZWNvZGVJbmRleEZv
ck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCit7Cit9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
b21wYWN0SklUQ29kZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ29tcGFjdEpJVENvZGVNYXBfaAorI2RlZmluZSBDb21wYWN0SklUQ29kZU1h
cF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxs
b2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisv
LyBHaXZlcyB5b3UgYSBjb21wcmVzc2VkIG1hcCBiZXR3ZWVuIGJldHdlZW4gYnl0ZWNvZGUgaW5k
aWNlcyBhbmQgbWFjaGluZSBjb2RlCisvLyBlbnRyeSBwb2ludHMuIFRoZSBjb21wcmVzc2lvbiBz
aW1wbHkgdHJpZXMgdG8gdXNlIGVpdGhlciAxLCAyLCBvciA0IGJ5dGVzIGZvcgorLy8gYW55IGdp
dmVuIG9mZnNldC4gVGhlIGxhcmdlc3Qgb2Zmc2V0IHRoYXQgY2FuIGJlIHN0b3JlZCBpcyAyXjMw
LgorCisvLyBFeGFtcGxlIHVzZToKKy8vCisvLyBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2RlciBl
bmNvZGVyKG1hcCk7CisvLyBlbmNvZGVyLmFwcGVuZChhLCBiKTsKKy8vIGVuY29kZXIuYXBwZW5k
KGMsIGQpOyAvLyBwcmVjb25kaXRpb25zOiBjID49IGEsIGQgPj0gYgorLy8gT3duUHRyPENvbXBh
Y3RKSVRDb2RlTWFwPiBtYXAgPSBlbmNvZGVyLmZpbmlzaCgpOworLy8KKy8vIEF0IHNvbWUgbGF0
ZXIgdGltZToKKy8vCisvLyBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBkZWNvZGVk
OworLy8gbWFwLT5kZWNvZGUoZGVjb2RlZCk7CisKK3N0cnVjdCBCeXRlY29kZUFuZE1hY2hpbmVP
ZmZzZXQgeworICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCgpIHsgfQorICAgIAorICAgIEJ5
dGVjb2RlQW5kTWFjaGluZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBt
YWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRl
eCkKKyAgICAgICAgLCBtX21hY2hpbmVDb2RlT2Zmc2V0KG1hY2hpbmVDb2RlT2Zmc2V0KQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVuc2ln
bmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgCisgICAgc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBnZXRCeXRlY29kZUluZGV4KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZykKKyAg
ICB7CisgICAgICAgIHJldHVybiBtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXg7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0TWFjaGluZUNvZGVPZmZzZXQoQnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1hcHBp
bmctPm1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgfQorfTsKKworY2xhc3MgQ29tcGFjdEpJVENv
ZGVNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIH5Db21w
YWN0SklUQ29kZU1hcCgpCisgICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisgICAgICAgICAg
ICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVjb2RlKFZlY3Rv
cjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiByZXN1bHQpIGNvbnN0CisgICAgeworICAgICAg
ICB1bnNpZ25lZCBwcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAgICAgICB1bnNpZ25lZCBw
cmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5y
ZXNpemUobV9udW1iZXJPZkVudHJpZXMpOworICAgICAgICB1bnNpZ25lZCBqID0gMDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZFbnRyaWVzOyArK2kpIHsKKyAg
ICAgICAgICAgIHByZXZpb3VzQnl0ZWNvZGVJbmRleCArPSBkZWNvZGVOdW1iZXIoaik7CisgICAg
ICAgICAgICBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ICs9IGRlY29kZU51bWJlcihqKTsKKyAg
ICAgICAgICAgIHJlc3VsdFtpXS5tX2J5dGVjb2RlSW5kZXggPSBwcmV2aW91c0J5dGVjb2RlSW5k
ZXg7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9tYWNoaW5lQ29kZU9mZnNldCA9IHByZXZpb3Vz
TWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGogPT0gbV9zaXpl
KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENvbXBhY3RKSVRDb2RlTWFwKHVpbnQ4X3Qq
IGJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzKQorICAgICAg
ICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgICwgbV9z
aXplKHNpemUpCisjZW5kaWYKKyAgICAgICAgLCBtX251bWJlck9mRW50cmllcyhudW1iZXJPZkVu
dHJpZXMpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgfQorICAgIAor
ICAgIHVpbnQ4X3QgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9idWZmZXJbaW5kZXhdOworICAg
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBkZWNvZGVOdW1iZXIodW5zaWduZWQmIGluZGV4KSBjb25z
dAorICAgIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBhdChpbmRleCsrKTsKKyAgICAg
ICAgaWYgKCEoaGVhZFZhbHVlICYgMTI4KSkKKyAgICAgICAgICAgIHJldHVybiBoZWFkVmFsdWU7
CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDY0KSkKKyAgICAgICAgICAgIHJldHVybiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1ZSAmIH4xMjgpIDw8IDgpIHwgYXQoaW5kZXgrKyk7
CisgICAgICAgIHVuc2lnbmVkIHNlY29uZCA9IGF0KGluZGV4KyspOworICAgICAgICB1bnNpZ25l
ZCB0aGlyZCAgPSBhdChpbmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgZm91cnRoID0gYXQoaW5k
ZXgrKyk7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1ZSAm
IH4oMTI4ICsgNjQpKSA8PCAyNCkgfCAoc2Vjb25kIDw8IDE2KSB8ICh0aGlyZCA8PCA4KSB8IGZv
dXJ0aDsKKyAgICB9CisgICAgCisgICAgdWludDhfdCogbV9idWZmZXI7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyNlbmRpZgorICAgIHVuc2lnbmVkIG1fbnVt
YmVyT2ZFbnRyaWVzOworICAgIAorcHVibGljOgorICAgIGNsYXNzIEVuY29kZXIgeworICAgICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbmNvZGVyKTsKKyAgICBwdWJsaWM6CisgICAgICAgIEVu
Y29kZXIoKTsKKyAgICAgICAgfkVuY29kZXIoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgZW5z
dXJlQ2FwYWNpdHlGb3IodW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzVG9BZGQpOworICAgICAgICB2
b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9m
ZnNldCk7CisgICAgICAgIFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IGZpbmlzaCgpOwor
ICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFwcGVuZEJ5dGUodWludDhfdCB2
YWx1ZSk7CisgICAgICAgIHZvaWQgZW5jb2RlTnVtYmVyKHVpbnQzMl90IHZhbHVlKTsKKyAgICAK
KyAgICAgICAgdWludDhfdCogbV9idWZmZXI7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAg
ICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICAgICAgdW5zaWduZWQgbV9udW1iZXJPZkVu
dHJpZXM7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRl
eDsKKyAgICAgICAgdW5zaWduZWQgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAgIH07
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEVuY29kZXI7Cit9OworCitpbmxpbmUgQ29t
cGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIoKQorICAgIDogbV9idWZmZXIoMCkKKyAg
ICAsIG1fc2l6ZSgwKQorICAgICwgbV9jYXBhY2l0eSgwKQorICAgICwgbV9udW1iZXJPZkVudHJp
ZXMoMCkKKyAgICAsIG1fcHJldmlvdXNCeXRlY29kZUluZGV4KDApCisgICAgLCBtX3ByZXZpb3Vz
TWFjaGluZUNvZGVPZmZzZXQoMCkKK3sKK30KKworaW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpF
bmNvZGVyOjp+RW5jb2RlcigpCit7CisgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICBmYXN0RnJl
ZShtX2J1ZmZlcik7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6
OkVuY29kZXI6OmFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5l
Q29kZU9mZnNldCkKK3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA+PSBtX3ByZXZpb3VzQnl0
ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1hY2hpbmVDb2RlT2Zmc2V0ID49IG1fcHJldmlvdXNN
YWNoaW5lQ29kZU9mZnNldCk7CisgICAgZW5zdXJlQ2FwYWNpdHlGb3IoMSk7CisgICAgZW5jb2Rl
TnVtYmVyKGJ5dGVjb2RlSW5kZXggLSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCk7CisgICAgZW5j
b2RlTnVtYmVyKG1hY2hpbmVDb2RlT2Zmc2V0IC0gbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0
KTsKKyAgICBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAgbV9w
cmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgbV9udW1i
ZXJPZkVudHJpZXMrKzsKK30KKworaW5saW5lIFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+
IENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpmaW5pc2goKQoreworICAgIG1fY2FwYWNpdHkg
PSBtX3NpemU7CisgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxs
b2MobV9idWZmZXIsIG1fY2FwYWNpdHkpKTsKKyAgICBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+
IHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBDb21wYWN0SklUQ29kZU1hcChtX2J1ZmZlciwgbV9zaXpl
LCBtX251bWJlck9mRW50cmllcykpOworICAgIG1fYnVmZmVyID0gMDsKKyAgICBtX3NpemUgPSAw
OworICAgIG1fY2FwYWNpdHkgPSAwOworICAgIG1fbnVtYmVyT2ZFbnRyaWVzID0gMDsKKyAgICBt
X3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IDA7CisgICAgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zm
c2V0ID0gMDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKyAgICAgICAgCitpbmxp
bmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kQnl0ZSh1aW50OF90IHZh
bHVlKQoreworICAgIEFTU0VSVChtX3NpemUgKyAxIDw9IG1fY2FwYWNpdHkpOworICAgIG1fYnVm
ZmVyW21fc2l6ZSsrXSA9IHZhbHVlOworfQorICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENv
ZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBBU1NF
UlQobV9zaXplICsgNCA8PSBtX2NhcGFjaXR5KTsKKyAgICBBU1NFUlQodmFsdWUgPCAoMSA8PCAz
MCkpOworICAgIGlmICh2YWx1ZSA8PSAxMjcpIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUg
PSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1
ZSAmIDEyOCkpOworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSk7CisgICAgfSBlbHNlIGlm
ICh2YWx1ZSA8PSAxNjM4MykgeworICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAx
MjgpKTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgNjQpKTsKKyAgICAgICAgYXBwZW5k
Qnl0ZShoZWFkVmFsdWUgfCAxMjgpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHZhbHVlKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUg
PSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiAyNCk7CisgICAgICAgIEFTU0VSVCghKGhl
YWRWYWx1ZSAmIDEyOCkpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiA2NCkpOworICAg
ICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSB8IDEyOCB8IDY0KTsKKyAgICAgICAgYXBwZW5kQnl0
ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiAxNikpOworICAgICAgICBhcHBlbmRCeXRl
KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShz
dGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KK30KKworaW5saW5lIHZvaWQgQ29t
cGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJl
ck9mRW50cmllc1RvQWRkKQoreworICAgIHVuc2lnbmVkIGNhcGFjaXR5TmVlZGVkID0gbV9zaXpl
ICsgbnVtYmVyT2ZFbnRyaWVzVG9BZGQgKiAyICogNDsKKyAgICBpZiAoY2FwYWNpdHlOZWVkZWQg
PiBtX2NhcGFjaXR5KSB7CisgICAgICAgIG1fY2FwYWNpdHkgPSBjYXBhY2l0eU5lZWRlZCAqIDI7
CisgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1f
YnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIENvbXBhY3RKSVRDb2RlTWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDExIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICBtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0XSA9
IGxhYmVsKCk7CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICBpZiAo
bV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBwZW5k
KG1fYnl0ZWNvZGVPZmZzZXQsIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVs
KCkpKTsKKyNlbmRpZgorCiAgICAgICAgIHN3aXRjaCAobV9pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
SUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKICAgICAgICAgREVGSU5FX0JJTkFS
WV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAgICBERUZJTkVfQklOQVJZX09QKG9wX2luKQpAQCAt
MzczLDcgKzM3OCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICNlbmRp
ZgogfQogCi0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkKIHsKICAgICB1bnNp
Z25lZCBqbXBUYWJsZUNvdW50ID0gbV9qbXBUYWJsZS5zaXplKCk7CkBAIC01MDIsNiArNTA2LDgg
QEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogewogI2lmIEVOQUJM
RShUSUVSRURfQ09NUElMQVRJT04pCiAgICAgbV9jYW5CZU9wdGltaXplZCA9IG1fY29kZUJsb2Nr
LT5jYW5Db21waWxlV2l0aERGRygpOworICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAg
ICBtX3N0YXJ0T2ZDb2RlID0gbGFiZWwoKTsKICNlbmRpZgogICAgIAogICAgIC8vIEp1c3QgYWRk
IGEgbGl0dGxlIGJpdCBvZiByYW5kb21uZXNzIHRvIHRoZSBjb2RlZ2VuCkBAIC02NDIsNiArNjQ4
LDExIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICAgICAg
aW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8o
bV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvW2ldLnByb3BlcnR5QWNjZXNzSW5kZXgpLmNhbGxS
ZXR1cm5Mb2NhdGlvbjsKICAgICB9CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQor
ICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29k
ZU1hcChtX2ppdENvZGVNYXBFbmNvZGVyLmZpbmlzaCgpKTsKKyNlbmRpZgorCiAgICAgaWYgKG1f
Y29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBmdW5jdGlvbkVudHJ5QXJp
dHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZihhcml0eUNoZWNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VU
KGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVk
LCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQs
IHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIK
ICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAj
aW5jbHVkZSAiT3Bjb2RlLmgiCkBAIC0xMDU0LDYgKzEwNTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgCiAjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKICAgICAgICAgYm9vbCBt
X2NhbkJlT3B0aW1pemVkOworICAgICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOworICAgICAgICBD
b21wYWN0SklUQ29kZU1hcDo6RW5jb2RlciBtX2ppdENvZGVNYXBFbmNvZGVyOwogI2VuZGlmCiAg
ICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTkxLDYgKzE5MSw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXAKICAgICAsIHBhcnNlcihuZXcgUGFyc2VyKQogICAgICwgaW50ZXJwcmV0ZXIoMCkKICAgICAs
IGhlYXAodGhpcywgaGVhcFNpemUpCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAg
ICAsIHNpemVPZkxhc3RPU1JTY3JhdGNoQnVmZmVyKDApCisjZW5kaWYKICAgICAsIGR5bmFtaWNH
bG9iYWxPYmplY3QoMCkKICAgICAsIGNhY2hlZFVUQ09mZnNldChzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46OnF1aWV0X05hTigpKQogICAgICwgbWF4UmVlbnRyeURlcHRoKHRocmVhZFN0YWNr
VHlwZSA9PSBUaHJlYWRTdGFja1R5cGVTbWFsbCA/IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRo
IDogTWF4TGFyZ2VUaHJlYWRSZWVudHJ5RGVwdGgpCkBAIC0zNTYsNiArMzU5LDExIEBAIEpTR2xv
YmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAg
IGRlbGV0ZSBtX3J0VHJhY2VMaXN0OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJ
TEFUSU9OKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvc3JTY3JhdGNoQnVmZmVycy5z
aXplKCk7ICsraSkKKyAgICAgICAgZmFzdEZyZWUob3NyU2NyYXRjaEJ1ZmZlcnNbaV0pOworI2Vu
ZGlmCiB9CiAKIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNv
bnRleHRHcm91cChUaHJlYWRTdGFja1R5cGUgdHlwZSwgSGVhcFNpemUgaGVhcFNpemUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNp
b24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDYgKzIzNCwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgICAgIGludDY0X3QgZGVidWdEYXRhQnVmZmVyWzY0XTsKICNlbmRp
ZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIFZlY3Rvcjx2b2lkKj4g
b3NyU2NyYXRjaEJ1ZmZlcnM7CisgICAgICAgIHNpemVfdCBzaXplT2ZMYXN0T1NSU2NyYXRjaEJ1
ZmZlcjsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIG9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKHNp
emVfdCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaXplID4gc2l6
ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFn
YWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhvbG9neSBieSBlbnN1cmluZworICAgICAgICAg
ICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdlIGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5p
bmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29t
ZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXpl
KSAqIDQuCisgICAgICAgICAgICAgICAgc2l6ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIgPSBzaXpl
ICogMjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvc3JTY3JhdGNoQnVmZmVy
cy5hcHBlbmQoZmFzdE1hbGxvYyhzaXplT2ZMYXN0T1NSU2NyYXRjaEJ1ZmZlcikpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3NyU2NyYXRjaEJ1ZmZl
cnMubGFzdCgpOworICAgICAgICB9CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hNYXA8
T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NE
YXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJl
dmlzaW9uIDk0OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBKU09iamVjdCogSlNWYWx1ZTo6
c3ludGhlc2l6ZVByb3RvdHlwZShFCiAjaWZuZGVmIE5ERUJVRwogY2hhciogSlNWYWx1ZTo6ZGVz
Y3JpcHRpb24oKQogewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDMyOworICAgIHN0
YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDY0OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9u
W3NpemVdOwogCiAgICAgaWYgKCEqdGhpcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107079</attachid>
            <date>2011-09-12 13:52:37 -0700</date>
            <delta_ts>2011-09-12 14:41:58 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>osr_patch_12.diff</filename>
            <type>text/plain</type>
            <size>92655</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMTIgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tp
YS5jb20+CiAKICAgICAgICAgW1F0XSBCdWlsZCBmYWlscyBhZnRlciByOTQ5MjAgd2l0aCBzdHJp
Y3QgY29tcGlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5
NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAJCTBGRDND
ODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZH
RHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07CiAJCTBGRDgyRTIx
MTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8q
IERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAv
KiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtNzk3LDYgKzc5OCw3IEBACiAJCTBG
RDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFFMTQxNzJDMkYwMDE3
OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRjE0MTcyQzJGMDAxNzlD
OTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFj
dEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdEpJ
VENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4
MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjky
MTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTc2LDYgKzE1NzgsNyBAQAogCQkxNDI5RDky
QzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENv
ZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0
YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTIzOTQsNiArMjM5Nyw3IEBACiAJ
CQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJ
VENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2RTBFMTZGNUNE
MDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjNCMkYxM0ZD
NjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
OTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQ29kZUJsb2NrX2gKICNkZWZp
bmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAjaW5jbHVk
ZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAi
SklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29kZU1hcChQYXNzT3duUHRyPENvbXBh
Y3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ppdENv
ZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAgICAgIENvbXBhY3RKSVRDb2RlTWFw
KiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0Q29kZU1h
cC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCiAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNz
KQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAg
U2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgorI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2Rl
TWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CiAjZW5kaWYKQEAgLTY2
Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1ib2xUYWJsZSogbV9z
eW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOyAv
LyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAgICAgIE93blB0cjxDb2RlQmxvY2s+
IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnQxKS5h
c0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnQx
KTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4KTsKKyAgICB9CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBpdCB0byB0aGUgZ3Jh
cGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdlbmVyYXRlJyB0aGVu
IHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3VyZSBnZW5lcmF0aW9u
LgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2RlSW5kZXggY2hpbGQx
ID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0g
Tm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRl
eCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgbV9jdXJy
ZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBl
bmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dy
YXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3LDcgQEAgcHJpdmF0ZToKICAgICBO
b2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8sIE5vZGVJbmRleCBj
aGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9k
ZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBt
X2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBt
X2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkK
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM5Miw3ICszOTYsNyBA
QCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8g
aW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICB7CiAgICAg
ICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0g
ICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4LCBpbmZvMSwgaW5m
bzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwg
Y2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQwMiw3ICs0MDYsNyBAQCBwcml2YXRl
OgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3As
IE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJl
c3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5h
cHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbzEsIGluZm8y
LCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNzZWRWYXJBcmdzLCBt
X251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpW
YXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFy
QXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzID0gMDsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lv
biA5NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsMTUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90aGVyIH07
CiBpbmxpbmUgYm9vbCBjb21waWxlKENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBFeGVjU3RhdGUq
IGV4ZWMsIEV4ZWNTdGF0ZSogY2FsbGVlQXJnc0V4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBK
SVRDb2RlJiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlD
aGVjaykKIHsKKyAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgc3dpdGNoIChjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpIHsKKyAgICAgICAgY2Fz
ZSAxMTE3NjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgR3JhcGggZGZnKGNvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzLCBjb2RlQmxvY2stPm1fbnVtVmFycyk7CiAgICAgaWYgKCFw
YXJzZShkZmcsIGdsb2JhbERhdGEsIGNvZGVCbG9jaykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bWJlck9mUmVnaXN0ZXJzID0gOTsK
IAogICAgIC8vIFRoZXNlIHJlZ2lzdGVycyBtYXRjaCB0aGUgb2xkIEpJVC4KKyAgICBzdGF0aWMg
Y29uc3QgR1BSUmVnIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAg
ICAgc3RhdGljIGNvbnN0IEdQUlJlZyB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IFg4NlJlZ2lzdGVy
czo6cjEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBYODZS
ZWdpc3RlcnM6OnIxMzsKICAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHRhZ1R5cGVOdW1iZXJSZWdp
c3RlciA9IFg4NlJlZ2lzdGVyczo6cjE0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3
NCwxMiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgdS5mcHIgPSBmcHI7CiAgICAgfQogCi0j
aWZuZGVmIE5ERUJVRwogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
dXNlQ291bnQ7CiAgICAgfQotI2VuZGlmCiAKIHByaXZhdGU6CiAgICAgLy8gVGhlIGluZGV4IG9m
IHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVy
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk0
OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDEzICs1MiwxMiBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCiAgICAgdW5zaWduZWQgcmVm
Q291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAgaWYgKCFyZWZDb3VudCkgewotICAgICAgICBw
cmludGYoIiUgNGQ6XHRza2lwcGVkICVzXG4iLCAoaW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYm9vbCBza2lwcGVkID0gIXJlZkNvdW50Owog
ICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9kZS5tdXN0R2VuZXJhdGUoKTsKLSAgICBpZiAobXVz
dEdlbmVyYXRlKQorICAgIGlmIChtdXN0R2VuZXJhdGUpIHsKKyAgICAgICAgQVNTRVJUKHJlZkNv
dW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKKyAgICB9CiAKICAgICAvLyBFeGFtcGxlL2V4cGxh
bmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0CiAgICAgLy8KQEAgLTc3LDggKzc2LDggQEAg
dm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgIC8vICAgICAgICAg
JCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVt
ZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4g
Ym90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXgg
aW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3Nl
ZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAg
ICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2Jq
ZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBw
cmludGYoIiUgNGQ6XHQ8JWMldToiLCAoaW50KW5vZGVJbmRleCwgbXVzdEdlbmVyYXRlID8gJyEn
IDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkpCisgICAgcHJpbnRm
KCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5kZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAi
IDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Cisg
ICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNraXBwZWQpCiAgICAgICAgIHByaW50ZigiJXUi
LCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAgICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5l
cmF0b3IuY3BwCShyZXZpc2lvbiA5NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMjYsMTcgKzExMjYs
MTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0
LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2soKS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIAogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAgICBtX2pp
dC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNl
cHRpb25JbmZvKTsKKyAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgp
W21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
ICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIobV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dD
YWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5j
dGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAg
SklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNl
cHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4
XS5jb2RlT3JpZ2luKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKG51bUFyZ3MpLCBHUFJJbmZvOjpy
ZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMyKG1faml0LmNvZGVCbG9jaygpLT5tX251bUNh
bGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3Rlcik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZh
bHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7Cisg
ICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwg
bV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAgICAgCiAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xMTQ0LDcgKzExNDQsNyBAQCB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAgICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwg
dGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNl
cHRpb25JbmZvKTsKKyAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJn
ZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmln
aW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OnNwZWN1bGF0aW9uQ2hlY2soTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NDk3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg+CiAj
aW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CiAjaW5jbHVkZSA8ZGZnL0RGR0pJVENvbXBpbGVyLmg+
CisjaW5jbHVkZSA8ZGZnL0RGR05vZGUuaD4KICNpbmNsdWRlIDxkZmcvREZHT3BlcmF0aW9ucy5o
PgogI2luY2x1ZGUgPGRmZy9ERkdSZWdpc3RlckJhbmsuaD4KIApAQCAtOTA3LDcgKzkwOCw3IEBA
IHByb3RlY3RlZDoKIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1faml0LmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24sIG1faml0Lmdy
YXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlvbkluZm8pOworICAgICAgICByZXR1cm4gbV9q
aXQuYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVtt
X2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAgICAgfQogCiAgICAgdm9pZCBhZGRCcmFuY2go
Y29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAko
cmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCwzNDAgQEAgdm9pZCBKSVRDb21w
aWxlcjo6ZmlsbFRvSlMoTm9kZUluZGV4IG5vZAogICAgIGxvYWRQdHIoYWRkcmVzc0Zvcihub2Rl
LnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKIH0KIAorI2lmIEVOQUJMRShERkdfT1NSX0VYSVQp
Cit2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3VsYXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQm
IGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJlY292ZXJ5LCBWZWN0b3I8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApCit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0
dWZmLgorICAgIGV4aXQubV9jaGVjay5saW5rKHRoaXMpOworCisjaWYgRU5BQkxFKERGR19ERUJV
R19WRVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkIChi
YyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludClleGl0Lm1fbm9kZUluZGV4LCBleGl0
Lm1fYnl0ZWNvZGVJbmRleCwgZGVidWdPZmZzZXQoKSk7CisgICAgZXhpdC5kdW1wKHN0ZGVycik7
CisjZW5kaWYKKyNpZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJF
KQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgorICAgIAorI2lmIEVOQUJMRShERkdfVkVSQk9T
RV9TUEVDVUxBVElPTl9GQUlMVVJFKQorICAgIFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyog
ZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbzsKKyAgICBkZWJ1Z0lu
Zm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOworICAgIGRlYnVnSW5mby0+ZGVidWdPZmZzZXQg
PSBkZWJ1Z09mZnNldCgpOworICAgIAorICAgIGRlYnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50
U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8pOworI2VuZGlmCisgICAgCisgICAgLy8gMikg
UGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4gVGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3
aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUg
dmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBoYXMgYWxyZWFkeSBtYWRlLgorICAgIAorICAg
IEdQUlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZhbGlkR1BSUmVnOworICAgIAorICAgIGlmIChyZWNv
dmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAgIHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVj
b3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBvclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworICAgICAgICAgICAgYWxyZWFkeUJveGVkID0g
cmVjb3ZlcnktPmRlc3QoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2s6CisgICAgICAgICAgICB4b3JQdHIoVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRl
c3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyAzKSBGaWd1
cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xvdHMgd2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9y
IGV2ZXJ5IEdQUi9GUFIKKyAgICAvLyAgICB3aG9zZSBkZXN0aW5hdGlvbiBpcyBub3cgb2NjdXBp
ZWQgYnkgYSBERkcgdmlydHVhbCByZWdpc3RlciwgYW5kIHdlIG5lZWQKKyAgICAvLyAgICBvbmUg
Zm9yIGV2ZXJ5IGRpc3BsYWNlZCB2aXJ0dWFsIHJlZ2lzdGVyIGlmIHRoZXJlIGFyZSBtb3JlIHRo
YW4KKyAgICAvLyAgICBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVycyBvZiB0aGVtLiBBbHNvIHNl
ZSBpZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50cywKKyAgICAvLyAgICBhbnkgdW5kZWZpbmVkIHNs
b3RzLCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55IHVuYm94ZWQgaW50cy4KKyAgICAgICAgICAgIAor
ICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMoZXhpdC5tX3ZhcmlhYmxl
cy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwb2lzb25lZFZpcnR1YWxS
ZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tp
XSA9IGZhbHNlOworCisgICAgdW5zaWduZWQgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMgPSAwOworICAgIHVuc2lnbmVkIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA9
IDA7CisgICAgCisgICAgLy8gQm9vbGVhbnMgZm9yIGZhc3QgY2hlY2tzLiBXZSBleHBlY3QgdGhh
dCBtb3N0IE9TUiBleGl0cyBkbyBub3QgaGF2ZSB0byByZWJveAorICAgIC8vIEludDMycywgaGF2
ZSBubyBGUFJzLCBhbmQgaGF2ZSBubyBjb25zdGFudHMuIElmIHRoZXJlIGFyZSBjb25zdGFudHMs
IHdlCisgICAgLy8gZXhwZWN0IG1vc3Qgb2YgdGhlbSB0byBiZSBqc1VuZGVmaW5lZCgpOyBpZiB0
aGF0J3MgdHJ1ZSB0aGVuIHdlIGhhbmRsZSB0aGF0CisgICAgLy8gc3BlY2lhbGx5IHRvIG1pbmlt
aXplIGNvZGUgc2l6ZSBhbmQgZXhlY3V0aW9uIHRpbWUuCisgICAgYm9vbCBoYXZlVW5ib3hlZElu
dDMycyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUZQUnMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVD
b25zdGFudHMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVVbmRlZmluZWQgPSBmYWxzZTsKKyAgICAK
KyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMo
KTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4
aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5p
cXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
ICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycysrOworICAgICAgICAgICAgQVNT
RVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPj0gMCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdodCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmly
dHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcKKyAgICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0
ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRoYXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKKyAg
ICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBjYW5ub3QgYmUgc3RvcmVkIHRvIHVudGlsIGFm
dGVyIGRpc3BsYWNlZCB2aXJ0dWFsCisgICAgICAgICAgICAvLyByZWdpc3RlcnMgYXJlIGhhbmRs
ZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwgcmVnaXN0ZXIgY2FyZWZ1bGx5CisgICAgICAg
ICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5zIGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2Ug
ZXhwZWN0IHRoaXMgY2FzZQorICAgICAgICAgICAgLy8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRs
aW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhlIGNhc2VzIGluCisgICAgICAgICAgICAvLyB3
aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVh
bFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVzW3JlY292ZXJ5LnZpcnR1YWxSZWdpc3Rlcigp
XS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAg
ICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgICAgICBjYXNlIEluRlBS
OgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNv
dmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMr
KzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICAgICAgaGF2ZVVu
Ym94ZWRJbnQzMnMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAgIGhhdmVGUFJzID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAg
ICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25z
dGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgRW5jb2RlZEpT
VmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2Jh
bERhdGEoKS0+b3NyU2NyYXRjaEJ1ZmZlckZvclNpemUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAq
IChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZp
cnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVy
T2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSkpKTsKKworICAgIC8vIEZyb20gaGVyZSBvbiwg
dGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHByb2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRp
c3RhbmNlCisgICAgLy8gYmV0d2VlbiB3aGVuIHNvbWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hl
biBpdCBpcyBzdG9yZWQuCisgICAgCisgICAgLy8gNCkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2Yg
aW50ZWdlcnMuCisgICAgCisgICAgaWYgKGhhdmVVbmJveGVkSW50MzJzKSB7CisgICAgICAgIGZv
ciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVl
KCkgPT0gVW5ib3hlZEludDMySW5HUFIgJiYgcmVjb3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVk
KQorICAgICAgICAgICAgICAgIG9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVjb3ZlcnkuZ3ByKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDUpIER1bXAg
YWxsIG5vbi1wb2lzb25lZCBHUFJzLiBGb3IgcG9pc29uZWQgR1BScywgc2F2ZSB0aGVtIGludG8g
dGhlIHNjcmF0Y2ggc3RvcmFnZS4KKyAgICAvLyAgICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2
ZSBhIGZhc3QgY2hhbmdlIChsaWtlIGhhdmVGUFJzKSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0Cisg
ICAgLy8gICAgbW9zdCBPU1IgZmFpbHVyZSBwb2ludHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBH
UFIgdGhhdCBuZWVkcyB0byBiZSBkdW1wZWQuCisgICAgCisgICAgdW5zaWduZWQgc2NyYXRjaElu
ZGV4ID0gMDsKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJl
Y292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgIGludCBvcGVyYW5kID0g
ZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOworICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGNhc2UgVW5ib3hlZElu
dDMySW5HUFI6CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lz
b25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAg
ICAgICAgICAgICAgc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBzY3Jh
dGNoSW5kZXgrKyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmVQdHIo
cmVjb3ZlcnkuZ3ByKCksIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgYWxsIEdQUnMgYXJl
IGF2YWlsYWJsZSBmb3Igc2NyYXRjaCB1c2UuCisgICAgCisgICAgaWYgKGhhdmVGUFJzKSB7Cisg
ICAgICAgIC8vIDYpIEJveCBhbGwgZG91YmxlcyAocmVsaWVzIG9uIHRoZXJlIGJlaW5nIG1vcmUg
R1BScyB0aGFuIEZQUnMpCisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgp
OworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IEluRlBSKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZw
cigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5m
bzo6dG9JbmRleChmcHIpKTsKKyAgICAgICAgICAgIGJveERvdWJsZShmcHIsIGdwcik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDcpIER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUg
cmVnaXN0ZXIgZmlsZSwgb3IgdG8gdGhlIHNjcmF0Y2ggc3RvcmFnZSBpZgorICAgICAgICAvLyAg
ICB0aGUgZGVzdGluYXRpb24gdmlydHVhbCByZWdpc3RlciBpcyBwb2lzb25lZC4KKyAgICAgICAg
CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3Zl
cmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNv
dmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICBpZiAocmVjb3Zl
cnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4
KHJlY292ZXJ5LmZwcigpKSk7CisgICAgICAgICAgICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4
KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4
KV0pCisgICAgICAgICAgICAgICAgc3RvcmVQdHIoZ3ByLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRj
aEluZGV4KyspOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKGdw
ciwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4
KSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0g
bnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMpOworICAgIAorICAgIC8vIDgpIFJlc2h1
ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0
aGF0CisgICAgLy8gICAgdGhlIG51bWJlciBvZiBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMg
aXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCisgICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNp
Y2FsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBpZiAobnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVn
aXN0ZXJzKSB7CisgICAgICAgIGlmIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMg
PD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0
aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UgdGhhdCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1
dAorICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIgZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAK
KyAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNlbWVudEluZGV4ID0gMDsKKyAgICAgICAgICAg
IGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgICAgIGlmIChyZWNvdmVy
eS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292
ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5mbzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJ
bmRleCsrKSk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgZGlzcGxhY2Vt
ZW50SW5kZXggPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4
aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVn
aXN0ZXJGaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVyKGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRy
ZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgdXNlIHRoZSBzaHVmZmxpbmcgYWxnb3JpdGhtIHRoYXQgd2UgdXNlCisgICAgICAg
ICAgICAvLyBmb3Igc3BlY3VsYXRpdmUtPm5vbi1zcGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZl
ciBkaXNjb3ZlciB0aGF0CisgICAgICAgICAgICAvLyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBv
ZiBsaXZlIHZhbHVlcyB0aGF0IGdldCBkaXNwbGFjZWQgYW5kCisgICAgICAgICAgICAvLyBzcGls
bGVkIHJlYWxseSBlbmpveXMgZnJlcXVlbnRseSBmYWlsaW5nIHNwZWN1bGF0aW9uLgorICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEZvciBub3cgdGhpcyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUg
Y29ycmVjdCBidXQgcHJvYmFibHkgbm90CisgICAgICAgICAgICAvLyBzdXBlci4gSW4gcGFydGlj
dWxhciwgaXQgY29ycmVjdGx5IGhhbmRsZXMgY2FzZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAg
ICAgICAgIC8vIHRoZSBkaXNwbGFjZW1lbnRzIGFyZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0
aW5hdGlvbiB2YWx1ZXMsIGxpa2UKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAxIC0+
IDIKKyAgICAgICAgICAgIC8vIDIgLT4gMQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IHNpbXBseSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVh
bCByZWdpc3RlcnMKKyAgICAgICAgICAgIC8vIGZyb20gdGhlaXIgb2xkIChERkcgSklUKSBsb2Nh
dGlvbnMgYW5kIGRyb3BwaW5nIHRoZW0gaW4gYSBzY3JhdGNoCisgICAgICAgICAgICAvLyBsb2Nh
dGlvbiBpbiBtZW1vcnksIGFuZCB0aGVuIHRyYW5zZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBs
b2NhdGlvbgorICAgICAgICAgICAgLy8gdG8gdGhlaXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMu
CisgICAgICAgIAorICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQu
bnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBs
b2FkUHRyKGFkZHJlc3NGb3IocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpy
ZWdUMCk7CisgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hC
dWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7Cisg
ICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292
ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVjb3Zlcnkm
IHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5KGluZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRj
aEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAg
ICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlcill
eGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFs
UmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyA5KSBEdW1wIGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lz
dGVycy4KKyAgICAKKyAgICBzY3JhdGNoSW5kZXggPSAwOworICAgIGlmIChudW1iZXJPZlBvaXNv
bmVkVmlydHVhbFJlZ2lzdGVycykgeworICAgICAgICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIg
PSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KWV4aXQubV92YXJpYWJsZXMuc2l6ZSgpOyArK3Zp
cnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAgaWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnNbdmlydHVhbFJlZ2lzdGVyXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1f
dmFyaWFibGVzW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5
LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEluR1BSOgorICAgICAgICAgICAgY2Fz
ZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAgICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAg
ICAgICAgbG9hZFB0cihzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJl
Z1QwKTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0Zv
cigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdpc3RlcikpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQo
c2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAK
KyAgICAvLyAxMCkgRHVtcCBhbGwgY29uc3RhbnRzLiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBz
aW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBzZWUKKyAgICAvLyAgICAgb2Z0ZW4uCisKKyAgICBp
ZiAoaGF2ZUNvbnN0YW50cykgeworICAgICAgICBpZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAg
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBH
UFJJbmZvOjpyZWdUMCk7CisgICAgICAgIAorICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGlu
ZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
Y29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgp
OworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2huaXF1ZSgpICE9IENvbnN0YW50KQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50
KCkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdU
MCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4
KSkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5LmNvbnN0YW50KCkpKSwgYWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIDExKSBMb2FkIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0
ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0
T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgICAgICBsb2Fk
UHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBH
UFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgCisgICAgLy8gMTIpIEZpeCBjYWxs
IGZyYW1lLgorICAgIAorICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0
SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBzdG9yZVB0cihUcnVzdGVk
SW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJl
Z2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKSk7CisgICAgCisgICAgLy8gMTMpIEp1bXAg
aW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGluZSBKSVQgY29kZS4KKyAgICAKKyAgICBCeXRl
Y29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRl
Y29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdpbigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCks
IGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICBBU1NFUlQobWFwcGluZyk7CisgICAg
QVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7
CisgICAgCisgICAgdm9pZCoganVtcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0
SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAg
CisgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lz
dGVyKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86
OnJlZ1QxKTsKKyAgICBqdW1wKEdQUkluZm86OnJlZ1QxKTsKKworI2lmIEVOQUJMRShERkdfREVC
VUdfVkVSQk9TRSkKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgIC0+ICVwXG4iLCBqdW1wVGFyZ2V0
KTsKKyNlbmRpZgorfQorCit2b2lkIEpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRp
dmVKSVQmIHNwZWN1bGF0aXZlKQoreworICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZz
ZXQ+IGRlY29kZWRDb2RlTWFwOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUo
KSk7CisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkg
PT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJu
YXRpdmUoKS0+aml0Q29kZU1hcCgpKTsKKyAgICBjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+
aml0Q29kZU1hcCgpLT5kZWNvZGUoZGVjb2RlZENvZGVNYXApOworICAgIAorICAgIE9TUkV4aXRW
ZWN0b3I6Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4o
KTsKKyAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRvciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9z
ckV4aXRzKCkuZW5kKCk7CisgICAgCisgICAgd2hpbGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkg
eworICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0ID0gKmV4aXRzSXRlcjsKKyAgICAgICAgZXhp
dFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5
KGV4aXQubV9yZWNvdmVyeUluZGV4KSwgZGVjb2RlZENvZGVNYXApOworICAgICAgICArK2V4aXRz
SXRlcjsKKyAgICB9Cit9CisjZWxzZSAvLyBFTkFCTEUoREZHX09TUl9FWElUKQogY2xhc3MgR2Vu
ZXJhbGl6ZWRSZWdpc3RlciB7CiBwdWJsaWM6CiAgICAgR2VuZXJhbGl6ZWRSZWdpc3RlcigpIHsg
fQpAQCAtODAzLDYgKzExMzcsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rU3BlY3VsYXRpb25D
aGVja3MoCiAgICAgQVNTRVJUKCEoY2hlY2tzSXRlciAhPSBjaGVja3NFbmQpKTsKICAgICBBU1NF
UlQoIShlbnRyaWVzSXRlciAhPSBlbnRyaWVzRW5kKSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKERG
R19PU1JfRVhJVCkKIAogdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUVudHJ5KCkKIHsKQEAgLTg0
NCwxMiArMTE3OSwxNiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlQm9keSgpCiAgICAgLy8g
dG8gYWxsb3cgaXQgdG8gY2hlY2sgd2hpY2ggbm9kZXMgaW4gdGhlIGdyYXBoIG1heSBiYWlsIG91
dCwgYW5kIG1heSBuZWVkIHRvIHJlZW50ZXIgdGhlCiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBh
dGguCiAgICAgaWYgKGNvbXBpbGVkU3BlY3VsYXRpdmUpIHsKKyNpZiBFTkFCTEUoREZHX09TUl9F
WElUKQorICAgICAgICBsaW5rT1NSRXhpdHMoc3BlY3VsYXRpdmUpOworI2Vsc2UKICAgICAgICAg
U3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcihzcGVjdWxhdGl2ZS5z
cGVjdWxhdGlvbkNoZWNrcygpKTsKICAgICAgICAgTm9uU3BlY3VsYXRpdmVKSVQgbm9uU3BlY3Vs
YXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVjdWxhdGl2ZS5jb21waWxlKGNoZWNrSXRlcmF0
b3IpOwogCiAgICAgICAgIC8vIExpbmsgdGhlIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2
ZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBub24tc3Bl
Y3VsYXRpdmUgb25lLgogICAgICAgICBsaW5rU3BlY3VsYXRpb25DaGVja3Moc3BlY3VsYXRpdmUs
IG5vblNwZWN1bGF0aXZlKTsKKyNlbmRpZgogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIElmIGNv
bXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0aXZlSklUIGZhaWxlZCwgdGhyb3cgYXdheSB0
aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAgIG1fY2FsbHMuY2xlYXIoKTsKQEAgLTg1OCw4
ICsxMTk3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVCb2R5KCkKICAgICAgICAgbV9t
ZXRob2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJld2luZFRvTGFiZWwoc3BlY3VsYXRpdmVQYXRo
QmVnaW4pOwogCisjaWYgRU5BQkxFKERGR19PU1JfRVhJVCkKKyAgICAgICAgU3BlY3VsYXRpb25D
aGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRvcjsKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0
aW9uQ2hlY2tWZWN0b3Igbm9DaGVja3M7CiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0
ZXJhdG9yIGNoZWNrSXRlcmF0b3Iobm9DaGVja3MpOworI2VuZGlmCiAgICAgICAgIE5vblNwZWN1
bGF0aXZlSklUIG5vblNwZWN1bGF0aXZlKCp0aGlzKTsKICAgICAgICAgbm9uU3BlY3VsYXRpdmUu
Y29tcGlsZShjaGVja0l0ZXJhdG9yKTsKICAgICB9CkBAIC05MDcsNyArMTI1MCw3IEBAIHZvaWQg
SklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGlmIChtX2Nh
bGxzW2ldLm1faGFuZGxlc0V4Y2VwdGlvbnMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBy
ZXR1cm5BZGRyZXNzT2Zmc2V0ID0gbGlua0J1ZmZlci5yZXR1cm5BZGRyZXNzT2Zmc2V0KG1fY2Fs
bHNbaV0ubV9jYWxsKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBleGNlcHRpb25JbmZvID0g
bV9jYWxsc1tpXS5tX2V4Y2VwdGlvbkluZm87CisgICAgICAgICAgICAgICAgdW5zaWduZWQgZXhj
ZXB0aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAg
ICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5k
KENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4
Y2VwdGlvbkluZm8pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTQ5NzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgU3BlY3VsYXRpb25SZWNvdmVyeTsKIAogc3RydWN0IEVu
dHJ5TG9jYXRpb247CiBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKK3N0cnVjdCBPU1JFeGl0Owog
CiAjaWZuZGVmIE5ERUJVRwogdHlwZWRlZiB2b2lkICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCko
RXhlY1N0YXRlKiwgdm9pZCopOwpAQCAtODIsMjEgKzgzLDIxIEBAIHN0cnVjdCBDYWxsUmVjb3Jk
IHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3RvciBmb3IgYSBjYWxsIHdpdGggYW4gZXhjZXB0
aW9uIGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBG
dW5jdGlvblB0ciBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ss
IEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBleGNlcHRpb25DaGVjaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgICAgICA6IG1fY2Fs
bChjYWxsKQogICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNl
cHRpb25DaGVjayhleGNlcHRpb25DaGVjaykKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhj
ZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAg
LCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KIAogICAgIC8vIENvbnN0
cnVjdG9yIGZvciBhIGNhbGwgdGhhdCBtYXkgY2F1c2UgZXhjZXB0aW9ucywgYnV0IHdoaWNoIGFy
ZSBoYW5kbGVkCiAgICAgLy8gdGhyb3VnaCBzb21lIG1lY2hhbmlzbSBvdGhlciB0aGFuIHRoZSBp
bi1saW5lIGV4Y2VwdGlvbiBoYW5kbGVyLgotICAgIENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6
OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9u
SW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNh
bGwpCiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5jdGlvbikKLSAgICAgICAgLCBtX2V4Y2VwdGlv
bkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikK
ICAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAgICAgewogICAgIH0KQEAgLTEw
NCw3ICsxMDUsNyBAQCBzdHJ1Y3QgQ2FsbFJlY29yZCB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNh
bGwgbV9jYWxsOwogICAgIEZ1bmN0aW9uUHRyIG1fZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbV9leGNlcHRpb25DaGVjazsKLSAgICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9u
SW5mbzsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBib29sIG1faGFuZGxlc0V4
Y2VwdGlvbnM7CiB9OwogCkBAIC0xOTIsOSArMTkzLDkgQEAgcHVibGljOgogICAgIH0KIAogICAg
IC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2lu
Zy4KLSAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBjYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZv
KQorICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikK
ICAgICB7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoY2FsbCwgRnVuY3Rpb25Q
dHIoKSwgZXhjZXB0aW9uSW5mbykpOworICAgICAgICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3Jk
KGNhbGwsIEZ1bmN0aW9uUHRyKCksIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKICAgICAvLyBBZGQg
YSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRob3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KQEAg
LTIwNSwyMCArMjA2LDIwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91
dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGFuIGV4Y2VwdGlvbiBjaGVjay4KLSAgICBDYWxsIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNp
Z25lZCBleGNlcHRpb25JbmZvKQorICAgIENhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAg
ICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4
Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmds
b2JhbERhdGEoKS0+ZXhjZXB0aW9uKSk7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNv
cmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8p
KTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0
aW9uLCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rp
b25DYWxsOwogICAgIH0KICAgICAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2Rl
LCB3aXRoIGEgZmFzdCBleGNlcHRpb24gY2hlY2sgdGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZh
bHVlIGlzIHplcm8uCi0gICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhj
b25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAg
Q2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYg
ZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwgZnVu
Y3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNo
VGVzdFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbHMu
YXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ss
IGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5j
dGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdpbikpOwogICAgICAg
ICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKQEAgLTMxMSw5ICszMTIsOSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fbWV0aG9kR2V0cy5hcHBlbmQoTWV0aG9kR2V0UmVjb3JkKHNsb3dD
YWxsLCBzdHJ1Y3RUb0NvbXBhcmUsIHByb3RvT2JqLCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0
RnVuY3Rpb24pKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2Fs
bCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxs
LCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENh
bGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2Fs
bCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKLSAgICAgICAgbV9qc0NhbGxzLmFwcGVu
ZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGws
IGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQo
ZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGNvZGVPcmlnaW4pKTsK
ICAgICB9CiAKIHByaXZhdGU6CkBAIC0zMjYsOCArMzI3LDE0IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBmaWxsTnVtZXJpY1RvRG91YmxlKE5vZGVJbmRleCwgRlBSUmVnLCBHUFJSZWcgdGVtcG9yYXJ5
KTsKICAgICB2b2lkIGZpbGxJbnQzMlRvSW50ZWdlcihOb2RlSW5kZXgsIEdQUlJlZyk7CiAgICAg
dm9pZCBmaWxsVG9KUyhOb2RlSW5kZXgsIEdQUlJlZyk7CisgICAgCisjaWYgRU5BQkxFKERGR19P
U1JfRVhJVCkKKyAgICB2b2lkIGV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYs
IFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYg
ZGVjb2RlZENvZGVNYXApOworICAgIHZvaWQgbGlua09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJik7
CisjZWxzZQogICAgIHZvaWQganVtcEZyb21TcGVjdWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29u
c3QgU3BlY3VsYXRpb25DaGVjayYsIGNvbnN0IEVudHJ5TG9jYXRpb24mLCBTcGVjdWxhdGlvblJl
Y292ZXJ5KiwgTm9kZVRvUmVnaXN0ZXJNYXAmIGNoZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIE5vZGVU
b1JlZ2lzdGVyTWFwJiBlbnRyeU5vZGVUb1JlZ2lzdGVyTWFwKTsKICAgICB2b2lkIGxpbmtTcGVj
dWxhdGlvbkNoZWNrcyhTcGVjdWxhdGl2ZUpJVCYsIE5vblNwZWN1bGF0aXZlSklUJik7CisjZW5k
aWYKIAogICAgIC8vIFRoZSBnbG9iYWxEYXRhLCB1c2VkIHRvIGFjY2VzcyBjb25zdGFudHMgc3Vj
aCBhcyB0aGUgdlB0cnMuCiAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7CkBAIC0zODYs
MTIgKzM5MywxMiBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAgc3RydWN0IEpTQ2FsbFJl
Y29yZCB7Ci0gICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxs
LCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2Vw
dGlvbkluZm8pCisgICAgICAgIEpTQ2FsbFJlY29yZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dD
YWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgYm9vbCBpc0NhbGwsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKICAgICAgICAgICAgIDogbV9mYXN0Q2FsbChmYXN0Q2FsbCkKICAgICAgICAg
ICAgICwgbV9zbG93Q2FsbChzbG93Q2FsbCkKICAgICAgICAgICAgICwgbV90YXJnZXRUb0NoZWNr
KHRhcmdldFRvQ2hlY2spCiAgICAgICAgICAgICAsIG1faXNDYWxsKGlzQ2FsbCkKLSAgICAgICAg
ICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICAgICAsIG1fY29k
ZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0z
OTksNyArNDA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgQ2FsbCBtX3Nsb3dDYWxsOwogICAgICAg
ICBEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNrOwogICAgICAgICBib29sIG1faXNDYWxsOwot
ICAgICAgICB1bnNpZ25lZCBtX2V4Y2VwdGlvbkluZm87CisgICAgICAgIENvZGVPcmlnaW4gbV9j
b2RlT3JpZ2luOwogICAgIH07CiAKICAgICBWZWN0b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+
IG1fcHJvcGVydHlBY2Nlc3NlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CShyZXZpc2lvbiA5NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwxMyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNk
ZWZpbmUgREZHTm9kZV9oCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwogLy8gRW1pdCB2
YXJpb3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBp
bmcgdGhlIGRhdGFmbG93IGdyYXBocy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NF
IDAKKy8vIEVtaXQgbG9nZ2luZyBmb3IgT1NSIGV4aXQgdmFsdWUgcmVjb3ZlcmllcyBhdCBldmVy
eSBub2RlLCBub3QganVzdCBub2RlcyB0aGF0CisvLyBhY3R1YWxseSBoYXMgc3BlY3VsYXRpb24g
Y2hlY2tzLgorI2RlZmluZSBFTkFCTEVfREZHX1ZFUkJPU0VfVkFMVUVfUkVDT1ZFUklFUyAwCiAv
LyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBkeW5hbWljIGNoZWNrcyBpbnRvIHRoZSBpbnN0cnVjdGlv
biBzdHJlYW0uCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogI2RlZmluZSBFTkFCTEVfREZHX0pJVF9B
U1NFUlQgMQpAQCAtNTAsNiArNTUsOCBAQAogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFM
RSAwCiAvLyBEaXNhYmxlIHRoZSBTcGVjdWxhdGl2ZUpJVCB3aXRob3V0IGhhdmluZyB0byB0b3Vj
aCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRV9TUEVDVUxBVElW
RSAwCisvLyBEaXNhYmxlIHRoZSBub24tc3BlY3VsYXRpdmUgSklUIGFuZCB1c2UgT1NSIGluc3Rl
YWQuCisjZGVmaW5lIEVOQUJMRV9ERkdfT1NSX0VYSVQgRU5BQkxFX1RJRVJFRF9DT01QSUxBVElP
TgogLy8gR2VuZXJhdGUgc3RhdHMgb24gaG93IHN1Y2Nlc3NmdWwgd2Ugd2VyZSBpbiBtYWtpbmcg
dXNlIG9mIHRoZSBERkcgaml0LCBhbmQgcmVtYWluaW5nIG9uIHRoZSBob3QgcGF0aC4KICNkZWZp
bmUgRU5BQkxFX0RGR19TVUNDRVNTX1NUQVRTIDAKIApAQCAtNzIsOSArNzksMzIgQEAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPQogdHlwZWRlZiB1aW50MzJfdCBOb2Rl
SW5kZXg7CiBzdGF0aWMgY29uc3QgTm9kZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOwogCi0vLyBJ
bmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhjZXB0aW9uIHRvIGFueSBoYW5k
bGVyL3NvdXJjZSBpbmZvcm1hdGlvbi4KKy8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sg
ZnJvbSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9uLAorLy8g
YW5kIHRvIGltcGxlbWVudCBPU1IuCiAvLyAoUHJlc2VudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0
ZWNvZGUgaW5kZXgpLgotdHlwZWRlZiB1aW50MzJfdCBFeGNlcHRpb25JbmZvOworY2xhc3MgQ29k
ZU9yaWdpbiB7CitwdWJsaWM6CisgICAgQ29kZU9yaWdpbigpCisgICAgICAgIDogbV9ieXRlY29k
ZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIGV4cGxpY2l0IENvZGVPcmlnaW4odWludDMyX3QgYnl0ZWNvZGVJbmRleCkK
KyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2RlSW5kZXggIT0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpOyB9CisgICAgCisgICAgdWludDMy
X3QgYnl0ZWNvZGVJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7
CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5kZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXg7Cit9OwogCiAvLyBFbnRyaWVzIGluIHRoZSBO
b2RlVHlwZSBlbnVtIChiZWxvdykgYXJlIGNvbXBvc2VkIG9mIGFuIGlkLCBhIHJlc3VsdCB0eXBl
IChwb3NzaWJseSBub25lKQogLy8gYW5kIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGl2ZSBmbGFn
cyAobXVzdCBnZW5lcmF0ZSwgaXMgY29uc3RhbnQsIGV0YykuCkBAIC0zNTcsOSArMzg3LDkgQEAg
c3RydWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJnVGFnIHsgVmFyQXJnIH07CiAKICAgICAvLyBD
b25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVl
LgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbywgTm9k
ZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2RlKE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAg
ICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4o
Y29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJl
Z2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICB7CkBAIC0zNzAsOSArNDAwLDkg
QEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1
cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlhdGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlw
ZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tLCBOb2RlSW5kZXgg
Y2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdp
biwgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxk
MiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkK
LSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2VwdGlvbkluZm8pCisgICAgICAgICwgY29kZU9y
aWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0
dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZv
KGltbS5tX3ZhbHVlKQpAQCAtMzg0LDkgKzQxNCw5IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAK
ICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGlt
bWVkaWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNl
cHRpb25JbmZvLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRleCBjaGlsZDEgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05v
ZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8g
aW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBj
aGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Ao
b3ApCi0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25JbmZvKQorICAgICAgICAsIGNv
ZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlk
VmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29w
SW5mbyhpbW0xLm1fdmFsdWUpCkBAIC0zOTksOSArNDI5LDkgQEAgc3RydWN0IE5vZGUgewogICAg
IH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggYSB2YXJpYWJsZSBudW1iZXIg
b2YgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUgdmFsdWVzLgotICAgIE5vZGUoVmFyQXJnVGFn
LCBOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tMSwg
T3BJbmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQor
ICAgIE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBP
cEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51
bUNoaWxkcmVuKQogICAgICAgICA6IG9wKG9wKQotICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhj
ZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3JpZ2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwg
bV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3Jl
ZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQpAQCAtNjQzLDYgKzY3
MywxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFy
Z3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKICAgICB9CisgICAg
CisgICAgLy8gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZG8gYSBmYXN0IGNoZWNrIG9u
IHRoZSBmaXJzdCBjaGlsZAorICAgIC8vIGJlZm9yZSBhbHNvIGRvaW5nIGEgY2hlY2sgb24gdGhl
IG9wY29kZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFuZAorICAgIC8vIGF2b2lkIGl0IGlmIHBvc3Np
YmxlLgorICAgIE5vZGVJbmRleCBjaGlsZDFVbmNoZWNrZWQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAgICB9CiAKICAgICBOb2RlSW5kZXggY2hpbGQy
KCkKICAgICB7CkBAIC02NzEsNyArNzA5LDcgQEAgc3RydWN0IE5vZGUgewogICAgIC8vIFRoaXMg
ZW51bSB2YWx1ZSBkZXNjcmliZXMgdGhlIHR5cGUgb2YgdGhlIG5vZGUuCiAgICAgTm9kZVR5cGUg
b3A7CiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlv
biAoY3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgotICAgIEV4Y2Vw
dGlvbkluZm8gZXhjZXB0aW9uSW5mbzsKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAg
Ly8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxkcmVuICgwIGZvciBubyBjaGlsZCkuCiAgICAg
dW5pb24gewogICAgICAgICBzdHJ1Y3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzNCw2ICs0MzQsOSBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNp
Y0FyaXRoT3AoTm9kCiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRp
b25DaGVja0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CisjaWYg
RU5BQkxFKERGR19PU1JfRVhJVCkKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tJdGVyYXRvcik7Cisj
ZWxzZQogICAgIC8vIENoZWNrIGZvciBzcGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVz
cG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0aGUKICAgICAvLyBzcGVjdWxhdGl2ZSBwYXRoLiBEbyBu
b3QgY2hlY2sgZm9yIE5vZGVJbmRleCAwLCBzaW5jZSB0aGlzIGlzIGNoZWNrZWQKICAgICAvLyBp
biB0aGUgb3V0ZXJtb3N0IGNvbXBpbGUgbGF5ZXIsIGF0IHRoZSBoZWFkIG9mIHRoZSBub24tc3Bl
Y3VsYXRpdmUgcGF0aApAQCAtNDQyLDYgKzQ0NSw3IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoU3BlY3VsYXQKICAgICAvLyBhcyBzcGVjdWxhdGlvbiBjaGVja3MgYXQgdGhpcyBp
bmRleCkuCiAgICAgaWYgKG1fY29tcGlsZUluZGV4ICYmIGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tB
dEluZGV4KG1fY29tcGlsZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgp
KTsKKyNlbmRpZgogCiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLm9wOwogCkBAIC0xMjgzLDggKzEy
ODcsMTAgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogdm9pZCBO
b25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYg
Y2hlY2tJdGVyYXRvcikKIHsKICAgICAvLyBDaGVjayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGFk
ZGVkIGF0IGZ1bmN0aW9uIGVudHJ5IChjaGVja2luZyBhcmd1bWVudCB0eXBlcykuCisjaWYgIUVO
QUJMRShERkdfT1NSX0VYSVQpCiAgICAgaWYgKGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4
KG1fY29tcGlsZUluZGV4KSkKICAgICAgICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNl
bmRpZgogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9yIChtX2Jsb2NrID0g
MDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw3IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICByZXR1cm4gSW52YWxpZEdQUlJl
ZzsKIH0KIAorI2lmICFFTkFCTEUoREZHX09TUl9FWElUKQogU3BlY3VsYXRpb25DaGVjazo6U3Bl
Y3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQq
IGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fY2hlY2soY2hlY2spCiAgICAg
LCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQpAQCAtMTcwLDYgKzE3MSw3MyBAQCBT
cGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNoZWNrKE1hY3JvCiAgICAgICAgICAgICBtX2Zw
ckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXggPSBOb05vZGU7CiAgICAgfQogfQorI2VuZGlm
CisKKyNpZm5kZWYgTkRFQlVHCit2b2lkIFZhbHVlU291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29u
c3QKK3sKKyAgICBmcHJpbnRmKG91dCwgIk5vZGUoJWQpIiwgbV9ub2RlSW5kZXgpOworfQorCit2
b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSogb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAo
dGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIEFscmVhZHlJblJlZ2lzdGVyRmlsZToKKyAgICAgICAg
ZnByaW50ZihvdXQsICItIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5HUFI6CisgICAg
ICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEdQUkluZm86OmRlYnVnTmFtZShncHIoKSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFVuYm94ZWRJbnQzMkluR1BSOgorICAgICAgICBmcHJpbnRm
KG91dCwgImludDMyKCUlJXMpIiwgR1BSSW5mbzo6ZGVidWdOYW1lKGdwcigpKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgSW5GUFI6CisgICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQ
UkluZm86OmRlYnVnTmFtZShmcHIoKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERpc3Bs
YWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICBmcHJpbnRmKG91dCwgIiolZCIsIHZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAg
ZnByaW50ZihvdXQsICJbJXNdIiwgY29uc3RhbnQoKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBEb250S25vdzoKKyAgICAgICAgZnByaW50ZihvdXQsICIhIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGZwcmludGYob3V0LCAiPyVkIiwg
dGVjaG5pcXVlKCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisjZW5kaWYKKworI2lmIEVO
QUJMRShERkdfT1NSX0VYSVQpCitPU1JFeGl0OjpPU1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorICAg
IDogbV9jaGVjayhjaGVjaykKKyAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgp
CisgICAgLCBtX2J5dGVjb2RlSW5kZXgoaml0LT5tX2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAg
LCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+
bV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5z
aXplKCkpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sK
KyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4ICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMy
X3Q+OjptYXgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwg
bV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1
bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJn
dW1lbnRdKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3Zh
cmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxl
XSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJs
ZV0pOworfQorCisjaWZuZGVmIE5ERUJVRwordm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkg
Y29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2Fy
Z3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCisgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50
XS5kdW1wKG91dCk7CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHVuc2lnbmVk
IHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUp
CisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXS5kdW1wKG91dCk7Cit9CisjZW5kaWYKKyNl
bmRpZgogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4
IG5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KQogewpAQCAtNjUwLDYgKzcxOCw0
MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAvLyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGlu
dCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBzdG9yZWQgYW5kCisgICAgICAgIC8vIGFzIGEg
c3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQg
d2UKKyAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUgY2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRv
IGdvIGluIHRoZSB2aXJ0dWFsCisgICAgICAgIC8vIHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIGNv
bXBpbGVNb3ZIaW50KG5vZGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXMgZmFyIGFzIE9TUiBp
cyBjb25jZXJuZWQsIHdlJ3JlIG9uIHRoZSBieXRlY29kZSBpbmRleCBjb3JyZXNwb25kaW5nCisg
ICAgICAgIC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkg
ImV4ZWN1dGVkIiB0aGUKKyAgICAgICAgLy8gU2V0TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERG
RyBOb2RlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzYW1lCisgICAgICAgIC8vIGJ5dGVjb2Rl
IGluZGV4IGFzIHRoZSBTZXRMb2NhbC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZv
ck9TUiA9PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKTsKKyAgICAgICAgTm9kZSYg
bmV4dE5vZGUgPSBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4KzFdOworICAgICAgICAKKyAg
ICAgICAgLy8gVGhpcyBhc3NlcnRpb24gd2lsbCBmYWlsIGlmIHdlIGV2ZXIgZW1pdCBtdWx0aXBs
ZSBTZXRMb2NhbCdzIGZvcgorICAgICAgICAvLyBhIHNpbmdsZSBieXRlY29kZSBpbnN0cnVjdGlv
bi4gVGhhdCdzIHVubGlrZWx5IHRvIGhhcHBlbi4gQnV0IGlmCisgICAgICAgIC8vIGl0IGRvZXMs
IHRoZSBzb2x1dGlvbiBpcyB0byB0byBoYXZlIHRoaXMgcGVyZm9ybSBhIHNlYXJjaCB1bnRpbAor
ICAgICAgICAvLyBpdCBmaW5kcyBhIE5vZGUgd2l0aCBhIGRpZmZlcmVudCBieXRlY29kZSBpbmRl
eCBmcm9tIHRoZSBvbmUgd2UndmUKKyAgICAgICAgLy8gZ290LCBhbmQgdG8gYWJzdHJhY3RseSBl
eGVjdXRlIHRoZSBTZXRMb2NhbCdzIGFsb25nIHRoZSB3YXkuIE9yLAorICAgICAgICAvLyBiZXR0
ZXIgeWV0LCBoYW5kbGUgYWxsIG9mIHRoZSBTZXRMb2NhbCdzIGF0IG9uY2U6IGFic3RyYWN0IGlu
dGVycHJldAorICAgICAgICAvLyBhbGwgb2YgdGhlbSwgdGhlbiBlbWl0IGNvZGUgZm9yIGFsbCBv
ZiB0aGVtLCB3aXRoIE9TUiBleGl0aW5nIHRvCisgICAgICAgIC8vIHRoZSBuZXh0IG5vbi1TZXRM
b2NhbCBpbnN0cnVjdGlvbi4gTm90ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciB3aGVuCisgICAgICAg
IC8vIGJvdGggdGhpcyBTZXRMb2NhbCBhbmQgdGhlIG5leHQgb3AgaGF2ZSBhIGJ5dGVjb2RlIGlu
ZGV4IG9mIDA7IHRoaXMKKyAgICAgICAgLy8gb2NjdXJzIGZvciBTZXRMb2NhbCdzIGdlbmVyYXRl
ZCBhdCB0aGUgdG9wIG9mIHRoZSBjb2RlIGJsb2NrIHRvCisgICAgICAgIC8vIGluaXRpYWxpemUg
bG9jYWxzIHRvIHVuZGVmaW5lZC4gSWRlYWxseSwgd2UnZCBoYXZlIGEgd2F5IG9mIG1hcmtpbmcK
KyAgICAgICAgLy8gaW4gdGhlIENvZGVPcmlnaW4gdGhhdCBhIFNldExvY2FsIGlzIHN5bnRoZXRp
Yy4gVGhpcyB3aWxsIG1ha2UgdGhlCisgICAgICAgIC8vIGFzc2VydGlvbiBtb3JlIHNlbnNpYmxl
LWxvb2tpbmcuIFdlIHNob3VsZCB0aGVuIGFsc28gYXNzZXJ0IHRoYXQKKyAgICAgICAgLy8gc3lu
dGhldGljIFNldExvY2FsJ3MgZG9uJ3QgaGF2ZSBzcGVjdWxhdGlvbiBjaGVja3MsIHNpbmNlIHRo
ZXkKKyAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUgZHJvcHBpbmcgdmFsdWVzIHRoYXQgd2Ugc3Rh
dGljYWxseSBrbm93IHdlIGFyZQorICAgICAgICAvLyBhbGxvd2VkIHRvIGRyb3AgaW50byB0aGUg
dmFyaWFibGVzLiBERkdQcm9wYWdhdG9yIHdpbGwgZ3VhcmFudGVlCisgICAgICAgIC8vIHRoaXMs
IHNpbmNlIGl0IHNob3VsZCBoYXZlIGF0IGxlYXN0IGFuIGFwcHJveGltYXRpb24gKGlmIG5vdAor
ICAgICAgICAvLyBleGFjdCBrbm93bGVkZ2UpIG9mIHRoZSB0eXBlIG9mIHRoZSBTZXRMb2NhbCdz
IGNoaWxkIG5vZGUsIGFuZAorICAgICAgICAvLyBzaG91bGQgbWVyZ2UgdGhhdCBpbmZvcm1hdGlv
biBpbnRvIHRoZSBsb2NhbCB0aGF0IGlzIGJlaW5nIHNldC4KKyAgICAgICAgQVNTRVJUKG1fYnl0
ZWNvZGVJbmRleEZvck9TUiAhPSBuZXh0Tm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKQor
ICAgICAgICAgICAgICAgfHwgKCFtX2J5dGVjb2RlSW5kZXhGb3JPU1IgJiYgIW5leHROb2RlLmNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7CisgICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9T
UiA9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICAKICAgICAg
ICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0
aW9uKG5vZGUubG9jYWwoKSk7CiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0
ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhp
cywgbm9kZS5jaGlsZDEoKSk7CkBAIC02NzAsNiArNzc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVl
LmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUg
dGhlIHZhbHVlIG9mCisgICAgICAgIC8vIHRoaXMgYnl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdp
c3RlcnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRoZSByZWdpc3RlciBmaWxlLgorICAgICAgICB2
YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQobm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNl
KCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTM2OSwxMSArMTQ3NywxOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICB9Ci0KKyAgICAKICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RH
ZW5lcmF0ZSgpKQogICAgICAgICB1c2UobV9jb21waWxlSW5kZXgpOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2RlJiBub2RlKQoreworICAgIEFTU0VSVChub2Rl
Lm9wID09IFNldExvY2FsKTsKKyAgICAKKyAgICBzZXROb2RlSW5kZXhGb3JPcGVyYW5kKG5vZGUu
Y2hpbGQxKCksIG5vZGUubG9jYWwoKSk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9j
YWwoKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9j
aykKIHsKICAgICBBU1NFUlQobV9jb21waWxlT2theSk7CkBAIC0xMzgyLDM1ICsxNDk4LDc0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICNpZiBFTkFCTEUoREZH
X0pJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5k
aWYKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsg
KytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV92YXJp
YWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsKIAogICAgIGZvciAoOyBtX2NvbXBp
bGVJbmRleCA8IGJsb2NrLmVuZDsgKyttX2NvbXBpbGVJbmRleCkgewogICAgICAgICBOb2RlJiBu
b2RlID0gbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF07Ci0gICAgICAgIGlmICghbm9kZS5z
aG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAorICAgICAg
ICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgp
OworICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkgeworI2lmIEVOQUJMRShERkdf
REVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVK
SVQgc2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBhdCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChp
bnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KCksIG1faml0
LmRlYnVnT2Zmc2V0KCkpOworI2VuZGlmCisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRM
b2NhbCkKKyAgICAgICAgICAgICAgICBjb21waWxlTW92SGludChub2RlKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIAogI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0
IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG1faml0LmRlYnVnT2Zm
c2V0KCkpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5l
cmF0aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwgKGludCltX2Nv
bXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVidWdP
ZmZzZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9OT0RF
KQotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CisgICAgICAgICAgICBtX2ppdC5icmVha3Bv
aW50KCk7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBjb21w
aWxlKG5vZGUpOwotICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpIHsKKyAgICAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIGNvbXBpbGUobm9kZSk7CisgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpIHsKICNpZiBFTkFCTEUoRFlOQU1JQ19URVJNSU5BVEVfU1BF
Q1VMQVRJT04pCi0gICAgICAgICAgICBtX2NvbXBpbGVPa2F5ID0gdHJ1ZTsKLSAgICAgICAgICAg
IG1fY29tcGlsZUluZGV4ID0gYmxvY2suZW5kOwotICAgICAgICAgICAgY2xlYXJHZW5lcmF0aW9u
SW5mbygpOworICAgICAgICAgICAgICAgIG1fY29tcGlsZU9rYXkgPSB0cnVlOworICAgICAgICAg
ICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2suZW5kOworICAgICAgICAgICAgICAgIGNsZWFy
R2VuZXJhdGlvbkluZm8oKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAg
ICAgICAgICAgIGlmIChub2RlLmhhc1Jlc3VsdCgpKSB7CisgICAgICAgICAgICAgICAgR2VuZXJh
dGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCld
OworICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXMsIHZyIyVkIiwgZGF0YUZv
cm1hdFRvU3RyaW5nKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSksIChpbnQpbm9kZS52aXJ0dWFsUmVn
aXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBE
YXRhRm9ybWF0Tm9uZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZv
cm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiwgJXMiLCBGUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5mcHIoKSkpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiwgJXMiLCBHUFJJbmZvOjpkZWJ1Z05hbWUoaW5mby5ncHIoKSkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKKyAgICAg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwog
I2VuZGlmCi0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5B
QkxFKERGR19WRVJCT1NFX1ZBTFVFX1JFQ09WRVJJRVMpCisgICAgICAgIGZvciAoaW50IG9wZXJh
bmQgPSAtbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplOyBvcGVyYW5kIDwgLVJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgKytvcGVy
YW5kKQorICAgICAgICAgICAgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChz
dGRlcnIpOworICAgICAgICAKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgOiAiKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAwOyBvcGVyYW5kIDwgKGludCltX3Zhcmlh
Ymxlcy5zaXplKCk7ICsrb3BlcmFuZCkKKyAgICAgICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5
Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyNlbmRpZgorICAgICAgCiAjaWYgRU5BQkxFKERG
R19ERUJVR19WRVJCT1NFKQotICAgICAgICBpZiAobm9kZS5oYXNSZXN1bHQoKSkKLSAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXNcbiIsIGRhdGFGb3JtYXRUb1N0cmluZyhtX2dlbmVy
YXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldLnJlZ2lzdGVyRm9ybWF0KCkpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlxuIik7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiB9CiAKQEAgLTE0MTksNiArMTU3NCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRl
eCk7CisgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NSID0gMDsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1faml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnM7ICsraSkgewogICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gKFZpcnR1YWxSZWdpc3RlcikobV9qaXQu
Y29kZUJsb2NrKCktPnRoaXNSZWdpc3RlcigpICsgaSk7CiAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCkuZ2V0UHJlZGljdGlvbih2aXJ0dWFsUmVnaXN0
ZXIpOwpAQCAtMTQ1NCw3ICsxNjEwLDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgp
CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CiAgICAgZm9yIChtX2Jsb2NrID0gMDsgbV9i
bG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Muc2l6ZSgpOyArK21fYmxvY2spIHsKICAgICAg
ICAgY29tcGlsZSgqbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXSk7Ci0jaWYgIUVOQUJM
RShEWU5BTUlDX09QVElNSVpBVElPTikKKyNpZiAhRU5BQkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQ
RUNVTEFUSU9OKQogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTE0NjMsNiArMTYxOSwxMTkgQEAgYm9vbCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK1ZhbHVlUmVjb3ZlcnkgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2
YWx1ZVNvdXJjZSkKK3sKKyAgICBpZiAoIXZhbHVlU291cmNlLmlzU2V0KCkpCisgICAgICAgIHJl
dHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5SZWdpc3RlckZpbGUoKTsKKworICAgIGlmICht
X2ppdC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJu
IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1faml0LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291
cmNlLm5vZGVJbmRleCgpKSk7CisgICAgCisgICAgTm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFw
aCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsKKyAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdl
bmVyYXRlKCkpIHsKKyAgICAgICAgLy8gSXQncyBsZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5v
Ym9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwgb3Igb3BlcmFuZCwKKyAgICAgICAgLy8gZXZl
ci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NS
LgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7
CisgICAgfQorICAgIAorICAgIEdlbmVyYXRpb25JbmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlv
bkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVyKCldOworICAgIGlmICghaW5mb1B0ci0+YWxp
dmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAhPSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkg
eworICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRoZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRo
YXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ugd2FudC4KKyAgICAgICAgLy8gVGhlcmUgYXJl
IGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gVmFsdWVUb051bWJl
cjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9mIHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9OdW1i
ZXIgbm9kZQorICAgICAgICAvLyAgICB0aGVuIGl0IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1
c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBlcmZvcm1lZCBhCisgICAgICAgIC8vICAgIFZh
bHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXkuIFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZh
bHVlVG9OdW1iZXIuCisgICAgICAgIC8vCisgICAgICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdp
c2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZlIHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisg
ICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhlbiB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYgdGhl
cmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAgICAgICAvLyAgICBhbmQgYSBWYWx1ZVRvTnVt
YmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZhbHVlVG9OdW1iZXIgYmVjYXVzZSBpdAorICAg
ICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVtYWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252
ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCisgICAgICAgIC8vICAgIG90aGVycyB3b3VsZCBoYXZlIGNv
bnZlcnRlZCB0byBJbnQzMi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6
IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJl
cgorICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRo
YXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1iZXIKKyAgICAgICAgLy8gICAgcmF0aGVyIHRo
YW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAvLworICAgICAgICAvLyBUaGUgcmV2
ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBjb3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBi
dXQgaXRzCisgICAgICAgIC8vICAgIGFsdGVybmF0aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1l
YW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVzZXMgb2YKKyAgICAgICAgLy8gICAgdGhlIG51
bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAK
KyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVQ
dHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAgICAgICAgICBub2RlUHRyID0gJm1faml0Lmdy
YXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgICAgIGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5m
b1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07CisgICAgICAgICAgICBpZiAoaW5mb1B0ci0+
YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXgpCisgICAgICAgICAg
ICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZv
dW5kKSB7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2Rl
OworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlVG9JbnQzMkluZGV4ID0gTm9Ob2RlOworICAg
ICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVtYmVySW5kZXggPSBOb05vZGU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmly
dHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5mby5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVy
KSB7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChpbmZv
Lm5vZGVJbmRleCgpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgo
KV07CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVT
b3VyY2Uubm9kZUluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVU
b051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb051bWJlckluZGV4ID0gaW5mby5u
b2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4
ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAgdWludDMy
VG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNlOworICAgICAgICAgICAgaWYgKHZhbHVlVG9O
dW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2
YWx1ZVRvTnVtYmVySW5kZXg7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRl
eCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50
MzJJbmRleDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRleFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRl
eDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5v
Tm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5v
Tm9kZSkgeworICAgICAgICAgICAgICAgIG5vZGVQdHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5k
ZXhUb1VzZV07CisgICAgICAgICAgICAgICAgaW5mb1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25v
ZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0
ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7Cisg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVj
b3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQo
aW5mb1B0ci0+YWxpdmUoKSk7CisKKyAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAh
PSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICBpZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6Omlu
R1BSKGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5yZWdpc3RlckZvcm1hdCgpKTsKKyAgICB9Cisg
ICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAg
IHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk0OTc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fc3JjOwogfTsK
IAorI2lmICFFTkFCTEUoREZHX09TUl9FWElUKQogLy8gPT09IFNwZWN1bGF0aW9uQ2hlY2sgPT09
CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3JkcyBhIGJhaWwtb3V0IGZyb20gdGhlIHNwZWN1
bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTYgQEAgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2sg
ewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9bRlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNd
OwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVj
dWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8vICFFTkFCTEUoREZHX09TUl9FWElUKQogCitj
bGFzcyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAgICA6
IG1fbm9kZUluZGV4KE5vTm9kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZh
bHVlU291cmNlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgICAgIDogbV9ub2RlSW5kZXgobm9k
ZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1NldCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXggIT0gTm9Ob2RlOworICAgIH0KKyAgICAKKyAg
ICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Nl
dCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUluZGV4OworICAgIH0KKyAgICAKKyNpZm5kZWYg
TkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CisjZW5kaWYKKyAgICAKK3By
aXZhdGU6CisgICAgTm9kZUluZGV4IG1fbm9kZUluZGV4OworfTsKKyAgICAKKy8vIERlc2NyaWJl
cyBob3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVjb2RlIHZpcnR1YWwgcmVnaXN0ZXIgYXQgYSBn
aXZlbgorLy8gY29kZSBwb2ludC4KK2VudW0gVmFsdWVSZWNvdmVyeVRlY2huaXF1ZSB7CisgICAg
Ly8gSXQncyBhbHJlYWR5IGluIHRoZSByZWdpc3RlciBmaWxlIGF0IHRoZSByaWdodCBsb2NhdGlv
bi4KKyAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGUsCisgICAgLy8gSXQncyBpbiBhIHJlZ2lzdGVy
LgorICAgIEluR1BSLAorICAgIFVuYm94ZWRJbnQzMkluR1BSLAorICAgIEluRlBSLAorICAgIC8v
IEl0J3MgaW4gdGhlIHJlZ2lzdGVyIGZpbGUsIGJ1dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4K
KyAgICBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwKKyAgICAvLyBJdCdzIGEgY29uc3RhbnQuCisg
ICAgQ29uc3RhbnQsCisgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gcmVjb3ZlciBpdC4KKyAgICBE
b250S25vdworfTsKKworY2xhc3MgVmFsdWVSZWNvdmVyeSB7CitwdWJsaWM6CisgICAgVmFsdWVS
ZWNvdmVyeSgpCisgICAgICAgIDogbV90ZWNobmlxdWUoRG9udEtub3cpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVyeSBhbHJlYWR5SW5SZWdpc3RlckZpbGUoKQor
ICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3Rl
Y2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmlsZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVlUmVjb3ZlcnkgaW5HUFIoR1BSUmVnIGdwciwg
RGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQg
IT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAg
ICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAgICByZXN1
bHQubV90ZWNobmlxdWUgPSBVbmJveGVkSW50MzJJbkdQUjsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5HUFI7CisgICAgICAgIHJlc3VsdC5tX3NvdXJj
ZS5ncHIgPSBncHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBWYWx1ZVJlY292ZXJ5IGluRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBWYWx1
ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5GUFI7Cisg
ICAgICAgIHJlc3VsdC5tX3NvdXJjZS5mcHIgPSBmcHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGRpc3BsYWNlZEluUmVnaXN0
ZXJGaWxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnKQorICAgIHsKKyAgICAgICAgVmFsdWVS
ZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlOworICAgICAgICByZXN1bHQubV9zb3VyY2UudmlydHVhbFJlZyA9IHZpcnR1
YWxSZWc7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBW
YWx1ZVJlY292ZXJ5IGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBWYWx1
ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gQ29uc3RhbnQ7
CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIFZhbHVlUmVjb3Zl
cnlUZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV90ZWNobmlxdWU7IH0KKyAg
ICAKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3RlY2hu
aXF1ZSA9PSBJbkdQUiB8fCBtX3RlY2huaXF1ZSA9PSBVbmJveGVkSW50MzJJbkdQUik7CisgICAg
ICAgIHJldHVybiBtX3NvdXJjZS5ncHI7CisgICAgfQorICAgIAorICAgIEZQUlJlZyBmcHIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdGVjaG5pcXVlID09IEluRlBSKTsKKyAgICAg
ICAgcmV0dXJuIG1fc291cmNlLmZwcjsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlx
dWUgPT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUpOworICAgICAgICByZXR1cm4gbV9zb3VyY2Uu
dmlydHVhbFJlZzsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gQ29uc3RhbnQpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fc291cmNlLmNvbnN0YW50KTsKKyAgICB9CisgICAgCisj
aWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpIGNvbnN0OworI2VuZGlmCisg
ICAgCitwcml2YXRlOgorICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgbV90ZWNobmlxdWU7Cisg
ICAgdW5pb24geworICAgICAgICBHUFJSZWcgZ3ByOworICAgICAgICBGUFJSZWcgZnByOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUg
Y29uc3RhbnQ7CisgICAgfSBtX3NvdXJjZTsKK307CisKKyNpZiBFTkFCTEUoREZHX09TUl9FWElU
KQorLy8gPT09IE9TUkV4aXQgPT09CisvLworLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhv
dyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIGJ5CisvLyBnb2luZyBpbnRvIGJhc2VsaW5l
IGNvZGUuCitzdHJ1Y3QgT1NSRXhpdCB7CisgICAgT1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVt
cCwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gMCk7CisgICAgCisg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9jaGVjazsKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5k
ZXg7CisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIAorICAgIHVuc2lnbmVkIG1f
cmVjb3ZlcnlJbmRleDsKKyAgICAKKyAgICAvLyBDb252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcg
b3ZlciBWYWx1ZVJlY292ZXJpZXMgd2hpbGUgYmVpbmcKKyAgICAvLyBnZW5lcmljIG92ZXIgYXJn
dW1lbnQgdmVyc3VzIHZhcmlhYmxlLgorICAgIGludCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCkgKyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KGludCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4XTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFi
bGVzW2luZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpXTsKKyAgICB9CisgICAgYm9vbCBpc0FyZ3Vt
ZW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gaW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNp
emUoKTsgfQorICAgIGJvb2wgaXNWYXJpYWJsZShpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFp
c0FyZ3VtZW50KGluZGV4KTsgfQorICAgIGludCBhcmd1bWVudEZvckluZGV4KGludCBpbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpbmRleDsKKyAgICB9CisgICAgaW50IHZhcmlh
YmxlRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4
IC0gbV9hcmd1bWVudHMuc2l6ZSgpOworICAgIH0KKyAgICBpbnQgb3BlcmFuZEZvckluZGV4KGlu
dCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVu
dHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgp
IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICByZXR1cm4gaW5k
ZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAg
ICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKKyNlbmRpZgorICAgIAorICAgIFZlY3RvcjxW
YWx1ZVJlY292ZXJ5LCAwPiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwg
MD4gbV92YXJpYWJsZXM7CisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7Cit9OwordHlwZWRlZiBT
ZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgMTY+IE9TUkV4aXRWZWN0b3I7CisjZW5kaWYgLy8gRU5B
QkxFKERGR19PU1JfRVhJVCkKIAogLy8gPT09IFNwZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTEw
NSwyMSArMjk1LDI1IEBAIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2sK
IC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFzc2VydGVkKSB0aHJvdWdoIHRoZSBkYXRhZmxv
dy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVibGljIEpJVENvZGVHZW5lcmF0b3IgewogICAg
IGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVjazsKKyAgICBmcmllbmQgc3RydWN0IE9TUkV4
aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAg
ICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5
KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVjdWxhdGl2ZUpJVChKSVRDb21waWxlciYpOwog
CiAgICAgYm9vbCBjb21waWxlKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWls
LW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCBy
ZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKICAgICBTcGVj
dWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlvbkNoZWNrcygpCiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9zcGVjdWxhdGlvbkNoZWNrczsKICAgICB9CisjZWxzZQorICAgIE9TUkV4aXRWZWN0
b3ImIG9zckV4aXRzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29zckV4aXRzOworICAgIH0K
KyNlbmRpZgogICAgIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHNwZWN1bGF0aW9uUmVjb3Zlcnkoc2l6
ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgLy8gU3BlY3VsYXRpb25DaGVjazo6bV9yZWNvdmVy
eUluZGV4IGlzIG9mZnNldCBieSAxLApAQCAtMTM5LDYgKzMzMyw3IEBAIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7CiAgICAgCiAgICAgdm9pZCBjb21waWxlKE5v
ZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUo
QmFzaWNCbG9jayYpOwogCiAgICAgdm9pZCBjaGVja0FyZ3VtZW50VHlwZXMoKTsKQEAgLTIwMyw3
ICszOTgsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgICAgIHJldHVybjsKKyNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKICAgICAgICAg
bV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0
aGlzKSk7CisjZWxzZQorICAgICAgICBtX29zckV4aXRzLmFwcGVuZChPU1JFeGl0KGp1bXBUb0Zh
aWwsIHRoaXMpKTsKKyNlbmRpZgogICAgIH0KICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVj
ayB3aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zlcnkm
IHJlY292ZXJ5KQpAQCAtMjExLDcgKzQxMCwxMSBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1fc3BlY3VsYXRpb25S
ZWNvdmVyeUxpc3QuYXBwZW5kKHJlY292ZXJ5KTsKKyNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkK
ICAgICAgICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1w
VG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2Vsc2UK
KyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NSRXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3Nw
ZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8g
Q2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdp
bGwgZmFpbC4KQEAgLTIzNCwxOCArNDM3LDY1IEBAIHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxi
b29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNwZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRl
eCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsKLQorICAgIAogICAgIC8vIEl0IGlzIHBvc3Np
YmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJhdGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRpb24g
aW4gd2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgYSBzcGVjdWxhdGlv
biB3aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVuIHR3byBub2RlcwogICAgIC8vIHdpbGwgbWFr
ZSBjb25mbGljdGluZyBzcGVjdWxhdGlvbnMgYWJvdXQgdGhlIHNhbWUgb3BlcmFuZCkuIEluIHN1
Y2ggY2FzZXMgdGhpcwogICAgIC8vIGZsYWcgaXMgY2xlYXJlZCwgaW5kaWNhdGluZyBubyBmdXJ0
aGVyIGNvZGUgZ2VuZXJhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS4KICAgICBib29sIG1fY29tcGls
ZU9rYXk7CisjaWYgIUVOQUJMRShERkdfT1NSX0VYSVQpCiAgICAgLy8gVGhpcyB2ZWN0b3IgdHJh
Y2tzIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBub24tc3BlY3Vs
YXRpdmUgb25lLgogICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3IgbV9zcGVjdWxhdGlvbkNoZWNr
czsKKyNlbHNlCisgICAgLy8gVGhpcyB2ZWN0b3IgdHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRoZSBz
cGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBvbGQgSklULgorICAgIE9TUkV4aXRWZWN0b3IgbV9vc3JF
eGl0czsKKyNlbmRpZgogICAgIC8vIFNvbWUgYmFpbC1vdXRzIG5lZWQgdG8gcmVjb3JkIGFkZGl0
aW9uYWwgaW5mb3JtYXRpb24gcmVjb3JkaW5nIHNwZWNpZmljIHJlY292ZXJ5CiAgICAgLy8gdG8g
YmUgcGVyZm9ybWVkIChmb3IgZXhhbXBsZSwgb24gZGV0ZWN0ZWQgb3ZlcmZsb3cgZnJvbSBhbiBh
ZGQsIHdlIG1heSBuZWVkIHRvCiAgICAgLy8gcmV2ZXJzZSB0aGUgYWRkaXRpb24gaWYgYW4gb3Bl
cmFuZCBpcyBiZWluZyBvdmVyd3JpdHRlbikuCiAgICAgVmVjdG9yPFNwZWN1bGF0aW9uUmVjb3Zl
cnksIDE2PiBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0OworICAgIAorICAgIC8vIFRyYWNraW5n
IGZvciB3aGljaCBub2RlcyBhcmUgY3VycmVudGx5IGhvbGRpbmcgdGhlIHZhbHVlcyBvZiBhcmd1
bWVudHMgYW5kIGJ5dGVjb2RlCisgICAgLy8gb3BlcmFuZC1pbmRleGVkIHZhcmlhYmxlcy4KKwor
ICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7
CisgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm9kZUluZGV4Rm9yT3BlcmFuZChOb2RlSW5kZXgg
bm9kZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHZhbHVlU291cmNlUmVmZXJl
bmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGVJbmRleCk7CisgICAgfQor
ICAgIAorICAgIC8vIENhbGwgdGhpcyB3aXRoIGNhcmUsIHNpbmNlIGl0IGJvdGggcmV0dXJucyBh
IHJlZmVyZW5jZSBpbnRvIGFuIGFycmF5CisgICAgLy8gYW5kIHBvdGVudGlhbGx5IHJlc2l6ZXMg
dGhlIGFycmF5LiBTbyBpdCB3b3VsZCBub3QgYmUgcmlnaHQgdG8gY2FsbCB0aGlzCisgICAgLy8g
dHdpY2UgYW5kIHRoZW4gcGVyZm9ybSBvcGVyYW5kcyBvbiBib3RoIHJlZmVyZW5jZXMsIHNpbmNl
IHRoZSBvbmUgZnJvbQorICAgIC8vIHRoZSBmaXJzdCBjYWxsIG1heSBubyBsb25nZXIgYmUgdmFs
aWQuCisgICAgVmFsdWVTb3VyY2UmIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChpbnQg
b3BlcmFuZCkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkg
eworICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUo
KSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVy
biBtX2FyZ3VtZW50c1thcmd1bWVudF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICgodW5zaWduZWQpb3BlcmFuZCA+PSBtX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgICAgICAgICBt
X3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEpOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG1fdmFyaWFibGVzW29wZXJhbmRdOworICAgIH0KKyAgICAKKyAgICBWZWN0b3I8VmFsdWVTb3Vy
Y2UsIDA+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxWYWx1ZVNvdXJjZSwgMD4gbV92YXJpYWJs
ZXM7CisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CisgICAgdWludDMyX3QgbV9ieXRlY29kZUlu
ZGV4Rm9yT1NSOworICAgIAorICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3IoY29uc3QgVmFsdWVTb3VyY2UmKTsKKworICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVl
UmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gY29tcHV0ZVZh
bHVlUmVjb3ZlcnlGb3IodmFsdWVTb3VyY2VGb3JPcGVyYW5kKG9wZXJhbmQpKTsKKyAgICB9CiB9
OwogCiAKQEAgLTQ2NSwxMSArNzE1LDE3IEBAIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fZ3ByT3JJ
bnZhbGlkOwogfTsKIAotCiAvLyA9PT0gU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgPT09
CiAvLwogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSBub24tc3BlY3VsYXRpdmUgSklUIHRv
IGNoZWNrIHdoaWNoCiAvLyBub2RlcyByZXF1aXJlIGVudHJ5IHBvaW50cyBmcm9tIHRoZSBzcGVj
dWxhdGl2ZSBwYXRoLgorI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCisvLyBUaGlzIGJlY29tZXMg
YSBzdHViIGlmIE9TUiBpcyBlbmFibGVkLgorY2xhc3MgU3BlY3VsYXRpb25DaGVja0luZGV4SXRl
cmF0b3IgeworcHVibGljOgorICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKCkgeyB9
Cit9OworI2Vsc2UKIGNsYXNzIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIHsKIHB1Ymxp
YzoKICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvcihTcGVjdWxhdGlvbkNoZWNrVmVj
dG9yJiBzcGVjdWxhdGlvbkNoZWNrcykKQEAgLTQ5NSw3ICs3NTEsMTcgQEAgcHJpdmF0ZToKICAg
ICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVyYXRvciBtX2l0ZXI7CiAgICAgU3BlY3VsYXRp
b25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9lbmQ7CiB9OworI2VuZGlmCiAKK2lubGluZSBTcGVj
dWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsZXImIGppdCkKKyAgICA6IEpJVENv
ZGVHZW5lcmF0b3Ioaml0LCB0cnVlKQorICAgICwgbV9jb21waWxlT2theSh0cnVlKQorICAgICwg
bV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5tX251bVBhcmFtZXRlcnMpCisgICAgLCBtX3Zh
cmlhYmxlcyhqaXQuY29kZUJsb2NrKCktPm1fbnVtVmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJh
bmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAsIG1fYnl0ZWNvZGVJbmRl
eEZvck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCit7Cit9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Db21wYWN0SklUQ29kZU1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ29tcGFjdEpJVENvZGVNYXBfaAorI2RlZmluZSBDb21wYWN0SklUQ29k
ZU1hcF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW51
c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mgewor
CisvLyBHaXZlcyB5b3UgYSBjb21wcmVzc2VkIG1hcCBiZXR3ZWVuIGJldHdlZW4gYnl0ZWNvZGUg
aW5kaWNlcyBhbmQgbWFjaGluZSBjb2RlCisvLyBlbnRyeSBwb2ludHMuIFRoZSBjb21wcmVzc2lv
biBzaW1wbHkgdHJpZXMgdG8gdXNlIGVpdGhlciAxLCAyLCBvciA0IGJ5dGVzIGZvcgorLy8gYW55
IGdpdmVuIG9mZnNldC4gVGhlIGxhcmdlc3Qgb2Zmc2V0IHRoYXQgY2FuIGJlIHN0b3JlZCBpcyAy
XjMwLgorCisvLyBFeGFtcGxlIHVzZToKKy8vCisvLyBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rl
ciBlbmNvZGVyKG1hcCk7CisvLyBlbmNvZGVyLmFwcGVuZChhLCBiKTsKKy8vIGVuY29kZXIuYXBw
ZW5kKGMsIGQpOyAvLyBwcmVjb25kaXRpb25zOiBjID49IGEsIGQgPj0gYgorLy8gT3duUHRyPENv
bXBhY3RKSVRDb2RlTWFwPiBtYXAgPSBlbmNvZGVyLmZpbmlzaCgpOworLy8KKy8vIEF0IHNvbWUg
bGF0ZXIgdGltZToKKy8vCisvLyBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBkZWNv
ZGVkOworLy8gbWFwLT5kZWNvZGUoZGVjb2RlZCk7CisKK3N0cnVjdCBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQgeworICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCgpIHsgfQorICAgIAorICAg
IEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25l
ZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJ
bmRleCkKKyAgICAgICAgLCBtX21hY2hpbmVDb2RlT2Zmc2V0KG1hY2hpbmVDb2RlT2Zmc2V0KQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVu
c2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgCisgICAgc3RhdGljIGlubGluZSB1bnNp
Z25lZCBnZXRCeXRlY29kZUluZGV4KEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZykK
KyAgICB7CisgICAgICAgIHJldHVybiBtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXg7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0TWFjaGluZUNvZGVPZmZzZXQoQnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1h
cHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgfQorfTsKKworY2xhc3MgQ29tcGFjdEpJ
VENvZGVNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIH5D
b21wYWN0SklUQ29kZU1hcCgpCisgICAgeworICAgICAgICBpZiAobV9idWZmZXIpCisgICAgICAg
ICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVjb2RlKFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiByZXN1bHQpIGNvbnN0CisgICAgeworICAg
ICAgICB1bnNpZ25lZCBwcmV2aW91c0J5dGVjb2RlSW5kZXggPSAwOworICAgICAgICB1bnNpZ25l
ZCBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsKKyAgICAgICAgCisgICAgICAgIHJlc3Vs
dC5yZXNpemUobV9udW1iZXJPZkVudHJpZXMpOworICAgICAgICB1bnNpZ25lZCBqID0gMDsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZFbnRyaWVzOyArK2kpIHsK
KyAgICAgICAgICAgIHByZXZpb3VzQnl0ZWNvZGVJbmRleCArPSBkZWNvZGVOdW1iZXIoaik7Cisg
ICAgICAgICAgICBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ICs9IGRlY29kZU51bWJlcihqKTsK
KyAgICAgICAgICAgIHJlc3VsdFtpXS5tX2J5dGVjb2RlSW5kZXggPSBwcmV2aW91c0J5dGVjb2Rl
SW5kZXg7CisgICAgICAgICAgICByZXN1bHRbaV0ubV9tYWNoaW5lQ29kZU9mZnNldCA9IHByZXZp
b3VzTWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGogPT0gbV9z
aXplKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENvbXBhY3RKSVRDb2RlTWFwKHVpbnQ4
X3QqIGJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzKQorICAg
ICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgICwg
bV9zaXplKHNpemUpCisjZW5kaWYKKyAgICAgICAgLCBtX251bWJlck9mRW50cmllcyhudW1iZXJP
ZkVudHJpZXMpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc2l6ZSk7CisgICAgfQorICAg
IAorICAgIHVpbnQ4X3QgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICByZXR1cm4gbV9idWZmZXJbaW5kZXhdOwor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBkZWNvZGVOdW1iZXIodW5zaWduZWQmIGluZGV4KSBj
b25zdAorICAgIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBhdChpbmRleCsrKTsKKyAg
ICAgICAgaWYgKCEoaGVhZFZhbHVlICYgMTI4KSkKKyAgICAgICAgICAgIHJldHVybiBoZWFkVmFs
dWU7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAmIDY0KSkKKyAgICAgICAgICAgIHJldHVybiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1ZSAmIH4xMjgpIDw8IDgpIHwgYXQoaW5kZXgr
Kyk7CisgICAgICAgIHVuc2lnbmVkIHNlY29uZCA9IGF0KGluZGV4KyspOworICAgICAgICB1bnNp
Z25lZCB0aGlyZCAgPSBhdChpbmRleCsrKTsKKyAgICAgICAgdW5zaWduZWQgZm91cnRoID0gYXQo
aW5kZXgrKyk7CisgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1
ZSAmIH4oMTI4ICsgNjQpKSA8PCAyNCkgfCAoc2Vjb25kIDw8IDE2KSB8ICh0aGlyZCA8PCA4KSB8
IGZvdXJ0aDsKKyAgICB9CisgICAgCisgICAgdWludDhfdCogbV9idWZmZXI7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyNlbmRpZgorICAgIHVuc2lnbmVkIG1f
bnVtYmVyT2ZFbnRyaWVzOworICAgIAorcHVibGljOgorICAgIGNsYXNzIEVuY29kZXIgeworICAg
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbmNvZGVyKTsKKyAgICBwdWJsaWM6CisgICAgICAg
IEVuY29kZXIoKTsKKyAgICAgICAgfkVuY29kZXIoKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQg
ZW5zdXJlQ2FwYWNpdHlGb3IodW5zaWduZWQgbnVtYmVyT2ZFbnRyaWVzVG9BZGQpOworICAgICAg
ICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29k
ZU9mZnNldCk7CisgICAgICAgIFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IGZpbmlzaCgp
OworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGFwcGVuZEJ5dGUodWludDhf
dCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW5jb2RlTnVtYmVyKHVpbnQzMl90IHZhbHVlKTsKKyAg
ICAKKyAgICAgICAgdWludDhfdCogbV9idWZmZXI7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsK
KyAgICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKKyAgICAgICAgdW5zaWduZWQgbV9udW1iZXJP
ZkVudHJpZXM7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBtX3ByZXZpb3VzQnl0ZWNvZGVJ
bmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAg
IH07CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEVuY29kZXI7Cit9OworCitpbmxpbmUg
Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIoKQorICAgIDogbV9idWZmZXIoMCkK
KyAgICAsIG1fc2l6ZSgwKQorICAgICwgbV9jYXBhY2l0eSgwKQorICAgICwgbV9udW1iZXJPZkVu
dHJpZXMoMCkKKyAgICAsIG1fcHJldmlvdXNCeXRlY29kZUluZGV4KDApCisgICAgLCBtX3ByZXZp
b3VzTWFjaGluZUNvZGVPZmZzZXQoMCkKK3sKK30KKworaW5saW5lIENvbXBhY3RKSVRDb2RlTWFw
OjpFbmNvZGVyOjp+RW5jb2RlcigpCit7CisgICAgaWYgKG1fYnVmZmVyKQorICAgICAgICBmYXN0
RnJlZShtX2J1ZmZlcik7Cit9CisgICAgICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVN
YXA6OkVuY29kZXI6OmFwcGVuZCh1bnNpZ25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNo
aW5lQ29kZU9mZnNldCkKK3sKKyAgICBBU1NFUlQoYnl0ZWNvZGVJbmRleCA+PSBtX3ByZXZpb3Vz
Qnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1hY2hpbmVDb2RlT2Zmc2V0ID49IG1fcHJldmlv
dXNNYWNoaW5lQ29kZU9mZnNldCk7CisgICAgZW5zdXJlQ2FwYWNpdHlGb3IoMSk7CisgICAgZW5j
b2RlTnVtYmVyKGJ5dGVjb2RlSW5kZXggLSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCk7CisgICAg
ZW5jb2RlTnVtYmVyKG1hY2hpbmVDb2RlT2Zmc2V0IC0gbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zm
c2V0KTsKKyAgICBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAg
bV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gbWFjaGluZUNvZGVPZmZzZXQ7CisgICAgbV9u
dW1iZXJPZkVudHJpZXMrKzsKK30KKworaW5saW5lIFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVN
YXA+IENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjpmaW5pc2goKQoreworICAgIG1fY2FwYWNp
dHkgPSBtX3NpemU7CisgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJl
YWxsb2MobV9idWZmZXIsIG1fY2FwYWNpdHkpKTsKKyAgICBPd25QdHI8Q29tcGFjdEpJVENvZGVN
YXA+IHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBDb21wYWN0SklUQ29kZU1hcChtX2J1ZmZlciwgbV9z
aXplLCBtX251bWJlck9mRW50cmllcykpOworICAgIG1fYnVmZmVyID0gMDsKKyAgICBtX3NpemUg
PSAwOworICAgIG1fY2FwYWNpdHkgPSAwOworICAgIG1fbnVtYmVyT2ZFbnRyaWVzID0gMDsKKyAg
ICBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IDA7CisgICAgbV9wcmV2aW91c01hY2hpbmVDb2Rl
T2Zmc2V0ID0gMDsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKyAgICAgICAgCitp
bmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kQnl0ZSh1aW50OF90
IHZhbHVlKQoreworICAgIEFTU0VSVChtX3NpemUgKyAxIDw9IG1fY2FwYWNpdHkpOworICAgIG1f
YnVmZmVyW21fc2l6ZSsrXSA9IHZhbHVlOworfQorICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJ
VENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcih1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBB
U1NFUlQobV9zaXplICsgNCA8PSBtX2NhcGFjaXR5KTsKKyAgICBBU1NFUlQodmFsdWUgPCAoMSA8
PCAzMCkpOworICAgIGlmICh2YWx1ZSA8PSAxMjcpIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFs
dWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRW
YWx1ZSAmIDEyOCkpOworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSk7CisgICAgfSBlbHNl
IGlmICh2YWx1ZSA8PSAxNjM4MykgeworICAgICAgICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUg
JiAxMjgpKTsKKyAgICAgICAgQVNTRVJUKCEoaGVhZFZhbHVlICYgNjQpKTsKKyAgICAgICAgYXBw
ZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjgpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHZhbHVlKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFs
dWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiAyNCk7CisgICAgICAgIEFTU0VSVCgh
KGhlYWRWYWx1ZSAmIDEyOCkpOworICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiA2NCkpOwor
ICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSB8IDEyOCB8IDY0KTsKKyAgICAgICAgYXBwZW5k
Qnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSA+PiAxNikpOworICAgICAgICBhcHBlbmRC
eXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpKTsKKyAgICAgICAgYXBwZW5kQnl0
ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkpOworICAgIH0KK30KKworaW5saW5lIHZvaWQg
Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuc3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51
bWJlck9mRW50cmllc1RvQWRkKQoreworICAgIHVuc2lnbmVkIGNhcGFjaXR5TmVlZGVkID0gbV9z
aXplICsgbnVtYmVyT2ZFbnRyaWVzVG9BZGQgKiAyICogNDsKKyAgICBpZiAoY2FwYWNpdHlOZWVk
ZWQgPiBtX2NhcGFjaXR5KSB7CisgICAgICAgIG1fY2FwYWNpdHkgPSBjYXBhY2l0eU5lZWRlZCAq
IDI7CisgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9j
KG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MK
KworI2VuZGlmIC8vIENvbXBhY3RKSVRDb2RlTWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksNiArMjA5LDExIEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAgICBtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0
XSA9IGxhYmVsKCk7CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgICAgICBp
ZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAgICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBw
ZW5kKG1fYnl0ZWNvZGVPZmZzZXQsIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxh
YmVsKCkpKTsKKyNlbmRpZgorCiAgICAgICAgIHN3aXRjaCAobV9pbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkpIHsKICAgICAgICAgREVGSU5FX0JJ
TkFSWV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAgICBERUZJTkVfQklOQVJZX09QKG9wX2luKQpA
QCAtMzczLDcgKzM3OCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICNl
bmRpZgogfQogCi0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUxpbmtQYXNzKCkKIHsKICAgICB1
bnNpZ25lZCBqbXBUYWJsZUNvdW50ID0gbV9qbXBUYWJsZS5zaXplKCk7CkBAIC01MDIsNiArNTA2
LDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogewogI2lmIEVO
QUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAgICAgbV9jYW5CZU9wdGltaXplZCA9IG1fY29kZUJs
b2NrLT5jYW5Db21waWxlV2l0aERGRygpOworICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAg
ICAgICBtX3N0YXJ0T2ZDb2RlID0gbGFiZWwoKTsKICNlbmRpZgogICAgIAogICAgIC8vIEp1c3Qg
YWRkIGEgbGl0dGxlIGJpdCBvZiByYW5kb21uZXNzIHRvIHRoZSBjb2RlZ2VuCkBAIC02NDIsNiAr
NjQ4LDExIEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KICAgICAg
ICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBtX2NvZGVCbG9jay0+c3RydWN0dXJlU3R1Yklu
Zm8obV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvW2ldLnByb3BlcnR5QWNjZXNzSW5kZXgpLmNh
bGxSZXR1cm5Mb2NhdGlvbjsKICAgICB9CiAKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9O
KQorICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklU
Q29kZU1hcChtX2ppdENvZGVNYXBFbmNvZGVyLmZpbmlzaCgpKTsKKyNlbmRpZgorCiAgICAgaWYg
KG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSAmJiBmdW5jdGlvbkVudHJ5
QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9uRW50cnlBcml0eUNoZWNrID0gcGF0Y2hCdWZm
ZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBACiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZG
U0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9XSVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVj
dGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxkIGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0
ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQpLCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkp
OwogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAu
aCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgi
CiAjaW5jbHVkZSAiT3Bjb2RlLmgiCkBAIC0xMDU0LDYgKzEwNTUsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgCiAjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKICAgICAgICAgYm9v
bCBtX2NhbkJlT3B0aW1pemVkOworICAgICAgICBMYWJlbCBtX3N0YXJ0T2ZDb2RlOworICAgICAg
ICBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2RlciBtX2ppdENvZGVNYXBFbmNvZGVyOwogI2VuZGlm
CiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkxLDYgKzE5MSw5IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERh
dGFUeXAKICAgICAsIHBhcnNlcihuZXcgUGFyc2VyKQogICAgICwgaW50ZXJwcmV0ZXIoMCkKICAg
ICAsIGhlYXAodGhpcywgaGVhcFNpemUpCisjaWYgRU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikK
KyAgICAsIHNpemVPZkxhc3RPU1JTY3JhdGNoQnVmZmVyKDApCisjZW5kaWYKICAgICAsIGR5bmFt
aWNHbG9iYWxPYmplY3QoMCkKICAgICAsIGNhY2hlZFVUQ09mZnNldChzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQogICAgICwgbWF4UmVlbnRyeURlcHRoKHRocmVhZFN0
YWNrVHlwZSA9PSBUaHJlYWRTdGFja1R5cGVTbWFsbCA/IE1heFNtYWxsVGhyZWFkUmVlbnRyeURl
cHRoIDogTWF4TGFyZ2VUaHJlYWRSZWVudHJ5RGVwdGgpCkBAIC0zNTYsNiArMzU5LDExIEBAIEpT
R2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQog
ICAgIGRlbGV0ZSBtX3J0VHJhY2VMaXN0OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoVElFUkVEX0NP
TVBJTEFUSU9OKQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvc3JTY3JhdGNoQnVmZmVy
cy5zaXplKCk7ICsraSkKKyAgICAgICAgZmFzdEZyZWUob3NyU2NyYXRjaEJ1ZmZlcnNbaV0pOwor
I2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8SlNHbG9iYWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0
ZUNvbnRleHRHcm91cChUaHJlYWRTdGFja1R5cGUgdHlwZSwgSGVhcFNpemUgaGVhcFNpemUpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2
aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDYgKzIzNCwyOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGludDY0X3QgZGVidWdEYXRhQnVmZmVyWzY0XTsKICNl
bmRpZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIFZlY3Rvcjx2b2lk
Kj4gb3NyU2NyYXRjaEJ1ZmZlcnM7CisgICAgICAgIHNpemVfdCBzaXplT2ZMYXN0T1NSU2NyYXRj
aEJ1ZmZlcjsKKyAgICAgICAgCisgICAgICAgIHZvaWQqIG9zclNjcmF0Y2hCdWZmZXJGb3JTaXpl
KHNpemVfdCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXNpemUpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaXplID4g
c2l6ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAvLyBQcm90ZWN0
IGFnYWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBhdGhvbG9neSBieSBlbnN1cmluZworICAgICAg
ICAgICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdlIGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1l
YW5pbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAgICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMg
c29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAgICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBz
aXplKSAqIDQuCisgICAgICAgICAgICAgICAgc2l6ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIgPSBz
aXplICogMjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvc3JTY3JhdGNoQnVm
ZmVycy5hcHBlbmQoZmFzdE1hbGxvYyhzaXplT2ZMYXN0T1NSU2NyYXRjaEJ1ZmZlcikpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gb3NyU2NyYXRjaEJ1
ZmZlcnMubGFzdCgpOworICAgICAgICB9CisjZW5kaWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hN
YXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xhc3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xh
c3NEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJ
KHJldmlzaW9uIDk0OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBKU09iamVjdCogSlNWYWx1
ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShFCiAjaWZuZGVmIE5ERUJVRwogY2hhciogSlNWYWx1ZTo6
ZGVzY3JpcHRpb24oKQogewotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDMyOworICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDY0OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0
aW9uW3NpemVdOwogCiAgICAgaWYgKCEqdGhpcykK
</data>
<flag name="review"
          id="103684"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107085</attachid>
            <date>2011-09-12 14:41:58 -0700</date>
            <delta_ts>2011-09-12 18:29:26 -0700</delta_ts>
            <desc>the patch - fix review</desc>
            <filename>osr_patch_13.diff</filename>
            <type>text/plain</type>
            <size>91770</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQxIEBA
CisyMDExLTA5LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SmF2YVNjcmlwdENvcmUgZG9lcyBub3QgaGF2ZSBzcGVjdWxhdGl2ZS0+YmFzZWxpbmUgT1NSCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NzgyNgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBhZGRzIHRoZSBhYmlsaXR5IHRvIGJhaWwgb3V0IG9mIERGRyBzcGVjdWxhdGl2ZSBKSVQgZXhl
Y3V0aW9uIGJ5CisgICAgICAgIHBlcmZvcm1pbmcgYW4gb24tc3RhY2sgcmVwbGFjZW1lbnQgKE9T
UikgdGhhdCByZXN1bHRzIGluIHRoZSBjb250cm9sCisgICAgICAgIGZsb3cgZ29pbmcgdG8gdGhl
IGVxdWl2YWxlbnQgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIG9sZCBKSVQuCisgICAgICAgIAorICAg
ICAgICBUaGlzIHJlcXVpcmVkIGEgbnVtYmVyIG9mIG5ldyBmZWF0dXJlcywgYXMgd2VsbCBhcyB0
YWtpbmcgYWR2YW50YWdlIG9mCisgICAgICAgIHNvbWUgZmVhdHVyZXMgdGhhdCBoYXBwZW5lZCB0
byBhbHJlYWR5IGJlIHByZXNlbnQ6CisgICAgICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBh
IHBvbGljeSBvZiBzdG9yaW5nIHRoZSBieXRlY29kZSBpbmRleCBmb3Igd2hpY2ggYSBERkcKKyAg
ICAgICAgbm9kZSB3YXMgZ2VuZXJhdGVkIGluc2lkZSB0aGUgREZHOjpOb2RlIGNsYXNzLiBUaGlz
IHdhcyBwcmV2aW91c2x5CisgICAgICAgIGNhbGxlZCBleGNlcHRpb25JbmZvLiBJdCdzIG5vdyBy
ZW5hbWVkIHRvIGNvZGVPcmlnaW4gdG8gcmVmbGVjdCB0aGF0CisgICAgICAgIGl0J3MgdXNlZCBm
b3IgbW9yZSB0aGFuIGp1c3QgZXhjcGV0aW9ucy4gT1NSIHVzZXMgdGhpcyB0byBmaWd1cmUgb3V0
CisgICAgICAgIHdoaWNoIGJ5dGVjb2RlIGluZGV4IHRvIHVzZSB0byBsb29rIHVwIHRoZSBtYWNo
aW5lIGNvZGUgbG9jYXRpb24gaW4KKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBv
bGQgSklUIHRoYXQgd2Ugc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAgICAgIAorICAgICAgICBD
b2RlQmxvY2sgbm93IHN0b3JlcyBhIG1hcHBpbmcgYmV0d2VlbiBieXRlY29kZSBpbmRpY2VzIGFu
ZCBtYWNoaW5lCisgICAgICAgIGNvZGUgb2Zmc2V0cyBmb3IgY29kZSBnZW5lcmF0ZWQgYnkgdGhl
IG9sZCBKSVQuIFRoaXMgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgYnkgQ29tcGFjdEpJVENvZGVN
YXAsIHdoaWNoIHRyaWVzIHRvIGNvbXByZXNzIHRoaXMgZGF0YSBhIGJpdC4gIFRoZQorICAgICAg
ICBPU1IgY29tcGlsZXIgZGVjb2RlcyB0aGlzIGFuZCB1c2VzIGl0IHRvIGZpbmQgdGhlIG1hY2hp
bmUgY29kZQorICAgICAgICBsb2NhdGlvbnMgaXQgc2hvdWxkIGJlIGp1bXBpbmcgdG8uCisgICAg
ICAgIAorICAgICAgICBXZSBhbHJlYWR5IGhhZCBhIG1lY2hhbmlzbSB0aGF0IGVtaXR0ZWQgU2V0
TG9jYWwgbm9kZXMgaW4gdGhlIERGRyBncmFwaAorICAgICAgICB0aGF0IHRvbGQgdXMgdGhlIHRp
bWUgYXQgd2hpY2ggdGhlIG9sZCBKSVQgd291bGQgaGF2ZSBzdG9yZWQgc29tZXRoaW5nCisgICAg
ICAgIGludG8gaXRzIHJlZ2lzdGVyIGZpbGUsIGFuZCB0aGUgREZHOjpOb2RlIHRoYXQgY29ycmVz
cG9uZHMgdG8gdGhlIHZhbHVlCisgICAgICAgIHRoYXQgaXQgd291bGQgaGF2ZSBzdG9yZWQuIFRo
ZXNlIFNldExvY2FsJ3Mgd2VyZSBtb3N0bHkgZGVhZC1jb2RlLQorICAgICAgICBlbGltaW5hdGVk
LCBidXQgb3VyIERDRSBsZWF2ZXMgdGhlIG5vZGVzIGludGFjdCBleGNlcHQgZm9yIG1ha2luZyB0
aGVtCisgICAgICAgIGhhdmUgMCBhcyB0aGUgcmVmIGNvdW50LiBUaGlzIGFsbG93cyB0aGUgT1NS
IGNvbXBpbGVyIHRvIGNvbnN0cnVjdCBhCisgICAgICAgIG1hcHBpbmcgYmV0d2VlbiB0aGUgc3Rh
dGUgYXMgaXQgd291bGQgaGF2ZSBiZWVuIHNlZW4gYnkgdGhlIG9sZCBKSVQKKyAgICAgICAgYW5k
IHRoZSBzdGF0ZSBhcyB0aGUgREZHIEpJVCBzZWVzIGl0LiBUaGUgT1NSIGNvbXBpbGVyIHVzZXMg
dGhpcyB0bworICAgICAgICBnZW5lcmF0ZSBjb2RlIHRoYXQgcmVzaGFwZXMgdGhlIGNhbGwgZnJh
bWUgc28gdGhhdCBpdCBpcyBsaWtlIHdoYXQgdGhlCisgICAgICAgIG9sZCBKSVQgd291bGQgZXhw
ZWN0LgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgd2hlbiBERkdfT1NSIGlzIGVuYWJsZWQg
KHRoZSBkZWZhdWx0IGZvciBUSUVSRURfQ09NUElMQVRJT04pCisgICAgICAgIHdlIG5vIGxvbmdl
ciBlbWl0IHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aC4KKworICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKiBkZmcvREZHR1BS
SW5mby5oOgorICAgICAgICAqIGRmZy9ERkdHZW5lcmF0aW9uSW5mby5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyYXRpb25JbmZvOjphbGl2ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OmFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2spOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6OmV4aXRTcGVjdWxhdGl2ZVdpdGhPU1IpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rT1NSRXhpdHMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENv
bXBpbGVyOjpjb21waWxlQm9keSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omxp
bmspOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6
OkNhbGxSZWNvcmQ6OkNhbGxSZWNvcmQpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojpub3RpZnlDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6YXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFw
cGVuZENhbGxXaXRoRmFzdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6YWRkSlNDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6SlND
YWxsUmVjb3JkOjpKU0NhbGxSZWNvcmQpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29kZU9yaWdpbjo6Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpERkc6OkNvZGVPcmlnaW46OmJ5
dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OmNoaWxkMVVuY2hlY2tlZCk6CisgICAgICAgICogZGZnL0RGR05vblNw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVS
ZWNvdmVyeTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6
VmFsdWVTb3VyY2UpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjppc1NldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6Om5vZGVJbmRleCk6CisgICAgICAgIChKU0M6
OkRGRzo6VmFsdWVSZWNvdmVyeTo6VmFsdWVSZWNvdmVyeSk6CisgICAgICAgIChKU0M6OkRGRzo6
VmFsdWVSZWNvdmVyeTo6YWxyZWFkeUluUmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZH
OjpWYWx1ZVJlY292ZXJ5OjppbkdQUik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVy
eTo6aW5GUFIpOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZElu
UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5Ojpjb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dGVjaG5pcXVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWx1ZVJlY292ZXJ5OjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlZh
bHVlUmVjb3Zlcnk6OmZwcik6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVSZWNvdmVyeTo6dmly
dHVhbFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpudW1iZXJPZlJlY292
ZXJpZXMpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OnZhbHVlUmVjb3ZlcnkpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmlzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmFyZ3VtZW50Rm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6
OnZhcmlhYmxlRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Om9wZXJhbmRG
b3JJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6Om9zckV4aXRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlU291cmNlRm9yT3BlcmFuZCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldE5vZGVJbmRleEZvck9wZXJh
bmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZVNvdXJjZVJlZmVy
ZW5jZUZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3I6OlNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAgICAqIGpp
dC9Db21wYWN0SklUQ29kZU1hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVBbmRN
YWNoaW5lT2Zmc2V0OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ6OmdldE1hY2hpbmVDb2RlT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6On5Db21wYWN0SklUQ29kZU1hcCk6CisgICAgICAg
IChKU0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpkZWNvZGUpOgorICAgICAgICAoSlNDOjpDb21wYWN0
SklUQ29kZU1hcDo6Q29tcGFjdEpJVENvZGVNYXApOgorICAgICAgICAoSlNDOjpDb21wYWN0SklU
Q29kZU1hcDo6YXQpOgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6ZGVjb2RlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVuY29kZXIp
OgorICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6fkVuY29kZXIpOgor
ICAgICAgICAoSlNDOjpDb21wYWN0SklUQ29kZU1hcDo6RW5jb2Rlcjo6YXBwZW5kKToKKyAgICAg
ICAgKEpTQzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmZpbmlzaCk6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjphcHBlbmRCeXRlKToKKyAgICAgICAgKEpT
Qzo6Q29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJlcik6CisgICAgICAgIChK
U0M6OkNvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjplbnN1cmVDYXBhY2l0eUZvcik6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxE
YXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgor
ICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Om9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKToKKyAg
ICAgICAgKiBydW50aW1lL0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkZXNj
cmlwdGlvbik6CisKIDIwMTEtMDktMTIgIEFuZHJhcyBCZWNzaSAgPGFuZHJhcy5iZWNzaUBub2tp
YS5jb20+CiAKICAgICAgICAgW1F0XSBCdWlsZCBmYWlscyBhZnRlciByOTQ5MjAgd2l0aCBzdHJp
Y3QgY29tcGlsZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5
NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAJCTBGRDND
ODI3MTQxMTVENEYwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyNDE0MTE1RDIyMDBGRDgxQ0IgLyog
REZHUHJvcGFnYXRvci5oICovOyB9OwogCQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZH
RHJpdmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi87IH07CiAJCTBGRDgyRTIx
MTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODJFMUUxNDE3MkMyRjAwMTc5Qzk0IC8q
IERGR0NhcGFiaWxpdGllcy5jcHAgKi87IH07CisJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAv
KiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEODJFMzcxNDFBQjE0MjAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQw
MDA2NzcxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyog
T1NBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNDAwMDY5MzEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDAwMDY5MjEy
QTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi87IH07CiAJCTE0MDU2NkM0
MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzA4OTRENTBGQUZCQTJEMDAwMDE4NjUg
LyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwICovOyB9OwpAQCAtNzk3LDYgKzc5OCw3IEBACiAJCTBG
RDNDODI0MTQxMTVEMjIwMEZEODFDQiAvKiBERkdQcm9wYWdhdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Byb3BhZ2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdQcm9wYWdh
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDgyRTFFMTQxNzJDMkYwMDE3
OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHQ2FwYWJpbGl0aWVzLmNwcDsgcGF0aCA9IGRmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ4MkUxRjE0MTcyQzJGMDAxNzlD
OTQgLyogREZHQ2FwYWJpbGl0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0NhcGFiaWxpdGllcy5oOyBwYXRoID0gZGZnL0RGR0NhcGFiaWxpdGllcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFj
dEpJVENvZGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcGFjdEpJ
VENvZGVNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4
MzAwNjREMTIzIC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE9TQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjky
MTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTc2LDYgKzE1NzgsNyBAQAogCQkxNDI5RDky
QzBFRDIyRDcwMDBCODk2MTkgLyogaml0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRkQ4MkUzNzE0MUFCMTQyMDAxNzlDOTQgLyogQ29tcGFjdEpJVENv
ZGVNYXAuaCAqLywKIAkJCQlBN0I0OERCNjBFRTc0Q0ZDMDBEQ0JEQjYgLyogRXhlY3V0YWJsZUFs
bG9jYXRvci5jcHAgKi8sCiAJCQkJQTdCNDhEQjUwRUU3NENGQzAwRENCREI2IC8qIEV4ZWN1dGFi
bGVBbGxvY2F0b3IuaCAqLywKIAkJCQk4NkRCNjQ2MzBGOTVDNkZDMDBEN0Q5MjEgLyogRXhlY3V0
YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcCAqLywKQEAgLTIzOTQsNiArMjM5Nyw3IEBACiAJ
CQkJQkMyNTdERTgwRTFGNTFDNTAwMTZCNkM5IC8qIEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJ
VENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2RTBFMTZGNUNE
MDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NjNCMkYxM0ZD
NjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
OTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZm5kZWYgQ29kZUJsb2NrX2gKICNkZWZp
bmUgQ29kZUJsb2NrX2gKIAorI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCiAjaW5jbHVk
ZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAi
SklUQ29kZS5oIgpAQCAtMjk4LDYgKzI5OSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCisgICAgICAgIHZvaWQgc2V0SklUQ29kZU1hcChQYXNzT3duUHRyPENvbXBh
Y3RKSVRDb2RlTWFwPiBqaXRDb2RlTWFwKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ppdENv
ZGVNYXAgPSBqaXRDb2RlTWFwOworICAgICAgICB9CisgICAgICAgIENvbXBhY3RKSVRDb2RlTWFw
KiBqaXRDb2RlTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faml0Q29kZU1h
cC5nZXQoKTsKKyAgICAgICAgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCiAg
ICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNz
KQogICAgICAgICB7CkBAIC02NTEsNiArNjYzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2ppdENvZGVXaXRoQXJpdHlDaGVjazsKICAgICAgICAg
U2VudGluZWxMaW5rZWRMaXN0PENhbGxMaW5rSW5mbywgQmFzaWNSYXdTZW50aW5lbE5vZGU8Q2Fs
bExpbmtJbmZvPiA+IG1faW5jb21pbmdDYWxsczsKICNlbmRpZgorI2lmIEVOQUJMRShUSUVSRURf
Q09NUElMQVRJT04pCisgICAgICAgIE93blB0cjxDb21wYWN0SklUQ29kZU1hcD4gbV9qaXRDb2Rl
TWFwOworI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CiAjZW5kaWYKQEAgLTY2
Niw3ICs2ODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBTeW1ib2xUYWJsZSogbV9z
eW1ib2xUYWJsZTsKIAotICAgICAgICBPd25QdHI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZlOyAv
LyBGSVhNRSBtYWtlIHRoaXMgZG8gc29tZXRoaW5nCisgICAgICAgIE93blB0cjxDb2RlQmxvY2s+
IG1fYWx0ZXJuYXRpdmU7CiAKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzY3LDE0ICszNjcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnQxKS5h
c0ludDMyKCkgPT0gMSk7CiAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnQx
KTsKICAgICB9Ci0KKyAgICAKKyAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3JpZ2luKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4KTsKKyAgICB9CiAK
ICAgICAvLyBUaGVzZSBtZXRob2RzIGNyZWF0ZSBhIG5vZGUgYW5kIGFkZCBpdCB0byB0aGUgZ3Jh
cGguIElmIG5vZGVzIG9mIHRoaXMgdHlwZSBhcmUKICAgICAvLyAnbXVzdEdlbmVyYXRlJyB0aGVu
IHRoZSBub2RlICB3aWxsIGltcGxpY2l0bHkgYmUgcmVmJ2VkIHRvIGVuc3VyZSBnZW5lcmF0aW9u
LgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBOb2RlSW5kZXggY2hpbGQx
ID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0g
Tm9Ob2RlKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJlc3VsdEluZGV4ID0gKE5vZGVJbmRl
eCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShvcCwgbV9jdXJy
ZW50SW5kZXgsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBl
bmQoTm9kZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykp
OwogCiAgICAgICAgIGlmIChvcCAmIE5vZGVNdXN0R2VuZXJhdGUpCiAgICAgICAgICAgICBtX2dy
YXBoLnJlZihyZXN1bHRJbmRleCk7CkBAIC0zODMsNyArMzg3LDcgQEAgcHJpdmF0ZToKICAgICBO
b2RlSW5kZXggYWRkVG9HcmFwaChOb2RlVHlwZSBvcCwgT3BJbmZvIGluZm8sIE5vZGVJbmRleCBj
aGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDMgPSBOb05vZGUpCiAgICAgewogICAgICAgICBOb2RlSW5kZXggcmVzdWx0SW5kZXggPSAoTm9k
ZUluZGV4KW1fZ3JhcGguc2l6ZSgpOwotICAgICAgICBtX2dyYXBoLmFwcGVuZChOb2RlKG9wLCBt
X2N1cnJlbnRJbmRleCwgaW5mbywgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMykpOworICAgICAgICBt
X2dyYXBoLmFwcGVuZChOb2RlKG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvLCBjaGlsZDEs
IGNoaWxkMiwgY2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkK
ICAgICAgICAgICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTM5Miw3ICszOTYsNyBA
QCBwcml2YXRlOgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGVUeXBlIG9wLCBPcEluZm8g
aW5mbzEsIE9wSW5mbyBpbmZvMiwgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUluZGV4
IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKICAgICB7CiAgICAg
ICAgIE5vZGVJbmRleCByZXN1bHRJbmRleCA9IChOb2RlSW5kZXgpbV9ncmFwaC5zaXplKCk7Ci0g
ICAgICAgIG1fZ3JhcGguYXBwZW5kKE5vZGUob3AsIG1fY3VycmVudEluZGV4LCBpbmZvMSwgaW5m
bzIsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9k
ZShvcCwgY3VycmVudENvZGVPcmlnaW4oKSwgaW5mbzEsIGluZm8yLCBjaGlsZDEsIGNoaWxkMiwg
Y2hpbGQzKSk7CiAKICAgICAgICAgaWYgKG9wICYgTm9kZU11c3RHZW5lcmF0ZSkKICAgICAgICAg
ICAgIG1fZ3JhcGgucmVmKHJlc3VsdEluZGV4KTsKQEAgLTQwMiw3ICs0MDYsNyBAQCBwcml2YXRl
OgogICAgIE5vZGVJbmRleCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZ1RhZywgTm9kZVR5cGUgb3As
IE9wSW5mbyBpbmZvMSwgT3BJbmZvIGluZm8yKQogICAgIHsKICAgICAgICAgTm9kZUluZGV4IHJl
c3VsdEluZGV4ID0gKE5vZGVJbmRleCltX2dyYXBoLnNpemUoKTsKLSAgICAgICAgbV9ncmFwaC5h
cHBlbmQoTm9kZShOb2RlOjpWYXJBcmcsIG9wLCBtX2N1cnJlbnRJbmRleCwgaW5mbzEsIGluZm8y
LCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gbV9udW1QYXNzZWRWYXJBcmdzLCBt
X251bVBhc3NlZFZhckFyZ3MpKTsKKyAgICAgICAgbV9ncmFwaC5hcHBlbmQoTm9kZShOb2RlOjpW
YXJBcmcsIG9wLCBjdXJyZW50Q29kZU9yaWdpbigpLCBpbmZvMSwgaW5mbzIsIG1fZ3JhcGgubV92
YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBtX251bVBhc3NlZFZhckFyZ3MsIG1fbnVtUGFzc2VkVmFy
QXJncykpOwogICAgICAgICAKICAgICAgICAgbV9udW1QYXNzZWRWYXJBcmdzID0gMDsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24g
OTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bWJlck9mUmVnaXN0ZXJzID0gOTsKIAogICAgIC8vIFRoZXNlIHJlZ2lzdGVycyBtYXRj
aCB0aGUgb2xkIEpJVC4KKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIGNhY2hlZFJlc3VsdFJlZ2lz
dGVyID0gWDg2UmVnaXN0ZXJzOjplYXg7CiAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyB0aW1lb3V0
Q2hlY2tSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjEyOwogICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgY2FsbEZyYW1lUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OnIxMzsKICAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHRhZ1R5cGVOdW1iZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6cjE0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2
aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25J
bmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwxMiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgdS5mcHIgPSBmcHI7CiAgICAgfQogCi0jaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgYWxpdmUo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdXNlQ291bnQ7CiAgICAgfQotI2VuZGlmCiAKIHBy
aXZhdGU6CiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyBzdG9y
ZWQgaW4gdGhpcyB2aXJ0dWFsIHJlZ2lzdGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDEzICs1MiwxMiBAQCB2b2lk
IEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgTm9kZVR5cGUgb3AgPSBu
b2RlLm9wOwogCiAgICAgdW5zaWduZWQgcmVmQ291bnQgPSBub2RlLnJlZkNvdW50KCk7Ci0gICAg
aWYgKCFyZWZDb3VudCkgewotICAgICAgICBwcmludGYoIiUgNGQ6XHRza2lwcGVkICVzXG4iLCAo
aW50KW5vZGVJbmRleCwgb3BOYW1lKG9wKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
Ym9vbCBza2lwcGVkID0gIXJlZkNvdW50OwogICAgIGJvb2wgbXVzdEdlbmVyYXRlID0gbm9kZS5t
dXN0R2VuZXJhdGUoKTsKLSAgICBpZiAobXVzdEdlbmVyYXRlKQorICAgIGlmIChtdXN0R2VuZXJh
dGUpIHsKKyAgICAgICAgQVNTRVJUKHJlZkNvdW50KTsKICAgICAgICAgLS1yZWZDb3VudDsKKyAg
ICB9CiAKICAgICAvLyBFeGFtcGxlL2V4cGxhbmF0aW9uIG9mIGRhdGFmbG93IGR1bXAgb3V0cHV0
CiAgICAgLy8KQEAgLTc3LDggKzc2LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9k
ZUluZGV4LCBDbwogICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJs
b2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRp
c3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAv
LyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlm
aWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4
IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRH
bG9iYWxWYXIgb3BlcmF0aW9ucy4KLSAgICBwcmludGYoIiUgNGQ6XHQ8JWMldToiLCAoaW50KW5v
ZGVJbmRleCwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7Ci0gICAgaWYgKG5v
ZGUuaGFzUmVzdWx0KCkpCisgICAgcHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlSW5k
ZXgsIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAgIiwgbXVzdEdlbmVyYXRl
ID8gJyEnIDogJyAnLCByZWZDb3VudCk7CisgICAgaWYgKG5vZGUuaGFzUmVzdWx0KCkgJiYgIXNr
aXBwZWQpCiAgICAgICAgIHByaW50ZigiJXUiLCBub2RlLnZpcnR1YWxSZWdpc3RlcigpKTsKICAg
ICBlbHNlCiAgICAgICAgIHByaW50ZigiLSIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA5NDk3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMjYsMTcgKzExMjYsMTcgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbChOb2RlJiBubwogICAgIG1faml0LmFkZFB0cihJbW0zMihtX2ppdC5jb2RlQmxvY2so
KS0+bV9udW1DYWxsZWVSZWdpc3RlcnMgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0g
bV9qaXQubmVhckNhbGwoKTsKLSAgICBtX2ppdC5ub3RpZnlDYWxsKGZhc3RDYWxsLCBtX2ppdC5n
cmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5ub3RpZnlD
YWxsKGZhc3RDYWxsLCBtX2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsK
ICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAog
ICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hZGRQdHIoSW1tMzIo
bV9qaXQuY29kZUJsb2NrKCktPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzICogc2l6ZW9mKFJlZ2lzdGVy
KSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwot
ICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQuYXBwZW5kQ2FsbFdpdGhGYXN0
RXhjZXB0aW9uQ2hlY2soc2xvd0NhbGxGdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJ
bmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBt
X2ppdC5hcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhzbG93Q2FsbEZ1bmN0aW9uLCBt
X2ppdC5ncmFwaCgpW21fY29tcGlsZUluZGV4XS5jb2RlT3JpZ2luKTsKICAgICBtX2ppdC5tb3Zl
KEltbTMyKG51bUFyZ3MpLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgbV9qaXQuYWRkUHRyKEltbTMy
KG1faml0LmNvZGVCbG9jaygpLT5tX251bUNhbGxlZVJlZ2lzdGVycyAqIHNpemVvZihSZWdpc3Rl
cikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgbV9qaXQubm90aWZ5Q2FsbCht
X2ppdC5jYWxsKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBp
bGVJbmRleF0uZXhjZXB0aW9uSW5mbyk7CisgICAgbV9qaXQubm90aWZ5Q2FsbChtX2ppdC5jYWxs
KEdQUkluZm86OnJldHVyblZhbHVlR1BSKSwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0u
Y29kZU9yaWdpbik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCkBAIC0xMTQ0
LDcgKzExNDQsNyBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKE5vZGUmIG5vCiAg
ICAgCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9y
bWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgCi0gICAgbV9qaXQuYWRk
SlNDYWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaXNDYWxsLCBtX2ppdC5n
cmFwaCgpW21fY29tcGlsZUluZGV4XS5leGNlcHRpb25JbmZvKTsKKyAgICBtX2ppdC5hZGRKU0Nh
bGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIG1faml0LmdyYXBo
KClbbV9jb21waWxlSW5kZXhdLmNvZGVPcmlnaW4pOwogfQogCiB2b2lkIEpJVENvZGVHZW5lcmF0
b3I6OnNwZWN1bGF0aW9uQ2hlY2soTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
CShyZXZpc2lvbiA5NDk3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8
ZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg+CiAjaW5jbHVkZSA8ZGZnL0RGR0dyYXBoLmg+CiAjaW5j
bHVkZSA8ZGZnL0RGR0pJVENvbXBpbGVyLmg+CisjaW5jbHVkZSA8ZGZnL0RGR05vZGUuaD4KICNp
bmNsdWRlIDxkZmcvREZHT3BlcmF0aW9ucy5oPgogI2luY2x1ZGUgPGRmZy9ERkdSZWdpc3RlckJh
bmsuaD4KIApAQCAtOTA3LDcgKzkwOCw3IEBAIHByb3RlY3RlZDoKIAogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25QdHImIGZ1
bmN0aW9uKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faml0LmFwcGVuZENhbGxXaXRoRXhjZXB0
aW9uQ2hlY2soZnVuY3Rpb24sIG1faml0LmdyYXBoKClbbV9jb21waWxlSW5kZXhdLmV4Y2VwdGlv
bkluZm8pOworICAgICAgICByZXR1cm4gbV9qaXQuYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVj
ayhmdW5jdGlvbiwgbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJbmRleF0uY29kZU9yaWdpbik7CiAg
ICAgfQogCiAgICAgdm9pZCBhZGRCcmFuY2goY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXAmIGp1
bXAsIEJsb2NrSW5kZXggZGVzdGluYXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAw
LDYgKzEwMCwzNDAgQEAgdm9pZCBKSVRDb21waWxlcjo6ZmlsbFRvSlMoTm9kZUluZGV4IG5vZAog
ICAgIGxvYWRQdHIoYWRkcmVzc0Zvcihub2RlLnZpcnR1YWxSZWdpc3RlcigpKSwgZ3ByKTsKIH0K
IAorI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCit2b2lkIEpJVENvbXBpbGVyOjpleGl0U3BlY3Vs
YXRpdmVXaXRoT1NSKGNvbnN0IE9TUkV4aXQmIGV4aXQsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqIHJl
Y292ZXJ5LCBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAp
Cit7CisgICAgLy8gMSkgUHJvLWZvcm1hIHN0dWZmLgorICAgIGV4aXQubV9jaGVjay5saW5rKHRo
aXMpOworCisjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQorICAgIGZwcmludGYoc3RkZXJy
LCAiT1NSIGV4aXQgZm9yIE5vZGUgQCVkIChiYyMldSkgYXQgSklUIG9mZnNldCAweCV4ICAgIiwg
KGludClleGl0Lm1fbm9kZUluZGV4LCBleGl0Lm1fYnl0ZWNvZGVJbmRleCwgZGVidWdPZmZzZXQo
KSk7CisgICAgZXhpdC5kdW1wKHN0ZGVycik7CisjZW5kaWYKKyNpZiBFTkFCTEUoREZHX0pJVF9C
UkVBS19PTl9TUEVDVUxBVElPTl9GQUlMVVJFKQorICAgIGJyZWFrcG9pbnQoKTsKKyNlbmRpZgor
ICAgIAorI2lmIEVOQUJMRShERkdfVkVSQk9TRV9TUEVDVUxBVElPTl9GQUlMVVJFKQorICAgIFNw
ZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyogZGVidWdJbmZvID0gbmV3IFNwZWN1bGF0aW9uRmFp
bHVyZURlYnVnSW5mbzsKKyAgICBkZWJ1Z0luZm8tPmNvZGVCbG9jayA9IG1fY29kZUJsb2NrOwor
ICAgIGRlYnVnSW5mby0+ZGVidWdPZmZzZXQgPSBkZWJ1Z09mZnNldCgpOworICAgIAorICAgIGRl
YnVnQ2FsbChkZWJ1Z09wZXJhdGlvblByaW50U3BlY3VsYXRpb25GYWlsdXJlLCBkZWJ1Z0luZm8p
OworI2VuZGlmCisgICAgCisgICAgLy8gMikgUGVyZm9ybSBzcGVjdWxhdGlvbiByZWNvdmVyeS4g
VGhpcyBvbmx5IGNvbWVzIGludG8gcGxheSB3aGVuIGFuIG9wZXJhdGlvbgorICAgIC8vICAgIHN0
YXJ0cyBtdXRhdGluZyBzdGF0ZSBiZWZvcmUgdmVyaWZ5aW5nIHRoZSBzcGVjdWxhdGlvbiBpdCBo
YXMgYWxyZWFkeSBtYWRlLgorICAgIAorICAgIEdQUlJlZyBhbHJlYWR5Qm94ZWQgPSBJbnZhbGlk
R1BSUmVnOworICAgIAorICAgIGlmIChyZWNvdmVyeSkgeworICAgICAgICBzd2l0Y2ggKHJlY292
ZXJ5LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBTcGVjdWxhdGl2ZUFkZDoKKyAgICAgICAgICAg
IHN1YjMyKHJlY292ZXJ5LT5zcmMoKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBv
clB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOwor
ICAgICAgICAgICAgYWxyZWFkeUJveGVkID0gcmVjb3ZlcnktPmRlc3QoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQm9vbGVhblNwZWN1bGF0aW9uQ2hl
Y2s6CisgICAgICAgICAgICB4b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlRmFsc2UpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyAzKSBGaWd1cmUgb3V0IGhvdyBtYW55IHNjcmF0Y2ggc2xvdHMg
d2UnbGwgbmVlZC4gV2UgbmVlZCBvbmUgZm9yIGV2ZXJ5IEdQUi9GUFIKKyAgICAvLyAgICB3aG9z
ZSBkZXN0aW5hdGlvbiBpcyBub3cgb2NjdXBpZWQgYnkgYSBERkcgdmlydHVhbCByZWdpc3Rlciwg
YW5kIHdlIG5lZWQKKyAgICAvLyAgICBvbmUgZm9yIGV2ZXJ5IGRpc3BsYWNlZCB2aXJ0dWFsIHJl
Z2lzdGVyIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4KKyAgICAvLyAgICBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVycyBvZiB0aGVtLiBBbHNvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGNvbnN0YW50cywK
KyAgICAvLyAgICBhbnkgdW5kZWZpbmVkIHNsb3RzLCBhbnkgRlBSIHNsb3RzLCBhbmQgYW55IHVu
Ym94ZWQgaW50cy4KKyAgICAgICAgICAgIAorICAgIFZlY3Rvcjxib29sPiBwb2lzb25lZFZpcnR1
YWxSZWdpc3RlcnMoZXhpdC5tX3ZhcmlhYmxlcy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMuc2l6ZSgpOyArK2kpCisgICAgICAg
IHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tpXSA9IGZhbHNlOworCisgICAgdW5zaWduZWQgbnVt
YmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMgPSAwOworICAgIHVuc2lnbmVkIG51bWJlck9m
RGlzcGxhY2VkVmlydHVhbFJlZ2lzdGVycyA9IDA7CisgICAgCisgICAgLy8gQm9vbGVhbnMgZm9y
IGZhc3QgY2hlY2tzLiBXZSBleHBlY3QgdGhhdCBtb3N0IE9TUiBleGl0cyBkbyBub3QgaGF2ZSB0
byByZWJveAorICAgIC8vIEludDMycywgaGF2ZSBubyBGUFJzLCBhbmQgaGF2ZSBubyBjb25zdGFu
dHMuIElmIHRoZXJlIGFyZSBjb25zdGFudHMsIHdlCisgICAgLy8gZXhwZWN0IG1vc3Qgb2YgdGhl
bSB0byBiZSBqc1VuZGVmaW5lZCgpOyBpZiB0aGF0J3MgdHJ1ZSB0aGVuIHdlIGhhbmRsZSB0aGF0
CisgICAgLy8gc3BlY2lhbGx5IHRvIG1pbmltaXplIGNvZGUgc2l6ZSBhbmQgZXhlY3V0aW9uIHRp
bWUuCisgICAgYm9vbCBoYXZlVW5ib3hlZEludDMycyA9IGZhbHNlOworICAgIGJvb2wgaGF2ZUZQ
UnMgPSBmYWxzZTsKKyAgICBib29sIGhhdmVDb25zdGFudHMgPSBmYWxzZTsKKyAgICBib29sIGhh
dmVVbmRlZmluZWQgPSBmYWxzZTsKKyAgICAKKyAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4
IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICBjb25zdCBW
YWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAg
ICAgIHN3aXRjaCAocmVjb3ZlcnkudGVjaG5pcXVlKCkpIHsKKyAgICAgICAgY2FzZSBEaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgICAgIG51bWJlck9mRGlzcGxhY2VkVmlydHVhbFJl
Z2lzdGVycysrOworICAgICAgICAgICAgQVNTRVJUKChpbnQpcmVjb3ZlcnkudmlydHVhbFJlZ2lz
dGVyKCkgPj0gMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSBtaWdo
dCBsaWtlIHRvIHN0b3JlIHRvIHRoaXMgdmlydHVhbCByZWdpc3RlciBiZWZvcmUgZG9pbmcKKyAg
ICAgICAgICAgIC8vIHZpcnR1YWwgcmVnaXN0ZXIgc2h1ZmZsaW5nLiBJZiBzbywgd2Ugc2F5IHRo
YXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIKKyAgICAgICAgICAgIC8vIGlzIHBvaXNvbmVkOiBpdCBj
YW5ub3QgYmUgc3RvcmVkIHRvIHVudGlsIGFmdGVyIGRpc3BsYWNlZCB2aXJ0dWFsCisgICAgICAg
ICAgICAvLyByZWdpc3RlcnMgYXJlIGhhbmRsZWQuIFdlIHRyYWNrIHBvaXNvbmVkIHZpcnR1YWwg
cmVnaXN0ZXIgY2FyZWZ1bGx5CisgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhpcyBoYXBwZW5z
IGVmZmljaWVudGx5LiBOb3RlIHRoYXQgd2UgZXhwZWN0IHRoaXMgY2FzZQorICAgICAgICAgICAg
Ly8gdG8gYmUgcmFyZSwgc28gdGhlIGhhbmRsaW5nIG9mIGl0IGlzIG9wdGltaXplZCBmb3IgdGhl
IGNhc2VzIGluCisgICAgICAgICAgICAvLyB3aGljaCBpdCBkb2VzIG5vdCBoYXBwZW4uCisgICAg
ICAgICAgICBpZiAocmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkgPCAoaW50KWV4aXQubV92YXJp
YWJsZXMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChleGl0Lm1fdmFyaWFibGVz
W3JlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpXS50ZWNobmlxdWUoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgSW5HUFI6CisgICAgICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoK
KyAgICAgICAgICAgICAgICBjYXNlIEluRlBSOgorICAgICAgICAgICAgICAgICAgICBpZiAoIXBv
aXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52aXJ0dWFsUmVnaXN0ZXIoKV0pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBvaXNvbmVkVmlydHVhbFJlZ2lzdGVyc1tyZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKV0gPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVy
T2ZQb2lzb25lZFZpcnR1YWxSZWdpc3RlcnMrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVuYm94ZWRJbnQz
MkluR1BSOgorICAgICAgICAgICAgaGF2ZVVuYm94ZWRJbnQzMnMgPSB0cnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbkZQUjoKKyAgICAgICAgICAg
IGhhdmVGUFJzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgICAgICBoYXZlQ29uc3RhbnRzID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmIChyZWNvdmVyeS5jb25zdGFudCgpLmlzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgaGF2ZVVuZGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgRW5jb2RlZEpTVmFsdWUqIHNjcmF0Y2hCdWZmZXIgPSBzdGF0aWNf
Y2FzdDxFbmNvZGVkSlNWYWx1ZSo+KGdsb2JhbERhdGEoKS0+b3NyU2NyYXRjaEJ1ZmZlckZvclNp
emUoc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lz
dGVycyArIChudW1iZXJPZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnMgPyAwIDogbnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSkp
KTsKKworICAgIC8vIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGl0IGlzIHBy
b2ZpdGFibGUgdG8gbWF4aW1pemUgdGhlIGRpc3RhbmNlCisgICAgLy8gYmV0d2VlbiB3aGVuIHNv
bWV0aGluZyBpcyBjb21wdXRlZCBhbmQgd2hlbiBpdCBpcyBzdG9yZWQuCisgICAgCisgICAgLy8g
NCkgUGVyZm9ybSBhbGwgcmVib3hpbmcgb2YgaW50ZWdlcnMuCisgICAgCisgICAgaWYgKGhhdmVV
bmJveGVkSW50MzJzKSB7CisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBleGl0
Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICBjb25zdCBWYWx1
ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAg
ICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgPT0gVW5ib3hlZEludDMySW5HUFIgJiYgcmVj
b3ZlcnkuZ3ByKCkgIT0gYWxyZWFkeUJveGVkKQorICAgICAgICAgICAgICAgIG9yUHRyKEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVjb3ZlcnkuZ3ByKCkpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIDUpIER1bXAgYWxsIG5vbi1wb2lzb25lZCBHUFJzLiBGb3IgcG9p
c29uZWQgR1BScywgc2F2ZSB0aGVtIGludG8gdGhlIHNjcmF0Y2ggc3RvcmFnZS4KKyAgICAvLyAg
ICBOb3RlIHRoYXQgR1BScyBkbyBub3QgaGF2ZSBhIGZhc3QgY2hhbmdlIChsaWtlIGhhdmVGUFJz
KSBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0CisgICAgLy8gICAgbW9zdCBPU1IgZmFpbHVyZSBwb2lu
dHMgd2lsbCBoYXZlIGF0IGxlYXN0IG9uZSBHUFIgdGhhdCBuZWVkcyB0byBiZSBkdW1wZWQuCisg
ICAgCisgICAgdW5zaWduZWQgc2NyYXRjaEluZGV4ID0gMDsKKyAgICBmb3IgKGludCBpbmRleCA9
IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRl
eCk7CisgICAgICAgIGludCBvcGVyYW5kID0gZXhpdC5vcGVyYW5kRm9ySW5kZXgoaW5kZXgpOwor
ICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgIGNhc2UgSW5H
UFI6CisgICAgICAgIGNhc2UgVW5ib3hlZEludDMySW5HUFI6CisgICAgICAgICAgICBpZiAoZXhp
dC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbZXhpdC52YXJp
YWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVjb3Zlcnku
Z3ByKCksIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgc3RvcmVQdHIocmVjb3ZlcnkuZ3ByKCksIGFkZHJlc3NGb3IoKFZp
cnR1YWxSZWdpc3RlcilvcGVyYW5kKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8v
IEF0IHRoaXMgcG9pbnQgYWxsIEdQUnMgYXJlIGF2YWlsYWJsZSBmb3Igc2NyYXRjaCB1c2UuCisg
ICAgCisgICAgaWYgKGhhdmVGUFJzKSB7CisgICAgICAgIC8vIDYpIEJveCBhbGwgZG91YmxlcyAo
cmVsaWVzIG9uIHRoZXJlIGJlaW5nIG1vcmUgR1BScyB0aGFuIEZQUnMpCisgICAgICAgIAorICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IEluRlBSKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgRlBSUmVnIGZwciA9IHJlY292ZXJ5LmZwcigpOworICAgICAgICAgICAgR1BSUmVnIGdwciA9
IEdQUkluZm86OnRvUmVnaXN0ZXIoRlBSSW5mbzo6dG9JbmRleChmcHIpKTsKKyAgICAgICAgICAg
IGJveERvdWJsZShmcHIsIGdwcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIDcp
IER1bXAgYWxsIGRvdWJsZXMgaW50byB0aGUgcmVnaXN0ZXIgZmlsZSwgb3IgdG8gdGhlIHNjcmF0
Y2ggc3RvcmFnZSBpZgorICAgICAgICAvLyAgICB0aGUgZGVzdGluYXRpb24gdmlydHVhbCByZWdp
c3RlciBpcyBwb2lzb25lZC4KKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsg
aW5kZXggPCBleGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQudmFsdWVSZWNvdmVyeShpbmRl
eCk7CisgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gSW5GUFIpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gR1BSSW5mbzo6
dG9SZWdpc3RlcihGUFJJbmZvOjp0b0luZGV4KHJlY292ZXJ5LmZwcigpKSk7CisgICAgICAgICAg
ICBpZiAoZXhpdC5pc1ZhcmlhYmxlKGluZGV4KSAmJiBwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNb
ZXhpdC52YXJpYWJsZUZvckluZGV4KGluZGV4KV0pCisgICAgICAgICAgICAgICAgc3RvcmVQdHIo
Z3ByLCBzY3JhdGNoQnVmZmVyICsgc2NyYXRjaEluZGV4KyspOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHN0b3JlUHRyKGdwciwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIEFTU0VSVChzY3JhdGNoSW5kZXggPT0gbnVtYmVyT2ZQb2lzb25lZFZpcnR1YWxSZWdpc3Rl
cnMpOworICAgIAorICAgIC8vIDgpIFJlc2h1ZmZsZSBkaXNwbGFjZWQgdmlydHVhbCByZWdpc3Rl
cnMuIE9wdGltaXplIGZvciB0aGUgY2FzZSB0aGF0CisgICAgLy8gICAgdGhlIG51bWJlciBvZiBk
aXNwbGFjZWQgdmlydHVhbCByZWdpc3RlcnMgaXMgbm90IG1vcmUgdGhhbiB0aGUgbnVtYmVyCisg
ICAgLy8gICAgb2YgYXZhaWxhYmxlIHBoeXNpY2FsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBpZiAo
bnVtYmVyT2ZEaXNwbGFjZWRWaXJ0dWFsUmVnaXN0ZXJzKSB7CisgICAgICAgIGlmIChudW1iZXJP
ZkRpc3BsYWNlZFZpcnR1YWxSZWdpc3RlcnMgPD0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMp
IHsKKyAgICAgICAgICAgIC8vIFNvIGZhciB0aGlzIGFwcGVhcnMgdG8gYmUgdGhlIGNhc2UgdGhh
dCB0cmlnZ2VycyBhbGwgdGhlIHRpbWUsIGJ1dAorICAgICAgICAgICAgLy8gdGhhdCBpcyBmYXIg
ZnJvbSBndWFyYW50ZWVkLgorICAgICAgICAKKyAgICAgICAgICAgIHVuc2lnbmVkIGRpc3BsYWNl
bWVudEluZGV4ID0gMDsKKyAgICAgICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBl
eGl0Lm51bWJlck9mUmVjb3ZlcmllcygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgY29u
c3QgVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOwor
ICAgICAgICAgICAgICAgIGlmIChyZWNvdmVyeS50ZWNobmlxdWUoKSAhPSBEaXNwbGFjZWRJblJl
Z2lzdGVyRmlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgbG9hZFB0cihhZGRyZXNzRm9yKHJlY292ZXJ5LnZpcnR1YWxSZWdpc3RlcigpKSwgR1BSSW5m
bzo6dG9SZWdpc3RlcihkaXNwbGFjZW1lbnRJbmRleCsrKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICAgICAgZGlzcGxhY2VtZW50SW5kZXggPSAwOworICAgICAgICAgICAgZm9y
IChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4
aXQudmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0cihHUFJJbmZvOjp0b1JlZ2lzdGVy
KGRpc3BsYWNlbWVudEluZGV4KyspLCBhZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpZXhpdC5v
cGVyYW5kRm9ySW5kZXgoaW5kZXgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIHRoZSBzaHVmZmxpbmcgYWxn
b3JpdGhtIHRoYXQgd2UgdXNlCisgICAgICAgICAgICAvLyBmb3Igc3BlY3VsYXRpdmUtPm5vbi1z
cGVjdWxhdGl2ZSBqdW1wcywgaWYgd2UgZXZlciBkaXNjb3ZlciB0aGF0CisgICAgICAgICAgICAv
LyBzb21lIGhvdCBjb2RlIHdpdGggbG90cyBvZiBsaXZlIHZhbHVlcyB0aGF0IGdldCBkaXNwbGFj
ZWQgYW5kCisgICAgICAgICAgICAvLyBzcGlsbGVkIHJlYWxseSBlbmpveXMgZnJlcXVlbnRseSBm
YWlsaW5nIHNwZWN1bGF0aW9uLgorICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvciBub3cgdGhp
cyBjb2RlIGlzIGVuZ2luZWVyZWQgdG8gYmUgY29ycmVjdCBidXQgcHJvYmFibHkgbm90CisgICAg
ICAgICAgICAvLyBzdXBlci4gSW4gcGFydGljdWxhciwgaXQgY29ycmVjdGx5IGhhbmRsZXMgY2Fz
ZXMgd2hlcmUgZm9yIGV4YW1wbGUKKyAgICAgICAgICAgIC8vIHRoZSBkaXNwbGFjZW1lbnRzIGFy
ZSBhIHBlcm11dGF0aW9uIG9mIHRoZSBkZXN0aW5hdGlvbiB2YWx1ZXMsIGxpa2UKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyAxIC0+IDIKKyAgICAgICAgICAgIC8vIDIgLT4gMQorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IHNpbXBs
eSBsaWZ0aW5nIGFsbCBvZiB0aGUgdmlydHVhbCByZWdpc3RlcnMKKyAgICAgICAgICAgIC8vIGZy
b20gdGhlaXIgb2xkIChERkcgSklUKSBsb2NhdGlvbnMgYW5kIGRyb3BwaW5nIHRoZW0gaW4gYSBz
Y3JhdGNoCisgICAgICAgICAgICAvLyBsb2NhdGlvbiBpbiBtZW1vcnksIGFuZCB0aGVuIHRyYW5z
ZmVycmluZyBmcm9tIHRoYXQgc2NyYXRjaCBsb2NhdGlvbgorICAgICAgICAgICAgLy8gdG8gdGhl
aXIgbmV3IChvbGQgSklUKSBsb2NhdGlvbnMuCisgICAgICAgIAorICAgICAgICAgICAgZm9yIChp
bnQgaW5kZXggPSAwOyBpbmRleCA8IGV4aXQubnVtYmVyT2ZSZWNvdmVyaWVzKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSA9IGV4aXQu
dmFsdWVSZWNvdmVyeShpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRlY2hu
aXF1ZSgpICE9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IocmVjb3Zlcnkudmly
dHVhbFJlZ2lzdGVyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgc3RvcmVQ
dHIoR1BSSW5mbzo6cmVnVDAsIHNjcmF0Y2hCdWZmZXIgKyBzY3JhdGNoSW5kZXgrKyk7CisgICAg
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgc2NyYXRjaEluZGV4ID0gbnVtYmVyT2ZQ
b2lzb25lZFZpcnR1YWxSZWdpc3RlcnM7CisgICAgICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7
IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMoKTsgKytpbmRleCkgeworICAgICAgICAg
ICAgICAgIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5ID0gZXhpdC52YWx1ZVJlY292ZXJ5
KGluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnkudGVjaG5pcXVlKCkgIT0gRGlz
cGxhY2VkSW5SZWdpc3RlckZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGxvYWRQdHIoc2NyYXRjaEJ1ZmZlciArIHNjcmF0Y2hJbmRleCsrLCBHUFJJ
bmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDAsIGFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm9wZXJhbmRGb3JJbmRleChpbmRleCkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQoc2NyYXRjaEluZGV4
ID09IG51bWJlck9mUG9pc29uZWRWaXJ0dWFsUmVnaXN0ZXJzICsgbnVtYmVyT2ZEaXNwbGFjZWRW
aXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyA5KSBEdW1w
IGFsbCBwb2lzb25lZCB2aXJ0dWFsIHJlZ2lzdGVycy4KKyAgICAKKyAgICBzY3JhdGNoSW5kZXgg
PSAwOworICAgIGlmIChudW1iZXJPZlBvaXNvbmVkVmlydHVhbFJlZ2lzdGVycykgeworICAgICAg
ICBmb3IgKGludCB2aXJ0dWFsUmVnaXN0ZXIgPSAwOyB2aXJ0dWFsUmVnaXN0ZXIgPCAoaW50KWV4
aXQubV92YXJpYWJsZXMuc2l6ZSgpOyArK3ZpcnR1YWxSZWdpc3RlcikgeworICAgICAgICAgICAg
aWYgKCFwb2lzb25lZFZpcnR1YWxSZWdpc3RlcnNbdmlydHVhbFJlZ2lzdGVyXSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uc3QgVmFsdWVS
ZWNvdmVyeSYgcmVjb3ZlcnkgPSBleGl0Lm1fdmFyaWFibGVzW3ZpcnR1YWxSZWdpc3Rlcl07Cisg
ICAgICAgICAgICBzd2l0Y2ggKHJlY292ZXJ5LnRlY2huaXF1ZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEluR1BSOgorICAgICAgICAgICAgY2FzZSBVbmJveGVkSW50MzJJbkdQUjoKKyAgICAgICAg
ICAgIGNhc2UgSW5GUFI6CisgICAgICAgICAgICAgICAgbG9hZFB0cihzY3JhdGNoQnVmZmVyICsg
c2NyYXRjaEluZGV4KyssIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICBzdG9yZVB0
cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKXZpcnR1YWxSZWdp
c3RlcikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICBBU1NFUlQoc2NyYXRjaEluZGV4ID09IG51bWJlck9mUG9pc29u
ZWRWaXJ0dWFsUmVnaXN0ZXJzKTsKKyAgICAKKyAgICAvLyAxMCkgRHVtcCBhbGwgY29uc3RhbnRz
LiBPcHRpbWl6ZSBmb3IgVW5kZWZpbmVkLCBzaW5jZSB0aGF0J3MgYSBjb25zdGFudCB3ZSBzZWUK
KyAgICAvLyAgICAgb2Z0ZW4uCisKKyAgICBpZiAoaGF2ZUNvbnN0YW50cykgeworICAgICAgICBp
ZiAoaGF2ZVVuZGVmaW5lZCkKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhpdC5udW1iZXJPZlJlY292ZXJpZXMo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgY29uc3QgVmFsdWVSZWNvdmVyeSYgcmVjb3Zlcnkg
PSBleGl0LnZhbHVlUmVjb3ZlcnkoaW5kZXgpOworICAgICAgICAgICAgaWYgKHJlY292ZXJ5LnRl
Y2huaXF1ZSgpICE9IENvbnN0YW50KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaWYgKHJlY292ZXJ5LmNvbnN0YW50KCkuaXNVbmRlZmluZWQoKSkKKyAgICAgICAgICAg
ICAgICBzdG9yZVB0cihHUFJJbmZvOjpyZWdUMCwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVy
KWV4aXQub3BlcmFuZEZvckluZGV4KGluZGV4KSkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKHJlY292ZXJ5
LmNvbnN0YW50KCkpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQub3BlcmFuZEZv
ckluZGV4KGluZGV4KSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIDExKSBMb2Fk
IHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYnl0ZWNvZGUgb3BlcmF0aW9uIGludG8gcmVnVDAuCisg
ICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKQorICAgICAgICBsb2FkUHRyKGFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rl
cilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7
CisgICAgCisgICAgLy8gMTIpIEZpeCBjYWxsIGZyYW1lLgorICAgIAorICAgIEFTU0VSVChjb2Rl
QmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKGNvZGVCbG9jaygpLT5hbHRlcm5hdGl2
ZSgpKSwgYWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKVJlZ2lzdGVyRmlsZTo6Q29kZUJsb2Nr
KSk7CisgICAgCisgICAgLy8gMTMpIEp1bXAgaW50byB0aGUgY29ycmVzcG9uZGluZyBiYXNlbGlu
ZSBKSVQgY29kZS4KKyAgICAKKyAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcg
PSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZCwgQnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4PihkZWNvZGVkQ29kZU1hcC5iZWdp
bigpLCBkZWNvZGVkQ29kZU1hcC5zaXplKCksIGV4aXQubV9ieXRlY29kZUluZGV4KTsKKyAgICAK
KyAgICBBU1NFUlQobWFwcGluZyk7CisgICAgQVNTRVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRl
eCA9PSBleGl0Lm1fYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgdm9pZCoganVtcFRhcmdldCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb2Rl
QmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+Z2V0SklUQ29kZSgpLnN0YXJ0KCkpICsgbWFwcGluZy0+
bV9tYWNoaW5lQ29kZU9mZnNldCk7CisgICAgCisgICAgQVNTRVJUKEdQUkluZm86OnJlZ1QxICE9
IEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoanVtcFRhcmdldCksIEdQUkluZm86OnJlZ1QxKTsKKyAgICBqdW1wKEdQUkluZm86OnJl
Z1QxKTsKKworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgIiAgIC0+ICVwXG4iLCBqdW1wVGFyZ2V0KTsKKyNlbmRpZgorfQorCit2b2lkIEpJVENvbXBp
bGVyOjpsaW5rT1NSRXhpdHMoU3BlY3VsYXRpdmVKSVQmIHNwZWN1bGF0aXZlKQoreworICAgIFZl
Y3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+IGRlY29kZWRDb2RlTWFwOworICAgIEFTU0VS
VChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKSk7CisgICAgQVNTRVJUKGNvZGVCbG9jaygpLT5h
bHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAg
IEFTU0VSVChjb2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgpKTsKKyAgICBj
b2RlQmxvY2soKS0+YWx0ZXJuYXRpdmUoKS0+aml0Q29kZU1hcCgpLT5kZWNvZGUoZGVjb2RlZENv
ZGVNYXApOworICAgIAorICAgIE9TUkV4aXRWZWN0b3I6Okl0ZXJhdG9yIGV4aXRzSXRlciA9IHNw
ZWN1bGF0aXZlLm9zckV4aXRzKCkuYmVnaW4oKTsKKyAgICBPU1JFeGl0VmVjdG9yOjpJdGVyYXRv
ciBleGl0c0VuZCA9IHNwZWN1bGF0aXZlLm9zckV4aXRzKCkuZW5kKCk7CisgICAgCisgICAgd2hp
bGUgKGV4aXRzSXRlciAhPSBleGl0c0VuZCkgeworICAgICAgICBjb25zdCBPU1JFeGl0JiBleGl0
ID0gKmV4aXRzSXRlcjsKKyAgICAgICAgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihleGl0LCBzcGVj
dWxhdGl2ZS5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4KSwgZGVjb2Rl
ZENvZGVNYXApOworICAgICAgICArK2V4aXRzSXRlcjsKKyAgICB9Cit9CisjZWxzZSAvLyBFTkFC
TEUoREZHX09TUl9FWElUKQogY2xhc3MgR2VuZXJhbGl6ZWRSZWdpc3RlciB7CiBwdWJsaWM6CiAg
ICAgR2VuZXJhbGl6ZWRSZWdpc3RlcigpIHsgfQpAQCAtODAzLDYgKzExMzcsNyBAQCB2b2lkIEpJ
VENvbXBpbGVyOjpsaW5rU3BlY3VsYXRpb25DaGVja3MoCiAgICAgQVNTRVJUKCEoY2hlY2tzSXRl
ciAhPSBjaGVja3NFbmQpKTsKICAgICBBU1NFUlQoIShlbnRyaWVzSXRlciAhPSBlbnRyaWVzRW5k
KSk7CiB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19PU1JfRVhJVCkKIAogdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZUVudHJ5KCkKIHsKQEAgLTg0NCwxMiArMTE3OSwxNiBAQCB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlQm9keSgpCiAgICAgLy8gdG8gYWxsb3cgaXQgdG8gY2hlY2sgd2hpY2ggbm9k
ZXMgaW4gdGhlIGdyYXBoIG1heSBiYWlsIG91dCwgYW5kIG1heSBuZWVkIHRvIHJlZW50ZXIgdGhl
CiAgICAgLy8gbm9uLXNwZWN1bGF0aXZlIHBhdGguCiAgICAgaWYgKGNvbXBpbGVkU3BlY3VsYXRp
dmUpIHsKKyNpZiBFTkFCTEUoREZHX09TUl9FWElUKQorICAgICAgICBsaW5rT1NSRXhpdHMoc3Bl
Y3VsYXRpdmUpOworI2Vsc2UKICAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3Ig
Y2hlY2tJdGVyYXRvcihzcGVjdWxhdGl2ZS5zcGVjdWxhdGlvbkNoZWNrcygpKTsKICAgICAgICAg
Tm9uU3BlY3VsYXRpdmVKSVQgbm9uU3BlY3VsYXRpdmUoKnRoaXMpOwogICAgICAgICBub25TcGVj
dWxhdGl2ZS5jb21waWxlKGNoZWNrSXRlcmF0b3IpOwogCiAgICAgICAgIC8vIExpbmsgdGhlIGJh
aWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBjb3JyZXNwb25kaW5nIGVu
dHJ5IHBvaW50cyBpbnRvIHRoZSBub24tc3BlY3VsYXRpdmUgb25lLgogICAgICAgICBsaW5rU3Bl
Y3VsYXRpb25DaGVja3Moc3BlY3VsYXRpdmUsIG5vblNwZWN1bGF0aXZlKTsKKyNlbmRpZgogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIElmIGNvbXBpbGF0aW9uIHRocm91Z2ggdGhlIFNwZWN1bGF0
aXZlSklUIGZhaWxlZCwgdGhyb3cgYXdheSB0aGUgY29kZSB3ZSBnZW5lcmF0ZWQuCiAgICAgICAg
IG1fY2FsbHMuY2xlYXIoKTsKQEAgLTg1OCw4ICsxMTk3LDEyIEBAIHZvaWQgSklUQ29tcGlsZXI6
OmNvbXBpbGVCb2R5KCkKICAgICAgICAgbV9tZXRob2RHZXRzLmNsZWFyKCk7CiAgICAgICAgIHJl
d2luZFRvTGFiZWwoc3BlY3VsYXRpdmVQYXRoQmVnaW4pOwogCisjaWYgRU5BQkxFKERGR19PU1Jf
RVhJVCkKKyAgICAgICAgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgY2hlY2tJdGVyYXRv
cjsKKyNlbHNlCiAgICAgICAgIFNwZWN1bGF0aW9uQ2hlY2tWZWN0b3Igbm9DaGVja3M7CiAgICAg
ICAgIFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0ZXJhdG9yIGNoZWNrSXRlcmF0b3Iobm9DaGVja3Mp
OworI2VuZGlmCiAgICAgICAgIE5vblNwZWN1bGF0aXZlSklUIG5vblNwZWN1bGF0aXZlKCp0aGlz
KTsKICAgICAgICAgbm9uU3BlY3VsYXRpdmUuY29tcGlsZShjaGVja0l0ZXJhdG9yKTsKICAgICB9
CkBAIC05MDcsNyArMTI1MCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYg
bGlua0IKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgIGlmIChtX2NhbGxzW2ldLm1faGFuZGxlc0V4Y2VwdGlvbnMpIHsK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCByZXR1cm5BZGRyZXNzT2Zmc2V0ID0gbGlua0J1ZmZl
ci5yZXR1cm5BZGRyZXNzT2Zmc2V0KG1fY2FsbHNbaV0ubV9jYWxsKTsKLSAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBleGNlcHRpb25JbmZvID0gbV9jYWxsc1tpXS5tX2V4Y2VwdGlvbkluZm87Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZXhjZXB0aW9uSW5mbyA9IG1fY2FsbHNbaV0ubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgoKTsKICAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+Y2Fs
bFJldHVybkluZGV4VmVjdG9yKCkuYXBwZW5kKENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zm
c2V0KHJldHVybkFkZHJlc3NPZmZzZXQsIGV4Y2VwdGlvbkluZm8pKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAgY2xhc3MgU3BlY3Vs
YXRpb25SZWNvdmVyeTsKIAogc3RydWN0IEVudHJ5TG9jYXRpb247CiBzdHJ1Y3QgU3BlY3VsYXRp
b25DaGVjazsKK3N0cnVjdCBPU1JFeGl0OwogCiAjaWZuZGVmIE5ERUJVRwogdHlwZWRlZiB2b2lk
ICgqVl9ERkdEZWJ1Z09wZXJhdGlvbl9FUCkoRXhlY1N0YXRlKiwgdm9pZCopOwpAQCAtODIsMjEg
KzgzLDIxIEBAIHN0cnVjdCBDYWxsUmVjb3JkIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3Rv
ciBmb3IgYSBjYWxsIHdpdGggYW4gZXhjZXB0aW9uIGhhbmRsZXIuCi0gICAgQ2FsbFJlY29yZChN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsLCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZXhjZXB0aW9uQ2hlY2ssIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykK
KyAgICBDYWxsUmVjb3JkKE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1
bmN0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25DaGVjaywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQogICAgICAgICA6IG1fY2FsbChjYWxsKQogICAgICAgICAsIG1fZnVuY3Rpb24o
ZnVuY3Rpb24pCiAgICAgICAgICwgbV9leGNlcHRpb25DaGVjayhleGNlcHRpb25DaGVjaykKLSAg
ICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBtX2NvZGVP
cmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25zKHRydWUpCiAg
ICAgewogICAgIH0KIAogICAgIC8vIENvbnN0cnVjdG9yIGZvciBhIGNhbGwgdGhhdCBtYXkgY2F1
c2UgZXhjZXB0aW9ucywgYnV0IHdoaWNoIGFyZSBoYW5kbGVkCiAgICAgLy8gdGhyb3VnaCBzb21l
IG1lY2hhbmlzbSBvdGhlciB0aGFuIHRoZSBpbi1saW5lIGV4Y2VwdGlvbiBoYW5kbGVyLgotICAg
IENhbGxSZWNvcmQoTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCwgRnVuY3Rpb25QdHIgZnVuY3Rp
b24sIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbykKKyAgICBDYWxsUmVjb3JkKE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGwsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiAgICAgICAgIDogbV9jYWxsKGNhbGwpCiAgICAgICAgICwgbV9mdW5jdGlvbihmdW5j
dGlvbikKLSAgICAgICAgLCBtX2V4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAg
LCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX2hhbmRsZXNFeGNlcHRpb25z
KHRydWUpCiAgICAgewogICAgIH0KQEAgLTEwNCw3ICsxMDUsNyBAQCBzdHJ1Y3QgQ2FsbFJlY29y
ZCB7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgbV9jYWxsOwogICAgIEZ1bmN0aW9uUHRyIG1f
ZnVuY3Rpb247CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9leGNlcHRpb25DaGVjazsKLSAg
ICBFeGNlcHRpb25JbmZvIG1fZXhjZXB0aW9uSW5mbzsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9y
aWdpbjsKICAgICBib29sIG1faGFuZGxlc0V4Y2VwdGlvbnM7CiB9OwogCkBAIC0xOTIsOSArMTkz
LDkgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIE5vdGlmeSB0aGUgSklUIG9mIGEgY2FsbCB0
aGF0IGRvZXMgbm90IHJlcXVpcmUgbGlua2luZy4KLSAgICB2b2lkIG5vdGlmeUNhbGwoQ2FsbCBj
YWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIHZvaWQgbm90aWZ5Q2FsbChDYWxsIGNh
bGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxSZWNvcmQoY2FsbCwgRnVuY3Rpb25QdHIoKSwgZXhjZXB0aW9uSW5mbykpOworICAgICAg
ICBtX2NhbGxzLmFwcGVuZChDYWxsUmVjb3JkKGNhbGwsIEZ1bmN0aW9uUHRyKCksIGNvZGVPcmln
aW4pKTsKICAgICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRo
b3V0IGFuIGV4Y2VwdGlvbiBjaGVjay4KQEAgLTIwNSwyMCArMjA2LDIwIEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICAvLyBBZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGFuIGV4Y2Vw
dGlvbiBjaGVjay4KLSAgICBDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3Qg
RnVuY3Rpb25QdHImIGZ1bmN0aW9uLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAgIENhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24s
IENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxs
ID0gY2FsbCgpOwogICAgICAgICBKdW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihO
b25aZXJvLCBBYnNvbHV0ZUFkZHJlc3MoJmdsb2JhbERhdGEoKS0+ZXhjZXB0aW9uKSk7Ci0gICAg
ICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxsLCBmdW5jdGlvbiwgZXhj
ZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9jYWxscy5hcHBlbmQoQ2Fs
bFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25DaGVjaywgY29kZU9yaWdp
bikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0KICAgICAKICAgICAvLyBB
ZGQgYSBjYWxsIG91dCBmcm9tIEpJVCBjb2RlLCB3aXRoIGEgZmFzdCBleGNlcHRpb24gY2hlY2sg
dGhhdCB0ZXN0cyBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uCi0gICAgQ2FsbCBhcHBlbmRD
YWxsV2l0aEZhc3RFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIHVu
c2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgQ2FsbCBhcHBlbmRDYWxsV2l0aEZhc3RFeGNlcHRp
b25DaGVjayhjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIENvZGVPcmlnaW4gY29kZU9yaWdp
bikKICAgICB7CiAgICAgICAgIENhbGwgZnVuY3Rpb25DYWxsID0gY2FsbCgpOwogICAgICAgICBK
dW1wIGV4Y2VwdGlvbkNoZWNrID0gYnJhbmNoVGVzdFB0cihaZXJvLCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbHMuYXBwZW5kKENhbGxSZWNvcmQoZnVuY3Rpb25DYWxs
LCBmdW5jdGlvbiwgZXhjZXB0aW9uQ2hlY2ssIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9j
YWxscy5hcHBlbmQoQ2FsbFJlY29yZChmdW5jdGlvbkNhbGwsIGZ1bmN0aW9uLCBleGNlcHRpb25D
aGVjaywgY29kZU9yaWdpbikpOwogICAgICAgICByZXR1cm4gZnVuY3Rpb25DYWxsOwogICAgIH0K
ICAgICAKQEAgLTMxMSw5ICszMTIsOSBAQCBwdWJsaWM6CiAgICAgICAgIG1fbWV0aG9kR2V0cy5h
cHBlbmQoTWV0aG9kR2V0UmVjb3JkKHNsb3dDYWxsLCBzdHJ1Y3RUb0NvbXBhcmUsIHByb3RvT2Jq
LCBwcm90b1N0cnVjdFRvQ29tcGFyZSwgcHV0RnVuY3Rpb24pKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2ssIGJvb2wgaXNDYWxsLCB1bnNpZ25lZCBleGNlcHRpb25JbmZvKQorICAg
IHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGwsIENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrLCBib29sIGlzQ2FsbCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAg
IHsKLSAgICAgICAgbV9qc0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dD
YWxsLCB0YXJnZXRUb0NoZWNrLCBpc0NhbGwsIGV4Y2VwdGlvbkluZm8pKTsKKyAgICAgICAgbV9q
c0NhbGxzLmFwcGVuZChKU0NhbGxSZWNvcmQoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0No
ZWNrLCBpc0NhbGwsIGNvZGVPcmlnaW4pKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0zMjYsOCAr
MzI3LDE0IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaWxsTnVtZXJpY1RvRG91YmxlKE5vZGVJbmRl
eCwgRlBSUmVnLCBHUFJSZWcgdGVtcG9yYXJ5KTsKICAgICB2b2lkIGZpbGxJbnQzMlRvSW50ZWdl
cihOb2RlSW5kZXgsIEdQUlJlZyk7CiAgICAgdm9pZCBmaWxsVG9KUyhOb2RlSW5kZXgsIEdQUlJl
Zyk7CisgICAgCisjaWYgRU5BQkxFKERGR19PU1JfRVhJVCkKKyAgICB2b2lkIGV4aXRTcGVjdWxh
dGl2ZVdpdGhPU1IoY29uc3QgT1NSRXhpdCYsIFNwZWN1bGF0aW9uUmVjb3ZlcnkqLCBWZWN0b3I8
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiYgZGVjb2RlZENvZGVNYXApOworICAgIHZvaWQgbGlu
a09TUkV4aXRzKFNwZWN1bGF0aXZlSklUJik7CisjZWxzZQogICAgIHZvaWQganVtcEZyb21TcGVj
dWxhdGl2ZVRvTm9uU3BlY3VsYXRpdmUoY29uc3QgU3BlY3VsYXRpb25DaGVjayYsIGNvbnN0IEVu
dHJ5TG9jYXRpb24mLCBTcGVjdWxhdGlvblJlY292ZXJ5KiwgTm9kZVRvUmVnaXN0ZXJNYXAmIGNo
ZWNrTm9kZVRvUmVnaXN0ZXJNYXAsIE5vZGVUb1JlZ2lzdGVyTWFwJiBlbnRyeU5vZGVUb1JlZ2lz
dGVyTWFwKTsKICAgICB2b2lkIGxpbmtTcGVjdWxhdGlvbkNoZWNrcyhTcGVjdWxhdGl2ZUpJVCYs
IE5vblNwZWN1bGF0aXZlSklUJik7CisjZW5kaWYKIAogICAgIC8vIFRoZSBnbG9iYWxEYXRhLCB1
c2VkIHRvIGFjY2VzcyBjb25zdGFudHMgc3VjaCBhcyB0aGUgdlB0cnMuCiAgICAgSlNHbG9iYWxE
YXRhKiBtX2dsb2JhbERhdGE7CkBAIC0zODYsMTIgKzM5MywxMiBAQCBwcml2YXRlOgogICAgIH07
CiAgICAgCiAgICAgc3RydWN0IEpTQ2FsbFJlY29yZCB7Ci0gICAgICAgIEpTQ2FsbFJlY29yZChD
YWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywg
Ym9vbCBpc0NhbGwsIHVuc2lnbmVkIGV4Y2VwdGlvbkluZm8pCisgICAgICAgIEpTQ2FsbFJlY29y
ZChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVj
aywgYm9vbCBpc0NhbGwsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICAgICAgICAgIDogbV9m
YXN0Q2FsbChmYXN0Q2FsbCkKICAgICAgICAgICAgICwgbV9zbG93Q2FsbChzbG93Q2FsbCkKICAg
ICAgICAgICAgICwgbV90YXJnZXRUb0NoZWNrKHRhcmdldFRvQ2hlY2spCiAgICAgICAgICAgICAs
IG1faXNDYWxsKGlzQ2FsbCkKLSAgICAgICAgICAgICwgbV9leGNlcHRpb25JbmZvKGV4Y2VwdGlv
bkluZm8pCisgICAgICAgICAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICB7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zOTksNyArNDA2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgQ2FsbCBtX3Nsb3dDYWxsOwogICAgICAgICBEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0NoZWNr
OwogICAgICAgICBib29sIG1faXNDYWxsOwotICAgICAgICB1bnNpZ25lZCBtX2V4Y2VwdGlvbklu
Zm87CisgICAgICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIH07CiAKICAgICBWZWN0
b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVydHlBY2Nlc3NlczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NDk3NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw4ICsyNiwx
MyBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKwogLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9y
IGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBocy4KICNkZWZp
bmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAKKy8vIEVtaXQgbG9nZ2luZyBmb3IgT1NSIGV4
aXQgdmFsdWUgcmVjb3ZlcmllcyBhdCBldmVyeSBub2RlLCBub3QganVzdCBub2RlcyB0aGF0Cisv
LyBhY3R1YWxseSBoYXMgc3BlY3VsYXRpb24gY2hlY2tzLgorI2RlZmluZSBFTkFCTEVfREZHX1ZF
UkJPU0VfVkFMVUVfUkVDT1ZFUklFUyAwCiAvLyBFbmFibGUgZ2VuZXJhdGlvbiBvZiBkeW5hbWlj
IGNoZWNrcyBpbnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uCiAjaWYgIUFTU0VSVF9ESVNBQkxF
RAogI2RlZmluZSBFTkFCTEVfREZHX0pJVF9BU1NFUlQgMQpAQCAtNTAsNiArNTUsOCBAQAogI2Rl
ZmluZSBERkdfREVCVUdfTE9DQUxfRElTQkFMRSAwCiAvLyBEaXNhYmxlIHRoZSBTcGVjdWxhdGl2
ZUpJVCB3aXRob3V0IGhhdmluZyB0byB0b3VjaCBQbGF0Zm9ybS5oIQogI2RlZmluZSBERkdfREVC
VUdfTE9DQUxfRElTQkFMRV9TUEVDVUxBVElWRSAwCisvLyBEaXNhYmxlIHRoZSBub24tc3BlY3Vs
YXRpdmUgSklUIGFuZCB1c2UgT1NSIGluc3RlYWQuCisjZGVmaW5lIEVOQUJMRV9ERkdfT1NSX0VY
SVQgRU5BQkxFX1RJRVJFRF9DT01QSUxBVElPTgogLy8gR2VuZXJhdGUgc3RhdHMgb24gaG93IHN1
Y2Nlc3NmdWwgd2Ugd2VyZSBpbiBtYWtpbmcgdXNlIG9mIHRoZSBERkcgaml0LCBhbmQgcmVtYWlu
aW5nIG9uIHRoZSBob3QgcGF0aC4KICNkZWZpbmUgRU5BQkxFX0RGR19TVUNDRVNTX1NUQVRTIDAK
IApAQCAtNzIsOSArNzksMzIgQEAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3Rl
cikgPQogdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5kZXg7CiBzdGF0aWMgY29uc3QgTm9kZUluZGV4
IE5vTm9kZSA9IFVJTlRfTUFYOwogCi0vLyBJbmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZy
b20gYW4gZXhjZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZvcm1hdGlvbi4KKy8vIElu
Zm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJvbSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRs
ZXIvc291cmNlIGluZm9ybWF0aW9uLAorLy8gYW5kIHRvIGltcGxlbWVudCBPU1IuCiAvLyAoUHJl
c2VudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgotdHlwZWRlZiB1aW50MzJf
dCBFeGNlcHRpb25JbmZvOworY2xhc3MgQ29kZU9yaWdpbiB7CitwdWJsaWM6CisgICAgQ29kZU9y
aWdpbigpCisgICAgICAgIDogbV9ieXRlY29kZUluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dWlu
dDMyX3Q+OjptYXgoKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IENvZGVPcmln
aW4odWludDMyX3QgYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgOiBtX2J5dGVjb2RlSW5kZXgoYnl0
ZWNvZGVJbmRleCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVjb2RlSW5kZXggIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46
Om1heCgpOyB9CisgICAgCisgICAgdWludDMyX3QgYnl0ZWNvZGVJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNTZXQoKSk7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlSW5k
ZXg7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXg7
Cit9OwogCiAvLyBFbnRyaWVzIGluIHRoZSBOb2RlVHlwZSBlbnVtIChiZWxvdykgYXJlIGNvbXBv
c2VkIG9mIGFuIGlkLCBhIHJlc3VsdCB0eXBlIChwb3NzaWJseSBub25lKQogLy8gYW5kIHNvbWUg
YWRkaXRpb25hbCBpbmZvcm1hdGl2ZSBmbGFncyAobXVzdCBnZW5lcmF0ZSwgaXMgY29uc3RhbnQs
IGV0YykuCkBAIC0zNTcsOSArMzg3LDkgQEAgc3RydWN0IE5vZGUgewogICAgIGVudW0gVmFyQXJn
VGFnIHsgVmFyQXJnIH07CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGggdXAgdG8gMyBj
aGlsZHJlbiwgbm8gaW1tZWRpYXRlIHZhbHVlLgotICAgIE5vZGUoTm9kZVR5cGUgb3AsIEV4Y2Vw
dGlvbkluZm8gZXhjZXB0aW9uSW5mbywgTm9kZUluZGV4IGNoaWxkMSA9IE5vTm9kZSwgTm9kZUlu
ZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9IE5vTm9kZSkKKyAgICBOb2Rl
KE5vZGVUeXBlIG9wLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE5vZGVJbmRleCBjaGlsZDEgPSBO
b05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05v
ZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhleGNlcHRpb25J
bmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAgLCBtX3ZpcnR1
YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQo
MCkKICAgICB7CkBAIC0zNzAsOSArNDAwLDkgQEAgc3RydWN0IE5vZGUgewogICAgIH0KIAogICAg
IC8vIENvbnN0cnVjdCBhIG5vZGUgd2l0aCB1cCB0byAzIGNoaWxkcmVuIGFuZCBhbiBpbW1lZGlh
dGUgdmFsdWUuCi0gICAgTm9kZShOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25J
bmZvLCBPcEluZm8gaW1tLCBOb2RlSW5kZXggY2hpbGQxID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hp
bGQyID0gTm9Ob2RlLCBOb2RlSW5kZXggY2hpbGQzID0gTm9Ob2RlKQorICAgIE5vZGUoTm9kZVR5
cGUgb3AsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgT3BJbmZvIGltbSwgTm9kZUluZGV4IGNoaWxk
MSA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMiA9IE5vTm9kZSwgTm9kZUluZGV4IGNoaWxkMyA9
IE5vTm9kZSkKICAgICAgICAgOiBvcChvcCkKLSAgICAgICAgLCBleGNlcHRpb25JbmZvKGV4Y2Vw
dGlvbkluZm8pCisgICAgICAgICwgY29kZU9yaWdpbihjb2RlT3JpZ2luKQogICAgICAgICAsIG1f
dmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZD
b3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbS5tX3ZhbHVlKQpAQCAtMzg0LDkgKzQxNCw5
IEBAIHN0cnVjdCBOb2RlIHsKICAgICB9CiAKICAgICAvLyBDb25zdHJ1Y3QgYSBub2RlIHdpdGgg
dXAgdG8gMyBjaGlsZHJlbiBhbmQgdHdvIGltbWVkaWF0ZSB2YWx1ZXMuCi0gICAgTm9kZShOb2Rl
VHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBleGNlcHRpb25JbmZvLCBPcEluZm8gaW1tMSwgT3BJbmZv
IGltbTIsIE5vZGVJbmRleCBjaGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05v
ZGUsIE5vZGVJbmRleCBjaGlsZDMgPSBOb05vZGUpCisgICAgTm9kZShOb2RlVHlwZSBvcCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIE5vZGVJbmRleCBj
aGlsZDEgPSBOb05vZGUsIE5vZGVJbmRleCBjaGlsZDIgPSBOb05vZGUsIE5vZGVJbmRleCBjaGls
ZDMgPSBOb05vZGUpCiAgICAgICAgIDogb3Aob3ApCi0gICAgICAgICwgZXhjZXB0aW9uSW5mbyhl
eGNlcHRpb25JbmZvKQorICAgICAgICAsIGNvZGVPcmlnaW4oY29kZU9yaWdpbikKICAgICAgICAg
LCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1f
cmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCkBAIC0zOTksOSAr
NDI5LDkgQEAgc3RydWN0IE5vZGUgewogICAgIH0KICAgICAKICAgICAvLyBDb25zdHJ1Y3QgYSBu
b2RlIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgY2hpbGRyZW4gYW5kIHR3byBpbW1lZGlhdGUg
dmFsdWVzLgotICAgIE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBvcCwgRXhjZXB0aW9uSW5mbyBl
eGNlcHRpb25JbmZvLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIHVuc2lnbmVkIGZpcnN0Q2hp
bGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQorICAgIE5vZGUoVmFyQXJnVGFnLCBOb2RlVHlwZSBv
cCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBPcEluZm8gaW1tMSwgT3BJbmZvIGltbTIsIHVuc2ln
bmVkIGZpcnN0Q2hpbGQsIHVuc2lnbmVkIG51bUNoaWxkcmVuKQogICAgICAgICA6IG9wKG9wKQot
ICAgICAgICAsIGV4Y2VwdGlvbkluZm8oZXhjZXB0aW9uSW5mbykKKyAgICAgICAgLCBjb2RlT3Jp
Z2luKGNvZGVPcmlnaW4pCiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1
YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8o
aW1tMS5tX3ZhbHVlKQpAQCAtNjQzLDYgKzY3MywxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IEFTU0VSVCghKG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgcmV0dXJuIGNoaWxkcmVu
LmZpeGVkLmNoaWxkMTsKICAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyB1c2VmdWwgaWYgeW91
IHdhbnQgdG8gZG8gYSBmYXN0IGNoZWNrIG9uIHRoZSBmaXJzdCBjaGlsZAorICAgIC8vIGJlZm9y
ZSBhbHNvIGRvaW5nIGEgY2hlY2sgb24gdGhlIG9wY29kZS4gVXNlIHRoaXMgd2l0aCBjYXJlIGFu
ZAorICAgIC8vIGF2b2lkIGl0IGlmIHBvc3NpYmxlLgorICAgIE5vZGVJbmRleCBjaGlsZDFVbmNo
ZWNrZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuLmZpeGVkLmNoaWxkMTsKKyAg
ICB9CiAKICAgICBOb2RlSW5kZXggY2hpbGQyKCkKICAgICB7CkBAIC02NzEsNyArNzA5LDcgQEAg
c3RydWN0IE5vZGUgewogICAgIC8vIFRoaXMgZW51bSB2YWx1ZSBkZXNjcmliZXMgdGhlIHR5cGUg
b2YgdGhlIG5vZGUuCiAgICAgTm9kZVR5cGUgb3A7CiAgICAgLy8gVXNlZCB0byBsb29rIHVwIGV4
Y2VwdGlvbiBoYW5kbGluZyBpbmZvcm1hdGlvbiAoY3VycmVudGx5IGltcGxlbWVudGVkIGFzIGEg
Ynl0ZWNvZGUgaW5kZXgpLgotICAgIEV4Y2VwdGlvbkluZm8gZXhjZXB0aW9uSW5mbzsKKyAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW47CiAgICAgLy8gUmVmZXJlbmNlcyB0byB1cCB0byAzIGNoaWxk
cmVuICgwIGZvciBubyBjaGlsZCkuCiAgICAgdW5pb24gewogICAgICAgICBzdHJ1Y3QgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b25TcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw2ICs0MzQsOSBAQCB2
b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0FyaXRoT3AoTm9kCiAKIHZvaWQgTm9uU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3ImIGNoZWNrSXRl
cmF0b3IsIE5vZGUmIG5vZGUpCiB7CisjaWYgRU5BQkxFKERGR19PU1JfRVhJVCkKKyAgICBVTlVT
RURfUEFSQU0oY2hlY2tJdGVyYXRvcik7CisjZWxzZQogICAgIC8vIENoZWNrIGZvciBzcGVjdWxh
dGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0aGUKICAg
ICAvLyBzcGVjdWxhdGl2ZSBwYXRoLiBEbyBub3QgY2hlY2sgZm9yIE5vZGVJbmRleCAwLCBzaW5j
ZSB0aGlzIGlzIGNoZWNrZWQKICAgICAvLyBpbiB0aGUgb3V0ZXJtb3N0IGNvbXBpbGUgbGF5ZXIs
IGF0IHRoZSBoZWFkIG9mIHRoZSBub24tc3BlY3VsYXRpdmUgcGF0aApAQCAtNDQyLDYgKzQ0NSw3
IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAvLyBhcyBz
cGVjdWxhdGlvbiBjaGVja3MgYXQgdGhpcyBpbmRleCkuCiAgICAgaWYgKG1fY29tcGlsZUluZGV4
ICYmIGNoZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkKICAgICAg
ICAgdHJhY2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgTm9kZVR5cGUgb3Ag
PSBub2RlLm9wOwogCkBAIC0xMjgzLDggKzEyODcsMTAgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShTcGVjdWxhdAogdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVj
dWxhdGlvbkNoZWNrSW5kZXhJdGVyYXRvciYgY2hlY2tJdGVyYXRvcikKIHsKICAgICAvLyBDaGVj
ayBmb3Igc3BlY3VsYXRpb24gY2hlY2tzIGFkZGVkIGF0IGZ1bmN0aW9uIGVudHJ5IChjaGVja2lu
ZyBhcmd1bWVudCB0eXBlcykuCisjaWYgIUVOQUJMRShERkdfT1NSX0VYSVQpCiAgICAgaWYgKGNo
ZWNrSXRlcmF0b3IuaGFzQ2hlY2tBdEluZGV4KG1fY29tcGlsZUluZGV4KSkKICAgICAgICAgdHJh
Y2tFbnRyeShtX2ppdC5sYWJlbCgpKTsKKyNlbmRpZgogCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJ
bmRleCk7CiAgICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9i
bG9ja3Muc2l6ZSgpOyArK21fYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ0LDYgKzE0NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUlu
dEkKICAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKIH0KIAorI2lmICFFTkFCTEUoREZHX09TUl9F
WElUKQogU3BlY3VsYXRpb25DaGVjazo6U3BlY3VsYXRpb25DaGVjayhNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkK
ICAgICA6IG1fY2hlY2soY2hlY2spCiAgICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUlu
ZGV4KQpAQCAtMTcwLDYgKzE3MSw3MyBAQCBTcGVjdWxhdGlvbkNoZWNrOjpTcGVjdWxhdGlvbkNo
ZWNrKE1hY3JvCiAgICAgICAgICAgICBtX2ZwckluZm9baXRlci5pbmRleCgpXS5ub2RlSW5kZXgg
PSBOb05vZGU7CiAgICAgfQogfQorI2VuZGlmCisKKyNpZm5kZWYgTkRFQlVHCit2b2lkIFZhbHVl
U291cmNlOjpkdW1wKEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBmcHJpbnRmKG91dCwgIk5vZGUo
JWQpIiwgbV9ub2RlSW5kZXgpOworfQorCit2b2lkIFZhbHVlUmVjb3Zlcnk6OmR1bXAoRklMRSog
b3V0KSBjb25zdAoreworICAgIHN3aXRjaCAodGVjaG5pcXVlKCkpIHsKKyAgICBjYXNlIEFscmVh
ZHlJblJlZ2lzdGVyRmlsZToKKyAgICAgICAgZnByaW50ZihvdXQsICItIik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgSW5HUFI6CisgICAgICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEdQUklu
Zm86OmRlYnVnTmFtZShncHIoKSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVuYm94ZWRJ
bnQzMkluR1BSOgorICAgICAgICBmcHJpbnRmKG91dCwgImludDMyKCUlJXMpIiwgR1BSSW5mbzo6
ZGVidWdOYW1lKGdwcigpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5GUFI6CisgICAg
ICAgIGZwcmludGYob3V0LCAiJSUlcyIsIEZQUkluZm86OmRlYnVnTmFtZShmcHIoKSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOgorICAgICAgICBm
cHJpbnRmKG91dCwgIiolZCIsIHZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgZnByaW50ZihvdXQsICJbJXNdIiwgY29uc3RhbnQo
KS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEb250S25vdzoKKyAg
ICAgICAgZnByaW50ZihvdXQsICIhIik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGZwcmludGYob3V0LCAiPyVkIiwgdGVjaG5pcXVlKCkpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisjZW5kaWYKKworI2lmIEVOQUJMRShERkdfT1NSX0VYSVQpCitPU1JFeGl0OjpP
U1JFeGl0KE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1
bnNpZ25lZCByZWNvdmVyeUluZGV4KQorICAgIDogbV9jaGVjayhjaGVjaykKKyAgICAsIG1fbm9k
ZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCisgICAgLCBtX2J5dGVjb2RlSW5kZXgoaml0LT5t
X2J5dGVjb2RlSW5kZXhGb3JPU1IpCisgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRl
eCkKKyAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICwgbV92
YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkpCisgICAgLCBtX2xhc3RTZXRPcGVyYW5k
KGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKK3sKKyAgICBBU1NFUlQobV9ieXRlY29kZUluZGV4ICE9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSk7CisgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2FyZ3VtZW50
KQorICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSBqaXQtPmNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKGppdC0+bV9hcmd1bWVudHNbYXJndW1lbnRdKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZh
cmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisg
ICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxlXSA9IGppdC0+Y29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3Ioaml0LT5tX3ZhcmlhYmxlc1t2YXJpYWJsZV0pOworfQorCisjaWZuZGVmIE5ERUJVRwordm9p
ZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsrYXJndW1lbnQpCisg
ICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XS5kdW1wKG91dCk7CisgICAgZnByaW50ZihvdXQs
ICIgOiAiKTsKKyAgICBmb3IgKHVuc2lnbmVkIHZhcmlhYmxlID0gMDsgdmFyaWFibGUgPCBtX3Zh
cmlhYmxlcy5zaXplKCk7ICsrdmFyaWFibGUpCisgICAgICAgIG1fdmFyaWFibGVzW3ZhcmlhYmxl
XS5kdW1wKG91dCk7Cit9CisjZW5kaWYKKyNlbmRpZgogCiBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVJbnQoTm9kZUluZGV4IG5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJu
Rm9ybWF0KQogewpAQCAtNjUwLDYgKzcxOCw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAgICAv
LyBTZXRMb2NhbCBkb3VibGVzIGFzIGEgaGludCBhcyB0byB3aGVyZSBhIG5vZGUgd2lsbCBiZSBz
dG9yZWQgYW5kCisgICAgICAgIC8vIGFzIGEgc3BlY3VsYXRpb24gcG9pbnQuIFNvIGJlZm9yZSB3
ZSBzcGVjdWxhdGUgbWFrZSBzdXJlIHRoYXQgd2UKKyAgICAgICAgLy8ga25vdyB3aGVyZSB0aGUg
Y2hpbGQgb2YgdGhpcyBub2RlIG5lZWRzIHRvIGdvIGluIHRoZSB2aXJ0dWFsCisgICAgICAgIC8v
IHJlZ2lzdGVyIGZpbGUuCisgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOworICAgICAgICAK
KyAgICAgICAgLy8gQXMgZmFyIGFzIE9TUiBpcyBjb25jZXJuZWQsIHdlJ3JlIG9uIHRoZSBieXRl
Y29kZSBpbmRleCBjb3JyZXNwb25kaW5nCisgICAgICAgIC8vIHRvIHRoZSAqbmV4dCogaW5zdHJ1
Y3Rpb24sIHNpbmNlIHdlJ3ZlIGFscmVhZHkgImV4ZWN1dGVkIiB0aGUKKyAgICAgICAgLy8gU2V0
TG9jYWwgYW5kIHdoYXRldmVyIG90aGVyIERGRyBOb2RlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBzYW1lCisgICAgICAgIC8vIGJ5dGVjb2RlIGluZGV4IGFzIHRoZSBTZXRMb2NhbC4KKyAgICAg
ICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9PSBub2RlLmNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpKTsKKyAgICAgICAgTm9kZSYgbmV4dE5vZGUgPSBtX2ppdC5ncmFwaCgpW21fY29t
cGlsZUluZGV4KzFdOworICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBhc3NlcnRpb24gd2lsbCBm
YWlsIGlmIHdlIGV2ZXIgZW1pdCBtdWx0aXBsZSBTZXRMb2NhbCdzIGZvcgorICAgICAgICAvLyBh
IHNpbmdsZSBieXRlY29kZSBpbnN0cnVjdGlvbi4gVGhhdCdzIHVubGlrZWx5IHRvIGhhcHBlbi4g
QnV0IGlmCisgICAgICAgIC8vIGl0IGRvZXMsIHRoZSBzb2x1dGlvbiBpcyB0byB0byBoYXZlIHRo
aXMgcGVyZm9ybSBhIHNlYXJjaCB1bnRpbAorICAgICAgICAvLyBpdCBmaW5kcyBhIE5vZGUgd2l0
aCBhIGRpZmZlcmVudCBieXRlY29kZSBpbmRleCBmcm9tIHRoZSBvbmUgd2UndmUKKyAgICAgICAg
Ly8gZ290LCBhbmQgdG8gYWJzdHJhY3RseSBleGVjdXRlIHRoZSBTZXRMb2NhbCdzIGFsb25nIHRo
ZSB3YXkuIE9yLAorICAgICAgICAvLyBiZXR0ZXIgeWV0LCBoYW5kbGUgYWxsIG9mIHRoZSBTZXRM
b2NhbCdzIGF0IG9uY2U6IGFic3RyYWN0IGludGVycHJldAorICAgICAgICAvLyBhbGwgb2YgdGhl
bSwgdGhlbiBlbWl0IGNvZGUgZm9yIGFsbCBvZiB0aGVtLCB3aXRoIE9TUiBleGl0aW5nIHRvCisg
ICAgICAgIC8vIHRoZSBuZXh0IG5vbi1TZXRMb2NhbCBpbnN0cnVjdGlvbi4gTm90ZSB0aGUgc3Bl
Y2lhbCBjYXNlIGZvciB3aGVuCisgICAgICAgIC8vIGJvdGggdGhpcyBTZXRMb2NhbCBhbmQgdGhl
IG5leHQgb3AgaGF2ZSBhIGJ5dGVjb2RlIGluZGV4IG9mIDA7IHRoaXMKKyAgICAgICAgLy8gb2Nj
dXJzIGZvciBTZXRMb2NhbCdzIGdlbmVyYXRlZCBhdCB0aGUgdG9wIG9mIHRoZSBjb2RlIGJsb2Nr
IHRvCisgICAgICAgIC8vIGluaXRpYWxpemUgbG9jYWxzIHRvIHVuZGVmaW5lZC4gSWRlYWxseSwg
d2UnZCBoYXZlIGEgd2F5IG9mIG1hcmtpbmcKKyAgICAgICAgLy8gaW4gdGhlIENvZGVPcmlnaW4g
dGhhdCBhIFNldExvY2FsIGlzIHN5bnRoZXRpYy4gVGhpcyB3aWxsIG1ha2UgdGhlCisgICAgICAg
IC8vIGFzc2VydGlvbiBtb3JlIHNlbnNpYmxlLWxvb2tpbmcuIFdlIHNob3VsZCB0aGVuIGFsc28g
YXNzZXJ0IHRoYXQKKyAgICAgICAgLy8gc3ludGhldGljIFNldExvY2FsJ3MgZG9uJ3QgaGF2ZSBz
cGVjdWxhdGlvbiBjaGVja3MsIHNpbmNlIHRoZXkKKyAgICAgICAgLy8gc2hvdWxkIG9ubHkgYmUg
ZHJvcHBpbmcgdmFsdWVzIHRoYXQgd2Ugc3RhdGljYWxseSBrbm93IHdlIGFyZQorICAgICAgICAv
LyBhbGxvd2VkIHRvIGRyb3AgaW50byB0aGUgdmFyaWFibGVzLiBERkdQcm9wYWdhdG9yIHdpbGwg
Z3VhcmFudGVlCisgICAgICAgIC8vIHRoaXMsIHNpbmNlIGl0IHNob3VsZCBoYXZlIGF0IGxlYXN0
IGFuIGFwcHJveGltYXRpb24gKGlmIG5vdAorICAgICAgICAvLyBleGFjdCBrbm93bGVkZ2UpIG9m
IHRoZSB0eXBlIG9mIHRoZSBTZXRMb2NhbCdzIGNoaWxkIG5vZGUsIGFuZAorICAgICAgICAvLyBz
aG91bGQgbWVyZ2UgdGhhdCBpbmZvcm1hdGlvbiBpbnRvIHRoZSBsb2NhbCB0aGF0IGlzIGJlaW5n
IHNldC4KKyAgICAgICAgQVNTRVJUKG1fYnl0ZWNvZGVJbmRleEZvck9TUiAhPSBuZXh0Tm9kZS5j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgoKQorICAgICAgICAgICAgICAgfHwgKCFtX2J5dGVjb2Rl
SW5kZXhGb3JPU1IgJiYgIW5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpKSk7Cisg
ICAgICAgIG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IG5leHROb2RlLmNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCgpOworICAgICAgICAKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBl
ID0gbV9qaXQuZ3JhcGgoKS5nZXRQcmVkaWN0aW9uKG5vZGUubG9jYWwoKSk7CiAgICAgICAgIGlm
IChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CkBAIC02NzAsNiAr
Nzc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKHZhbHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSW5kaWNhdGUgdGhhdCBpdCdzIG5vIGxv
bmdlciBuZWNlc3NhcnkgdG8gcmV0cmlldmUgdGhlIHZhbHVlIG9mCisgICAgICAgIC8vIHRoaXMg
Ynl0ZWNvZGUgdmFyaWFibGUgZnJvbSByZWdpc3RlcnMgb3Igb3RoZXIgbG9jYXRpb25zIGluIHRo
ZSByZWdpc3RlciBmaWxlLgorICAgICAgICB2YWx1ZVNvdXJjZVJlZmVyZW5jZUZvck9wZXJhbmQo
bm9kZS5sb2NhbCgpKSA9IFZhbHVlU291cmNlKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMTM2OSwxMSArMTQ3NywxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9Ci0KKyAgICAKICAgICBpZiAobm9k
ZS5oYXNSZXN1bHQoKSAmJiBub2RlLm11c3RHZW5lcmF0ZSgpKQogICAgICAgICB1c2UobV9jb21w
aWxlSW5kZXgpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTW92SGludChOb2Rl
JiBub2RlKQoreworICAgIEFTU0VSVChub2RlLm9wID09IFNldExvY2FsKTsKKyAgICAKKyAgICBz
ZXROb2RlSW5kZXhGb3JPcGVyYW5kKG5vZGUuY2hpbGQxKCksIG5vZGUubG9jYWwoKSk7CisgICAg
bV9sYXN0U2V0T3BlcmFuZCA9IG5vZGUubG9jYWwoKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShCYXNpY0Jsb2NrJiBibG9jaykKIHsKICAgICBBU1NFUlQobV9jb21waWxlT2th
eSk7CkBAIC0xMzgyLDM1ICsxNDk4LDc0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
QmFzaWNCbG9jayYKICNpZiBFTkFCTEUoREZHX0pJVF9CUkVBS19PTl9FVkVSWV9CTE9DSykKICAg
ICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICBtX2FyZ3VtZW50c1tpXSA9
IFZhbHVlU291cmNlKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5z
aXplKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZSgpOworICAg
IG1fbGFzdFNldE9wZXJhbmQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAg
IG1fYnl0ZWNvZGVJbmRleEZvck9TUiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKTsKIAogICAgIGZvciAoOyBtX2NvbXBpbGVJbmRleCA8IGJsb2NrLmVuZDsgKyttX2NvbXBp
bGVJbmRleCkgewogICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVttX2NvbXBpbGVJ
bmRleF07Ci0gICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIAorICAgICAgICBtX2J5dGVjb2RlSW5kZXhGb3JPU1IgPSBub2Rl
LmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCgpOworICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2Vu
ZXJhdGUoKSkgeworI2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiU3BlY3VsYXRpdmVKSVQgc2tpcHBpbmcgTm9kZSBAJWQgKGJjIyV1KSBh
dCBKSVQgb2Zmc2V0IDB4JXggICAgICIsIChpbnQpbV9jb21waWxlSW5kZXgsIG5vZGUuY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4KCksIG1faml0LmRlYnVnT2Zmc2V0KCkpOworI2VuZGlmCisgICAg
ICAgICAgICBpZiAobm9kZS5vcCA9PSBTZXRMb2NhbCkKKyAgICAgICAgICAgICAgICBjb21waWxl
TW92SGludChub2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIAogI2lmIEVOQUJM
RShERkdfREVCVUdfVkVSQk9TRSkKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2
ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIGF0IEpJVCBvZmZzZXQgMHgleCAgICIsIChpbnQpbV9j
b21waWxlSW5kZXgsIG1faml0LmRlYnVnT2Zmc2V0KCkpOworICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJTcGVjdWxhdGl2ZUpJVCBnZW5lcmF0aW5nIE5vZGUgQCVkIChiYyMldSkgYXQgSklU
IG9mZnNldCAweCV4ICAgIiwgKGludCltX2NvbXBpbGVJbmRleCwgbm9kZS5jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgoKSwgbV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKICNpZiBFTkFCTEUo
REZHX0pJVF9CUkVBS19PTl9FVkVSWV9OT0RFKQotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7
CisgICAgICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKLSAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgICAgICBjb21waWxlKG5vZGUpOwotICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpIHsKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAg
IGNvbXBpbGUobm9kZSk7CisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpIHsKICNpZiBF
TkFCTEUoRFlOQU1JQ19URVJNSU5BVEVfU1BFQ1VMQVRJT04pCi0gICAgICAgICAgICBtX2NvbXBp
bGVPa2F5ID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2suZW5kOwot
ICAgICAgICAgICAgY2xlYXJHZW5lcmF0aW9uSW5mbygpOworICAgICAgICAgICAgICAgIG1fY29t
cGlsZU9rYXkgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fY29tcGlsZUluZGV4ID0gYmxvY2su
ZW5kOworICAgICAgICAgICAgICAgIGNsZWFyR2VuZXJhdGlvbkluZm8oKTsKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorI2lmIEVO
QUJMRShERkdfREVCVUdfVkVSQk9TRSkKKyAgICAgICAgICAgIGlmIChub2RlLmhhc1Jlc3VsdCgp
KSB7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25J
bmZvW25vZGUudmlydHVhbFJlZ2lzdGVyKCldOworICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiLT4gJXMsIHZyIyVkIiwgZGF0YUZvcm1hdFRvU3RyaW5nKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSksIChpbnQpbm9kZS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgaWYg
KGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiwgJXMiLCBGUFJJbmZvOjpk
ZWJ1Z05hbWUoaW5mby5mcHIoKSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiwgJXMiLCBHUFJJbmZvOjpkZWJ1Z05h
bWUoaW5mby5ncHIoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiAgICAiKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiICAgICIpOwogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KKyAgICAgICAgCisjaWYgRU5BQkxFKERGR19WRVJCT1NFX1ZBTFVFX1JFQ09WRVJJ
RVMpCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQgPSAtbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVn
aXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyBvcGVyYW5kIDwgLVJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsgKytvcGVyYW5kKQorICAgICAgICAgICAgY29tcHV0ZVZhbHVl
UmVjb3ZlcnlGb3Iob3BlcmFuZCkuZHVtcChzdGRlcnIpOworICAgICAgICAKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIgOiAiKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IG9wZXJhbmQg
PSAwOyBvcGVyYW5kIDwgKGludCltX3ZhcmlhYmxlcy5zaXplKCk7ICsrb3BlcmFuZCkKKyAgICAg
ICAgICAgIGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKG9wZXJhbmQpLmR1bXAoc3RkZXJyKTsKKyNl
bmRpZgorICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQotICAgICAgICBpZiAo
bm9kZS5oYXNSZXN1bHQoKSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiLT4gJXNcbiIs
IGRhdGFGb3JtYXRUb1N0cmluZyhtX2dlbmVyYXRpb25JbmZvW25vZGUudmlydHVhbFJlZ2lzdGVy
KCldLnJlZ2lzdGVyRm9ybWF0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAjZW5kaWYK
LSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9
CiB9CiAKQEAgLTE0MTksNiArMTU3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
QmFzaWNCbG9jayYKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7
CiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7CisgICAgbV9ieXRlY29kZUluZGV4Rm9yT1NS
ID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5tX251bVBh
cmFtZXRlcnM7ICsraSkgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gKFZpcnR1YWxSZWdpc3RlcikobV9qaXQuY29kZUJsb2NrKCktPnRoaXNSZWdpc3RlcigpICsg
aSk7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG1faml0LmdyYXBoKCku
Z2V0UHJlZGljdGlvbih2aXJ0dWFsUmVnaXN0ZXIpOwpAQCAtMTQ1NCw3ICsxNjEwLDcgQEAgYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgQVNTRVJUKCFtX2NvbXBpbGVJbmRleCk7
CiAgICAgZm9yIChtX2Jsb2NrID0gMDsgbV9ibG9jayA8IG1faml0LmdyYXBoKCkubV9ibG9ja3Mu
c2l6ZSgpOyArK21fYmxvY2spIHsKICAgICAgICAgY29tcGlsZSgqbV9qaXQuZ3JhcGgoKS5tX2Js
b2Nrc1ttX2Jsb2NrXSk7Ci0jaWYgIUVOQUJMRShEWU5BTUlDX09QVElNSVpBVElPTikKKyNpZiAh
RU5BQkxFKERZTkFNSUNfVEVSTUlOQVRFX1NQRUNVTEFUSU9OKQogICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAgLTE0NjMsNiAr
MTYxOSwxMTkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK1ZhbHVlUmVjb3ZlcnkgU3BlY3VsYXRpdmVKSVQ6OmNvbXB1dGVWYWx1ZVJlY292
ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJiB2YWx1ZVNvdXJjZSkKK3sKKyAgICBpZiAoIXZhbHVl
U291cmNlLmlzU2V0KCkpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjphbHJlYWR5SW5S
ZWdpc3RlckZpbGUoKTsKKworICAgIGlmIChtX2ppdC5pc0NvbnN0YW50KHZhbHVlU291cmNlLm5v
ZGVJbmRleCgpKSkKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KG1faml0
LnZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlU291cmNlLm5vZGVJbmRleCgpKSk7CisgICAgCisgICAg
Tm9kZSogbm9kZVB0ciA9ICZtX2ppdC5ncmFwaCgpW3ZhbHVlU291cmNlLm5vZGVJbmRleCgpXTsK
KyAgICBpZiAoIW5vZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAgLy8gSXQncyBs
ZWdpdGltYXRlbHkgZGVhZC4gQXMgaW4sIG5vYm9keSB3aWxsIGV2ZXIgdXNlIHRoaXMgbm9kZSwg
b3Igb3BlcmFuZCwKKyAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBtYWtl
IHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIAorICAgIEdlbmVyYXRpb25J
bmZvKiBpbmZvUHRyID0gJm1fZ2VuZXJhdGlvbkluZm9bbm9kZVB0ci0+dmlydHVhbFJlZ2lzdGVy
KCldOworICAgIGlmICghaW5mb1B0ci0+YWxpdmUoKSB8fCBpbmZvUHRyLT5ub2RlSW5kZXgoKSAh
PSB2YWx1ZVNvdXJjZS5ub2RlSW5kZXgoKSkgeworICAgICAgICAvLyBUcnkgdG8gc2VlIGlmIHRo
ZXJlIGlzIGFuIGFsdGVybmF0ZSBub2RlIHRoYXQgd291bGQgY29udGFpbiB0aGUgdmFsdWUgd2Ug
d2FudC4KKyAgICAgICAgLy8gVGhlcmUgYXJlIGZvdXIgcG9zc2liaWxpdGllczoKKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVmFsdWVUb051bWJlcjogSWYgdGhlIG9ubHkgbGl2ZSB2ZXJzaW9uIG9m
IHRoZSB2YWx1ZSBpcyBhIFZhbHVlVG9OdW1iZXIgbm9kZQorICAgICAgICAvLyAgICB0aGVuIGl0
IG1lYW5zIHRoYXQgYWxsIHJlbWFpbmluZyB1c2VzIG9mIHRoZSB2YWx1ZSB3b3VsZCBoYXZlIHBl
cmZvcm1lZCBhCisgICAgICAgIC8vICAgIFZhbHVlVG9OdW1iZXIgY29udmVyc2lvbiBhbnl3YXku
IFRodXMsIHdlIGNhbiBzdWJzdGl0dXRlIFZhbHVlVG9OdW1iZXIuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIFZhbHVlVG9JbnQzMjogTGlrZXdpc2UsIGlmIHRoZSBvbmx5IHJlbWFpbmluZyBsaXZl
IHZlcnNpb24gb2YgdGhlIHZhbHVlIGlzCisgICAgICAgIC8vICAgIFZhbHVlVG9JbnQzMiwgdGhl
biB3ZSBjYW4gdXNlIGl0LiBCdXQgaWYgdGhlcmUgaXMgYm90aCBhIFZhbHVlVG9JbnQzMgorICAg
ICAgICAvLyAgICBhbmQgYSBWYWx1ZVRvTnVtYmVyLCB0aGVuIHdlIGJldHRlciBnbyB3aXRoIFZh
bHVlVG9OdW1iZXIgYmVjYXVzZSBpdAorICAgICAgICAvLyAgICBtZWFucyB0aGF0IHNvbWUgcmVt
YWluaW5nIHVzZXMgd291bGQgaGF2ZSBjb252ZXJ0ZWQgdG8gbnVtYmVyIHdoaWxlCisgICAgICAg
IC8vICAgIG90aGVycyB3b3VsZCBoYXZlIGNvbnZlcnRlZCB0byBJbnQzMi4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVUludDMyVG9OdW1iZXI6IElmIHRoZSBvbmx5IGxpdmUgdmVyc2lvbiBvZiB0
aGUgdmFsdWUgaXMgYSBVSW50MzJUb051bWJlcgorICAgICAgICAvLyAgICB0aGVuIHRoZSBvbmx5
IHJlbWFpbmluZyB1c2VzIGFyZSBvbmVzIHRoYXQgd2FudCBhIHByb3Blcmx5IGZvcm1lZCBudW1i
ZXIKKyAgICAgICAgLy8gICAgcmF0aGVyIHRoYW4gYSBVSW50MzIgaW50ZXJtZWRpYXRlLgorICAg
ICAgICAvLworICAgICAgICAvLyBUaGUgcmV2ZXJzZSBvZiB0aGUgYWJvdmU6IFRoaXMgbm9kZSBj
b3VsZCBiZSBhIFVJbnQzMlRvTnVtYmVyLCBidXQgaXRzCisgICAgICAgIC8vICAgIGFsdGVybmF0
aXZlIGlzIHN0aWxsIGFsaXZlLiBUaGlzIG1lYW5zIHRoYXQgdGhlIG9ubHkgcmVtYWluaW5nIHVz
ZXMgb2YKKyAgICAgICAgLy8gICAgdGhlIG51bWJlciB3b3VsZCBiZSBmaW5lIHdpdGggYSBVSW50
MzIgaW50ZXJtZWRpYXRlLgorICAgICAgICAKKyAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVQdHItPm9wID09IFVJbnQzMlRvTnVtYmVyKSB7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbm9kZVB0ci0+Y2hpbGQxKCk7CisgICAg
ICAgICAgICBub2RlUHRyID0gJm1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgICAg
IGluZm9QdHIgPSAmbV9nZW5lcmF0aW9uSW5mb1tub2RlUHRyLT52aXJ0dWFsUmVnaXN0ZXIoKV07
CisgICAgICAgICAgICBpZiAoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5kZXgo
KSA9PSBub2RlSW5kZXgpCisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWVUb051bWJlckluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
VG9JbnQzMkluZGV4ID0gTm9Ob2RlOworICAgICAgICAgICAgTm9kZUluZGV4IHVpbnQzMlRvTnVt
YmVySW5kZXggPSBOb05vZGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgdmlydHVhbFJlZ2lzdGVyID0gMDsgdmlydHVhbFJlZ2lzdGVyIDwgbV9nZW5lcmF0aW9uSW5m
by5zaXplKCk7ICsrdmlydHVhbFJlZ2lzdGVyKSB7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlv
bkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAg
ICAgICAgICAgaWYgKCFpbmZvLmFsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGlmIChpbmZvLm5vZGVJbmRleCgpID09IE5vTm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
aml0LmdyYXBoKClbaW5mby5ub2RlSW5kZXgoKV07CisgICAgICAgICAgICAgICAgaWYgKG5vZGUu
Y2hpbGQxVW5jaGVja2VkKCkgIT0gdmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewor
ICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb051bWJlcjoKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWVUb051bWJlckluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlVG9JbnQzMkluZGV4ID0gaW5mby5ub2RlSW5kZXgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoK
KyAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXJJbmRleCA9IGluZm8ubm9kZUluZGV4
KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleFRvVXNl
OworICAgICAgICAgICAgaWYgKHZhbHVlVG9OdW1iZXJJbmRleCAhPSBOb05vZGUpCisgICAgICAg
ICAgICAgICAgbm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvTnVtYmVySW5kZXg7CisgICAgICAgICAg
ICBlbHNlIGlmICh2YWx1ZVRvSW50MzJJbmRleCAhPSBOb05vZGUpCisgICAgICAgICAgICAgICAg
bm9kZUluZGV4VG9Vc2UgPSB2YWx1ZVRvSW50MzJJbmRleDsKKyAgICAgICAgICAgIGVsc2UgaWYg
KHVpbnQzMlRvTnVtYmVySW5kZXggIT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIG5vZGVJbmRl
eFRvVXNlID0gdWludDMyVG9OdW1iZXJJbmRleDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBub2RlSW5kZXhUb1VzZSA9IE5vTm9kZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKG5vZGVJbmRleFRvVXNlICE9IE5vTm9kZSkgeworICAgICAgICAgICAgICAgIG5vZGVQ
dHIgPSAmbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhUb1VzZV07CisgICAgICAgICAgICAgICAgaW5m
b1B0ciA9ICZtX2dlbmVyYXRpb25JbmZvW25vZGVQdHItPnZpcnR1YWxSZWdpc3RlcigpXTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSAmJiBpbmZvUHRyLT5ub2RlSW5k
ZXgoKSA9PSBub2RlSW5kZXhUb1VzZSk7CisgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kKQor
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkp
OworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoaW5mb1B0ci0+YWxpdmUoKSk7CisKKyAgICBpZiAo
aW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0Tm9uZSkgeworICAgICAgICBp
ZiAoaW5mb1B0ci0+cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKQorICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluRlBSKGluZm9QdHItPmZwcigpKTsKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGluZm9QdHItPmdwcigpLCBpbmZvUHRyLT5y
ZWdpc3RlckZvcm1hdCgpKTsKKyAgICB9CisgICAgaWYgKGluZm9QdHItPnNwaWxsRm9ybWF0KCkg
IT0gRGF0YUZvcm1hdE5vbmUpCisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFj
ZWRJblJlZ2lzdGVyRmlsZShzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG5vZGVQdHItPnZp
cnR1YWxSZWdpc3RlcigpKSk7CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFZhbHVlUmVjb3ZlcnkoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDk0OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw3IEBAIHByaXZh
dGU6CiAgICAgR1BSUmVnIG1fc3JjOwogfTsKIAorI2lmICFFTkFCTEUoREZHX09TUl9FWElUKQog
Ly8gPT09IFNwZWN1bGF0aW9uQ2hlY2sgPT09CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgcmVjb3Jk
cyBhIGJhaWwtb3V0IGZyb20gdGhlIHNwZWN1bGF0aXZlIHBhdGgsCkBAIC05MSw3ICs5MiwxOTYg
QEAgc3RydWN0IFNwZWN1bGF0aW9uQ2hlY2sgewogICAgIFJlZ2lzdGVySW5mbyBtX2ZwckluZm9b
RlBSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnNdOwogfTsKIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9y
PFNwZWN1bGF0aW9uQ2hlY2ssIDE2PiBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOworI2VuZGlmIC8v
ICFFTkFCTEUoREZHX09TUl9FWElUKQogCitjbGFzcyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6Cisg
ICAgVmFsdWVTb3VyY2UoKQorICAgICAgICA6IG1fbm9kZUluZGV4KE5vTm9kZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKE5vZGVJbmRleCBub2RlSW5kZXgp
CisgICAgICAgIDogbV9ub2RlSW5kZXgobm9kZUluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc1NldCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ub2RlSW5kZXgg
IT0gTm9Ob2RlOworICAgIH0KKyAgICAKKyAgICBOb2RlSW5kZXggbm9kZUluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbm9kZUlu
ZGV4OworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91
dCkgY29uc3Q7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgTm9kZUluZGV4IG1fbm9kZUlu
ZGV4OworfTsKKyAgICAKKy8vIERlc2NyaWJlcyBob3cgdG8gcmVjb3ZlciBhIGdpdmVuIGJ5dGVj
b2RlIHZpcnR1YWwgcmVnaXN0ZXIgYXQgYSBnaXZlbgorLy8gY29kZSBwb2ludC4KK2VudW0gVmFs
dWVSZWNvdmVyeVRlY2huaXF1ZSB7CisgICAgLy8gSXQncyBhbHJlYWR5IGluIHRoZSByZWdpc3Rl
ciBmaWxlIGF0IHRoZSByaWdodCBsb2NhdGlvbi4KKyAgICBBbHJlYWR5SW5SZWdpc3RlckZpbGUs
CisgICAgLy8gSXQncyBpbiBhIHJlZ2lzdGVyLgorICAgIEluR1BSLAorICAgIFVuYm94ZWRJbnQz
MkluR1BSLAorICAgIEluRlBSLAorICAgIC8vIEl0J3MgaW4gdGhlIHJlZ2lzdGVyIGZpbGUsIGJ1
dCBhdCBhIGRpZmZlcmVudCBsb2NhdGlvbi4KKyAgICBEaXNwbGFjZWRJblJlZ2lzdGVyRmlsZSwK
KyAgICAvLyBJdCdzIGEgY29uc3RhbnQuCisgICAgQ29uc3RhbnQsCisgICAgLy8gRG9uJ3Qga25v
dyBob3cgdG8gcmVjb3ZlciBpdC4KKyAgICBEb250S25vdworfTsKKworY2xhc3MgVmFsdWVSZWNv
dmVyeSB7CitwdWJsaWM6CisgICAgVmFsdWVSZWNvdmVyeSgpCisgICAgICAgIDogbV90ZWNobmlx
dWUoRG9udEtub3cpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFsdWVSZWNvdmVy
eSBhbHJlYWR5SW5SZWdpc3RlckZpbGUoKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IEFscmVhZHlJblJlZ2lzdGVyRmls
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFZhbHVl
UmVjb3ZlcnkgaW5HUFIoR1BSUmVnIGdwciwgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOworICAgICAgICBW
YWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgaWYgKGRhdGFGb3JtYXQgPT0gRGF0YUZvcm1h
dEludGVnZXIpCisgICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBVbmJveGVkSW50MzJJ
bkdQUjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0Lm1fdGVjaG5pcXVlID0gSW5H
UFI7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5ncHIgPSBncHI7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluRlBSKEZQUlJl
ZyBmcHIpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fdGVjaG5pcXVlID0gSW5GUFI7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5mcHIgPSBm
cHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1
ZVJlY292ZXJ5IGRpc3BsYWNlZEluUmVnaXN0ZXJGaWxlKFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFs
UmVnKQorICAgIHsKKyAgICAgICAgVmFsdWVSZWNvdmVyeSByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluUmVnaXN0ZXJGaWxlOworICAgICAgICByZXN1bHQu
bV9zb3VyY2UudmlydHVhbFJlZyA9IHZpcnR1YWxSZWc7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGNvbnN0YW50KEpTVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlY292ZXJ5IHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fdGVjaG5pcXVlID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3NvdXJjZS5jb25z
dGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIFZhbHVlUmVjb3ZlcnlUZWNobmlxdWUgdGVjaG5pcXVlKCkgY29uc3Qg
eyByZXR1cm4gbV90ZWNobmlxdWU7IH0KKyAgICAKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX3RlY2huaXF1ZSA9PSBJbkdQUiB8fCBtX3RlY2huaXF1ZSA9
PSBVbmJveGVkSW50MzJJbkdQUik7CisgICAgICAgIHJldHVybiBtX3NvdXJjZS5ncHI7CisgICAg
fQorICAgIAorICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dGVjaG5pcXVlID09IEluRlBSKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLmZwcjsKKyAgICB9
CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlcigpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV90ZWNobmlxdWUgPT0gRGlzcGxhY2VkSW5SZWdpc3RlckZpbGUp
OworICAgICAgICByZXR1cm4gbV9zb3VyY2UudmlydHVhbFJlZzsKKyAgICB9CisgICAgCisgICAg
SlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV90ZWNobmlx
dWUgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKG1fc291cmNl
LmNvbnN0YW50KTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChG
SUxFKiBvdXQpIGNvbnN0OworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIFZhbHVlUmVjb3Zl
cnlUZWNobmlxdWUgbV90ZWNobmlxdWU7CisgICAgdW5pb24geworICAgICAgICBHUFJSZWcgZ3By
OworICAgICAgICBGUFJSZWcgZnByOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJl
ZzsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7CisgICAgfSBtX3NvdXJjZTsKK307
CisKKyNpZiBFTkFCTEUoREZHX09TUl9FWElUKQorLy8gPT09IE9TUkV4aXQgPT09CisvLworLy8g
VGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBwYXRo
IGJ5CisvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCitzdHJ1Y3QgT1NSRXhpdCB7CisgICAg
T1NSRXhpdChNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCBy
ZWNvdmVyeUluZGV4ID0gMCk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbV9jaGVj
azsKKyAgICBOb2RlSW5kZXggbV9ub2RlSW5kZXg7CisgICAgdW5zaWduZWQgbV9ieXRlY29kZUlu
ZGV4OworICAgIAorICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKKyAgICAKKyAgICAvLyBD
b252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1ZVJlY292ZXJpZXMgd2hpbGUgYmVp
bmcKKyAgICAvLyBnZW5lcmljIG92ZXIgYXJndW1lbnQgdmVyc3VzIHZhcmlhYmxlLgorICAgIGlu
dCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCkg
KyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KKyAgICBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJl
Y292ZXJ5KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA8IChpbnQp
bV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2luZGV4
XTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW2luZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgp
XTsKKyAgICB9CisgICAgYm9vbCBpc0FyZ3VtZW50KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4g
aW5kZXggPCAoaW50KW1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIGJvb2wgaXNWYXJpYWJsZShp
bnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0FyZ3VtZW50KGluZGV4KTsgfQorICAgIGludCBh
cmd1bWVudEZvckluZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBp
bmRleDsKKyAgICB9CisgICAgaW50IHZhcmlhYmxlRm9ySW5kZXgoaW50IGluZGV4KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOworICAgIH0K
KyAgICBpbnQgb3BlcmFuZEZvckluZGV4KGludCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChpbmRleCA8IChpbnQpbV9hcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplOworICAgICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3VtZW50cy5zaXplKCk7CisgICAg
fQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsK
KyNlbmRpZgorICAgIAorICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX2FyZ3VtZW50czsK
KyAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7CisgICAgaW50IG1fbGFz
dFNldE9wZXJhbmQ7Cit9OwordHlwZWRlZiBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgMTY+IE9T
UkV4aXRWZWN0b3I7CisjZW5kaWYgLy8gRU5BQkxFKERGR19PU1JfRVhJVCkKIAogLy8gPT09IFNw
ZWN1bGF0aXZlSklUID09PQogLy8KQEAgLTEwNSwyMSArMjk1LDI1IEBAIHR5cGVkZWYgU2VnbWVu
dGVkVmVjdG9yPFNwZWN1bGF0aW9uQ2hlY2sKIC8vIG9ubHkgc3BlY3VsYXRpdmVseSBiZWVuIGFz
c2VydGVkKSB0aHJvdWdoIHRoZSBkYXRhZmxvdy4KIGNsYXNzIFNwZWN1bGF0aXZlSklUIDogcHVi
bGljIEpJVENvZGVHZW5lcmF0b3IgewogICAgIGZyaWVuZCBzdHJ1Y3QgU3BlY3VsYXRpb25DaGVj
azsKKyAgICBmcmllbmQgc3RydWN0IE9TUkV4aXQ7CiBwdWJsaWM6Ci0gICAgU3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsZXImIGppdCkKLSAgICAgICAgOiBKSVRDb2RlR2VuZXJhdG9yKGppdCwgdHJ1
ZSkKLSAgICAgICAgLCBtX2NvbXBpbGVPa2F5KHRydWUpCi0gICAgewotICAgIH0KKyAgICBTcGVj
dWxhdGl2ZUpJVChKSVRDb21waWxlciYpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CiAKICAgICAv
LyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBiYWlsLW91dHMgZnJvbSB0aGUgc3BlY3VsYXRpdmUgcGF0
aCwKICAgICAvLyBhbmQgYWRkaXRpb25hbCByZWNvdmVyeSBpbmZvcm1hdGlvbi4KKyNpZiAhRU5B
QkxFKERGR19PU1JfRVhJVCkKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlv
bkNoZWNrcygpCiAgICAgewogICAgICAgICByZXR1cm4gbV9zcGVjdWxhdGlvbkNoZWNrczsKICAg
ICB9CisjZWxzZQorICAgIE9TUkV4aXRWZWN0b3ImIG9zckV4aXRzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29zckV4aXRzOworICAgIH0KKyNlbmRpZgogICAgIFNwZWN1bGF0aW9uUmVjb3Zl
cnkqIHNwZWN1bGF0aW9uUmVjb3Zlcnkoc2l6ZV90IGluZGV4KQogICAgIHsKICAgICAgICAgLy8g
U3BlY3VsYXRpb25DaGVjazo6bV9yZWNvdmVyeUluZGV4IGlzIG9mZnNldCBieSAxLApAQCAtMTM5
LDYgKzMzMyw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEpJVENvZGVHZW5lcmF0b3I7
CiAgICAgCiAgICAgdm9pZCBjb21waWxlKE5vZGUmKTsKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50
KE5vZGUmKTsKICAgICB2b2lkIGNvbXBpbGUoQmFzaWNCbG9jayYpOwogCiAgICAgdm9pZCBjaGVj
a0FyZ3VtZW50VHlwZXMoKTsKQEAgLTIwMyw3ICszOTgsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKKyNpZiAhRU5B
QkxFKERGR19PU1JfRVhJVCkKICAgICAgICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5hcHBlbmQoU3Bl
Y3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlzKSk7CisjZWxzZQorICAgICAgICBtX29zckV4
aXRzLmFwcGVuZChPU1JFeGl0KGp1bXBUb0ZhaWwsIHRoaXMpKTsKKyNlbmRpZgogICAgIH0KICAg
ICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCiAg
ICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWws
IGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQpAQCAtMjExLDcgKzQxMCwxMSBA
QCBwcml2YXRlOgogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIG1fc3BlY3VsYXRpb25SZWNvdmVyeUxpc3QuYXBwZW5kKHJlY292ZXJ5KTsK
KyNpZiAhRU5BQkxFKERGR19PU1JfRVhJVCkKICAgICAgICAgbV9zcGVjdWxhdGlvbkNoZWNrcy5h
cHBlbmQoU3BlY3VsYXRpb25DaGVjayhqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVj
b3ZlcnlMaXN0LnNpemUoKSkpOworI2Vsc2UKKyAgICAgICAgbV9vc3JFeGl0cy5hcHBlbmQoT1NS
RXhpdChqdW1wVG9GYWlsLCB0aGlzLCBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlMaXN0LnNpemUoKSkp
OworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRl
cm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KQEAgLTIzNCwxOCArNDM3LDY1IEBA
IHByaXZhdGU6CiAKICAgICB0ZW1wbGF0ZTxib29sIHN0cmljdD4KICAgICBHUFJSZWcgZmlsbFNw
ZWN1bGF0ZUludEludGVybmFsKE5vZGVJbmRleCwgRGF0YUZvcm1hdCYgcmV0dXJuRm9ybWF0KTsK
LQorICAgIAogICAgIC8vIEl0IGlzIHBvc3NpYmxlLCBkdXJpbmcgc3BlY3VsYXRpdmUgZ2VuZXJh
dGlvbiwgdG8gcmVhY2ggYSBzaXR1YXRpb24gaW4gd2hpY2ggd2UKICAgICAvLyBjYW4gc3RhdGlj
YWxseSBkZXRlcm1pbmUgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwgKGZvciBleGFtcGxlLCB3aGVu
IHR3byBub2RlcwogICAgIC8vIHdpbGwgbWFrZSBjb25mbGljdGluZyBzcGVjdWxhdGlvbnMgYWJv
dXQgdGhlIHNhbWUgb3BlcmFuZCkuIEluIHN1Y2ggY2FzZXMgdGhpcwogICAgIC8vIGZsYWcgaXMg
Y2xlYXJlZCwgaW5kaWNhdGluZyBubyBmdXJ0aGVyIGNvZGUgZ2VuZXJhdGlvbiBzaG91bGQgdGFr
ZSBwbGFjZS4KICAgICBib29sIG1fY29tcGlsZU9rYXk7CisjaWYgIUVOQUJMRShERkdfT1NSX0VY
SVQpCiAgICAgLy8gVGhpcyB2ZWN0b3IgdHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxh
dGl2ZSBwYXRoIHRvIHRoZSBub24tc3BlY3VsYXRpdmUgb25lLgogICAgIFNwZWN1bGF0aW9uQ2hl
Y2tWZWN0b3IgbV9zcGVjdWxhdGlvbkNoZWNrczsKKyNlbHNlCisgICAgLy8gVGhpcyB2ZWN0b3Ig
dHJhY2tzIGJhaWwtb3V0cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoIHRvIHRoZSBvbGQgSklU
LgorICAgIE9TUkV4aXRWZWN0b3IgbV9vc3JFeGl0czsKKyNlbmRpZgogICAgIC8vIFNvbWUgYmFp
bC1vdXRzIG5lZWQgdG8gcmVjb3JkIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVjb3JkaW5nIHNw
ZWNpZmljIHJlY292ZXJ5CiAgICAgLy8gdG8gYmUgcGVyZm9ybWVkIChmb3IgZXhhbXBsZSwgb24g
ZGV0ZWN0ZWQgb3ZlcmZsb3cgZnJvbSBhbiBhZGQsIHdlIG1heSBuZWVkIHRvCiAgICAgLy8gcmV2
ZXJzZSB0aGUgYWRkaXRpb24gaWYgYW4gb3BlcmFuZCBpcyBiZWluZyBvdmVyd3JpdHRlbikuCiAg
ICAgVmVjdG9yPFNwZWN1bGF0aW9uUmVjb3ZlcnksIDE2PiBtX3NwZWN1bGF0aW9uUmVjb3ZlcnlM
aXN0OworICAgIAorICAgIC8vIFRyYWNraW5nIGZvciB3aGljaCBub2RlcyBhcmUgY3VycmVudGx5
IGhvbGRpbmcgdGhlIHZhbHVlcyBvZiBhcmd1bWVudHMgYW5kIGJ5dGVjb2RlCisgICAgLy8gb3Bl
cmFuZC1pbmRleGVkIHZhcmlhYmxlcy4KKworICAgIFZhbHVlU291cmNlIHZhbHVlU291cmNlRm9y
T3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZVNvdXJjZVJl
ZmVyZW5jZUZvck9wZXJhbmQob3BlcmFuZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm9k
ZUluZGV4Rm9yT3BlcmFuZChOb2RlSW5kZXggbm9kZUluZGV4LCBpbnQgb3BlcmFuZCkKKyAgICB7
CisgICAgICAgIHZhbHVlU291cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChvcGVyYW5kKSA9IFZhbHVl
U291cmNlKG5vZGVJbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyB3aXRoIGNh
cmUsIHNpbmNlIGl0IGJvdGggcmV0dXJucyBhIHJlZmVyZW5jZSBpbnRvIGFuIGFycmF5CisgICAg
Ly8gYW5kIHBvdGVudGlhbGx5IHJlc2l6ZXMgdGhlIGFycmF5LiBTbyBpdCB3b3VsZCBub3QgYmUg
cmlnaHQgdG8gY2FsbCB0aGlzCisgICAgLy8gdHdpY2UgYW5kIHRoZW4gcGVyZm9ybSBvcGVyYW5k
cyBvbiBib3RoIHJlZmVyZW5jZXMsIHNpbmNlIHRoZSBvbmUgZnJvbQorICAgIC8vIHRoZSBmaXJz
dCBjYWxsIG1heSBubyBsb25nZXIgYmUgdmFsaWQuCisgICAgVmFsdWVTb3VyY2UmIHZhbHVlU291
cmNlUmVmZXJlbmNlRm9yT3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIGlmIChv
cGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0g
b3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1thcmd1bWVudF07CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICgodW5zaWduZWQpb3BlcmFuZCA+PSBtX3Zhcmlh
Ymxlcy5zaXplKCkpCisgICAgICAgICAgICBtX3ZhcmlhYmxlcy5yZXNpemUob3BlcmFuZCArIDEp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGVzW29wZXJhbmRdOworICAgIH0K
KyAgICAKKyAgICBWZWN0b3I8VmFsdWVTb3VyY2UsIDA+IG1fYXJndW1lbnRzOworICAgIFZlY3Rv
cjxWYWx1ZVNvdXJjZSwgMD4gbV92YXJpYWJsZXM7CisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7
CisgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4Rm9yT1NSOworICAgIAorICAgIFZhbHVlUmVj
b3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmKTsKKworICAg
IFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQpCisgICAg
eworICAgICAgICByZXR1cm4gY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IodmFsdWVTb3VyY2VGb3JP
cGVyYW5kKG9wZXJhbmQpKTsKKyAgICB9CiB9OwogCiAKQEAgLTQ2NSwxMSArNzE1LDE3IEBAIHBy
aXZhdGU6CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAotCiAvLyA9PT0gU3BlY3Vs
YXRpb25DaGVja0luZGV4SXRlcmF0b3IgPT09CiAvLwogLy8gVGhpcyBjbGFzcyBpcyB1c2VkIGJ5
IHRoZSBub24tc3BlY3VsYXRpdmUgSklUIHRvIGNoZWNrIHdoaWNoCiAvLyBub2RlcyByZXF1aXJl
IGVudHJ5IHBvaW50cyBmcm9tIHRoZSBzcGVjdWxhdGl2ZSBwYXRoLgorI2lmIEVOQUJMRShERkdf
T1NSX0VYSVQpCisvLyBUaGlzIGJlY29tZXMgYSBzdHViIGlmIE9TUiBpcyBlbmFibGVkLgorY2xh
c3MgU3BlY3VsYXRpb25DaGVja0luZGV4SXRlcmF0b3IgeworcHVibGljOgorICAgIFNwZWN1bGF0
aW9uQ2hlY2tJbmRleEl0ZXJhdG9yKCkgeyB9Cit9OworI2Vsc2UKIGNsYXNzIFNwZWN1bGF0aW9u
Q2hlY2tJbmRleEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICBTcGVjdWxhdGlvbkNoZWNrSW5kZXhJ
dGVyYXRvcihTcGVjdWxhdGlvbkNoZWNrVmVjdG9yJiBzcGVjdWxhdGlvbkNoZWNrcykKQEAgLTQ5
NSw3ICs3NTEsMTcgQEAgcHJpdmF0ZToKICAgICBTcGVjdWxhdGlvbkNoZWNrVmVjdG9yOjpJdGVy
YXRvciBtX2l0ZXI7CiAgICAgU3BlY3VsYXRpb25DaGVja1ZlY3Rvcjo6SXRlcmF0b3IgbV9lbmQ7
CiB9OworI2VuZGlmCiAKK2lubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklU
Q29tcGlsZXImIGppdCkKKyAgICA6IEpJVENvZGVHZW5lcmF0b3Ioaml0LCB0cnVlKQorICAgICwg
bV9jb21waWxlT2theSh0cnVlKQorICAgICwgbV9hcmd1bWVudHMoaml0LmNvZGVCbG9jaygpLT5t
X251bVBhcmFtZXRlcnMpCisgICAgLCBtX3ZhcmlhYmxlcyhqaXQuY29kZUJsb2NrKCktPm1fbnVt
VmFycykKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkKKyAgICAsIG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQzMl90Pjo6bWF4KCkpCit7Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Db21wYWN0SklUQ29kZU1hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ29tcGFjdEpJVENvZGVNYXAu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcGFjdEpJVENvZGVN
YXBfaAorI2RlZmluZSBDb21wYWN0SklUQ29kZU1hcF9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvLyBHaXZlcyB5b3UgYSBjb21wcmVzc2VkIG1h
cCBiZXR3ZWVuIGJldHdlZW4gYnl0ZWNvZGUgaW5kaWNlcyBhbmQgbWFjaGluZSBjb2RlCisvLyBl
bnRyeSBwb2ludHMuIFRoZSBjb21wcmVzc2lvbiBzaW1wbHkgdHJpZXMgdG8gdXNlIGVpdGhlciAx
LCAyLCBvciA0IGJ5dGVzIGZvcgorLy8gYW55IGdpdmVuIG9mZnNldC4gVGhlIGxhcmdlc3Qgb2Zm
c2V0IHRoYXQgY2FuIGJlIHN0b3JlZCBpcyAyXjMwLgorCisvLyBFeGFtcGxlIHVzZToKKy8vCisv
LyBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2RlciBlbmNvZGVyKG1hcCk7CisvLyBlbmNvZGVyLmFw
cGVuZChhLCBiKTsKKy8vIGVuY29kZXIuYXBwZW5kKGMsIGQpOyAvLyBwcmVjb25kaXRpb25zOiBj
ID49IGEsIGQgPj0gYgorLy8gT3duUHRyPENvbXBhY3RKSVRDb2RlTWFwPiBtYXAgPSBlbmNvZGVy
LmZpbmlzaCgpOworLy8KKy8vIEF0IHNvbWUgbGF0ZXIgdGltZToKKy8vCisvLyBWZWN0b3I8Qnl0
ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0PiBkZWNvZGVkOworLy8gbWFwLT5kZWNvZGUoZGVjb2RlZCk7
CisKK3N0cnVjdCBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQgeworICAgIEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldCgpIHsgfQorICAgIAorICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKKyAgICAgICAg
OiBtX2J5dGVjb2RlSW5kZXgoYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgLCBtX21hY2hpbmVDb2Rl
T2Zmc2V0KG1hY2hpbmVDb2RlT2Zmc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgbV9ieXRlY29kZUluZGV4OworICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7Cisg
ICAgCisgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBnZXRCeXRlY29kZUluZGV4KEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCogbWFwcGluZykKKyAgICB7CisgICAgICAgIHJldHVybiBtYXBwaW5n
LT5tX2J5dGVjb2RlSW5kZXg7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBpbmxpbmUgdW5zaWdu
ZWQgZ2V0TWFjaGluZUNvZGVPZmZzZXQoQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5n
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQ7Cisg
ICAgfQorfTsKKworY2xhc3MgQ29tcGFjdEpJVENvZGVNYXAgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIH5Db21wYWN0SklUQ29kZU1hcCgpCisgICAgeworICAg
ICAgICBpZiAobV9idWZmZXIpCisgICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7CisgICAg
fQorICAgIAorICAgIHZvaWQgZGVjb2RlKFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+
JiByZXN1bHQpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c0J5dGVjb2Rl
SW5kZXggPSAwOworICAgICAgICB1bnNpZ25lZCBwcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0g
MDsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5yZXNpemUobV9udW1iZXJPZkVudHJpZXMpOwor
ICAgICAgICB1bnNpZ25lZCBqID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fbnVtYmVyT2ZFbnRyaWVzOyArK2kpIHsKKyAgICAgICAgICAgIHByZXZpb3VzQnl0ZWNvZGVJ
bmRleCArPSBkZWNvZGVOdW1iZXIoaik7CisgICAgICAgICAgICBwcmV2aW91c01hY2hpbmVDb2Rl
T2Zmc2V0ICs9IGRlY29kZU51bWJlcihqKTsKKyAgICAgICAgICAgIHJlc3VsdFtpXS5tX2J5dGVj
b2RlSW5kZXggPSBwcmV2aW91c0J5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICByZXN1bHRbaV0u
bV9tYWNoaW5lQ29kZU9mZnNldCA9IHByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQ7CisgICAgICAg
IH0KKyAgICAgICAgQVNTRVJUKGogPT0gbV9zaXplKTsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIENvbXBhY3RKSVRDb2RlTWFwKHVpbnQ4X3QqIGJ1ZmZlciwgdW5zaWduZWQgc2l6ZSwgdW5z
aWduZWQgbnVtYmVyT2ZFbnRyaWVzKQorICAgICAgICA6IG1fYnVmZmVyKGJ1ZmZlcikKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgICwgbV9zaXplKHNpemUpCisjZW5kaWYKKyAgICAgICAg
LCBtX251bWJlck9mRW50cmllcyhudW1iZXJPZkVudHJpZXMpCisgICAgeworICAgICAgICBVTlVT
RURfUEFSQU0oc2l6ZSk7CisgICAgfQorICAgIAorICAgIHVpbnQ4X3QgYXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAg
ICByZXR1cm4gbV9idWZmZXJbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBkZWNv
ZGVOdW1iZXIodW5zaWduZWQmIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgdWludDhfdCBo
ZWFkVmFsdWUgPSBhdChpbmRleCsrKTsKKyAgICAgICAgaWYgKCEoaGVhZFZhbHVlICYgMTI4KSkK
KyAgICAgICAgICAgIHJldHVybiBoZWFkVmFsdWU7CisgICAgICAgIGlmICghKGhlYWRWYWx1ZSAm
IDY0KSkKKyAgICAgICAgICAgIHJldHVybiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1
ZSAmIH4xMjgpIDw8IDgpIHwgYXQoaW5kZXgrKyk7CisgICAgICAgIHVuc2lnbmVkIHNlY29uZCA9
IGF0KGluZGV4KyspOworICAgICAgICB1bnNpZ25lZCB0aGlyZCAgPSBhdChpbmRleCsrKTsKKyAg
ICAgICAgdW5zaWduZWQgZm91cnRoID0gYXQoaW5kZXgrKyk7CisgICAgICAgIHJldHVybiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGhlYWRWYWx1ZSAmIH4oMTI4ICsgNjQpKSA8PCAyNCkgfCAoc2Vj
b25kIDw8IDE2KSB8ICh0aGlyZCA8PCA4KSB8IGZvdXJ0aDsKKyAgICB9CisgICAgCisgICAgdWlu
dDhfdCogbV9idWZmZXI7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHVuc2lnbmVkIG1fc2l6
ZTsKKyNlbmRpZgorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZFbnRyaWVzOworICAgIAorcHVibGlj
OgorICAgIGNsYXNzIEVuY29kZXIgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShFbmNv
ZGVyKTsKKyAgICBwdWJsaWM6CisgICAgICAgIEVuY29kZXIoKTsKKyAgICAgICAgfkVuY29kZXIo
KTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgZW5zdXJlQ2FwYWNpdHlGb3IodW5zaWduZWQgbnVt
YmVyT2ZFbnRyaWVzVG9BZGQpOworICAgICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCk7CisgICAgICAgIFBhc3NPd25QdHI8
Q29tcGFjdEpJVENvZGVNYXA+IGZpbmlzaCgpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICB2b2lkIGFwcGVuZEJ5dGUodWludDhfdCB2YWx1ZSk7CisgICAgICAgIHZvaWQgZW5jb2Rl
TnVtYmVyKHVpbnQzMl90IHZhbHVlKTsKKyAgICAKKyAgICAgICAgdWludDhfdCogbV9idWZmZXI7
CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsK
KyAgICAgICAgdW5zaWduZWQgbV9udW1iZXJPZkVudHJpZXM7CisgICAgICAgIAorICAgICAgICB1
bnNpZ25lZCBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleDsKKyAgICAgICAgdW5zaWduZWQgbV9wcmV2
aW91c01hY2hpbmVDb2RlT2Zmc2V0OworICAgIH07CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIEVuY29kZXI7Cit9OworCitpbmxpbmUgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OkVu
Y29kZXIoKQorICAgIDogbV9idWZmZXIoMCkKKyAgICAsIG1fc2l6ZSgwKQorICAgICwgbV9jYXBh
Y2l0eSgwKQorICAgICwgbV9udW1iZXJPZkVudHJpZXMoMCkKKyAgICAsIG1fcHJldmlvdXNCeXRl
Y29kZUluZGV4KDApCisgICAgLCBtX3ByZXZpb3VzTWFjaGluZUNvZGVPZmZzZXQoMCkKK3sKK30K
KworaW5saW5lIENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVyOjp+RW5jb2RlcigpCit7CisgICAg
aWYgKG1fYnVmZmVyKQorICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Cit9CisgICAgICAgIAor
aW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmFwcGVuZCh1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCB1bnNpZ25lZCBtYWNoaW5lQ29kZU9mZnNldCkKK3sKKyAgICBBU1NFUlQo
Ynl0ZWNvZGVJbmRleCA+PSBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCk7CisgICAgQVNTRVJUKG1h
Y2hpbmVDb2RlT2Zmc2V0ID49IG1fcHJldmlvdXNNYWNoaW5lQ29kZU9mZnNldCk7CisgICAgZW5z
dXJlQ2FwYWNpdHlGb3IoMSk7CisgICAgZW5jb2RlTnVtYmVyKGJ5dGVjb2RlSW5kZXggLSBtX3By
ZXZpb3VzQnl0ZWNvZGVJbmRleCk7CisgICAgZW5jb2RlTnVtYmVyKG1hY2hpbmVDb2RlT2Zmc2V0
IC0gbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0KTsKKyAgICBtX3ByZXZpb3VzQnl0ZWNvZGVJ
bmRleCA9IGJ5dGVjb2RlSW5kZXg7CisgICAgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0g
bWFjaGluZUNvZGVPZmZzZXQ7CisgICAgbV9udW1iZXJPZkVudHJpZXMrKzsKK30KKworaW5saW5l
IFBhc3NPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IENvbXBhY3RKSVRDb2RlTWFwOjpFbmNvZGVy
OjpmaW5pc2goKQoreworICAgIG1fY2FwYWNpdHkgPSBtX3NpemU7CisgICAgbV9idWZmZXIgPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdFJlYWxsb2MobV9idWZmZXIsIG1fY2FwYWNpdHkpKTsK
KyAgICBPd25QdHI8Q29tcGFjdEpJVENvZGVNYXA+IHJlc3VsdCA9IGFkb3B0UHRyKG5ldyBDb21w
YWN0SklUQ29kZU1hcChtX2J1ZmZlciwgbV9zaXplLCBtX251bWJlck9mRW50cmllcykpOworICAg
IG1fYnVmZmVyID0gMDsKKyAgICBtX3NpemUgPSAwOworICAgIG1fY2FwYWNpdHkgPSAwOworICAg
IG1fbnVtYmVyT2ZFbnRyaWVzID0gMDsKKyAgICBtX3ByZXZpb3VzQnl0ZWNvZGVJbmRleCA9IDA7
CisgICAgbV9wcmV2aW91c01hY2hpbmVDb2RlT2Zmc2V0ID0gMDsKKyAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2UoKTsKK30KKyAgICAgICAgCitpbmxpbmUgdm9pZCBDb21wYWN0SklUQ29kZU1hcDo6
RW5jb2Rlcjo6YXBwZW5kQnl0ZSh1aW50OF90IHZhbHVlKQoreworICAgIEFTU0VSVChtX3NpemUg
KyAxIDw9IG1fY2FwYWNpdHkpOworICAgIG1fYnVmZmVyW21fc2l6ZSsrXSA9IHZhbHVlOworfQor
ICAgIAoraW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVuY29kZU51bWJl
cih1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBBU1NFUlQobV9zaXplICsgNCA8PSBtX2NhcGFjaXR5
KTsKKyAgICBBU1NFUlQodmFsdWUgPCAoMSA8PCAzMCkpOworICAgIGlmICh2YWx1ZSA8PSAxMjcp
IHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1
ZSk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDEyOCkpOworICAgICAgICBhcHBlbmRC
eXRlKGhlYWRWYWx1ZSk7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAxNjM4MykgeworICAgICAg
ICB1aW50OF90IGhlYWRWYWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlID4+IDgpOwor
ICAgICAgICBBU1NFUlQoIShoZWFkVmFsdWUgJiAxMjgpKTsKKyAgICAgICAgQVNTRVJUKCEoaGVh
ZFZhbHVlICYgNjQpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShoZWFkVmFsdWUgfCAxMjgpOworICAg
ICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVlKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdWludDhfdCBoZWFkVmFsdWUgPSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1
ZSA+PiAyNCk7CisgICAgICAgIEFTU0VSVCghKGhlYWRWYWx1ZSAmIDEyOCkpOworICAgICAgICBB
U1NFUlQoIShoZWFkVmFsdWUgJiA2NCkpOworICAgICAgICBhcHBlbmRCeXRlKGhlYWRWYWx1ZSB8
IDEyOCB8IDY0KTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1
ZSA+PiAxNikpOworICAgICAgICBhcHBlbmRCeXRlKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbHVl
ID4+IDgpKTsKKyAgICAgICAgYXBwZW5kQnl0ZShzdGF0aWNfY2FzdDx1aW50OF90Pih2YWx1ZSkp
OworICAgIH0KK30KKworaW5saW5lIHZvaWQgQ29tcGFjdEpJVENvZGVNYXA6OkVuY29kZXI6OmVu
c3VyZUNhcGFjaXR5Rm9yKHVuc2lnbmVkIG51bWJlck9mRW50cmllc1RvQWRkKQoreworICAgIHVu
c2lnbmVkIGNhcGFjaXR5TmVlZGVkID0gbV9zaXplICsgbnVtYmVyT2ZFbnRyaWVzVG9BZGQgKiAy
ICogNDsKKyAgICBpZiAoY2FwYWNpdHlOZWVkZWQgPiBtX2NhcGFjaXR5KSB7CisgICAgICAgIG1f
Y2FwYWNpdHkgPSBjYXBhY2l0eU5lZWRlZCAqIDI7CisgICAgICAgIG1fYnVmZmVyID0gc3RhdGlj
X2Nhc3Q8dWludDhfdCo+KGZhc3RSZWFsbG9jKG1fYnVmZmVyLCBtX2NhcGFjaXR5KSk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIENvbXBhY3RKSVRDb2RlTWFw
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDks
NiArMjA5LDExIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKIAogICAgICAg
ICBtX2xhYmVsc1ttX2J5dGVjb2RlT2Zmc2V0XSA9IGxhYmVsKCk7CiAKKyNpZiBFTkFCTEUoVElF
UkVEX0NPTVBJTEFUSU9OKQorICAgICAgICBpZiAobV9jYW5CZU9wdGltaXplZCkKKyAgICAgICAg
ICAgIG1faml0Q29kZU1hcEVuY29kZXIuYXBwZW5kKG1fYnl0ZWNvZGVPZmZzZXQsIGRpZmZlcmVu
Y2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKKyNlbmRpZgorCiAgICAgICAgIHN3
aXRjaCAobV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9w
Y29kZSkpIHsKICAgICAgICAgREVGSU5FX0JJTkFSWV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAg
ICBERUZJTkVfQklOQVJZX09QKG9wX2luKQpAQCAtMzczLDcgKzM3OCw2IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICNlbmRpZgogfQogCi0KIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUxpbmtQYXNzKCkKIHsKICAgICB1bnNpZ25lZCBqbXBUYWJsZUNvdW50ID0gbV9qbXBU
YWJsZS5zaXplKCk7CkBAIC01MDIsNiArNTA2LDggQEAgSklUQ29kZSBKSVQ6OnByaXZhdGVDb21w
aWxlKENvZGVQdHIqIGZ1bgogewogI2lmIEVOQUJMRShUSUVSRURfQ09NUElMQVRJT04pCiAgICAg
bV9jYW5CZU9wdGltaXplZCA9IG1fY29kZUJsb2NrLT5jYW5Db21waWxlV2l0aERGRygpOworICAg
IGlmIChtX2NhbkJlT3B0aW1pemVkKQorICAgICAgICBtX3N0YXJ0T2ZDb2RlID0gbGFiZWwoKTsK
ICNlbmRpZgogICAgIAogICAgIC8vIEp1c3QgYWRkIGEgbGl0dGxlIGJpdCBvZiByYW5kb21uZXNz
IHRvIHRoZSBjb2RlZ2VuCkBAIC02NDIsNiArNjQ4LDExIEBAIEpJVENvZGUgSklUOjpwcml2YXRl
Q29tcGlsZShDb2RlUHRyKiBmdW4KICAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBt
X2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8obV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZv
W2ldLnByb3BlcnR5QWNjZXNzSW5kZXgpLmNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICB9CiAKKyNp
ZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgIGlmIChtX2NhbkJlT3B0aW1pemVkKQor
ICAgICAgICBtX2NvZGVCbG9jay0+c2V0SklUQ29kZU1hcChtX2ppdENvZGVNYXBFbmNvZGVyLmZp
bmlzaCgpKTsKKyNlbmRpZgorCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1
bmN0aW9uQ29kZSAmJiBmdW5jdGlvbkVudHJ5QXJpdHlDaGVjaykKICAgICAgICAgKmZ1bmN0aW9u
RW50cnlBcml0eUNoZWNrID0gcGF0Y2hCdWZmZXIubG9jYXRpb25PZihhcml0eUNoZWNrKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3
IEBACiAjZGVmaW5lIEFTU0VSVF9KSVRfT0ZGU0VUKGFjdHVhbCwgZXhwZWN0ZWQpIEFTU0VSVF9X
SVRIX01FU1NBR0UoYWN0dWFsID09IGV4cGVjdGVkLCAiSklUIE9mZnNldCBcIiVzXCIgc2hvdWxk
IGJlICVkLCBub3QgJWQuXG4iLCAjZXhwZWN0ZWQsIHN0YXRpY19jYXN0PGludD4oZXhwZWN0ZWQp
LCBzdGF0aWNfY2FzdDxpbnQ+KGFjdHVhbCkpOwogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgog
I2luY2x1ZGUgIkpTSW50ZXJmYWNlSklULmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCkBAIC0xMDU0
LDYgKzEwNTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAjaWYgRU5BQkxFKFRJRVJF
RF9DT01QSUxBVElPTikKICAgICAgICAgYm9vbCBtX2NhbkJlT3B0aW1pemVkOworICAgICAgICBM
YWJlbCBtX3N0YXJ0T2ZDb2RlOworICAgICAgICBDb21wYWN0SklUQ29kZU1hcDo6RW5jb2RlciBt
X2ppdENvZGVNYXBFbmNvZGVyOwogI2VuZGlmCiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDYgKzE5MSw5IEBAIEpTR2xvYmFs
RGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIHBhcnNlcihuZXcgUGFyc2Vy
KQogICAgICwgaW50ZXJwcmV0ZXIoMCkKICAgICAsIGhlYXAodGhpcywgaGVhcFNpemUpCisjaWYg
RU5BQkxFKFRJRVJFRF9DT01QSUxBVElPTikKKyAgICAsIHNpemVPZkxhc3RPU1JTY3JhdGNoQnVm
ZmVyKDApCisjZW5kaWYKICAgICAsIGR5bmFtaWNHbG9iYWxPYmplY3QoMCkKICAgICAsIGNhY2hl
ZFVUQ09mZnNldChzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQogICAg
ICwgbWF4UmVlbnRyeURlcHRoKHRocmVhZFN0YWNrVHlwZSA9PSBUaHJlYWRTdGFja1R5cGVTbWFs
bCA/IE1heFNtYWxsVGhyZWFkUmVlbnRyeURlcHRoIDogTWF4TGFyZ2VUaHJlYWRSZWVudHJ5RGVw
dGgpCkBAIC0zNTYsNiArMzU5LDExIEBAIEpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSgpCiAj
aWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQogICAgIGRlbGV0ZSBtX3J0VHJhY2VMaXN0OwogI2Vu
ZGlmCisKKyNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBvc3JTY3JhdGNoQnVmZmVycy5zaXplKCk7ICsraSkKKyAgICAgICAgZmFzdEZy
ZWUob3NyU2NyYXRjaEJ1ZmZlcnNbaV0pOworI2VuZGlmCiB9CiAKIFBhc3NSZWZQdHI8SlNHbG9i
YWxEYXRhPiBKU0dsb2JhbERhdGE6OmNyZWF0ZUNvbnRleHRHcm91cChUaHJlYWRTdGFja1R5cGUg
dHlwZSwgSGVhcFNpemUgaGVhcFNpemUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTQ5NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDYg
KzIzNCwyOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIGludDY0
X3QgZGVidWdEYXRhQnVmZmVyWzY0XTsKICNlbmRpZgorI2lmIEVOQUJMRShUSUVSRURfQ09NUElM
QVRJT04pCisgICAgICAgIFZlY3Rvcjx2b2lkKj4gb3NyU2NyYXRjaEJ1ZmZlcnM7CisgICAgICAg
IHNpemVfdCBzaXplT2ZMYXN0T1NSU2NyYXRjaEJ1ZmZlcjsKKyAgICAgICAgCisgICAgICAgIHZv
aWQqIG9zclNjcmF0Y2hCdWZmZXJGb3JTaXplKHNpemVfdCBzaXplKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIXNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChzaXplID4gc2l6ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWluc3QgYSBOXjIgbWVtb3J5IHVzYWdlIHBh
dGhvbG9neSBieSBlbnN1cmluZworICAgICAgICAgICAgICAgIC8vIHRoYXQgYXQgd29yc3QsIHdl
IGdldCBhIGdlb21ldHJpYyBzZXJpZXMsIG1lYW5pbmcgdGhhdCB0aGUKKyAgICAgICAgICAgICAg
ICAvLyB0b3RhbCBtZW1vcnkgdXNhZ2UgaXMgc29tZXdoZXJlIGFyb3VuZAorICAgICAgICAgICAg
ICAgIC8vIG1heChzY3JhdGNoIGJ1ZmZlciBzaXplKSAqIDQuCisgICAgICAgICAgICAgICAgc2l6
ZU9mTGFzdE9TUlNjcmF0Y2hCdWZmZXIgPSBzaXplICogMjsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBvc3JTY3JhdGNoQnVmZmVycy5hcHBlbmQoZmFzdE1hbGxvYyhzaXplT2ZM
YXN0T1NSU2NyYXRjaEJ1ZmZlcikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXR1cm4gb3NyU2NyYXRjaEJ1ZmZlcnMubGFzdCgpOworICAgICAgICB9CisjZW5k
aWYKICNlbmRpZgogCiAgICAgICAgIEhhc2hNYXA8T3BhcXVlSlNDbGFzcyosIE9wYXF1ZUpTQ2xh
c3NDb250ZXh0RGF0YSo+IG9wYXF1ZUpTQ2xhc3NEYXRhOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDk0OTc0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3
ICsxMTksNyBAQCBKU09iamVjdCogSlNWYWx1ZTo6c3ludGhlc2l6ZVByb3RvdHlwZShFCiAjaWZu
ZGVmIE5ERUJVRwogY2hhciogSlNWYWx1ZTo6ZGVzY3JpcHRpb24oKQogewotICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qgc2l6ZSA9IDMyOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDY0
OwogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogCiAgICAgaWYgKCEqdGhpcykK
</data>
<flag name="review"
          id="103695"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="103696"
          type_id="3"
          status="-"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>